{ lib, pkgs, user, rice, ... }:
let
  sep = " "; 
in
lib.mkIf (user != "tv")
{
  home.packages = 
  let
    waybar_mode_script = /*bash*/ ''
      print_help() {
          echo "Usage: waybar_mode {set <string>|unset}"
      }
      if [ $# -lt 1 ]; then
          print_help; exit 1;
      fi
      case "$1" in
          set)
              # Check if there is a second argument for the 'set' operation
              if [ $# -eq 2 ]; then
                echo "$2" > /tmp/waybar-mode
                pkill -RTMIN+8 waybar
              else
                  echo "Error: 'set' operation requires exactly one string argument."
                  print_help
                  exit 1
              fi
              ;;
          unset)
              echo "" > /tmp/waybar-mode
              pkill -RTMIN+8 waybar
              ;;
          *)
              echo "Error: Unknown command '$1'"
              print_help
              exit 1
              ;;
      esac
      exit 0
    '';  
    cclock_script = /*bash*/ ''
      ord=$(date +"%e" | awk '{printf("%d%s\n", $1, ($1==11||$1==12||$1==13)?"th":((($1%10)==1)?"st":((($1%10)==2)?"nd":((($1%10)==3)?"rd":"th"))))}')
      if [ $# -eq 0 ]; then
        echo "󰃮${sep}$(date +'%A the')" "$ord" "of" "$(date +'%B')" " ${sep}$(date +'%R')"
      elif [ "$1" = "--no-icons" ]; then
        echo "$(date +'%A the')" "$ord" "of" "$(date +'%B')"  "$(date +'%R')"
      fi
    '';
  in 
  with pkgs; [
    (writeShellApplication { name = "waybar_mode"; text = waybar_mode_script;}) 
    (writeShellApplication { name = "cclock"; text = cclock_script;})
  ];

  programs.waybar = {
    enable = true;
    package = pkgs.waybar;
    settings = {
      bar = {
        # height = 20;
        layer = "top";
        position = "bottom";
        margin-top = 0;
        # margin-left = rice.gap-size;
        # margin-bottom = rice.gap-size;
        # margin-right = rice.gap-size;
        margin-left = 0;
        margin-bottom = 0;
        margin-right = 0;
        spacing = 10;
        modules-left = [
          # "cpu"
          # "memory"
          "wireplumber"
          "backlight"
          "battery"
          "network"
          "hyprland/window"
        ];
        modules-center = [
          "hyprland/workspaces"
        ];
        modules-right = [
          "custom/mode"
          "custom/ctimeremaining"
          "custom/cclock"
          "tray"
        ];
        "hyprland/workspaces" = {
          on-click = "activate";
          format = "{name}";
          all-outputs = false;
          active-only = false;
        };
        "hyprland/window" = {
          # format = "${sep}{}";
          format = "{}";
          separate-outputs = true;
        };
        "custom/cclock" = {
          exec = "cclock";
          restart-interval = 60;
        };
        "custom/ctimeremaining" = {
          exec = "nx_gcal_event lookup";
          restart-interval = 60;
        };
        "custom/mode" = {
          exec = "cat /tmp/waybar-mode";
          interval = "once";
          signal = 8;
        };

        cpu = {
          interval = 1;
          format = "󰍛${sep}{}%";
          max-length = 10;
        };
        memory = {
          interval = 5;
          format = "${sep}{avail:.0f}G free";
        };
        battery = {
          interval = 60;
          tooltip = false;
          format = "{icon}${sep}{capacity}%";
          states = {
            warning = 15;
            critical = 5;
          };
          format-icons = [
            " "
            " "
            " "
            " "
            " "
          ];
          format-charging = "{icon}${sep}+{capacity}%";
          format-plugged = "{icon}${sep}P{capacity}%";
          format-full = "{icon}${sep}F{capacity}%";
        };
        backlight = {
          device = "eDP-1";
          format = "{icon}${sep}{percent}%";
          format-icons = [
            ""
            ""
            ""
            ""
            ""
            ""
            ""
            ""
            ""
          ];
        };
        network = {
          format-wifi = "${sep}{essid}";
          format-ethernet = "󰈀${sep}Wired";
          format-disconnected = "󰌙${sep}Disconnected";
        };
        wireplumber = {
          format = "󰕾${sep}{volume}%";
          format-muted = "󰝟${sep}--%";
        };
      };
    };
    style = with rice.color; let f = rice.lib.hex-to-rgb-comma-string; in ''
      * {
        font-family: ${rice.font.code.name2};
        font-size: 1em;
        min-height: 0px;
        margin: 0px;
        padding: 0px;
      }

      window#waybar {
        background-color: rgba(${f background},${builtins.toString rice.transparency});
        transition-duration: 5s;
        transition-property: background-color;
        /* border: ${builtins.toString rice.border-width}px solid rgb(${f border}); */
        /* margin: ${builtins.toString rice.gap-size}px; */
        /* border-radius: ${builtins.toString rice.rounding}px; */
      }

      #clock,
      #custom-cclock,
      #custom-ctimeremaining,
      #custom-mode,
      #battery,
      #cpu,
      #tray,
      #disk,
      #backlight,
      #network,
      #wireplumber,
      #memory,
      #window,
      #workspaces {
        padding: 0px 3px;
        margin-top: 0.3em;
        border-radius: ${builtins.toString rice.rounding}px;
        color: rgb(${f accent.bright});
      }

      #workspaces button {
        color: rgb(${f accent.base});
        padding-left: 15px;
        padding-right: 15px;
        border-radius: ${builtins.toString rice.rounding}px;
      }

      #workspaces button.active {
        color: rgb(${f background});
        background-color: rgba(${f accent.base},${builtins.toString rice.transparency});
      }

      #workspaces button:hover {
        color: rgb(${f tertiary.bright});
      }

      #workspaces button.urgent {
        background-color: rgba(${f magenta.base},${builtins.toString rice.transparency});
      }

      #custom-mode {
        color: rgb(${f red.base});
      }

      #window, #custom-ctimeremaining {
        font-family: ${rice.font.base.name}, ${rice.font.code.name2};
        color: rgb(${f tertiary.bright});
      }

      #wireplumber.muted {
        color: rgb(${f tertiary.bright});
      }
      #wireplumber {
        padding-left: 10px;
      }

      #battery.warning:not(.charging) {
        color: rgb(${f green.base});;
      }

      #battery.critical { 
        color: rgb(${f red.dark});;
        background: rgb(${f red.bright});
      }
      #battery.charging { color: rgb(${f green.base}); }
    '';

      #battery.critical:not(.charging) { 
  };
}
