{ lib, config, pkgs, ... }: with lib; let cfg = config.modules.desktop.rofi; in { options.modules.desktop.rofi = { enable = mkEnableOption "Enable rofi, a window switcher, run dialog and dmenu replacement"; dmenu = mkEnableOption "Use as a replacement for dmenu"; package = mkOption { type = types.package; default = pkgs.rofi-unwrapped; example = "pkgs.rofi"; }; }; config = mkIf cfg.enable { hm.programs.rofi = { enable = true; package = cfg.package; font = with config.modules.desktop.fonts.fonts.monospace; "${family} ${toString size}px"; extraConfig = { show-icons = true; }; }; user.packages = mkIf cfg.dmenu [ (pkgs.writeShellScriptBin "dmenu" '' set -euo pipefail prompt="select option" while [ $# -gt 0 ]; do case "$1" in -p) shift; prompt="$1" ;; esac shift done rofi -dmenu -i -p "$prompt" '') ]; }; }