Skip to main content
Version: main

hyprland

Generates colour variables for Hyprland, the dynamic tiling Wayland compositor. The plugin emits a palette file ($variable declarations consumable from any hyprland.conf) plus an example config that shows how to apply those variables to common Hyprland sections (general, decoration, group, window rules).

Installation

Built into tinct — nothing to install separately. tinct generate -o hyprland works out of the box.

Quick start

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

Generated files

FilePathRole
tinct-colours.conf~/.config/hypr/themes/tinct-colours.confPalette. Defines every tinct colour role as a Hyprland $variable (e.g. $accent1RGB, $backgroundRGBDec). Source this from hyprland.conf.
tinct.conf~/.config/hypr/themes/tinct.confExample config. Demonstrates wiring the palette into general (borders), decoration (shadow), group (tab bar) and windowrule lines. Optional — disable with --hyprland.generate-stub=false.

The plugin auto-detects the installed Hyprland version (hyprctl version or hyprland --version) and selects a version-specific template if one is bundled (currently 0.53 is the only versioned variant).

Integration

Hyprland uses an include-based config. Add one line to your ~/.config/hypr/hyprland.conf to load the palette:

source = ~/.config/hypr/themes/tinct-colours.conf

After sourcing, every $<role>RGB and $<role>RGBDec variable is available everywhere in your Hyprland config:

general {
col.active_border = $accent1RGB $accent2RGB 45deg
col.inactive_border = $backgroundMutedRGB
}

The generated tinct.conf is an example, not something you have to use. Copy the parts you want into your own config, or source = ~/.config/hypr/themes/tinct.conf if you want the whole reference layout applied directly.

Reload behaviour

Automatic

None by default. The plugin writes the files and exits without touching Hyprland.

Pass --hyprland.reload to make the plugin run hyprctl reload after generation. hyprctl is listed as an optional binary; if it isn't on $PATH the reload is skipped.

Manual fallback

Trigger a Hyprland config reload by hand:

hyprctl reload

Hyprland reloads atomically — open windows keep their state, only the colours change.

Uninstall / revert

  1. Remove the include line from your ~/.config/hypr/hyprland.conf:

    sed -i '/themes\/tinct-colours\.conf/d;/themes\/tinct\.conf/d' ~/.config/hypr/hyprland.conf
  2. Delete the generated files:

    rm ~/.config/hypr/themes/tinct-colours.conf ~/.config/hypr/themes/tinct.conf
  3. Reload to drop the theme:

    hyprctl reload
  4. External state: this plugin only writes into ~/.config/hypr/themes/. No further cleanup is required.

Flags

FlagDefaultDescription
--hyprland.output-dir~/.config/hypr/themesOverride the output directory
--hyprland.generate-stubtrueGenerate the tinct.conf example alongside the palette
--hyprland.stub-path(unset)Custom filename for the stub (basename only; written into the output dir)
--hyprland.reloadfalseRun hyprctl reload after writing the files

Colour role mapping

The palette file declares every tinct role as a Hyprland $variable; the example tinct.conf wires a subset of them into common sections.

Hyprland sectionPropertyTinct role
generalcol.active_borderaccent1accent2 gradient
generalcol.inactive_borderbackgroundMuted
decoration.shadowcolorbackground @ 0.8 alpha
miscbackground_colorbackground
groupcol.border_activeaccent2
groupcol.border_inactivebackgroundMuted
group.groupbarcol.activeaccent1
group.groupbarcol.inactivebackgroundMuted
group.groupbartext_colorforeground
windowrule bordercolortitle:.*[Ee]rror.*danger
windowrule bordercolortitle:.*[Ww]arning.*warning
windowrule bordercolortitle:.*[Ss]uccess.*success

Every role tinct knows about is declared in the palette file in two formats — $<role>RGB for direct rgb(...) use, and $<role>RGBDec for rgba(..., 0.50) opacity expressions.

Customising the template

Extract the default templates to override them:

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

This creates ~/.config/tinct/templates/hyprland/tinct-colours.conf.tmpl and tinct.conf.tmpl. Tinct uses your versions in preference to the embedded defaults.

See the templating reference for the available functions and palette accessors.

Troubleshooting

unknown variable: $accent1RGB

You sourced tinct.conf (the example) but not tinct-colours.conf (the palette), or you sourced them in the wrong order. The palette must be sourced before any line that references its variables.

Theme files written but colours unchanged

The plugin doesn't reload Hyprland by default. Run hyprctl reload, or pass --hyprland.reload next time.

hyprctl: command not found

hyprctl ships with Hyprland; if you're missing it you're not actually running Hyprland or your install is broken. Generation still succeeds — the file is written either way — but --hyprland.reload becomes a no-op.

Hyprland version not detected

The plugin reads the version from hyprctl version (running session) or hyprland --version (binary on PATH). If neither succeeds, tinct falls back to the default (unversioned) template. Override with custom templates if you need a specific layout.

  • hyprlock — lock screen styling for Hyprland.
  • hyprpaper — wallpaper manager for Hyprland.
  • waybar — status bar commonly paired with Hyprland.
  • dunst — notification daemon styling.