{ config, lib, options, pkgs, inputs, ... }: { options.mods = { basePackages = { enable = lib.mkOption { default = true; example = false; type = lib.types.bool; description = '' Enables default system packages. ''; }; additionalPackages = lib.mkOption { default = [ ]; example = [ pkgs.openssl ]; type = with lib.types; listOf package; description = '' Additional packages to install. Note that these are installed even if base packages is disabled, e.g. you can also use this as the only packages to install. ''; }; specialPrograms = lib.mkOption { default = { }; example = { }; type = with lib.types; attrsOf anything; description = '' special program configuration to be added which require programs.something notation. ''; }; specialServices = lib.mkOption { default = { }; example = { }; type = with lib.types; attrsOf anything; description = '' special services configuration to be added which require an services.something notation. ''; }; }; }; config = lib.optionalAttrs (options ? environment.systemPackages) { environment.systemPackages = if config.mods.basePackages.enable then with pkgs; [ adwaita-icon-theme dbus dconf direnv glib gnome.nixos-gsettings-overrides gsettings-desktop-schemas gtk-layer-shell gtk3 gtk4 gtk4-layer-shell hicolor-icon-theme icon-library kdePackages.breeze-icons kdePackages.breeze libsForQt5.breeze-qt5 kdePackages.qtstyleplugin-kvantum libsForQt5.qtstyleplugin-kvantum libadwaita libxkbcommon nixfmt-rfc-style openssl seahorse upower xorg.xkbutils ] ++ config.mods.basePackages.additionalPackages else config.mods.basePackages.additionalPackages; gtk.iconCache.enable = false; services = if config.mods.basePackages.enable then { upower.enable = true; dbus = { enable = true; packages = with pkgs; [ gnome2.GConf ]; }; avahi = { enable = true; nssmdns4 = true; openFirewall = true; }; } // config.mods.basePackages.specialServices else config.mods.basePackages.specialServices; programs = if config.mods.basePackages.enable then { nix-ld = { enable = true; libraries = with pkgs; [ jdk zlib ]; }; direnv = { package = pkgs.direnv; silent = false; loadInNixShell = true; direnvrcExtra = ""; nix-direnv = { enable = true; package = pkgs.nix-direnv; }; }; #ssh.startAgent = true; gnupg.agent.enable = true; } // config.mods.basePackages.specialPrograms else config.mods.basePackages.specialPrograms; }; }