Skip to content

Configuration

Documentation in progress

Some sections are still incomplete.

ThinkTerm is configured with a Lua file, the same way WezTerm is. The option names, the module name, and the syntax are unchanged — a ThinkTerm config still opens with:

lua
local wezterm = require 'wezterm'

What differs is where the file is read from and where the data is written.

Where the config file is read from

ThinkTerm loads the first file it finds, in this order:

  1. $THINKTERM_CONFIG_FILE
  2. $WEZTERM_CONFIG_FILE
  3. thinkterm.lua next to the executable — Windows only
  4. wezterm.lua next to the executable — Windows only
  5. ~/.config/thinkterm/thinkterm.lua
  6. ~/.config/thinkterm/wezterm.lua
  7. ~/.thinkterm.lua

$THINKTERM_CONFIG_DIR and $WEZTERM_CONFIG_DIR are not part of that search. ThinkTerm sets them once a config has loaded, pointing at the directory the file came from, so that programs you launch can find it. Setting them yourself does not select a config.

The two Windows-only entries are deliberate. A config sitting beside the executable takes precedence so that ThinkTerm can be carried on a USB drive and run on a machine that has no config of its own, or someone else's.

The wezterm.lua filenames are not leftovers either: they let an existing WezTerm config be dropped into ThinkTerm's own directory without renaming it.

What ThinkTerm takes from a WezTerm install

Your WezTerm config file is not loaded. None of the locations above point at ~/.config/wezterm/wezterm.lua, and ThinkTerm never writes to it.

The separation is not total, though, and two paths are worth knowing about.

WEZTERM_CONFIG_FILE is honoured. It sits in the search order above, so if that variable is exported in your environment — as it may well be if that is how you set WezTerm up — ThinkTerm loads the file it names. Set THINKTERM_CONFIG_FILE, or unset the WezTerm one, to keep the two installations apart.

WezTerm's config directory is still searched for Lua modules and colour schemes. ~/.config/wezterm/ and ~/.wezterm/ sit on the Lua package.path, and ~/.config/wezterm/colors/ is searched for colour schemes. So require 'mymodule' in a ThinkTerm config will find a module you wrote for WezTerm. It is the config file itself that is kept separate, not the whole directory.

Importing from WezTerm

SettingsImport from WezTerm reads an existing WezTerm config and copies the fields you select into ThinkTerm's own file. It is a one-time copy — afterwards the two files are independent and never share live state.

Fifteen fields can be imported:

color_scheme, window_background_opacity, macos_window_background_blur, inactive_pane_hsb, font, font_size, line_height, cell_width, default_prog, default_cwd, front_end, window_decorations, disable_default_key_bindings, keys, key_tables

That list bounds what the importer copies for you, not what ThinkTerm supports. Any other WezTerm option still works when written into a ThinkTerm config by hand.

Where the data lives

macOS

  • Config file — ~/.config/thinkterm/
  • Workspace data — ~/Library/Application Support/ThinkTerm/
  • Terminal state — ~/Library/Application Support/thinkterm/
  • Cache — ~/Library/Caches/thinkterm/

Linux

  • Config file — ~/.config/thinkterm/
  • Workspace data — ~/.local/share/ThinkTerm/
  • Terminal state — ~/.local/share/thinkterm/
  • Cache — ~/.cache/thinkterm/

Windows

  • Config file — %USERPROFILE%\.config\thinkterm\
  • Workspace data — %APPDATA%\ThinkTerm\
  • Terminal state — %APPDATA%\thinkterm\
  • Cache — %LOCALAPPDATA%\thinkterm\

Two things above are easy to trip over.

The config path does not follow platform convention. ~/.config/thinkterm/ is used on every operating system, Windows included — it is not %APPDATA%. Config and data therefore live apart on every platform, Linux included, where the config sits under ~/.config and the data under ~/.local/share.

Two data directories differ only in case. Workspace data — the Space, Project and Thread structure, the SSH host book, snippets, and the encryption key — is written to ThinkTerm/. Terminal and multiplexer state goes to thinkterm/. On macOS and Windows the filesystem is case-insensitive by default, so the two normally collapse into a single directory — on a case-sensitive APFS volume they do not. On Linux they are always separate. Both belong to ThinkTerm wherever they land.

A Notes Vault is not stored in either. It is a directory you choose, holding ordinary Markdown files; ThinkTerm records only the binding to it.

The option reference

Almost every option is WezTerm's, unchanged, so the reference for them is upstream:

Two caveats. ThinkTerm forked WezTerm on 31 March 2026, so options added upstream after that date may not exist here yet. And ThinkTerm adds options of its own, which upstream does not document:

OptionControls
agent_status_detectionWhether session status detection runs
note_spellcheck_enabledSpell check in the Markdown editor
note_remote_images_enabledLoading images from remote URLs in notes
note_reading_max_widthThe reading width of a note
right_sidebar_search_respects_gitignoreWhether file search skips ignored files