nixcfg/homeManagerModules/apps/rofi/default.nix
2024-08-15 09:45:56 -04:00

265 lines
8 KiB
Nix

{
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";
lightfg = mkRgba rofiOpacity "base06";
foreground = mkRgb "base05";
lightbgopaque = mkRgb "base01";
lightfgopaque = mkRgb "base06";
background-color = mkLiteral "transparent";
separatorcolor = mkLiteral "@foreground";
border-color = mkLiteral "@foreground";
selected-normal-foreground = mkLiteral "@lightbgopaque";
selected-normal-background = mkLiteral "@lightfgopaque";
selected-active-foreground = mkLiteral "@background";
selected-active-background = mkLiteral "@blue";
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;
};
message = {
border-color = mkLiteral "@separatorcolor";
border = mkLiteral "2px solid 0px 0px";
padding = 1;
};
textbox.text-color = mkLiteral "@base-text";
listview = {
border-color = mkLiteral "@separatorcolor";
border = mkLiteral "2px solid 0px 0px";
spacing = 4;
scrollbar = false;
};
element = {
border = 0;
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 = ''
prompt "Bitwarden"
clear-after 60
'';
"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}
'';
};
};
}