{ pkgs, lib, config, ... }: with lib; { options.features.system = { enable = mkEnableOption "enable shared system utilities"; preset = mkOption { type = types.enum [ "minimal" "desktop" "ops" ]; default = "desktop"; description = "Package profile for shared system tooling."; }; corePackages = mkOption { type = types.listOf types.package; default = with pkgs; [ sops unzip zip wget htop procps fastfetch bc fzf eza rsync ripgrep fd ]; description = "Always-installed core system packages."; }; desktopPackages = mkOption { type = types.listOf types.package; default = with pkgs; [ bluez bluez-tools poppler-utils alsa-utils libnotify hyprpicker ]; description = "Additional packages for desktop-oriented hosts."; }; opsPackages = mkOption { type = types.listOf types.package; default = with pkgs; [ grc lazygit ]; description = "Additional packages for operations-heavy hosts."; }; extras = mkOption { type = types.listOf types.package; default = with pkgs; [ lolcat fortune cowsay typst ]; description = "Additional optional packages for all presets except minimal."; }; }; config = mkIf config.features.system.enable { environment.systemPackages = config.features.system.corePackages ++ optionals (config.features.system.preset != "minimal") config.features.system.extras ++ optionals (config.features.system.preset == "desktop") config.features.system.desktopPackages ++ optionals (config.features.system.preset == "ops") config.features.system.opsPackages; }; }