diff --git a/Droidnix/README.org b/Droidnix/README.org index 2b1faf2bc..4cc36dffd 100644 --- a/Droidnix/README.org +++ b/Droidnix/README.org @@ -133,48 +133,29 @@ The Nix flake definition for Droidnix. let hostname = "traveldroid"; - # Paths to your host modules and user modules modulesPath = "${flakeRoot}/generated/modules/${hostname}"; usersPath = "${flakeRoot}/generated/users"; - # Import all modules using import-tree - hostModules = import-tree modulesPath; - globalUsers = import-tree usersPath; + # Import raw modules (might be functions) + hostModulesRaw = import-tree modulesPath; + globalUsersRaw = import-tree usersPath; - allModules = hostModules.imports ++ globalUsers.imports; + # Helper to fully evaluate import-tree nodes into module sets + evalModule = m: + if lib.isFunction m then + m { lib = lib; pkgs = pkgs; config = config; flakeRoot = flakeRoot; home-manager = home-manager; } + else + m; -in -{ - ################################# - # Core system config - ################################# - networking.hostName = hostname; - system.stateVersion = "26.05"; + # Evaluate all modules into sets + hostModules = lib.mapAttrsToList (_: mod: evalModule mod) hostModulesRaw; + globalUsers = lib.mapAttrsToList (_: mod: evalModule mod) globalUsersRaw; - ################################# - # Imports - ################################# - imports = - [ - ./boot.nix - ./hardware-configuration.nix + # Merge all evaluated modules + allModules = hostModules ++ globalUsers; - # Home Manager module - home-manager.nixosModules.home-manager - ] - ++ allModules; - - ################################# - # Home Manager integration - ################################# - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - - # Evaluate all modules from import-tree - allModulesEval = lib.mapAttrsToList (_: mod: mod { lib = lib; pkgs = pkgs; config = config; flakeRoot = flakeRoot; home-manager = home-manager; }) hostModules; - - # Then fold - home-manager.users = lib.foldl' (acc: m: + # Merge all _module.args.hmUsers + allHmUsers = lib.foldl' (acc: m: let hmUsers = if (builtins.hasAttr "_module" m) && (builtins.hasAttr "args" m._module) && @@ -182,10 +163,41 @@ in then m._module.args.hmUsers else {}; in acc // hmUsers - ) {} allModulesEval; + ) {} allModules; + +in +{ + ################################# + # Core system config + ################################# + + networking.hostName = hostname; + system.stateVersion = "26.05"; ################################# - # System packages & helpers + # Imports + ################################# + + imports = + [ + ./boot.nix + ./hardware-configuration.nix + home-manager.nixosModules.home-manager + ] + ++ allModules; + + ################################# + # Home Manager integration + ################################# + + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + + # Inject the merged users directly under Home Manager + home-manager.users = allHmUsers; + + ################################# + # Example: system packages ################################# environment.systemPackages = [ pkgs.dconf diff --git a/Droidnix/generated/hosts/traveldroid/host.nix b/Droidnix/generated/hosts/traveldroid/host.nix index 3699bd640..b5158d1f4 100644 --- a/Droidnix/generated/hosts/traveldroid/host.nix +++ b/Droidnix/generated/hosts/traveldroid/host.nix @@ -3,48 +3,29 @@ let hostname = "traveldroid"; - # Paths to your host modules and user modules modulesPath = "${flakeRoot}/generated/modules/${hostname}"; usersPath = "${flakeRoot}/generated/users"; - # Import all modules using import-tree - hostModules = import-tree modulesPath; - globalUsers = import-tree usersPath; + # Import raw modules (might be functions) + hostModulesRaw = import-tree modulesPath; + globalUsersRaw = import-tree usersPath; - allModules = hostModules.imports ++ globalUsers.imports; + # Helper to fully evaluate import-tree nodes into module sets + evalModule = m: + if lib.isFunction m then + m { lib = lib; pkgs = pkgs; config = config; flakeRoot = flakeRoot; home-manager = home-manager; } + else + m; -in -{ - ################################# - # Core system config - ################################# - networking.hostName = hostname; - system.stateVersion = "26.05"; + # Evaluate all modules into sets + hostModules = lib.mapAttrsToList (_: mod: evalModule mod) hostModulesRaw; + globalUsers = lib.mapAttrsToList (_: mod: evalModule mod) globalUsersRaw; - ################################# - # Imports - ################################# - imports = - [ - ./boot.nix - ./hardware-configuration.nix + # Merge all evaluated modules + allModules = hostModules ++ globalUsers; - # Home Manager module - home-manager.nixosModules.home-manager - ] - ++ allModules; - - ################################# - # Home Manager integration - ################################# - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - - # Evaluate all modules from import-tree - allModulesEval = lib.mapAttrsToList (_: mod: mod { lib = lib; pkgs = pkgs; config = config; flakeRoot = flakeRoot; home-manager = home-manager; }) hostModules; - - # Then fold - home-manager.users = lib.foldl' (acc: m: + # Merge all _module.args.hmUsers + allHmUsers = lib.foldl' (acc: m: let hmUsers = if (builtins.hasAttr "_module" m) && (builtins.hasAttr "args" m._module) && @@ -52,10 +33,41 @@ in then m._module.args.hmUsers else {}; in acc // hmUsers - ) {} allModulesEval; + ) {} allModules; + +in +{ + ################################# + # Core system config + ################################# + + networking.hostName = hostname; + system.stateVersion = "26.05"; ################################# - # System packages & helpers + # Imports + ################################# + + imports = + [ + ./boot.nix + ./hardware-configuration.nix + home-manager.nixosModules.home-manager + ] + ++ allModules; + + ################################# + # Home Manager integration + ################################# + + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + + # Inject the merged users directly under Home Manager + home-manager.users = allHmUsers; + + ################################# + # Example: system packages ################################# environment.systemPackages = [ pkgs.dconf