2026-02-22 22:43:56 +01:00
2019-03-20 01:11:12 +04:00
2026-02-16 08:29:14 +01:00
2026-01-29 21:22:28 +01:00
2026-02-16 08:29:14 +01:00

dotfiles

Bare-git managed dotfiles for zsh/vim/tmux on Linux and macOS.

How it works

This repo uses a bare git repository at ~/.dotgit with the work tree set to $HOME. This avoids symlinks and lets dotfiles live at their native paths.

The alias that drives everything:

alias .g='git --git-dir=$HOME/.dotgit/ --work-tree=$HOME'

.g status, .g add, .g diff, .g commit, .g push — same as git, just scoped to the dotfiles repo. Untracked files are hidden by default (showUntrackedFiles = no in config).

Bootstrap on a new machine

git clone --bare https://gitea.abra.me/svxf/dotfiles.git $HOME/.dotgit
alias .g='git --git-dir=$HOME/.dotgit/ --work-tree=$HOME'
.g checkout
.g config status.showUntrackedFiles no

If checkout conflicts with existing files, back them up first:

.g checkout 2>&1 | grep "^\t" | xargs -I{} mv {} {}.bak
.g checkout

On next shell start, zinit will bootstrap itself and install all plugins automatically.

Tracked files

File What it does
.zshrc Shell config — plugins, aliases, functions, keybindings, PATH
.vimrc Vim config — space-leader, persistent undo, arrow keys disabled
.tmux.conf tmux config — mouse, green accent, fzf window switcher, auto-rename
.starship.toml Prompt — two-line, git status, docker indicators, command duration
.gitignore_global Global ignores — *~, .DS_Store, __pycache__, .idea, .ipynb_checkpoints

Key features

Zinit plugin stack (.zshrc)

  • zsh-autosuggestions — inline fish-style suggestions
  • zsh-syntax-highlighting — live command coloring
  • zsh-completions — extra completion definitions
  • zsh-history-substring-search — up/down searches from prefix
  • starship — installed via zinit from GitHub releases

Async dotfiles pull

On shell start, a background job pulls --ff-only from origin once per day (marker at ~/.cache/.dotfiles-pull). Silent, non-blocking.

Starship prompt (.starship.toml)

Two-line layout:

  • Line 1: docker container indicator → docker-compose status → git branch/status → (fill) → directory
  • Line 2: character (green=ok, red=error)
  • Right: command duration (>5s) → user@host → time

Custom modules detect /.dockerenv for container awareness and parse docker compose ps for service status.

fzf integration (.zshrc)

Sources fzf keybindings and completion when available. Default opts: --height 40% --reverse.

Project switcher — pj (.zshrc)

Fuzzy-finds directories under /projects or ~/projects using fzf. pj foo pre-fills the query.

Yazi wrapper — y (.zshrc)

Wraps the yazi file manager so the shell cds to wherever you navigated on exit.

Docker compose aliases (.zshrc)

Alias Expands to
,dcdu docker compose --profile dev up service_dev --force-recreate --detach
,dcdd docker compose --profile dev down --remove-orphans
,dcdl docker compose --profile dev logs -f service_dev
dcu docker compose up --force-recreate --detach
dcd docker compose down --remove-orphans
dcl docker compose logs -f

Tmux aliases (.zshrc)

Alias What it does
tmuxr Attach-or-create session named "auto"
tmuxn Same + opens a new window
tmuxa NAME Attach-or-create a named session

Tmux keybindings (.tmux.conf)

  • Shift+Left/Right — switch windows (no wrap)
  • PgUp/PgDn — swap window position left/right
  • prefix+f — fzf fuzzy window switcher
  • prefix+R — rename window
  • Splits retain current path. 1-indexed windows, auto-rename shows command@directory.

Vim (.vimrc)

Space as leader. jk exits insert mode. Persistent undo in ~/.vim/undo/. Arrow keys disabled (hjkl only). Mouse enabled. Smart case search. 8-line scroll margin.

Utility functions (.zshrc)

Function Purpose
clip Pipe stdin to system clipboard via OSC 52 (works over SSH/tmux)
mkcd DIR mkdir + cd in one step
cdtmp [label] Create and cd into a timestamped temp dir under ~/tmp/

Other aliases (.zshrc)

  • cclaude
  • ,cdclaude --dangerously-skip-permissions (with sandbox flag)
  • zshreloadexec zsh
  • LATEST — global alias expanding to *(om[1]) (most recently modified file)

Shell options (.zshrc)

Extended history (100k lines, shared, deduped). Case-insensitive globbing. Auto-pushd on cd. No flow control (Ctrl-S disabled). Emacs keybindings with Ctrl+X,E / Alt+E for $EDITOR.

Machine-local overrides

~/.zshrc-extra is sourced at the end if it exists — for per-machine config that doesn't belong in version control.

Description
No description provided
Readme 16 MiB