Config explorer

The actual config — not a description of it

Every file below is pulled straight from its source repo at build time and rendered as-is. Pick a layer; read the real thing. Truncated files link to the full source on GitHub.

Authored once, vendored into every repo.

dotfiles-core zsh/aliases.zsh
view on GitHub ↗

Modern-CLI aliases (eza, bat, rg, fd…), each guarded by a tools.zsh capability check so a missing tool never breaks the shell.

# core/zsh/aliases.zsh
# ──────────────────────────────────────────────────────────────────────────────
# Aliases for the modern CLI stack. Every alias touching an optional tool is
# GUARDED by a HAVE_* flag from tools.zsh, so on a bare box (fresh server, rescue
# shell) you transparently get the classic command. Load AFTER tools.zsh.
# Anything offensive/engagement-flavoured lives in dotfiles-Kali, not here.
# ──────────────────────────────────────────────────────────────────────────────

# ── ls -> eza ─────────────────────────────────────────────────────────────────
if [[ -n ${HAVE_EZA:-} ]]; then
  alias ls='eza --group-directories-first --icons=auto'
  alias ll='eza -lah --group-directories-first --icons=auto --git'
  alias la='eza -a  --group-directories-first --icons=auto'
  alias lt='eza --tree --level=2 --icons=auto'
  alias llt='eza --tree --level=3 -l --icons=auto'
  alias tree='eza --tree --icons=auto'
  (($+functions[compdef])) && compdef eza=ls # reuse ls completion for eza
else
  alias ll='ls -lah'
  alias la='ls -A'
fi

# ── cat -> bat (resolved name from tools.zsh) ────────────────────────────────
if [[ -n ${HAVE_BAT:-} ]]; then
  alias cat="$BAT_BIN --paging=never"
  alias catp="$BAT_BIN"   # paged, full bat
  export BAT_THEME="ansi" # follow the terminal palette (tokyonight via ghostty)
  export MANPAGER="sh -c 'col -bx | $BAT_BIN -l man -p'"
fi

# ── find -> fd ────────────────────────────────────────────────────────────────
[[ -n ${HAVE_FD:-} ]] && alias fd="$FD_BIN"

# ── grep stays POSIX for scripts; rg is its own command (smart-case default) ──
[[ -n ${HAVE_RG:-} ]] && alias rg='rg --smart-case'

# ── cd -> zoxide (z), interactive jump (zi), `-` to previous dir ─────────────
if [[ -n ${HAVE_ZOXIDE:-} ]]; then
  alias cd='z'
  alias cdi='zi'
fi
alias -- -='cd -'

# ── disk / process / monitor ──────────────────────────────────────────────────
[[ -n ${HAVE_DUST:-} ]]  && alias du='dust'
[[ -n ${HAVE_PROCS:-} ]] && alias ps='procs'
[[ -n ${HAVE_BTOP:-} ]]  && alias top='btop' && alias htop='btop'
[[ -n ${HAVE_VIDDY:-} ]] && alias watch='viddy'
# df → duf (modern, mountpoint-aware); classic `df -h` stays the bare-box fallback.
if [[ -n ${HAVE_DUF:-} ]]; then alias df='duf'; else alias df='df -h'; fi

# ── file manager ──────────────────────────────────────────────────────────────
[[ -n ${HAVE_YAZI:-} ]] && {
  alias fm='yazi'
  alias y='yazi'
}

# ── 2026 modern stack additions (all guarded; classics untouched) ────────────
# xh: Rust HTTPie — for poking APIs / web targets. curl stays for scripts.
[[ -n ${HAVE_XH:-} ]] && {
  alias http='xh'
  alias https='xh --https'
}
# glow: render markdown in the terminal (engagement notes, READMEs)
[[ -n ${HAVE_GLOW:-} ]] && alias md='glow --pager'
# doggo: modern dig (DNS recon). dig stays as-is; this is a distinct verb.
[[ -n ${HAVE_DOGGO:-} ]] && alias dns='doggo'
# gron / sd are their own commands (no alias — never shadow sed in scripts).
# jq / yq / hyperfine / shellcheck / shfmt are likewise their own commands: they
# shadow nothing classic, so they get HAVE_* detection in tools.zsh but no alias.

