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
Nautiluscolours, folders and its right-click menuits preferences and sidebarthe 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).

Two windows 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
FoldersNautilus
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 Nautilus’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 KDE password dialog the shell falls back on, 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 Nautilus, the file manager, a GTK 4 window that takes its colours from the named colours in the same ~/.config/gtk-4.0/gtk.css as the rest, with nothing added. On the dock it is a tile of its own.

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.

The right-click menu carries five entries of the desk’s own, from a nautilus-python extension the desk carries, so they are there from the first window:

EntryDoesOn
Open Terminal Herekitty, in that foldera folder, or a folder’s background
Open yazi Hereyazi in kitty, in that foldera folder, or a folder’s background
Open in the EditorVSCodiumanything selected, or a folder’s background
Set as Wallpaperthat picture or video as the wallpaper, and the palette from itone picture or video
Copy Paththe full paths, to the clipboardanything selected

./setup nautilus sets what is not a colour or a file, and install runs it once. It sets:

  • hidden files off, and folders before files;
  • Delete Permanently and Create Link on the menu;
  • your Desktop, Documents, Pictures and Downloads folders in the sidebar, where they are missing;
  • folders opening in Nautilus when Thunar is still their default.

A setting you change later in Nautilus’s own preferences stays until you run the verb again.

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, Nautilus 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.