256 lines
		
	
	
	
		
			7.4 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			256 lines
		
	
	
	
		
			7.4 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{
 | 
						|
  config,
 | 
						|
  osConfig,
 | 
						|
  pkgs,
 | 
						|
  lib,
 | 
						|
  ...
 | 
						|
}:
 | 
						|
let
 | 
						|
  inherit (config.my)
 | 
						|
    theme
 | 
						|
    accent
 | 
						|
    font
 | 
						|
    ;
 | 
						|
  inherit (theme) color;
 | 
						|
 | 
						|
  cfg = config.my.waybar;
 | 
						|
in
 | 
						|
{
 | 
						|
  options.my.waybar.enable = lib.mkEnableOption { };
 | 
						|
 | 
						|
  config = lib.mkIf cfg.enable {
 | 
						|
    programs.waybar = {
 | 
						|
      enable = true;
 | 
						|
      systemd.enable = true;
 | 
						|
      systemd.target = "sway-session.target";
 | 
						|
      settings = [
 | 
						|
        {
 | 
						|
          layer = "top";
 | 
						|
          modules-left = [
 | 
						|
            "sway/workspaces"
 | 
						|
            "sway/mode"
 | 
						|
            "sway/window"
 | 
						|
          ];
 | 
						|
          modules-center = [ "clock" ];
 | 
						|
          modules-right = lib.flatten [
 | 
						|
            "sway/language"
 | 
						|
            "mpd"
 | 
						|
            "custom/playerctl"
 | 
						|
            "tray"
 | 
						|
            "custom/controller-battery"
 | 
						|
            "custom/mouse-battery"
 | 
						|
            "custom/caffeine"
 | 
						|
            "pulseaudio"
 | 
						|
            (lib.optional (osConfig.services.vpn.enable or false) "custom/vpn")
 | 
						|
            "network"
 | 
						|
            "battery"
 | 
						|
          ];
 | 
						|
          battery = {
 | 
						|
            tooltip = true;
 | 
						|
            states = {
 | 
						|
              full = 100;
 | 
						|
              good = 95;
 | 
						|
              warning = 25;
 | 
						|
            };
 | 
						|
            format = "{icon} ";
 | 
						|
            format-charging = "";
 | 
						|
            format-plugged = "";
 | 
						|
            format-full = "";
 | 
						|
            format-warning = "{icon}  {time}";
 | 
						|
            format-icons = [
 | 
						|
              ""
 | 
						|
              ""
 | 
						|
              ""
 | 
						|
              ""
 | 
						|
              ""
 | 
						|
              ""
 | 
						|
            ];
 | 
						|
          };
 | 
						|
          network = {
 | 
						|
            interval = 5;
 | 
						|
            tooltip = false;
 | 
						|
            on-click = "terminal -e iwd";
 | 
						|
            format-wifi = "{icon}";
 | 
						|
            format-icons = [
 | 
						|
              ""
 | 
						|
              ""
 | 
						|
              ""
 | 
						|
              ""
 | 
						|
              ""
 | 
						|
            ];
 | 
						|
            format-ethernet = "";
 | 
						|
            format-linked = "";
 | 
						|
            format-disconnected = "";
 | 
						|
          };
 | 
						|
          "sway/workspaces" = {
 | 
						|
            enable-bar-scroll = true;
 | 
						|
            format = "{icon}";
 | 
						|
            format-icons = {
 | 
						|
              "1" = "";
 | 
						|
              "2" = "";
 | 
						|
              "3" = "";
 | 
						|
              "4" = "";
 | 
						|
              "5" = "";
 | 
						|
              "6" = "";
 | 
						|
              "7" = "";
 | 
						|
              "8" = "";
 | 
						|
              "9" = "";
 | 
						|
              "10" = "";
 | 
						|
              urgent = "";
 | 
						|
              # focused = "";
 | 
						|
              default = "";
 | 
						|
            };
 | 
						|
          };
 | 
						|
          "sway/window" = {
 | 
						|
            max-length = 40;
 | 
						|
          };
 | 
						|
          "tray" = {
 | 
						|
            "spacing" = 7;
 | 
						|
            "icon-size" = 19;
 | 
						|
          };
 | 
						|
          clock = {
 | 
						|
            interval = 60;
 | 
						|
            format = "<b>{:L%H:%M %a %d/%m}</b>";
 | 
						|
            tooltip-format = "<tt><small>{calendar}</small></tt>";
 | 
						|
            calendar = {
 | 
						|
              mode = "year";
 | 
						|
              mode-mon-col = 3;
 | 
						|
              weeks-pos = "right";
 | 
						|
              on-scroll = 1;
 | 
						|
              on-click-right = "mode";
 | 
						|
              format = {
 | 
						|
                months = "<span color='${color.normal.magenta}'><b>{}</b></span>";
 | 
						|
                days = "<span color='${color.txt}'><b>{}</b></span>";
 | 
						|
                weeks = "<span color='${color.normal.cyan}'><b>W{}</b></span>";
 | 
						|
                weekdays = "<span color='${color.normal.yellow}'><b>{}</b></span>";
 | 
						|
                today = "<span color='${accent.color}'><b><u>{}</u></b></span>";
 | 
						|
              };
 | 
						|
            };
 | 
						|
            actions = {
 | 
						|
              on-click-right = "mode";
 | 
						|
              on-click-forward = "tz_up";
 | 
						|
              on-click-backward = "tz_down";
 | 
						|
              on-scroll-up = "shift_up";
 | 
						|
              on-scroll-down = "shift_down";
 | 
						|
            };
 | 
						|
          };
 | 
						|
          mpd =
 | 
						|
            let
 | 
						|
              mpc = "${pkgs.mpc-cli}/bin/mpc";
 | 
						|
            in
 | 
						|
            {
 | 
						|
              format = "{stateIcon} {title} - {artist}";
 | 
						|
              format-paused = "{stateIcon}";
 | 
						|
              format-stopped = "";
 | 
						|
              state-icons = {
 | 
						|
                paused = "";
 | 
						|
                playing = "";
 | 
						|
              };
 | 
						|
              tooltip = false;
 | 
						|
              on-click = "${mpc} toggle";
 | 
						|
              on-scroll-up = "${mpc} vol +10";
 | 
						|
              on-scroll-down = "${mpc} vol -10";
 | 
						|
            };
 | 
						|
          "custom/playerctl" = {
 | 
						|
            format = "{} ";
 | 
						|
            exec = "${pkgs.playerctl-status}/bin/playerctl-status";
 | 
						|
            on-click = "${pkgs.playerctl}/bin/playerctl --ignore-player=mpd play-pause";
 | 
						|
            interval = 1;
 | 
						|
            tooltip = false;
 | 
						|
          };
 | 
						|
          "sway/language" = {
 | 
						|
            format = "{short} {variant}";
 | 
						|
          };
 | 
						|
          "custom/controller-battery" = {
 | 
						|
            format = "{}";
 | 
						|
            exec = lib.getExe pkgs.controller-battery;
 | 
						|
            interval = 1;
 | 
						|
          };
 | 
						|
          "custom/mouse-battery" = {
 | 
						|
            format = "{}";
 | 
						|
            exec = lib.getExe pkgs.mouse-battery;
 | 
						|
            interval = 1;
 | 
						|
          };
 | 
						|
          "custom/caffeine" = {
 | 
						|
            format = "{}";
 | 
						|
            exec = "pgrep caffeinated > /dev/null && echo '' || echo '' ";
 | 
						|
            on-click = "pkill caffeinated || exec caffeinated";
 | 
						|
            interval = 1;
 | 
						|
            tooltip = false;
 | 
						|
          };
 | 
						|
          "custom/vpn" = lib.mkIf (osConfig.services.vpn.enable or false) {
 | 
						|
            format = "{}";
 | 
						|
            exec = ''
 | 
						|
              ${pkgs.mullvad}/bin/mullvad status | ${pkgs.gnugrep}/bin/grep "^Connected" > /dev/null \
 | 
						|
                && echo "" \
 | 
						|
                || echo ""
 | 
						|
            '';
 | 
						|
            on-click = "mullvad connect";
 | 
						|
            on-click-right = "mullvad disconnect";
 | 
						|
            interval = 1;
 | 
						|
            tooltip = false;
 | 
						|
          };
 | 
						|
          pulseaudio = {
 | 
						|
            interval = 5;
 | 
						|
            tooltip = false;
 | 
						|
            scroll-step = 10;
 | 
						|
            format = "{icon}";
 | 
						|
            format-bluetooth = "";
 | 
						|
            format-bluetooth-muted = "";
 | 
						|
            format-muted = "";
 | 
						|
            format-icons = {
 | 
						|
              "rtp-sink" = [
 | 
						|
                ""
 | 
						|
                ""
 | 
						|
                ""
 | 
						|
              ];
 | 
						|
              "alsa_output.usb-C-Media_Electronics_Inc._USB_Audio_Device-00.analog-stereo" = [
 | 
						|
                " "
 | 
						|
                " "
 | 
						|
                " "
 | 
						|
              ];
 | 
						|
              "alsa_output.pci-0000_09_00.4.analog-stereo" = [
 | 
						|
                " "
 | 
						|
                " "
 | 
						|
                " "
 | 
						|
              ];
 | 
						|
              headphone = [
 | 
						|
                " "
 | 
						|
                " "
 | 
						|
                " "
 | 
						|
              ];
 | 
						|
              handsfree = "";
 | 
						|
              headset = "";
 | 
						|
              phone = "";
 | 
						|
              portable = "";
 | 
						|
              car = "";
 | 
						|
              default = [
 | 
						|
                ""
 | 
						|
                ""
 | 
						|
                ""
 | 
						|
              ];
 | 
						|
            };
 | 
						|
            on-click = "pavucontrol";
 | 
						|
            on-click-right = "${pkgs.pulse_sink}/bin/pulse_sink";
 | 
						|
            on-scroll-up = "${pkgs.volumesh}/bin/volumesh -i 10";
 | 
						|
            on-scroll-down = "${pkgs.volumesh}/bin/volumesh -d 10";
 | 
						|
          };
 | 
						|
        }
 | 
						|
      ];
 | 
						|
      style = pkgs.replaceVars ./style.css {
 | 
						|
        accent_color = accent.color;
 | 
						|
 | 
						|
        color_bg = color.bg;
 | 
						|
        color_bg_dark = color.bg_dark;
 | 
						|
        color_bg_light = color.bg_light;
 | 
						|
        color_txt = color.txt;
 | 
						|
 | 
						|
        font_interface = font.interface;
 | 
						|
 | 
						|
        font_size_big = "${toString font.size.big}px";
 | 
						|
        font_size_medium = "${toString font.size.medium}px";
 | 
						|
      };
 | 
						|
    };
 | 
						|
    home.packages = with pkgs; [ waybar ];
 | 
						|
  };
 | 
						|
}
 |