# ── editor + misc QoL ─────────────────────────────────────────────────────────
alias vim='nvim'
# diff: colourise ONLY when this box's diff actually supports `--color` (GNU does;
# BSD/macOS diff — the dotfiles-MacBook target — does NOT, where an unconditional
# alias would make every `diff` invocation error). Feature-probe once at load with a
# no-op comparison; the bare classic `diff` stays the fallback. (df → duf/df -h above.)
if diff --color=auto /dev/null /dev/null >/dev/null 2>&1; then
  alias diff='diff --color=auto'
fi

# ── git ───────────────────────────────────────────────────────────────────────
# The git alias set is the single source of truth in git.zsh (OMZ-style, loaded
# right after this file). Only the non-git lazygit launcher lives here.
alias lg='lazygit'

# ── jujutsu (jj) — OPT-IN, colocated git companion (NEVER shadows git) ─────────
# Guarded by HAVE_JJ (tools.zsh): on a box without jj these simply don't exist, so
# nothing breaks. jj is additive — it runs on top of the same `.git` repo and never
# replaces git, so we deliberately do NOT alias `git`. Just a few short verbs for the
# operator who's opted in (config: core/jujutsu/config.toml → ~/.config/jj/config.toml).
[[ -n ${HAVE_JJ:-} ]] && {
  alias jjs='jj status'
  alias jjl='jj log'
  alias jjd='jj diff'
}

# ── upstream sync (gsync) ─────────────────────────────────────────────────────
# `gsync` pushes an OS repo's vendored core/ subtree back upstream to dotfiles-core.
# Resolve the runner relative to THIS file (survives the core/ subtree living
# inside each OS repo) — the same %x trick maint.zsh uses for its runner, so the
# shortcut works without putting .bin on PATH. A function (not an alias) so a
# dotfiles path containing whitespace stays one word and any args pass through.
typeset -g _SYNC_UPSTREAM_SH="${${(%):-%x}:A:h}/../.bin/sync-upstream.sh"
_SYNC_UPSTREAM_SH="${_SYNC_UPSTREAM_SH:A}"
gsync() { "$_SYNC_UPSTREAM_SH" "$@"; }

# ── named directories (~dots, ~proj) ──────────────────────────────────────────
hash -d dots="$HOME/.config"
hash -d proj="$HOME/Projects"

# ── notes (general note-taking; NOTES_DIR defaults to ~/Notes) ───────────────
: "${NOTES_DIR:=$HOME/Notes}"
alias notes='cd "$NOTES_DIR" && nvim .'

# ── safety nets (POSIX, intentionally NOT modernized) ────────────────────────
# rm: macOS overrides this to `trash` in os/macos.zsh when trash(1) is available.
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias mkdir='mkdir -p'

# ── help / docs ───────────────────────────────────────────────────────────────
# tealdeer: `help <cmd>` → community-curated quick-reference (complement to man).
[[ -n ${HAVE_TLDR:-} ]] && alias help='tldr'

# ── network conveniences (stay in Core; anything engagement-flavored -> Kali)─
alias myip='curl -fsS https://ifconfig.me 2>/dev/null && echo'
alias ports='ss -tulpn 2>/dev/null || netstat -tulpn'
[[ -n ${HAVE_GPING:-} ]] && alias ping='gping'
# NOTE: `serve` is now a function in functions.zsh (prints the reachable URL and
# takes an optional port), replacing the old `python3 -m http.server` alias.
dotfiles-core starship/starship.toml
view on GitHub ↗

The Tokyo Night prompt — symlinked to starship’s default path, so no STARSHIP_CONFIG env is needed.

"$schema" = 'https://starship.rs/config-schema.json'

