-
Notifications
You must be signed in to change notification settings - Fork 0
/
.zshrc
214 lines (173 loc) · 5.74 KB
/
.zshrc
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
export LC_ALL='ja_JP.UTF-8'
export GOPATH="$HOME/.go"
export PATH=$GOPATH/bin:$PATH
# antigen, oh-my-zsh settings start
source $HOME/dotfiles/antigen.zsh
# oh-my-zsh sets HISTFILE as .zsh_history without this line
# https://github.com/robbyrussell/oh-my-zsh/blob/1f078898887bf96e793772a80e0dae1e96eeadc8/lib/history.zsh#L29
HISTFILE="$HOME/.zhistory"
# Load the oh-my-zsh's library.
antigen use oh-my-zsh
antigen bundle git
antigen bundle zsh-users/zsh-syntax-highlighting
antigen bundle zsh-users/zsh-autosuggestions
antigen bundle zsh-users/zsh-completions
antigen bundle zsh-users/zsh-history-substring-search
antigen bundle agkozak/zsh-z
# Load the theme.
antigen theme ys
# Tell Antigen that you're done.
antigen apply
# antigen, oh-my-zsh settings start
function setrepo() {
GIT_CURRENT_BRANCH=$( git symbolic-ref --short HEAD 2> /dev/null )
GIT_CURRENT_REPO=$( git config --get remote.origin.url | sed 's/^.*github.com[:/]\(.*\).git/\1/' | sed 's/^.*github.com[:/]\(.*\)/\1/' )
}
# ciopen / propen command
function propen() {
setrepo
open "https://github.com/${GIT_CURRENT_REPO}/pull/${GIT_CURRENT_BRANCH}"
}
function ciopen() {
setrepo
open "https://circleci.com/gh/${GIT_CURRENT_REPO}/tree/${GIT_CURRENT_BRANCH}"
}
function git-push-set-upstream() {
setrepo
git push --set-upstream origin ${GIT_CURRENT_BRANCH} && propen
}
alias gps=git-push-set-upstream
function notify-github-actions-ci-finish() {
gh run watch -i10 && osascript -e 'display notification "run is done!" with title "Terminal"'
}
alias nci=notify-github-actions-ci-finish
# rails
alias r='rails'
# bundler
alias bi='bundle install -j4'
alias be='bundle exec'
alias ber='bundle exec rspec'
# git
alias g='git'
function cd-ghq-list() {
local DIR=$(ghq list | fzf)
if [ -n "$DIR" ]; then
cd "$(ghq root)/$DIR"
fi
}
alias gr=cd-ghq-list
alias ghb='hub browse $(ghq list | fzf | cut -d "/" -f 2,3)'
# RubyMine
alias rbl='rubymine $(ghq root)/$(ghq list | fzf)'
# Goland
alias gol='goland $(ghq root)/$(ghq list | fzf)'
# VSCode
alias cdl='code $(ghq root)/$(ghq list | fzf)'
# docker
alias d='docker'
alias dc='docker compose'
alias dcr='docker compose run --rm $(docker compose config --services | grep _api)'
alias de='docker compose exec $(docker compose ps --services | grep _api) entrypoint.sh'
function da() {
docker attach $(docker compose ps | grep _api | awk '{print $1}')
}
# frequent commands
alias a='aws'
alias m='make'
alias y='yarn'
alias :q='exit'
# For non-personal use
if [[ $(id -un) != 'ohbarye' ]]; then
# Run docker-compose command with specific file path.
# The path may be a kind of secret information, so it's retrieved via macOS keychain
# ref https://qiita.com/kroyagis/items/66ca139a4c41b710a53c
export CUSTOM_DOCKER_COMPOSE_PATH=$(security find-generic-password -s "docker-compose-path" -w)
if [[ -f "$CUSTOM_DOCKER_COMPOSE_PATH" ]]; then
alias bc='docker compose -f $CUSTOM_DOCKER_COMPOSE_PATH'
alias bcr='bc run --rm $(pwd | xargs basename | sed -e "s/[a-z][0-9]\{2\}-//g")'
alias be='bc exec $(pwd | xargs basename | sed -e "s/[a-z][0-9]\{2\}-//g") entrypoint.sh'
function ba() {
docker attach $(bc ps | grep _api | awk '{print $1}')
}
fi
fi
# key binding
bindkey '^a' beginning-of-line
bindkey '^e' end-of-line
bindkey "^[u" undo
bindkey "^[r" redo
# http://k0kubun.hatenablog.com/entry/2014/07/06/033336
alias -g B='`git br | fzf | sed -e "s/^\*[ ]*//g"`'
# http://k0kubun.hatenablog.com/entry/2014/07/06/033336
function fzf-select-history() {
BUFFER=$(fc -l -r -n 1 | fzf --query "$LBUFFER")
CURSOR=$#BUFFER
zle redisplay
}
# http://k0kubun.hatenablog.com/entry/2014/07/06/033336
zle -N fzf-select-history
bindkey '^r' fzf-select-history
function fzf-find-file() {
if git rev-parse 2> /dev/null; then
source_files=$(git ls-files)
else
source_files=$(find . -type f)
fi
selected_files=$(echo $source_files | fzf --prompt "[find file]")
BUFFER="${BUFFER}$(echo $selected_files | tr '\n' ' ')"
CURSOR=$#BUFFER
zle redisplay
}
zle -N fzf-find-file
bindkey '^q' fzf-find-file
# AWS MFA with 1password
alias am='op item get gq4qntsm24dhtk6xrbgxr4r274 --otp | aws-mfa --duration 86400 --force'
# Kubernetes settings start
# Temporary off since I don't use kubernetes recently.
# alias ks='kubectl'
#
# kss() {
# ks config get-contexts | sed "/^\ /d"
# ks auth can-i get ns >/dev/null 2>&1 && echo "(Authorized)" || echo "(Unauthorized)"
# }
#
# kc() {
# test "$1" = "-" && kubectx - || kubectx "$(kubectx | fzf)"
# }
#
# kn() {
# test "$1" = "-" && kubens - || kubens "$(kubens | fzf)"
# }
#
# if [ $commands[kubectl] ]; then
# source <(kubectl completion zsh)
# fi
#
# if [ -f "/usr/local/etc/zsh-kubectl-prompt/kubectl.zsh" ]; then
# source /usr/local/etc/zsh-kubectl-prompt/kubectl.zsh
# RPROMPT='%{$fg[blue]%}($ZSH_KUBECTL_PROMPT)%{$reset_color%}'
# fi
# Kubernetes settings end
autoload -U colors; colors
[[ -d ~/.rbenv ]] && \
export PATH=${HOME}/.rbenv/bin:${PATH} && \
eval "$(rbenv init -)"
# opam configuration
test -r ${HOME}/.opam/opam-init/init.zsh && . ${HOME}/.opam/opam-init/init.zsh > /dev/null 2> /dev/null || true
# deno configuration
export DENO_INSTALL="$HOME/.deno"
export PATH="$DENO_INSTALL/bin:$PATH"
fpath=(~/.zsh $fpath)
autoload -Uz compinit
compinit -u
# For profiling https://qiita.com/vintersnow/items/7343b9bf60ea468a4180
# If it's unnecessary, comment out `zmodload zsh/zprof && zprof` in .zshenv
if (which zprof > /dev/null 2>&1) ;then
zprof
fi
test -e "${HOME}/.iterm2_shell_integration.zsh" && source "${HOME}/.iterm2_shell_integration.zsh" || true
# Haskell
[ -f "${HOME}/.ghcup/env" ] && source "${HOME}/.ghcup/env" # ghcup-env
export VOLTA_HOME="$HOME/.volta"
export PATH="$VOLTA_HOME/bin:$PATH"
export PATH="/usr/local/opt/openssl@3/bin:$PATH"