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:
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:
$THINKTERM_CONFIG_FILE$WEZTERM_CONFIG_FILEthinkterm.luanext to the executable — Windows onlywezterm.luanext to the executable — Windows only~/.config/thinkterm/thinkterm.lua~/.config/thinkterm/wezterm.lua~/.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
Settings › Import 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:
| Option | Controls |
|---|---|
agent_status_detection | Whether session status detection runs |
note_spellcheck_enabled | Spell check in the Markdown editor |
note_remote_images_enabled | Loading images from remote URLs in notes |
note_reading_max_width | The reading width of a note |
right_sidebar_search_respects_gitignore | Whether file search skips ignored files |
