#!/bin/mksh # Interactive mksh configuration # Source login profile if not already loaded [ -z "$EDITOR" ] && . "$HOME/.profile" # Vi mode set -o vi # Prompt: user@host:dir > PS1='$(print -n "\033[34m")${USER}$(print -n "\033[0m")@$(print -n "\033[35m")$(hostname -s)$(print -n "\033[0m"):$(print -n "\033[36m")${PWD/#$HOME/\~}$(print -n "\033[0m") > ' # History HISTFILE="$HOME/.mksh_history" HISTSIZE=10000 # Core utilities alias cp='cp -iv' alias mv='mv -iv' alias rm='rm -vI' alias mkd='mkdir -pv' alias grep='grep --color=auto' alias diff='diff --color=auto' # Modern CLI replacements alias ls='eza --icons --group-directories-first' alias ll='eza -la --icons --group-directories-first' alias la='eza -a --icons --group-directories-first' alias lt='eza --tree --icons --group-directories-first' alias cat='bat --paging=never' # Shortcuts alias ka='killall' alias g='git' alias e='$EDITOR' alias v='$EDITOR' alias p='pacman' alias z='zathura' alias bin='nnn ~/.local/bin' # System alias logout='pkill -KILL -u krisyotam' alias lock='slock' alias shutdown='sudo shutdown now' alias restart='sudo reboot' # Terminal UI alias mutt='neomutt' alias top='btop' alias htop='btop' alias vim='nvim' # Claude Code alias claude='claude --dangerously-skip-permissions' # Git alias ga='git add' alias gc='git commit' alias gp='git push' alias gl='git pull' alias gs='git status' alias gd='git diff' alias gco='git checkout' alias gb='git branch' alias glog='git log --oneline --graph' # Sudo alias sv='sudo nvim' alias sp='sudo pacman' # Edit configs alias mkshrc='$EDITOR ~/.mkshrc' alias nvimrc='$EDITOR ~/.config/nvim/init.lua' # Applications alias browser='$BROWSER &' alias rss='sfeed_curses ~/.sfeed/feeds/*' alias torrent='rtorrent' # Maritime Monitoring (Monarch Suite) alias ssta='sea-surface-temperature-anomaly' alias ohci='ocean-heat-content-index' alias ssm='subsea-seismic-monitor' alias svm='supervolcano-monitor' alias kpi='kaiju-probability-index' alias mc='maritime-charts' # Application launchers (backgrounded) alias warp='warp-terminal >/dev/null 2>&1 &' alias mouse='mouseless >/dev/null 2>&1 &' # Fastfetch alias ff='fastfetch' # --- Functions --- # nnn with cd on exit n() { if [ -n "$NNNLVL" ] && [ "$NNNLVL" -ge 1 ]; then echo "nnn is already running" return fi NNN_TMPFILE="${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.lastd" export NNN_TMPFILE nnn -Q "$@" if [ -f "$NNN_TMPFILE" ]; then . "$NNN_TMPFILE" rm -f "$NNN_TMPFILE" fi } # Script editor -- pick and edit scripts in ~/.local/bin se() { choice=$(find ~/.local/bin -mindepth 1 -printf '%P\n' | fzf) [ -n "$choice" ] && [ -f "$HOME/.local/bin/$choice" ] && $EDITOR "$HOME/.local/bin/$choice" } # feedsync -- sync kris.opml into sfeedrc feedsync() { opml="$HOME/dev/krisyotam.com/public/kris.opml" if [ ! -f "$opml" ]; then echo "feedsync: $opml not found" >&2 return 1 fi sfeed_opml_import <"$opml" >"$HOME/.sfeed/sfeedrc" echo "sfeedrc updated from kris.opml" } # Launch Google Earth Pro (detached) earth() { setsid google-earth-pro >/dev/null 2>&1 & } # Zoxide (smarter cd) command -v zoxide >/dev/null 2>&1 && eval "$(zoxide init posix --hook prompt)" # Direnv command -v direnv >/dev/null 2>&1 && eval "$(direnv hook ksh)" # History logging (encrypted with SQLCipher) _kh_db="$HOME/.local/share/history/history.db" _kh_key_file="$HOME/.local/share/history/.key" _kh_log() { typeset cmd="$1" exit_code="$2" pwd_path="$PWD" [ -z "$cmd" ] && return case "$cmd" in history*) return ;; esac [ -f "$_kh_key_file" ] || return [ -f "$_kh_db" ] || return typeset escaped_cmd=$(print -r -- "$cmd" | sed "s/'/''/g") typeset escaped_pwd=$(print -r -- "$pwd_path" | sed "s/'/''/g") typeset key=$(cat "$_kh_key_file") (sqlcipher "$_kh_db" "PRAGMA key = '$key'; INSERT INTO terminal_history (command, exit_code, pwd, shell) VALUES ('$escaped_cmd', $exit_code, '$escaped_pwd', 'mksh');" &) >/dev/null 2>&1 } # PS4 trap to capture commands for history logging _kh_last_cmd="" trap '_kh_last_cmd=$(fc -ln -1 2>/dev/null | sed "s/^[[:space:]]*//")' DEBUG PROMPT_COMMAND='_kh_log "$_kh_last_cmd" "$?"'