Skip to content

Releases: datamadsen/nunchux

v3.1.1

02 Mar 08:59

Choose a tag to compare

[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 panel
  • prefix - Change the character that activates switcher mode (e.g., @ instead of >)

v3.1.0

01 Mar 10:52

Choose a tag to compare

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
  • UI Improvement: Added padding to the filter field for better alignment

v3.0.0

24 Jan 08:18

Choose a tag to compare

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

07 Jan 15:38

Choose a tag to compare

New Features

  • Configurable shortcut toggle key - The key to toggle shortcut visibility is now configurable via toggle_shortcuts_key setting. Default remains ctrl-/.
[settings]
toggle_shortcuts_key = ctrl-t

v2.5.1

04 Jan 13:14

Choose a tag to compare

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

04 Jan 13:06

Choose a tag to compare

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. The while read loop was overwriting the outer $name variable.
  • 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 items
  • config_templates.sh - Only loaded during onboarding
  • migration.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

03 Jan 15:48

Choose a tag to compare

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

02 Jan 19:27

Choose a tag to compare

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 = false

Direct 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-down

Or 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-down

Works 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  # default

Set 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

02 Jan 17:27

Choose a tag to compare

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

01 Jan 19:08

Choose a tag to compare

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-c

Press 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 = 40

Percentages 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
docker

Items are displayed in the order listed. Unlisted items are appended alphabetically.

  • Taskrunners in main order - Use taskrunner:name format 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