Compare commits

...

2 commits

Author SHA1 Message Date
Paul-Henri Froidmont
d4ced5822a
desktop: centralize Gruvbox palette and refine Waybar/Dunst readability
Introduce a shared desktop palette for WM and notifications, then apply it across Hyprland/Waybar/Hyprlock/Dunst while tuning status module visuals (battery state cues, resource thresholds, icon alignment, and Dunst font size) for a more consistent Gruvbox experience.
2026-03-27 19:24:35 +01:00
Paul-Henri Froidmont
fc823c685c
waybar: improve status modules readability and battery state cues 2026-03-27 18:03:25 +01:00
3 changed files with 143 additions and 29 deletions

View file

@ -7,6 +7,7 @@
let let
cfg = config.modules.desktop.dunst; cfg = config.modules.desktop.dunst;
c = (import ./themes/_palette.nix).semantic;
in in
{ {
options.modules.desktop.dunst = { options.modules.desktop.dunst = {
@ -38,7 +39,7 @@ in
padding = 20; padding = 20;
shrink = "no"; shrink = "no";
transparency = 5; transparency = 5;
font = "monospace 14"; font = "MesloLGS Nerd Font 12";
idle_threshold = 120; idle_threshold = 120;
indicate_hidden = "yes"; indicate_hidden = "yes";
markup = "full"; markup = "full";
@ -49,21 +50,21 @@ in
sticky_history = "yes"; sticky_history = "yes";
sort = "yes"; sort = "yes";
frame_width = 1; frame_width = 1;
frame_color = "#1d2021"; frame_color = c.bgStrong;
}; };
urgency_low = { urgency_low = {
foreground = "#ebdbb2"; foreground = c.fg;
background = "#3c3836"; background = c.bgAlt;
timeout = 8; timeout = 8;
}; };
urgency_normal = { urgency_normal = {
foreground = "#ebdbb2"; foreground = c.fg;
background = "#32302f"; background = c.bg;
timeout = 14; timeout = 14;
}; };
urgency_critical = { urgency_critical = {
foreground = "#32302f"; foreground = c.bg;
background = "#cc241d"; background = c.critical;
timeout = 0; timeout = 0;
}; };
}; };

View file

@ -0,0 +1,54 @@
let
mkHex = value: "#${value}";
mkRgb = value: "rgb(${value})";
base = {
bg0Hard = "1d2021";
bg0 = "282828";
bg0Soft = "32302f";
bg1 = "3c3836";
bg2 = "504945";
bg3 = "665c54";
fg0 = "fbf1c7";
fg1 = "ebdbb2";
fg4 = "a89984";
red = "fb4934";
orange = "fe8019";
yellow = "fabd2f";
green = "b8bb26";
aqua = "8ec07c";
blue = "83a598";
purple = "d3869b";
};
hex = builtins.mapAttrs (_: mkHex) base;
rgb = builtins.mapAttrs (_: mkRgb) base;
in
{
inherit base hex rgb;
semantic = {
bg = hex.bg0;
bgAlt = hex.bg1;
bgHover = hex.bg3;
bgStrong = hex.bg0Hard;
fg = hex.fg1;
fgMuted = hex.fg4;
accent = hex.orange;
info = hex.blue;
success = hex.green;
warning = hex.yellow;
critical = hex.red;
borderActiveRgb = rgb.orange;
borderInactiveRgb = rgb.bg2;
lockInnerRgb = rgb.bg0Soft;
lockOuterRgb = rgb.orange;
lockTextRgb = rgb.fg1;
};
}

View file

