From e221445a518944ecea9a2e42a68556087936658f Mon Sep 17 00:00:00 2001 From: Nils Pukropp Date: Fri, 18 Sep 2026 02:11:02 +0200 Subject: [PATCH] theme: Catppuccin Mocha blue/pink variant of the Persona rice MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Keeps the Takemi geometry — the lean, the chamfer, the slabs — and swaps the palette wholesale. Mocha carries the ground; blue is the accent for anything live (focus, selection, borders, hover) and pink is the alarm for anything destructive or failed, so one hue no longer has to mean both 'active' and 'wrong'. Destructive controls rest as a pink keyline and fill solid only when hovered or selected: Mocha's pink is a pastel, and a resting slab of it reads as washed-out red rather than as a warning. The load ramp climbs text -> blue -> pink for the same reason, instead of fading straight through a muddy mid-tone. Surfaces covered: quickshell, Hyprland borders, alacritty, fish, dunst, and nvim (via the catppuccin plugin, submodule branch catppuccin-mocha). GTK 3/4, Qt and xsettingsd move to catppuccin-mocha-blue and are now tracked, since nothing else makes non-shell apps match the rice; the previous Takemi copies are in theme-repair-backups/. Co-Authored-By: Claude Opus 5 --- .gitignore | 16 ++++ alacritty/alacritty.toml | 2 +- dunst/dunstrc | 4 +- fish/conf.d/takemi_theme.fish | 83 ++++++++++--------- gtk-3.0/gtk.css | 7 ++ gtk-3.0/settings.ini | 7 ++ gtk-4.0/gtk.css | 8 ++ gtk-4.0/settings.ini | 7 ++ hypr/hyprpaper.conf | 2 +- hypr/lua/palette.lua | 57 ++++++------- nvim | 2 +- qt6ct/qt6ct.conf | 32 +++++++ quickshell/components/P5Button.qml | 18 ++-- quickshell/config/Theme.qml | 129 ++++++++++++++++------------- quickshell/lock/LockFace.qml | 8 +- quickshell/overlays/PowerMenu.qml | 2 +- quickshell/services/Battery.qml | 2 +- quickshell/services/Notifs.qml | 2 +- xsettingsd/xsettingsd.conf | 9 ++ 19 files changed, 254 insertions(+), 143 deletions(-) create mode 100644 gtk-3.0/gtk.css create mode 100644 gtk-3.0/settings.ini create mode 100644 gtk-4.0/gtk.css create mode 100644 gtk-4.0/settings.ini create mode 100644 qt6ct/qt6ct.conf create mode 100644 xsettingsd/xsettingsd.conf diff --git a/.gitignore b/.gitignore index 34d9682..9a3d053 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,19 @@ fish/fish_variables waybar/fluxo-rs !fluxo/ + +# Desktop theming. These live outside the per-app configs above, but they are +# what makes an app that is neither GTK-aware nor shell-aware match the rice, +# so the branch carries them. +!gtk-3.0/ +gtk-3.0/* +!gtk-3.0/settings.ini +!gtk-3.0/gtk.css +!gtk-4.0/ +gtk-4.0/* +!gtk-4.0/settings.ini +!gtk-4.0/gtk.css +!xsettingsd/ +!qt6ct/ +qt6ct/* +!qt6ct/qt6ct.conf diff --git a/alacritty/alacritty.toml b/alacritty/alacritty.toml index d6e6ce3..c90ff73 100644 --- a/alacritty/alacritty.toml +++ b/alacritty/alacritty.toml @@ -107,7 +107,7 @@ ipc_socket = true ## GENERAL -------------------------------------------------------- ## Import additional configuration files. -import = ["~/.config/alacritty/takemi.toml", "~/.config/alacritty/fonts.toml"] +import = ["~/.config/alacritty/catppuccin-mocha.toml", "~/.config/alacritty/fonts.toml"] [[keyboard.bindings]] key = "Return" diff --git a/dunst/dunstrc b/dunst/dunstrc index fa88922..f94033b 100644 --- a/dunst/dunstrc +++ b/dunst/dunstrc @@ -1,10 +1,10 @@ [global] corner_radius = 4 transparency = 90 -frame_color = "#f38ba8" +frame_color = "#89b4fa" frame_width = 1 separator_color= frame -highlight = "#89dceb" +highlight = "#f5c2e7" [urgency_low] background = "#1e1e2e" diff --git a/fish/conf.d/takemi_theme.fish b/fish/conf.d/takemi_theme.fish index a483c67..0c061cd 100644 --- a/fish/conf.d/takemi_theme.fish +++ b/fish/conf.d/takemi_theme.fish @@ -1,50 +1,51 @@ -# Takemi — matched to ~/.config/quickshell/config/Theme.qml, -# ~/.config/alacritty/takemi.toml and ~/.config/nvim/lua/takemi.lua. +# Mocha — matched to ~/.config/quickshell/config/Theme.qml, +# ~/.config/alacritty/catppuccin-mocha.toml and ~/.config/nvim/lua/takemi.lua. # -# Replaces the catppuccin fish_frozen_theme.fish that fish 4.3 generated on -# upgrade. Same content as themes/Takemi.theme — that copy exists only so -# `fish_config` can preview it; this one is what actually loads. +# Catppuccin Mocha's own fish theme (themes/Catppuccin Mocha.theme), with the +# selection and pager rows carried over from the Takemi layout: a solid accent +# block with crust punched out of it, rather than a tinted surface. The shell +# selects with a blue slab; the prompt should not disagree. # # Note that `fish_config` writing a theme from the web UI will recreate # fish_frozen_theme.fish, which sorts before this file and so would lose. -set --global fish_color_normal ffffff -set --global fish_color_command ffffff --bold -set --global fish_color_keyword ff2d40 -set --global fish_color_param c8c8ce -set --global fish_color_option 8d9bb8 -set --global fish_color_quote 7f9b6a -set --global fish_color_escape 9db8bd -set --global fish_color_operator c8c8ce -set --global fish_color_redirection ff6b78 -set --global fish_color_end 6b6b70 -set --global fish_color_comment 6b6b70 --italics -set --global fish_color_error ff2d40 --bold -set --global fish_color_cancel ff2d40 -set --global fish_color_gray 6b6b70 -set --global fish_color_autosuggestion 4a4a52 -set --global fish_color_selection 000000 --background=ff2d40 -set --global fish_color_search_match 000000 --background=c8c8ce -set --global fish_color_match 000000 --background=ff2d40 +set --global fish_color_normal cdd6f4 +set --global fish_color_command 89b4fa +set --global fish_color_keyword f38ba8 +set --global fish_color_param f2cdcd +set --global fish_color_option a6e3a1 +set --global fish_color_quote a6e3a1 +set --global fish_color_escape eba0ac +set --global fish_color_operator f5c2e7 +set --global fish_color_redirection f5c2e7 +set --global fish_color_end fab387 +set --global fish_color_comment 7f849c --italics +set --global fish_color_error f38ba8 --bold +set --global fish_color_cancel f38ba8 +set --global fish_color_gray 6c7086 +set --global fish_color_autosuggestion 6c7086 +set --global fish_color_selection 11111b --background=89b4fa +set --global fish_color_search_match 11111b --background=f5c2e7 +set --global fish_color_match 11111b --background=89b4fa set --global fish_color_history_current --bold set --global fish_color_valid_path --underline -set --global fish_color_cwd ffffff --bold -set --global fish_color_cwd_root ff2d40 --bold -set --global fish_color_user c8c8ce -set --global fish_color_host ffffff --bold -set --global fish_color_host_remote ff6b78 -set --global fish_color_status ff2d40 +set --global fish_color_cwd f9e2af --bold +set --global fish_color_cwd_root f38ba8 --bold +set --global fish_color_user 94e2d5 +set --global fish_color_host 89b4fa --bold +set --global fish_color_host_remote a6e3a1 +set --global fish_color_status f38ba8 -set --global fish_pager_color_progress 6b6b70 --background=141418 +set --global fish_pager_color_progress 6c7086 --background=313244 set --global fish_pager_color_background -set --global fish_pager_color_prefix ffffff --bold -set --global fish_pager_color_completion c8c8ce -set --global fish_pager_color_description 6b6b70 -set --global fish_pager_color_secondary_background --background=0d0d10 -set --global fish_pager_color_secondary_completion c8c8ce -set --global fish_pager_color_secondary_description 6b6b70 -set --global fish_pager_color_secondary_prefix ffffff --bold -set --global fish_pager_color_selected_background --background=ff2d40 -set --global fish_pager_color_selected_completion 000000 -set --global fish_pager_color_selected_description 000000 -set --global fish_pager_color_selected_prefix 000000 --bold +set --global fish_pager_color_prefix f5c2e7 --bold +set --global fish_pager_color_completion cdd6f4 +set --global fish_pager_color_description 6c7086 +set --global fish_pager_color_secondary_background --background=181825 +set --global fish_pager_color_secondary_completion cdd6f4 +set --global fish_pager_color_secondary_description 6c7086 +set --global fish_pager_color_secondary_prefix f5c2e7 --bold +set --global fish_pager_color_selected_background --background=89b4fa +set --global fish_pager_color_selected_completion 11111b +set --global fish_pager_color_selected_description 11111b +set --global fish_pager_color_selected_prefix 11111b --bold diff --git a/gtk-3.0/gtk.css b/gtk-3.0/gtk.css new file mode 100644 index 0000000..cca3269 --- /dev/null +++ b/gtk-3.0/gtk.css @@ -0,0 +1,7 @@ +/* Catppuccin Mocha Blue carries the whole GTK3 palette itself, so there is no + * surface override here — the Takemi branch only needed one because it was + * painting Fluent's greys black. All that is left is the one place the rice + * disagrees with stock Catppuccin: destructive actions are pink, matching the + * shell's alarm colour. */ +@define-color destructive_bg_color #f38ba8; +@define-color destructive_fg_color #11111b; diff --git a/gtk-3.0/settings.ini b/gtk-3.0/settings.ini new file mode 100644 index 0000000..2b722f4 --- /dev/null +++ b/gtk-3.0/settings.ini @@ -0,0 +1,7 @@ +[Settings] +gtk-theme-name=catppuccin-mocha-blue-standard+default +gtk-icon-theme-name=Papirus-Dark +gtk-font-name=Adwaita Sans 11 +gtk-cursor-theme-name=Bibata-Modern-Classic +gtk-cursor-theme-size=24 +gtk-application-prefer-dark-theme=1 diff --git a/gtk-4.0/gtk.css b/gtk-4.0/gtk.css new file mode 100644 index 0000000..0ed0fcf --- /dev/null +++ b/gtk-4.0/gtk.css @@ -0,0 +1,8 @@ +/* Catppuccin Mocha Blue, straight from the installed theme. The Takemi branch + * overrode Fluent's greys with black here; Mocha needs no override — its own + * surfaces are the palette the rest of the rice is built on. */ +@import url("/usr/share/themes/catppuccin-mocha-blue-standard+default/gtk-4.0/gtk.css"); + +/* Pink is the shell's alarm colour; keep destructive GTK buttons in step. */ +@define-color destructive_bg_color #f38ba8; +@define-color destructive_fg_color #11111b; diff --git a/gtk-4.0/settings.ini b/gtk-4.0/settings.ini new file mode 100644 index 0000000..2b722f4 --- /dev/null +++ b/gtk-4.0/settings.ini @@ -0,0 +1,7 @@ +[Settings] +gtk-theme-name=catppuccin-mocha-blue-standard+default +gtk-icon-theme-name=Papirus-Dark +gtk-font-name=Adwaita Sans 11 +gtk-cursor-theme-name=Bibata-Modern-Classic +gtk-cursor-theme-size=24 +gtk-application-prefer-dark-theme=1 diff --git a/hypr/hyprpaper.conf b/hypr/hyprpaper.conf index 9dc1d66..eb4f51c 100644 --- a/hypr/hyprpaper.conf +++ b/hypr/hyprpaper.conf @@ -1,6 +1,6 @@ wallpaper { monitor = - path = ~/.wallpapers/takemi_3.jpg + path = ~/.wallpapers/arch.png fit_mode = cover } diff --git a/hypr/lua/palette.lua b/hypr/lua/palette.lua index 95ababd..664005c 100644 --- a/hypr/lua/palette.lua +++ b/hypr/lua/palette.lua @@ -1,6 +1,6 @@ --- Takemi palette — kept in step with ~/.config/quickshell/config/Theme.qml. +-- Mocha palette — kept in step with ~/.config/quickshell/config/Theme.qml. -- --- Crimson, black, white. Nothing else carries hue. +-- Catppuccin Mocha ground, blue accent, pink alarm. Nothing else carries hue. -- -- Returned as a table, so every module that paints something does -- local c = require("lua/palette") @@ -8,44 +8,45 @@ local c = {} --- ----------------------------------------------------------------- THE KNOB --- The one colour in this setup. Change this line and the window borders, --- group indicators and focus states all recolour with it. +-- ---------------------------------------------------------------- THE KNOBS +-- Two colours in this setup: blue for anything live (window borders, group +-- indicators, focus), pink for anything wrong. Change these lines and every +-- painted edge recolours with them. -- --- Keep it in step with `readonly property color accent` in +-- Keep them in step with `accent` / `alarm` in -- ~/.config/quickshell/config/Theme.qml, which is what colours the shell. --- Those are the only two places the colour is written. -c.accent = "rgb(ff2d40)" +-- Those are the only places the colours are written. +c.accent = "rgb(89b4fa)" +c.alarm = "rgb(f5c2e7)" -c.accentDim = "rgb(8f1826)" -c.accentSoft = "rgb(ff6b78)" +c.accentDim = "rgb(5a7dc0)" +c.accentSoft = "rgb(b4befe)" -- ------------------------------------------------------------------ neutrals -c.ink = "rgb(000000)" +c.ink = "rgb(11111b)" -c.base = "rgb(0a0a0c)" -c.mantle = "rgb(0d0d10)" -c.surface = "rgb(141418)" -c.surfaceAlt = "rgb(1c1c22)" -c.overlay = "rgb(26262e)" -c.outline = "rgb(3a3a44)" +c.base = "rgb(1e1e2e)" +c.mantle = "rgb(181825)" +c.surface = "rgb(313244)" +c.surfaceAlt = "rgb(45475a)" +c.overlay = "rgb(585b70)" +c.outline = "rgb(6c7086)" -c.text = "rgb(ffffff)" -c.subtext = "rgb(c8c8ce)" -c.muted = "rgb(6b6b70)" +c.text = "rgb(cdd6f4)" +c.subtext = "rgb(a6adc8)" +c.muted = "rgb(7f849c)" --- Retired hues, kept as aliases so existing references resolve. The shell has --- no teal any more — the wallpaper is the colour in the composition. +-- Semantic aliases, so existing references resolve without inventing hues. c.primary = c.text -c.primaryDim = "rgb(9a9aa2)" +c.primaryDim = "rgb(9399b2)" c.glow = c.accent -c.blue = c.primaryDim +c.blue = c.accent c.deep = c.surfaceAlt -c.warn = c.accentSoft +c.warn = c.alarm c.ok = c.text --- Crimson into its own shadow, on the diagonal. The accent is the only hue --- here — a gradient into a second colour is what put blue in the border. -c.activeBorder = { colors = { c.accent, c.accentDim }, angle = 135 } +-- Blue into lavender, on the diagonal. Both ends are the accent's own family, +-- so the border never reads as two colours arguing. +c.activeBorder = { colors = { c.accent, c.accentSoft }, angle = 135 } return c diff --git a/nvim b/nvim index 2cbfe69..9526fa8 160000 --- a/nvim +++ b/nvim @@ -1 +1 @@ -Subproject commit 2cbfe6946ae8da69fe7bc464cad9cac2aa906bd9 +Subproject commit 9526fa8fac4194eed10ec3b16cb3179b01c6aeb3 diff --git a/qt6ct/qt6ct.conf b/qt6ct/qt6ct.conf new file mode 100644 index 0000000..65b6fa7 --- /dev/null +++ b/qt6ct/qt6ct.conf @@ -0,0 +1,32 @@ +[Appearance] +color_scheme_path=/usr/share/qt6ct/colors/catppuccin-mocha-blue.conf +custom_palette=true +icon_theme=Papirus-Dark +standard_dialogs=default +style=Fusion + +[Fonts] +fixed="Sans Serif,9,-1,5,400,0,0,0,0,0,0,0,0,0,0,1" +general="Sans Serif,9,-1,5,400,0,0,0,0,0,0,0,0,0,0,1" + +[Interface] +activate_item_on_single_click=1 +buttonbox_layout=0 +cursor_flash_time=1000 +dialog_buttons_have_icons=1 +double_click_interval=400 +gui_effects=@Invalid() +keyboard_scheme=2 +menus_have_icons=true +show_shortcuts_in_context_menus=true +stylesheets=@Invalid() +toolbutton_style=4 +underline_shortcut=1 +wheel_scroll_lines=3 + +[SettingsWindow] +geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\a\x80\0\0\0\0\0\0\xe\xef\0\0\x4l\0\0\a\x80\0\0\0\0\0\0\xe\xef\0\0\x4l\0\0\0\x1\x2\0\0\0\a\x80\0\0\a\x80\0\0\0\0\0\0\xe\xef\0\0\x4l) + +[Troubleshooting] +force_raster_widgets=1 +ignored_applications=@Invalid() diff --git a/quickshell/components/P5Button.qml b/quickshell/components/P5Button.qml index 7bab0f2..827d75e 100644 --- a/quickshell/components/P5Button.qml +++ b/quickshell/components/P5Button.qml @@ -46,20 +46,24 @@ FocusScope { padding: Theme.padS fill: { if (!root.enabled) return Theme.treatmentDisabledFill; - if (root.destructive) return Theme.treatmentDestructiveFill; + if (root.destructive) + return root.highlighted ? Theme.treatmentDestructiveActiveFill + : Theme.treatmentDestructiveFill; if (root.highlighted) return Theme.treatmentHoverFill; return Theme.treatmentRestFill; } fillOpacity: root.enabled ? 1.0 : 0.72 border: { if (!root.enabled) return Theme.treatmentDisabledMark; - if (root.destructive) return Theme.treatmentFocusMark; + if (root.destructive) + return root.highlighted ? Theme.treatmentDestructiveActiveMark + : Theme.treatmentDestructiveMark; if (root.highlighted) return Theme.treatmentHoverMark; return Theme.alpha(root.accent, 0.55); } borderWidth: Theme.stroke slash: !root.highlighted - slashColor: root.destructive ? Theme.treatmentDestructiveMark : root.accent + slashColor: root.destructive ? Theme.alarm : root.accent halftone: root.enabled && root.highlighted halftoneColor: Theme.ink halftoneOpacity: 0.14 @@ -81,7 +85,9 @@ FocusScope { font.pixelSize: Theme.fsTitle color: { if (!root.enabled) return Theme.treatmentDisabledText; - if (root.destructive) return Theme.treatmentDestructiveText; + if (root.destructive) + return root.highlighted ? Theme.treatmentDestructiveActiveText + : Theme.treatmentDestructiveText; if (root.highlighted) return Theme.treatmentHoverText; return root.accent; } @@ -92,7 +98,9 @@ FocusScope { text: root.text color: { if (!root.enabled) return Theme.treatmentDisabledText; - if (root.destructive) return Theme.treatmentDestructiveText; + if (root.destructive) + return root.highlighted ? Theme.treatmentDestructiveActiveText + : Theme.treatmentDestructiveText; if (root.highlighted) return Theme.treatmentHoverText; return Theme.treatmentRestText; } diff --git a/quickshell/config/Theme.qml b/quickshell/config/Theme.qml index 1a8a03b..630c05c 100644 --- a/quickshell/config/Theme.qml +++ b/quickshell/config/Theme.qml @@ -3,55 +3,61 @@ pragma Singleton import QtQuick import Quickshell -// Takemi palette: crimson, black, white. Nothing else. +// Mocha palette: Catppuccin Mocha ground, blue as the accent, pink as the +// alarm. Persona geometry, softer colour. // -// White does the work: text, icons, idle indicators. Crimson is the only accent -// and it always means the same thing — active, or wrong. Black is structure, -// used as a hard keyline rather than as a shadow. There are no gradients in -// this shell; every fill is flat. +// The Takemi branch ran monochrome-plus-crimson, where one hue carried both +// "active" and "wrong". Mocha has room for two: blue is every resting accent — +// focus, selection, the thing you are pointing at — and pink is reserved for +// the things that bite, so destructive and error still read at a glance +// without a third colour entering the shell. // -// The wallpaper is teal. The UI used to be teal too, and the two fought each -// other into a murky blue-grey. Letting the UI go monochrome-plus-red is what -// lets the wallpaper read as the colour in the composition. +// Everything else is Mocha's own neutral ramp. Fills stay flat and keylines +// stay hard; only the hues moved. Singleton { id: root // ---------------------------------------------------------------- colors - readonly property color ink: "#000000" + // Crust, not pure black: it is the darkest thing in Mocha, so it keeps its + // job as the hard keyline and as text punched out of an accent fill. + readonly property color ink: "#11111b" - readonly property color base: "#0a0a0c" - readonly property color mantle: "#0d0d10" - readonly property color surface: "#141418" - readonly property color surfaceAlt: "#1c1c22" - readonly property color overlay: "#26262e" - readonly property color outline: "#3a3a44" + readonly property color base: "#1e1e2e" + readonly property color mantle: "#181825" + readonly property color surface: "#313244" + readonly property color surfaceAlt: "#45475a" + readonly property color overlay: "#585b70" + readonly property color outline: "#6c7086" - readonly property color text: "#ffffff" - readonly property color subtext: "#c8c8ce" - readonly property color muted: "#6b6b70" + readonly property color text: "#cdd6f4" + readonly property color subtext: "#a6adc8" + readonly property color muted: "#7f849c" - // ------------------------------------------------------------ THE KNOB - // The one colour in this shell. Change this line and the entire accent - // recolours — everything below is derived from it, and nothing else in the - // palette carries hue at all. + // ------------------------------------------------------------ THE KNOBS + // Two colours, two meanings, and nothing else in the shell carries hue. // - // Keep it in step with `$accent` at the top of - // ~/.config/hypr/modules/takemi.conf, which is what colours the Hyprland - // window borders. Those are the only two places the colour is written. - readonly property color accent: "#ff2d40" + // `accent` is blue: anything live, focused or selected. `alarm` is pink: + // anything destructive or failed. Swap either line and everything derived + // from it recolours. + // + // Keep them in step with `c.accent` / `c.alarm` in + // ~/.config/hypr/lua/palette.lua, which is what colours the Hyprland + // window borders. Those are the only places the colours are written. + readonly property color accent: "#89b4fa" + readonly property color alarm: "#f5c2e7" - readonly property color accentDim: Qt.darker(root.accent, 1.9) - readonly property color accentSoft: Qt.lighter(root.accent, 1.35) + readonly property color accentDim: "#5a7dc0" + readonly property color accentSoft: "#b4befe" // `primary` is the resting voice of the UI, which is now simply white. // Kept under the old name so the existing call sites don't all have to move. readonly property color primary: root.text - readonly property color primaryDim: "#9a9aa2" + readonly property color primaryDim: "#9399b2" readonly property color deep: root.surfaceAlt - // `glow` is the hover highlight. It used to be a brighter teal, which now - // that everything rests at white would have made hover invisible — so it - // resolves to crimson. Pointing at a thing lights it up red. + // `glow` is the hover highlight. Pointing at a thing lights it up blue — + // the same signal as focus, because it is the same statement about where + // your attention is. readonly property color glow: root.accent // ------------------------------------------------ semantic treatments @@ -77,38 +83,43 @@ Singleton { readonly property color treatmentActiveMark: root.accent readonly property color treatmentActiveText: root.text - // Crimson carries destructive/error meaning. Text and keylines stay black: - // black-on-crimson is 5.70:1, while small white-on-crimson is only 3.68:1. - readonly property color treatmentDestructiveFill: root.accent - readonly property color treatmentDestructiveMark: root.ink - readonly property color treatmentDestructiveText: root.ink - readonly property color treatmentErrorFill: root.treatmentDestructiveFill - readonly property color treatmentErrorMark: root.treatmentDestructiveMark - readonly property color treatmentErrorText: root.treatmentDestructiveText + // Pink carries destructive/error meaning — never blue, so a dangerous + // button can never be mistaken for a merely focused one. + // + // At rest it is a keyline and a label, not a fill: Mocha's pink is a + // pastel, and a slab of it reads as a washed-out red rather than as a + // warning. The solid pink is held back for the moment the pointer or the + // selection is actually on the thing — then it lands, with crust punched + // out of it at 11.8:1. + readonly property color treatmentDestructiveFill: root.surface + readonly property color treatmentDestructiveMark: root.alarm + readonly property color treatmentDestructiveText: root.alarm + + readonly property color treatmentDestructiveActiveFill: root.alarm + readonly property color treatmentDestructiveActiveMark: root.ink + readonly property color treatmentDestructiveActiveText: root.ink + readonly property color treatmentErrorFill: root.treatmentDestructiveActiveFill + readonly property color treatmentErrorMark: root.treatmentDestructiveActiveMark + readonly property color treatmentErrorText: root.treatmentDestructiveActiveText readonly property color treatmentUrgentFill: root.surface - readonly property color treatmentUrgentMark: root.accent + readonly property color treatmentUrgentMark: root.alarm readonly property color treatmentUrgentText: root.text readonly property color treatmentDisabledFill: root.surface readonly property color treatmentDisabledMark: root.outline readonly property color treatmentDisabledText: root.muted - // Retired hues. Aliases only — do not introduce new uses. - // - // `warn` used to be accentSoft, which put a washed-out pink-red on screen - // wherever something was merely notable. That reads as a faded accent, not - // as a decision. There is no half-crimson in this palette: a thing is wrong - // (accent) or it is not (text). `warn` now resolves to the real accent, so - // low battery shouts properly and everything merely informational is white. - readonly property color blue: root.primaryDim + // Semantic aliases. Still only two hues: a thing is fine (text), live + // (accent) or wrong (alarm). Nothing here introduces a third colour. + readonly property color blue: root.accent readonly property color ok: root.text - readonly property color warn: root.accent + readonly property color warn: root.alarm - // Display text carries a crimson and a black offset rather than an RGB - // split. Same trick, correct palette. + // Display text carries a blue and a pink offset rather than an RGB split. + // Same trick, this palette's two colours. readonly property color splitRed: root.accent - readonly property color splitCyan: root.ink + readonly property color splitCyan: root.alarm function alpha(c: color, a: real): color { return Qt.rgba(c.r, c.g, c.b, a); @@ -122,11 +133,15 @@ Singleton { a.a + (b.a - a.a) * k); } - // Load readouts sit white until the number actually matters, then bleed to - // crimson. Not a hue cycle — red always means the same thing. + // Load readouts sit at text until the number actually matters, then climb + // through the accent before they reach the alarm. Going straight from text + // to pink passes through a washed-out mid-tone that reads as a faded red + // rather than as a rising number; routing through blue keeps every step of + // the ramp a colour the shell already uses. function heat(pct: real): color { - if (pct <= 55) return root.text; - return root.mix(root.text, root.accent, (pct - 55) / 45); + if (pct <= 45) return root.text; + if (pct <= 75) return root.mix(root.text, root.accent, (pct - 45) / 30); + return root.mix(root.accent, root.alarm, (pct - 75) / 25); } // ----------------------------------------------------------------- fonts diff --git a/quickshell/lock/LockFace.qml b/quickshell/lock/LockFace.qml index 5e964a5..1657acd 100644 --- a/quickshell/lock/LockFace.qml +++ b/quickshell/lock/LockFace.qml @@ -199,7 +199,7 @@ Item { text: surface.failed ? (surface.status || "WRONG").toUpperCase() : (surface.busy ? "CHECKING…" : "WHO GOES THERE") - color: surface.failed ? Theme.accent : Theme.text + color: surface.failed ? Theme.alarm : Theme.text pixelSize: Theme.fsTitle letterSpacing: 4 horizontalAlignment: Text.AlignHCenter @@ -223,10 +223,10 @@ Item { : (input.activeFocus ? Theme.primary : Theme.outline) borderWidth: 2 slash: true - slashColor: surface.failed ? Theme.accent : Theme.primary + slashColor: surface.failed ? Theme.alarm : Theme.primary slashWidth: 6 halftone: true - halftoneColor: surface.failed ? Theme.accent : Theme.primary + halftoneColor: surface.failed ? Theme.alarm : Theme.primary halftoneOpacity: 0.08 Row { @@ -241,7 +241,7 @@ Item { required property int index width: 10 height: 20 - color: surface.failed ? Theme.accent : Theme.primary + color: surface.failed ? Theme.alarm : Theme.primary // Each new block snaps in. Component.onCompleted: pop.start() diff --git a/quickshell/overlays/PowerMenu.qml b/quickshell/overlays/PowerMenu.qml index 6c179bd..062c300 100644 --- a/quickshell/overlays/PowerMenu.qml +++ b/quickshell/overlays/PowerMenu.qml @@ -182,7 +182,7 @@ PanelWindow { icon: entry.modelData.icon destructive: entry.modelData.danger selected: root.selectedAction === entry.index - accent: entry.modelData.danger ? Theme.accent : Theme.primary + accent: entry.modelData.danger ? Theme.alarm : Theme.primary lean: Theme.skew lunge: -10 onClicked: root.invoke(entry.modelData.act) diff --git a/quickshell/services/Battery.qml b/quickshell/services/Battery.qml index 0633a1d..59b911d 100644 --- a/quickshell/services/Battery.qml +++ b/quickshell/services/Battery.qml @@ -59,7 +59,7 @@ Singleton { readonly property color tint: { if (root.charging || root.full) return Theme.ok; - if (root.critical) return Theme.accent; + if (root.critical) return Theme.alarm; if (root.low) return Theme.warn; return Theme.primary; } diff --git a/quickshell/services/Notifs.qml b/quickshell/services/Notifs.qml index f5c6a02..44b6645 100644 --- a/quickshell/services/Notifs.qml +++ b/quickshell/services/Notifs.qml @@ -81,7 +81,7 @@ Singleton { // Urgency-driven accents for the popup chrome. function urgencyColor(u: int): color { switch (u) { - case NotificationUrgency.Critical: return Theme.accent; + case NotificationUrgency.Critical: return Theme.alarm; case NotificationUrgency.Low: return Theme.muted; default: return Theme.primary; } diff --git a/xsettingsd/xsettingsd.conf b/xsettingsd/xsettingsd.conf new file mode 100644 index 0000000..1a383e7 --- /dev/null +++ b/xsettingsd/xsettingsd.conf @@ -0,0 +1,9 @@ +Net/ThemeName "catppuccin-mocha-blue-standard+default" +Net/IconThemeName "Papirus-Dark" +Gtk/CursorThemeName "Bibata-Modern-Classic" +Net/EnableEventSounds 1 +EnableInputFeedbackSounds 0 +Xft/Antialias 1 +Xft/Hinting 1 +Xft/HintStyle "hintslight" +Xft/RGBA "rgb"