# dotfiles-* :: starship prompt  (tokyonight-storm, low-glare revision)
# ──────────────────────────────────────────────────────────────────────────────
# WHAT CHANGED & WHY:
# The previous revision kept the gruvbox-era layout but swapped in tokyonight hex
# values — and tokyonight's orange/yellow/cyan are *foreground accents*, not fill
# colors. Using them as big segment BACKGROUNDS with light text gave you three
# glaring bright bands. This revision inverts that relationship:
#
#   • Every segment now sits on one of two DARK surface shades (srf1/srf2) that
#     step subtly so the powerline arrows still read as a gentle ridge, not a
#     rainbow. The shapes/format are unchanged — only the color model flipped.
#   • The bright tokyonight colors are now the TEXT/ICON color of each segment,
#     so each band is still identifiable at a glance but easy on the eyes:
#         os/user → blue · dir → yellow · git branch → green · git status → orange
#         languages → cyan · docker/conda → purple · time → muted
#
# KNOB: want a touch more pop on one band? Change just that module's text color
# (the `fg:` inside its `format`). To go even calmer, point a module at
# color_comment. Nothing else needs to move.
# ──────────────────────────────────────────────────────────────────────────────
# BAND STRUCTURE (why git rides the same surface as dir, and time the same as
# docker): a powerline band that can be EMPTY leaves its two arrows back-to-back
# with nothing between them — a stray notch that looks like a gap (this is what
# happened to the git band in a non-repo dir). The fix is to group modules so
# every colored band is anchored by an always-present module. The only modules
# that ALWAYS render are os/username, directory, and time — so there are exactly
# three gap-proof bands:
#   srf1 : os + username
#   srf2 : directory + git + languages          (anchored by directory)
#   srf1 : docker/k8s/aws/conda/… + custom + cmd_duration + jobs + time  (by time)
# Only two interior arrows remain, both flanked by always-present content, so no
# empty-band gaps can appear. (We also dropped $fill: it claims the whole line
# width, which left zero room for zsh's RPROMPT and suppressed right_format.)

format = """
[](fg:color_srf1)\
$os\
$username\
[](fg:color_srf1 bg:color_srf2)\
$directory\
$git_branch\
$git_commit\
$git_state\
$git_status\
$git_metrics\
$c\
$cpp\
$rust\
$golang\
$nodejs\
$bun\
$php\
$java\
$kotlin\
$haskell\
$python\
$ruby\
$lua\
[](fg:color_srf2 bg:color_srf1)\
$docker_context\
$kubernetes\
$aws\
$conda\
$pixi\
$direnv\
$custom\
$jobs\
$time\
[](fg:color_srf1)\
$line_break$status$character$sudo"""

right_format = """
[](fg:color_srf1)\
$shell$cmd_duration$memory_usage\
[](fg:color_srf1)\
"""

continuation_prompt = "[∙](fg:color_comment)" # the > > on multi-line input

palette = 'tokyonight_storm'

[palettes.tokyonight_storm]
# ── accents — now used as TEXT, not as fills ──────────────────────────────────
color_fg0 = '#c0caf5'     # fg (brightest text)
color_fg_dark = '#a9b1d6' # softer text (quiet segments)
color_blue = '#7aa2f7'
color_aqua = '#7dcfff'    # cyan
color_green = '#9ece6a'
color_orange = '#ff9e64'
color_purple = '#bb9af7'  # magenta
color_red = '#f7768e'
color_yellow = '#e0af68'
color_comment = '#565f89' # muted / de-emphasized
# ── surfaces — the two dark segment fills (subtle stepped depth) ──────────────
color_srf1 = '#24283b' # storm bg, slightly raised above the terminal
color_srf2 = '#1f2335' # bg_dark, a touch deeper

[os]
disabled = false
style = "bg:color_srf1 fg:color_aqua"

[os.symbols]
Windows = "󰍲 "
Ubuntu = "󰕈 "
SUSE = ""
Raspbian = "󰐿 "
Mint = "󰣭 "
Macos = "󰀵 "
Manjaro = ""
Linux = "󰌽 "
Gentoo = "󰣨 "
Fedora = "󰣛 "
Alpine = ""
Amazon = ""
Android = ""
AOSC = ""
Arch = "󰣇 "
Artix = "󰣇 "
EndeavourOS = ""
CentOS = ""
Debian = "󰣚 "
Redhat = "󱄛 "
RedHatEnterprise = "󱄛 "
Pop = ""

[username]
show_always = true
style_user = "bg:color_srf1 fg:color_purple"
style_root = "bg:color_srf1 fg:color_red"    # root stands out (kept readable, not a fill)
format = '[$user ]($style)'

