187 lines
4.8 KiB
Nix
187 lines
4.8 KiB
Nix
|
{
|
||
|
config,
|
||
|
lib,
|
||
|
pkgs,
|
||
|
...
|
||
|
}:
|
||
|
|
||
|
with lib;
|
||
|
|
||
|
let
|
||
|
cfg = config.custom.programs.rofi;
|
||
|
in
|
||
|
{
|
||
|
options.custom.programs.rofi.enable = mkOption { default = false; };
|
||
|
|
||
|
config.home-manager.users.${config.custom.username} = mkIf cfg.enable {
|
||
|
#!! Creates package derivation
|
||
|
#?? config.home-manager.users.${config.custom.username}.programs.rofi.finalPackage
|
||
|
# https://github.com/lbonn/rofi
|
||
|
programs.rofi = {
|
||
|
enable = true;
|
||
|
package = pkgs.rofi-wayland; # Wayland fork
|
||
|
|
||
|
# TODO: Look into rofi plugins
|
||
|
plugins = with pkgs; [
|
||
|
rofi-rbw # Bitwarden
|
||
|
rofimoji # Character picker
|
||
|
|
||
|
# TODO: Remove when rofi v1.7.6 released
|
||
|
# Build against rofi-wayland due to ABI incompatibility with upstream
|
||
|
# https://github.com/lbonn/rofi/issues/96
|
||
|
# https://github.com/NixOS/nixpkgs/issues/298539
|
||
|
(rofi-calc.override { rofi-unwrapped = rofi-wayland-unwrapped; }) # Calculator
|
||
|
(rofi-top.override { rofi-unwrapped = rofi-wayland-unwrapped; }) # System monitor
|
||
|
];
|
||
|
|
||
|
#?? rofi-theme-selector
|
||
|
theme = "custom";
|
||
|
font = "monospace 16";
|
||
|
|
||
|
# https://github.com/davatorium/rofi/blob/next/CONFIG.md
|
||
|
extraConfig = {
|
||
|
modi = "drun,run,calc";
|
||
|
matching = "prefix"; # Match beginning of words
|
||
|
drun-display-format = "{name}"; # Display only names
|
||
|
drun-match-fields = "name"; # Disable matching of invisible desktop attributes
|
||
|
};
|
||
|
};
|
||
|
|
||
|
# https://github.com/davatorium/rofi/blob/next/doc/rofi-theme.5.markdown
|
||
|
# https://github.com/davatorium/rofi/blob/next/themes/paper-float.rasi
|
||
|
# TODO: Clean up theme
|
||
|
home.file.".config/rofi/custom.rasi".text = ''
|
||
|
* {
|
||
|
background: #073642ff;
|
||
|
alternate: #002b36ff;
|
||
|
text: #eee8d5ff;
|
||
|
accent: #d33682ff;
|
||
|
|
||
|
spacing: 2;
|
||
|
text-color: @text;
|
||
|
background-color: #00000000;
|
||
|
border-color: @accent;
|
||
|
anchor: north;
|
||
|
location: center;
|
||
|
}
|
||
|
window {
|
||
|
transparency: "real";
|
||
|
background-color: #00000000;
|
||
|
border: 0;
|
||
|
padding: 0% 0% 1em 0%;
|
||
|
x-offset: 0;
|
||
|
y-offset: -10%;
|
||
|
}
|
||
|
mainbox {
|
||
|
padding: 0px;
|
||
|
border: 0;
|
||
|
spacing: 1%;
|
||
|
}
|
||
|
message {
|
||
|
border: 2px;
|
||
|
padding: 1em;
|
||
|
background-color: @background;
|
||
|
text-color: @text;
|
||
|
}
|
||
|
textbox normal {
|
||
|
text-color: @text;
|
||
|
padding: 0;
|
||
|
border: 0;
|
||
|
}
|
||
|
listview {
|
||
|
fixed-height: 1;
|
||
|
border: 2px;
|
||
|
padding: 1em;
|
||
|
reverse: false;
|
||
|
|
||
|
columns: 1;
|
||
|
background-color: @background;
|
||
|
}
|
||
|
element {
|
||
|
border: 0;
|
||
|
padding: 2px;
|
||
|
highlight: bold ;
|
||
|
}
|
||
|
element-text {
|
||
|
background-color: inherit;
|
||
|
text-color: inherit;
|
||
|
}
|
||
|
element normal.normal {
|
||
|
text-color: @text;
|
||
|
background-color: @background;
|
||
|
}
|
||
|
element normal.urgent {
|
||
|
text-color: @text;
|
||
|
background-color: @background;
|
||
|
}
|
||
|
element normal.active {
|
||
|
text-color: @text;
|
||
|
background-color: @background;
|
||
|
}
|
||
|
element selected.normal {
|
||
|
text-color: @text;
|
||
|
background-color: @accent;
|
||
|
}
|
||
|
element selected.urgent {
|
||
|
text-color: @text;
|
||
|
background-color: @accent;
|
||
|
}
|
||
|
element selected.active {
|
||
|
text-color: @text;
|
||
|
background-color: @accent;
|
||
|
}
|
||
|
element alternate.normal {
|
||
|
text-color: @text;
|
||
|
background-color: @alternate;
|
||
|
}
|
||
|
element alternate.urgent {
|
||
|
text-color: @text;
|
||
|
background-color: @alternate;
|
||
|
}
|
||
|
element alternate.active {
|
||
|
text-color: @text;
|
||
|
background-color: @alternate;
|
||
|
}
|
||
|
scrollbar {
|
||
|
border: 0;
|
||
|
padding: 0;
|
||
|
}
|
||
|
inputbar {
|
||
|
spacing: 0;
|
||
|
border: 2px;
|
||
|
padding: 0.5em 1em;
|
||
|
background-color: @background;
|
||
|
index: 0;
|
||
|
}
|
||
|
inputbar normal {
|
||
|
foreground-color: @text;
|
||
|
background-color: @background;
|
||
|
}
|
||
|
mode-switcher {
|
||
|
border: 2px;
|
||
|
padding: 0.5em 1em;
|
||
|
background-color: @background;
|
||
|
index: 10;
|
||
|
}
|
||
|
button selected {
|
||
|
text-color: @accent;
|
||
|
}
|
||
|
inputbar {
|
||
|
children: [ prompt,textbox-prompt-colon,entry,case-indicator ];
|
||
|
}
|
||
|
textbox-prompt-colon {
|
||
|
expand: false;
|
||
|
str: ":";
|
||
|
margin: 0px 0.3em 0em 0em ;
|
||
|
text-color: @text;
|
||
|
}
|
||
|
error-message {
|
||
|
border: 2px;
|
||
|
padding: 1em;
|
||
|
background-color: @background;
|
||
|
text-color: @text;
|
||
|
}
|
||
|
'';
|
||
|
};
|
||
|
}
|