Converted waybar to a home module
This commit is contained in:
		
							parent
							
								
									013c907a95
								
							
						
					
					
						commit
						8b6e8fb936
					
				
					 5 changed files with 173 additions and 177 deletions
				
			
		
							
								
								
									
										171
									
								
								modules/home/programs/waybar/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										171
									
								
								modules/home/programs/waybar/default.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,171 @@
 | 
			
		|||
{
 | 
			
		||||
  pkgs,
 | 
			
		||||
  config,
 | 
			
		||||
  lib,
 | 
			
		||||
  namespace,
 | 
			
		||||
  ...
 | 
			
		||||
}: let
 | 
			
		||||
  inherit (lib) mkIf mkEnableOption mkOption types;
 | 
			
		||||
 | 
			
		||||
  cfg = config.${namespace}.programs.waybar;
 | 
			
		||||
in {
 | 
			
		||||
  options.aa.programs.waybar = {
 | 
			
		||||
    enable = mkEnableOption "waybar";
 | 
			
		||||
 | 
			
		||||
    thermal-zone = mkOption {
 | 
			
		||||
      type = types.int;
 | 
			
		||||
      default = 0;
 | 
			
		||||
      description = "The thermal zone, as in `/sys/class/thermal/`.";
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  config = mkIf cfg.enable {
 | 
			
		||||
    programs.waybar = {
 | 
			
		||||
      enable = true;
 | 
			
		||||
      systemd.enable = true;
 | 
			
		||||
 | 
			
		||||
      style = builtins.readFile ./waybar_style.css;
 | 
			
		||||
 | 
			
		||||
      settings = [
 | 
			
		||||
        {
 | 
			
		||||
          layer = "top";
 | 
			
		||||
          position = "bottom";
 | 
			
		||||
          height = 20;
 | 
			
		||||
          modules-left = ["sway/workspaces"];
 | 
			
		||||
          modules-center = ["clock"];
 | 
			
		||||
          modules-right = [
 | 
			
		||||
            "idle_inhibitor"
 | 
			
		||||
            "temperature"
 | 
			
		||||
            "cpu"
 | 
			
		||||
            "pulseaudio"
 | 
			
		||||
            "battery"
 | 
			
		||||
            "memory"
 | 
			
		||||
            "backlight"
 | 
			
		||||
            "network"
 | 
			
		||||
            "custom/notification"
 | 
			
		||||
            "tray"
 | 
			
		||||
          ];
 | 
			
		||||
 | 
			
		||||
          "sway/workspaces" = {
 | 
			
		||||
            disable-scroll = false;
 | 
			
		||||
            all-outputs = true;
 | 
			
		||||
            format = "{icon}";
 | 
			
		||||
            format-icons = {
 | 
			
		||||
              "1" = "q";
 | 
			
		||||
              "2" = "w";
 | 
			
		||||
              "3" = "e";
 | 
			
		||||
              "4" = "r";
 | 
			
		||||
              "5" = "t";
 | 
			
		||||
              "6" = "y";
 | 
			
		||||
              "7" = "u";
 | 
			
		||||
              "8" = "i";
 | 
			
		||||
              "9" = "o";
 | 
			
		||||
            };
 | 
			
		||||
          };
 | 
			
		||||
 | 
			
		||||
          idle_inhibitor = {
 | 
			
		||||
            format = "{icon}";
 | 
			
		||||
            format-icons = {
 | 
			
		||||
              activated = " ";
 | 
			
		||||
              deactivated = " ";
 | 
			
		||||
            };
 | 
			
		||||
          };
 | 
			
		||||
 | 
			
		||||
          temperature = {
 | 
			
		||||
            critical-threshold = 80;
 | 
			
		||||
            format = "{icon}{temperatureC}°C";
 | 
			
		||||
            format-icons = [" " " " " "];
 | 
			
		||||
            thermal-zone = cfg.thermal-zone;
 | 
			
		||||
          };
 | 
			
		||||
 | 
			
		||||
          cpu = {
 | 
			
		||||
            format = "  {usage}%";
 | 
			
		||||
            tooltip = false;
 | 
			
		||||
          };
 | 
			
		||||
 | 
			
		||||
          pulseaudio = {
 | 
			
		||||
            format = "{icon} {volume}% {format_source}";
 | 
			
		||||
            format-bluetooth = "{icon} {volume}% {format_source}";
 | 
			
		||||
            format-bluetooth-muted = "   {volume}% {format_source}";
 | 
			
		||||
            format-muted = "  {format_source}";
 | 
			
		||||
            format-source = " ";
 | 
			
		||||
            format-source-muted = " ";
 | 
			
		||||
            format-icons = {
 | 
			
		||||
              headphone = " ";
 | 
			
		||||
              hands-free = " ";
 | 
			
		||||
              headset = " ";
 | 
			
		||||
              phone = " ";
 | 
			
		||||
              portable = " ";
 | 
			
		||||
              car = " ";
 | 
			
		||||
              default = [" " " " " "];
 | 
			
		||||
            };
 | 
			
		||||
            tooltip-format = "{desc}, {volume}%";
 | 
			
		||||
            # TODO: Figure out how to get pactl binary?
 | 
			
		||||
            on-click = "pactl set-sink-mute @DEFAULT_SINK@ toggle";
 | 
			
		||||
            on-click-right = "pactl set-source-mute @DEFAULT_SOURCE@ toggle";
 | 
			
		||||
            on-click-middle = "pavucontrol";
 | 
			
		||||
          };
 | 
			
		||||
 | 
			
		||||
          battery = {
 | 
			
		||||
            states = {
 | 
			
		||||
              warning = 30;
 | 
			
		||||
              critical = 1;
 | 
			
		||||
            };
 | 
			
		||||
            format = "{icon} {capacity}%";
 | 
			
		||||
            tooltip-format = "{timeTo}, {capacity}%";
 | 
			
		||||
            format-charging = " {capacity}%";
 | 
			
		||||
            format-plugged = " ";
 | 
			
		||||
            format-alt = "{time} {icon}";
 | 
			
		||||
            format-icons = [" " " " " " " " " "];
 | 
			
		||||
          };
 | 
			
		||||
 | 
			
		||||
          memory = {
 | 
			
		||||
            format = " {}%";
 | 
			
		||||
          };
 | 
			
		||||
 | 
			
		||||
          backlight = {
 | 
			
		||||
            format = "{icon} {percent}%";
 | 
			
		||||
            format-icons = ["`" ""];
 | 
			
		||||
            on-scroll-up = "light -A 1";
 | 
			
		||||
            on-scroll-down = "light -U 1";
 | 
			
		||||
          };
 | 
			
		||||
 | 
			
		||||
          network = {
 | 
			
		||||
            format-wifi = " ";
 | 
			
		||||
            format-ethernet = "{ifname}: {ipaddr}/{cidr}  ";
 | 
			
		||||
            format-linked = "{ifname} (No IP)  ";
 | 
			
		||||
            format-disconnected = "睊 ";
 | 
			
		||||
            format-alt = "{ifname}: {ipaddr}/{cidr}";
 | 
			
		||||
            tooltip-format = "{essid} {signalStrength}%";
 | 
			
		||||
          };
 | 
			
		||||
 | 
			
		||||
          "custom/notification" = mkIf config.${namespace}.services.swaync.enable {
 | 
			
		||||
            tooltip = false;
 | 
			
		||||
            format = "{icon} {}";
 | 
			
		||||
            format-icons = {
 | 
			
		||||
              notification = "<span foreground='red'><sup></sup></span>";
 | 
			
		||||
              none = "";
 | 
			
		||||
              dnd-notification = "<span foreground='red'><sup></sup></span>";
 | 
			
		||||
              dnd-none = "";
 | 
			
		||||
              inhibited-notification = "<span foreground='red'><sup></sup></span>";
 | 
			
		||||
              inhibited-none = "";
 | 
			
		||||
              dnd-inhibited-notification = "<span foreground='red'><sup></sup></span>";
 | 
			
		||||
              dnd-inhibited-none = "";
 | 
			
		||||
            };
 | 
			
		||||
            return-type = "json";
 | 
			
		||||
            exec = "${pkgs.swaynotificationcenter}/bin/swaync-client -swb";
 | 
			
		||||
            on-click = "${pkgs.swaynotificationcenter}/bin/swaync-client -t -sw";
 | 
			
		||||
            on-click-right = "${pkgs.swaynotificationcenter}/bin/swaync-client -d -sw";
 | 
			
		||||
            escape = true;
 | 
			
		||||
          };
 | 
			
		||||
 | 
			
		||||
          tray = {
 | 
			
		||||
            spacing = 10;
 | 
			
		||||
          };
 | 
			
		||||
        }
 | 
			
		||||
      ];
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    wayland.windowManager.sway.config.bars = [];
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,175 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
  pkgs,
 | 
			
		||||
  config,
 | 
			
		||||
  lib,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
with lib; let
 | 
			
		||||
  cfg = config.aa.desktop.addons.waybar;
 | 
			
		||||
in {
 | 
			
		||||
  options.aa.desktop.addons.waybar = with types; {
 | 
			
		||||
    enable = mkEnableOption "waybar";
 | 
			
		||||
 | 
			
		||||
    thermal-zone = mkOption {
 | 
			
		||||
      type = int;
 | 
			
		||||
      default = 0;
 | 
			
		||||
      description = "The thermal zone, as in `/sys/class/thermal/`.";
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  config = mkIf cfg.enable {
 | 
			
		||||
    aa.system.fonts.enable = true;
 | 
			
		||||
 | 
			
		||||
    aa.home = {
 | 
			
		||||
      extraOptions = {
 | 
			
		||||
        programs.waybar = {
 | 
			
		||||
          enable = true;
 | 
			
		||||
          systemd.enable = true;
 | 
			
		||||
 | 
			
		||||
          style = builtins.readFile ./waybar_style.css;
 | 
			
		||||
 | 
			
		||||
          settings = [
 | 
			
		||||
            {
 | 
			
		||||
              layer = "top";
 | 
			
		||||
              position = "bottom";
 | 
			
		||||
              height = 20;
 | 
			
		||||
              modules-left = ["sway/workspaces"];
 | 
			
		||||
              modules-center = ["clock"];
 | 
			
		||||
              modules-right = [
 | 
			
		||||
                "idle_inhibitor"
 | 
			
		||||
                "temperature"
 | 
			
		||||
                "cpu"
 | 
			
		||||
                "pulseaudio"
 | 
			
		||||
                "battery"
 | 
			
		||||
                "memory"
 | 
			
		||||
                "backlight"
 | 
			
		||||
                "network"
 | 
			
		||||
                "custom/notification"
 | 
			
		||||
                "tray"
 | 
			
		||||
              ];
 | 
			
		||||
 | 
			
		||||
              "sway/workspaces" = {
 | 
			
		||||
                disable-scroll = false;
 | 
			
		||||
                all-outputs = true;
 | 
			
		||||
                format = "{icon}";
 | 
			
		||||
                format-icons = {
 | 
			
		||||
                  "1" = "q";
 | 
			
		||||
                  "2" = "w";
 | 
			
		||||
                  "3" = "e";
 | 
			
		||||
                  "4" = "r";
 | 
			
		||||
                  "5" = "t";
 | 
			
		||||
                  "6" = "y";
 | 
			
		||||
                  "7" = "u";
 | 
			
		||||
                  "8" = "i";
 | 
			
		||||
                  "9" = "o";
 | 
			
		||||
                };
 | 
			
		||||
              };
 | 
			
		||||
 | 
			
		||||
              idle_inhibitor = {
 | 
			
		||||
                format = "{icon}";
 | 
			
		||||
                format-icons = {
 | 
			
		||||
                  activated = " ";
 | 
			
		||||
                  deactivated = " ";
 | 
			
		||||
                };
 | 
			
		||||
              };
 | 
			
		||||
 | 
			
		||||
              temperature = {
 | 
			
		||||
                critical-threshold = 80;
 | 
			
		||||
                format = "{icon}{temperatureC}°C";
 | 
			
		||||
                format-icons = [" " " " " "];
 | 
			
		||||
                thermal-zone = cfg.thermal-zone;
 | 
			
		||||
              };
 | 
			
		||||
 | 
			
		||||
              cpu = {
 | 
			
		||||
                format = "  {usage}%";
 | 
			
		||||
                tooltip = false;
 | 
			
		||||
              };
 | 
			
		||||
 | 
			
		||||
              pulseaudio = {
 | 
			
		||||
                format = "{icon} {volume}% {format_source}";
 | 
			
		||||
                format-bluetooth = "{icon} {volume}% {format_source}";
 | 
			
		||||
                format-bluetooth-muted = "   {volume}% {format_source}";
 | 
			
		||||
                format-muted = "  {format_source}";
 | 
			
		||||
                format-source = " ";
 | 
			
		||||
                format-source-muted = " ";
 | 
			
		||||
                format-icons = {
 | 
			
		||||
                  headphone = " ";
 | 
			
		||||
                  hands-free = " ";
 | 
			
		||||
                  headset = " ";
 | 
			
		||||
                  phone = " ";
 | 
			
		||||
                  portable = " ";
 | 
			
		||||
                  car = " ";
 | 
			
		||||
                  default = [" " " " " "];
 | 
			
		||||
                };
 | 
			
		||||
                tooltip-format = "{desc}, {volume}%";
 | 
			
		||||
                # TODO: Figure out how to get pactl binary?
 | 
			
		||||
                on-click = "pactl set-sink-mute @DEFAULT_SINK@ toggle";
 | 
			
		||||
                on-click-right = "pactl set-source-mute @DEFAULT_SOURCE@ toggle";
 | 
			
		||||
                on-click-middle = "pavucontrol";
 | 
			
		||||
              };
 | 
			
		||||
 | 
			
		||||
              battery = {
 | 
			
		||||
                states = {
 | 
			
		||||
                  warning = 30;
 | 
			
		||||
                  critical = 1;
 | 
			
		||||
                };
 | 
			
		||||
                format = "{icon} {capacity}%";
 | 
			
		||||
                tooltip-format = "{timeTo}, {capacity}%";
 | 
			
		||||
                format-charging = " {capacity}%";
 | 
			
		||||
                format-plugged = " ";
 | 
			
		||||
                format-alt = "{time} {icon}";
 | 
			
		||||
                format-icons = [" " " " " " " " " "];
 | 
			
		||||
              };
 | 
			
		||||
 | 
			
		||||
              memory = {
 | 
			
		||||
                format = " {}%";
 | 
			
		||||
              };
 | 
			
		||||
 | 
			
		||||
              backlight = {
 | 
			
		||||
                format = "{icon} {percent}%";
 | 
			
		||||
                format-icons = ["`" ""];
 | 
			
		||||
                on-scroll-up = "light -A 1";
 | 
			
		||||
                on-scroll-down = "light -U 1";
 | 
			
		||||
              };
 | 
			
		||||
 | 
			
		||||
              network = {
 | 
			
		||||
                format-wifi = " ";
 | 
			
		||||
                format-ethernet = "{ifname}: {ipaddr}/{cidr}  ";
 | 
			
		||||
                format-linked = "{ifname} (No IP)  ";
 | 
			
		||||
                format-disconnected = "睊 ";
 | 
			
		||||
                format-alt = "{ifname}: {ipaddr}/{cidr}";
 | 
			
		||||
                tooltip-format = "{essid} {signalStrength}%";
 | 
			
		||||
              };
 | 
			
		||||
 | 
			
		||||
              # "custom/notification" = mkIf config.aa.desktop.addons.swaync.enable {
 | 
			
		||||
              #   tooltip = false;
 | 
			
		||||
              #   format = "{icon} {}";
 | 
			
		||||
              #   format-icons = {
 | 
			
		||||
              #     notification = "<span foreground='red'><sup></sup></span>";
 | 
			
		||||
              #     none = "";
 | 
			
		||||
              #     dnd-notification = "<span foreground='red'><sup></sup></span>";
 | 
			
		||||
              #     dnd-none = "";
 | 
			
		||||
              #     inhibited-notification = "<span foreground='red'><sup></sup></span>";
 | 
			
		||||
              #     inhibited-none = "";
 | 
			
		||||
              #     dnd-inhibited-notification = "<span foreground='red'><sup></sup></span>";
 | 
			
		||||
              #     dnd-inhibited-none = "";
 | 
			
		||||
              #   };
 | 
			
		||||
              #   return-type = "json";
 | 
			
		||||
              #   exec = "${pkgs.swaynotificationcenter}/bin/swaync-client -swb";
 | 
			
		||||
              #   on-click = "${pkgs.swaynotificationcenter}/bin/swaync-client -t -sw";
 | 
			
		||||
              #   on-click-right = "${pkgs.swaynotificationcenter}/bin/swaync-client -d -sw";
 | 
			
		||||
              #   escape = true;
 | 
			
		||||
              # };
 | 
			
		||||
 | 
			
		||||
              tray = {
 | 
			
		||||
                spacing = 10;
 | 
			
		||||
              };
 | 
			
		||||
            }
 | 
			
		||||
          ];
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        wayland.windowManager.sway.config.bars = [];
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -42,7 +42,6 @@ in {
 | 
			
		|||
      rofi.enable = true;
 | 
			
		||||
      swayidle.enable = true;
 | 
			
		||||
      swaylock.enable = true;
 | 
			
		||||
      waybar.enable = true;
 | 
			
		||||
 | 
			
		||||
      # TODO
 | 
			
		||||
      # light
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,7 +17,8 @@
 | 
			
		|||
      workstation.enable = true;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    desktop.addons.waybar.thermal-zone = 1;
 | 
			
		||||
    # TODO: How to inform a home manager module about this?
 | 
			
		||||
    # desktop.addons.waybar.thermal-zone = 1;
 | 
			
		||||
 | 
			
		||||
    suites.gaming.enable = true;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue