diff options
| author | Alejandro Soto <alejandro@34project.org> | 2025-08-24 15:48:29 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2025-08-24 15:48:29 -0600 |
| commit | ecab16d635554150627403675642d5603ef64cc6 (patch) | |
| tree | f94619061973fc0a5fd6097e27e80a5dde627fda /trivionomicon/flake.nix | |
| parent | 0e11a692f223b268ca0d208b0ebf48c80caddfb6 (diff) | |
| parent | 53a923158861a9c52b86f37d826c3f4637476dfa (diff) | |
Add 'trivionomicon/' from commit 'c651b8c4706cfc750303db12ae19e58164a6bebb'
git-subtree-dir: trivionomicon
git-subtree-mainline: 02d3ab9583983e823909020c34b9d5a6894fb773
git-subtree-split: c651b8c4706cfc750303db12ae19e58164a6bebb
Diffstat (limited to '')
| -rw-r--r-- | trivionomicon/flake.nix | 197 |
1 files changed, 197 insertions, 0 deletions
diff --git a/trivionomicon/flake.nix b/trivionomicon/flake.nix new file mode 100644 index 0000000..1a20e9e --- /dev/null +++ b/trivionomicon/flake.nix @@ -0,0 +1,197 @@ +{ + inputs = { + flake-utils.url = "github:numtide/flake-utils"; + nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05"; + }; + + outputs = { + self, + nixpkgs, + flake-utils, + }: let + mapOverlayOverride = namespace: overlay: final: prev: let + overlayPkgs = overlay final prev; + in + { + "${namespace}" = builtins.removeAttrs overlayPkgs ["override"]; + } + // (overlayPkgs.override or {}); + in + flake-utils.lib.eachDefaultSystem (system: { + formatter = (import nixpkgs {inherit system;}).alejandra; + + packages = + (import nixpkgs { + inherit system; + overlays = [(mapOverlayOverride "local" (import ./pkgs))]; + }).local; + }) + // { + templates = let + system-flake = { + path = ./templates/system-flake; + description = "Opinionated flake for a NixOS system with Home Manager"; + }; + in { + inherit system-flake; + + default = system-flake; + }; + + overlays = let + overlay = mapOverlayOverride "trivium" (import ./pkgs); + in { + default = overlay; + trivium = overlay; + }; + + homeManagerModules.default = ./modules; + nixosModules.default = ./modules; + + lib = { + mkSystemFlake = { + flakes, + system, + 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, + }: let + optionalFlake = name: + if flakes ? "${name}" + then flakes.${name} + else null; + + requireFlake = name: + if flakes ? "${name}" + then flakes.${name} + else throw "Required flake input '${name}' is required but was not provided"; + + nur = optionalFlake "nur"; + nixpkgs = requireFlake "nixpkgs"; + unstable = optionalFlake "unstable"; + + home-manager = + if hmSourcePath != null + then requireFlake "home-manager" + else null; + + pkgs = importPkgs nixpkgs; + + importPkgs = flake: + import flake ({ + inherit system; + + config = import ./pkgs/config nixpkgs.lib; + overlays = let + conditions = [ + { + overlay = nur.overlays.default; + condition = nur != null; + } + # NB: Preserve the relative order + { + overlay = self.overlays.trivium; + condition = true; + } + { + overlay = flakes.self.overlays.default; + condition = true; + } + ]; + 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; + 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; + }; + }; + + 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; + }; + + modules = [ + self.homeManagerModules.default + hmSourcePath + platform + registry + ]; + }; + in + mapAttrs home (importAll {root = hmPlatformsPath;}); + }; + }; + }; +} |
