feat(sakuya): klipper and motion

This commit is contained in:
arcnmx 2024-09-07 14:33:04 -07:00
parent 7e7d6b01f7
commit a02778b413
10 changed files with 214 additions and 127 deletions

View file

@ -1,53 +1,105 @@
{ {
config, config,
gensokyo-zone,
lib, lib,
access, access,
... ...
}: let }: let
inherit (gensokyo-zone.lib) mapDefaults;
inherit (lib.modules) mkIf mkDefault; inherit (lib.modules) mkIf mkDefault;
inherit (lib.attrsets) mapAttrs; inherit (lib.attrsets) mapAttrs mergeAttrsList;
inherit (config.services) nginx; inherit (config.services) nginx;
system = access.systemForServiceId "kitchen"; system = access.systemForServiceId "kitchen";
inherit (system.exports.services) motion; inherit (system.exports.services) motion;
upstreamNameKitchen = "kitchencam'access";
upstreamNamePrinter = "printercam'access";
in { in {
config.services.nginx = { config.services.nginx = {
upstreams' = {
${upstreamNameKitchen}.servers.service = {
accessService = {
name = "motion";
id = "kitchen";
};
};
"${upstreamNameKitchen}'stream".servers.service = {
accessService = {
inherit (nginx.upstreams'.${upstreamNameKitchen}.servers.service.accessService) name id;
port = "stream";
};
};
${upstreamNamePrinter}.servers.service = {
accessService = {
name = "motion";
id = "printercam";
};
};
"${upstreamNamePrinter}'stream".servers.service = {
accessService = {
inherit (nginx.upstreams'.${upstreamNamePrinter}.servers.service.accessService) name id;
port = "stream";
};
};
};
virtualHosts = let virtualHosts = let
# TODO: use upstreams for this! printerCams = [ 2 ];
url = access.proxyUrlFor { kitchenCams = [ 1 3 ];
inherit system; mkSubFilter = port: path: ''
service = motion; sub_filter '${port.protocol}://$host:${toString port.port}/' '${path}';
};
streamUrl = access.proxyUrlFor {
inherit system;
service = motion;
portName = "stream";
};
mkSubFilter = port: ''
sub_filter '${port.protocol}://$host:${toString port.port}/' '/';
''; '';
extraConfig = '' streamConfig = ''
proxy_redirect off; proxy_redirect off;
proxy_buffering off; proxy_buffering off;
set $args ""; set $args "";
''; '';
locations = { # TODO: accept-encoding to nothing so the response isn't compressed?
"/" = { subFilterConfig = path: ''
proxyPass = mkDefault url; sub_filter_once off;
extraConfig = '' ${mkSubFilter motion.ports.stream "/"}
sub_filter_once off; ${mkSubFilter motion.ports.default path}
${mkSubFilter motion.ports.stream} '';
${mkSubFilter motion.ports.default} mkStreamLocation = upstreamName: cam: {
''; "~ ^/${toString cam}/(stream|motion|substream|current|source|status\\.json)$" = {
}; proxy = {
"~ ^/[0-9]+/(stream|motion|substream|current|source|status\\.json)$" = { enable = true;
proxyPass = mkDefault streamUrl; upstream = mkDefault "${upstreamName}'stream";
inherit extraConfig; path = "";
}; };
"~ ^/(stream|motion|substream|current|source|cameras\\.json|status\\.json)$" = { extraConfig = streamConfig;
proxyPass = mkDefault streamUrl;
inherit extraConfig;
}; };
}; };
streamLocations =
map (mkStreamLocation upstreamNamePrinter) printerCams
++ map (mkStreamLocation upstreamNameKitchen) kitchenCams;
locations = {
"/" = {
return = "302 /kitchen/";
};
"/kitchen" = {
proxy = {
enable = true;
upstream = mkDefault upstreamNameKitchen;
path = "/";
};
extraConfig = subFilterConfig "/kitchen/";
};
"/printer" = {
proxy = {
enable = true;
upstream = mkDefault upstreamNamePrinter;
path = "/";
};
extraConfig = subFilterConfig "/printer/";
};
"~ ^/(stream|motion|substream|current|source|cameras\\.json|status\\.json)$" = {
proxy = {
enable = true;
upstream = mkDefault "${upstreamNameKitchen}'stream";
path = "";
};
extraConfig = streamConfig;
};
} // mergeAttrsList streamLocations;
listen' = { listen' = {
http = {}; http = {};
https.ssl = true; https.ssl = true;
@ -70,7 +122,9 @@ in {
locations = mapAttrs (name: location: locations = mapAttrs (name: location:
location location
// { // {
proxyPass = mkDefault nginx.virtualHosts.kitchencam.locations.${name}.proxyPass; ${if location ? proxy then "proxy" else null} = location.proxy // (mapDefaults {
inherit (nginx.virtualHosts.kitchencam.locations.${name}.proxy) upstream path;
});
}) })
locations; locations;
}; };

View file

@ -3,7 +3,7 @@
lib, lib,
... ...
}: let }: let
inherit (lib.modules) mkIf mkMerge mkAfter mkDefault; inherit (lib.modules) mkIf mkMerge mkDefault;
name.shortServer = mkDefault "print"; name.shortServer = mkDefault "print";
upstreamName = "moonraker'access"; upstreamName = "moonraker'access";
upstreamNameMotion = "moonraker'motion"; upstreamNameMotion = "moonraker'motion";
@ -30,6 +30,7 @@ in {
servers.service = { servers.service = {
accessService = { accessService = {
name = "motion"; name = "motion";
id = "printercam";
port = "stream"; port = "stream";
}; };
}; };
@ -52,6 +53,9 @@ in {
headers.set.Cache-Control = "no-store, no-cache, must-revalidate"; headers.set.Cache-Control = "no-store, no-cache, must-revalidate";
}; };
"/webcam" = { "/webcam" = {
return = "302 /webcam/stream";
};
"/webcam/stream" = {
proxy = { proxy = {
enable = true; enable = true;
upstream = upstreamNameMotion; upstream = upstreamNameMotion;
@ -62,6 +66,17 @@ in {
set $args ""; set $args "";
''; '';
}; };
"/webcam/current" = {
proxy = {
enable = true;
upstream = upstreamNameMotion;
path = "/2/current";
};
extraConfig = ''
proxy_buffering off;
set $args "";
'';
};
"/websocket" = { "/websocket" = {
proxy = { proxy = {
enable = true; enable = true;
@ -88,6 +103,7 @@ in {
{ {
"/index.html".vouch.requireAuth = true; "/index.html".vouch.requireAuth = true;
"/webcam".vouch.requireAuth = true; "/webcam".vouch.requireAuth = true;
"/webcam/current".vouch.requireAuth = true;
"/websocket".vouch.requireAuth = true; "/websocket".vouch.requireAuth = true;
"@moonraker".vouch.requireAuth = true; "@moonraker".vouch.requireAuth = true;
} }

View file

@ -16,10 +16,13 @@ in {
fluidd = { fluidd = {
enable = mkDefault true; enable = mkDefault true;
hostName = mkDefault "print.local.${domain}"; # TODO: serverName? hostName = mkDefault "print.local.${domain}"; # TODO: serverName?
nginx.locations."/webcam".proxyPass = let nginx.locations = let
inherit (config.services.motion.cameras) printercam; inherit (config.services.motion.cameras) printercam;
inherit (printercam.settings) camera_id; inherit (printercam.settings) camera_id;
in "https://kitchen.local.${domain}/${toString camera_id}/stream"; in {
"/webcam".proxyPass = "https://kitchen.local.${domain}/${toString camera_id}/stream";
"/webcam/current".proxyPass = "https://kitchen.local.${domain}/${toString camera_id}/current";
};
}; };
nginx = mkIf cfg.enable { nginx = mkIf cfg.enable {
proxied.enable = true; proxied.enable = true;
@ -62,6 +65,9 @@ in {
"/webcam" = { "/webcam" = {
inherit (virtualHost.locations."/webcam") proxyPass; inherit (virtualHost.locations."/webcam") proxyPass;
}; };
"/webcam/current" = {
inherit (virtualHost.locations."/webcam/current") proxyPass;
};
"~ ^/(printer|api|access|machine|server)/" = { "~ ^/(printer|api|access|machine|server)/" = {
proxy = { proxy = {
enable = true; enable = true;

View file

@ -3,7 +3,7 @@
lib, lib,
... ...
}: let }: let
inherit (lib.modules) mkIf mkAfter mkDefault; inherit (lib.modules) mkIf mkDefault;
inherit (config.services) octoprint; inherit (config.services) octoprint;
cfg = config.services.klipper; cfg = config.services.klipper;
in { in {

View file

@ -26,20 +26,20 @@ in {
port = 7125; # it's the default but i'm specifying it anyway port = 7125; # it's the default but i'm specifying it anyway
settings = { settings = {
"include secrets.conf" = {}; "include secrets.conf" = {};
octoprint_compat = {}; octoprint_compat = {
stream_url = "/webcam/stream";
webcam_enabled = true;
};
history = {}; history = {};
"webcam printer" = let "webcam printer" = {
inherit (config.services.motion.cameras) printercam;
inherit (printercam.settings) camera_id;
in {
location = "printer"; location = "printer";
enabled = true; enabled = true;
service = "mjpegstreamer"; service = "mjpegstreamer";
icon = "mdiPrinter3d"; icon = "mdiPrinter3d";
target_fps = 5; target_fps = 5;
target_fps_idle = 1; target_fps_idle = 1;
stream_url = "https://kitchen.local.${domain}/${toString camera_id}/stream"; stream_url = "/webcam/stream";
snapshot_url = "https://kitchen.local.${domain}/${toString camera_id}/current"; snapshot_url = "/webcam/current";
aspect_ratio = "16:9"; aspect_ratio = "16:9";
}; };
authorization = { authorization = {

View file

@ -1,4 +1,4 @@
moonraker_cfg: ENC[AES256_GCM,data:OKdXSHhblGboCSvnZVIe+hQ1gU8uTFgZenaAPtCNDeazWSTHCw5j41XbzoK1Ck5Bt4WQkp8dW/A3VVlKVRVkMq1S1Einl7lUcgDBMLetcUrLO23CSaqEdvwJWHDKiU9y1JkzpKpu1RD0kNKl3ksoHULpxJpS36V0hxL61TJkDgBw+Z11fIsy6ZS3FmKosaRBZj9UIjrVeGqtUB4/WTol2uaghDC6efiHoByXkN5IN47I18G0R07apZ8YHMt5kQJH4X3QjzI2qPkzslp7yDziwcV+5gsLUDelKJXZ8aNHiofleORWdNb+iwUEQLOf93g+gLHUFzoOpnFkSOscH/DLJ6913YCrU8FdJ4hGPmGupwrLpaAdQL347QUFYlmVUELK/ucIiP0h2v5MX5qR3zBbv+mWb8bkmaYZ+pF97vEDzT3MPFABUvj0zaiiV86CG0wuXxkcLSOwKq2J3oSjCfZmTFc803xn92ioNr+hzdMZcRVttx70Z+I1otrF+awnxnFYOOHS3ax5WKWrGj+CZ2ZYzWYk4VmIb1vgFk85WOv3zVSbpBnEQPyYn4ELBglmfaIYfbBO4guCO4dKiXVeI6Czi+yMe5+eKmdaKWDEHHyHksFYgYktEkzkrN6VZFOTOuEVLtsZIUCzSBS56hnGDQCwsgeUhtQbcrTFM49Y73/qA6yfWCouIlTJHYu6eON+aspV6ztDkWnk6JOj1n6SExzGNSQSX5JhLUiVCTJme8tXF1v5KQRX94Q66MJOrnO8VCU9s6BSMuu88qax6n2hhnsASeKXrp5j/fnEtCb3xlEj2oIOkNfssTz3l7TwOmevX+f9e6410+9r2UfnMdUKXP7VnwXEyiRowbI0Wq/kzZyzaDnVSXs+zBET17VVn6lnS4IoTsN/S6nJ9QCicJ1umLnHId2I/gTMVX+wyU1pItFDFFn4fuRd3vQKWruRe2QHJJyw9lJoF2Th9dq0oQ96cGYh+bb09UsT/feZ1f9rywhJ+KO1F0+SMQCLsWc8zAA1sIWyRiXKtUUkXtKgJz9XZGtZNReafZPtIm9EEGftUyYlHzKaWmpSlSEoKhp/1wFfnlvYGh3fpdQV2s+aH3q26RqZX4EPVdlA2Rb3xNXPRCW0Hc1EG4cdQT5rVLLtVvsXN4N5WH1+yy6uiv3DYZAKrRmFh1bIGnrFeRDcXRrD7KctsPV/6ZrKzvVHhLorQZaSjdTY94PfqKiMWxiKg6EStC/vzE9RtHh3GVNW2w+azZQ7NR0waMbKzJe/OSfSsu/Yey8N6wETgRTT5oA2FfVZlGzlzdbDjDapy4KqdJ3Z5ELSfmMUktV26GLUI9IfGq4PWcexkOJSQjsxZQoMmeCe8QuU27FQdBJmW0XVqfhvj9mA0C/3d0PX7d0xzYIkFpTuxhNlylEAOmUmw7vsW6KouzIHpFMEs+0gyTlaE9wQB62q6od1+bUUoFG6tu87yHa6Q0cIabf0BkZytAm8YB7Eyzv7hpS4K979POw14yz+LN5rIIR2aKZo3j61Oh4EKP+5JlJ1juO8R7nDPzTjQkAVoGJSHwWC3OvKy7b0wGOcXaPdX4taQwzkX7XNGvFj54O5KmM9ShlSBqDhca+IL2cMJut+FuTMjf7kJ/73f1D9ugAk1Mh4IIXseZ7e0x7vcDo0nDoOpNJ4h2QWN0I9aGKq46sro0O8XBczZ506jn7yL336w2xSFWSIQekuZG/sH5EljG+1zbi1NvC6IS6H0TmHcqCEA+wUAGqj4mSxIZ1joLtXdxBseCSQCx0FPEoGlwTinoD1w3b6WxGB9T2Y7fITB3f1OHlx5soDJQlL91yAyX9T5R+cLaskcRBp/VBYpzQgbAyp4M2O3fdpDat2lfNlE5z9iwloEd4BxfJb+KsGjAJbJeUJ,iv:r6j8IySDVYNOLvDWADBvRBjCghq91LSRjxJ+Edndxtg=,tag:chAvm1Nm6Ez8AjGnIJk0TQ==,type:str] moonraker_cfg: ENC[AES256_GCM,data:zwVo+2ksp5JL2vcThWKYTdKZgYCezpme2WOFNc36Z8ElPt4WKSftoUKKfZU3chpWq96kVMH8XRIUwmDRoVXH9Cf/GQBTiYsoGiHWjf2Zo9eWvzkJWa4c/C7kkrZgNOfqSShy/tMzrOSfvg0l6+4Ubb0nYhxUfj/RVgCKVXo327d/exW25SqOCV7LtjEfFlt32siEzzAKBTyzDW00yPV0BIAtixjWSC4RZZioCCglRgUDrhITLn71L0wHipKR6ljgQBUW3jkN0IsgFPb6vgS4JJudZMEcK0rdmZNQZTL7jil+KZIcskrlx2p1sUdG/bV2cqfigtIt0fqFQ+YqMALo0Vfe6x0KsDiBXzs9Cww1F6/30DPhP+xANwNJCos6vVIyiCP5yRGm+n3DBAF2DVLS1D/iQGTMy5z4SctD6QEXjUwGJCP0n5C9ExdArr+cVk/7X2oZbZcWYCnBaIc72R1cVfsLi5mMNbGzqEFpZjFeZuBLJow6NgVxk4TvqsAJKtf/Oo+STKbK3mKwvkzkgP3UGDdwQoGLTVZwVrJFxETH/5D/9L/ZnzzfLFCmaTctgyH+Hj2whphjtIy89dNRJ1ORZunY+6xCcKtCmLVjdFHPNlhioisQ0xBNNKKJFdogrRZNWUFgfx8jO1NwbWOJJCCT5Y+125pvad1TE92rtfdvNQ0XgGz8kU6tZpxwq3YKNAFESI0upaBgOxALFW2xNQG/6HVHTMsvHiqu+oTkxwj/6wO2XgnET2UHBV77t8a4INOCnbsNtDDCGNGTQYbuCu5ZGs7a2ekE4CO6g+328VKZGFQC44dY6wMNy9TcsSP9rFFR59Sa5hORVlg3jKfkUzg+zpI9TwoOg8sRK8AxIVIsiMPgeQA5RV6r9FYzJ4CDC+nN2aKtvS7H07sNMK/ekytUzWW7RXGIZCi+hEGJ1p/IbMzigaaDOiKZr9ChnihnX+OLRJmr0uTcAuGxn+UqorBn+Qv6tM9MrEOxO/IlOwmVHeoC00smLNfOzdqqoepEBSWoR8y0Rf1Jv/hIldFbLNARrCnfA+b3GYddLnACZrdMvTlqE5sUn8OuFEMaXz4AbtGCfguJ7bLeK/4oVpYrAPJkJ0ShzcS3YQeWOXjD0iwqOFnl8fY9U2zrrbAvtz5PSjE7k9idVdGE4pFWLyigfqTS1fIvNn7HGTs345NpXOSmoB9y0QrwC6hA8IbOqxlxTsgg4IFTZkeqI5j6vCvt0605+oL2R5/ZC1uG5/rtqF0WZW51w+rOmm+8qDjt0zXJ4Bx7s//mJt5oCUlYL/pDH3zlMJ8041/1tqN4jXejOVztf2sKjOUnCDQmYQ/9pYIwKouWH/xZTwW3ClSb0b91iXUiLzoCJX1MKNRTsIfFYG69s5vVm/p8wf8Fimo0deXmxvw9wJBm6pNWTzn2qlXLHo0cVEvKJJZG/T02oC/nigSvFIbEW4ddS8PPzD0afFaw7pGTz18m9edGLWAxMD+PKTjKZfZpq3HAgaoppYxh6r0iZDVaf2WAutz82oqwEwQBgXqCcgAtMN5Pa68ZZeamdWbek1yUSdogtGJRhH1C6FUkbyIkT9frEMoNG1dFhkI0G2Ws7sQcOcqLPPHROFUNQ61Ya5mfBrJ5pUC+M7f/ZfRV1qTMeC0taAxJEfhWlwJyGRe3PjZa5fRU+vPpW7o04dMQBK4DuZ5+1k/y2Bf7y3lPcwD4hLIDr/Oae5tUF5syCL6WqZmMfZWs0akEJuB/ZBIw8BndOGao3ACAg7znADRSRgYwdOlALVEZ8r/g4/r2bwH/dANDkPIBF57rHk+GcUIWQNWZde34YqCy8YT/RqCKWPHc3dcSevS+hXJvEc67EJNAWHm0M2hdWGXBIi7+iTNelQCoj9uVugwlTul/TcgN69eOkEYiNjStFbM5+YaNhejT,iv:YmgBMDOaTO3ijx/MI4RnMWrnj1tFsH3UwOKdK+f2u1w=,tag:wpwBKw9QywpmenO7n/aU3A==,type:str]
sops: sops:
shamir_threshold: 1 shamir_threshold: 1
kms: [] kms: []
@ -9,129 +9,138 @@ sops:
- recipient: age12ze362pu5mza6ef9akrptr7hfe4auaqul4rkta7kyy2tnrstqensgmujeq - recipient: age12ze362pu5mza6ef9akrptr7hfe4auaqul4rkta7kyy2tnrstqensgmujeq
enc: | enc: |
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAzUVZXTC9rYk5ZbmRGQm8v YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBjbGNzUjVwVTRMM0FDMS9Z
R0tWd1JXZ0c0TG5vWEp3S2Fwbkt2cEp3aHlZCkdDZlZvZ3g4TkNDVmVBYjVRWkZV OVpxNnhNdWRPWlVmeHdLdS9WV1NhQ3dZd1QwCklhWDFqQmFOVk4vbnFBc0FmaTlz
c1Q5VHlxazR0cG9BbWNoMHFJVy93QkUKLS0tIHRnSGxTeDBBZ1JvT1hNVWFOdnlN MzdVOUE1cVpsQThhOWt2Ym1PMUJMNkEKLS0tIE11SzQrdTIraGM4KzVaQXBlVTFt
K1diaEV1clQyaWRJT2lRVjRRMDVWSjQKGd2zknPyvuuzTfXQkIYLYHIXswzGW71f SURWMGdiYUxUbzE3K2ZpdGREY1o4Y28KGZhlU8MX3dnUz8rIqptiIvkffMhNSPd7
MKsiwqm3WtvVtoxRt90XMBGN0R4MyvduI97MO2MughkFelrd4PfnKA== ezB9sFgg0qhzSwMHdD0yUyK3VGxOewUsNd9lurBfCtoS45VYstZyiw==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
- recipient: age176uyyyk7veqnzmm8xzwfhf0u23m6hm02cldlfkldunqe6std0gcq6lg057 - recipient: age176uyyyk7veqnzmm8xzwfhf0u23m6hm02cldlfkldunqe6std0gcq6lg057
enc: | enc: |
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSArS1dzaVdYYTdEY1VkQjg0 YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBLNEdoblEwMjNkYUREeWNw
eVRxMVFQeXRwM0FlVFlZalozaU5laWMxc1NnCnMwN1NaamdUNTZoYXNFbTFiSXlG cWR4cm1WM1p0Z2FXUVVrZFRXODBNeFJaaWg4CmNHRXFuOW5Ya2tna1pWR2RDdndr
Qm9FY1IzbUFTcFF4RlNZMUlNWXl0L2MKLS0tIFB0d2NHUVl3d0pJT3VXZW1pdWMw VFlCbDEvTkxUdG9KOUl6QTZOUWxtdFUKLS0tIG9nU1F2WXBKeisrMm9RY1JxSGtF
NWFGMGdNSEpxTG5GbUl0bUtnUHFuNG8KRD0ZiUyFyk3ZBVrD28wNBSW/ew6HzV8N UEZVbXZVRGk3Y2VRY3JJZ2N3a3VPcUUKbbZ8/MbITP2G9vjGYUr5HLITkU5KmSH4
I5SS+lLZYX0tzrtb/zfa5LfHB0k2OG+s0eOGwecaT5IqZ8+jWnijYA== 8nidFf/YepiVRMGe0+SEAMtSus8MBjk22+Gv7Yajh85uXpFp6vFwIg==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
- recipient: age15hmlkd9p5rladsjzpmvrh6u34xvggu9mzdsdxdj3ms43tltxeuhq4g7g9k - recipient: age15hmlkd9p5rladsjzpmvrh6u34xvggu9mzdsdxdj3ms43tltxeuhq4g7g9k
enc: | enc: |
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBFS1hzVXdOWC96Zlg3N1hK YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRSTcyUDNzZWFOU1JpTkNS
UnZLNG1WZk5NMU9ZaytKRCt1WXUvTFgxMGpnCmVQMW5BaXFHa3BnWjliUHh2TTFz NXdKSWl4QlE0MWNXdFR6c2pOM0lwZmtKaFc4CjV5Q3ZPZytwcU52NmlIWE9LbEhW
RjBhREFGY1g2TzRuK2QrWlRUTjRMdFEKLS0tIGNiS285MG5XTFBVWU5CMUcyekNs YUI5MVN0OGgxZ3VHbjNTWVF1RWdGV2MKLS0tIFdRNndWcDVKb3ZPSDFGV2paTlpL
S2Jka3Evd0JCNkVkSXBWZVMwRllQZXcKnVhtEVxTbNb04lYhRWODYUVkaxObl5br aDhlYlA5N09qK1h5RDZqWGFodTBORHMKxhmh2JovuFD8HrNtt1Lv5A4vmHgOmL3O
FMzoYLDv6MKPlSRhVyerIzrKypHcUrONO8ARR0Nyv+mc9zTLGX4sMA== cDgHNyuHEEv4lQwvCt8LBLtgrv5X+TpiOqJAsjy+c91xuuY3S4M8YQ==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
- recipient: age10t6kc5069cyky929vvxk8aznqyxpkx3k5h5rmlyz83xtjmr22ahqe8mzes - recipient: age10t6kc5069cyky929vvxk8aznqyxpkx3k5h5rmlyz83xtjmr22ahqe8mzes
enc: | enc: |
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBKUjNaVTRsVFlwckM3Z0tN YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvaTZ1Vng1M3RmbHQybEJt
aVJoNHR4VzgzQ1QvOFZ1WUkvUjJqSGRoV0ZVCjhZeTYwQm0xTUNGTHlUdUk5dkpU U3p1Unpab1R4MENRS2VuNUloRWMxS0dDTW44CjhncjdVbnlxZ2krOUxpMHMvVmNC
RTlCTDhkRnZGR3MzUmtRMXlyMU1Wc3cKLS0tIGVPZXdhQ2NOcmthdXMydVZwNnJh ZzR4K0hMVUJuNnlZMDAzYnIzSzZpTWMKLS0tIEMybFpyQTZ0U3NCN3JyNlJ3citp
alZZSFFUVWp5RUxiRG53VFJaSXR2Q2MK+IjO2ZfS1kzYtQrahbIVzlxFafGHo4eG KzZ4aUFWWS8wdmMxYllFeTJ2OHRkS2cKJMQQbu8J5yon7kQZ6vN2WR62t9zTtcFy
cPknhegc6Ui/VrGjLrNfMpx5SiRAPWSEIRDO8OMt/YGZMTZu7Petng== ZkBjX11DjEcBqP9So54S8nvB850UBdj00fn9YH1YpZzViX4kB5rx8A==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
- recipient: age1a2quf2ekkj94ygu7wgvhrvh44fwn32c0l2cwvgvjh23wst90s54szdsvgr - recipient: age1a2quf2ekkj94ygu7wgvhrvh44fwn32c0l2cwvgvjh23wst90s54szdsvgr
enc: | enc: |
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBPT1FsMnI5c3ZSdGwwZlNP YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBVVEFrdmhmSUErWXpiYzdO
Ym5vZG5NdFZoVjBTeXlDWGI3WUd0UTFLSG5nCkEwanJQQXhGTyt5aVIySDZJQjVI MkY0ajNjRGdKemZYd2FKK3VoYTROTWovakJjCmpJWVQ3RU1HWG83RjVjSVpiQUFY
Qy9YckM2OEJjbGlGbWJXbjBJWkxHbUEKLS0tIE5hMndHZnlTVkFDYXhuOVY2SXJ0 RHhWM2FuMmRWQkQvUWJNa09uaWJzSHcKLS0tIFBsdG9PWXhna0E5YUJGU1VqWGdq
Y2J5S3ByZ2xMTEhxYXZZazFUanhlcFEKggpyYid+PZCimZBsbdejF9HKQ5CvM1yq em4ya09yc21rMERnVFdVQlhGa3B5M2MKI6Ie3H1P9XlLhiVQs+UGthW04mD+nvaN
Gi7ovZc83pfT1m2+4MaKhM6dAyrAUaqBqABHfIvQ4D4trOep/KENFQ== ZBLAW6HB/xTtUbriFgASVVO4EDkPy8b2z/0ZAg5ho1JpBGvpvlHNqA==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
- recipient: age16klpkaut5759dut8mdm3jn0rnp8w6kxyvs9n6ntqrdsayjtd7upqlvw489 - recipient: age16klpkaut5759dut8mdm3jn0rnp8w6kxyvs9n6ntqrdsayjtd7upqlvw489
enc: | enc: |
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB5ZWhPbER0cEl0YmNXUEov YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSByWU1sZDNubGdjY1JDejRO
aWFOZ0tod1RDaUN0L3g3WTJzNk5LU2NUbEZjCkZCbmNOcXRGaXJ0aEJyMkp2aUxn azhyYXBheFJTbHZXUTlLK1hwc09ZZ2d6VGt3CmFLamlFWDJYSk9SSEhmOTY5bnQ1
aWpFZU83VGNONytvUWpWRUhyMDhxcTgKLS0tIDhORGIwWnpxWlphV1VkejQyQ053 K2s4Vm5ETVlLWFFBUEMxVGs1RUk5Z00KLS0tIFREZ05KS0ZaUklmbEpRaWR2N24x
cHlldVlGM3I4MDhuU1hkdGVrTEJtL2MKQgkA+luYybh/cJP5gE0aOzkTTKgZ9tsQ RXA4NUNpNHM5bVhqbVcxMkZsQzNJcjQK4zq96qHkIHf33fq0q2QMwoYfUdZHogc1
ZEjlfLfi3BItgrxebm3WU1fPnKcJYnKs02JhYTnAOIUzrhQOy4N39Q== lztXIDDO8G0Uxz5Dku+Am/Zz99rubpI6FthHZUMF4eyZbpwg2wWkIQ==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
- recipient: age1xg6zm9t25wjakljm54m38pjdr9q53jysdcl82r5xwkrn0cgyuvvsuh63eh - recipient: age1xg6zm9t25wjakljm54m38pjdr9q53jysdcl82r5xwkrn0cgyuvvsuh63eh
enc: | enc: |
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAxek04RzliTXRwMHg5WjQ3 YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBrTmtQSHlRWng4dTFwakJY
TDJMYzN4VEpNNXFhZndQQmliMXBHYjkwRURJCnVZbWMzSkRhc2JmaEg0ZEptL3M5 N0lSZStTRVZyRTNKT2VteFluSE9tYitsS0VNCldUM0xqellKM09yZWVsaTAyeVdY
ZnBkS3hmQzAxd25kNHFZbmpmd0FSclUKLS0tIHJYQUJ0Ull4NzhkUGI3aWRZKzB1 KzAyZmhqenBCVUcrTnNIaE0yMFJlQUUKLS0tIENuRFNyMkIzV3NMV3BJTXlEaW1U
VlViSEJWelRyWFgwVFJBYWtGL0JsWGcK3EIGtfCsARPXXcI27pnkWJXKXkFOprNX bFQxbGZMdGZ2dHZzdTNHK0R0NEJDNWMKPAUEo43kE8RG+XZWoqMmmGjQgq0gSUc7
2OkDwh4cCxMRN4H5wnTb2tMgBVyFTQqp/mZtNAcnGLDFMbtlks342g== eVdNwiI7Ep04pBv//MriQHvwv1nrPNwZdgZ56c6uRHYpePKd8ULEMA==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
- recipient: age1ktmx2szedfnpe5xumnzs8vkk0ffqgga6ved3drtksg9pye6ndsnsnqq488 - recipient: age1ktmx2szedfnpe5xumnzs8vkk0ffqgga6ved3drtksg9pye6ndsnsnqq488
enc: | enc: |
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAwT0MrV0lBVVpyMHZ4QnpZ YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBST2x0UHN1dEczL29veUNr
bmtjblE3b0RoNFJoMHd4UXhGV3FKbTk0UEE0CmxEYWlmWTBLemlVY2NFalJhbTV5 ek12cEx2WlIvbFl3Qk4xNktzbU45aHpWY1RrCkNZOHFKQkZiNUs4ZnlPUnppVmtU
aXl2NTNUQ2syK0xxUVpuQnRGZFJIN0EKLS0tIGlibUlqVEQvU2lONzh1YUN4a0dM M3E2UmM0bGY4bExtMUpsOHFLekh3encKLS0tIEcvZTlQZDBQK0hvQjFvL3VxRlh6
UUJPTkwrbFNBRlZYUG5ld1Z2RkJJTlUKNUjZ8WFdSP+b+WXkhro9UU2dKWs+PLk2 U0gyMnk3UmdWNWtRYXNBNzF2SDhSUFUKAWkmd5gv81oacLNgyGh7KElTwxSZU6He
2yV5LWu4MRAo/d1xTiGOnhu9DRWWRgnUWbkjU48kKKho80KijOkGuw== XRyg0ep2QnCv0vQz99cArcPYPUNf+SQ08AvU2P2L4BgUfWH4MDajag==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
- recipient: age1fjcafp0j45sz03zq5srnxyq2mujndmn25vceg3wj2cgzymqm73ssmhdgku - recipient: age1fjcafp0j45sz03zq5srnxyq2mujndmn25vceg3wj2cgzymqm73ssmhdgku
enc: | enc: |
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBIdVBNK3hIbU8vbTlCOVBp YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBGRWJjM1AraGoxSmk3U3h4
U0dxSnp3Tjhmek8xL0hFREdVMThacVR4NGxFCmJ0bm9xNjdBaExNNGRTWTFmVzM5 Y2JkczAyQjJGdmpsQlZPVkdUejNFMFR1ZkRrCmFqSFl2K3RYYVVNUm9wdjZlVXpx
Nk45SjB1NnRQMmwycXN3S29PVThSYk0KLS0tIExuRFFSVFRXUmNNbXJZTmd1UzJn a0JwY2N2VG0zc0ZyckNucG5TUlk4VzQKLS0tIHc4cWRKRjIxSldVRjB2K1VxWXBF
Z0VmM0Z1a1FSa3dua3VNQjBYUjJtbFkKy/vlhW2Znr9Ot42O4+K17/rOLMBSW8BP V2I2VUgvUVY1TUFIT2VOVWtHMmZEUWcKe4KH8lgrCR0mQoFYEJ5OzoOaRWwjn48P
Q+5Ghy82bLOq5Ue+BRzFE7ScKx3WPf7xb4RPm55d+p+YtNawjI9V6A== JSSItlFUKirK1eHGohM1NAoKw5yqZSdRd1aGnBzMfpD9xWcWPTqQ3Q==
-----END AGE ENCRYPTED FILE-----
- recipient: age1ehdj6hghtr8sf5s5c03rru4y3a02nwrt694e36tjnd6g7eq4l43qfradn6
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB5czNDREZXUmJSN3lGam1Y
SnZVMk1FcnNobTE3SVBYc0k4OTNSK1B6L0ZzCms2NGl3SUtRTGJ0RjIwbzF3UDJv
OW1FUDA3NHo0TjE4NW5qQWFDZGlFdjgKLS0tIHNDNUtuZlBUbXVPenIrNkJkbTRF
cjE0NVJObmx0ekYrS2o0amVNSkpEZDgKkg+5bC7dK4kzrUVPq/c7O6dSmnObI+Sf
KOIQPdnUrCuEbnwZCfcFOfdKwtvJBeCTVTD2iqGb8uowVTPP8zZ9GQ==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
- recipient: age1tkkau8vk5h9dh3kemash4eghn7lk84j0hhpmvvf7j6phgcsm9vmsphv0py - recipient: age1tkkau8vk5h9dh3kemash4eghn7lk84j0hhpmvvf7j6phgcsm9vmsphv0py
enc: | enc: |
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBVUzZaU0dTYWI4K3N1dkZL YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBFQURRYVRjVTF5WGtTcUN1
MVNlZ2l4RC9iVmxJVGIrMEZqaHd5ckVkTW5jClYrZTVNRlhJY3RlZEJkeWFiMlI0 c2d0RTFKcjNCMnUwbEJyczd5V0hJZm1HMm5FCkRQN2NaQU1KeU1wY3BmMzBrMzUw
Q0p1aUZ3b21BTlFxeW5FbzB5VFpDRTQKLS0tIDlYbk40cSs3ajNwTmo4NWFMU0RJ c29aS0FmNVc0MCtWc3BCc1BkdzhuK1UKLS0tIEExclI1aGhwMkNXaVIyd3hESmFi
SWN5cmorVHJQZDNHR0JKOVF1L2VORW8KUhNWa5qw58J4L/KCOwyRfpWnGvXr/hAX MEFQZjlHVUswNS8vYklZVVBYTk4zQkEKJ1SnPv8Gg+ZX2ql9U6ScqQSq5IeQleM1
t0iznS4MTEB7pmzK/At6xMZsviRQHI8F9qX2tI2IyPB9OX0c4NGJnw== wZZp+dHrAFR32eKdqvZJUtQoAGSJTG+J7YZpNeM51umnRXFQnVdpWg==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
lastmodified: "2024-08-09T00:17:14Z" lastmodified: "2024-09-07T20:15:53Z"
mac: ENC[AES256_GCM,data:OtmPXZ0eSRId6oSEJ3UedRUJe8eLyC3q2dfl7MVumOuzq0zn4c2JqrbDibUCtdo/WOpZ0YUlkVx3rbrrJP0Jr+YCpfNN9kWnPbPoxYD9thAFHnbg8t1E5ytNhn6gqxXNksDU80hvldU1hcj0em7DXrPg4zOHbuEOF7Efb/xn5dU=,iv:astzy2U77KwlU7Y5HF1NH5kIgOVZiNfTVC9MHVaOWKQ=,tag:fHgvwo79shfeqAftILNgfA==,type:str] mac: ENC[AES256_GCM,data:LCuL2yrqeO+SIG8YxAouSH8iGAEO4HDtOBjeUsgqF6vkU7rYlrhjP8c9zmyrHgwkdoWE54oGTzr0GZD94wdHLdjr8fKITOxYjnql3Nx4MB7qNOcHzJx0IVXm2Io8lgP0qrJvd3SMk7Jskjl+NeDCBK3WE/nO5cf96xIw5219R18=,iv:aNin/EgT/X+4cfGlQWEeu4yIc0NXXJK0pDmc1tZa07E=,tag:BHhRPO7NKtA3mW/fIHlGVw==,type:str]
pgp: pgp:
- created_at: "2024-09-02T04:45:38Z" - created_at: "2024-09-07T20:53:05Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hQIMA82M54yws73UAQ/9E5a5u+mLqz/UoYg7hbQLkZQpB/Qr+VJG/kMvoGeuHJcF hQIMA82M54yws73UAQ/7BTY6UWQ8eTe4ThkDGksU/Hg4hNxFnb1ccJs7q51c+PjR
0J4iS3AXQDT6vEeXkVTF2nje7fRA6g57/3zhI0nOAblKN9PLMdRrTgiUPeTjw/SK vUKggEP0OnnCg4PfC3O7UF+r8FAHx9WDVaZHePTa53niFPo9lVyNR34WtSgGspZp
j7O6FDTJjF8WuGoXD5emQHyghsNTPalOUeoxv8Aw2nCUunt8z2cXYtoZX01L4J26 R71NRUSuJIsqRmbxIANt8Gxaq7aUK0pW+r4D4bSulCKOClj1c+s+PjZkBOXD2YHK
4LE+r4MSwmWbXGY9BcUlX0Vge+ERhOCpHlyMpA6b5/WBllr6y0f48hR8rwoAAQRA 5HAv0tMO/gvqkZYDjK++YTYyijj5aGUWHlzKy/pZ7CbOde/qnXQQsf3ndB221DSx
u++ypg0xD8dhgiWh9Ey+cu5tcBYtn/vUDd5jSSZnl30iqnMULMlqWnBn7AfcnwF4 GZKO5/UBPIbFb30+GeSpAJ4vCs/Lul21uVrtJoP8Oc63XyTUearmG93Xe9vTxwPI
LwDKP/3E6+NkLHzs6Asl+aVHy11NNeTQ6QhmbqIfhw/17ogKGcFjll9zDeslzUi0 85xJ+2Fzaq4Z0fhW3QB4YMdJ7VoTzROCTPg07WivyUbYlSvB93nay1lHlMwnZ+aj
IzV5JE1ClMuneI97Ihz8t4UH7vtuq2EEymDWgpsK3pnItqYUVwEqRqlE8xbw/ZHD tT+F7LcWCfBfUU0qV9JMjaSHmg/OyVmENFXCgnLDDyKr0daWF0P2YxYKWAII+mCL
LLlv1yU9dVD057Ue+4lJSmJU0vGnykOVuKEptWlsI32GD86w/aripW1sMhPurIml 26D7eBrJXvg5PkI1dkaPg71ek7tRQbx+lJIRkuQxS3/zHOhnvjEIvtjJtWZp+See
/5YiOzDQR6K9VvvtNnFuu+KwLFjagHuO2msgyLZprEEr9BBvZnJGVRYmoWdRNRwt hrVcfDXsf/+ojO5HmD0pjtihGdxTmTX2p83exwBCe+V6lp/JNFUQII9eVy5XTGvP
WdKw4F4TWpcxcPcI1Q/go27gJsSKK+bwsz11LEYPTBd8JCUf4Ls0roqoo5yRJZcW Y9d3J6kD+J1u978w2TL9kVQgjxKDzhJAfpLuVot83vhkrt5RWX8CiDqysjWK02hI
3TmFNU7ca5zHlGXpvyG68DUZhSf1a0m823FaSl/Quqnr13SgvoV0gQJ0Ow+QCPrS hFLe43BjH08K7ErtuGMogMcRl4WRoR3/wqJ/ykVVZpEWyCUZzEAFEy2OK2ciWwjS
XgFliP3nlV+FANVVfeZZoL9YXMFVxnZgci2Rg6xtkbd0AFBqjuuEgufSCYLQdx4i XgHSp8tXBOuzA5k+Ebmpl2oJnIzvYLAFab+yoMKo+iActYtxWOD5m4fQ3Z56qIeY
cdJXJzEqgDGjrsnkSqCzcfVPaU2SQvmdvhnfL8zgG8M7lYASOERpD48Q51vUWu4= Xyqgnd8rfVjNTAeaK1guhOB9LfWKpAJKVLrvvaELxdkMtaiosPACLwYp+cgnt20=
=DTsn =DiuG
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: CD8CE78CB0B3BDD4 fp: CD8CE78CB0B3BDD4
- created_at: "2024-09-02T04:45:38Z" - created_at: "2024-09-07T20:53:05Z"
enc: |- enc: |-
-----BEGIN PGP MESSAGE----- -----BEGIN PGP MESSAGE-----
hQEMA2W9MER3HLb7AQgAnFvG/F/G2RPwrZE1QRGs30Hs0FyfgqvmPILziLFZdveG hQEMA2W9MER3HLb7AQf8CoAmcWtfAjiDG8aIeWq+rT3qcfWfDkzPF/0p/yrLTL6T
unCz//6qxMgPoMSrrBRLTcSGVjqgBAcSJ2tU78Xe2jUnOArfxY/a19BDzBttJBy0 w07hk8gRKOjgN6IDPlIuuzWTSkXjsPKHkSQLgSlIUA5pc29O23gPAkHtYz5fYWKo
RARCAfjOkYfMVkFhT5jsd36i9dFG5EQWRXkPkjo9pOK36BvE6J25Z3o0X+3TNHXp LMQdl0B/5mnCnPjCpnr2O1eyxUdOkaa8QMlASOPUDKRrOE68U7J2KT8naJ3pmHF+
rs4/xoJmAlgQHj2vmRlQeiDDZ7g42pjbQ2hZtBBaHYiHThCQmG7FKpSqF+va1QhF gs69oxnfviJTYeFl7VKemTXsvgSPQpy6K5fSvlQ0ShSqXWqPI2VxGJNhI/j/z6Xi
csj+IsV4nJ5ivG7PyPI5STQL8SEfZZJ8mgkficcuwZqGv/2mzif9vRXrWvmg6et1 5xIHpC7rKHbXbXKE/wrNIPGLcSihnO3sZ74s4DPfBrMna3cYE2g7mhpp916I2BZt
nbCjrwwB8pMZdQkc6EzCYdyGk/iEu1pjEkrZ4ySPvtJeAYBZIltIfD1k5RuCQ+zx I0+cuG5IObYI7HTunSMeyTFzzpVQ4xCx77XTSgE6itJeAbDB0u1LhgfQHHn67cLR
xOAB0jq70Mx7KrGMkaIK+wOBr2NFO86DRotBNd2vHNIWytkkp9mueNqfub7RtsLQ /yXcwbrzhoL680STc/wmruqfebolrjOH2MHKlPpLMxax57L2rCWDWGdUrgBGZmxo
gl0DtSKutPU3ZKMPRQwW4B55nWxmLPz3MZrLTzUPfg== uHl3gcvg4Utv3gmBlLHemtDRW+h+xn6oSVIH3ce8BA==
=iCOa =Jd6c
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: 65BD3044771CB6FB fp: 65BD3044771CB6FB
unencrypted_suffix: _unencrypted unencrypted_suffix: _unencrypted

View file

@ -12,7 +12,6 @@ _: {
enable = true; enable = true;
ports.stream.port = 41081; ports.stream.port = 41081;
}; };
moonraker.enable = true;
}; };
}; };
network.networks = { network.networks = {

View file

@ -16,9 +16,7 @@ in {
nixos.barcodebuddy-scanner nixos.barcodebuddy-scanner
nixos.motion nixos.motion
nixos.cameras.kitchen nixos.cameras.kitchen
nixos.cameras.printer
nixos.cameras.logistics-webcam nixos.cameras.logistics-webcam
nixos.klipper
./hardware-configuration.nix ./hardware-configuration.nix
]; ];
@ -63,7 +61,7 @@ in {
description = "Logistics"; description = "Logistics";
extraGroups = [ extraGroups = [
"nixbuilder" "nixbuilder"
(mkIf (!config.services.octoprint.enable && !!config.services.klipper.enable) "dialout") (mkIf (!config.services.octoprint.enable && !config.services.klipper.enable) "dialout")
(mkIf config.networking.networkmanager.enable "networkmanager") (mkIf config.networking.networkmanager.enable "networkmanager")
]; ];
hashedPasswordFile = config.sops.secrets.logistics-user-password.path; hashedPasswordFile = config.sops.secrets.logistics-user-password.path;

View file

@ -5,9 +5,6 @@ _: {
modules = [ modules = [
./nixos.nix ./nixos.nix
]; ];
deploy = {
hostname = "10.1.1.50";
};
network.networks = { network.networks = {
tail = { tail = {
address4 = "100.106.9.75"; address4 = "100.106.9.75";
@ -21,6 +18,11 @@ _: {
exports = { exports = {
services = { services = {
tailscale.enable = true; tailscale.enable = true;
motion = {
enable = true;
id = "printercam";
};
moonraker.enable = true;
}; };
}; };
} }

View file

@ -12,6 +12,9 @@
nixos.base nixos.base
nixos.sops nixos.sops
nixos.tailscale nixos.tailscale
nixos.klipper
nixos.motion
nixos.cameras.printer
]; ];
boot.loader = { boot.loader = {
grub.enable = false; grub.enable = false;