1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
|
#+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
|