Skip to content
GitHub

Applications

Every window on the desk wears the palette, not only the shell’s. Most take it on their own the next time they open a window. What a few need beyond a file, ./setup install sets up once, and Spotify takes it at its next start.

ApplicationFollows on its ownSet up once by installTakes a new palette
GTK windows: satty, file-roller, pavucontrol, gimpyesdark, with the impasto iconsthe next window
Qt and KDE windowsyesnothing; qt6ct is in the package listthe next window
Thunarcolours and foldersits settings and right-click menuthe next window
Zenyesnamed for web pages and PDFsthe next window
Vesktopyesits theme tickedat once
VSCodiumthe theme, the font and the extensions’ coloursits extensions and settingsthe next window
Spotifyonce patchedthe patchits next start
imvyesnamed for picturesthe next picture opened
The Open dialog, the screen-share pickeryesnothingthe next dialog

A program that is open while install runs, or a Spotify never started, is skipped with the reason and set up by the next install or update. After that install leaves them alone, so what you change in them stays; each has a verb of its own that sets it up again (The setup script).

VSCodium and Thunar, in the same palette as the bar above them.

What opens a file, whether GTK windows are dark and which icons they draw are the machine’s settings, not files the desk carries, so install sets them once, with ./setup defaults:

FilesOpen in
Pictures: JPEG, PNG, GIF, WebP, SVGimv
Text and JSONneovim
FoldersThunar
Web pages, links and PDFsZen

A line is left alone when ~/.config/mimeapps.list already names a default for any of its types, so a browser or a viewer you chose stays chosen, and a program that is not installed is skipped. Then GTK is set dark, and its icon theme to impasto, which is what gives Thunar’s folders the wallpaper’s colour. Without the first, GTK windows come up light with the palette’s colours on them.

The GTK settings hold only when set inside the session. Run from a TTY, the verb says so, and the next install or update from a terminal in Hyprland sets them.

Every palette change writes gtk.css into ~/.config/gtk-3.0/ and ~/.config/gtk-4.0/. The ground is the palette’s background tinted with the accent; header bars, cards, popovers and sidebars sit on the raised surface; the accent fills selections and colours links. Only colours change: the theme stays Adwaita, and every widget keeps Adwaita’s shape.

  • GTK reads the sheet when an application starts, so a window already open keeps its old colours.
  • The type is Adwaita Sans 11, from the settings.ini the desk carries. The shell’s font setting does not reach GTK.
  • satty, the annotator the capture hands a picture to, is one of these windows, and so is every Open and Save dialog.

Qt windows take the palette through qt6ct, in Qt’s Fusion style. The session names qt6ct as the platform theme, and every palette change writes its colour scheme to ~/.config/qt6ct/colors/impasto.conf. KDE applications, such as gwenview, spectacle and the polkit password dialog, read ~/.config/kdeglobals instead, so the push merges its colours into that file too and leaves everything else in it alone.

  • A window already open keeps its colours; the next one comes up in the new palette.
  • Leave qt6ct’s own window alone: what you save there is replaced at the next palette change.
  • Without qt6ct installed, plain Qt windows come up in Breeze’s light grey. KDE applications still follow.
  • Qt 5 applications, VLC among them, are not themed.
  • Merging into kdeglobals drops any comments in it.

SUPER E opens Thunar, a GTK window that takes its colours from the same gtk.css as the rest.

The folders are the wallpaper’s colour. Every palette change writes an icon theme, impasto, in ~/.local/share/icons/: Papirus-Dark’s icons, with the folders pointed at whichever of Papirus’s twenty-five folder colours is nearest the accent. A folder is a drawing, so it lands on the nearest swatch rather than on the accent exactly. GTK draws it once its icon theme is impasto, which install sets (above), in every GTK application started afterwards.

./setup thunar sets everything that is not a colour, and install runs it once. Thunar writes its settings back as it exits, so an open Thunar is skipped and set up by the next install or update, and the verb on its own refuses while Thunar runs. It sets:

  • one bar instead of two, with the menu behind a button;
  • thumbnails for local files, folders before files, sorting that ignores case;
  • dates as 2026-09-13 18:30, and sizes in binary units;
  • the image preview inside the side pane;
  • double click to open;
  • a Delete that skips the bin, beside Move to Trash, with the confirmation kept;
  • a shell script opened rather than run on a double click.

And five entries on the right-click menu:

