compose.nix (1347B)
1 { lib }: 2 { 3 serviceName, 4 package, 5 nativeInputs, 6 extraPackages ? { }, 7 checks ? { }, 8 apps ? { }, 9 devShells ? { }, 10 }: 11 assert lib.assertMsg ( 12 builtins.isString serviceName && builtins.match "^[a-z][a-z0-9_]*$" serviceName != null 13 ) "serviceName must be a lowercase snake-case identifier"; 14 assert lib.assertMsg (lib.isDerivation package) "package must be a derivation"; 15 assert lib.assertMsg ( 16 builtins.isAttrs nativeInputs 17 && (nativeInputs.schema or null) == "radroots.service.native-inputs.v1" 18 && builtins.isList (nativeInputs.nativeBuildInputs or null) 19 && builtins.isList (nativeInputs.buildInputs or null) 20 && builtins.isAttrs (nativeInputs.environment or null) 21 ) "nativeInputs must come from mkNativeInputs"; 22 assert lib.assertMsg (builtins.isAttrs extraPackages) "extraPackages must be an attribute set"; 23 assert lib.assertMsg ( 24 !(builtins.hasAttr "default" extraPackages) 25 ) "extraPackages must not replace packages.default"; 26 assert lib.assertMsg (builtins.isAttrs checks) "checks must be an attribute set"; 27 assert lib.assertMsg (builtins.isAttrs apps) "apps must be an attribute set"; 28 assert lib.assertMsg (builtins.isAttrs devShells) "devShells must be an attribute set"; 29 { 30 inherit 31 apps 32 checks 33 devShells 34 nativeInputs 35 serviceName 36 ; 37 packages = { 38 default = package; 39 } 40 // extraPackages; 41 }