diff --git a/export/hmModule.nix b/export/hmModule.nix index 8bac504..165dbac 100644 --- a/export/hmModule.nix +++ b/export/hmModule.nix @@ -1,6 +1,3 @@ -{ ... }@flake: -{ ... }@inputs: -{ ... }@imports: -{ - imports = builtins.attrValues (flake.hmModules or { }); +{ ... }@flake: { ... }@inputs: { ... }@imports: { + imports = builtins.attrValues (flake.hmModules or {}); } diff --git a/export/hmModules.nix b/export/hmModules.nix index 22a47bf..ff37dd1 100644 --- a/export/hmModules.nix +++ b/export/hmModules.nix @@ -1,8 +1,4 @@ -flake: -{ ... }@inputs: -{ ... }@imports: -let +flake: { ... }@inputs: { ... }@imports: let module' = name: imports: builtins.trace "user module: ${name}" { inherit imports; }; modules = builtins.mapAttrs module' imports."user/module"; -in -{ default = module' "default" (builtins.attrValues modules); } // modules +in { default = module' "default" (builtins.attrValues modules); } // modules diff --git a/export/hmProfiles.nix b/export/hmProfiles.nix index 0ce4160..192bda7 100644 --- a/export/hmProfiles.nix +++ b/export/hmProfiles.nix @@ -1,7 +1,4 @@ -{ ... }@flake: -{ ... }@inputs: -{ profile, ... }@imports: -let +{ ... }@flake: { ... }@inputs: { profile, ... }@imports: let profile' = name: snippets: builtins.trace "home-manager: profile: ${name}" { imports = snippets; }; -in -builtins.mapAttrs profile' profile +in builtins.mapAttrs profile' profile + diff --git a/export/iso.nix b/export/iso.nix index 68c076d..153bd59 100644 --- a/export/iso.nix +++ b/export/iso.nix @@ -1,50 +1,32 @@ -{ - nixosUsers ? { }, - nixosGroups ? { }, - nixosModules, - hmModules ? { - default = { }; - }, - ... -}@flake: -{ ... }@inputs: -{ host, ... }@imports: -let - host' = - name: snippets: - let +{ nixosUsers ? {}, nixosGroups ? {}, nixosModules, hmModules ? { default = {}; }, ...}@flake: { ... }@inputs: { host, ... }@imports: let + host' = name: snippets: let - overlay = self: super: { - makeModulesClosure = x: super.makeModulesClosure (x // { allowMissing = true; }); + overlay = self: super: { + makeModulesClosure = x: super.makeModulesClosure (x // { allowMissing = true; }); + }; + + common = { modulesPath, lib, ... }: { + config.nixpkgs.overlays = [ overlay ]; + config.networking.hostName = lib.mkForce name; + config.home-manager = { + sharedModules = [ hmModules.default ] ; }; - common = - { modulesPath, lib, ... }: - { - config.nixpkgs.overlays = [ overlay ]; - config.networking.hostName = lib.mkForce name; - config.home-manager = { - sharedModules = [ hmModules.default ]; - }; + imports = [ + (modulesPath + "/installer/cd-dvd/installation-cd-minimal-new-kernel-no-zfs.nix") + nixosModules.default + inputs.home-manager.nixosModules.default + ]; + }; - imports = [ - (modulesPath + "/installer/cd-dvd/installation-cd-minimal-new-kernel-no-zfs.nix") - nixosModules.default - inputs.home-manager.nixosModules.default - ]; - }; - - system = inputs.nixpkgs.lib.nixosSystem { - specialArgs = { inherit inputs flake; }; - modules = [ - common - ] + system = inputs.nixpkgs.lib.nixosSystem { + specialArgs = { inherit inputs flake; }; + modules = [ common ] ++ snippets ++ builtins.attrValues nixosUsers - ++ builtins.attrValues nixosGroups; - }; - in - system.config.system.build.isoImage; + ++ builtins.attrValues nixosGroups + ; + }; + in system.config.system.build.isoImage; -in -builtins.mapAttrs host' host +in builtins.mapAttrs host' host diff --git a/export/nixosConfigurations.nix b/export/nixosConfigurations.nix index 70f9e2c..e712097 100644 --- a/export/nixosConfigurations.nix +++ b/export/nixosConfigurations.nix @@ -1,45 +1,19 @@ -{ - nixosUsers ? { }, - nixosGroups ? { }, - nixosModules, - hmModules ? { - default = { }; - }, - ... -}@flake: -{ ... }@inputs: -{ host, ... }@imports: -let - host' = - name: snippets: - let - system = - { - namespace ? "fbs42", - nixpkgs ? "nixpkgs", - }: - inputs.${nixpkgs}.lib.nixosSystem { - specialArgs = { inherit inputs flake namespace; }; - modules = - builtins.concatLists ( - map ( - base: builtins.attrValues (flake.lib.scan { base = "${base}/host/${name}"; }) - ) flake.lib.schema.base - ) - ++ [ { config.networking.hostName = name; } ] - ++ [ nixosModules.default ] - ++ [ inputs.home-manager.nixosModules.default ] - ++ [ { config.home-manager.sharedModules = [ hmModules.default ]; } ] - ++ [ { config.home-manager.extraSpecialArgs = { inherit flake namespace; }; } ] - ++ builtins.attrValues nixosUsers - ++ builtins.attrValues nixosGroups; - }; +{ nixosUsers ? {}, nixosGroups ? {}, nixosModules, hmModules ? { default = {}; }, ...}@flake: { ... }@inputs: { host, ... }@imports: let + host' = name: snippets: let + system = { namespace?"fbs42", nixpkgs?"nixpkgs" }: inputs.${nixpkgs}.lib.nixosSystem { + specialArgs = { inherit inputs flake namespace; }; + modules = builtins.concatLists (map (base: builtins.attrValues (flake.lib.scan { base = "${base}/host/${name}"; })) flake.lib.schema.base) + ++ [ { config.networking.hostName = name; } ] + ++ [ nixosModules.default ] + ++ [ inputs.home-manager.nixosModules.default ] + ++ [ { config.home-manager.sharedModules = [ hmModules.default ]; } ] + ++ [ { config.home-manager.extraSpecialArgs = { inherit flake namespace; }; } ] + ++ builtins.attrValues nixosUsers + ++ builtins.attrValues nixosGroups + ; + }; - cfg = - assert builtins.length snippets == 1; - builtins.head snippets; - in - system cfg; + cfg = assert builtins.length snippets == 1; builtins.head snippets; + in system cfg; -in -builtins.mapAttrs host' host +in builtins.mapAttrs host' host diff --git a/export/nixosGroup.nix b/export/nixosGroup.nix index 5deaea2..159b8c1 100644 --- a/export/nixosGroup.nix +++ b/export/nixosGroup.nix @@ -1,25 +1,10 @@ -flake: -{ ... }@inputs: -{ group, ... }@imports: -let - group' = - name: snippets: - { - pkgs, - lib, - options, - config, - ... - }@args: - let - invoke = x: if builtins.isFunction x then x args else x; - in - { - options.fbs42.group.${name} = lib.mkEnableOption name; - config.users.groups.${name} = lib.mkIf ( - config.fbs42.group.${name} - || builtins.any (usr: usr.group == name) (builtins.attrValues config.users.users) - ) (lib.mkMerge (map invoke snippets)); - }; -in -builtins.mapAttrs group' group +flake: { ... }@inputs: { group, ... }@imports: let + group' = name: snippets: { pkgs, lib, options, config, ... }@args: let + invoke = x: if builtins.isFunction x then x args else x; + in { + options.fbs42.group.${name} = lib.mkEnableOption name; + config.users.groups.${name} = lib.mkIf + (config.fbs42.group.${name} || builtins.any (usr: usr.group == name) (builtins.attrValues config.users.users)) + (lib.mkMerge (map invoke snippets)); + }; +in builtins.mapAttrs group' group diff --git a/export/nixosModules.nix b/export/nixosModules.nix index e91361c..c5dae22 100644 --- a/export/nixosModules.nix +++ b/export/nixosModules.nix @@ -1,14 +1,3 @@ -flake: -{ ... }@inputs: -{ module, ... }@imports: -let - modules = builtins.mapAttrs ( - name: imports: builtins.trace "module: ${name}" { inherit imports; } - ) module; -in -{ - default = { - imports = builtins.attrValues modules; - }; -} -// modules +flake: { ... }@inputs: { module, ... }@imports: let + modules = builtins.mapAttrs (name: imports: builtins.trace "module: ${name}" { inherit imports; }) module; +in { default = { imports = builtins.attrValues modules; }; } // modules diff --git a/export/nixosProfiles.nix b/export/nixosProfiles.nix index 8b22fd4..1655190 100644 --- a/export/nixosProfiles.nix +++ b/export/nixosProfiles.nix @@ -1,4 +1,2 @@ -{ ... }@flake: -{ ... }@inputs: -{ profile, ... }@imports: -builtins.mapAttrs (name: imports: builtins.trace "profile: ${name}" { inherit imports; }) profile +{ ... }@flake: { ... }@inputs: { profile, ... }@imports: + builtins.mapAttrs (name: imports: builtins.trace "profile: ${name}" { inherit imports; }) profile diff --git a/export/nixosUsers.nix b/export/nixosUsers.nix index ca13dbd..f0ff763 100644 --- a/export/nixosUsers.nix +++ b/export/nixosUsers.nix @@ -1,15 +1,5 @@ -self: -{ ... }@inputs: -{ user, ... }@imports: -let - user' = - name: snippets: - { - pkgs, - lib, - config, - ... - }@args: +self: { ... }@inputs: { user, ... }@imports: let + user' = name: snippets: { pkgs, lib, config, ... }@args: builtins.trace "user: ${name}" { options.fbs42.user.${name} = lib.mkEnableOption name; ## no longer with nixos-24.11 @@ -17,15 +7,11 @@ let # group = lib.mkDefault name; #}; - imports = map ( - { user, home-manager }: - { - config = lib.mkIf config.fbs42.user.${name} { - users.users.${name} = (user args); - home-manager.users.${name} = home-manager; - }; - } - ) snippets; + imports = map ({ user, home-manager}: { + config = lib.mkIf config.fbs42.user.${name} { + users.users.${name} = (user args); + home-manager.users.${name} = home-manager; + }; + }) snippets; }; -in -builtins.mapAttrs user' user +in builtins.mapAttrs user' user diff --git a/export/sdcard-rpi4.nix b/export/sdcard-rpi4.nix index 8c8359a..24a1a9d 100644 --- a/export/sdcard-rpi4.nix +++ b/export/sdcard-rpi4.nix @@ -1,52 +1,34 @@ -{ - nixosUsers ? { }, - nixosGroups ? { }, - nixosModules, - hmModules ? { - default = { }; - }, - ... -}@flake: -{ ... }@inputs: -{ host, ... }@imports: -let - host' = - name: snippets: - let +{ nixosUsers ? {}, nixosGroups ? {}, nixosModules, hmModules ? { default = {}; }, ...}@flake: { ... }@inputs: { host, ... }@imports: let + host' = name: snippets: let - overlay = self: super: { - makeModulesClosure = x: super.makeModulesClosure (x // { allowMissing = true; }); + overlay = self: super: { + makeModulesClosure = x: super.makeModulesClosure (x // { allowMissing = true; }); + }; + + common = { modulesPath, lib, ... }: { + config.nixpkgs.overlays = [ overlay ]; + config.networking.hostName = lib.mkForce name; + config.home-manager = { + sharedModules = [ hmModules.default ] ; }; - common = - { modulesPath, lib, ... }: - { - config.nixpkgs.overlays = [ overlay ]; - config.networking.hostName = lib.mkForce name; - config.home-manager = { - sharedModules = [ hmModules.default ]; - }; + imports = [ + #(modulesPath + "/installer/cd-dvd/installation-cd-minimal-new-kernel-no-zfs.nix") + #(modulesPath + "/installer/sd-card/sd-image-aarch64.nix") + (modulesPath + "/installer/sd-card/sd-image-raspberrypi.nix") + nixosModules.default + inputs.home-manager.nixosModules.default + ]; + }; - imports = [ - #(modulesPath + "/installer/cd-dvd/installation-cd-minimal-new-kernel-no-zfs.nix") - #(modulesPath + "/installer/sd-card/sd-image-aarch64.nix") - (modulesPath + "/installer/sd-card/sd-image-raspberrypi.nix") - nixosModules.default - inputs.home-manager.nixosModules.default - ]; - }; - - system = inputs.nixpkgs.lib.nixosSystem { - specialArgs = { inherit inputs flake; }; - modules = [ - common - ] + system = inputs.nixpkgs.lib.nixosSystem { + specialArgs = { inherit inputs flake; }; + modules = [ common ] ++ snippets ++ builtins.attrValues nixosUsers - ++ builtins.attrValues nixosGroups; - }; - in - system.config.system.build.sdImage; + ++ builtins.attrValues nixosGroups + ; + }; + in system.config.system.build.sdImage; -in -builtins.mapAttrs host' host +in builtins.mapAttrs host' host diff --git a/flake.lock b/flake.lock index 71dbc34..b70a3c3 100644 --- a/flake.lock +++ b/flake.lock @@ -22,32 +22,32 @@ ] }, "locked": { - "lastModified": 1757808926, - "narHash": "sha256-K6PEI5PYY94TVMH0mX3MbZNYFme7oNRKml/85BpRRAo=", + "lastModified": 1747688870, + "narHash": "sha256-ypL9WAZfmJr5V70jEVzqGjjQzF0uCkz+AFQF7n9NmNc=", "owner": "nix-community", "repo": "home-manager", - "rev": "f21d9167782c086a33ad53e2311854a8f13c281e", + "rev": "d5f1f641b289553927b3801580598d200a501863", "type": "github" }, "original": { "owner": "nix-community", - "ref": "release-25.05", + "ref": "release-24.11", "repo": "home-manager", "type": "github" } }, "nixpkgs": { "locked": { - "lastModified": 1757810152, - "narHash": "sha256-Vp9K5ol6h0J90jG7Rm4RWZsCB3x7v5VPx588TQ1dkfs=", + "lastModified": 1751274312, + "narHash": "sha256-/bVBlRpECLVzjV19t5KMdMFWSwKLtb5RyXdjz3LJT+g=", "owner": "nixos", "repo": "nixpkgs", - "rev": "9a094440e02a699be5c57453a092a8baf569bdad", + "rev": "50ab793786d9de88ee30ec4e4c24fb4236fc2674", "type": "github" }, "original": { "owner": "nixos", - "ref": "nixos-25.05", + "ref": "nixos-24.11", "repo": "nixpkgs", "type": "github" } diff --git a/flake.nix b/flake.nix index 48864cb..5f5c238 100644 --- a/flake.nix +++ b/flake.nix @@ -1,9 +1,9 @@ { inputs = { - nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05"; + nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11"; hardware.url = "github:nixos/nixos-hardware"; home-manager = { - url = "github:nix-community/home-manager/release-25.05"; + url = "github:nix-community/home-manager/release-24.11"; inputs.nixpkgs.follows = "nixpkgs"; }; }; diff --git a/group/nix.nix b/group/nix.nix index ffcd441..0967ef4 100644 --- a/group/nix.nix +++ b/group/nix.nix @@ -1 +1 @@ -{ } +{} diff --git a/import/user.nix b/import/user.nix index dd76452..0e5562d 100644 --- a/import/user.nix +++ b/import/user.nix @@ -1,34 +1,21 @@ let - function = - name: value: - let - result = if builtins.isAttrs value then { ... }: value else value; - result' = builtins.trace "result ${name}=${builtins.typeOf result}" result; - in + function = name: value: let + result = if builtins.isAttrs value then {...}: value else value; + result' = builtins.trace "result ${name}=${builtins.typeOf result}" result; + in assert builtins.isFunction result'; result; - config = - { - user ? { }, - home-manager ? { }, - }@set: + config = { user?{}, home-manager?{} }@set: builtins.mapAttrs function { inherit user home-manager; }; -in -name: value: -let - result = - if builtins.isFunction value then - config { user = value; } - else if - builtins.any (attr: builtins.hasAttr attr value) [ - "user" - "home-manager" - ] - then - config value - else - config { user = value; }; -in -result +in name: value: let + result = if builtins.isFunction value + then + config { user = value; } + else if builtins.any (attr: builtins.hasAttr attr value) [ "user" "home-manager" ] + then + config value + else + config { user = value; }; +in result diff --git a/import/user/profile.nix b/import/user/profile.nix index bdf2229..db2953a 100644 --- a/import/user/profile.nix +++ b/import/user/profile.nix @@ -1 +1,2 @@ name: profile: profile + diff --git a/lib/flake.nix b/lib/flake.nix index d607d90..4655a5d 100644 --- a/lib/flake.nix +++ b/lib/flake.nix @@ -1,81 +1,34 @@ let scan = import ./scan.nix; - flake' = - self: - { - imports, - exports, - base, - }@schema: - { ... }@inputs: - { ... }@imports: - let - lib = { - inherit - scan - schema - inputs - imports - ; - extend = flake schema inputs imports; - new = flake { } { } { }; - # TODO: override - }; - convert = attr: value: value self inputs imports; + flake' = self: { imports, exports , base }@schema: { ... }@inputs: { ... }@imports: let + lib = { + inherit scan schema inputs imports; + extend = flake schema inputs imports; + new = flake {} {} {}; + # TODO: override + }; + convert = attr: value: value self inputs imports; - result = (builtins.mapAttrs convert schema.exports); - in - { - formatter = builtins.mapAttrs (_: pkgs: pkgs.nixfmt-tree) inputs.nixpkgs.legacyPackages; - } - // result - // { - lib = lib // (result.lib or { }); + result = (builtins.mapAttrs convert schema.exports); + in result // { lib = lib // (result.lib or {}); }; + + flake = { imports?{}, exports?{}, base?[] }@schema'old: { ... }@inputs'old: { ... }@imports'old: { ... }@inputs'new: base: let + schema = { + imports = (schema'old.imports or {}) // scan { base = base + "/import"; recursive = true; }; + exports = (schema'old.exports or {}) // scan { base = base + "/export"; }; + base = [ base ] ++ (schema'old.base or []); }; - flake = - { - imports ? { }, - exports ? { }, - base ? [ ], - }@schema'old: - { ... }@inputs'old: - { ... }@imports'old: - { ... }@inputs'new: - base: - let - schema = { - imports = - (schema'old.imports or { }) - // scan { - base = base + "/import"; - recursive = true; - }; - exports = (schema'old.exports or { }) // scan { base = base + "/export"; }; - base = [ base ] ++ (schema'old.base or [ ]); - }; + merge = attr: let + old = imports'old.${attr} or {}; + new = imports'new.${attr} or {}; + in builtins.mapAttrs (attr: _: (old.${attr} or []) ++ (new.${attr} or [])) (old//new); - merge = - attr: - let - old = imports'old.${attr} or { }; - new = imports'new.${attr} or { }; - in - builtins.mapAttrs (attr: _: (old.${attr} or [ ]) ++ (new.${attr} or [ ])) (old // new); + imports'new = builtins.mapAttrs (name: value: scan { base = base + "/${name}"; convert = name: content: [ (value name content) ]; }) schema.imports; + result = flake' result schema + (inputs'old // (builtins.removeAttrs inputs'new ["self"])) + (builtins.mapAttrs (attr: _: merge attr) schema.imports); + in result; - imports'new = builtins.mapAttrs ( - name: value: - scan { - base = base + "/${name}"; - convert = name: content: [ (value name content) ]; - } - ) schema.imports; - result = flake' result schema (inputs'old // (builtins.removeAttrs inputs'new [ "self" ])) ( - builtins.mapAttrs (attr: _: merge attr) schema.imports - ); - in - result; - -in -flake { } { } { } +in flake {} {} {} diff --git a/lib/host.nix b/lib/host.nix new file mode 100644 index 0000000..b387ebc --- /dev/null +++ b/lib/host.nix @@ -0,0 +1 @@ +self: diff --git a/lib/scan.nix b/lib/scan.nix index dfb9eb1..d664df9 100644 --- a/lib/scan.nix +++ b/lib/scan.nix @@ -1,42 +1,23 @@ -{ - base, - convert ? name: value: value, - recursive ? false, -}: +{ base, convert ? name: value: value, recursive ? false }: let - scan = - sub: - let - all = builtins.readDir (base + "/${builtins.concatStringsSep "/" sub}"); - names = filter: builtins.filter filter (builtins.attrNames all); - nix = - name: - all.${name} == "regular" - && builtins.stringLength name > 4 - && builtins.substring (builtins.stringLength name - 4) 4 name == ".nix"; - dir = name: all.${name} == "directory"; - files = map (name: sub ++ [ (builtins.substring 0 (builtins.stringLength name - 4) name) ]) ( - names nix - ); - dirs = builtins.concatLists (map (name: scan (sub ++ [ name ])) (names dir)); - in - if recursive then files ++ dirs else files; + scan = sub: let + all = builtins.readDir (base + "/${builtins.concatStringsSep "/" sub}"); + names = filter: builtins.filter filter (builtins.attrNames all); + nix = name: all.${name} == "regular" && builtins.stringLength name > 4 && builtins.substring (builtins.stringLength name - 4) 4 name == ".nix"; + dir = name: all.${name} == "directory"; + files = map (name: sub ++ [ (builtins.substring 0 (builtins.stringLength name - 4) name) ]) (names nix); + dirs = builtins.concatLists (map (name: scan (sub ++ [name])) (names dir)); + in if recursive then files ++ dirs else files; - root = scan [ ]; + root = scan []; - item = - relative: - let - name = builtins.concatStringsSep "/" relative; - absolute = base + "/${name}.nix"; - content = import absolute; - value = convert name content; - in - { - inherit name value; - }; + item = relative: let + name = builtins.concatStringsSep "/" relative; + absolute = base + "/${name}.nix"; + content = import absolute; + value = convert name content; + in { inherit name value; }; items = map item root; -in -if builtins.pathExists base then builtins.listToAttrs (map item root) else { } +in if builtins.pathExists base then builtins.listToAttrs (map item root) else {} diff --git a/user/root.nix b/user/root.nix index ffcd441..0967ef4 100644 --- a/user/root.nix +++ b/user/root.nix @@ -1 +1 @@ -{ } +{}