Deployment and lifecycle management for Nix
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

flake: rework sowerJobs

+136 -131
-1
flake.nix
··· 16 16 { ... }: 17 17 { 18 18 imports = [ 19 - ./nix/lib.nix 20 19 ./nix/flake/part.nix 21 20 inputs.process-compose-flake.flakeModule 22 21 ];
+4 -126
nix/flake/part.nix
··· 1 - { 2 - config, 3 - inputs, 4 - lib, 5 - self, 6 - ... 7 - }: 1 + { inputs, lib, ... }: 8 2 { 9 3 imports = [ 10 - ./sowerjobs.nix 4 + ./sower.nix 11 5 ]; 12 6 13 - options = { 14 - sower = { 15 - enable = lib.mkOption { 16 - type = lib.types.bool; 17 - description = "enable sower features"; 18 - default = true; 19 - }; 20 - 21 - jobs = { 22 - checks.enable = lib.mkEnableOption "building checks"; 23 - home-manager.enable = lib.mkEnableOption "building home-manager configurations"; 24 - nixos.enable = lib.mkEnableOption "building nixos configurations"; 25 - packages.enable = lib.mkEnableOption "building packages without services"; 26 - services.enable = lib.mkEnableOption "building packages with services"; 27 - }; 28 - }; 29 - }; 30 - 31 - config = { 32 - flake.flakeModules.sower = ./part.nix; 33 - 34 - flake.nixosConfigurations = { 35 - example = inputs.nixpkgs.lib.nixosSystem { 36 - system = "x86_64-linux"; 37 - modules = [ 38 - "${inputs.nixpkgs}/nixos/maintainers/scripts/incus/incus-container-image.nix" 39 - { system.stateVersion = "25.11"; } 40 - ]; 41 - }; 42 - 43 - example2 = inputs.nixpkgs.lib.nixosSystem { 44 - system = "x86_64-linux"; 45 - modules = [ 46 - "${inputs.nixpkgs}/nixos/maintainers/scripts/incus/incus-container-image.nix" 47 - { system.stateVersion = "25.11"; } 48 - ]; 49 - }; 50 - 51 - example-aarch64 = inputs.nixpkgs.lib.nixosSystem { 52 - system = "aarch64-linux"; 53 - modules = [ 54 - "${inputs.nixpkgs}/nixos/maintainers/scripts/incus/incus-container-image.nix" 55 - { system.stateVersion = "25.11"; } 56 - ]; 57 - }; 58 - }; 59 - 60 - sower.jobs = { 61 - home-manager.enable = lib.mkDefault true; 62 - nixos.enable = lib.mkDefault true; 63 - packages.enable = lib.mkDefault true; 64 - services.enable = lib.mkDefault true; 65 - }; 66 - 67 - perSystem = 68 - { 69 - self', 70 - system, 71 - ... 72 - }: 73 - let 74 - cfg = config.sower.jobs; 75 - is_service = builtins.hasAttr "sowerServices"; 76 - 77 - checks = lib.mapAttrs' (n: v: lib.nameValuePair "check/${n}" v) self'.checks; 78 - nixos = lib.pipe self.nixosConfigurations [ 79 - (lib.filterAttrs (_: nixosConfig: nixosConfig.pkgs.stdenv.hostPlatform.system == system)) 80 - (lib.mapAttrs' ( 81 - name: nixosConfig: 82 - lib.nameValuePair "nixos/${name}" ( 83 - nixosConfig.config.system.build.toplevel.overrideAttrs (old: { 84 - meta = (old.meta or { }) // { 85 - # TODO add a nixos module that can be included in the nixosConfig for setting values, e.g. seed.tags 86 - sower.seed = { 87 - inherit name; 88 - seed_type = "nixos"; 89 - }; 90 - }; 91 - }) 92 - ) 93 - )) 94 - ]; 95 - home-manager = lib.pipe (self.homeConfigurations or { }) [ 96 - (lib.filterAttrs (_: homeConfig: homeConfig.pkgs.stdenv.hostPlatform.system == system)) 97 - (lib.mapAttrs' ( 98 - name: homeConfig: 99 - lib.nameValuePair "home-manager/${name}" ( 100 - homeConfig.activationPackage.overrideAttrs (old: { 101 - meta = (old.meta or { }) // { 102 - sower.seed = { 103 - inherit name; 104 - seed_type = "home-manager"; 105 - }; 106 - }; 107 - }) 108 - ) 109 - )) 110 - ]; 111 - packages = lib.pipe self'.packages [ 112 - (lib.filterAttrs (_: v: !(is_service v))) 113 - (lib.mapAttrs' (n: v: lib.nameValuePair "package/${n}" v)) 114 - ]; 115 - services = lib.pipe self'.packages [ 116 - (lib.filterAttrs (_: v: (is_service v))) 117 - (lib.mapAttrs' (n: v: lib.nameValuePair "package/${n}" v)) 118 - ]; 119 - in 120 - { 121 - 122 - sowerJobs = lib.mkMerge [ 123 - (lib.mkIf cfg.checks.enable checks) 124 - (lib.mkIf cfg.home-manager.enable home-manager) 125 - (lib.mkIf cfg.nixos.enable nixos) 126 - (lib.mkIf cfg.packages.enable packages) 127 - (lib.mkIf cfg.services.enable services) 128 - ]; 129 - }; 130 - }; 7 + flake.flakeModules.sower = ./sower.nix; 8 + flake.lib = import ../sowerlib.nix { inherit inputs lib; }; 131 9 }
+50
nix/flake/sower.nix
··· 1 + { 2 + config, 3 + inputs, 4 + lib, 5 + self, 6 + ... 7 + }: 8 + let 9 + cfg = config.sower; 10 + sowerLib = import ../sowerlib.nix { inherit inputs lib; }; 11 + in 12 + { 13 + imports = [ 14 + ./sowerjobs.nix 15 + ]; 16 + 17 + options = { 18 + sower = { 19 + enable = lib.mkOption { 20 + type = lib.types.bool; 21 + description = "enable sower features"; 22 + default = true; 23 + }; 24 + 25 + checks.enable = lib.mkEnableOption "building checks"; 26 + devshells.enable = lib.mkEnableOption "building devshells"; 27 + home-manager.enable = lib.mkEnableOption "building home-manager configurations"; 28 + nixos.enable = lib.mkEnableOption "building nixos configurations"; 29 + packages.enable = lib.mkEnableOption "building packages without services"; 30 + }; 31 + }; 32 + 33 + config = lib.mkIf cfg.enable { 34 + sower = { 35 + home-manager.enable = lib.mkDefault true; 36 + nixos.enable = lib.mkDefault true; 37 + packages.enable = lib.mkDefault true; 38 + }; 39 + 40 + flake.sowerJobs = lib.mkMerge [ 41 + (lib.mkIf cfg.checks.enable (sowerLib.prefixFlakeSystemOutputs "checks" (self.checks or { }))) 42 + (lib.mkIf cfg.devshells.enable ( 43 + sowerLib.prefixFlakeSystemOutputs "devshells" (self.devShells or { }) 44 + )) 45 + (lib.mkIf cfg.nixos.enable (sowerLib.genNixosPackages (self.nixosConfigurations or { }))) 46 + (lib.mkIf cfg.home-manager.enable (sowerLib.genNixosPackages (self.homeConfigurations or { }))) 47 + (lib.mkIf cfg.packages.enable (sowerLib.prefixFlakeSystemOutputs "packages" (self.packages or { }))) 48 + ]; 49 + }; 50 + }
+82 -4
nix/lib.nix nix/sowerlib.nix
··· 1 1 { 2 2 inputs, 3 - ... 3 + lib, 4 + supportedSystems ? [ 5 + "x86_64-linux" 6 + "aarch64-linux" 7 + ], 4 8 }: 5 - { 6 - # generateUnitFiles creates a derivatioon with systemd units 9 + rec { 10 + addSowerMeta = 11 + { name, package }: 12 + lib.addMetaAttrs { 13 + # TODO add a nixos module that can be included in the nixosConfig for setting values, e.g. seed.tags 14 + sower.seed = { 15 + inherit name; 16 + seed_type = "nixos"; 17 + }; 18 + } package; 19 + 20 + genNixosPackages = 21 + nixosConfigurations: 22 + let 23 + nixos = 24 + system: 25 + lib.pipe nixosConfigurations [ 26 + (lib.filterAttrs (_: nixosConfig: nixosConfig.pkgs.stdenv.hostPlatform.system == system)) 27 + (lib.mapAttrs' ( 28 + name: nixosConfig: 29 + lib.nameValuePair "nixos/${name}" (addSowerMeta { 30 + inherit name; 31 + package = nixosConfigurations.${name}.config.system.build.toplevel; 32 + }) 33 + )) 34 + ]; 35 + in 36 + lib.listToAttrs ( 37 + lib.map (system: { 38 + name = system; 39 + value = nixos system; 40 + }) supportedSystems 41 + ); 42 + 43 + genHomeManagerPackages = 44 + homeConfigurations: 45 + let 46 + home = 47 + system: 48 + lib.pipe homeConfigurations [ 49 + (lib.filterAttrs (_: homeConfig: homeConfig.pkgs.stdenv.hostPlatform.system == system)) 50 + (lib.mapAttrs' ( 51 + name: homeConfig: 52 + lib.nameValuePair "home/${name}" (addSowerMeta { 53 + inherit name; 54 + package = homeConfigurations.${name}.activationPackage; 55 + }) 56 + )) 57 + ]; 58 + in 59 + lib.listToAttrs ( 60 + lib.map (system: { 61 + name = system; 62 + value = home system; 63 + }) supportedSystems 64 + ); 65 + 66 + prefixFlakeSystemOutputs = 67 + prefix: output: 68 + lib.pipe output [ 69 + lib.attrNames 70 + (lib.foldl ( 71 + acc: system: 72 + acc 73 + // ( 74 + let 75 + finalOutput = lib.mapAttrs' (name: p: lib.nameValuePair "${prefix}/${name}" p) output.${system}; 76 + in 77 + { 78 + "${system}" = finalOutput; 79 + } 80 + ) 81 + ) { }) 82 + ]; 83 + 84 + # generateUnitFiles creates a derivation with systemd units 7 85 # using the nixos module structure, but intended for using in 8 86 # a sower service along with sowerServicesHook 9 - flake.lib.generateUnitFiles = 87 + generateUnitFiles = 10 88 { 11 89 pkgs, 12 90 config,