Shell ergonomics
Project navigation, fuzzy finding, auto-environments and session switching, all set up through fish conf.d auto-sourcing with nothing to run by hand.
Everyday
CDPATH4
- Jump to ~/Code/titan from anywhere
- Jump to ~/Code/scratch from anywhere
- Current dir first, then ~/Code fallback
- Relative paths still take priority over CDPATH
zoxide8
- Zoxide frecency jump (learns from usage)
- Fuzzy match, jumps to best frecency match
- Absolute paths still work normally
- Relative navigation unchanged
- Interactive fzf picker from zoxide database
- Show what zoxide would match
- List all entries sorted by score
- Edit the zoxide database interactively
fzf6
- Fuzzy search command history
- Fuzzy file picker, inserts path at cursor
- Fuzzy cd into subdirectory
- --height 40% --reverse --border
- Pipe anything into fzf for selection
- Find file → fzf pick → open in vim
direnv7
- Auto-loads .envrc if present
- Auto-unloads environment variables
- Approve a new or changed .envrc
- Block an .envrc from loading
- Show current direnv state
- Shell script evaluated on directory entry
- Example .envrc content, sets $FOO
Project switcher5
- Jump directly to ~/Code/titan
- Jump to ~/Code/shell-ergonomics
- No args, opens fzf picker over ~/Code
- Tab completion, lists all ~/Code dirs
- Narrows to matching project names
Project sessionizer6
- Open fuzzy project picker
- Auto-detects cmux/tmux/plain and dispatches
- → Opens in cmux workspace
- → Opens in tmux session
- → Plain cd to project directory
- Project list sourced from ~/Code (max-depth 1)
Configure
Configuration files12
- CDPATH setup
- Zoxide init with cd override
- fzf defaults and keybindings
- direnv hook
- Ctrl+F → project-sessionizer
- Project switcher function
- Dispatcher (cmux/tmux/cd)
- tmux session manager
- cmux workspace manager
- Generate loader in fish conf.d
- Remove loader file
- Auto-generated loader (do not edit)
Reference
tmux sessionizer5
- Create or switch to tmux session for project
- Derived from basename, dots → dashes
- Switches to it via tmux switch-client
- Creates detached, sets cwd, then switches
- Dot replacement for tmux compatibility
cmux sessionizer4
- Create or select cmux workspace for project
- Found via cmux find-window, then selected
- Created via cmux new-workspace --cwd
- Derived from project directory basename
Fish completions8
- All directory names in ~/Code
- All cmux subcommands
- Flags: --cwd, --command
- pin, unpin, rename, move-up, ...
- All browser subcommands
- terminal, browser
- left, right, up, down
- refs, uuids, both