summaryrefslogtreecommitdiff
path: root/.zshrc
blob: 6c840816fdf5670be62cc9446f2fbea2ce80af79 (plain)
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
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
# zprof only makes sense at the very top
# zmodload zsh/zprof


# settings for the zsh don’t get exported

# where to write history
HISTFILE=~/.zsh_history
HISTSIZE=1000000000
SAVEHIST=1000000000

# print time needed for execution when it takes longer than this value
REPORTTIME=10


## define word characters (for stuff like backward-word, forward-word, backward-kill-word,..)
## these are NOT separators but chars considered part of a word
## these are NOT respected by e.g. vi-backward-kill-word, it seems
# WORDCHARS='*?_-.[]~=/&;!#$%^(){}<>' # the default
## see below how to solve this with select-word-style module


# where zsh looks for functions

# add my own functions
fpath=(~/.zsh_functions $fpath)


# hashed directories are usually independent and standalone
# so they can stay at the top
hash -d diary=~/Data/personal/henk/workinprogress/Dokumente/diary
hash -d lifedocs=~/Data/personal/henk/workinprogress/Dokumente/Leben
hash -d bewerbung=~/Data/personal/henk/workinprogress/Dokumente/Arbeit/bewerbung
hash -d rezepte=~/Data/personal/henk/workinprogress/Dokumente/rezepte/cuisine
hash -d templates=~/Data/personal/henk/workinprogress/templates
hash -d gitignore=~/Data/public/software/gitignore
hash -d doc=/usr/share/doc
hash -d TODO=~/Data/personal/henk/TODO/
hash -d fortunes=~/Data/personal/henk/workinprogress/Dokumente/fortunes/


# aliases are usually independent and standalone
source ~/.zsh_aliases


# load plugin manager after all 'static' stuff is done
source "${HOME}/.zgenom/zgenom.zsh"
# Check for plugin and zgenom updates every 7 days
# This does not increase the startup time.
zgenom autoupdate


# mostly static stuff, env vars
zgenom load 'https://github.com/joel-porquet/zsh-dircolors-solarized'
zgenom load "https://github.com/greymd/tmux-xpanes"


# options are usually independent and standalone
# so they can stay at the top
setopt AUTO_CD
setopt CHASE_LINKS

setopt AUTO_NAME_DIRS

# this should not be needed ever
# unclear why it is even implemented
# all relevant functionality should be possible without this anyway
# see #zsh@libera on 2024-04-14
# setopt BRACE_CCL
setopt EXTENDED_GLOB
setopt MARK_DIRS
setopt NUMERIC_GLOB_SORT
setopt RC_EXPAND_PARAM
#setopt WARN_CREATE_GLOBAL
setopt GLOB_DOTS

# Ignore a duplicate of the previous command
setopt HIST_IGNORE_DUPS
# Do not save commands starting with a space to history
setopt HIST_IGNORE_SPACE
# Remove superfluous blanks
setopt HIST_REDUCE_BLANKS
# expand history expansion for verification
setopt HIST_VERIFY
# save timestamp and runtime as well
setopt EXTENDED_HISTORY
# write line to history file when finished, not when started, to have correct runtime
setopt INC_APPEND_HISTORY_TIME

# Error on a redirections which would overwrite an existing file
setopt NO_CLOBBER
setopt CORRECT
setopt CORRECT_ALL
#unsetopt NOMATCH
setopt PRINT_EXIT_VALUE

setopt AUTO_CONTINUE
setopt NO_BG_NICE
# display PID when suspending processes as well
setopt LONG_LIST_JOBS
# Report the status of background jobs immediately, rather than waiting until just before printing a prompt.
setopt NOTIFY
# Whenever  a  command completion or spelling correction is attempted, make sure the entire command path is hashed first.  This makes the first completion slower but avoids false reports of spelling errors.
setopt HASH_LIST_ALL
# If unset, the cursor is set to the end of the word if completion is started. Otherwise it stays there and completion is done from both ends.
setopt COMPLETE_IN_WORD
# use zsh field splitting
setopt NO_SH_WORD_SPLIT
# unset parameters should cause an error
# CONFLICTS WITH ZINIT
# CONFLICTS WITH ZGENOM
# setopt NO_UNSET


# load before completion system initialization
zgenom load 'https://github.com/zsh-users/zsh-completions'

# initialize completion system before loading plugins and external configs
source ~/.zsh_comprc


# TODO reconsider this
# source /usr/share/autojump/autojump.sh


# autoload all functions defined by me
# since only filenames are required we
# * follow symlinks
# * work only on plainfiles
# * take only the filename part without dir
autoload ~/.zsh_functions/[^_]*(-.:t)


autoload -Uz vcs_info
zstyle ':vcs_info:*' enable git

# similar to xargs
autoload -U zargs

# similar to rename or mmv
autoload -U zmv
autoload -U zln
autoload -U zcp


# zle customization

# spawn editor on current command line
autoload -Uz edit-command-line
zle -N edit-command-line
bindkey -M vicmd '^X^E' edit-command-line
bindkey -M viins '^X^E' edit-command-line

# show globbing results live
autoload insert-files
zle -N insert-files
bindkey '^Xf' insert-files


#this mainly sets vars, binds keys, does zle stuff
# zgenom load 'https://github.com/laurenkt/zsh-vimto'

# functions and an autoload, should be fine here
zgenom load 'https://github.com/MichaelAquilina/zsh-you-should-use'


# source ~/.zsh_taskwarrior
# source ~/.zsh_functions
# source ~/.zsh_functions_media
# source ~/.zsh_functions_taskwarrior


for f in ~/.zsh_local*(N)
do
	source $f
done


#zle -N zle-line-init
#zle -N zle-keymap-select


# keybindings might have been changed by plugins, etc.
# so they go more to the bottom

# the vi bindings for these do not respect WORDCHARS and are not replaced by the select-word-style functions
bindkey -M vicmd 'w' forward-word
bindkey -M vicmd 'b' backward-word
bindkey -M viins '^W' backward-kill-word

# default vi history search is strange
bindkey -M viins '^R' history-incremental-search-backward


# better word matching
autoload -U select-word-style
select-word-style normal
# these characters do _not_ separate words but are part of words
zstyle ':zle:*' word-chars '*?[]~;!#$%^(){}<>'


LP_ENABLE_TIME=1
# should probably be closer to the bottom than the top?
zgenom load 'https://github.com/nojhan/liquidprompt'


# needs to be loaded close to the end because it hooks into other stuff
# see https://github.com/zsh-users/zsh-syntax-highlighting
source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

source /usr/share/doc/fzf/examples/key-bindings.zsh
source /usr/share/doc/fzf/examples/completion.zsh

# Use fd (https://github.com/sharkdp/fd) instead of the default find
# command for listing path candidates.
# - The first argument to the function ($1) is the base path to start traversal
# - See the source code (completion.{bash,zsh}) for the details.
_fzf_compgen_path() {
  fdfind --hidden --follow --exclude ".git" . "$1"
}

# Use fd to generate the list for directory completion
_fzf_compgen_dir() {
  fdfind --type d --hidden --follow --exclude ".git" . "$1"
}

# commands to run after initialization is complete
#task awaiting
cat ~/.motd
# zprof