summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorJakub Stachurski <j.stachurski@student.utwente.nl>2025-11-08 19:21:05 +0100
committerJakub Stachurski <j.stachurski@student.utwente.nl>2025-11-08 19:29:27 +0100
commit0c9b217d36da3e29f23ece44b034fa98322daf28 (patch)
tree0ffeef2c9bb55439cba436bd08e1dfa620bd9c97 /modules
parent72a532244594a370f597babf700fb013123d8c17 (diff)
Remote build support fully modularized
Diffstat (limited to 'modules')
-rw-r--r--modules/default.nix1
-rw-r--r--modules/remote-builder.nix70
2 files changed, 71 insertions, 0 deletions
diff --git a/modules/default.nix b/modules/default.nix
index 786c440..dc1d2f6 100644
--- a/modules/default.nix
+++ b/modules/default.nix
@@ -5,6 +5,7 @@
./gpg.nix
./btrfs.nix
./vpn.nix
+ ./remote-builder.nix
];
}
diff --git a/modules/remote-builder.nix b/modules/remote-builder.nix
new file mode 100644
index 0000000..ddd9a99
--- /dev/null
+++ b/modules/remote-builder.nix
@@ -0,0 +1,70 @@
+{config, lib,...}:
+let
+cfg = config.addons.remote_builder;
+in
+{
+ options.addons.remote_builder = {
+ enable = lib.mkEnableOption "Enable remote builder support";
+ allowedKeyFiles = lib.mkOption {
+ default = [];
+ example = [../secrets/example.pub];
+ description = "Public key files that are allowed on the remote builder";
+ };
+ allowedKeys = lib.mkOption {
+ default = [];
+ example = ["ssh-ed25519 ... user@example.com"];
+ description = "Public keys that are allowed on the remote builder";
+ };
+ emulatedSystems = lib.mkOption {
+ default = [];
+ example = ["aarch64-linux"]; # TODO: This probably has a nice type that could be used
+ description = "Allow the remote builder to emultate builds for certain architectures";
+ };
+ openFirewall = lib.mkEnableOption "Forces the ssh port open for the remote builder";
+ };
+
+ config = lib.mkIf cfg.enable (lib.mkMerge [
+ {
+ users.users.remotebuild = {
+ isSystemUser = true;
+ group = "remotebuild";
+ useDefaultShell = true;
+ # Add keys to remotebuild user.
+ openssh.authorizedKeys = {
+ keyFiles = cfg.allowedKeyFiles;
+ keys = cfg.allowedKeys;
+ };
+ };
+
+ users.groups.remotebuild = {};
+ nix = {
+ nrBuildUsers = 64;
+ settings = {
+ trusted-users = [ "remotebuild" ];
+
+ min-free = 10 * 1024 * 1024;
+ max-free = 200 * 1024 * 1024;
+
+ max-jobs = "auto";
+ cores = 8;
+ };
+ };
+
+ boot.binfmt.emulatedSystems = cfg.emulatedSystems;
+
+
+ # TODO: Make a good default module for ssh.
+ services.openssh = {
+ enable = true;
+ settings.AllowUsers = ["remotebuild"];
+ };
+ }
+
+ # Open firewall for ssh if not open already, not really recommended unless the server is meant to be public.
+ (lib.mkIf cfg.openFirewall {
+ services.openssh.openFirewall = lib.mkForce true;
+ })
+ ]);
+
+
+}