aboutsummaryrefslogtreecommitdiff
path: root/common/.zshrc.org
diff options
context:
space:
mode:
Diffstat (limited to 'common/.zshrc.org')
-rw-r--r--common/.zshrc.org130
1 files changed, 130 insertions, 0 deletions
diff --git a/common/.zshrc.org b/common/.zshrc.org
new file mode 100644
index 0000000..02601e5
--- /dev/null
+++ b/common/.zshrc.org
@@ -0,0 +1,130 @@
+#+title: ZSH Configuration
+Set up completions.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ zstyle ':completion:*' completer _expand _complete _ignored _approximate
+ zstyle ':completion:*' matcher-list '' 'm:{[:lower:]}={[:upper:]}' 'r:|[._-]=** r:|=**' 'l:|=* r:|=*'
+ zstyle :compinstall filename '/home/jjanzen/.zshrc'
+ autoload -U compinit promptinit
+ compinit
+ promptinit
+#+end_src
+
+Enable Gentoo completions on my Gentoo system.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ if [ "$(uname)" = 'Linux' ] && grep -q 'ID=gentoo' /etc/os-release; then
+ prompt gentoo
+ fi
+#+end_src
+
+Set up the history with 1000 entries and ignored duplicate commands.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ HISTFILE=~/.histfile
+ HISTSIZE=1000
+ SAVEHIST=1000
+ setopt hist_ignore_all_dups
+#+end_src
+
+Enable automatic =cd=.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ setopt autocd
+#+end_src
+
+Enable extended glob.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ setopt extendedglob
+#+end_src
+
+If a glob returns nothing, don't keep the =*=.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ setopt nullglob
+#+end_src
+
+Report the status of background jobs immediately.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ setopt notify
+#+end_src
+
+Disable the beep.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ unsetopt beep
+#+end_src
+
+Use =vi= keybindings.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ bindkey -v
+#+end_src
+
+Use =lesspipe= back end for =less= if it is installed.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ which lesspipe.sh &> /dev/null && export LESSOPEN="|lesspipe.sh %s"
+#+end_src
+
+Use =eza= as my =ls= command if it is installed.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ which eza &> /dev/null && alias ls=eza
+#+end_src
+
+Use Neovim as my =vi= and =vim= application if it is installed.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ which nvim &> /dev/null && alias vi=nvim && alias vim=nvim
+#+end_src
+
+If the Firefox binary is called =firefox-bin=, let =firefox= also run =firefox-bin=.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ which firefox-bin &> /dev/null && alias firefox=firefox-bin
+#+end_src
+
+Lazy =ls= shortcuts.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ alias ll='ls -alF'
+ alias la='ls -a'
+ alias l='ls -F'
+ alias sl='ls'
+#+end_src
+
+*** Prompt
+Define function to write out icons for the git status.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ parse_git_dirty() {
+ git_status="$(git status 2> /dev/null)"
+ [[ "$git_status" =~ "use \"git push\" to publish your local commits" ]] && echo -n " %F{green}%f"
+ [[ "$git_status" =~ "Changes to be committed:" ]] && echo -n " %F{magenta}%f"
+ [[ "$git_status" =~ "Changes not staged for commit:" ]] && echo -n " %F{yellow}%f"
+ [[ "$git_status" =~ "Untracked files:" ]] && echo -n " %F{red}%f"
+ }
+#+end_src
+
+Enable git status in the prompt.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ setopt prompt_subst
+ autoload -Uz vcs_info
+ precmd () { vcs_info }
+ zstyle ':vcs_info:*' formats ' %F{blue}%b%f' # git(main)
+#+end_src
+
+Define the prompt as follows:
+- Error code (if applicable)
+- Path using =~= for the home directory and truncating if too long
+- Git branch
+- Git status
+- =$= to mark the start of the prompt
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ PS1='%(?..%B%F{red}[%?%\]%f%b )%F{green}%20<...<%~%<<%f$vcs_info_msg_0_$(parse_git_dirty) $ '
+#+end_src
+
+Enable VPN shortcut.
+#+begin_src sh :tangle ~/.zshrc :mkdirp yes
+ if [ "$(uname)" = 'Linux' ] && grep -q 'ID=gentoo' /etc/os-release; then
+ vpn () {
+ if test -f /tmp/vpn.lock; then
+ echo turning off vpn...
+ doas /usr/bin/wg-quick down gentoo-CA-340
+ rm /tmp/vpn.lock
+ else
+ echo turning on vpn...
+ doas /usr/bin/wg-quick up gentoo-CA-340
+ touch /tmp/vpn.lock
+ fi
+ }
+ fi
+#+end_src