tint
A small wrapper around Tinty that manages light/dark theme pairs and applies the selected theme to Ghostty, Zed, Herdr, OMP, and Conjure.
Requirements
This setup targets macOS and requires:
- Homebrew
- Go 1.26 or newer
- Tinty 0.34 or newer
dark-notifyfor automatic switching when macOS changes appearancemakefrom the Xcode Command Line Tools
Install the required tools:
xcode-select --install
brew tap tinted-theming/tinted
brew install tinty go
brew install cormacrelf/tap/dark-notify
Ghostty, Zed, Herdr, OMP, and Conjure are optional consumers. Install only the applications you use.
Install
From this directory, run:
make install
The installer:
- Builds
~/.local/bin/tint. - Installs
config.tomlunder$XDG_CONFIG_HOME/tinted-theming/tinty, or~/.config/tinted-theming/tintywhenXDG_CONFIG_HOMEis unset. - Copies
state.tomlonly when no state file already exists. - Creates
~/.config/herdr/config.tomlif needed. - Runs
tinty syncto download the configured theme repositories. - Creates and loads a
dark-notifyLaunchAgent for automatic macOS appearance switching.
Add the binary directory to your shell path:
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
Verify the installation:
which tint
tinty --version
tint
Automatic light/dark switching
make install creates and loads ~/Library/LaunchAgents/dev.tinty.dark-notify.plist. The agent starts at login, restarts if it exits, and invokes tint light or tint dark whenever macOS changes appearance.
Confirm that the agent is running:
launchctl print "gui/$(id -u)/dev.tinty.dark-notify"
Inspect its output if an application does not update:
tail -f ~/Library/Logs/dark-notify.log
Application setup
Ghostty
The Tinty hook writes:
~/.config/ghostty/themes/tinted-theming
Select it in the Ghostty configuration:
theme = tinted-theming
The hook sends SIGUSR2 to reload Ghostty after applying a theme.
Zed
The wrapper writes:
~/.config/zed/themes/tinty-current.json
After applying the first theme, select Tinty Current in Zed.
Herdr
The wrapper maintains a generated [theme.custom] block in:
~/.config/herdr/config.toml
When the herdr executable is available, the wrapper also runs herdr server reload-config.
OMP
The wrapper writes:
~/.omp/agent/themes/tinty-current.json
Configure OMP to use tinty-current where required.
Conjure
The apply-apps flow writes $XDG_CONFIG_HOME/conjure/theme.json, falling back to ~/.config/conjure/theme.json when XDG_CONFIG_HOME is unset, empty, or relative. The generated JSON contains seven opaque colors: background, text, secondaryText, accent, glow, keyBackground, and error, using Tinty semantic UI colors with Base16/Base24 or tinted8 palette fallbacks.
Opt in by adding this to conjure/config.json in the same configuration directory:
{"theme":"tint"}
The wrapper never changes config.json. Optional entries in its colors object override generated colors. Conjure reads configuration only at launch: restart Conjure after applying a theme or editing its configuration. The wrapper does not signal, reload, restart, or notify Conjure.
Usage
Show the current pair and available commands:
tint
Select a named pair:
tint swamp
Apply one side of the current pair:
tint light
tint dark
Set both sides:
tint light:base16-swamp-light dark:base16-swamp-dark
Save and favorite a named pair:
tint pair swamp dark:base16-swamp-dark light:base16-swamp-light
tint favorite swamp
Force appearance selection for scripts or troubleshooting:
TINTY_PAIR_APPEARANCE=light tint swamp
TINTY_PAIR_APPEARANCE=dark tint swamp
Update
After changing or updating the wrapper source:
make install
Existing state.toml content is preserved.
Uninstall
make uninstall
This unloads and removes the LaunchAgent, log, and tint binary. It also removes configuration, state, and the empty Herdr configuration only when they were originally created by make install; pre-existing user files are preserved. Tinty itself and its shared data remain installed.
Licensed under GPL-3.0
In plain terms:
- Anyone may use, copy, modify, and sell the software.
- Distributed copies must remain GPL-3.0.
- Modified versions must clearly say they were changed.
- Distributing binaries requires providing the corresponding source code.
- Recipients receive the same rights to modify and redistribute.
- Distributors cannot add restrictions that contradict the GPL.
- Patent rights cannot be used to make the software effectively proprietary.
- Hardware distributors cannot prevent users from installing modified versions.
- The software comes without warranty or liability.
- Private use and private modifications impose no publication requirement.
- Merely using the software over a network does not require publishing changes; that requirement belongs to the AGPL.
For details, see the actual LICENSE.