-
Notifications
You must be signed in to change notification settings - Fork 62
/
falkor.plugin.zsh
404 lines (373 loc) · 13.3 KB
/
falkor.plugin.zsh
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
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
# -*- mode: sh; -*-
#####################################################################################
# Time-stamp: <Sun 2017-03-19 11:56 svarrette>
# _____ _ _ _ ___ _ __ __ _____ _
# | ___|_ _| | | _____ _ __( )___ / _ \| |__ | \/ |_ _|__ /___| |__
# | |_ / _` | | |/ / _ \| '__|// __| | | | | '_ \| |\/| | | | | / // __| '_ \
# | _| (_| | | < (_) | | \__ \ | |_| | | | | | | | |_| |/ /_\__ \ | | |
# |_| \__,_|_|_|\_\___/|_| |___/ \___/|_| |_|_| |_|\__, /____|___/_| |_|
# |___/
# ____ _ _
# | _ \| |_ _ __ _(_)_ __
# | |_) | | | | |/ _` | | '_ \
# | __/| | |_| | (_| | | | | |
# |_| |_|\__,_|\__, |_|_| |_|
# |___/
#####################################################################################
# . Copyright (c) 2016 Sebastien Varrette <[email protected]>
#
# Personal Custom plugin for Oh My Zsh, mainly designed to host my favorite
# aliases and my theme specialization
# Install nerd-font (see https://github.com/ryanoasis/nerd-fonts#font-installation)
# On Mac OS X:
# brew tap caskroom/fonts
# brew cask install font-hack-nerd-font
# Then in iTerm2, change the font for non-ASCII Font to 14pt Hack Regular Nerd Font Complete
#
### Organization
#
# ~/.config/zsh/custom
# ├── plugins
# └── falkor
# └── falkor.plugin.zsh
#
### Usage:
#
# In your .zshrc, add the following
#
# [...]
# plugins=(...) # Whatever default plugins you wish to use
# # Custom plugins
# plugins+=(falkor)
#####################################################################################
# =========================================
# ================ Color theme ============
# =========================================
# #
# # Customization of the https://github.com/bhilburn/powerlevel9k
# #
# # To use this theme, add 'ZSH_THEME="powerlevel9k/powerlevel9k"' in ~/.zshrc
# # Font taken from https://github.com/stefano-meschiari/dotemacs/blob/master/SourceCodePro%2BPowerline%2BAwesome%2BRegular.ttf
# #
# # Eventually adapt (in custom.zshrc) the below P9K_MODE to match
# # your font installation.
# #P9K_MODE='awesome-patched' # OR 'awesome-fontconfig' or 'flat'
# P9K_MODE='nerdfont-complete'
# #P9K_MODE='awesome-patched'
# # Disable dir/git icons
# P9K_DIR_HOME_ICON=''
# P9K_DIR_HOME_SUBFOLDER_ICON=''
# P9K_DIR_DEFAULT_ICON=''
#
# #P9K_APPLE_ICON='\uE26E'
# #P9K_LINUX_ICON='\uE271'
# #P9K_RVM_ICON='\uE847 '
# #P9K_PYENV_ICON='\U1F40D '
#
# #P9K_BACKGROUND_JOBS_ICON='\uE82F '
# DISABLE_AUTO_TITLE="true"
#
# P9K_VCS_GIT_ICON=''
# #P9K_VCS_GIT_GITHUB_ICON=''
# #P9K_VCS_GIT_BITBUCKET_ICON=''
# #P9K_VCS_GIT_GITLAB_ICON=''
# #P9K_VCS_TAG_ICON='\uE817 '
# P9K_VCS_STAGED_ICON='\u00b1'
# #P9K_VCS_STASH_ICON='\uE133 '
# P9K_VCS_UNTRACKED_ICON='\u25CF'
# P9K_VCS_UNSTAGED_ICON='\u00b1'
# P9K_VCS_INCOMING_CHANGES_ICON='\u2193'
# P9K_VCS_OUTGOING_CHANGES_ICON='\u2191'
# #
# P9K_VCS_MODIFIED_BACKGROUND='yellow'
# P9K_VCS_UNTRACKED_BACKGROUND='yellow'
# #P9K_VCS_UNTRACKED_ICON='?'
# #
# P9K_PROMPT_ON_NEWLINE=true
# P9K_PROMPT_ADD_NEWLINE=true
# #P9K_RPROMPT_ON_NEWLINE=false
# #P9K_MULTILINE_FIRST_PROMPT_PREFIX_ICON='%F{blue}\u256D\u2500%f'
# # P9K_MULTILINE_LAST_PROMPT_PREFIX="%F{blue}\u2570\uf460%f "
# #P9K_MULTILINE_LAST_PROMPT_PREFIX_ICON="%{%F{249}%}\u2517%{%F{default}%}❯ "
# #P9K_MULTILINE_LAST_PROMPT_PREFIX_ICON=$'\u2570'$'\U2500 ❯ '
# P9K_MULTILINE_LAST_PROMPT_PREFIX_ICON=$'\u2570❯ '
#
# P9K_LEFT_PROMPT_ELEMENTS=(status os_icon context dir vcs virtualenv rbenv rvm docker_machine kubecontext)
# P9K_RIGHT_PROMPT_ELEMENTS=(command_execution_time background_jobs time)
#
# P9K_COMMAND_EXECUTION_TIME_THRESHOLD=2
#
# #P9K_SHORTEN_STRATEGY="truncate_middle"
# P9K_DIR_SHORTEN_LENGTH=3
# P9K_DIR_SHORTEN_STRATEGY=truncate_folders
# #
# #P9K_TIME_FORMAT="%D{%H:%M \uE868 %d.%m.%y}"
# #P9K_TIME_FORMAT="%D{%H:%M \uF073 %d.%m.%y}"
# P9K_TIME_FORMAT="%D{%H:%M %d.%m.%y}"
# #
# # #P9K_VCS_MODIFIED_BACKGROUND='orange'
# P9K_STATUS_VERBOSE=false
export DEFAULT_USER="$USER"
# P9K_LEFT_PROMPT_ELEMENTS=(time context dir vcs)
# P9K_RIGHT_PROMPT_ELEMENTS=(status rbenv)
# P9K_STATUS_VERBOSE=false
# P9K_SHORTEN_STRATEGY="truncate_middle"
# P9K_SHORTEN_DIR_LENGTH=3
# ===================================================================
# ================== Falkor's Command Aliases =======================
# ===================================================================
# -------------------------------------------------------------------
# make some commands (potentially) less destructive
# -------------------------------------------------------------------
alias rm='rm -i'
# ls, the common ones I use a lot shortened for rapid fire usage
#alias l='ls -lFh' #size,show type,human readable
alias la='ls -lAFh' #long list,show almost all,show type,human readable
alias lr='ls -tRFh' #sorted by date,recursive,show type,human readable
alias lt='ls -ltFh' #long list,sorted by date,show type,human readable
alias ll='ls -l' #long list
# fuzzy typing
alias car='cat'
# -------------------------------------------------------------------
# Git -- most comes from the git plugin
# -------------------------------------------------------------------
alias g='git'
alias ga='git add'
alias gb='git branch -a'
# age of each branch
alias gbage='for k in `git branch -a | perl -pe '\''s/^..(.*?)( ->.*)?$/\1/'\''`; do echo -e `git show --pretty=format:"%Cgreen%ci %Cblue%cr%Creset" $k -- | head -n 1`\\t$k; done | sort -r'
# stop bother me with merge messages
gbnoedit() {
git config branch.$(git rev-parse --abbrev-ref HEAD).mergeoptions --no-edit
}
alias gc='git checkout'
alias gcount='git shortlog -sn'
if [[ -n ${ZSH_VERSION-} ]]; then
compdef gcount=git
fi
alias gcl='git clone'
alias clone='git clone'
alias gd='git diff'
alias dg='git diff'
alias GD='git diff HEAD~1 HEAD'
alias gf='git fetch -va'
alias gfp='git fetch -va --prune'
alias gg="git log --graph --pretty=format:'%C(auto)%h -%d %s %Cgreen(%cr)%Creset %C(bold blue)<%an>%Creset' --abbrev-commit --max-count=20"
alias ggl="git log --graph --pretty=format:'%C(auto)%h -%d %s %Cgreen(%cr)%Creset %C(bold blue)<%an>%Creset' --abbrev-commit"
alias gl='git log --graph --oneline --decorate --max-count=20'
gm() {
git commit -s -m "$*"
}
gma() {
git commit -s -am "$*"
}
gms() {
git commit -s -S -m "$*"
}
gmas() {
git commit -s -S -am "$*"
}
alias p='git push'
alias gp='git push'
alias gpu='git push'
alias gpd='git push --dry-run'
alias gpoat='git push origin --all && git push origin --tags'
[[ -n ${ZSH_VERSION-} ]] && compdef _git gpoat=git-push
alias gr='git remote -v'
alias gra='git remote add'
alias grr='git remote rm'
alias grt='cd $(git rev-parse --show-toplevel || echo ".")'
alias s='git status'
alias gs='git status'
alias gss='git status --short'
function gsa() {
local url=$1
local dir=`basename $url .git`
[ -d ".submodules" ] && dir=".submodules/$dir"
[ $# -eq 2 ] && dir=$2
echo "=> adding git submodule from '$url' in '$dir'"
git submodule add $url $dir
git commit -s -m "Add '$dir' as git submodule from '$url'" .gitmodules $dir
}
#alias gsa='git submodule add'
alias gsi='git submodule init'
alias gsu='git submodule update'
gsupgrade() {
git submodule foreach 'git fetch origin; git checkout $(git rev-parse --abbrev-ref HEAD); git reset --hard origin/$(git rev-parse --abbrev-ref HEAD); git submodule update --recursive; git clean -dfx'
}
alias u='git pull'
alias up='git pull'
alias gu='git pull'
alias gta='git tag -a -m'
alias cdroot='git rev-parse && cd ./$(git rev-parse --show-cdup)'
#-------
# Myrepo
#--------
alias mradd='mr register'
alias mrup='(cd ~; mr -j update)'
# ------------
# Utilities
# ------------
bup() {
echo "Updating your [Homebrew] system"
brew update
brew upgrade
brew cu
brew cleanup
}
alias o='open'
alias of='lsof -nP +c 15 | grep LISTEN'
alias m='make -j8'
alias skim='open -a Skim'
nospace-in-filename(){
local f="$*"
echo "=> replacing ' ' (space) with '-' in '${f}'"
mv $f $(echo $f| tr ' ' '-')
}
if [[ -n ${ZSH_VERSION-} ]]; then
zstyle ":completion:*:*:skim:*" file-patterns "*.pdf *(-/)"
zcompclean() {
rm -rf ${XDG_CONFIG_HOME}/zsh/.zcompdump*
autoload -U compinit && compinit
}
# https://stackoverflow.com/questions/59940971/zsh-autocomplete-slow-for-ssh/64147638#64147638
# FIX for slow SSH completion
refresh_ssh_autocomplete () {
host_list=($(cat ~/.ssh/config | grep 'Host ' | awk '{s = s $2 " "} END {print s}'))
zstyle ':completion:*:(ssh|scp|sftp):*' hosts $host_list
}
fi
alias mkdir='mkdir -p'
# Search for files and page it
search() {
find . -iname "*$@*" | less;
}
if [[ -n ${ZSH_VERSION-} ]]; then
alias refresh='sourcezshrc'
else
alias refresh='source ~/.profile'
fi
alias sshx='ssh -C -X -c blowfish'
alias proxy='ssh -C -q -T -n -N -D 1080'
alias rsyncfalkor='rsync -P -avzu'
alias nothankyouadobe="sudo -H killall ACCFinderSync \"Core Sync\" AdobeCRDaemon \"Adobe Creative\" AdobeIPCBroker node \"Adobe Desktop Service\" \"Adobe Crash Reporter\";sudo -H rm -rf \"/Library/LaunchAgents/com.adobe.AAM.Updater-1.0.plist\" \"/Library/LaunchAgents/com.adobe.AdobeCreativeCloud.plist\" \"/Library/LaunchDaemons/com.adobe.*.plist\""
topgrep() {
if [[ $# -ne 1 ]]; then
echo "Usage: topgrep <expression>"
else
top -pid $(pgrep $1)
fi
}
mkcd () {
mkdir -p "$@" && cd "$@"
}
#alias diff='colordiff' # for colors
alias draw='figlet -c -w 80'
# Which directory is hiding all the bytes?
alias dux='du -h -d 1 | sort -n'
# Ask more gently to run the last command ;)
alias pls='sudo `fc -n -l -1`'
alias ":q"="exit"
# Quick tarball backup
backup() {
[[ -z "$1" ]] && return
local dst=$(echo $1 | sed "s/^\./dot/" )
local archive="backup_$(date +%F)_${dst}.tgz"
echo "=> creating tarball archive '${archive}' to backup '$@'"
tar cvzf ${archive} $@
}
# Optimize PDF/JPEG/PNG size
optipdf () {
local pdf=$1
local res=`basename $pdf .pdf`-optimized.pdf
noglob gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/prepress -sOutputFile=$res $pdf
local opti_size=`du -k $res | cut -f1`
local size=`du -k $pdf | cut -f1`
if [[ "$opti_size" -lt "$size" ]]; then
echo " => optimized PDF of smaller size ($opti_size vs. $size) thus overwrite $pdf"
mv $res $pdf
git commit -s -m "reduce size of PDF '$pdf'" $pdf
else
echo " => already optimized PDF thus discarded"
rm -f $res
fi
}
alias reducepdf='optipdf'
if [[ -n ${ZSH_VERSION-} ]]; then
compdef '_files -g "*.pdf"' optipdf
fi
alias optipng='optipng -o9 -zm1-9 -strip all'
alias optijpg='jpegoptim'
# ---------------------------------------------
# United Colors of Benetton: Colors everywhere
# ---------------------------------------------
# Less with syntax color -
alias lessh='LESSOPEN="| /usr/local/bin/src-hilite-lesspipe.sh %s" less -M '
# man with colors -- thanks @hcartiaux for the tip
man() {
env LESS_TERMCAP_mb=$'\E[01;31m' \
LESS_TERMCAP_md=$'\E[01;38;5;74m' \
LESS_TERMCAP_me=$'\E[0m' \
LESS_TERMCAP_se=$'\E[0m' \
LESS_TERMCAP_so=$'\E[38;5;246m' \
LESS_TERMCAP_ue=$'\E[0m' \
LESS_TERMCAP_us=$'\E[04;38;5;146m' \
man "$@"
}
# TaskWarrior
alias t='task'
# ---------------
# Emacs business
# ---------------
#alias es="emacs --daemon"
#alias em="emacsclient -nw --alternate-editor='vim'"
# ---------------
# iTerm2 business
# ---------------
# Setup tab and window title functions for iterm2
# iterm behaviour: until window name is explicitly set, it'll always track tab title.
# So, to have different window and tab titles, iterm_window() must be called
# first. iterm_both() resets this behaviour and has window track tab title again).
# Source: http://superuser.com/a/344397
set_iterm_name() {
mode=$1; shift
echo -ne "\033]$mode;$@\007"
}
iterm_both() { set_iterm_name 0 $@; }
iterm_tab() { set_iterm_name 1 $@; }
title() { iterm_both $@; }
iterm_window() { set_iterm_name 2 $@; }
# GPG management
gpg-update-tty() {
export GPG_TTY=$(tty)
gpg-connect-agent "updatestartuptty" /bye >/dev/null
}
# -------------------
# Yubikey management
# -------------------
# https://github.com/drduh/YubiKey-Guide#switching-between-two-or-more-yubikeys
yubi-switch() {
echo '=> switch Yubikey'
gpg-connect-agent "scd serialno" "learn --force" /bye
echo '=> reset GPG_TTY'
export GPG_TTY=$(tty)
echo '=> force pinentry reset'
gpg-connect-agent "updatestartuptty" /bye >/dev/null
}
# ---------------
# ZSH management
# ---------------
alias zshenv="$EDITOR ${HOME}/.zshenv" # Quick access to the .zshenv file
alias zshrc="$EDITOR ${XDG_CONFIG_HOME}/zsh/zshrc" # Quick access to the .zshrc file
alias sourcezshrc="source ${XDG_CONFIG_HOME}/zsh/zshrc"
alias zshfalkor="$EDITOR ${XDG_CONFIG_HOME}/zsh/custom/plugins/falkor/falkor.plugin.zsh" # Quick access to this file
#-----------------------
# Global alias (for ZSH)
# ----------------------
if [[ -n ${ZSH_VERSION-} ]]; then
alias -g L="| less" # Write L after a command to page through the output.
alias -g H="| head -n 20" # Write H after a command to get the 20 first lines
alias -g G='| grep --color -i' # Write G after the command to grep it
alias -g TL='| tail -20'
alias -g NUL="> /dev/null 2>&1" # You get the idea.
fi