{ pkgs, lib, config, ... }: let inherit (lib) mkEnableOption mkOption mkIf; inherit (lib.types) package str; inherit (lib.my) getExe; cfg = config.modules.system.roles.desktop; in { options.modules.system.roles.desktop = { enable = mkEnableOption "desktop usage features"; terminal = mkOption { type = package; default = pkgs.foot; description = '' The default terminal emulator used on the system. To be used by other options and configurations. ''; }; filemanager = mkOption { type = package; default = pkgs.nautilus; description = ''''; }; runner = { package = mkOption { type = package; default = pkgs.fuzzel; description = '' The runner to use. ''; }; dmenu = mkOption { type = str; default = "--dmenu"; apply = val: "${getExe cfg.runner.package} ${val}"; description = '' Flags necessary to execute the runner in its dmenu compatibility mode. ''; }; }; }; config = mkIf cfg.enable { environment.systemPackages = [ cfg.terminal cfg.filemanager ]; }; }