nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{
2 lib,
3 pkgs,
4}:
5let
6 inherit (pkgs) buildPackages callPackage;
7
8 libconfig-generator = buildPackages.rustPlatform.buildRustPackage {
9 name = "libconfig-generator";
10 version = "0.1.0";
11 src = ./src;
12
13 passthru.updateScript = ./update.sh;
14
15 cargoLock.lockFile = ./src/Cargo.lock;
16 };
17
18 libconfig-validator =
19 buildPackages.runCommandCC "libconfig-validator"
20 {
21 buildInputs = with buildPackages; [ libconfig ];
22 }
23 ''
24 mkdir -p "$out/bin"
25 $CC -lconfig -x c - -o "$out/bin/libconfig-validator" ${./validator.c}
26 '';
27in
28{
29 format =
30 {
31 generator ? libconfig-generator,
32 validator ? libconfig-validator,
33 }:
34 {
35 inherit generator;
36
37 type =
38 with lib.types;
39 let
40 valueType =
41 (oneOf [
42 bool
43 int
44 float
45 str
46 path
47 (attrsOf valueType)
48 (listOf valueType)
49 ])
50 // {
51 description = "libconfig value";
52 };
53 in
54 attrsOf valueType;
55
56 lib = {
57 mkHex = value: {
58 _type = "hex";
59 inherit value;
60 };
61 mkOctal = value: {
62 _type = "octal";
63 inherit value;
64 };
65 mkFloat = value: {
66 _type = "float";
67 inherit value;
68 };
69 mkArray = value: {
70 _type = "array";
71 inherit value;
72 };
73 mkList = value: {
74 _type = "list";
75 inherit value;
76 };
77 };
78
79 generate =
80 name: value:
81 callPackage
82 (
83 {
84 stdenvNoCC,
85 libconfig-generator,
86 libconfig-validator,
87 writeText,
88 }:
89 stdenvNoCC.mkDerivation rec {
90 inherit name;
91
92 dontUnpack = true;
93 preferLocalBuild = true;
94
95 json = builtins.toJSON value;
96 passAsFile = [ "json" ];
97
98 strictDeps = true;
99 nativeBuildInputs = [ libconfig-generator ];
100 buildPhase = ''
101 runHook preBuild
102 libconfig-generator < $jsonPath > output.cfg
103 runHook postBuild
104 '';
105
106 doCheck = true;
107 nativeCheckInputs = [ libconfig-validator ];
108 checkPhase = ''
109 runHook preCheck
110 libconfig-validator output.cfg
111 runHook postCheck
112 '';
113
114 installPhase = ''
115 runHook preInstall
116 mv output.cfg $out
117 runHook postInstall
118 '';
119
120 passthru.json = writeText "${name}.json" json;
121 }
122 )
123 {
124 libconfig-generator = generator;
125 libconfig-validator = validator;
126 };
127 };
128}