@highstate/nixos 0.9.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ {
2
+ "sourceHashes": {
3
+ "./dist/inline-flake/index.js": 3898384711,
4
+ "./dist/inline-module/index.js": 2783981422,
5
+ "./dist/system/index.js": 2580625128
6
+ }
7
+ }
@@ -0,0 +1,61 @@
1
+ import { join } from 'node:path';
2
+ import { writeFile, access } from 'node:fs/promises';
3
+ import { MaterializedFolder, Command } from '@highstate/common';
4
+ import { MaterializedRepository } from '@highstate/git';
5
+ import { nixos } from '@highstate/library';
6
+ import { forUnit, toPromise } from '@highstate/pulumi';
7
+
8
+ // src/inline-flake/index.ts
9
+ var { name, args, inputs, outputs } = forUnit(nixos.inlineFlake);
10
+ var { repositories, folders } = await toPromise(inputs);
11
+ var flakeRepo = await MaterializedRepository.create(args.flakeName ?? name);
12
+ var firstOpenBrace = args.code.indexOf("{\n");
13
+ if (firstOpenBrace === -1) {
14
+ firstOpenBrace = args.code.indexOf("{");
15
+ }
16
+ if (firstOpenBrace === -1) {
17
+ throw new Error("The provided code does not contain a valid flake.nix structure.");
18
+ }
19
+ var codeParts = [args.code.slice(0, firstOpenBrace + 1).trim(), ""];
20
+ var hasFlake = async (folder) => {
21
+ try {
22
+ await access(join(folder.path, "flake.nix"));
23
+ return true;
24
+ } catch {
25
+ return false;
26
+ }
27
+ };
28
+ for (const inputRepo of repositories) {
29
+ const repo = await MaterializedRepository.open(inputRepo, flakeRepo);
30
+ if (await hasFlake(repo.folder)) {
31
+ codeParts.push(
32
+ `inputs.${inputRepo.folder.meta.name}.url = "git+file:./${repo.entity.folder.meta.name}";`
33
+ );
34
+ }
35
+ }
36
+ for (const inputFolder of folders) {
37
+ const folder = await MaterializedFolder.open(inputFolder, flakeRepo.folder);
38
+ if (await hasFlake(folder)) {
39
+ codeParts.push(`inputs.${inputFolder.meta.name}.url = "path:./${folder.entity.meta.name}";`);
40
+ }
41
+ await flakeRepo.git.add(folder.entity.meta.name);
42
+ }
43
+ codeParts.push("", args.code.slice(firstOpenBrace + 1).trim(), "");
44
+ await writeFile(join(flakeRepo.path, "flake.nix"), codeParts.join("\n"));
45
+ await flakeRepo.git.add("flake.nix");
46
+ await toPromise(
47
+ new Command("update-flake", {
48
+ host: "local",
49
+ create: "nix flake update",
50
+ cwd: flakeRepo.path
51
+ }).stdout
52
+ );
53
+ await flakeRepo.git.add("flake.lock");
54
+ await flakeRepo.git.commit("Update flake.nix");
55
+ var inline_flake_default = outputs({
56
+ repository: await flakeRepo.pack()
57
+ });
58
+
59
+ export { inline_flake_default as default };
60
+ //# sourceMappingURL=index.js.map
61
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/inline-flake/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { join } from \"node:path\"\nimport { writeFile, access } from \"node:fs/promises\"\nimport { Command, MaterializedFolder } from \"@highstate/common\"\nimport { MaterializedRepository } from \"@highstate/git\"\nimport { nixos } from \"@highstate/library\"\nimport { forUnit, toPromise } from \"@highstate/pulumi\"\n\nconst { name, args, inputs, outputs } = forUnit(nixos.inlineFlake)\n\nconst { repositories, folders } = await toPromise(inputs)\n\nconst flakeRepo = await MaterializedRepository.create(args.flakeName ?? name)\n\nlet firstOpenBrace = args.code.indexOf(\"{\\n\")\nif (firstOpenBrace === -1) {\n firstOpenBrace = args.code.indexOf(\"{\")\n}\n\nif (firstOpenBrace === -1) {\n throw new Error(\"The provided code does not contain a valid flake.nix structure.\")\n}\n\nconst codeParts = [args.code.slice(0, firstOpenBrace + 1).trim(), \"\"]\n\nconst hasFlake = async (folder: MaterializedFolder) => {\n try {\n await access(join(folder.path, \"flake.nix\"))\n return true\n } catch {\n return false\n }\n}\n\nfor (const inputRepo of repositories) {\n const repo = await MaterializedRepository.open(inputRepo, flakeRepo)\n\n if (await hasFlake(repo.folder)) {\n codeParts.push(\n `inputs.${inputRepo.folder.meta.name}.url = \"git+file:./${repo.entity.folder.meta.name}\";`,\n )\n }\n}\n\nfor (const inputFolder of folders) {\n const folder = await MaterializedFolder.open(inputFolder, flakeRepo.folder)\n\n if (await hasFlake(folder)) {\n codeParts.push(`inputs.${inputFolder.meta.name}.url = \"path:./${folder.entity.meta.name}\";`)\n }\n\n await flakeRepo.git.add(folder.entity.meta.name)\n}\n\ncodeParts.push(\"\", args.code.slice(firstOpenBrace + 1).trim(), \"\")\n\nawait writeFile(join(flakeRepo.path, \"flake.nix\"), codeParts.join(\"\\n\"))\nawait flakeRepo.git.add(\"flake.nix\")\n\nawait toPromise(\n new Command(\"update-flake\", {\n host: \"local\",\n create: \"nix flake update\",\n cwd: flakeRepo.path,\n }).stdout,\n)\n\nawait flakeRepo.git.add(\"flake.lock\")\nawait flakeRepo.git.commit(\"Update flake.nix\")\n\nexport default outputs({\n repository: await flakeRepo.pack(),\n})\n"]}
@@ -0,0 +1,34 @@
1
+ import { nixos } from '@highstate/library';
2
+ import { forUnit, toPromise } from '@highstate/pulumi';
3
+
4
+ // src/inline-module/index.ts
5
+ var { name, args, inputs, outputs } = forUnit(nixos.inlineModule);
6
+ var moduleName = args.moduleName ?? name;
7
+ var { files, folders } = await toPromise(inputs);
8
+ var inline_module_default = outputs({
9
+ folder: {
10
+ meta: {
11
+ name: moduleName
12
+ },
13
+ content: {
14
+ type: "embedded",
15
+ files: [
16
+ ...files,
17
+ {
18
+ meta: {
19
+ name: "default.nix"
20
+ },
21
+ content: {
22
+ type: "embedded",
23
+ value: args.code
24
+ }
25
+ }
26
+ ],
27
+ folders
28
+ }
29
+ }
30
+ });
31
+
32
+ export { inline_module_default as default };
33
+ //# sourceMappingURL=index.js.map
34
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/inline-module/index.ts"],"names":[],"mappings":";;;;AAGA,IAAM,EAAE,MAAM,IAAM,EAAA,MAAA,EAAQ,SAAY,GAAA,OAAA,CAAQ,MAAM,YAAY,CAAA;AAElE,IAAM,UAAA,GAAa,KAAK,UAAc,IAAA,IAAA;AACtC,IAAM,EAAE,KAAO,EAAA,OAAA,EAAY,GAAA,MAAM,UAAU,MAAM,CAAA;AAEjD,IAAO,wBAAQ,OAAQ,CAAA;AAAA,EACrB,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA;AAAA,MACJ,IAAM,EAAA;AAAA,KACR;AAAA,IACA,OAAS,EAAA;AAAA,MACP,IAAM,EAAA,UAAA;AAAA,MACN,KAAO,EAAA;AAAA,QACL,GAAG,KAAA;AAAA,QACH;AAAA,UACE,IAAM,EAAA;AAAA,YACJ,IAAM,EAAA;AAAA,WACR;AAAA,UACA,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,UAAA;AAAA,YACN,OAAO,IAAK,CAAA;AAAA;AACd;AACF,OACF;AAAA,MACA;AAAA;AACF;AAEJ,CAAC","file":"index.js","sourcesContent":["import { nixos } from \"@highstate/library\"\nimport { forUnit, toPromise } from \"@highstate/pulumi\"\n\nconst { name, args, inputs, outputs } = forUnit(nixos.inlineModule)\n\nconst moduleName = args.moduleName ?? name\nconst { files, folders } = await toPromise(inputs)\n\nexport default outputs({\n folder: {\n meta: {\n name: moduleName,\n },\n content: {\n type: \"embedded\",\n files: [\n ...files,\n {\n meta: {\n name: \"default.nix\",\n },\n content: {\n type: \"embedded\",\n value: args.code,\n },\n },\n ],\n folders,\n },\n },\n})\n"]}
@@ -0,0 +1,39 @@
1
+ import { MaterializedFile, Command, l3EndpointToString, createSshTerminal } from '@highstate/common';
2
+ import { nixos } from '@highstate/library';
3
+ import { forUnit, toPromise } from '@highstate/pulumi';
4
+ import { MaterializedRepository } from '@highstate/git';
5
+
6
+ // src/system/index.ts
7
+ var { name, args, inputs, outputs } = forUnit(nixos.system);
8
+ var { repository, server } = await toPromise(inputs);
9
+ if (!server.ssh) {
10
+ throw new Error("Server must have an SSH endpoint defined");
11
+ }
12
+ var repo = await MaterializedRepository.open(repository);
13
+ var privateKey = await MaterializedFile.create(
14
+ "private-key",
15
+ server.ssh.keyPair.privateKey,
16
+ 384
17
+ );
18
+ var system = args.system ?? server.hostname;
19
+ await toPromise(
20
+ new Command(name, {
21
+ host: "local",
22
+ create: [
23
+ "nixos-anywhere",
24
+ `--flake ${repo.path}#${system}`,
25
+ `-i ${privateKey.path}`,
26
+ `--target-host ${server.ssh.user}@${l3EndpointToString(server.ssh.endpoints[0])}`,
27
+ `--ssh-port ${server.ssh.endpoints[0].port}`,
28
+ "--copy-host-keys"
29
+ ]
30
+ }).stdout
31
+ );
32
+ var system_default = outputs({
33
+ server: inputs.server,
34
+ $terminals: [createSshTerminal(server.ssh)]
35
+ });
36
+
37
+ export { system_default as default };
38
+ //# sourceMappingURL=index.js.map
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/system/index.ts"],"names":[],"mappings":";;;;;;AAKA,IAAM,EAAE,MAAM,IAAM,EAAA,MAAA,EAAQ,SAAY,GAAA,OAAA,CAAQ,MAAM,MAAM,CAAA;AAE5D,IAAM,EAAE,UAAY,EAAA,MAAA,EAAW,GAAA,MAAM,UAAU,MAAM,CAAA;AAErD,IAAI,CAAC,OAAO,GAAK,EAAA;AACf,EAAM,MAAA,IAAI,MAAM,0CAA0C,CAAA;AAC5D;AAEA,IAAM,IAAO,GAAA,MAAM,sBAAuB,CAAA,IAAA,CAAK,UAAU,CAAA;AAEzD,IAAM,UAAA,GAAa,MAAM,gBAAiB,CAAA,MAAA;AAAA,EACxC,aAAA;AAAA,EACA,MAAA,CAAO,IAAI,OAAS,CAAA,UAAA;AAAA,EACpB;AACF,CAAA;AAEA,IAAM,MAAA,GAAS,IAAK,CAAA,MAAA,IAAU,MAAO,CAAA,QAAA;AAErC,MAAM,SAAA;AAAA,EACJ,IAAI,QAAQ,IAAM,EAAA;AAAA,IAChB,IAAM,EAAA,OAAA;AAAA,IACN,MAAQ,EAAA;AAAA,MACN,gBAAA;AAAA,MACA,CAAW,QAAA,EAAA,IAAA,CAAK,IAAI,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,MAC9B,CAAA,GAAA,EAAM,WAAW,IAAI,CAAA,CAAA;AAAA,MACrB,CAAA,cAAA,EAAiB,MAAO,CAAA,GAAA,CAAI,IAAI,CAAA,CAAA,EAAI,kBAAmB,CAAA,MAAA,CAAO,GAAI,CAAA,SAAA,CAAU,CAAC,CAAC,CAAC,CAAA,CAAA;AAAA,MAC/E,cAAc,MAAO,CAAA,GAAA,CAAI,SAAU,CAAA,CAAC,EAAE,IAAI,CAAA,CAAA;AAAA,MAC1C;AAAA;AACF,GACD,CAAE,CAAA;AACL,CAAA;AAEA,IAAO,iBAAQ,OAAQ,CAAA;AAAA,EACrB,QAAQ,MAAO,CAAA,MAAA;AAAA,EAEf,UAAY,EAAA,CAAC,iBAAkB,CAAA,MAAA,CAAO,GAAG,CAAC;AAC5C,CAAC","file":"index.js","sourcesContent":["import { Command, createSshTerminal, l3EndpointToString, MaterializedFile } from \"@highstate/common\"\nimport { nixos } from \"@highstate/library\"\nimport { forUnit, toPromise } from \"@highstate/pulumi\"\nimport { MaterializedRepository } from \"@highstate/git\"\n\nconst { name, args, inputs, outputs } = forUnit(nixos.system)\n\nconst { repository, server } = await toPromise(inputs)\n\nif (!server.ssh) {\n throw new Error(\"Server must have an SSH endpoint defined\")\n}\n\nconst repo = await MaterializedRepository.open(repository)\n\nconst privateKey = await MaterializedFile.create(\n \"private-key\",\n server.ssh.keyPair!.privateKey,\n 0o600,\n)\n\nconst system = args.system ?? server.hostname\n\nawait toPromise(\n new Command(name, {\n host: \"local\",\n create: [\n \"nixos-anywhere\",\n `--flake ${repo.path}#${system}`,\n `-i ${privateKey.path}`,\n `--target-host ${server.ssh.user}@${l3EndpointToString(server.ssh.endpoints[0])}`,\n `--ssh-port ${server.ssh.endpoints[0].port}`,\n \"--copy-host-keys\",\n ],\n }).stdout,\n)\n\nexport default outputs({\n server: inputs.server,\n\n $terminals: [createSshTerminal(server.ssh)],\n})\n"]}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@highstate/nixos",
3
+ "version": "0.9.16",
4
+ "type": "module",
5
+ "files": [
6
+ "dist"
7
+ ],
8
+ "exports": {
9
+ "./inline-flake": "./dist/inline-flake/index.js",
10
+ "./inline-module": "./dist/inline-module/index.js",
11
+ "./system": "./dist/system/index.js"
12
+ },
13
+ "publishConfig": {
14
+ "access": "public"
15
+ },
16
+ "scripts": {
17
+ "build": "highstate build"
18
+ },
19
+ "dependencies": {
20
+ "@highstate/common": "^0.9.16",
21
+ "@highstate/contract": "^0.9.16",
22
+ "@highstate/git": "^0.9.16",
23
+ "@highstate/library": "^0.9.16",
24
+ "@highstate/pulumi": "^0.9.16",
25
+ "@pulumi/kubernetes": "^4.18.0",
26
+ "@pulumi/pulumi": "^3.181.0",
27
+ "remeda": "^2.21.3"
28
+ },
29
+ "devDependencies": {
30
+ "@highstate/cli": "^0.9.16"
31
+ },
32
+ "gitHead": "458d6f1f9f6d4aec0ba75a2b2c4c01408cb9c8df"
33
+ }