summaryrefslogtreecommitdiff
path: root/flake.nix
diff options
context:
space:
mode:
Diffstat (limited to 'flake.nix')
-rw-r--r--flake.nix211
1 files changed, 116 insertions, 95 deletions
diff --git a/flake.nix b/flake.nix
index 1a20e9e..7ab10c5 100644
--- a/flake.nix
+++ b/flake.nix
@@ -16,15 +16,24 @@
"${namespace}" = builtins.removeAttrs overlayPkgs ["override"];
}
// (overlayPkgs.override or {});
+
+ doctrineNoPkgs = self.lib.mkDoctrine {
+ lib = nixpkgs.lib;
+ pkgs = null;
+ };
in
- flake-utils.lib.eachDefaultSystem (system: {
- formatter = (import nixpkgs {inherit system;}).alejandra;
+ flake-utils.lib.eachDefaultSystem (system: let
+ pkgs = import nixpkgs {inherit system;};
+ in {
+ formatter = pkgs.alejandra;
packages =
(import nixpkgs {
inherit system;
- overlays = [(mapOverlayOverride "local" (import ./pkgs))];
- }).local;
+ overlays = [(mapOverlayOverride doctrineNoPkgs.prefix (import ./pkgs))];
+ }).${
+ doctrineNoPkgs.prefix
+ };
})
// {
templates = let
@@ -39,33 +48,37 @@
};
overlays = let
- overlay = mapOverlayOverride "trivium" (import ./pkgs);
+ overlay = mapOverlayOverride doctrineNoPkgs.prefix (import ./pkgs);
in {
default = overlay;
- trivium = overlay;
+ ${doctrineNoPkgs.prefix} = overlay;
};
homeManagerModules.default = ./modules;
nixosModules.default = ./modules;
lib = {
+ mkDoctrine = import ./doctrine;
+
mkSystemFlake = {
flakes,
system,
+ doctrinePrefix ? null,
formatter ? "alejandra",
- localOverlayPath ? /. + "${flakes.self}" + /pkgs,
- nixpkgsConfigPath ? localOverlayPath + /config,
- nixosSourcePath ? /. + "${flakes.self}" + /sys,
- nixosPlatformsPath ?
- if nixosSourcePath != null
- then nixosSourcePath + /platform
- else null,
- hmSourcePath ? /. + "${flakes.self}" + /home,
- hmPlatformsPath ?
- if hmSourcePath != null
- then hmSourcePath + /platform
- else null,
+ paths ? {},
}: let
+ mkDoctrine = args:
+ self.lib.mkDoctrine
+ (args
+ // optionalAttrs (doctrinePrefix != null) {
+ prefix = doctrinePrefix;
+ });
+
+ doctrineNoPkgs = mkDoctrine {
+ lib = nixpkgs.lib;
+ pkgs = null;
+ };
+
optionalFlake = name:
if flakes ? "${name}"
then flakes.${name}
@@ -74,7 +87,7 @@
requireFlake = name:
if flakes ? "${name}"
then flakes.${name}
- else throw "Required flake input '${name}' is required but was not provided";
+ else throw "Required flake input '${name}' is missing";
nur = optionalFlake "nur";
nixpkgs = requireFlake "nixpkgs";
@@ -85,13 +98,21 @@
then requireFlake "home-manager"
else null;
+ pathFromSelf = path: builtins.toPath "${flakes.self}" + "/${path}";
+
+ localOverlayPath = pathFromSelf paths.localOverlay;
+ nixpkgsConfigPath = pathFromSelf paths.nixpkgsConfig;
+ nixosSourcePath = pathFromSelf paths.nixosSource;
+ nixosPlatformsPath = pathFromSelf paths.nixosPlatforms;
+ hmSourcePath = pathFromSelf paths.hmSource;
+ hmPlatformsPath = pathFromSelf paths.hmPlatforms;
+
pkgs = importPkgs nixpkgs;
importPkgs = flake:
import flake ({
inherit system;
- config = import ./pkgs/config nixpkgs.lib;
overlays = let
conditions = [
{
@@ -100,7 +121,7 @@
}
# NB: Preserve the relative order
{
- overlay = self.overlays.trivium;
+ overlay = self.overlays.default;
condition = true;
}
{
@@ -111,87 +132,87 @@
in
builtins.map (cond: cond.overlay) (builtins.filter (cond: cond.condition) conditions);
}
- // (
- if nixpkgsConfigPath != null
- then {
- config = import nixpkgsConfigPath {inherit (nixpkgs) lib;};
- }
- else {}
- ));
-
- inherit (pkgs.trivium.lib) importAll;
+ // optionalAttrs (paths ? nixpkgsConfig) {
+ config = import nixpkgsConfigPath {inherit (nixpkgs) lib;};
+ });
+
+ inherit (pkgs) lib;
+ inherit (nixpkgs.lib) optionalAttrs; # Prevents infinite recursion
+ inherit (doctrineNoPkgs) prefix;
+ inherit (doctrineNoPkgs.lib) importAll;
in
- with pkgs.lib;
- {
- formatter.${system} =
- if formatter == "alejandra"
- then pkgs.alejandra
- else if formatter == "nixpkgs-fmt"
- then pkgs.nixpkgs-fmt
- else throw "Unknown formatter: '${formatter}'";
-
- packages.${system} = pkgs.local;
-
- overlays.default = final: prev: let
- overlay =
- if localOverlayPath != null
- then import localOverlayPath
- else (final: prev: {});
- in
- mapOverlayOverride "local" overlay final prev
- // optionalAttrs (unstable != null) {
- unstable = importPkgs unstable;
- };
- }
- // optionalAttrs (nixosSourcePath != null) {
- nixosConfigurations = let
- nixosSystem = {modules}:
- makeOverridable nixpkgs.lib.nixosSystem {
- inherit modules pkgs system;
-
- specialArgs = {
- inherit flakes;
+ {
+ formatter.${system} =
+ if formatter == "alejandra"
+ then pkgs.alejandra
+ else if formatter == "nixpkgs-fmt"
+ then pkgs.nixpkgs-fmt
+ else throw "Unknown formatter: '${formatter}'";
+
+ packages.${system} = pkgs.${prefix};
+
+ overlays.default = final: prev: let
+ overlay =
+ if paths ? localOverlay
+ then import localOverlayPath
+ else (final: prev: {});
+ in
+ mapOverlayOverride prefix overlay final prev
+ // optionalAttrs (unstable != null) {
+ unstable = importPkgs unstable;
+ };
+ }
+ // optionalAttrs (paths ? nixosSource) {
+ nixosConfigurations = let
+ nixosSystem = {modules}:
+ lib.makeOverridable nixpkgs.lib.nixosSystem {
+ inherit modules pkgs system;
+
+ specialArgs = {
+ inherit flakes;
+
+ doctrine = mkDoctrine {
+ inherit pkgs;
+ namespace = "sys";
};
};
-
- hostConfig = platform:
- nixosSystem {
- modules = [
- self.nixosModules.default
- nixosSourcePath
- platform
- ];
- };
- in
- mapAttrs (_: hostConfig) (importAll {root = nixosPlatformsPath;});
- }
- // optionalAttrs (hmSourcePath != null) {
- homeConfigurations = let
- registry = {...}: {
- config.nix.registry =
- mapAttrs
- (_: value: {flake = value;})
- flakes;
};
- home = name: platform:
- home-manager.lib.homeManagerConfiguration {
- inherit pkgs;
-
- extraSpecialArgs = {
- inherit flakes;
+ hostConfig = platform:
+ nixosSystem {
+ modules = [
+ self.nixosModules.default
+ nixosSourcePath
+ platform
+ ];
+ };
+ in
+ lib.mapAttrs (_: hostConfig) (importAll {root = nixosPlatformsPath;});
+ }
+ // optionalAttrs (paths ? hmSource) {
+ homeConfigurations = let
+ home = name: platform:
+ home-manager.lib.homeManagerConfiguration {
+ inherit pkgs;
+
+ extraSpecialArgs = {
+ inherit flakes;
+
+ doctrine = mkDoctrine {
+ inherit pkgs;
+ namespace = "hm";
};
-
- modules = [
- self.homeManagerModules.default
- hmSourcePath
- platform
- registry
- ];
};
- in
- mapAttrs home (importAll {root = hmPlatformsPath;});
- };
+
+ modules = [
+ self.homeManagerModules.default
+ hmSourcePath
+ platform
+ ];
+ };
+ in
+ lib.mapAttrs home (importAll {root = hmPlatformsPath;});
+ };
};
};
}