@ -9,6 +9,7 @@ let
cfg = config.modules.desktop.wm; cfg = config.modules.desktop.wm;
term = "${config.home-manager.users.${config.user.name}.programs.kitty.package}/bin/kitty"; term = "${config.home-manager.users.${config.user.name}.programs.kitty.package}/bin/kitty";
wallpaper = config.modules.desktop.wallpaper; wallpaper = config.modules.desktop.wallpaper;
c = (import ./themes/_palette.nix).semantic;
in in
{ {
options.modules.desktop.wm = { options.modules.desktop.wm = {
@ -62,8 +63,8 @@ in
gaps_in = 7; gaps_in = 7;
gaps_out = 14; gaps_out = 14;
border_size = 2; border_size = 2;
"col.active_border" = "rgb(B28121)"; "col.active_border" = c.borderActiveRgb;
"col.inactive_border" = "rgb(504945)"; "col.inactive_border" = c.borderInactiveRgb;
no_focus_fallback = false; no_focus_fallback = false;
resize_on_border = false; resize_on_border = false;
hover_icon_on_border = false; hover_icon_on_border = false;
@ -287,19 +288,31 @@ in
cpu = { cpu = {
interval = 1; interval = 1;
format = " {usage}%"; states = {
warning = 60;
critical = 85;
};
format = "<span size=\"120%\" rise=\"0\">󰍛</span> {usage}%";
tooltip = false; tooltip = false;
}; };
memory = { memory = {
interval = 1; interval = 1;
format = " {percentage}%"; states = {
warning = 70;
critical = 90;
};
format = "<span size=\"120%\" rise=\"-80\">󰘚</span> {percentage}%";
tooltip = false; tooltip = false;
}; };
disk = { disk = {
interval = 60; interval = 60;
format = " {free}"; states = {
warning = 75;
critical = 90;
};
format = "<span size=\"120%\" rise=\"0\">󰋊</span> {free}";
tooltip = false; tooltip = false;
}; };
@ -309,6 +322,25 @@ in
tooltip = false; tooltip = false;
}; };
battery = {
states = {
warning = 30;
critical = 15;
};
format = "<span size=\"120%\" rise=\"0\">{icon}</span> {capacity}%";
format-charging = "<span size=\"120%\" rise=\"0\">󱐋</span> {capacity}%";
format-plugged = "<span size=\"120%\" rise=\"0\"></span> {capacity}%";
format-full = "<span size=\"120%\" rise=\"0\"></span>";
format-icons = [
""
""
""
""
""
];
tooltip-format = "{timeTo}";
};
}; };
}; };
style = '' style = ''
@ -320,41 +352,41 @@ in
} }
tooltip { tooltip {
background: #282828; background: ${c.bg};
border: 0px solid; border: 0px solid;
border-radius: 0px; border-radius: 0px;
} }
window#waybar { window#waybar {
background: #282828; background: ${c.bg};
color: #ebdbb2; color: ${c.fg};
} }
#workspaces button { #workspaces button {
padding: 0 0.6em; padding: 0 0.6em;
color: #a89984; color: ${c.fgMuted};
border-radius: 0px; border-radius: 0px;
} }
#workspaces button.active { #workspaces button.active {
color: #ebdbb2; color: ${c.fg};
background: #665c54; background: ${c.bgHover};
} }
#workspaces button.urgent { #workspaces button.urgent {
color: #1d2021; color: ${c.bgStrong};
background: #fb4934; background: ${c.critical};
} }
#workspaces button:hover { #workspaces button:hover {
background: #665c54; background: ${c.bgHover};
} }
#network, #network,
#workspaces, #workspaces,
#bluetooth, #bluetooth,
#tray { #tray {
color: #ebdbb2; color: ${c.fg};
padding: 0 5px; padding: 0 5px;
margin: 0 5px; margin: 0 5px;
} }
@ -362,10 +394,37 @@ in
#cpu, #cpu,
#memory, #memory,
#disk, #disk,
#battery,
#clock { #clock {
padding: 0 5px; padding: 0 5px;
margin: 0 5px; margin: 0 5px;
color: #83a598; color: ${c.info};
}
#battery.charging,
#battery.plugged,
#battery.full {
color: ${c.success};
}
#battery.warning:not(.charging) {
color: ${c.warning};
}
#cpu.warning,
#memory.warning,
#disk.warning {
color: ${c.warning};
}
#battery.critical:not(.charging) {
color: ${c.critical};
}
#cpu.critical,
#memory.critical,
#disk.critical {
color: ${c.critical};
} }
''; '';
package = pkgs.waybar.override { wireplumberSupport = false; }; package = pkgs.waybar.override { wireplumberSupport = false; };
@ -429,9 +488,9 @@ in
dots_center = true; dots_center = true;
fade_on_empty = false; fade_on_empty = false;
outline_thickness = 3; outline_thickness = 3;
inner_color = "rgb(50, 48, 47)"; inner_color = c.lockInnerRgb;
outer_color = "rgb(231, 138, 78)"; outer_color = c.lockOuterRgb;
font_color = "rgb(212, 190, 152)"; font_color = c.lockTextRgb;
placeholder_text = "Password..."; placeholder_text = "Password...";
} }
]; ];
@ -440,7 +499,7 @@ in
{ {
monitor = ""; monitor = "";
text = "$TIME"; text = "$TIME";
color = "rgb(212, 190, 152)"; color = c.lockTextRgb;
font_size = 42; font_size = 42;
font_family = "MesloLGS Nerd Font Propo"; font_family = "MesloLGS Nerd Font Propo";
position = "0, 160"; position = "0, 160";
@ -450,7 +509,7 @@ in
{ {
monitor = ""; monitor = "";
text = "cmd[update:1000] date +%d/%m/%Y"; text = "cmd[update:1000] date +%d/%m/%Y";
color = "rgb(212, 190, 152)"; color = c.lockTextRgb;
font_size = 18; font_size = 18;
font_family = "MesloLGS Nerd Font Propo"; font_family = "MesloLGS Nerd Font Propo";
position = "0, 120"; position = "0, 120";