Ramblings of an aging IT geek
← Ramblings of an aging IT geek
linux

One Palette, Many Configs

tinct is a plugin-based colour-palette generator and theme manager: Pywal/Matugen-style theming, but extensible at both the input and the output ends.

Listen to this post
A monitor showing a palette-themed desktop, swatch strip beside it

I like my desktop to feel of a piece: terminal, bar, window borders, launcher, editor, all drawn from the same palette. The usual way to get there is Pywal or Matugen: extract colours from a wallpaper, template them into a pile of config files. They're good tools and I used them for years. But I kept bumping into the same two walls: the inputs I wanted weren't there, and adding a new application meant another bespoke shell template bolted on the side.

So tinct is my answer: an extensible colour-palette generator and theme manager, built around plugins at both ends. A palette is something you produce from an input plugin and apply through output plugins, and either side is open.

On the input side, a palette can come from an image (the Pywal case), from a remote theme (point it at Catppuccin's palette JSON and it pulls the colours straight out), or from a manual specification. On the output side, tinct does the semantic work, assigning colours to roles with WCAG contrast checking, so you don't end up with unreadable text on a bad day's wallpaper, then writes out config. The first batch of output plugins covers the setup I actually run: kitty, Hyprland and hyprpaper, waybar, dunst, fuzzel and wofi, neovim, zellij. -o all writes the lot in one pass, and a new application is a new output plugin, not a fork of the tool.

It's early; this is the "scratch my own itch, then realise other people have the same itch" stage, so expect rough edges and shifting defaults. It's written in Go, installs from the AUR (yay -S tinct-bin) or go install, and the repo and docs are on GitHub. More inputs and a lot more output plugins are where it goes from here.