diff --git a/flake.nix b/flake.nix index 9d70c00d..90191130 100644 --- a/flake.nix +++ b/flake.nix @@ -13,76 +13,43 @@ inherit (builtins) attrNames attrValues readDir; inherit (nixos) lib; inherit (lib) removeSuffix recursiveUpdate genAttrs filterAttrs; - inherit (utils) pathsToImportedAttrs; + inherit (utils) pathsToImportedAttrs genPkgset overlayPaths modules + genPackages; utils = import ./lib/utils.nix { inherit lib; }; system = "x86_64-linux"; - pkgImport = pkgs: - import pkgs { - inherit system; - overlays = attrValues self.overlays; - config = { allowUnfree = true; }; + externOverlays = [ ]; + + pkgset = + let overlays = (attrValues self.overlays) ++ externOverlays; in + genPkgset { + inherit master nixos overlays system; }; - - pkgset = { - osPkgs = pkgImport nixos; - pkgs = pkgImport master; - }; - in with pkgset; { nixosConfigurations = import ./hosts (recursiveUpdate inputs { inherit lib pkgset system utils; - } - ); + }); devShell."${system}" = import ./shell.nix { - inherit pkgs; + pkgs = osPkgs; }; overlay = import ./pkgs; - overlays = - let - overlayDir = ./overlays; - fullPath = name: overlayDir + "/${name}"; - overlayPaths = map fullPath (attrNames (readDir overlayDir)); - in - pathsToImportedAttrs overlayPaths; + overlays = pathsToImportedAttrs overlayPaths; - packages."${system}" = - let - packages = self.overlay osPkgs osPkgs; - overlays = lib.filterAttrs (n: v: n != "pkgs") self.overlays; - overlayPkgs = - genAttrs - (attrNames overlays) - (name: (overlays."${name}" osPkgs osPkgs)."${name}"); - in - recursiveUpdate packages overlayPkgs; + packages."${system}" = genPackages { + overlay = self.overlay; + overlays = self.overlays; + pkgs = osPkgs; + }; - nixosModules = - let - # binary cache - cachix = import ./cachix.nix; - cachixAttrs = { inherit cachix; }; - - # modules - moduleList = import ./modules/list.nix; - modulesAttrs = pathsToImportedAttrs moduleList; - - # profiles - profilesList = import ./profiles/list.nix; - profilesAttrs = { profiles = pathsToImportedAttrs profilesList; }; - - in - recursiveUpdate - (recursiveUpdate cachixAttrs modulesAttrs) - profilesAttrs; + nixosModules = modules; templates.flk.path = ./.; templates.flk.description = "flk template"; diff --git a/hosts/default.nix b/hosts/default.nix index 7e65763b..56366dde 100644 --- a/hosts/default.nix +++ b/hosts/default.nix @@ -11,7 +11,7 @@ let inherit (utils) recImport; inherit (builtins) attrValues removeAttrs; - inherit (pkgset) osPkgs pkgs; + inherit (pkgset) osPkgs unstablePkgs; config = hostName: lib.nixosSystem { @@ -37,7 +37,7 @@ let "home-manager=${home}" ]; - nixpkgs = { pkgs = osPkgs; }; + nixpkgs.pkgs = osPkgs; nix.registry = { master.flake = master; @@ -52,7 +52,7 @@ let overrides = { nixpkgs.overlays = let - override = import ../pkgs/override.nix pkgs; + override = import ../pkgs/override.nix unstablePkgs; overlay = pkg: final: prev: { "${pkg.pname}" = pkg; diff --git a/lib/utils.nix b/lib/utils.nix index f1aae4b5..1e861182 100644 --- a/lib/utils.nix +++ b/lib/utils.nix @@ -2,7 +2,8 @@ let inherit (builtins) attrNames isAttrs readDir listToAttrs; - inherit (lib) filterAttrs hasSuffix mapAttrs' nameValuePair removeSuffix; + inherit (lib) filterAttrs hasSuffix mapAttrs' nameValuePair removeSuffix + recursiveUpdate genAttrs; # mapFilterAttrs :: # (name -> value -> bool ) @@ -13,21 +14,11 @@ let # Generate an attribute set by mapping a function over a list of values. genAttrs' = values: f: listToAttrs (map f values); -in -{ - inherit mapFilterAttrs genAttrs'; - - recImport = { dir, _import ? base: import "${dir}/${base}.nix" }: - mapFilterAttrs - (_: v: v != null) - (n: v: - if n != "default.nix" && hasSuffix ".nix" n && v == "regular" - then - let name = removeSuffix ".nix" n; in nameValuePair (name) (_import name) - - else - nameValuePair ("") (null)) - (readDir dir); + pkgImport = { pkgs, system, overlays }: + import pkgs { + inherit system overlays; + config = { allowUnfree = true; }; + }; # Convert a list to file paths to attribute set # that has the filenames stripped of nix extension as keys @@ -38,4 +29,68 @@ in value = import path; }); +in +{ + inherit mapFilterAttrs genAttrs' pkgImport pathsToImportedAttrs; + + genPkgset = { master, nixos, overlays, system }: + { + osPkgs = pkgImport { + inherit system overlays; + pkgs = nixos; + }; + + unstablePkgs = pkgImport { + inherit system overlays; + pkgs = master; + }; + }; + + overlayPaths = + let + overlayDir = ../overlays; + fullPath = name: overlayDir + "/${name}"; + in + map fullPath (attrNames (readDir overlayDir)); + + recImport = { dir, _import ? base: import "${dir}/${base}.nix" }: + mapFilterAttrs + (_: v: v != null) + (n: v: + if n != "default.nix" && hasSuffix ".nix" n && v == "regular" + then + let name = removeSuffix ".nix" n; in nameValuePair (name) (_import name) + else + nameValuePair ("") (null)) + (readDir dir); + + modules = + let + # binary cache + cachix = import ../cachix.nix; + cachixAttrs = { inherit cachix; }; + + # modules + moduleList = import ../modules/list.nix; + modulesAttrs = pathsToImportedAttrs moduleList; + + # profiles + profilesList = import ../profiles/list.nix; + profilesAttrs = { profiles = pathsToImportedAttrs profilesList; }; + in + recursiveUpdate + (recursiveUpdate cachixAttrs modulesAttrs) + profilesAttrs; + + genPackages = { overlay, overlays, pkgs }: + let + packages = overlay pkgs pkgs; + overlays' = lib.filterAttrs (n: v: n != "pkgs") overlays; + overlayPkgs = + genAttrs + (attrNames overlays') + (name: (overlays'."${name}" pkgs pkgs)."${name}"); + in + recursiveUpdate packages overlayPkgs; + }