1 # zprof only makes sense at the very top
5 # settings for the zsh don’t get exported
7 # where to write history
8 HISTFILE=~/.zsh_history
12 # print time needed for execution when it takes longer than this value
16 ## define word characters (for stuff like backward-word, forward-word, backward-kill-word,..)
17 ## these are NOT separators but chars considered part of a word
18 ## these are NOT respected by e.g. vi-backward-kill-word, it seems
19 # WORDCHARS='*?_-.[]~=/&;!#$%^(){}<>' # the default
20 ## see below how to solve this with select-word-style module
23 # where zsh looks for functions
25 # add my own functions
26 fpath=(~/.zsh_functions $fpath)
29 # hashed directories are usually independent and standalone
30 # so they can stay at the top
31 hash -d diary=~/Data/personal/henk/workinprogress/Dokumente/diary
32 hash -d lifedocs=~/Data/personal/henk/workinprogress/Dokumente/Leben
33 hash -d bewerbung=~/Data/personal/henk/workinprogress/Dokumente/Arbeit/bewerbung
34 hash -d rezepte=~/Data/personal/henk/workinprogress/Dokumente/rezepte/cuisine
35 hash -d templates=~/Data/personal/henk/workinprogress/templates
36 hash -d gitignore=~/Data/public/software/gitignore
37 hash -d doc=/usr/share/doc
38 hash -d TODO=~/Data/personal/henk/TODO/
39 hash -d fortunes=~/Data/personal/henk/workinprogress/Dokumente/fortunes/
42 # aliases are usually independent and standalone
46 # load plugin manager after all 'static' stuff is done
47 source "${HOME}/.zgenom/zgenom.zsh"
48 # Check for plugin and zgenom updates every 7 days
49 # This does not increase the startup time.
53 # mostly static stuff, env vars
54 zgenom load 'https://github.com/joel-porquet/zsh-dircolors-solarized'
55 zgenom load "https://github.com/greymd/tmux-xpanes"
58 # options are usually independent and standalone
59 # so they can stay at the top
63 # switch +/- when referring to the dirstack
66 # Make cd push the old directory onto the directory stack
71 # this should not be needed ever
72 # unclear why it is even implemented
73 # all relevant functionality should be possible without this anyway
74 # see #zsh@libera on 2024-04-14
78 setopt NUMERIC_GLOB_SORT
79 setopt RC_EXPAND_PARAM
80 #setopt WARN_CREATE_GLOBAL
83 # Ignore a duplicate of the previous command
84 setopt HIST_IGNORE_DUPS
85 # Do not save commands starting with a space to history
86 setopt HIST_IGNORE_SPACE
87 # Remove superfluous blanks
88 setopt HIST_REDUCE_BLANKS
89 # expand history expansion for verification
91 # save timestamp and runtime as well
92 setopt EXTENDED_HISTORY
93 # write line to history file when finished, not when started, to have correct runtime
94 setopt INC_APPEND_HISTORY_TIME
96 # Recognize comments on the command line
97 setopt INTERACTIVE_COMMENTS
99 # Error on a redirections which would overwrite an existing file
104 setopt PRINT_EXIT_VALUE
108 # display PID when suspending processes as well
109 setopt LONG_LIST_JOBS
110 # Report the status of background jobs immediately, rather than waiting until just before printing a prompt.
112 # 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.
114 # 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.
115 setopt COMPLETE_IN_WORD
116 # use zsh field splitting
117 setopt NO_SH_WORD_SPLIT
118 # unset parameters should cause an error
119 # CONFLICTS WITH ZINIT
120 # CONFLICTS WITH ZGENOM
124 # load before completion system initialization
125 zgenom load 'https://github.com/zsh-users/zsh-completions'
127 # initialize completion system before loading plugins and external configs
131 # TODO reconsider this
132 # source /usr/share/autojump/autojump.sh
135 # autoload all functions defined by me
136 # since only filenames are required we
138 # * work only on plainfiles
139 # * take only the filename part without dir
140 autoload ~/.zsh_functions/[^_]*(-.:t)
143 autoload -Uz vcs_info
144 zstyle ':vcs_info:*' enable git
149 # similar to rename or mmv
157 # spawn editor on current command line
158 autoload -Uz edit-command-line
159 zle -N edit-command-line
160 bindkey -M vicmd '^X^E' edit-command-line
161 bindkey -M viins '^X^E' edit-command-line
163 # show globbing results live
164 autoload insert-files
166 bindkey '^Xf' insert-files
169 #this mainly sets vars, binds keys, does zle stuff
170 # zgenom load 'https://github.com/laurenkt/zsh-vimto'
172 # functions and an autoload, should be fine here
173 zgenom load 'https://github.com/MichaelAquilina/zsh-you-should-use'
176 # source ~/.zsh_taskwarrior
177 # source ~/.zsh_functions
178 # source ~/.zsh_functions_media
179 # source ~/.zsh_functions_taskwarrior
182 for f in ~/.zsh_local*(N)
188 #zle -N zle-line-init
189 #zle -N zle-keymap-select
192 # keybindings might have been changed by plugins, etc.
193 # so they go more to the bottom
195 # the vi bindings for these do not respect WORDCHARS and are not replaced by the select-word-style functions
196 bindkey -M vicmd 'w' forward-word
197 bindkey -M vicmd 'b' backward-word
198 bindkey -M viins '^W' backward-kill-word
200 # default vi history search is strange
201 bindkey -M viins '^R' history-incremental-search-backward
204 # better word matching
205 autoload -U select-word-style
206 select-word-style normal
207 # these characters do _not_ separate words but are part of words
208 zstyle ':zle:*' word-chars '*?[]~;!#$%^(){}<>'
212 # should probably be closer to the bottom than the top?
213 zgenom load 'https://github.com/nojhan/liquidprompt'
216 # needs to be loaded close to the end because it hooks into other stuff
217 # see https://github.com/zsh-users/zsh-syntax-highlighting
218 source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
220 eval "$(zoxide init zsh)"
223 FZF_CTRL_T_COMMAND='command fdfind --hidden'
224 FZF_ALT_C_COMMAND='command fdfind --hidden --type d'
225 source /usr/share/doc/fzf/examples/key-bindings.zsh
226 source /usr/share/doc/fzf/examples/completion.zsh
228 # Use fd (https://github.com/sharkdp/fd) instead of the default find
229 # command for listing path candidates.
230 # - The first argument to the function ($1) is the base path to start traversal
231 # - See the source code (completion.{bash,zsh}) for the details.
232 _fzf_compgen_path() {
233 fdfind --hidden --follow --exclude ".git" . "$1"
236 # Use fd to generate the list for directory completion
238 fdfind --type d --hidden --follow --exclude ".git" . "$1"
241 # commands to run after initialization is complete