[directory]
style = "fg:color_yellow bg:color_srf2"
format = '[ $path ]($style)'
truncation_length = 3
truncation_symbol = "../"
read_only = "󰌾 "                                          # NEW vs your config: lock icon in read-only dirs
read_only_style = "fg:color_red bg:color_srf2"

Showing the first 140 of 426 lines — read the full file ↗

dotfiles-core tmux/tmux.reset.conf
view on GitHub ↗

The keybinding layer (prefix C-a lives here), sourced first by tmux.conf so the bindings are the single source of truth.

# core/tmux/tmux.reset.conf  → symlinked to ~/.config/tmux/tmux.reset.conf
# ──────────────────────────────────────────────────────────────────────────────
# THE KEYBINDING LAYER. Sourced FIRST by tmux.conf (before settings/theme/plugins).
# Splitting keys out of tmux.conf — an idea borrowed from omerxx's dotfiles — keeps
# the main file about *configuration* and this file about *muscle memory*. It also
# makes it trivial to wipe every default and start clean if you ever want to.
#
# NOTE: window MOVEMENT across nvim<->tmux (C-h/j/k/l) is owned by
# vim-tmux-navigator (plugin, set in tmux.conf) and is intentionally NOT here.
# These are the PREFIX-table bindings.
# ──────────────────────────────────────────────────────────────────────────────

# Uncomment to start from a completely blank slate (then everything below is your
# entire keymap). Left commented so tmux's sensible defaults remain as a fallback.
# unbind-key -a

# ── Prefix: C-a (screen-style; frees C-b) ─────────────────────────────────────
set -g prefix C-a
unbind C-b
bind C-a send-prefix
bind C-a last-window          # double-tap prefix → toggle last window

# ── Reload ────────────────────────────────────────────────────────────────────
unbind r
bind r source-file ~/.config/tmux/tmux.conf \; display-message "󰑓 tmux.conf reloaded"

# ── Panes: vim-style selection (prefix h/j/k/l) ───────────────────────────────
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# ── Panes: splits keep the current path ───────────────────────────────────────
unbind '"'
unbind %
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
bind '\' split-window -fh -c "#{pane_current_path}"   # full-height vertical split
bind _ split-window -fv -c "#{pane_current_path}"     # full-width horizontal split

# ── Panes: resize (repeatable -r, so you can hold the key) ────────────────────
bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5
bind -r m resize-pane -Z                              # (m)aximize / zoom toggle

bind x kill-pane                                      # no confirm prompt
bind X swap-pane -D                                   # rotate current pane down
bind P set pane-border-status                         # toggle per-pane titles
bind * setw synchronize-panes                         # type into all panes at once

# (F)loating pane — tmux 3.7+ feature. `*` is the upstream default but we use it
# for synchronize-panes above, so floating panes get their own key. Guarded by a
# capability probe (list-commands exits non-zero when new-pane is absent) so this
# stays portable to the older tmux versions on other Core machines.
if -b 'tmux list-commands new-pane >/dev/null 2>&1' \
   'bind F new-pane -c "#{pane_current_path}"'

# ── Windows ───────────────────────────────────────────────────────────────────
bind c new-window -c "#{pane_current_path}"
bind -n M-H previous-window                           # Alt+H / Alt+L cycle windows
bind -n M-L next-window
bind -n S-Left  previous-window                       # Shift-arrows too
bind -n S-Right next-window
bind , command-prompt -I "#W" "rename-window '%%'"
bind & kill-window

# ── Pane navigation by Alt+arrow (no prefix) ──────────────────────────────────
bind -n M-Left  select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up    select-pane -U
bind -n M-Down  select-pane -D

# ── Copy-mode (vi). Yank pipes through Core's cross-OS `clip`. ────────────────
set-window-option -g mode-keys vi
bind Enter copy-mode
bind -T copy-mode-vi v     send -X begin-selection
bind -T copy-mode-vi C-v   send -X rectangle-toggle
bind -T copy-mode-vi y     send -X copy-pipe-and-cancel "clip"
bind -T copy-mode-vi Escape send -X cancel
unbind -T copy-mode-vi MouseDragEnd1Pane              # keep selection after drag

# ── Quality of life ───────────────────────────────────────────────────────────
bind R refresh-client
bind S choose-session
bind d detach