export HISTFILESIZE=10000 export HISTCONTROL=ignoredups export HISTFILE=$HOME/.cache/mksh_history export PAGER="less" export FCEDIT=nvim export EDITOR="nvim" export WORDCHARS="*?_-.[]~=&!#$%^(){}<>" export QUOTING_STYLE=literal ulimit -c unlimited stty -ixon bind '^l'=clear-screen bind '^k'=kill-line bind '^j'=kill-to-eol bind '^e'=edit-line # alias dot='/usr/bin/git --work-tree=$DOTS --git-dir=$DOTS/.git' \\builtin alias c='clear' q='exit' df='df -h' \\builtin alias ..='cd ..' ...='cd ../..' \\builtin alias cp='cp -r' scp='scp -r' rm='rm -r' \\builtin alias rscp='rsync -aP --inplace --progress --human-readable' rsmv='rscp --remove-source-files --force' \: "${MKSH:=$(\\builtin whence -p mksh)}${MKSH:=/bin/mksh}" \\builtin export MKSH \\builtin export SHELL=$MKSH MANWIDTH=80 LESSHISTFILE=- \\builtin alias cls='\\builtin print -n \\ec' \: "${EDITOR:=/bin/ed}${TERM:=vt100}${USER:=$(\\builtin ulimit -c 0; id -un \ 2>/dev/null)}${HOSTNAME:=$(\\builtin ulimit -c 0; hostname 2>/dev/null)}" [[ $HOSTNAME = ?(?(ip6-)localhost?(6)) ]] && HOSTNAME=nil; \\builtin export EDITOR HOSTNAME TERM USER="${USER:-?}" # paths export PATH=$HOME/.config/bin:$PATH export PATH=$HOME/.local/bin:$PATH export PATH=$HOME/.local/bin/sh:$PATH test -d $HOME/.local/share/nvim/mason/bin && export PATH=$HOME/.local/share/mason/bin:$PATH test -r ~/.config/local_paths && source ~/.config/local_paths # colors txtblk="$(tput setaf 0 2>/dev/null || echo '\e[0;30m')" # Black txtred="$(tput setaf 1 2>/dev/null || echo '\e[0;31m')" # Red txtgrn="$(tput setaf 2 2>/dev/null || echo '\e[0;32m')" # Green txtylw="$(tput setaf 3 2>/dev/null || echo '\e[0;33m')" # Yellow txtblu="$(tput setaf 4 2>/dev/null || echo '\e[0;34m')" # Blue txtpur="$(tput setaf 5 2>/dev/null || echo '\e[0;35m')" # Purple txtcyn="$(tput setaf 6 2>/dev/null || echo '\e[0;36m')" # Cyan txtwht="$(tput setaf 7 2>/dev/null || echo '\e[0;37m')" # White txtgry="$(tput setaf 8 2>/dev/null || echo '\e[0;38m')" # Gray # Bold bld="$(tput bold 2>/dev/null || echo '\e[1m')" # italics ita="$(tput sitm 2>/dev/null || echo '\e[3m')" # Underline und="$(tput smul 2>/dev/null || echo '\e[4m')" # Reset rst="$(tput sgr 0 2>/dev/null || echo '\e[0m')" # Text Reset # host-specific accent color (default stays as-is; override per host below) case $HOSTNAME in prosrvdemadev01) hostcol="$txtblu"; hostlblcol="$txtblu" ;; *) hostcol="$txtylw"; hostlblcol="$txtgry" ;; esac # rust export PATH=$PATH:$HOME/.cargo/bin # go # export GOSRC=~/bin/go/src export GOPATH=$HOME/.local/share/go export CGO_CFLAGS="-g -O2 -Wno-return-local-addr" export CGO_ENABLED=0 export PATH=$PATH:$GOPATH/bin # npm # export NPM_PACKAGES="${HOME}/.cache/npm-packages" # npm config set prefix "$NPM_PACKAGES" export NPM_PACKAGES="${HOME}/.local/share/npm" export PATH="$PATH:$NPM_PACKAGES/bin" export PATH="$PATH:${HOME}/.npm-packages/bin" # ls TODO: $(dircolors ..) export LS_COLORS='no=00:rs=0:fi=01;37:di=01;37;40:ln=01;36:mh=04;36:pi=03;31:so=04;33:do=04;01;36:bd=01;33:cd=33:or=31:mi=01;37;41:ex=01;33:su=01;04;37:sg=01;04;37:ca=01;37:tw=01;37;44:ow=01;04;34:st=04;37;44:*.c=01;32:*.h=01;35:*.sh=01;32:*.rc=01;32:*.md=01;35:*.txt=30:*~=30:*.bak=30:*.BAK=30:*.log=30:*.log=30:*.old=30:*.OLD=30:*.orig=30:*.ORIG=30:*.swo=30:*.swp=30:*.7z=01;31:*.ace=01;31:*.alz=01;31:*.arc=01;31:*.arj=01;31:*.bz=01;31:*.bz2=01;31:*.cab=01;31:*.cpio=01;31:*.deb=01;31:*.dz=01;31:*.ear=01;31:*.gz=01;31:*.jar=01;31:*.lha=01;31:*.lrz=01;31:*.lz=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.lzo=01;31:*.rar=01;31:*.rpm=01;31:*.rz=01;31:*.sar=01;31:*.t7z=01;31:*.tar=01;31:*.taz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tgz=01;31:*.tlz=01;31:*.txz=01;31:*.tz=01;31:*.tzo=01;31:*.tzst=01;31:*.war=01;31:*.xz=01;31:*.z=01;31:*.Z=01;31:*.zip=01;31:*.zoo=01;31:*.zst=01;31:*.aac=02;37:*.au=02;37:*.flac=02;37:*.m4a=02;37:*.mid=02;37:*.midi=02;37:*.mka=02;37:*.mp3=02;37:*.mpa=02;37:*.mpeg=02;37:*.mpg=02;37:*.ogg=02;37:*.opus=02;37:*.ra=02;37:*.wav=02;37:*.bmp=02;37:*.cgm=02;37:*.dl=02;37:*.dvi=02;37:*.emf=02;37:*.eps=02;37:*.gif=02;37:*.jpeg=02;37:*.jpg=02;37:*.JPG=02;37:*.mng=02;37:*.pbm=02;37:*.pcx=02;37:*.pgm=02;37:*.png=02;37:*.PNG=02;37:*.ppm=02;37:*.pps=02;37:*.ppsx=02;37:*.ps=02;37:*.svg=02;37:*.svgz=02;37:*.tga=02;37:*.tif=02;37:*.tiff=02;37:*.xbm=02;37:*.xcf=02;37:*.xpm=02;37:*.xwd=02;37:*.xwd=02;37:*.yuv=02;37:*.anx=02;37:*.asf=02;37:*.avi=02;37:*.axv=02;37:*.flc=02;37:*.fli=02;37:*.flv=02;37:*.gl=02;37:*.m2v=02;37:*.m4v=02;37:*.mkv=02;37:*.mov=02;37:*.MOV=02;37:*.mp4=02;37:*.mpeg=02;37:*.mpg=02;37:*.nuv=02;37:*.ogm=02;37:*.ogv=02;37:*.ogx=02;37:*.qt=02;37:*.rm=02;37:*.rmvb=02;37:*.swf=02;37:*.vob=02;37:*.webm=02;37:*.wmv=02;37:'; test -r ~/.dir_colors && eval $(dircolors ~/.dir_colors) # -> eval $(dircolors "$XDG_CONFIG_HOME"/dircolors/dircolors) \\builtin alias ls='ls --color=always --group-directories-first -h' l='ls ' la='l -a' ll='l -l' lo='l -alo' # less export LESS="-Q -R -C -i -j4 -M -PM?n?f%f .?m(file %i of %m) ..?e(END) ?x- Next\: %x..%t" export LESSBINFMT='*u[%X]' export LESS_TERMCAP_mb=$'\E[01;31m' export LESS_TERMCAP_md=$'\E[01;31m' export LESS_TERMCAP_me=$'\E[0m' export LESS_TERMCAP_se=$'\E[0m' export LESS_TERMCAP_so=$'\E[01;40;37m' export LESS_TERMCAP_ue=$'\E[0m' export LESS_TERMCAP_us=$'\E[01;32m' export LESSHISTFILE=$HOME/.cache/lesshist # xdg dirs export XDG_DATA_HOME=$HOME/.local/share export XDG_CONFIG_HOME=$HOME/.config export XDG_STATE_HOME=$HOME/.local/state export XDG_CACHE_HOME=$HOME/.cache # xdg fixes export DOCKER_CONFIG="$XDG_CONFIG_HOME"/docker export GNUPGHOME="$XDG_DATA_HOME"/gnupg export LESSHISTFILE="$XDG_STATE_HOME"/less/history export RUSTUP_HOME="$XDG_DATA_HOME"/rustup export SQLITE_HISTORY="$XDG_CACHE_HOME"/sqlite_history export NPM_CONFIG_USERCONFIG=$XDG_CONFIG_HOME/npm/npmrc export W3M_DIR="~/.cache/w3m" alias w3m='w3m -config ~/.config/w3m/config' alias docker='doas docker' # funcs fcd() { d=$(fd . -t directory ~ | fzf) && cd "${d}" } fapk() { apk search -q "$@" | fzf -m | xargs -r apk add } weechat() { docker ps -a --format '{{.Names}}' | grep "weechat" | xargs -r -o docker attach } dkr() { if (( USER_ID )) ; then doas="doas" ; fi cmd="docker $@" [ -z "$@" ] && cmd="echo" # just echo containername if no subcommand is specified $doas sh -c ". ~/.config/sh/fzf.sh ; docker ps -a --format 'table {{.Names}}\t{{.Status}}' | \ grep -E -v '^NAMES' | \ fzf -p -e -m | \ cut -f1 -d' ' | \ xargs -ro $cmd" } loop() { while true ; do $@; sleep 1; done ;} # prompt _prompt_git(){ # from polyglot.sh GITREF="$(env git symbolic-ref --quiet HEAD 2> /dev/null)" case $? in # See what the exit code is. 0) ;; # $GITREF contains the name of a checked-out branch. 128) return ;; # No Git repository here. # Otherwise, see if HEAD is in a detached state. *) GITREF="$(env git rev-parse --short HEAD 2> /dev/null)" || return ;; esac if [ -n "$GITREF" ]; then GITSTATUS=$(LC_ALL=C GIT_OPTIONAL_LOCKS=0 env git status -uno 2>&1) GITSYMBOLS='' case $GITSTATUS in *' have diverged,'*) GITSYMBOLS="${GITSYMBOLS}&*" ;; esac case $GITSTATUS in *'Your branch is behind '*) GITSYMBOLS="${GITSYMBOLS}&" ;; esac case $GITSTATUS in *'Your branch is ahead of '*) GITSYMBOLS="${GITSYMBOLS}*" ;; esac case $GITSTATUS in *'new file: '*) GITSYMBOLS="${GITSYMBOLS}+" ;; esac case $GITSTATUS in *'deleted: '*) GITSYMBOLS="${GITSYMBOLS}x" ;; esac case $GITSTATUS in *'modified: '*) GITSYMBOLS="${GITSYMBOLS}!" ;; esac case $GITSTATUS in *'renamed: '*) GITSYMBOLS="${GITSYMBOLS}>" ;; esac case $GITSTATUS in *'Untracked files:'*) GITSYMBOLS="${GITSYMBOLS}?" ;; esac [ -n "$GITSYMBOLS" ] && GITSYMBOLS="$GITSYMBOLS" GITREF=${GITREF#refs/heads/main} # empty if main printf "  %s%s" "${GITREF#refs/heads/}" "$GITSYMBOLS" fi unset GITREF GITSTATUS GITSYMBOLS } # prompts - modified from /etc/mkshrc PS4='[$EPOCHREALTIME] '; PS1='#'; (( USER_ID )) && PS1='→'; PS1=$'\001\r''${| \\builtin typeset e=$? (( e )) && REPLY+="${txtred}$e${txtgry} " { ( [[ -n $SSH_CLIENT ]] || [[ -n $SSH_TTY ]] ) && [[ -z $TMUX ]] } && REPLY+="${ita}${hostlblcol}${HOSTNAME} ${rst}" # REPLY+=${USER}@${HOSTNAME%%.*}: \\builtin typeset d=${PWD:-?}/ p=~; [[ $p = ?(*/) ]] || d=${d/#$p\//\~/} d=${d%/}; [[ -n $d ]] || d=/ case $d in "~"|/) ;; "~/"*/*) d=…/${d##*/} ;; "~/"*) ;; *) d=…/${d##*/} ;; esac REPLY+=${ita}${txtgry}$d REPLY+="$(_prompt_git)${rst}" print -n "\e]133;A\e\\" # foot sequence for ctrl+shift+x/z \\builtin return $e } '"${hostcol}${bld}$PS1 ${rst}" # tmux auto-attach: bare invocation so tmux.conf's default-client-command # grants each connection its own session grouped with "main" (shared panes, # independent window navigation). No -exec, so if tmux is missing or # exits/crashes for any reason, this shell just continues normally. tmuxbin=$(\\builtin whence -p tmux 2>/dev/null) if [[ $- = *i* ]] && [[ -t 0 ]] && [[ -z $TMUX ]] && [[ -n $tmuxbin ]]; then "$tmuxbin" fi unset tmuxbin