feat: add ASUS platform profile widget and fix flake deps

- Add ASUS widget to laptop bar showing profile icon, CPU freq, and temp
- Add dbus-menu and dbus-hslogger flake inputs to fix gtk-sni-tray build
- Simplify CSS color rules for end-widget pills
- Update taffybar submodule with ASUS Information/Widget modules

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-10 15:26:21 -08:00
committed by Kat Huang
parent e06782a435
commit edd967e163
6 changed files with 112 additions and 46 deletions

View File

@@ -46,55 +46,40 @@
.outer-pad:nth-child(5n+1) {
background-color: @end-color-1-bg;
border-color: @end-color-1-border;
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.06), 0 10px 24px rgba(0, 0, 0, 0.30);
}
.outer-pad:nth-child(5n+1) :not(menu):not(menuitem):not(popover):not(window),
.outer-pad:nth-child(5n+1) :not(menu):not(menuitem):not(popover):not(window) * {
color: @end-color-1-fg;
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.06), 0 10px 24px rgba(0, 0, 0, 0.30);
}
/* Slot 2: purple (child 2, 7, 12, ...) */
.outer-pad:nth-child(5n+2) {
background-color: @end-color-2-bg;
border-color: @end-color-2-border;
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.06), 0 10px 24px rgba(0, 0, 0, 0.30);
}
.outer-pad:nth-child(5n+2) :not(menu):not(menuitem):not(popover):not(window),
.outer-pad:nth-child(5n+2) :not(menu):not(menuitem):not(popover):not(window) * {
color: @end-color-2-fg;
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.06), 0 10px 24px rgba(0, 0, 0, 0.30);
}
/* Slot 3: emerald (child 3, 8, 13, ...) */
.outer-pad:nth-child(5n+3) {
background-color: @end-color-3-bg;
border-color: @end-color-3-border;
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.06), 0 10px 24px rgba(0, 0, 0, 0.30);
}
.outer-pad:nth-child(5n+3) :not(menu):not(menuitem):not(popover):not(window),
.outer-pad:nth-child(5n+3) :not(menu):not(menuitem):not(popover):not(window) * {
color: @end-color-3-fg;
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.06), 0 10px 24px rgba(0, 0, 0, 0.30);
}
/* Slot 4: teal (child 4, 9, 14, ...) */
.outer-pad:nth-child(5n+4) {
background-color: @end-color-4-bg;
border-color: @end-color-4-border;
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.06), 0 10px 24px rgba(0, 0, 0, 0.30);
}
.outer-pad:nth-child(5n+4) :not(menu):not(menuitem):not(popover):not(window),
.outer-pad:nth-child(5n+4) :not(menu):not(menuitem):not(popover):not(window) * {
color: @end-color-4-fg;
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.06), 0 10px 24px rgba(0, 0, 0, 0.30);
}
/* Slot 5: rose (child 5, 10, 15, ...) */
.outer-pad:nth-child(5n+5) {
background-color: @end-color-5-bg;
border-color: @end-color-5-border;
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.06), 0 10px 24px rgba(0, 0, 0, 0.30);
}
.outer-pad:nth-child(5n+5) :not(menu):not(menuitem):not(popover):not(window),
.outer-pad:nth-child(5n+5) :not(menu):not(menuitem):not(popover):not(window) * {
color: @end-color-5-fg;
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.06), 0 10px 24px rgba(0, 0, 0, 0.30);
}
/* --- SNI tray (center widget, not part of the rotation) --- */

View File

