blob: a0773ebfacf86b558710fd1c0326d3230c662da4 (
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
|
# ~nebula/.zshrc, 2023 edition
# table of contents:
# per-device configuration (pre) <dev-pre>
# zsh configuration <zsh-conf>
# third party configuration <3rd-conf>
# aliases & non-script functions <alias-fns>
# per-device configuration (post) <dev-post>
# //// per-device configuration //////////////////////////////// <dev-pre> // #
# Per-device configuration is kept here in dotfiles.git too, but it won't be
# activated just by linking .zshrc. You also need to link ~/.device_pre and
# ~/.device_post to the relevant per-device files under `device`.
# All exports in pre-config are prefixed with `DEVICE_`, and are used to toggle
# features or identify installations in .zshrc or other scripts which are part
# of dotfiles.git.
device_preconfig() {
source ~/.device_pre
}
# The post-config file is intended to run commands that are so specialized to
# the relevant device that it wouldn't make sense to include as a toggleable
# feature in the main .zshrc.
device_postconfig() {
source ~/.device_post
}
device_preconfig
# //// zsh configuration ////////////////////////////////////// <zsh-conf> // #
export HISTFILE="$HOME/.zsh_history"
export SAVEHIST=1000
export HISTSIZE=2000
autoload -Uz select-word-style
select-word-style bash
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
autoload -U colors && colors
PS1=$'\e[0;32;1m%n\e[0;32m@\e[32;1m%m \e[34m%1~ \e[0m%# '
PROMPT="%F{green}%B%n%b@%B%m %F{blue}%1~%b%f %# "
else
PS1=$'%n@%m %1~ %# '
fi
path+=("$HOME/bin")
# //// third party configuration ////////////////////////////// <3rd-conf> // #
# -- Go --
if [[ -v DEVICE_HAS_GO ]]; then
export GOPATH=$DEVICE_GO_INSTALLATION
fi
# -- GPG --
if [[ -v DEVICE_HAS_GPG ]]; then
export GPG_TTY=$(tty)
fi
# -- Homebrew --
if [[ -v DEVICE_HAS_HOMEBREW ]]; then
eval "$("$DEVICE_HOMEBREW_INSTALLATION"/bin/brew shellenv)"
if [[ -z DEVICE_HAS_PYENV ]]; then
# https://github.com/pyenv/pyenv#homebrew-in-macos
alias brew='env PATH="${PATH//$(pyenv root)\/shims:/}" brew'
fi
if [[ -s "$DEVICE_HOMEBREW_INSTALLATION/opt/util-linux" ]]; then
path=("$DEVICE_HOMEBREW_INSTALLATION/opt/util-linux/bin" ${(@)path})
path=("$DEVICE_HOMEBREW_INSTALLATION/opt/util-linux/sbin" ${(@)path})
fi
fi
# -- Node Version Manager --
if [[ -v DEVICE_HAS_NVM ]]; then
export NVM_DIR="$DEVICE_NVM_INSTALLATION"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
fi
# -- Python --
if [[ -v DEVICE_HAS_PYTHON_3 ]]; then
path+=("$DEVICE_PYTHON_3_INSTALLATION/bin")
fi
# -- Python (pyenv) --
if [[ -z DEVICE_HAS_PYENV ]]; then
eval "$(pyenv init -)"
fi
# -- Sublime Text --
if [[ -v DEVICE_HAS_SUBLIME_TEXT ]]; then
path+=("$DEVICE_SUBLIME_TEXT_INSTALLATION)/Contents/SharedSupport/bin")
fi
export PATH
# //// aliases & non-script functions //////////////////////// <alias-fns> // #
relink() {
inode1=$(ls -i $1 | cut -d " " -f 1) &&
inode2=$(ls -i $2 | cut -d " " -f 1) &&
if [[ $inode1 == $inode2 ]]; then
echo files are already same inode >&2
else
sha1=$(sha256sum $1 | cut -d " " -f 1) &&
sha2=$(sha256sum $2 | cut -d " " -f 1) &&
if [[ $sha1 != $sha2 ]]; then
echo files have different checksums >&2
else
rm $2 && ln $1 $2
fi
fi
}
# -- hooks into third-party stuff --
if [[ -v DEVICE_HAS_VIM ]]; then
vimhelp() {
vim -c ":h $1 | only"
}
fi
# //// per-device configuration /////////////////////////////// <dev-post> // #
device_postconfig
# //// really actually end of file stuff ////////////////////// <eof-step> // #
if [[ -v DEVICE_HAS_SDKMAN ]]; then
export SDKMAN_DIR="$DEVICE_SDKMAN_INSTALLATION"
source "$DEVICE_SDKMAN_INSTALLATION/bin/sdkman-init.sh"
fi
|