aboutsummaryrefslogtreecommitdiff
path: root/common/config/zsh/.zshenv
blob: 03d8f285d6a6c2c436f46555dce3052a8086b55c (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
231
232
233
234
235
236
237
238
239
240
241
242
# Source .profile if not already sourced
if [ -z "$PROFILE_SOURCED" ]; then
    [ -f "$HOME/.profile" ] && source "$HOME/.profile"
    export PROFILE_SOURCED=1
fi

#######################################
# XDG Base Directories
#######################################
export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
export XDG_DATA_HOME="${XDG_DATA_HOME:-$HOME/.local/share}"
export XDG_CACHE_HOME="${XDG_CACHE_HOME:-$HOME/.cache}"

export INPUTRC="$XDG_CONFIG_HOME/inputrc"
export ZDOTDIR="$XDG_CONFIG_HOME/zsh"

#######################################
# PATH Setup
#######################################
# Base user paths
export PATH="$HOME/.bin:$HOME/.local/bin:$HOME/.scripts:/usr/local/bin:/sbin:/usr/sbin:$PATH"

# Termux (Android)
if [ -d "/data/data/com.termux/files/usr/local/bin" ]; then
    export PATH="/data/data/com.termux/files/usr/local/bin:$PATH"
fi

# cmake
if [ -x "/usr/bin/cmake" ]; then
    export PATH="/usr/bin/cmake:$PATH"
fi

# Chrome
if [ -d "/opt/google/chrome" ]; then
    export PATH="$PATH:/opt/google/chrome"
fi

# Homebrew (macOS / Linux)
if [ -d "/opt/homebrew/bin" ]; then
    export PATH="/opt/homebrew/bin:/opt/homebrew/sbin:$PATH"
fi

# Nix profile
if [ -d "$HOME/.nix-profile/bin" ]; then
    export PATH="$HOME/.nix-profile/bin:$PATH"
fi

#######################################
# Add ~/.scripts (excluding some dirs)
#######################################
EXCLUDE_DIRS=(".git" "assets" "test")
if [ -d "$HOME/.scripts" ]; then
    while IFS= read -r -d '' dir; do
        rel_path="${dir#$HOME/.scripts/}"
        skip=false
        for exclude in "${EXCLUDE_DIRS[@]}"; do
            [[ "$rel_path" == "$exclude"* ]] && skip=true && break
        done
        [ "$skip" = false ] && PATH="$dir:$PATH"
    done < <(find "$HOME/.scripts" -type d -print0)
fi

#######################################
# Terminal
#######################################
export TERM="xterm-256color"
export COLORTERM="truecolor"

# Choose default terminal
for term in wezterm kitty alacritty xterm; do
    if command -v "$term" &>/dev/null; then
        export TERMINAL="$term"
        break
    fi
done

#######################################
# Default Programs
#######################################
export EDITOR="$(command -v nvim || command -v vim || echo nano)"
export TEXEDIT="$EDITOR"
export FCEDIT="$EDITOR"
export VISUAL="$EDITOR"
export GIT_EDITOR="$EDITOR"

export READER="zathura"
export BROWSER="firefox"
export OPENER="xdg-open"
export VIDEO="mpv"
export IMAGE="phototonic"

# Man pager
if command -v nvim &>/dev/null; then
    export MANPAGER="sh -c 'col -b | nvim -c \"set ft=man ts=8 nomod nolist nonu noma\" -c \"autocmd VimEnter * call feedkeys(\\\"\\<CR>q\\\")\" -'"
else
    export MANPAGER="bat"
fi
export MANROFFOPT="-c"
export PAGER="less"

#######################################
# Shell History
#######################################
export HISTFILE="$ZDOTDIR/.zhistory"
export HISTSIZE=1000000
export SAVEHIST=1000000
setopt BANG_HIST EXTENDED_HISTORY INC_APPEND_HISTORY SHARE_HISTORY
setopt HIST_EXPIRE_DUPS_FIRST HIST_IGNORE_DUPS HIST_IGNORE_ALL_DUPS
setopt HIST_FIND_NO_DUPS HIST_IGNORE_SPACE HIST_SAVE_NO_DUPS
setopt HIST_REDUCE_BLANKS HIST_VERIFY HIST_BEEP

#######################################
# Colors
#######################################
export LSCOLORS=ExGxBxDxCxEgEdxbxgxcxd

# less colors
export LESS_TERMCAP_mb=$(tput bold; tput setaf 2) # green
export LESS_TERMCAP_md=$(tput bold; tput setaf 2) # green
export LESS_TERMCAP_so=$(tput bold; tput setaf 3) # yellow
export LESS_TERMCAP_se=$(tput rmso; tput sgr0)
export LESS_TERMCAP_us=$(tput smul; tput bold; tput setaf 1) # red
export LESS_TERMCAP_ue=$(tput sgr0)
export LESS_TERMCAP_me=$(tput sgr0)

#######################################
# Miscellaneous XDG-aware configs
#######################################
export RIPGREP_CONFIG_PATH="$XDG_CONFIG_HOME/ripgrep/ripgreprc"
export DOCKER_CONFIG="$XDG_CONFIG_HOME/docker"
export VSCODE_PORTABLE="$XDG_DATA_HOME/vscode"
export GTK2_RC_FILES="$XDG_CONFIG_HOME/gtk-2.0/gtkrc"
export DISCORD_USER_DATA_DIR="$XDG_DATA_HOME"
export LYNX_CFG="$XDG_CONFIG_HOME/.lynxrc"

#######################################
# Languages / SDKs
#######################################

# Rust
export RUSTUP_HOME="$XDG_DATA_HOME/rustup"
export CARGO_HOME="$XDG_DATA_HOME/cargo"
export PATH="$CARGO_HOME/bin:$RUSTUP_HOME/bin:$PATH"
command -v rustc &>/dev/null && export RUST_BACKTRACE=1

# Dotnet
export DOTNET_HOME="$XDG_DATA_HOME/dotnet"
export DOTNET_CLI_HOME="$XDG_CONFIG_HOME/dotnet"
export PATH="$DOTNET_HOME/tools:$PATH"
export DOTNET_ROOT="/opt/dotnet"
export DOTNET_CLI_TELEMETRY_OPTOUT=1

# Java
export JAVA_HOME="/usr/lib/jvm/java-20-openjdk"
export _JAVA_OPTIONS="-Djava.util.prefs.userRoot=$XDG_CONFIG_HOME/java"

# Dart / Flutter
if [ -d "/opt/flutter/bin" ]; then
    export PATH="/opt/flutter/bin:/usr/lib/dart/bin:$PATH"
fi

# Go
export GOPATH="$XDG_DATA_HOME/go"

# Node / NVM
export NVM_DIR="$XDG_CONFIG_HOME/nvm"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

[[ -d "$XDG_DATA_HOME/node/bin" ]] && PATH="$XDG_DATA_HOME/node/bin:$PATH"
export NODE_REPL_HISTORY="$XDG_DATA_HOME/node_repl_history"
export NPM_CONFIG_USERCONFIG="$XDG_CONFIG_HOME/npm/npmrc"

# Bun
export BUN_INSTALL="$HOME/.bun"
export PATH="$BUN_INSTALL/bin:$PATH"

# Ruby
export GEM_HOME="$XDG_DATA_HOME/ruby/gems"
export GEM_PATH="$GEM_HOME"
export GEM_SPEC_CACHE="$XDG_DATA_HOME/ruby/specs"

# Python
if command -v virtualenvwrapper.sh >/dev/null 2>&1; then
    export WORKON_HOME="$HOME/.virtualenvs"
    export VIRTUALENVWRAPPER_PYTHON="$(command -v python3)"
    export VIRTUALENVWRAPPER_VIRTUALENV="$(command -v virtualenv)"
    source "$(command -v virtualenvwrapper.sh)"
fi
export VIRTUAL_ENV_DISABLE_PROMPT=false
export JUPYTER_CONFIG_DIR="$XDG_CONFIG_HOME/jupyter"
export IPYTHONDIR="$XDG_CONFIG_HOME/jupyter"

[[ "$(uname)" == "Darwin" ]] && export PYTHON_CONFIGURE_OPTS="--enable-framework"
[[ "$(uname)" == "Linux" ]] && export PYTHON_CONFIGURE_OPTS="--enable-shared"

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"

# PHP
export PATH="$HOME/.config/composer/vendor/bin:$PATH"

# Lua
if [ -d "/usr/local/luarocks/bin" ]; then
    export PATH="$PATH:/usr/local/luarocks/bin"
fi

#######################################
# Android SDK
#######################################
if [ -d "/opt/android-sdk" ]; then
    export ANDROID_HOME="/opt/android-sdk"
    export ANDROID_SDK_ROOT="/opt/android-sdk"
    export PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$PATH"
    export PATH="$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin:$PATH"
    export PATH="$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator:$PATH"
fi

#######################################
# Misc
#######################################
export NVIM_TUI_ENABLE_TRUE_COLOR=1
export GPG_TTY="$(tty)"
export XDG_MENU_PREFIX="gnome-"
export DEVELOPMENT_DIRECTORY="$HOME/code"
export PKG_CONFIG_PATH="/usr/local/lib64/pkgconfig:$PKG_CONFIG_PATH"

# FZF + rg
if command -v rg &>/dev/null; then
    export FZF_DEFAULT_COMMAND="rg --files --hidden --glob '!{node_modules/*,.git/*}'"
    export FZF_DEFAULT_OPTS='-m --height 50% --border'
    export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
fi

# Zoxide
if command -v zoxide &>/dev/null; then
    eval "$(zoxide init zsh)"
fi

#######################################
# Cleanup PATH (remove duplicates)
#######################################
typeset -U PATH path