alias dotfiles='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
git clone --bare https://github.com/leviFrosty/dotfiles.git $HOME/.dotfiles
dotfiles config --local status.showUntrackedFiles no
dotfiles checkout
brew bundle --file=~/Brewfile
source ~/.zshrcAside: how to open Lazygit in dotfiles bare git repo
lazygit --git-dir=$HOME/.dotfiles --work-tree=$HOMEIf some of the dotfiles are already present, you will see errors.
error: The following untracked working tree files would be overwritten by checkout:
.bashrc
Please move or remove them before you switch branches.
Aborting
Remove or backup any collisions and repeat the checkout
mv ~/.zshrc ~/.zshrc_backup
dotfiles checkoutdotfiles add ~/.config/aerospace/**
dotfiles pushdotfiles pullbrew bundle dump --describe --file=~/Brewfile --forcebrew bundle --file=~/BrewfileDue to visual conflicts with the native MacOS menu bar, I removed Sketchybar. I have the MacOS menu bar set to autohide.
curl -L https://raw.githubusercontent.com/FelixKratz/dotfiles/master/install_sketchybar.sh | shA work command launches the project's dev workstation: editor + a tmux session full of dev servers, all configured per-project by a work.yml. Session orchestration is handled by smug. Custom config is in ~/.tmux.conf; the launcher is ~/.local/bin/work.
brew install tmux smug
# Ensure ~/.local/bin is on PATH (it's already on this machine; verify on a new one):
echo $PATH | tr ':' '\n' | grep -qx "$HOME/.local/bin" || echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrcIn any project that doesn't yet have a work.yml:
cd ~/dev/some-project
workWhen prompted, accept (default Y) to launch Claude Code with the /create-work-yml skill — it explores the repo, asks intent questions, and writes work.yml for you.
To run the skill manually inside an existing Claude session:
/create-work-yml
work # opens editor + attaches/starts the tmux session for this project
tmux ls # list active tmux sessions
tmux a -t <session> # attach by name
tmux kill-session -t <session> # kill one session
tmux kill-server # nuke everything (use after tmux config changes if `prefix r` won't suffice)Prefix is Ctrl-b. Custom bindings live in ~/.tmux.conf. Reload after edits with prefix r.
| Keys | Action |
|---|---|
prefix h / j / k / l |
Focus pane left / down / up / right |
prefix o |
Cycle to next pane |
prefix q then digit |
Show pane numbers, jump to one |
prefix z |
Zoom (fullscreen) toggle on current pane |
| Keys | Action |
|---|---|
prefix H / J / K / L |
Resize pane left / down / up / right by 5 cells |
| Keys | Action |
|---|---|
prefix | |
Split vertical (left / right) |
prefix - |
Split horizontal (top / bottom) |
prefix x |
Kill current pane (confirms) |
| Keys | Action |
|---|---|
prefix n |
New window (inherits cwd) — was next-window by default |
prefix a |
Previous window |
prefix b |
Next window — was send-prefix by default |
prefix 0..9 |
Jump to window by number |
prefix , |
Rename current window |
prefix w |
Window picker |
prefix Tab |
Last-used window — was prefix l by default |
prefix & |
Kill current window (confirms) |
prefix C-b |
Send literal prefix to nested app (relocated from prefix b) |
prefix c and prefix p are intentionally unbound so muscle memory points at the new layout.
| Keys / Command | Action |
|---|---|
prefix d |
Detach (session keeps running in the background) |
prefix s |
Session picker |
prefix $ |
Rename current session |
tmux ls |
List sessions (from shell) |
tmux a -t <name> |
Attach (from shell) |
tmux kill-session -t <name> |
Kill one session |
tmux kill-server |
Kill every session and the tmux daemon |
| Keys | Action |
|---|---|
prefix [ |
Enter copy mode |
v |
Start selection |
Ctrl-v |
Toggle rectangular selection |
y |
Copy + exit; pipes through pbcopy so the system clipboard gets it |
q or Esc |
Exit copy mode |
| Keys | Action |
|---|---|
prefix r |
Reload ~/.tmux.conf |
prefix ? |
Show every key binding |
prefix : |
Tmux command prompt (e.g. :source-file ~/.tmux.conf) |
Smug auto-creates one starter pane per window. Window-level commands: runs in that starter pane; entries in panes: add additional panes on top. So N services → window commands: for service #1 + (N-1) entries in panes:. Putting all N in panes: produces N+1 panes (one empty starter shell at the top).