dot_zshrc.tmpl
3795 bytes
1# vim: ft=zsh
2# History
3HISTFILE=~/.histfile
4HISTSIZE=40000
5SAVEHIST=40000
6HIST_STAMPS="yyyy-mm-dd"
7setopt HIST_IGNORE_DUPS
8
9set_env() {
10 # CLI tools
11 export MAKEFLAGS="-j $(nproc --all)"
12 export LESS="-SRF --mouse"
13 export GPG_TTY=$(tty)
14 export GOPRIVATE="github.com/duneanalytics/*,git.theedgeofrage.com/*"
15 export GOPATH="$HOME/dev/go"
16 export GOBIN="$HOME/dev/go/bin"
17 export VIRTUAL_ENV_DISABLE_PROMPT="true"
18 export COMPOSE_BAKE="true"
19 export FZF_CTRL_T_COMMAND="fd -tf -td -tl"
20 export FZF_DEFAULT_COMMAND='rg --files --hidden --follow -g "!{.git}/*" 2> /dev/null'
21 export FZF_DEFAULT_OPTS='
22 --color fg:#928374,bg:#282828,hl:#fb4934
23 --color fg+:#b8bb26,bg+:#3c3836,hl+:#fb4934
24 --color info:#fe8019,prompt:#83a598,header:#83a598
25 --color pointer:#fb4934,marker:#fb4934,spinner:#ffff60
26 '
27 export JQ_COLORS="1;31:0;35:0;35:0;39:0;32:1;39:1;39"
28
29 # Claude code
30 export CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC="1"
31 export DISABLE_AUTOUPDATER="1"
32
33 # OpenCode
34 export OPENCODE_DISABLE_LSP_DOWNLOAD="true"
35 export OPENCODE_ENABLE_EXA="1"
36
37 # Pi
38 export LLAMA_BASE_URL="https://llama.home.theedgeofrage.com/v1"
39 export PI_WEB_TOOLS_EXA_ENDPOINT="https://mcp.exa.ai/mcp"
40
41 # Common config
42 export DEFAULT_USER="pavle"
43 export EDITOR="nvim"
44 export VISUAL="nvim"
45 export TERMINAL="ghostty"
46 export LANG="en_US.UTF-8"
47 export LC_ALL="C.UTF-8"
48 export PATH="$HOME/.local/bin:$PATH:$GOBIN:$HOME/.cargo/bin:$HOME/.local/share/nvim/mason/bin:$HOME/.cache/.bun/bin"
49 export XDG_CONFIG_HOME="$HOME/.config"
50 export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/gcr/ssh"
51{{ if and (hasKey . "zshrc") (kindIs "map" .zshrc) (hasKey .zshrc "env_vars") }}
52 # Additional env vars
53{{ range $_, $env := .zshrc.env_vars }} export {{ $env.name }}="{{ $env.value }}"
54{{ end -}}
55{{- end -}}
56}
57
58# Custom functions and completions
59CUSTOM="$HOME/.config/zsh"
60fpath=(${CUSTOM}/functions ${CUSTOM}/completions "${fpath[@]}" )
61autoload -Uz ${CUSTOM}/functions/*
62
63# oh-my-zsh
64export ZSH="$HOME/.config/zsh/oh-my-zsh"
65ZSH_THEME="boban/boban"
66HYPHEN_INSENSITIVE="true"
67DISABLE_AUTO_UPDATE="true"
68plugins=(
69 archlinux
70 common-aliases
71 docker
72 docker-compose
73 git
74 kubectl
75 you-should-use
76 zsh-autosuggestions
77 zsh-autoswitch-virtualenv
78 zsh-completions
79 zsh-syntax-highlighting
80 zsh-autopair
81)
82source $ZSH/oh-my-zsh.sh
83
84# Misc options
85setopt extendedglob notify
86unsetopt beep nomatch
87bindkey -v
88zle_highlight+=(paste:none)
89
90# Copy current prompt to clipboard with CTRL+Y
91if [[ -n ${WAYLAND_DISPLAY} ]]; then
92 copy_line_to_x_clipboard() {
93 echo -n ${BUFFER} | wl-copy
94 zle reset-prompt
95 }
96 zle -N copy_line_to_x_clipboard
97 bindkey '^Y' copy_line_to_x_clipboard
98fi
99
100source ~/.aliases
101source ~/.config/zsh/kc.zsh
102
103# Bind home and end
104bindkey "\033[H" beginning-of-line
105bindkey "\033[F" end-of-line
106
107# zle -N zle-line-init
108TRAPWINCH() {
109 zle && { zle reset-prompt; zle -R }
110}
111
112# Load fzf
113if [[ $- == *i* ]] && [[ -d /usr/share/fzf/ ]]; then
114 source "/usr/share/fzf/completion.zsh" NO
115 source "/usr/share/fzf/key-bindings.zsh" NO
116fi
117
118type zoxide &> /dev/null && eval "$(zoxide init zsh)"
119type autopair-init &> /dev/null && autopair-init
120
121# Mise dependency manager
122eval "$(mise activate zsh)"
123
124{{ if (index . "gui" | default false) -}}
125if [ -z "${WAYLAND_DISPLAY}" ] && [ "${XDG_VTNR}" -eq 1 ] && [[ $(tty) = /dev/tty1 ]]; then
126 # hyprland on tty1
127 set_env
128 exec uwsm start -e -D Hyprland hyprland.desktop
129elif [[ $(tty) =~ "/dev/tty[0-9]" ]]; then
130 # Enable unicode characters in the tty
131 set_env
132 unicode_start
133elif [ -n "$SSH_CONNECTION" ] || [ -n "$SSH_CLIENT" ]; then
134 set_env
135fi
136{{ else }}
137set_env
138{{- end }}