diff --git a/dotfiles/config/taffybar/end-widget-colors.css b/dotfiles/config/taffybar/end-widget-colors.css index 88d42520..25e826a9 100644 --- a/dotfiles/config/taffybar/end-widget-colors.css +++ b/dotfiles/config/taffybar/end-widget-colors.css @@ -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) --- */ diff --git a/dotfiles/config/taffybar/flake.lock b/dotfiles/config/taffybar/flake.lock index d5763b1c..b5fa4fc4 100644 --- a/dotfiles/config/taffybar/flake.lock +++ b/dotfiles/config/taffybar/flake.lock @@ -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" }, diff --git a/dotfiles/config/taffybar/flake.nix b/dotfiles/config/taffybar/flake.nix index 78844763..95e35156 100644 --- a/dotfiles/config/taffybar/flake.nix +++ b/dotfiles/config/taffybar/flake.nix @@ -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; diff --git a/dotfiles/config/taffybar/taffybar b/dotfiles/config/taffybar/taffybar index 6ed126fe..fd7ef196 160000 --- a/dotfiles/config/taffybar/taffybar +++ b/dotfiles/config/taffybar/taffybar @@ -1 +1 @@ -Subproject commit 6ed126fe6e26365393df42de2c659bb40ef34475 +Subproject commit fd7ef196d086958b3ef9fff144ca625d0bfc4ec5 diff --git a/dotfiles/config/taffybar/taffybar.css b/dotfiles/config/taffybar/taffybar.css index 7c98db9b..8c56a5cd 100644 --- a/dotfiles/config/taffybar/taffybar.css +++ b/dotfiles/config/taffybar/taffybar.css @@ -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; } diff --git a/dotfiles/config/taffybar/taffybar.hs b/dotfiles/config/taffybar/taffybar.hs index 773d98b0..f111837e 100644 --- a/dotfiles/config/taffybar/taffybar.hs +++ b/dotfiles/config/taffybar/taffybar.hs @@ -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