{ inputs, pkgs, lib, config, ... }: let azPkgs = inputs.nixpkgs-azure-cli.legacyPackages.${pkgs.stdenv.hostPlatform.system}; in with lib; { options.features.dev = { enable = mkEnableOption "enable development toolchain"; preset = mkOption { type = types.enum [ "minimal" "standard" "full" ]; default = "standard"; description = "Preset for development package groups."; }; cloud = { aws.enable = mkOption { type = types.bool; default = true; description = "Enable AWS CLI tools."; }; azure.enable = mkOption { type = types.bool; default = true; description = "Enable Azure CLI tools."; }; minio.enable = mkOption { type = types.bool; default = true; description = "Enable MinIO client."; }; }; tools = { docker.enable = mkOption { type = types.bool; default = true; description = "Enable lazydocker."; }; python.enable = mkOption { type = types.bool; default = true; description = "Enable Python runtime package."; }; opentofu.enable = mkOption { type = types.bool; default = true; description = "Enable OpenTofu package."; }; git.enable = mkOption { type = types.bool; default = true; description = "Enable git package in dev toolchain."; }; }; }; config = mkMerge [ (mkIf config.features.dev.enable { environment.systemPackages = (with pkgs; [ nixfmt-rfc-style gh yq jq ]) ++ optionals config.features.dev.tools.docker.enable (with pkgs; [ lazydocker ]) ++ optionals config.features.dev.cloud.aws.enable (with pkgs; [ awscli ]) ++ optionals config.features.dev.cloud.minio.enable (with pkgs; [ minio-client ]) ++ optionals config.features.dev.tools.opentofu.enable (with pkgs; [ opentofu ]) ++ optionals config.features.dev.tools.python.enable (with pkgs; [ python3 ]) ++ optionals config.features.dev.cloud.azure.enable [ (azPkgs.azure-cli.withExtensions ( with azPkgs.azure-cli.extensions; [ fzf ] )) ] ++ optionals config.features.dev.tools.git.enable (with pkgs; [ git ]); }) (mkIf (config.features.dev.preset == "minimal") { features.dev.cloud.aws.enable = mkDefault false; features.dev.cloud.azure.enable = mkDefault false; features.dev.cloud.minio.enable = mkDefault false; features.dev.tools.docker.enable = mkDefault false; features.dev.tools.opentofu.enable = mkDefault false; features.dev.tools.python.enable = mkDefault false; }) (mkIf (config.features.dev.preset == "full") { features.dev.cloud.aws.enable = mkDefault true; features.dev.cloud.azure.enable = mkDefault true; features.dev.cloud.minio.enable = mkDefault true; features.dev.tools.docker.enable = mkDefault true; features.dev.tools.opentofu.enable = mkDefault true; features.dev.tools.python.enable = mkDefault true; features.dev.tools.git.enable = mkDefault true; }) ]; }