Initial chezmoi-managed dotfiles with bootstrap scripts
- Rename master to legacy-2025 on remote (frozen pre-chezmoi snapshot) - New orphan 'main' branch with bootstrap-enabled config - .chezmoi.yaml.tmpl detects os_family (debian | arch) from /etc/os-release - dot_zshrc.tmpl refactored from current miche config with os_family conditional for pacman vs apt aliases - dot_config/: bat, btop, ghostty (with gruvbox themes), kitty (with gruvbox colors), nvim (LazyVim), paru - dot_gitconfig.tmpl, dot_tmux.conf (verbatim from current state) - run_once_00-install-bootstrap-tools.sh.tmpl: age, git, curl, ca-certificates - run_once_10-add-chaotic-aur.sh.tmpl (arch-only): add Chaotic-AUR + install paru - run_once_20-install-user-packages.sh.tmpl: zsh, tmux, neovim (with version check + binary tarball fallback for debian), oh-my-zsh + plugins, tpm, rustup, all CLI tools - run_onchange_30-ensure-cargo.sh.tmpl: rustup fallback - README.md with onboarding runbook
This commit is contained in:
commit
2f1477668b
45 changed files with 2128 additions and 0 deletions
203
dot_zshrc.tmpl
Normal file
203
dot_zshrc.tmpl
Normal file
|
|
@ -0,0 +1,203 @@
|
|||
# =============================================================================
|
||||
# .zshrc — gnu-plus-dotfiles (chezmoi-managed)
|
||||
# Refactored from miche's original to use os_family for OS-specific bits.
|
||||
# Sync source: https://git.melonbread.xyz/rain/gnu-plus-dotfiles
|
||||
# =============================================================================
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Oh My Zsh
|
||||
# ---------------------------------------------------------------------------
|
||||
export ZSH="$HOME/.oh-my-zsh"
|
||||
|
||||
# No theme — using starship
|
||||
ZSH_THEME=""
|
||||
|
||||
# Plugins (loaded before starship so prompt is clean)
|
||||
plugins=(
|
||||
git
|
||||
fzf
|
||||
sudo # ESC ESC to add sudo
|
||||
tmux
|
||||
systemd
|
||||
rust
|
||||
rsync
|
||||
command-not-found
|
||||
zsh-syntax-highlighting # fish-style live colors — MUST be near last
|
||||
zsh-history-substring-search # fish-style Up/Down history search
|
||||
zsh-autosuggestions # fish-style ghost completions — MUST be last
|
||||
)
|
||||
|
||||
|
||||
source $ZSH/oh-my-zsh.sh
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# History
|
||||
# ---------------------------------------------------------------------------
|
||||
setopt EXTENDED_HISTORY # write timestamp + duration
|
||||
setopt HIST_IGNORE_DUPS # don't save consecutive duplicates
|
||||
setopt HIST_IGNORE_ALL_DUPS # remove older duplicates of new commands
|
||||
setopt HIST_IGNORE_SPACE # commands starting with space → not saved
|
||||
setopt HIST_REDUCE_BLANKS # trim whitespace
|
||||
setopt SHARE_HISTORY # share history across sessions in real time
|
||||
setopt INC_APPEND_HISTORY # append immediately
|
||||
HISTSIZE=10000
|
||||
SAVEHIST=10000
|
||||
HISTFILE=~/.zsh_history
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Shell options — make zsh feel like fish
|
||||
# ---------------------------------------------------------------------------
|
||||
setopt AUTO_CD # `dirname` to cd (like fish)
|
||||
setopt AUTO_PUSHD # cd pushes to dir stack
|
||||
setopt PUSHD_IGNORE_DUPS
|
||||
setopt INTERACTIVE_COMMENTS # # comments in interactive shell
|
||||
setopt EXTENDED_GLOB
|
||||
setopt NO_BEEP
|
||||
|
||||
# Ctrl+Space to accept autosuggestion (like fish)
|
||||
bindkey '^ ' autosuggest-accept
|
||||
# Up/Down arrows → history substring search (like fish)
|
||||
# Both raw form (foot, kitty, alacritty, xterm default) and app-cursor form
|
||||
# (some terminals in DECCKM mode). Unquoted so $terminfo expands.
|
||||
bindkey '^[[A' history-substring-search-up
|
||||
bindkey '^[[B' history-substring-search-down
|
||||
# App-cursor mode: some terminals send ${terminfo[kcuu1]} when DECCKM is set.
|
||||
# Guard so an unset terminfo entry doesn't warn at startup.
|
||||
if (( ${+terminfo[kcuu1]} )) && [[ -n "${terminfo[kcuu1]}" ]]; then
|
||||
bindkey "${terminfo[kcuu1]}" history-substring-search-up
|
||||
fi
|
||||
if (( ${+terminfo[kcud1]} )) && [[ -n "${terminfo[kcud1]}" ]]; then
|
||||
bindkey "${terminfo[kcud1]}" history-substring-search-down
|
||||
fi
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Environment Variables
|
||||
# ---------------------------------------------------------------------------
|
||||
export EDITOR=nvim
|
||||
export LANG=en_US.UTF-8
|
||||
export TMUX_PLUGIN_MANAGER_PATH=~/.tmux/plugins/tpm
|
||||
|
||||
{{ if eq .os_family "arch" -}}
|
||||
# ROCm — on Arch/CachyOS, system handles ROCM_PATH and library paths via
|
||||
# /etc/profile.d/rocm.sh + /etc/ld.so.conf.d/rocm.conf.
|
||||
{{ else if eq .os_family "debian" -}}
|
||||
# Debian: ROCm only relevant if you install it. Leave default until needed.
|
||||
{{ end -}}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# PATH (auto-deduplicated)
|
||||
# ---------------------------------------------------------------------------
|
||||
typeset -U path
|
||||
path=(
|
||||
$HOME/.local/bin
|
||||
$HOME/.bin
|
||||
$path
|
||||
)
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Aliases — common + OS-specific
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# Directory navigation
|
||||
alias ..='cd ..'
|
||||
alias ...='cd ../..'
|
||||
alias ....='cd ../../..'
|
||||
alias .....='cd ../../../..'
|
||||
|
||||
# Modern CLI replacements
|
||||
alias cat='bat'
|
||||
alias ls='eza -al --color=always --group-directories-first --icons'
|
||||
alias ll='eza -l --color=always --group-directories-first --icons'
|
||||
alias la='eza -a --color=always --group-directories-first --icons'
|
||||
alias lt='eza -aT --color=always --group-directories-first --icons'
|
||||
|
||||
{{ if eq .os_family "arch" -}}
|
||||
# Pacman / system (Arch-base only)
|
||||
alias update='sudo pacman -Syu'
|
||||
alias cleanup='sudo pacman -Rns $(pacman -Qtdq)'
|
||||
alias fixpacman='sudo rm /var/lib/pacman/db.lck'
|
||||
alias mirror='sudo cachyos-rate-mirrors || sudo pacman -Syy'
|
||||
alias please='sudo'
|
||||
alias jctl='journalctl -p 3 -xb'
|
||||
alias psmem='ps auxf | sort -nr -k 4'
|
||||
alias psmem10='ps auxf | sort -nr -k 4 | head -10'
|
||||
alias hw='hwinfo --short'
|
||||
alias gitpkg='pacman -Q | grep -i "\-git" | wc -l'
|
||||
{{ else if eq .os_family "debian" -}}
|
||||
# Apt / system (Debian-base only)
|
||||
alias update='sudo apt update && sudo apt upgrade'
|
||||
alias please='sudo'
|
||||
alias jctl='journalctl -p 3 -xb'
|
||||
alias psmem='ps auxf | sort -nr -k 4'
|
||||
alias psmem10='ps auxf | sort -nr -k 4 | head -10'
|
||||
{{ end -}}
|
||||
|
||||
# Utilities
|
||||
alias weather='curl wttr.in'
|
||||
alias wget='wget -c '
|
||||
alias untar='tar -zxvf '
|
||||
alias tarnow='tar -acf '
|
||||
|
||||
# Media
|
||||
alias yt-dlp-mp4="yt-dlp --format 'bestvideo[height<=720]+bestaudio[ext=m4a]/best[ext=mp4]' --merge-output-format mp4 --remux-video mp4 --audio-quality 128k"
|
||||
alias yt-dlp-mp4-fedi="yt-dlp --format 'bestvideo[height<=480]+bestaudio[ext=m4a]/best[ext=mp4]' --merge-output-format mp4 --remux-video mp4 --audio-quality 128k"
|
||||
|
||||
# Personal
|
||||
alias toolbox='distrobox'
|
||||
alias huggingface-cli='hf'
|
||||
|
||||
# Quick reload / edit
|
||||
alias zshsource='source ~/.zshrc'
|
||||
alias zshconfig='chezmoi edit ~/.zshrc'
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# TERM / TTY fixes (ported from fish config)
|
||||
# ---------------------------------------------------------------------------
|
||||
if [[ -z "$TERM" || "$TERM" == "foot-extra" || "$TERM" == "foot+base" ]]; then
|
||||
if [[ -n "$WAYLAND_DISPLAY" ]] && infocmp foot >/dev/null 2>&1; then
|
||||
export TERM=foot
|
||||
elif [[ "$(tty 2>/dev/null)" == /dev/tty* ]]; then
|
||||
export TERM=linux
|
||||
elif infocmp xterm-256color >/dev/null 2>&1; then
|
||||
export TERM=xterm-256color
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ -z "$COLORTERM" && -n "$WAYLAND_DISPLAY" ]]; then
|
||||
export COLORTERM=truecolor
|
||||
fi
|
||||
|
||||
# TTY tint (only on real text TTY)
|
||||
if [[ -z "$DISPLAY" && "$(tty 2>/dev/null)" == /dev/tty* ]]; then
|
||||
setterm -background black -foreground white 2>/dev/null
|
||||
export LS_COLORS='di=33:ln=36:ex=32:so=35:bd=33;1:cd=33:pi=33:fi=0:*.tar=31:*.zip=31:*.gz=31:*.tgz=31:*.jpg=35:*.png=35:*.gif=35:*.mp3=36:*.mp4=36:*.conf=37:*.log=33:*.sh=32:*.py=32'
|
||||
fi
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Integrations
|
||||
# ---------------------------------------------------------------------------
|
||||
eval "$(starship init zsh)"
|
||||
eval "$(zoxide init zsh)"
|
||||
eval "$(fzf --zsh 2>/dev/null)"
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Custom functions — sourced if present (host-specific, not chezmoi-managed)
|
||||
# ---------------------------------------------------------------------------
|
||||
[[ -f ~/.config/zsh/functions.zsh ]] && source ~/.config/zsh/functions.zsh
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Bun (if installed)
|
||||
# ---------------------------------------------------------------------------
|
||||
[[ -d "$HOME/.bun/bin" ]] && export PATH="$HOME/.bun/bin:$PATH"
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Engram persistent memory — default points at kaiser.local:7438 if unset
|
||||
# ---------------------------------------------------------------------------
|
||||
export ENGRAM_URL="${ENGRAM_URL:-http://kaiser.local:7438}"
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Fastfetch — run on every interactive shell start
|
||||
# ---------------------------------------------------------------------------
|
||||
if command -v fastfetch >/dev/null 2>&1; then
|
||||
fastfetch
|
||||
fi
|
||||
Loading…
Add table
Add a link
Reference in a new issue