diff options
author | Freya Murphy <freya@freyacat.org> | 2025-06-27 16:39:14 -0400 |
---|---|---|
committer | Freya Murphy <freya@freyacat.org> | 2025-06-27 16:39:14 -0400 |
commit | 2e4c4298cf84f94d68387e8076fd430e9968ce6c (patch) | |
tree | 2a43fa6d4659fe2585c75aeec3ee4d5e0a42de2e /modules/apps/waybar | |
parent | fmt (diff) | |
download | dotfiles-nix-2e4c4298cf84f94d68387e8076fd430e9968ce6c.tar.gz dotfiles-nix-2e4c4298cf84f94d68387e8076fd430e9968ce6c.tar.bz2 dotfiles-nix-2e4c4298cf84f94d68387e8076fd430e9968ce6c.zip |
refactor
Diffstat (limited to 'modules/apps/waybar')
-rw-r--r-- | modules/apps/waybar/default.nix | 87 | ||||
-rw-r--r-- | modules/apps/waybar/style.nix | 107 |
2 files changed, 194 insertions, 0 deletions
diff --git a/modules/apps/waybar/default.nix b/modules/apps/waybar/default.nix new file mode 100644 index 0000000..ecbbcd4 --- /dev/null +++ b/modules/apps/waybar/default.nix @@ -0,0 +1,87 @@ +{ + config, + lib, + ... +}: let + inherit (lib) mkIf; + cfg = config.apps; +in { + config = mkIf cfg.waybar { + home-manager.users.${config.user} = { + programs.waybar = { + enable = false; # using astal now + + settings = [ + { + height = 24; + layer = "top"; + position = "top"; + spacing = 4; + + modules-left = [ + "hyprland/workspaces" + ]; + modules-center = [ + "clock" + ]; + modules-right = [ + "battery" + "wireplumber" + "network" + "tray" + ]; + + "hyprland/workspaces" = { + disable-scroll = true; + all-outputs = true; + format = "{name}"; + }; + + battery = { + interval = 1; + states = { + warning = 30; + critical = 15; + }; + format = " {capacity}%"; + format-charging = " {capacity}%"; + format-plugged = " {capacity}%"; + format-full = " {capacity}%"; + format-warning = " {capacity}%"; + format-critical = " {capacity}%"; + }; + + wireplumber = { + format = " {volume}%"; + format-bluetooth = " {volume}%"; + format-muted = " muted"; + scroll-step = 1; + on-click = "pavucontrol"; + ignored-sinks = ["Easy Effects Sink"]; + }; + + network = { + format = " disconnected"; + format-wifi = " {essid}"; + format-ethernet = " {ipaddr}/{cidr}"; + format-disconnected = " disconnected"; + max-length = 50; + on-click = "nm-connection-editor"; + }; + + clock = { + interval = 1; + format = "{:%Y-%m-%d %a %H:%M:%S}"; + }; + + tray = { + spacing = config.theme.outerGap; + }; + } + ]; + + style = import ./style.nix {theme = config.theme;}; + }; + }; + }; +} diff --git a/modules/apps/waybar/style.nix b/modules/apps/waybar/style.nix new file mode 100644 index 0000000..21a8de5 --- /dev/null +++ b/modules/apps/waybar/style.nix @@ -0,0 +1,107 @@ +{theme}: let + text = "#${theme.colors.text}"; + base = "#${theme.colors.base}"; + surface = "#${theme.colors.surface}"; + primary = "#${theme.colors.primary}"; + success = "#${theme.colors.success}"; + warning = "#${theme.colors.warning}"; + error = "#${theme.colors.error}"; + fontSize = "${toString theme.font.size}px"; + outerGap = "${toString theme.outerGap}px"; + innerGap = "${toString theme.innerGap}px"; + outerRadius = "${toString theme.outerRadius}px"; + innerRadius = "${toString theme.innerRadius}px"; + borderWidth = "${toString theme.borderWidth}px"; +in '' + /** Base */ + + * { + all: unset; + } + + window#waybar { + font-family: "${theme.font.regular}", "${theme.font.icon}", "${theme.font.monospace}"; + font-size: ${fontSize}; + color: ${text}; + background-color: ${base}; + } + + /** Workspaces */ + + #workspaces { + margin-left: ${outerGap}; + } + + #workspaces button { + border-radius: ${innerRadius}; + margin: 4px 2px; + padding: 0px 7px; + background: ${surface}; + color: ${text}; + } + + #workspaces button.focused, + #workspaces button.active { + background: ${primary}; + color: ${base}; + } + + #workspaces button.urgent { + background: ${error}; + } + + /** Tray */ + + #tray { + border: none; + margin-right: ${outerGap}; + } + + #tray > .passive { + -gtk-icon-effect: dim; + } + + #tray > .needs-attention { + -gtk-icon-effect: highlight; + } + + /** Right modules */ + + #battery, + #wireplumber, + #network { + padding: 0 ${outerGap}; + } + + /** Battery */ + + #battery.charging { + color: ${success}; + } + + #battery.warning:not(.charging) { + color: ${warning}; + } + + #battery.critical:not(.charging) { + color: ${error}; + } + + /** Wireplumber */ + + #wireplumber.muted { + color: ${error}; + } + + /** Network */ + + #network.wifi, + #network.ethernet { + color: ${success}; + } + + #network.disconnected { + color: ${error}; + } + +'' |