about summary refs log tree commit diff
path: root/home/profiles/waybar.nix
diff options
context:
space:
mode:
authorFranck Cuny <franck@fcuny.net>2023-05-05 19:41:58 -0700
committerFranck Cuny <franck@fcuny.net>2023-05-05 19:41:58 -0700
commit43da9edb4598eef509c481ae0b305384418c45de (patch)
treea0ad614c90102757143e026e4fe1806431a3dbf4 /home/profiles/waybar.nix
parentprofiles/default: users are immutable (diff)
downloadworld-43da9edb4598eef509c481ae0b305384418c45de.tar.gz
home/profiles: move (almost) all modules to profiles
This is a major refactor, similar to what was done for the hosts, but in
a single commit.
Diffstat (limited to 'home/profiles/waybar.nix')
-rw-r--r--home/profiles/waybar.nix155
1 files changed, 155 insertions, 0 deletions
diff --git a/home/profiles/waybar.nix b/home/profiles/waybar.nix
new file mode 100644
index 0000000..e6f6c3d
--- /dev/null
+++ b/home/profiles/waybar.nix
@@ -0,0 +1,155 @@
+{ config, lib, pkgs, ... }:
+let
+  # waybar-systemd = pkgs.writeShellApplication {
+  #   name = "waybar-systemd.sh";
+  #   runtimeInputs = [ ];
+  #   text = ''
+  #     failed_user="$(systemctl --plain --no-legend --user list-units --state=failed | awk '{ print $1 }')"
+  #     failed_system="$(systemctl --plain --no-legend list-units --state=failed | awk '{ print $1 }')"
+
+  #     failed_systemd_count="$(echo -n "$failed_system" | grep -c '^')"
+  #     failed_user_count="$(echo -n "$failed_user" | grep -c '^')"
+
+  #     text=$(( failed_systemd_count + failed_user_count ))
+
+  #     if [ "$text" -eq 0 ]; then
+  #         printf '{"text": ""}\n'
+  #     else
+  #         tooltip=""
+
+  #         [ -n "$failed_system" ] && tooltip="Failed system services:\n\n${failed_system}\n\n${tooltip}"
+  #         [ -n "$failed_user" ]   && tooltip="Failed user services:\n\n${failed_user}\n\n${tooltip}"
+
+  #         tooltip="$(printf  "%s" "$tooltip" | perl -pe 's/\n/\\n/g' | perl -pe 's/(?:\\n)+$//')"
+
+  #         printf '{"text": "%s", "tooltip": "%s" }\n' "$text" "$tooltip"
+  #     fi
+  #   '';
+  # };
+in
+{
+  programs.waybar = {
+    enable = true;
+    systemd.enable = true;
+
+    settings = [{
+      layer = "bottom";
+      height = 25;
+      position = "top";
+      margin-top = 0;
+      margin-left = 0;
+      margin-right = 0;
+      margin-bottom = 0;
+      modules-left = [ "sway/workspaces" "sway/mode" ];
+      modules-right = [ "pulseaudio" "network" "battery" "clock" "tray" ];
+      "sway/workspaces" = {
+        format = "{name}";
+        disable-scroll = true;
+      };
+      "sway/mode" = { format = "{}"; };
+      tray = { spacing = 10; };
+      clock = { format = "{: %a %b %d %R}"; };
+      battery = {
+        states = {
+          warning = 30;
+          critical = 15;
+        };
+        format = "ac:{capacity}%";
+        tooltip = true;
+        tooltip-format = "{timeTo} ({capacity}%)";
+      };
+      # "custom/systemd" = {
+      #   exec = "${waybarSystemd}/bin/waybar-systemd";
+      #   return-type = "json";
+      #   interval = 10;
+      # };
+      pulseaudio = {
+        format = "vol:{volume}%";
+        format-bluetooth = "bt:{volume}%";
+        format-bluetooth-muted = "bt:{volume}%";
+        format-muted = "vol:{volume}%";
+        on-click = "pavucontrol";
+      };
+      "network" = {
+        format-wifi = "{essid}:{signalStrength}%";
+        format-ethernet = "{ipaddr}/{cidr}";
+        format-linked = "{ifname} (No IP)";
+        format-disconnected = "network unavailable";
+        format-alt = "{ifname}: {ipaddr}/{cidr}";
+        tooltip = false;
+      };
+    }];
+  };
+
+  programs.waybar.style = pkgs.writeText "style.css" ''
+    * {
+      border-radius: 0;
+      border: none;
+      margin: 0;
+      min-height: 0;
+      padding: 0;
+      font-family: Source Code Pro;
+      font-size: 15px;
+    }
+    window#waybar {
+      background-color: #282A36;
+      color: #eee;
+    }
+    #workspaces button {
+      padding: 0 3px;
+      background-color: transparent;
+      color: #eee;
+    }
+    #workspaces button.focused {
+      background-color: #285577;
+      border: 1px solid #4c7899;
+    }
+    #clock,
+    #battery,
+    #network,
+    #pulseaudio,
+    #tray,
+    #mode {
+      padding-left: 10px;
+      padding-right: 10px;
+    }
+    #mode {
+      /* No styles */
+    }
+    #tray {
+      /* No styles */
+    }
+    #clock {
+      /* No styles */
+    }
+    #battery {
+      animation-timing-function: linear;
+      animation-iteration-count: infinite;
+      animation-direction: alternate;
+    }
+    #battery.discharging {
+      color: #90a1ad;
+    }
+    #battery.charging {
+      color: #fffff8;
+    }
+    #battery.warning {
+      border-bottom: 2px solid #ff9e21;
+    }
+    #battery.critical {
+      border-bottom: 2px solid #ff3121;
+    }
+    #network {
+      /* No styles */
+    }
+    #network.disconnected {
+      color: orange;
+    }
+    #pulseaudio {
+      /* No styles */
+    }
+    #pulseaudio.muted {
+      color: #90a1ad;
+    }
+  '';
+}