{ pkgs, config, ... }:
{
  programs.rofi = {
    enable = true;
    package = pkgs.rofi-wayland;
    terminal = "foot";
    font = "${config.look.fonts.main} 14";
    theme = let
      inherit (config.lib.formats.rasi) mkLiteral;
    in {
      "*" = {
        lightbg = mkLiteral "#EEE8D5";
        lightfg = mkLiteral "#586875";
        blue = mkLiteral "#268BD2";
        red = mkLiteral "#DC322F";
        background-color = mkLiteral "#00000000";
        separatorcolor = mkLiteral "#00000000";
        normal-foreground = mkLiteral "#${config.look.colors.text}";
        normal-background = mkLiteral "#${config.look.colors.dark}1A";
        urgent-foreground = mkLiteral "#${config.look.colors.urgent}";
        active-foreground = mkLiteral "#${config.look.colors.split}";
        selected-active-foreground = mkLiteral "#${config.look.colors.prime}";
        background = mkLiteral "#${config.look.colors.dark}D9";
        bordercolor = mkLiteral "#${config.look.colors.prime}";
        selected-normal-foreground = mkLiteral "#FFFFFF";
        selected-normal-background = mkLiteral "#${config.look.colors.prime}80";
        border-color = mkLiteral "#${config.look.colors.prime}";
        urgent-background = mkLiteral "#${config.look.colors.accent}26";
        active-background = mkLiteral "#${config.look.colors.accent}26";
        selected-active-background = mkLiteral "#${config.look.colors.split}54";
      };
      "#window" = {
        background-color = mkLiteral "@background";
        width = 500;
        border = mkLiteral "${config.look.border.string}";
        padding = 5;
      };
      "#message" = {
        border = mkLiteral "1px dash 0px 0px";
        border-color = mkLiteral "@separatorcolor";
        padding = 1;
      };
      "#textbox" = {
        text-color = mkLiteral "@normal-foreground";
      };
      "#listview" = {
        fixed-height = 0;
        border-color = mkLiteral "@separatorcolor";
        scrollbar = mkLiteral "false";
        columns = 2;
      };
      "#element" = {
        border = 0;
        padding = 1;
      };
      "#element-text" = {
        background-color = mkLiteral "inherit";
        text-color = mkLiteral "inherit";
      };
      "#element.normal.normal" = {
        text-color = mkLiteral "@normal-foreground";
      };
      "#element.normal.urgent" = {
        text-color = mkLiteral "@urgent-foreground";
      };
      "#element.normal.active" = {
        background-color = mkLiteral "@active-background";
        text-color = mkLiteral "@active-foreground";
      };
      "#element.selected.normal" = {
        background-color = mkLiteral "@selected-normal-background";
        text-color = mkLiteral "@selected-normal-foreground";
      };
      "#element.selected.urgent" = {
        background-color = mkLiteral "@urgent-background";
        text-color = mkLiteral "@urgent-foreground";
      };
      "#element.selected.active" = {
        background-color = mkLiteral "@selected-active-background";
        text-color = mkLiteral "@selected-active-foreground";
      };
      "#element.alternate.normal" = {
        text-color = mkLiteral "@normal-foreground";
      };
      "#element.alternate.urgent" = {
        text-color = mkLiteral "@urgent-foreground";
      };
      "#element.alternate.active" = {
        background-color = mkLiteral "@active-background";
        text-color = mkLiteral "@active-foreground";
      };
      "#mode-switcher" = {
        border = mkLiteral "2px dash 0px 0px";
        border-color = mkLiteral "@separatorcolor";
      };
      "#button.selected" = {
        background-color = mkLiteral "@selected-normal-background";
        text-color = mkLiteral "@selected-normal-foreground";
      };
      "#case-indicator" = {
        spacing = mkLiteral "0";
        text-color = mkLiteral "@normal-foreground";
      };
      "#entry" = {
        spacing = 0;
        text-color = mkLiteral "@normal-foreground";
      };
      "#prompt" = {
        spacing = 0;
        text-color = mkLiteral "@normal-foreground";
      };
      "#inputbar" = {
        spacing = 0;
        text-color = mkLiteral "@normal-foreground";
        padding = 1;
        children = map mkLiteral ["prompt" "textbox-prompt-colon" "entry"];
      };
      "#textbox-prompt-colon" = {
        expand = false;
        str = ":";
        margin = mkLiteral "0px 0.3em 0em 0em";
        text-color = mkLiteral "@normal-foreground";
      };
    };
  };

  home.packages = with pkgs; [
    (pkgs.writeScriptBin "rofiscratch" ''
      SCRATCHPADS=$(echo -e "Btop\nMusic\nSound\nEasyEffects" | rofi -dmenu -i -p "Scratchpads")
      case $SCRATCHPADS in
        Btop) foot -a btop -T Btop btop;;
        Music) foot -a music -T Music ncmpcpp;;
        Sound) foot -a sound -T Sound pulsemixer;;
      esac
    '')
    (pkgs.writeScriptBin "rofipower" ''
      POWER=$(echo -e "Shutdown\nReboot\nSleep\nLock\nKill" | rofi -dmenu -i -p "Power")
      case $POWER in
        Shutdown) poweroff;;
        Reboot) reboot;;
        Sleep) sleep-$XDG_CURRENT_DESKTOP &;;
        Lock) swaylock &;;
        Kill) pkill -9 $XDG_CURRENT_DESKTOP;;
      esac
    '')
    rofi-bluetooth
    bemoji
  ];
}
