{ self, lib, inputs, ... }: let mkNixosModule = name: [{ ${name} = import ./${name}; }]; mkBaseImport = name: [ self.nixosModules.${name} ]; # create a list of directory names from given folder filterModules = dir: builtins.attrNames (lib.attrsets.filterAttrs (n: v: v == "directory") (builtins.readDir dir)); # create nixosModules imports from list flakeNixosModulesList = modules: lib.attrsets.mergeAttrsList (builtins.concatMap mkNixosModule modules); flakeNixosBaseImports = modules: lib.lists.flatten (builtins.concatMap mkBaseImport modules); in { # Configuration common to all Linux systems flake = { nixosModules = rec {} // (flakeNixosModulesList (filterModules ./.)) // { base.imports = [ self.nixosModules.home-manager inputs.agenix.nixosModules.default inputs.musnix.nixosModules.musnix ({ flake, pkgs, lib, unstable, master, ... }: { nixpkgs.overlays = (import ../overlays) ++ [ (prev: next: { scan2paperless = inputs.scan2paperless.legacyPackages.${prev.system}.scan2paperless; nixd = inputs.unstable.legacyPackages.${prev.system}.nixd; factorio-headless = inputs.master.legacyPackages.${prev.system}.factorio-headless; paperless-ngx = inputs.master.legacyPackages.${prev.system}.paperless-ngx; waybar = inputs.master.legacyPackages.${prev.system}.waybar; element-desktop = inputs.master.legacyPackages.${prev.system}.element-desktop; adlist = inputs.adblock-unbound.packages.${prev.system}; }) ]; nix.nixPath = [ "nixpkgs=${inputs.nixpkgs}" "nixos-config=${../lib/compat/nixos}" "home-manager=${inputs.home-manager}" ]; }) ] ++ (flakeNixosBaseImports (filterModules ./.)); }; }; }