Releases: datamadsen/nunchux
v3.1.1
[3.1.1]
Switcher Configuration
New [switcher] config section to customize window/session switching:
[switcher]
preview = true # Show live preview of window content (default: true)
prefix = > # Character to activate switcher mode (default: >)preview- Enable/disable the window content preview panelprefix- Change the character that activates switcher mode (e.g.,@instead of>)
v3.1.0
What's New
- Window/Session Switcher: Type
>in the main menu to switch to tmux windows and sessions- Windows show with
●/○icons (active/inactive) - Sessions show with
■/□icons (attached/detached) - Filter by typing after
>(e.g.,>nvim) - Backspace to return to normal menu
- Windows show with
- UI Improvement: Added padding to the filter field for better alignment
v3.0.0
This release is a complete rewrite of nunchux from Bash to Go, delivering significant performance improvements while maintaining full feature compatibility.
Performance
~5x faster startup - Benchmarked at 23ms vs 117ms for the Bash version. The menu now appears nearly instantly.
Security
Trusted configs - Local .nunchuxrc files found in project directories now require explicit trust before loading. This protects against malicious configs in cloned repositories.
When nunchux finds a local config, you'll see a prompt:
- No - Skip, use home config (ask again next time)
- Yes, once - Load this time only (ask again next time)
- Yes, always - Trust permanently
- No, never - Block permanently
Trusted and blocked paths are stored in ~/.local/state/nunchux/. See docs/trusted_configs.md for details.
Upgrading
prefix + U
TPM will download the new Go binary automatically. Your existing config works unchanged.
v2.6.0
New Features
- Configurable shortcut toggle key - The key to toggle shortcut visibility is now configurable via
toggle_shortcuts_keysetting. Default remainsctrl-/.
[settings]
toggle_shortcuts_key = ctrl-tv2.5.1
Bug Fixes
- Fixed dirbrowser file count mismatch - The file count shown in the main menu now respects the same filters as the actual dirbrowser (depth, exclude patterns, glob). Previously, the main menu showed a count of all files while the browser showed filtered results.
v2.5.0
Bug Fixes
- Fixed action menu not working - Variable scoping bug in
_nunchux_apply_env()caused the selected item name to be lost when using ctrl-j action menu or other shortcuts. Thewhile readloop was overwriting the outer$namevariable. - Fixed empty selection crash - Added guards against empty item names in launch functions, preventing "bad array subscript" errors.
- Fixed duplicate taskrunner loading - Taskrunners were being loaded twice in some scenarios.
Performance Improvements
Additional lazy loading to reduce startup time:
nunchux-run.sh- Only loaded when launching itemsconfig_templates.sh- Only loaded during onboardingmigration.sh- Only loaded when migration is needed
Improvements
- Better onboarding experience - Improved first-run setup flow
- Centralized error screens - Consistent error display across all error conditions
Test Suite
New comprehensive test framework with 30+ test cases:
- Automated tests - Menu output validation, config parsing, taskrunner detection
- Visual tests - Action types (popup, window, panes), keybindings, overrides
- Semi-automated tests - Pane position verification, background window behavior
Run tests with ./test/run_tests.sh or interactively with ./test/run_tests.sh -i.
v2.4.0
Performance Improvements
Startup time reduced by ~40-50% through subprocess elimination and config caching.
Config caching: Parsed configuration is now cached to disk. On subsequent runs, the cached config is loaded directly instead of re-parsing the config file. The cache automatically invalidates when the config file is modified.
Subprocess reduction: Replaced expensive subprocess calls with pure bash alternatives:
| Before | After | Saves |
|---|---|---|
md5sum for cache key |
Bash parameter expansion | ~10ms |
tmux display-message for CWD |
$PWD variable |
~5ms |
cd && pwd for script paths |
Conditional with ${BASH_SOURCE[0]%/*} |
~5ms |
realpath in popup handler |
$SCRIPT_DIR variable |
~5ms |
| Dimension clamping tmux calls | Use max values directly | ~10ms |
Result: Typical startup improved from ~140-190ms to ~85-105ms.
v2.3.0
Working Directory in Menu Label
The menu now displays the current working directory in the border label, giving context for where commands will run:
nunchux (~/projects/myapp)
Submenus show both the submenu name and directory:
nunchux: system (~/projects/myapp)
This is enabled by default. To disable:
[settings]
show_cwd = falseDirect Action Shortcuts
New keyboard shortcuts to open items in a specific mode, bypassing primary/secondary action settings:
| Setting | Suggested Key | Action |
|---|---|---|
popup_key |
ctrl-p |
Open in popup |
window_key |
ctrl-w |
Open in window |
background_window_key |
ctrl-b |
Open in background window |
pane_right_key |
ctrl-right |
Open in pane to the right |
pane_left_key |
ctrl-left |
Open in pane to the left |
pane_above_key |
ctrl-up |
Open in pane above |
pane_below_key |
ctrl-down |
Open in pane below |
These are disabled by default. Configure only the ones you need:
[settings]
pane_right_key = ctrl-right
pane_left_key = ctrl-left
pane_above_key = ctrl-up
pane_below_key = ctrl-downOr enable all action shortcuts:
[settings]
popup_key = ctrl-p
window_key = ctrl-w
background_window_key = ctrl-b
pane_right_key = ctrl-right
pane_left_key = ctrl-left
pane_above_key = ctrl-up
pane_below_key = ctrl-downWorks on apps, taskrunners, and dirbrowser files. Configured shortcuts appear in the help header (toggle with Ctrl-/).
Note: These keys are reserved and cannot be used as item shortcuts.
Action Menu
Press ctrl-j to open an action selection menu for the currently highlighted item. Choose how to open it:
- Open in popup
- Open in window
- Open in background window
- Open in pane to the right
- Open in pane to the left
- Open in pane above
- Open in pane below
This provides quick access to all launch modes without needing to configure dedicated shortcuts for each action.
The key is configurable:
[settings]
action_menu_key = ctrl-j # defaultSet to empty to disable:
[settings]
action_menu_key =Note: ctrl-m cannot be used as it's equivalent to Enter in terminals.
v2.2.1
Fixed menu sorting when no [order] section is defined
- Items now sort alphabetically (apps, menus, dirbrowsers first, then taskrunners)
- Taskrunner items stay grouped by runner instead of being interleaved by task name
- Taskrunner dividers now appear directly before their items, not grouped at the top
v2.2.0
Keyboard Shortcuts
Assign keyboard shortcuts to launch items directly from the menu:
[app:lazygit]
cmd = lazygit
shortcut = ctrl-g
[menu:system]
shortcut = ctrl-s
[dirbrowser:configs]
directory = ~/.config
shortcut = ctrl-cPress the shortcut key while the menu is open to launch the item immediately.
- Toggle visibility - Press
Ctrl-/to show/hide the shortcut column - Validation - Invalid, reserved, or duplicate shortcuts show an error screen at startup
- Reserved keys -
enter,esc,ctrl-x,/, and your configured primary/secondary keys cannot be used
Shortcuts are available on apps, submenus, and directory browsers. Taskrunner items cannot have shortcuts (they're discovered at runtime).
Maximum Dimensions
Cap popup and menu sizes on large screens with new max_* settings:
[settings]
popup_width = 90%
popup_height = 90%
max_popup_height = 50
max_popup_width = 160
menu_width = 60%
menu_height = 50%
max_menu_width = 120
max_menu_height = 40Percentages are calculated against the tmux window size, then clamped to the maximum.
Declarative Ordering
The per-item order property has been replaced with declarative [order] sections for simpler configuration:
[order]
lazygit
config
taskrunner:just
system
taskrunner:npm
dockerItems are displayed in the order listed. Unlisted items are appended alphabetically.
- Taskrunners in main order - Use
taskrunner:nameformat to position taskrunners anywhere in the menu - Submenu ordering - Use
[order:submenu_name]to control item order within submenus - Migration assistant - Automatically converts old
order =properties to new format with backup
When you launch nunchux with the old order = properties, an interactive migration prompt will convert your config automatically.
Bug Fixes
- Fixed helper commands (
ago,lines,nearest) not working in status commands when environment inheritance was enabled