summaryrefslogtreecommitdiff
path: root/home/apps/waybar
diff options
context:
space:
mode:
Diffstat (limited to 'home/apps/waybar')
-rw-r--r--home/apps/waybar/default.nix85
-rw-r--r--home/apps/waybar/style.nix107
2 files changed, 192 insertions, 0 deletions
diff --git a/home/apps/waybar/default.nix b/home/apps/waybar/default.nix
new file mode 100644
index 0000000..25acb8f
--- /dev/null
+++ b/home/apps/waybar/default.nix
@@ -0,0 +1,85 @@
+{
+ config,
+ lib,
+ ...
+}: let
+ inherit (lib) mkIf;
+ cfg = config.apps.waybar;
+in {
+ config = mkIf cfg.enable {
+ programs.waybar = {
+ enable = true;
+
+ 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/home/apps/waybar/style.nix b/home/apps/waybar/style.nix
new file mode 100644
index 0000000..21a8de5
--- /dev/null
+++ b/home/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};
+ }
+
+''