Skip to content

Customize

Common changes, ready to copy. After saving a file, run Reload settings from the command palette. Where the files are: Configuration files.

Change a key

In keymap.toml (Edit keymap, ⌘K ⌘S / Ctrl+K Ctrl+S), add a block below the preset. Find the action ids in Actions and keys.

# F2 renames, Shift+F6 does nothing any more, Cmd+Shift+N (Ctrl+Shift+N) makes a folder
[[bindings]]
context = "FilePane"
keys = { "f2" = "pane.rename", "shift-f6" = "", "mod-shift-n" = "pane.mkdir" }

# The terminal on Ctrl+` everywhere
[[bindings]]
context = "Global"
keys = { "ctrl-backtick" = "terminal.toggle" }

Prefer macOS-style keys? Set preset = "macos" at the top. See Keys for the details.

Your editor

F4 opens files in your editor. In settings.toml:

[editor]
command = "zed"              # or "code -n", "subl {file}:1", "open -a TextEdit", "notepad++ {file}"
folder = "zed"               # F4 on a folder and Shift+F11

[editor.extensions]
md = "typora"
"rs,toml,json,yaml" = "zed"
"png,jpg,jpeg,psd" = "open -a GIMP"
pdf = "open -a 'Adobe Acrobat'"
"Dockerfile,Makefile" = "zed"
"(none)" = "zed"             # files without an extension

The file's path goes where {file} stands, or at the end. Program names are also found in /opt/homebrew/bin, /usr/local/bin, ~/.cargo/bin and ~/.local/bin, so tools installed with Homebrew or Cargo work even when Bella Commander was started from the Dock.

Terminal app

F11 opens the active folder in a terminal app. In settings.toml:

[terminal]
app = "open -a Ghostty {dir}"   # or "open -a iTerm {dir}", "wezterm start --cwd {dir}", "kitty --directory {dir}"

Empty means Terminal on macOS, Windows Terminal, or x-terminal-emulator on Linux. For the built-in terminal panel:

[terminal]
shell = "/opt/homebrew/bin/fish"   # empty: your login shell
position = "right"                 # bottom | left | right

Your own commands

Any command line can become a command of its own: in the command palette, on a key, and in the context menu. In settings.toml:

[[commands]]
id = "user.pdf"
title = "Convert to PDF"
run = "pandoc {file} -o {stem}.pdf"
context_menu = true

[[commands]]
id = "user.git_status"
title = "Git status"
run = "git status"
terminal = true              # runs in the terminal panel, where the output stays

[[commands]]
id = "user.diff"
title = "Diff with the other pane"
run = "opendiff {file} {other_file}"

[[commands]]
id = "user.zip_each"
title = "Zip each selected file"
run = "for f in {files}; do zip -j \"$f.zip\" \"$f\"; done"
Placeholder Becomes
{file} the path under the cursor
{files} the paths of the selected items (or the one under the cursor)
{name}, {stem}, {ext} the name under the cursor, without its extension, its extension
{dir} the active pane's folder
{other_dir}, {other_file} the same in the other pane

Placeholders are quoted for the shell, so names with spaces work; do not put quotes around them. Other text in braces stays as it is (${HOME}, find -exec ls {} +). The command runs in the active folder through your shell (cmd on Windows), so pipes, && and variables work. Without terminal = true it runs in the background and the status line shows its last line of output.

To put it on a key, use its id in keymap.toml:

[[bindings]]
context = "FilePane"
keys = { "alt-p" = "user.pdf" }

Favorites

⇧⌘B / Ctrl+Shift+B adds the current folder. To name, order and group them, edit favorites.toml (Edit favorites):

[favorites]
Home = "~"
Downloads = "~/Downloads"
"My files" = "~/files"           # quote names with spaces or dots

[favorites.Teaching]             # a group, shown as a folder in the sidebar
"Course A" = "~/work/courses/a"
"Course B" = "~/work/courses/b"

[favorites.Teaching.Archive]     # groups can be nested
"2025" = "~/work/courses/2025"

⌘1 to ⌘9 (Ctrl+1 to Ctrl+9) open the first nine, groups included, in this order.

Colors and look

In settings.toml:

[appearance]
mode = "dark"                    # always dark; "system" follows the system
cursor_color = "#2e7d32"         # a green cursor
selection_color = "#c2185b"      # selected files in pink
alternate_row_colors = false
font_family = "JetBrains Mono"
font_size = 14
row_height = 22

The text on the cursor turns black or white by itself to stay readable.

Panes

[panes]
show_hidden = true               # show dot files in new tabs
sort = "modified"                # newest work first: name | extension | size | modified | permissions
dirs_first = false

Global hotkey

[global_hotkey]
enabled = true
keys = "ctrl-alt-space"          # or enabled = false

Updates

[updates]
check = false                    # no update check at the start; "Check for updates" still works