theme: better qt theming

Switch to Darkly for default QT style
Use qt5ct-kde and qt6ct-kde
This commit is contained in:
2 * r + 2 * t
2025-08-15 15:53:39 +10:00
parent 5b34ef0061
commit d727836cc9
7 changed files with 335 additions and 12 deletions
+3 -3
View File
@@ -18,7 +18,7 @@
caelestia-shell,
withShell ? false,
discordBin ? "discord",
qtctStyle ? "Fusion",
qtctStyle ? "Darkly",
}:
python3.pkgs.buildPythonApplication {
pname = "caelestia-cli";
@@ -70,9 +70,9 @@ python3.pkgs.buildPythonApplication {
--replace-fail 'discord' ${discordBin} \
--replace-fail 'todoist' 'todoist.desktop'
# Use config style instead of fusion
# Use config style instead of darkly
substituteInPlace src/caelestia/data/templates/qtct.conf \
--replace-fail 'Fusion' '${qtctStyle}'
--replace-fail 'Darkly' '${qtctStyle}'
'';
postInstall = "installShellCompletion completions/caelestia.fish";
@@ -1,4 +0,0 @@
[ColorScheme]
active_colors = {{ $onSurface }}, {{ $surfaceContainer }}, {{ $surfaceContainerHighest }}, {{ $surfaceContainerHigh }}, {{ $surfaceContainerLowest }}, {{ $surfaceContainerLow }}, {{ $onSurface }}, {{ $onSurface }}, {{ $onSurface }}, {{ $surface }}, {{ $surfaceContainer }}, {{ $shadow }}, {{ $primaryContainer }}, {{ $onPrimaryContainer }}, {{ $secondary }}, {{ $primary }}, {{ $surface }}, {{ $scrim }}, {{ $surfaceContainer }}, {{ $onSurface }}, {{ $secondary }}
inactive_colors = {{ $onSurface }}, {{ $surfaceContainer }}, {{ $surfaceContainerHighest }}, {{ $surfaceContainerHigh }}, {{ $surfaceContainerLowest }}, {{ $surfaceContainerLow }}, {{ $onSurface }}, {{ $onSurface }}, {{ $onSurface }}, {{ $surface }}, {{ $surfaceContainer }}, {{ $shadow }}, {{ $primaryContainer }}, {{ $onPrimaryContainer }}, {{ $secondary }}, {{ $primary }}, {{ $surface }}, {{ $scrim }}, {{ $surfaceContainer }}, {{ $onSurface }}, {{ $secondary }}
disabled_colors = {{ $outline }}, {{ $surface }}, {{ $surfaceContainerHigh }}, {{ $surfaceContainer }}, {{ $surfaceContainerLow }}, {{ $surfaceContainer }}, {{ $outline }}, {{ $onSurfaceVariant }}, {{ $onSurfaceVariant }}, {{ $surface }}, {{ $surfaceContainer }}, {{ $shadow }}, {{ $surfaceContainerHigh }}, {{ $onSurface }}, {{ $onSurfaceVariant }}, {{ $onSurface }}, {{ $surface }}, {{ $scrim }}, {{ $surfaceContainer }}, {{ $onSurface }}, {{ $secondary }}
+2 -2
View File
@@ -1,6 +1,6 @@
[Appearance]
color_scheme_path={{ $config }}/colors/caelestia.conf
color_scheme_path={{ $config }}/colors/caelestia.colors
custom_palette=true
icon_theme=Papirus-{{ $mode }}
standard_dialogs=default
style=Fusion
style=Darkly
+149
View File
@@ -0,0 +1,149 @@
[ColorEffects:Disabled]
Color={{ $surfaceContainer }}
ColorAmount=0.5
ColorEffect=3
ContrastAmount=0
ContrastEffect=0
IntensityAmount=0
IntensityEffect=0
[ColorEffects:Inactive]
ChangeSelectionColor=true
Color={{ $surfaceContainerLowest }}
ColorAmount=0.025
ColorEffect=0
ContrastAmount=0.1
ContrastEffect=0
Enable=true
IntensityAmount=0
IntensityEffect=0
[Colors:Button]
BackgroundAlternate={{ $surfaceVariant }}
BackgroundNormal={{ $surfaceContainerHigh }}
DecorationFocus={{ $primary }}
DecorationHover={{ $primary }}
ForegroundActive={{ $onSurface }}
ForegroundInactive={{ $outline }}
ForegroundLink={{ $klink }}
ForegroundNegative={{ $knegative }}
ForegroundNeutral={{ $kneutral }}
ForegroundNormal={{ $onSurface }}
ForegroundPositive={{ $kpositive }}
ForegroundVisited={{ $kvisited }}
[Colors:Complementary]
BackgroundAlternate={{ $surface }}
BackgroundNormal={{ $surfaceContainer }}
DecorationFocus={{ $primary }}
DecorationHover={{ $primary }}
ForegroundActive={{ $inverseSurface }}
ForegroundInactive={{ $outline }}
ForegroundLink={{ $klink }}
ForegroundNegative={{ $knegative }}
ForegroundNeutral={{ $kneutral }}
ForegroundNormal={{ $onSurfaceVariant }}
ForegroundPositive={{ $kpositive }}
ForegroundVisited={{ $kvisited }}
[Colors:Header]
BackgroundAlternate={{ $surfaceContainer }}
BackgroundNormal={{ $surfaceContainer }}
DecorationFocus={{ $primary }}
DecorationHover={{ $primary }}
ForegroundActive={{ $inverseSurface }}
ForegroundInactive={{ $outline }}
ForegroundLink={{ $klink }}
ForegroundNegative={{ $knegative }}
ForegroundNeutral={{ $kneutral }}
ForegroundNormal={{ $onSurfaceVariant }}
ForegroundPositive={{ $kpositive }}
ForegroundVisited={{ $kvisited }}
[Colors:Header][Inactive]
BackgroundAlternate={{ $surfaceContainer }}
BackgroundNormal={{ $surfaceContainer }}
DecorationFocus={{ $primary }}
DecorationHover={{ $primary }}
ForegroundActive={{ $inverseSurface }}
ForegroundInactive={{ $outline }}
ForegroundLink={{ $klink }}
ForegroundNegative={{ $knegative }}
ForegroundNeutral={{ $kneutral }}
ForegroundNormal={{ $onSurfaceVariant }}
ForegroundPositive={{ $kpositive }}
ForegroundVisited={{ $kvisited }}
[Colors:Selection]
BackgroundAlternate={{ $primary }}
BackgroundNormal={{ $primary }}
DecorationFocus={{ $primary }}
DecorationHover={{ $secondary }}
ForegroundActive={{ $onPrimary }}
ForegroundInactive={{ $onPrimary }}
ForegroundLink={{ $klinkSelection }}
ForegroundNegative={{ $knegativeSelection }}
ForegroundNeutral={{ $kneutralSelection }}
ForegroundNormal={{ $onPrimary }}
ForegroundPositive={{ $kpositiveSelection }}
ForegroundVisited={{ $kvisitedSelection }}
[Colors:Tooltip]
BackgroundAlternate={{ $surfaceVariant }}
BackgroundNormal={{ $surfaceContainer }}
DecorationFocus={{ $primary }}
DecorationHover={{ $primary }}
ForegroundActive={{ $onSurface }}
ForegroundInactive={{ $outline }}
ForegroundLink={{ $klink }}
ForegroundNegative={{ $knegative }}
ForegroundNeutral={{ $kneutral }}
ForegroundNormal={{ $onSurface }}
ForegroundPositive={{ $kpositive }}
ForegroundVisited={{ $kvisited }}
[Colors:View]
BackgroundAlternate={{ $surfaceContainer }}
BackgroundNormal={{ $surfaceDim }}
DecorationFocus={{ $primary }}
#-----------------------------------------------
DecorationHover={{ $inversePrimary }}
ForegroundActive={{ $inverseSurface }}
ForegroundInactive={{ $outline }}
ForegroundLink={{ $klink }}
ForegroundNegative={{ $knegative }}
ForegroundNeutral={{ $kneutral }}
ForegroundNormal={{ $onSurface }}
ForegroundPositive={{ $kpositive }}
ForegroundVisited={{ $kvisited }}
[Colors:Window]
BackgroundAlternate={{ $surfaceVariant }}
BackgroundNormal={{ $surfaceContainer }}
DecorationFocus={{ $primary }}
DecorationHover={{ $primary }}
ForegroundActive={{ $klink }}
ForegroundInactive={{ $outline }}
ForegroundLink={{ $klink }}
ForegroundNegative={{ $knegative }}
ForegroundNeutral={{ $kneutral }}
#--- Window titles, context icons
ForegroundNormal={{ $onSurfaceVariant }}
ForegroundPositive={{ $kpositive }}
ForegroundVisited={{ $kvisited }}
[General]
ColorScheme=Caelestia
Name=Caelestia
shadeSortColumn=true
[KDE]
contrast=4
[WM]
activeBackground={{ $surfaceContainerHighest }}
activeBlend=252,252,252
activeForeground={{ $onSurface }}
inactiveBackground={{ $secondaryContainer }}
inactiveBlend=161,169,177
inactiveForeground={{ $onSecondaryContainer }}
+149
View File
@@ -0,0 +1,149 @@
[ColorEffects:Disabled]
Color={{ $surfaceContainer }}
ColorAmount=0.5
ColorEffect=3
ContrastAmount=0
ContrastEffect=0
IntensityAmount=0
IntensityEffect=0
[ColorEffects:Inactive]
ChangeSelectionColor=true
Color={{ $surfaceContainerLowest }}
ColorAmount=0.025
ColorEffect=0
ContrastAmount=0.1
ContrastEffect=0
Enable=false
IntensityAmount=0
IntensityEffect=0
[Colors:Button]
BackgroundAlternate={{ $surfaceVariant }}
BackgroundNormal={{ $surfaceContainerHigh }}
DecorationFocus={{ $primary }}
DecorationHover={{ $primary }}
ForegroundActive={{ $onSurface }}
ForegroundInactive={{ $outline }}
ForegroundLink={{ $klink }}
ForegroundNegative={{ $knegative }}
ForegroundNeutral={{ $kneutral }}
ForegroundNormal={{ $onSurface }}
ForegroundPositive={{ $kpositive }}
ForegroundVisited={{ $kvisited }}
[Colors:Complementary]
BackgroundAlternate={{ $surface }}
BackgroundNormal={{ $surfaceContainer }}
DecorationFocus={{ $primary }}
DecorationHover={{ $primary }}
ForegroundActive={{ $inverseSurface }}
ForegroundInactive={{ $outline }}
ForegroundLink={{ $klink }}
ForegroundNegative={{ $knegative }}
ForegroundNeutral={{ $kneutral }}
ForegroundNormal={{ $onSurfaceVariant }}
ForegroundPositive={{ $kpositive }}
ForegroundVisited={{ $kvisited }}
[Colors:Header]
BackgroundAlternate={{ $surfaceContainer }}
BackgroundNormal={{ $surfaceContainer }}
DecorationFocus={{ $primary }}
DecorationHover={{ $primary }}
ForegroundActive={{ $inverseSurface }}
ForegroundInactive={{ $outline }}
ForegroundLink={{ $klink }}
ForegroundNegative={{ $knegative }}
ForegroundNeutral={{ $kneutral }}
ForegroundNormal={{ $onSurfaceVariant }}
ForegroundPositive={{ $kpositive }}
ForegroundVisited={{ $kvisited }}
[Colors:Header][Inactive]
BackgroundAlternate={{ $surfaceContainer }}
BackgroundNormal={{ $surfaceContainer }}
DecorationFocus={{ $primary }}
DecorationHover={{ $primary }}
ForegroundActive={{ $inverseSurface }}
ForegroundInactive={{ $outline }}
ForegroundLink={{ $klink }}
ForegroundNegative={{ $knegative }}
ForegroundNeutral={{ $kneutral }}
ForegroundNormal={{ $onSurfaceVariant }}
ForegroundPositive={{ $kpositive }}
ForegroundVisited={{ $kvisited }}
[Colors:Selection]
BackgroundAlternate={{ $primary }}
BackgroundNormal={{ $primary }}
DecorationFocus={{ $primary }}
DecorationHover={{ $secondary }}
ForegroundActive={{ $onPrimary }}
ForegroundInactive={{ $onPrimary }}
ForegroundLink={{ $klinkSelection }}
ForegroundNegative={{ $knegativeSelection }}
ForegroundNeutral={{ $kneutralSelection }}
ForegroundNormal={{ $onPrimary }}
ForegroundPositive={{ $kpositiveSelection }}
ForegroundVisited={{ $kvisitedSelection }}
[Colors:Tooltip]
BackgroundAlternate={{ $surfaceVariant }}
BackgroundNormal={{ $surfaceContainer }}
DecorationFocus={{ $primary }}
DecorationHover={{ $primary }}
ForegroundActive={{ $onSurface }}
ForegroundInactive={{ $outline }}
ForegroundLink={{ $klink }}
ForegroundNegative={{ $knegative }}
ForegroundNeutral={{ $kneutral }}
ForegroundNormal={{ $onSurface }}
ForegroundPositive={{ $kpositive }}
ForegroundVisited={{ $kvisited }}
[Colors:View]
BackgroundAlternate={{ $surfaceContainer }}
BackgroundNormal={{ $surfaceBright }}
DecorationFocus={{ $primary }}
#-----------------------------------------------
DecorationHover={{ $secondaryFixed }}
ForegroundActive={{ $inverseSurface }}
ForegroundInactive={{ $outline }}
ForegroundLink={{ $klink }}
ForegroundNegative={{ $knegative }}
ForegroundNeutral={{ $kneutral }}
ForegroundNormal={{ $onSurface }}
ForegroundPositive={{ $kpositive }}
ForegroundVisited={{ $kvisited }}
[Colors:Window]
BackgroundAlternate={{ $surfaceVariant }}
BackgroundNormal={{ $surfaceContainer }}
DecorationFocus={{ $primary }}
DecorationHover={{ $primary }}
ForegroundActive={{ $klink }}
ForegroundInactive={{ $outline }}
ForegroundLink={{ $klink }}
ForegroundNegative={{ $knegative }}
ForegroundNeutral={{ $kneutral }}
#--- Window titles, context icons
ForegroundNormal={{ $onSurfaceVariant }}
ForegroundPositive={{ $kpositive }}
ForegroundVisited={{ $kvisited }}
[General]
ColorScheme=Caelestia
Name=Caelestia
shadeSortColumn=true
[KDE]
contrast=4
[WM]
activeBackground={{ $surfaceContainerHighest }}
activeBlend=227,229,231
activeForeground={{ $onSurface }}
inactiveBackground={{ $secondaryContainer }}
inactiveBlend=239,240,241
inactiveForeground={{ $onSurfaceVariant }}
+16
View File
@@ -92,6 +92,14 @@ dark_catppuccin = [
hex_to_hct("b4befe"),
]
kcolours = [
{"name": "klink", "hct": hex_to_hct("2980b9")},
{"name": "kvisited", "hct": hex_to_hct("9b59b6")},
{"name": "knegative", "hct": hex_to_hct("da4453")},
{"name": "kneutral", "hct": hex_to_hct("f67400")},
{"name": "kpositive", "hct": hex_to_hct("27ae60")},
]
colour_names = [
"rosewater",
"flamingo",
@@ -185,6 +193,14 @@ def gen_scheme(scheme, primary: Hct) -> dict[str, str]:
else:
colours[colour_names[i]] = harmonize(hct, colours["primary_paletteKeyColor"], (-0.2 if light else 0.05))
# KColours
for colour in kcolours:
colours[colour["name"]] = harmonize(colour["hct"], colours["primary"], 0.1)
colours[f"{colour['name']}Selection"] = harmonize(colour["hct"], colours["onPrimaryFixedVariant"], 0.1)
if scheme.variant == "monochrome":
colours[colour["name"]] = grayscale(colours[colour["name"]], light)
colours[f"{colour['name']}Selection"] = grayscale(colours[f"{colour['name']}Selection"], light)
if scheme.variant == "neutral":
for name, hct in colours.items():
colours[name].chroma -= 15
+16 -3
View File
@@ -159,15 +159,28 @@ def apply_gtk(colours: dict[str, str], mode: str) -> None:
def apply_qt(colours: dict[str, str], mode: str) -> None:
template = gen_replace(colours, templates_dir / "qtcolors.conf", hash=True)
write_file(config_dir / "qt5ct/colors/caelestia.conf", template)
write_file(config_dir / "qt6ct/colors/caelestia.conf", template)
template = gen_replace(colours, templates_dir / f"qt{mode}.colors", hash=True)
write_file(config_dir / "qt5ct/colors/caelestia.colors", template)
write_file(config_dir / "qt6ct/colors/caelestia.colors", template)
qtct = (templates_dir / "qtct.conf").read_text()
qtct = qtct.replace("{{ $mode }}", mode.capitalize())
for ver in 5, 6:
conf = qtct.replace("{{ $config }}", str(config_dir / f"qt{ver}ct"))
if ver == 5:
conf += """
[Fonts]
fixed="Monospace,12,-1,5,50,0,0,0,0,0"
general="Sans Serif,12,-1,5,50,0,0,0,0,0"
"""
else:
conf += """
[Fonts]
fixed="Monospace,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
general="Sans Serif,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
"""
write_file(config_dir / f"qt{ver}ct/qt{ver}ct.conf", conf)