1{
2 nixpkgs,
3 system,
4 self,
5}: let
6 envVar = name: let
7 var = builtins.getEnv name;
8 in
9 if var == ""
10 then throw "\$${name} must be defined, see docs/hacking.md for more details"
11 else var;
12in
13 nixpkgs.lib.nixosSystem {
14 inherit system;
15 modules = [
16 self.nixosModules.knot
17 self.nixosModules.spindle
18 ({
19 config,
20 pkgs,
21 ...
22 }: {
23 virtualisation = {
24 memorySize = 2048;
25 diskSize = 10 * 1024;
26 cores = 2;
27 forwardPorts = [
28 # ssh
29 {
30 from = "host";
31 host.port = 2222;
32 guest.port = 22;
33 }
34 # knot
35 {
36 from = "host";
37 host.port = 6000;
38 guest.port = 6000;
39 }
40 # spindle
41 {
42 from = "host";
43 host.port = 6555;
44 guest.port = 6555;
45 }
46 ];
47 };
48 services.getty.autologinUser = "root";
49 environment.systemPackages = with pkgs; [curl vim git];
50 systemd.tmpfiles.rules = let
51 u = config.services.tangled-knot.gitUser;
52 g = config.services.tangled-knot.gitUser;
53 in [
54 "d /var/lib/knot 0770 ${u} ${g} - -" # Create the directory first
55 "f+ /var/lib/knot/secret 0660 ${u} ${g} - KNOT_SERVER_SECRET=${envVar "TANGLED_VM_KNOT_SECRET"}"
56 ];
57 services.tangled-knot = {
58 enable = true;
59 motd = "Welcome to the development knot!\n";
60 server = {
61 secretFile = "/var/lib/knot/secret";
62 hostname = "localhost:6000";
63 listenAddr = "0.0.0.0:6000";
64 };
65 };
66 services.tangled-spindle = {
67 enable = true;
68 server = {
69 owner = envVar "TANGLED_VM_SPINDLE_OWNER";
70 hostname = "localhost:6555";
71 listenAddr = "0.0.0.0:6555";
72 dev = true;
73 secrets = {
74 provider = "sqlite";
75 };
76 };
77 };
78 })
79 ];
80 }