@@ -1,5 +1,69 @@
{
"nodes": {
"dbus-hslogger": {
"flake": false,
"locked": {
"lastModified": 1770613712,
"narHash": "sha256-Az7USYfzylaIduPoOzxaz+6Evpn+TvVcThbPpWORt8k=",
"owner": "IvanMalison",
"repo": "dbus-hslogger",
"rev": "56195c6e46e04e2454fa0fa643e06eb7ef2a0952",
"type": "github"
},
"original": {
"owner": "IvanMalison",
"repo": "dbus-hslogger",
"type": "github"
}
},
"dbus-hslogger_2": {
"flake": false,
"locked": {
"lastModified": 1770613712,
"narHash": "sha256-Az7USYfzylaIduPoOzxaz+6Evpn+TvVcThbPpWORt8k=",
"owner": "taffybar",
"repo": "dbus-hslogger",
"rev": "56195c6e46e04e2454fa0fa643e06eb7ef2a0952",
"type": "github"
},
"original": {
"owner": "taffybar",
"repo": "dbus-hslogger",
"type": "github"
}
},
"dbus-menu": {
"flake": false,
"locked": {
"lastModified": 1770753441,
"narHash": "sha256-ycJexWPCSlLriDAouT3PvRnbwByeGF6bsQrvWcY1eGU=",
"owner": "taffybar",
"repo": "dbus-menu",
"rev": "83f914ab70485331f4e45945251557e5c7ea50fa",
"type": "github"
},
"original": {
"owner": "taffybar",
"repo": "dbus-menu",
"type": "github"
}
},
"dbus-menu_2": {
"flake": false,
"locked": {
"lastModified": 1770753441,
"narHash": "sha256-ycJexWPCSlLriDAouT3PvRnbwByeGF6bsQrvWcY1eGU=",
"owner": "taffybar",
"repo": "dbus-menu",
"rev": "83f914ab70485331f4e45945251557e5c7ea50fa",
"type": "github"
},
"original": {
"owner": "taffybar",
"repo": "dbus-menu",
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
@@ -115,11 +179,11 @@
"gtk-sni-tray": {
"flake": false,
"locked": {
"lastModified": 1770581933,
"narHash": "sha256-sLA+v5KpHWSrjXu3Gnt1A/+F3+4FojWGeTPN5JJxWDw=",
"lastModified": 1770754698,
"narHash": "sha256-W5xZaZMeK5nLwrXvgh35Ko143qteLCTpCq4WwW93zcM=",
"owner": "taffybar",
"repo": "gtk-sni-tray",
"rev": "28eadf97977197bf5bd97855b9991034e9a71322",
"rev": "f016f19fd64c1d2c4228d64c9897cd8f45272b8a",
"type": "github"
},
"original": {
@@ -228,6 +292,8 @@
},
"root": {
"inputs": {
"dbus-hslogger": "dbus-hslogger",
"dbus-menu": "dbus-menu",
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs",
"taffybar": "taffybar",
@@ -297,6 +363,8 @@
},
"taffybar": {
"inputs": {
"dbus-hslogger": "dbus-hslogger_2",
"dbus-menu": "dbus-menu_2",
"flake-utils": "flake-utils_2",
"gtk-sni-tray": "gtk-sni-tray",
"gtk-strut": "gtk-strut",
@@ -311,8 +379,8 @@
"xmonad-contrib": "xmonad-contrib"
},
"locked": {
"lastModified": 1770607443,
"narHash": "sha256-m4LK21y6KcOQIsGUWbZtK9SItLD7ljBR73CHSV6OSqs=",
"lastModified": 1770755513,
"narHash": "sha256-tlwUJhim0PEnNotIpCA45oz37wSAWY3f9gUnvaQtjzw=",
"path": "/home/imalison/dotfiles/dotfiles/config/taffybar/taffybar",
"type": "path"
},

View File

@@ -3,16 +3,36 @@
flake-utils.url = "github:numtide/flake-utils";
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
xmonad.url = "github:xmonad/xmonad/master";
# Needed by gtk-sni-tray, but not (currently) provided by nixpkgs' haskellPackages.
dbus-menu = {
url = "github:taffybar/dbus-menu";
flake = false;
};
# nixpkgs' dbus-hslogger is currently too old for taffybar.
dbus-hslogger = {
url = "github:IvanMalison/dbus-hslogger";
flake = false;
};
taffybar = {
url = "path:/home/imalison/dotfiles/dotfiles/config/taffybar/taffybar";
inputs.nixpkgs.follows = "nixpkgs";
inputs.xmonad.follows = "xmonad";
};
};
outputs = { self, flake-utils, taffybar, nixpkgs, xmonad }:
outputs = { self, flake-utils, taffybar, nixpkgs, xmonad, dbus-menu, dbus-hslogger }:
let
hoverlay = final: prev: hself: hsuper:
{
dbus-menu =
hself.callCabal2nix "dbus-menu"
(final.lib.cleanSource dbus-menu)
{ inherit (final) gtk3; };
dbus-hslogger =
hself.callCabal2nix "dbus-hslogger"
(final.lib.cleanSource dbus-hslogger)
{ };
taffybar = prev.haskell.lib.overrideCabal hsuper.taffybar (oa: {
doHaddock = false;
doCheck = false;

View File

@@ -69,25 +69,6 @@
opacity: 1;
}
/* Make each widget's squircle background feel "solid": avoid child widgets
painting their own backgrounds on top of `.outer-pad`.
*
* We intentionally avoid broad descendant selectors (especially `*`) here
* because SNI menus inherit style context via their attach-widget chain and
* those selectors can leak into menu windows, making them transparent.
*/
.outer-pad label,
.outer-pad image,
.outer-pad button,
.inner-pad label,
.inner-pad image,
.inner-pad button,
.contents label,
.contents image,
.contents button {
background-color: transparent;
}
/* Per-widget color overrides now live in end-widget-colors.css,
which rotates through a 5-color palette via :nth-child(). */
@@ -288,3 +269,9 @@
.mpris label {
color: @font-muted;
}
/* ASUS platform profile widget */
.asus-profile { }
.asus-profile.quiet { color: @end-color-4-fg; }
.asus-profile.balanced { color: @end-color-1-fg; }
.asus-profile.performance { color: @end-color-5-fg; }

View File

@@ -29,6 +29,7 @@ import System.Taffybar.Widget
import qualified System.Taffybar.Widget.HyprlandWorkspaces as Hyprland
import qualified System.Taffybar.Widget.NetworkManager as NetworkManager
import System.Taffybar.Widget.SNIMenu (withNmAppletMenu)
import qualified System.Taffybar.Widget.ASUS as ASUS
import qualified System.Taffybar.Widget.PulseAudio as PulseAudio
import qualified System.Taffybar.Widget.ScreenLock as ScreenLock
import qualified System.Taffybar.Widget.Wlsunset as Wlsunset
@@ -324,6 +325,10 @@ diskUsageWidget :: TaffyIO Gtk.Widget
diskUsageWidget =
decorateWithClassAndBoxM "disk-usage" diskUsageNew
asusWidget :: TaffyIO Gtk.Widget
asusWidget =
decorateWithClassAndBoxM "asus-profile" ASUS.asusWidgetNew
screenLockWidget :: TaffyIO Gtk.Widget
screenLockWidget =
decorateWithClassAndBoxM "screen-lock" ScreenLock.screenLockNew
@@ -353,6 +358,7 @@ endWidgetsForHost hostName backend =
baseEndWidgets = [clockWidget, audioWidget, diskUsageWidget, networkWidget, screenLockWidget, wlsunsetWidget, mprisWidget]
laptopEndWidgets =
[ batteryWidget
, asusWidget
, clockWidget
, audioWidget
, diskUsageWidget