#!/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" "$?"'