summary refs log tree commit diff
path: root/modules/klipper.nix
blob: f23e66cecd6472be8e0139edf03de833570130c3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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"
          ];
        };
      };
    };
  };
}