summary refs log tree commit diff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/klipper.nix73
1 files changed, 73 insertions, 0 deletions
diff --git a/modules/klipper.nix b/modules/klipper.nix
new file mode 100644
index 0000000..f23e66c
--- /dev/null
+++ b/modules/klipper.nix
@@ -0,0 +1,73 @@
+{ me, pkgs, ... }:
+
+let
+  moonrakerPort = 7125;
+  klipperDir = "/srv/klipper";
+
+  serial = "/dev/ttyUSB0";
+
+  user = "klipper";
+  group = "klipper";
+
+  klipper-config = pkgs.runCommand "klipper-printer.cfg" {} ''
+    cat \
+      ${../assets/printer/printer.cfg} \
+      ${../assets/printer/mainsail.cfg} \
+      > $out
+  '';
+in
+{
+  users.users.klipper = {
+    isSystemUser = true;
+    description = "Klipper user";
+    home = "/srv/klipper";
+    inherit group;
+    extraGroups = [ "dialout" ]; # for serial access
+  };
+  users.groups.klipper = {};
+
+  services = {
+    klipper = {
+      enable = true;
+      inherit user group;
+
+      firmwares.mcu = {
+        enable = true;
+        enableKlipperFlash = true;
+        inherit serial;
+        configFile = ../assets/printer/firmware.cfg;
+      };
+
+      configFile = klipper-config;
+      # will change to just `configDir` in 25.05,
+      # update it then.
+      mutableConfig = true;
+      mutableConfigFolder = "${klipperDir}/config";
+    };
+
+    moonraker = {
+      enable = true;
+      inherit user group;
+
+      address = me.tailscale.ip;
+      port = moonrakerPort;
+
+      stateDir = "${klipperDir}/moonraker";
+      settings = {
+        authorization = {
+          cors_domains = [
+            "https://app.fluidd.xyz"
+            "https://my.mainsail.xyz"
+            "https://*.rnrd.fyi"
+          ];
+
+          trusted_clients = [
+            "10.0.0.0/8"
+            "127.0.0.1/24"
+            "192.168.178.0/24"
+          ];
+        };
+      };
+    };
+  };
+}