mirror of
https://github.com/ivuorinen/tsm.git
synced 2026-01-26 03:24:01 +00:00
2.5 KiB
2.5 KiB
tsm — ultra-light tmux session manager (Go 1.24)
Features:
- Live built-in fuzzy filter UI (no external
fzf) - Scans Git repos concurrently (one goroutine per
scan_pathsroot) - Max depth 3 by default
- Session name from folder + parent:
/Code/ivuorinen/a→ivuorinen_a - Existing tmux sessions listed and selectable
- Bookmarked folders always shown
- XDG config, no macOS
Librarydefault
Install
go install github.com/ivuorinen/tsm@latest
Usage
- Run
tsm→ live filter list opens. Type to filter, navigate with keys below, Enter to select. - Selecting a session switches to it. Selecting a repo/bookmark creates (or reuses) a session and switches/attaches.
Keybindings
| Key | Action |
|---|---|
| ↑ / Ctrl-P | Move up |
| ↓ / Ctrl-N | Move down |
| Home | Jump to first item |
| End | Jump to last item |
| PgUp | Move up 5 items |
| PgDn | Move down 5 items |
| Backspace | Delete one character from query |
| Ctrl-U | Clear query |
| Tab | Toggle preview (path + planned action) |
| Enter | Select |
| Ctrl-C | Cancel |
tmux key binding (popup)
bind-key t display-popup -E 'tsm' -w 90% -h 80%
Config
XDG-only:
$XDG_CONFIG_HOME/tsm/config.yamlor fallback$HOME/.config/tsm/config.yaml
Create a default config:
tsm -init-config
Example:
scan_paths:
- "$HOME/Code"
bookmarks:
- "$HOME"
exclude_dirs:
- ".git"
- "node_modules"
- "vendor"
- "dist"
- "build"
- "target"
- "out"
- "bin"
- ".cache"
- ".next"
- ".nuxt"
- ".pnpm-store"
- ".yarn"
- ".yarn/cache"
- ".venv"
- ".direnv"
- "deps"
- "_build"
- ".terraform"
- ".terragrunt-cache"
- ".m2"
- ".gradle"
- "Pods"
- "Carthage"
max_depth: 3
Flags
-config PATH: set explicit config file path-print: print candidate list (Kind, Name, Path) and exit-init-config: write default config to XDG path and exit
Tests
go test ./...
Tests mock tmux and validate name derivation, fuzzy ranking, scanning (depth/excludes), and tmux command flow.