Nightshift-Task: docs-backfill Nightshift-Ref: https://github.com/marcus/nightshift
4.7 KiB
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)
c→claude,cd→claude --dangerously-skip-permissions(with sandbox flag)zshreload→exec zshLATEST— 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.