{ config, lib, pkgs, ... }: let cfg = config.ar.home; inherit (config.lib.formats.rasi) mkLiteral; mkRgba = opacity: color: let c = config.lib.stylix.colors; r = c."${color}-rgb-r"; g = c."${color}-rgb-g"; b = c."${color}-rgb-b"; in mkLiteral "rgba ( ${r}, ${g}, ${b}, ${opacity} % )"; mkRgb = mkRgba "100"; rofiOpacity = builtins.toString (builtins.ceil (config.stylix.opacity.popups * 100)); in { config = lib.mkIf cfg.apps.rofi.enable { home.packages = [ pkgs.networkmanager_dmenu pkgs.rofi-bluetooth pkgs.rofi-rbw-wayland ]; stylix.targets.rofi.enable = false; programs.rofi = { enable = true; font = "${config.stylix.fonts.monospace.name} ${toString config.stylix.fonts.sizes.popups}"; location = "center"; package = pkgs.rofi-wayland; plugins = [ pkgs.rofi-power-menu pkgs.rofi-file-browser ]; terminal = lib.getExe cfg.defaultApps.terminal; theme = { "*" = { background = mkRgba rofiOpacity "base00"; lightbg = mkRgba rofiOpacity "base01"; red = mkRgba rofiOpacity "base08"; blue = mkRgba rofiOpacity "base0D"; blueopaque = mkRgb "base0D"; lightfg = mkRgba rofiOpacity "base06"; foreground = mkRgb "base05"; lightbgopaque = mkRgb "base01"; lightfgopaque = mkRgb "base06"; background-color = mkLiteral "transparent"; separatorcolor = mkLiteral "@blueopaque"; border-color = mkLiteral "@foreground"; selected-normal-foreground = mkLiteral "@lightbgopaque"; selected-normal-background = mkLiteral "@blueopaque"; selected-active-foreground = mkLiteral "@lightbgopaque"; selected-active-background = mkLiteral "@blueopaque"; selected-urgent-foreground = mkLiteral "@background"; selected-urgent-background = mkLiteral "@red"; normal-foreground = mkLiteral "@foreground"; normal-background = mkLiteral "transparent"; active-foreground = mkLiteral "@blue"; active-background = mkLiteral "transparent"; urgent-foreground = mkLiteral "@red"; urgent-background = mkLiteral "transparent"; alternate-normal-foreground = mkLiteral "@foreground"; alternate-normal-background = mkLiteral "transparent"; alternate-active-foreground = mkLiteral "@blue"; alternate-active-background = mkLiteral "transparent"; alternate-urgent-foreground = mkLiteral "@red"; alternate-urgent-background = mkLiteral "transparent"; # Text Colors base-text = mkRgb "base05"; selected-normal-text = mkRgb "base01"; selected-active-text = mkRgb "base00"; selected-urgent-text = mkRgb "base00"; normal-text = mkRgb "base05"; active-text = mkRgb "base0D"; urgent-text = mkRgb "base08"; alternate-normal-text = mkRgb "base05"; alternate-active-text = mkRgb "base0D"; alternate-urgent-text = mkRgb "base08"; }; window = { background-color = mkLiteral "@background"; border = 4; border-color = mkLiteral "@blue"; border-radius = mkLiteral "${toString cfg.theme.borders.radius}"; }; message = { border-color = mkLiteral "@separatorcolor"; border = mkLiteral "2px solid 0px 0px"; padding = 1; }; textbox.text-color = mkLiteral "@base-text"; listview = { border = mkLiteral "2px solid 0px 0px"; border-color = mkLiteral "@separatorcolor"; # border-radius = cfg.theme.borders.radius; padding = 5; scrollbar = false; spacing = 4; }; element = { border = 0; border-radius = cfg.theme.borders.radius; padding = 5; }; element-text = { background-color = mkLiteral "inherit"; text-color = mkLiteral "inherit"; }; element-icon = { background-color = mkLiteral "inherit"; text-color = mkLiteral "inherit"; }; "element normal.normal" = { background-color = mkLiteral "@normal-background"; text-color = mkLiteral "@normal-text"; }; "element normal.urgent" = { background-color = mkLiteral "@urgent-background"; text-color = mkLiteral "@urgent-text"; }; "element normal.active" = { background-color = mkLiteral "@active-background"; text-color = mkLiteral "@active-text"; }; "element selected.normal" = { background-color = mkLiteral "@selected-normal-background"; text-color = mkLiteral "@selected-normal-text"; }; "element selected.urgent" = { background-color = mkLiteral "@selected-urgent-background"; text-color = mkLiteral "@selected-urgent-text"; }; "element selected.active" = { background-color = mkLiteral "@selected-active-background"; text-color = mkLiteral "@selected-active-text"; }; "element alternate.normal" = { background-color = mkLiteral "@alternate-normal-background"; text-color = mkLiteral "@alternate-normal-text"; }; "element alternate.urgent" = { background-color = mkLiteral "@alternate-urgent-background"; text-color = mkLiteral "@alternate-urgent-text"; }; "element alternate.active" = { background-color = mkLiteral "@alternate-active-background"; text-color = mkLiteral "@alternate-active-text"; }; scrollbar.handle-color = mkLiteral "@normal-foreground"; sidebar.border-color = mkLiteral "@separatorcolor"; button.text-color = mkLiteral "@normal-text"; "button selected" = { background-color = mkLiteral "@selected-normal-background"; text-color = mkLiteral "@selected-normal-text"; }; inputbar.text-color = mkLiteral "@normal-text"; case-indicator.text-color = mkLiteral "@normal-text"; entry.text-color = mkLiteral "@normal-text"; prompt.text-color = mkLiteral "@normal-text"; "#textbox-prompt-colon" = { expand = false; margin = mkLiteral "0px 0.3em 0em 0em"; str = ":"; text-color = mkLiteral "inherit"; }; case-indicator.spacing = 0; entry.spacing = 0; prompt = { spacing = 0; margin = 1; }; "#inputbar" = { children = map mkLiteral ["prompt" "textbox-prompt-colon" "entry" "case-indicator"]; padding = 10; }; mode-switcher = { border = mkLiteral "2px solid 0px 0px"; border-color = mkLiteral "@separatorcolor"; }; }; extraConfig = { case-sensitive = false; click-to-exit = true; combi-display-format = "{text}"; combi-hide-mode-prefix = true; combi-modes = [ "window" "drun" "ssh" "recursivebrowser" ]; display-combi = "Search"; display-drun = "Apps"; display-filebrowser = "Files"; display-recursivebrowser = "Files"; display-run = "Run"; display-ssh = "SSH"; display-window = "Windows"; drun-display-format = "{icon} {name}"; hover-select = true; matching = "fuzzy"; me-accept-entry = "MousePrimary"; me-select-entry = ""; modes = "drun,window,ssh,recursivebrowser"; scrollbar = false; show-display-name = false; show-icons = true; sort = true; window-format = " {c} {t}"; window-thumbnail = false; }; }; xdg.configFile = { "rofi-rbw.rc".text = '' clear-after 60 prompt "Bitwarden" typing-key-delay 30 ''; "networkmanager-dmenu/config.ini".text = '' [dmenu] dmenu_command = ${lib.getExe config.programs.rofi.package} highlight = True [dmenu_passphrase] obscure = True [editor] gui = ${pkgs.networkmanagerapplet}/bin/nm-connection-editor gui_if_available = True terminal = ${lib.getExe cfg.defaultApps.terminal} ''; }; }; }