{ pkgs, config, lib, inputs, outputs, myLib, ... }: let cfg = config.myNixOS; features = myLib.extendModules (name: { extraOptions = { myNixOS.${name}.enable = lib.mkEnableOption "enable my ${name} configuration"; }; configExtension = config: (lib.mkIf cfg.${name}.enable config); }) (myLib.filesIn ./features); bundles = myLib.extendModules (name: { extraOptions = { myNixOS.bundles.${name}.enable = lib.mkEnableOption "enable ${name} module bundle"; }; configExtension = config: (lib.mkIf cfg.bundles.${name}.enable config); }) (myLib.filesIn ./bundles); services = myLib.extendModules (name: { extraOptions = { myNixOS.services.${name}.enable = lib.mkEnableOption "enable ${name} service"; }; configExtension = config: (lib.mkIf cfg.services.${name}.enable config); }) (myLib.filesIn ./services); in { imports = [ inputs.home-manager.nixosModules.home-manager ] ++ features ++ bundles ++ services; options.myNixOS = { sharedSettings = { }; }; config = { nix.settings.experimental-features = [ "nix-command" "flakes" ]; nixpkgs = { hostPlatform = lib.mkDefault "x86_64-linux"; config.allowUnfree = true; }; }; }