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 the versioned
default-state.tomlto the installedstate.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 the selected scheme's variant (light or dark) and seven opaque colors: background, text, secondaryText, accent, glow, keyBackground, and error, using Tinty semantic UI colors with Base16/Base24 or tinted8 palette fallbacks. Conjure uses the variant to match its native window appearance to the palette without an additional user setting.
Opt in by adding this to conjure/config.toml in the same configuration directory:
theme = "tint"
The wrapper never changes config.toml. Optional entries in its [colors] table override generated colors. Only the machine-generated theme.json uses JSON; edit the TOML configuration instead. Conjure watches both files and applies changes live, including automatic macOS light/dark switches, without restarting or discarding active tool state. The wrapper does not need to signal or restart 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. Missing state is recreated from default-state.toml, including the bundled named pairs and favorites. The source directory's ignored state.toml is personal state and is not used by the installer.
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.