export ZSH_CONFIG=$HOME/.config/zsh export OHMYZSH=$ZSH_CONFIG/oh-my-zsh export OHMYZSH_CUSTOM=$OHMYZSH/custom export ZSHRC_GIT="https://git.jeremymcclure.com/jeremy/scripts/raw/branch/master/zsh/" export ZSHRC_URL="$ZSHRC_GIT/zshrc" export ZSHRC_BOOTSTRAP_URL="$ZSHRC_GIT/zshrc-bootstrap.zsh" export ZSHRC_BOOTSTRAP_VERSION="2" export ZSHRC_BOOTSTRAP="$ZSH_CONFIG/.bootstrapped" [[ -d "$HOME/Scripts" ]] && path+=("$HOME/Scripts") [[ -d "$HOME/.local/bin" ]] && path+=("$HOME/.local/bin") [[ -d "$HOME/AppImages" ]] && path+=("$HOME/AppImages") [[ -d "$HOME/.opencode/bin" ]] && path+=("$HOME/.opencode/bin") update_zshrc(){ local tmp=/tmp/.zshrc.$$ curl -sSL --connect-timeout 5 "$ZSHRC_URL" -o "$tmp" 2>/dev/null || return if zsh -n "$tmp" 2>/dev/null && ! cmp -s "$tmp" "$HOME/.zshrc" 2>/dev/null; then echo "Updating zshrc..." mv "$tmp" "$HOME/.zshrc" && echo "Updated. Reloading..." && exec zsh fi rm -f "$tmp" } fix_btopbg(){ sed -i 's/theme_background = true/theme_background = false/' ~/.config/btop/btop.conf } install_opencode(){ curl -fsSL https://opencode.ai/install | bash } # Bootstrap: download and run once per bootstrap version if [[ ! -f "$ZSHRC_BOOTSTRAP" || "$(cat "$ZSHRC_BOOTSTRAP" 2>/dev/null)" != "$ZSHRC_BOOTSTRAP_VERSION" || "$BOOTSTRAP" == "true" ]]; then tmp=/tmp/.zshrc_bootstrap.$$ curl -sSL --connect-timeout 5 -o "$tmp" "$ZSHRC_BOOTSTRAP_URL" 2>/dev/null if [[ -f "$tmp" ]]; then zsh "$tmp" 2>/dev/null echo "$ZSHRC_BOOTSTRAP_VERSION" > "$ZSHRC_BOOTSTRAP" rm -f "$tmp" fi fi TMUXCONF="$HOME/.config/tmux" BYOBUCONF="$HOME/.config/byobu" TMUXREMOTE="$ZSHRC_GIT/tmux.conf" if [ ! -f "$TMUXCONF" ]; then # Create a secure temporary file TEMP_TMUXCONF=$(mktemp) # Download to temp file. # The '&&' ensures the 'mv' only runs if curl succeeds (exit code 0). if curl -sSL --connect-timeout 5 -o "$TEMP_TMUXCONF" "$TMUXREMOTE"; then mkdir -p "$TMUXCONF" "$BYOBUCONF" cp "$TEMP_TMUXCONF" "$TMUXCONF/tmux.conf" mv "$TEMP_TMUXCONF" "$BYOBUCONF/.tmux.conf" else # Optional: Clean up temp file if download failed rm -f "$TEMP_TMUXCONF" echo "Error: Failed to download tmux config from $TMUXREMOTE" >&2 fi fi export HISTFILE="$ZSH_CONFIG/history" export ZSH_COMPDUMP="$ZSH_CONFIG/zcompdump-${HOST}-${ZSH_VERSION}" export HISTSIZE=10000 export SAVEHIST=10000 setopt SHARE_HISTORY setopt HIST_IGNORE_DUPS setopt HIST_IGNORE_ALL_DUPS setopt HIST_REDUCE_BLANKS setopt HIST_FCNTL_LOCK setopt AUTO_CD setopt AUTO_LIST setopt INTERACTIVE_COMMENTS ZSH_THEME="" ENABLE_CORRECTION="false" HIST_STAMPS="mm/dd/yyyy" plugins=( git sudo extract eza history kitty docker docker-compose archlinux encode64 universalarchive zsh-autosuggestions fast-syntax-highlighting fzf fzf-tab systemd vscode rsync starship ) zstyle ':omz:update' 'mode' auto zstyle ':omz:plugins:eza' 'dirs-first' yes zstyle ':omz:plugins:eza' 'git-status' yes zstyle ':omz:plugins:eza' 'header' yes zstyle ':omz:plugins:eza' 'show-group' yes zstyle ':omz:plugins:eza' 'icons' yes zstyle ':omz:plugins:eza' 'color-scale' all zstyle ':omz:plugins:eza' 'color-scale-mode' fixed zstyle ':omz:plugins:eza' 'size-prefix' si zstyle ':omz:plugins:eza' 'hyperlink' yes zstyle ':completion:*' menu select zstyle ':completion:*' matcher-list 'm:{a-z}={A-Za-z}' zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}" zstyle ':completion:*' special-dirs true source $OHMYZSH/oh-my-zsh.sh alias c='clear' alias q="exit" alias nbstat=$'netbird status --json | jq -r \'.peers.details[]? | [(.hostname // .fqdn), .netbirdIp, .status] | @tsv\' | column -t -s $\'\\t\'' alias open-ports="ss -tulpn | grep LISTEN" alias yeet='yay -Rcs' # Auto-update: check every shell start, silently fail if server unreachable if [[ -o interactive ]]; then tmp=/tmp/.zshrc.$$ curl -sSL --connect-timeout 3 "$ZSHRC_URL" -o "$tmp" 2>/dev/null if [[ -f "$tmp" ]] && zsh -n "$tmp" 2>/dev/null && ! cmp -s "$tmp" "$HOME/.zshrc" 2>/dev/null; then echo "Updating zshrc..." mv "$tmp" "$HOME/.zshrc" && exec zsh fi rm -f "$tmp" fi [[ -f $HOME/.zshrc.local ]] || touch $HOME/.zshrc.local source $HOME/.zshrc.local if [[ $FFENABLED != "false" && ( -o interactive || $(tty) == *"pts"* ) ]] && command -v fastfetch >/dev/null; then fastfetch --config examples/13 fi