summaryrefslogtreecommitdiff
path: root/trivionomicon/flake.nix
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2025-08-24 15:48:29 -0600
committerAlejandro Soto <alejandro@34project.org>2025-08-24 15:48:29 -0600
commitecab16d635554150627403675642d5603ef64cc6 (patch)
treef94619061973fc0a5fd6097e27e80a5dde627fda /trivionomicon/flake.nix
parent0e11a692f223b268ca0d208b0ebf48c80caddfb6 (diff)
parent53a923158861a9c52b86f37d826c3f4637476dfa (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.nix197
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;});
+ };
+ };
+ };
+}