dotfiles/modules/nixos/graphical/rofi.nix

179 lines
5.6 KiB
Nix
Raw Normal View History

{ config, pkgs, lib, ... }:
2022-05-04 01:11:31 +00:00
2023-03-23 01:17:15 +00:00
let
rofi = config.home-manager.users.${config.user}.programs.rofi.finalPackage;
in {
2022-05-04 01:11:31 +00:00
2023-04-02 19:52:45 +00:00
imports = [ ./rofi/power.nix ./rofi/brightness.nix ];
2023-04-02 16:25:33 +00:00
2023-07-02 20:37:56 +00:00
config = lib.mkIf config.services.xserver.enable {
2022-05-04 01:11:31 +00:00
2023-03-22 20:20:30 +00:00
# Set the Rofi-Systemd terminal for viewing logs
2023-07-02 20:37:56 +00:00
environment.sessionVariables.ROFI_SYSTEMD_TERM = config.terminal;
2023-03-22 20:20:30 +00:00
2022-05-15 19:24:16 +00:00
home-manager.users.${config.user} = {
home.packages = with pkgs;
[
jq # Required for rofi-systemd
];
programs.rofi = {
enable = true;
cycle = true;
2023-07-02 20:37:56 +00:00
extraConfig = {
show-icons = true;
kb-cancel = "Escape,Super+space";
modi = "window,run,ssh,emoji,calc,systemd";
sort = true;
# levenshtein-sort = true;
};
2022-05-15 19:24:16 +00:00
location = "center";
pass = { };
plugins = [ pkgs.rofi-calc pkgs.rofi-emoji pkgs.rofi-systemd ];
theme = let
inherit (config.home-manager.users.${config.user}.lib.formats.rasi)
mkLiteral;
in {
# Inspired by https://github.com/sherubthakur/dotfiles/blob/master/users/modules/desktop-environment/rofi/launcher.rasi
"*" = {
background-color = mkLiteral config.theme.colors.base00;
foreground-color = mkLiteral config.theme.colors.base07;
text-color = mkLiteral config.theme.colors.base07;
border-color = mkLiteral config.theme.colors.base04;
2022-05-15 19:24:16 +00:00
};
# Holds the entire window
"#window" = {
transparency = "real";
background-color = mkLiteral config.theme.colors.base00;
text-color = mkLiteral config.theme.colors.base07;
2022-05-15 19:24:16 +00:00
border = mkLiteral "4px";
border-color = mkLiteral config.theme.colors.base04;
2022-05-15 19:24:16 +00:00
border-radius = mkLiteral "4px";
width = mkLiteral "850px";
padding = mkLiteral "15px";
};
# Wrapper around bar and results
"#mainbox" = {
background-color = mkLiteral config.theme.colors.base00;
2022-05-15 19:24:16 +00:00
border = mkLiteral "0px";
border-radius = mkLiteral "0px";
border-color = mkLiteral config.theme.colors.base04;
2022-05-15 19:24:16 +00:00
children = map mkLiteral [ "inputbar" "listview" ];
spacing = mkLiteral "10px";
padding = mkLiteral "10px";
};
# Unknown
"#textbox-prompt-colon" = {
expand = false;
str = ":";
margin = mkLiteral "0px 0.3em 0em 0em";
text-color = mkLiteral config.theme.colors.base07;
2022-05-15 19:24:16 +00:00
};
# Command prompt left of the input
"#prompt" = { enabled = false; };
# Actual text box
"#entry" = {
placeholder-color = mkLiteral config.theme.colors.base03;
2022-05-15 19:24:16 +00:00
expand = true;
horizontal-align = "0";
2023-04-02 16:25:33 +00:00
placeholder = "";
2022-05-15 19:24:16 +00:00
padding = mkLiteral "0px 0px 0px 5px";
blink = true;
};
# Top bar
"#inputbar" = {
children = map mkLiteral [ "prompt" "entry" ];
border = mkLiteral "1px";
border-radius = mkLiteral "4px";
padding = mkLiteral "6px";
};
# Results
"#listview" = {
background-color = mkLiteral config.theme.colors.base00;
2022-05-15 19:24:16 +00:00
padding = mkLiteral "0px";
columns = 1;
lines = 12;
spacing = "5px";
cycle = true;
dynamic = true;
layout = "vertical";
};
# Each result
"#element" = {
orientation = "vertical";
border-radius = mkLiteral "0px";
padding = mkLiteral "5px 0px 5px 5px";
};
"#element.selected" = {
border = mkLiteral "1px";
border-radius = mkLiteral "4px";
border-color = mkLiteral config.theme.colors.base07;
background-color = mkLiteral config.theme.colors.base04;
text-color = mkLiteral config.theme.colors.base00;
2022-05-15 19:24:16 +00:00
};
"#element-text" = {
expand = true;
# horizontal-align = mkLiteral "0.5";
vertical-align = mkLiteral "0.5";
margin = mkLiteral "0px 2.5px 0px 2.5px";
};
"#element-text.selected" = {
background-color = mkLiteral config.theme.colors.base04;
text-color = mkLiteral config.theme.colors.base00;
2022-05-15 19:24:16 +00:00
};
# Not sure how to get icons
"#element-icon" = {
size = mkLiteral "18px";
border = mkLiteral "0px";
padding = mkLiteral "2px 5px 2px 2px";
background-color = mkLiteral config.theme.colors.base00;
2022-05-15 19:24:16 +00:00
};
"#element-icon.selected" = {
background-color = mkLiteral config.theme.colors.base04;
text-color = mkLiteral config.theme.colors.base00;
2022-05-15 19:24:16 +00:00
};
2022-05-07 13:24:17 +00:00
};
2023-07-02 20:37:56 +00:00
terminal = config.terminal;
2022-05-15 19:24:16 +00:00
xoffset = 0;
yoffset = -20;
2022-05-07 13:56:16 +00:00
};
2022-05-15 19:24:16 +00:00
2023-04-02 16:25:33 +00:00
home.file.".local/share/rofi/themes" = {
recursive = true;
source = ./rofi/themes;
};
2022-05-04 01:11:31 +00:00
};
2022-05-15 19:24:16 +00:00
2023-04-02 16:25:33 +00:00
launcherCommand = ''
${rofi}/bin/rofi -modes drun -show drun -theme-str '@import "launcher.rasi"' '';
systemdSearch = "${pkgs.rofi-systemd}/bin/rofi-systemd";
2023-03-23 01:17:15 +00:00
altTabCommand = "${rofi}/bin/rofi -show window -modi window";
2023-04-11 03:08:59 +00:00
calculatorCommand = "${rofi}/bin/rofi -modes calc -show calc";
audioSwitchCommand = "${
(pkgs.writeShellApplication {
name = "switch-audio";
runtimeInputs = [ pkgs.ponymix rofi ];
text = builtins.readFile ./rofi/pulse-sink.sh;
})
}/bin/switch-audio";
2022-05-04 01:11:31 +00:00
};
}