Tom Willemse
67aa5e6021
This character was causing some issues in Kitty. The terminal would get confused about the length of RPROMPT when it showed up.
212 lines
4.6 KiB
Org Mode
212 lines
4.6 KiB
Org Mode
#+TITLE: ZSH
|
|
#+STARTUP: showall
|
|
|
|
Autoload any ZSH function from =$HOME/.zsh/functions=.
|
|
|
|
#+BEGIN_SRC sh
|
|
fpath=($HOME/.zsh/functions $fpath)
|
|
autoload -U $HOME/.zsh/functions/*(:t)
|
|
#+END_SRC
|
|
|
|
* Aliases
|
|
|
|
Use rlwrap on some less-than-pleasant REPLs that don't have GNU
|
|
Readline-like features themselves.
|
|
|
|
#+BEGIN_SRC sh
|
|
alias csi="rlwrap csi"
|
|
alias scsh="rlwrap scsh"
|
|
alias sbcl="rlwrap sbcl"
|
|
#+END_SRC
|
|
|
|
This alias is useful for when I'm trying something new with
|
|
herbstluftwm.
|
|
|
|
#+BEGIN_SRC sh
|
|
alias hc=herbstclient
|
|
#+END_SRC
|
|
|
|
Systemd supports user-level services, it's easy to manage them with this
|
|
simple alias.
|
|
|
|
#+begin_src sh
|
|
alias myctl="systemctl --user"
|
|
#+end_src
|
|
|
|
By default scrot will take a screenshot in whatever the current working
|
|
directory is, but I prefer having it all in the same location.
|
|
|
|
#+begin_src sh
|
|
alias scrot="/usr/bin/scrot -e 'mv \$f ~/pictures/screenshots/'"
|
|
#+end_src
|
|
|
|
Show colors and an indicator of what type each file is when using ~ls~, like
|
|
directory, pipe, link, etc.
|
|
|
|
#+begin_src sh
|
|
alias ls="ls --classify --color=always"
|
|
#+end_src
|
|
|
|
Always show color in pacman output.
|
|
|
|
#+begin_src sh
|
|
alias pacman="pacman --color=always"
|
|
#+end_src
|
|
|
|
* History
|
|
|
|
Store ZSH history in a non-intrusive place.
|
|
|
|
#+BEGIN_SRC sh
|
|
HISTFILE=$HOME/.zsh/histfile
|
|
#+END_SRC
|
|
|
|
Keep at most 1000 previous commands in memory.
|
|
|
|
#+BEGIN_SRC sh
|
|
HISTSIZE=1000
|
|
#+END_SRC
|
|
|
|
Save at most 1000 previous commands to disk.
|
|
|
|
#+BEGIN_SRC sh
|
|
SAVEHIST=1000
|
|
#+END_SRC
|
|
|
|
Allow multiple shell instances to share the same history.
|
|
|
|
#+BEGIN_SRC sh
|
|
setopt SHARE_HISTORY
|
|
#+END_SRC
|
|
|
|
Don't remember duplicated commands.
|
|
|
|
#+BEGIN_SRC sh
|
|
setopt HIST_IGNORE_ALL_DUPS
|
|
#+END_SRC
|
|
|
|
* Plug-ins
|
|
|
|
Load zplug, a next generation zsh plugin manager.
|
|
|
|
#+BEGIN_SRC sh
|
|
source /usr/share/zsh/scripts/zplug/init.zsh
|
|
#+END_SRC
|
|
|
|
Add zsh-syntax-highlighting.
|
|
|
|
#+BEGIN_SRC sh
|
|
zplug "zsh-users/zsh-syntax-highlighting", defer:3
|
|
#+END_SRC
|
|
|
|
Add zsh-autosuggestions.
|
|
|
|
#+BEGIN_SRC sh
|
|
zplug "zsh-users/zsh-autosuggestions"
|
|
#+END_SRC
|
|
|
|
Add bgnotify from oh-my-zsh to show when long-running commands finish.
|
|
|
|
#+BEGIN_SRC sh
|
|
zplug "plugins/bgnotify", from:oh-my-zsh
|
|
#+END_SRC
|
|
|
|
Make sure all plugins are installed.
|
|
|
|
#+BEGIN_SRC sh
|
|
if ! zplug check --verbose; then
|
|
printf "Install? [y/N]: "
|
|
if read -q; then
|
|
echo; zplug install
|
|
fi
|
|
fi
|
|
#+END_SRC
|
|
|
|
Load all plugins.
|
|
|
|
#+BEGIN_SRC sh
|
|
zplug load
|
|
#+END_SRC
|
|
|
|
* X Interaction
|
|
|
|
Make some widgets for interacting with the clipboard.
|
|
|
|
#+BEGIN_SRC sh
|
|
zle -N x-copy-region-as-kill
|
|
zle -N x-kill-region
|
|
zle -N x-yank
|
|
#+END_SRC
|
|
|
|
Bind them to keyboard shortcuts.
|
|
|
|
#+BEGIN_SRC sh
|
|
bindkey -e '^[w' x-copy-region-as-kill
|
|
bindkey -e '^W' x-kill-region
|
|
bindkey -e '^Y' x-yank
|
|
#+END_SRC
|
|
|
|
* Completion
|
|
|
|
Initialize completion. This triggers loading of
|
|
zsh-syntax-highlighting as well.
|
|
|
|
#+BEGIN_SRC sh
|
|
autoload -Uz compinit
|
|
compinit
|
|
#+END_SRC
|
|
|
|
* Less
|
|
|
|
I use a terminal that's always 80 columns wide. This means that a
|
|
lot of output doesn't fit on a single line. I use the less command a
|
|
lot to look at output that's too big and wide to view in my
|
|
terminal. The default doesn't make this any better though, so I use
|
|
these switches. Most of these I originally got from what git uses.
|
|
|
|
#+BEGIN_SRC sh
|
|
export LESS="FXRSi"
|
|
#+END_SRC
|
|
|
|
This causes less to immediately quit if there is no need to use a
|
|
pager (everything fits in a single screen) (=-F=). Doesn't clear the
|
|
screen when less is closed (=-X=). Handles ANSI colors (=-R=). Stops
|
|
long lines from wraping (=-S=). And makes searches case-insensitive
|
|
(=-i=).
|
|
|
|
* Prompt
|
|
|
|
First off, do some setup. Allow the use of functions inside the prompt,
|
|
initialize colors and load the ~add-zsh-hook~ function.
|
|
|
|
#+begin_src sh
|
|
setopt PROMPT_SUBST
|
|
|
|
autoload -U colors
|
|
autoload -Uz add-zsh-hook
|
|
autoload -Uz vcs_info
|
|
|
|
colors
|
|
#+end_src
|
|
|
|
Setup VCS info.
|
|
|
|
#+begin_src sh
|
|
add-zsh-hook precmd vcs_info
|
|
|
|
zstyle ':vcs_info:*' actionformats '%u%c%B%F{1}%a%f%%b %F{3}%s%f:%F{5}%r%f:%F{4}%b%f'
|
|
zstyle ':vcs_info:*' enable bzr git hg svn
|
|
zstyle ':vcs_info:*' formats '%u%c%F{3}%s%f:%F{5}%r%f:%F{4}%b%f'
|
|
zstyle ':vcs_info:*' nvcsformats ''
|
|
zstyle ':vcs_info:bzr:*' branchformat '%b'
|
|
zstyle ':vcs_info:git:*' check-for-changes 1
|
|
zstyle ':vcs_info:*' stagedstr '%F{2}*%f'
|
|
zstyle ':vcs_info:*' unstagedstr '%F{1}*%f'
|
|
#+end_src
|
|
|
|
Set the actual prompts.
|
|
|
|
#+begin_src sh
|
|
PROMPT='%T $(spwd) %B%(?.%F{2}.%F{1}[%?])>%b%f '
|
|
RPROMPT='${vcs_info_msg_0_}'
|
|
#+end_src
|