Skip to main content
Version: main

noctalia

Generates a custom colour palette for the Noctalia shell, a Wayland desktop shell (bar, dock, launcher, control center, notifications) for compositors like niri and Hyprland.

Noctalia ships its own Material You palette generator that derives colours from your wallpaper. This plugin doesn't replace that — it writes Noctalia's custom palette file so that, when you switch Noctalia to source = "custom", its colours match the rest of your tinct-themed desktop (terminals, niri, editors, …) instead of being generated independently.

Installation

tinct plugins install noctalia

Or build from this repo and add the binary manually:

cd contrib/plugins/output/noctalia && go build -o tinct-plugin-noctalia .
tinct plugins add ./tinct-plugin-noctalia

Quick start

tinct generate -i image -p ~/Pictures/wallpaper.jpg -o noctalia

Then point Noctalia at the generated palette once (see Integration).

Generated files

FilePathRole
tinct.json~/.config/noctalia/palettes/tinct.jsonCustom palette. A dark and light variant, each with the 16 Material-3 roles Noctalia uses plus a terminal colour block.

Integration

Noctalia selects where its palette comes from in its config. Set the source to custom and name the palette tinct (the file is tinct.json, referenced without the extension).

Noctalia v5 (current, native — TOML at ~/.config/noctalia/*.toml):

[theme]
mode = "dark" # dark | light | auto
source = "custom" # use the palette file instead of wallpaper generation
custom_palette = "tinct" # reads ~/.config/noctalia/palettes/tinct.json

Noctalia v4 (Quickshell/QML) stores schemes at ~/.config/noctalia/colorschemes/<name>/<name>.json and selects them in Settings → Color Scheme. Point --output-dir accordingly if you run v4 (see Flags).

Colour role mapping

tinct's role model is already Material Design 3, so the mapping is close to 1:1:

Noctalia roleTinct role
mPrimary / mOnPrimaryaccent1 / onAccent1
mSecondary / mOnSecondaryaccent2 / onAccent2
mTertiary / mOnTertiaryaccent3 / onAccent3
mError / mOnErrordanger / onDanger
mSurface / mOnSurfacesurface / onSurface
mSurfaceVariant / mOnSurfaceVariantsurfaceVariant / onSurfaceVariant
mOutlineoutline
mShadowshadow
mHover / mOnHoveraccent4 / onAccent4
terminal.normal / terminal.brighttinct ANSI palette (16 colours)
terminal.foreground / backgroundforeground / background

Both dark and light variants are written in one file when tinct produces a dual theme; a single-theme run still writes a valid file (the required dark key is always present).

Reload behaviour

Automatic

Noctalia v5 watches its config and palette files and hot-reloads the active palette when tinct.json changes — no action required.

Manual fallback

Noctalia v4 needs the scheme re-selected (or the shell restarted) after a new scheme file appears; existing-scheme edits reload on selection. There is no dedicated "reload colour scheme" IPC command — the known nudge to force a re-apply is toggling dark mode twice:

qs -c noctalia-shell ipc call darkMode toggle
qs -c noctalia-shell ipc call darkMode toggle

Uninstall / revert

  1. In Noctalia's config, set [theme] source back to wallpaper (or builtin).
  2. Delete the palette file:
    rm ~/.config/noctalia/palettes/tinct.json
  3. tinct plugins remove noctalia to drop the plugin.

Flags

FlagDefaultDescription
--output-dir, -o~/.config/noctalia/palettesOutput directory for the palette file (use ~/.config/noctalia/colorschemes/tinct for Noctalia v4)

Pass plugin flags via --plugin-args, e.g. tinct generate ... -o noctalia --plugin-args noctalia.output-dir=/some/path.

Customising the template

tinct plugins templates dump -o noctalia -l ~/.config/tinct/templates/noctalia

This writes templates/palette.json.tmpl, rendered once per variant. tinct uses your version in preference to the embedded default.

Troubleshooting

Colours unchanged after generating

Noctalia is still on its wallpaper/builtin generator. Set [theme] source = "custom" and custom_palette = "tinct" (v5), or select the scheme in Settings (v4).

Plugin skipped ("Noctalia not installed")

The plugin skips when ~/.config/noctalia does not exist. Create it, or pass an explicit --output-dir.

  • waybar — status bar with a similar role; pair either with niri/Hyprland.
  • niri — compositor colours for the niri scrollable-tiling WM.
  • fuzzel — launcher commonly paired with these shells.