EntryDoesOn
Open Terminal Herekitty, in that folderfolders
Open yazi Hereyazi in kitty, in that folderfolders
Open in the EditorVSCodiumfolders, text and other files
Set as Wallpaperthat picture as the wallpaper, and the palette from itpictures
Copy Paththe full path, to the clipboardeverything

A setting you change later in Thunar’s own preferences stays until you run the verb again. The row with the path in it stays on the window’s plain background: it is the one part of Thunar the stylesheet cannot reach.

Zen needs nothing. Every palette change writes userChrome.css into the profile Zen opens, under ~/.config/zen/, and a user.js with the one preference that makes Zen read it. The toolbar sits on the raised surface, the sidebar on the background, and the accent is Zen’s primary colour; the frame is dark under every palette.

  • userChrome.css is read when a window opens and user.js when Zen starts, so the first time needs Zen restarted. After that, each new window takes the palette.
  • The page area of an empty tab is Firefox’s own dark grey, not the palette’s.

Vesktop follows the palette once its theme is ticked, and install ticks it. Every palette change writes ~/.config/vesktop/themes/impasto.css, and Vencord repaints a running Vesktop the moment the file changes. The tick goes into Vencord’s own settings, with everything else in them kept. Vencord rewrites that file while it runs, so an open Vesktop is skipped and ticked by the next install or update, or by ./setup vesktop once it is closed. Unticked by hand, under Vesktop’s settings → Themes, it stays unticked.

  • Your Quick CSS is left alone.
  • Nitro’s purple stays Discord’s.
  • The theme sets Discord’s own colour variables and names no class. A Discord update that renames those variables leaves the theme loading without error and changing less.

Spotify wears the palette from its next start. spicetify does not theme Spotify, it patches it: the colours are compiled into /opt/spotify, and nothing is read while it runs. ./setup spotify is the patch, and install runs it. After that, every palette change writes ~/.config/spicetify/Themes/impasto/color.ini and rewrites the stylesheets inside the patched client, restarting nothing, so a Spotify that is playing keeps the old colours until it starts again.

Before the first patch:

  1. Use the spotify package from the AUR, not spotify-launcher, which updates itself on every start and takes the patch with it. spotify and spicetify-cli are both in the package list.

  2. Open Spotify once, and close it: spicetify needs the settings Spotify writes on its first start.

  3. Run ./setup update, or ./setup spotify. It asks to make Spotify’s folder writable, selects the theme, and patches it.

A Spotify update takes the patch away, because it rewrites /opt/spotify. The next ./setup update sees that and patches it again, with the player closed; ./setup spotify does it at once, and restarts Spotify.

The colour theme is written as an extension, in ~/.vscode-oss/extensions/impasto/, on every palette change, with nothing to install. A window already open keeps its colours; Developer: Reload Window, or a new window, takes the new ones.

./setup vscodium does the rest, and install runs it once. It installs four extensions from Open VSX — Material Icon Theme, Fluent Icons, Error Lens and indent-rainbow — and merges into your settings.json: the Impasto theme and the two icon themes selected, the shell’s monospace font with ligatures at 14, the activity bar along the top, and no minimap, breadcrumbs or command centre. Everything else in the file stays; comments in it do not survive the merge. An extension that cannot be fetched leaves the verb to the next install or update.

  • The font and the palette keep up on their own. A change of the shell’s monospace font, or of the palette, rewrites just those values in settings.json — the fonts, the folder icons’ colour and indent-rainbow’s colours — in place and only where they are set, so comments and every other key survive, and a key you delete stays deleted.
  • Without the verb, pick the theme yourself: CTRL K, then CTRL T, then Impasto.
  • Error Lens and indent-rainbow draw nothing in a folder until you trust it.

imv opens floating over the windows, centred at seven tenths of the screen, whether the picture comes from yazi, Thunar or a photo on the desktop. Its whole configuration is written by the palette push: the picture sits on the terminal’s tinted background, and the overlay, shown with d, is in the palette. A picture already open keeps its colours. Because the push owns ~/.config/imv/config, anything else you write there is replaced at the next palette change.

When an application asks for a file or for the screen, the dialog that answers already wears the palette. The Open and Save dialogs come from xdg-desktop-portal-gtk and are GTK windows; the screen-share picker comes from xdg-desktop-portal-hyprland and is a Qt window. Both are in the package list and need no configuration.