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

View file

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

View file

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

View file

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

View file

@ -26,20 +26,20 @@ in {
port = 7125; # it's the default but i'm specifying it anyway
settings = {
"include secrets.conf" = {};
octoprint_compat = {};
octoprint_compat = {
stream_url = "/webcam/stream";
webcam_enabled = true;
};
history = {};
"webcam printer" = let
inherit (config.services.motion.cameras) printercam;
inherit (printercam.settings) camera_id;
in {
"webcam printer" = {
location = "printer";
enabled = true;
service = "mjpegstreamer";
icon = "mdiPrinter3d";
target_fps = 5;
target_fps_idle = 1;
stream_url = "https://kitchen.local.${domain}/${toString camera_id}/stream";
snapshot_url = "https://kitchen.local.${domain}/${toString camera_id}/current";
stream_url = "/webcam/stream";
snapshot_url = "/webcam/current";
aspect_ratio = "16:9";
};
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:
shamir_threshold: 1
kms: []
@ -9,129 +9,138 @@ sops:
- recipient: age12ze362pu5mza6ef9akrptr7hfe4auaqul4rkta7kyy2tnrstqensgmujeq
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAzUVZXTC9rYk5ZbmRGQm8v
R0tWd1JXZ0c0TG5vWEp3S2Fwbkt2cEp3aHlZCkdDZlZvZ3g4TkNDVmVBYjVRWkZV
c1Q5VHlxazR0cG9BbWNoMHFJVy93QkUKLS0tIHRnSGxTeDBBZ1JvT1hNVWFOdnlN
K1diaEV1clQyaWRJT2lRVjRRMDVWSjQKGd2zknPyvuuzTfXQkIYLYHIXswzGW71f
MKsiwqm3WtvVtoxRt90XMBGN0R4MyvduI97MO2MughkFelrd4PfnKA==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBjbGNzUjVwVTRMM0FDMS9Z
OVpxNnhNdWRPWlVmeHdLdS9WV1NhQ3dZd1QwCklhWDFqQmFOVk4vbnFBc0FmaTlz
MzdVOUE1cVpsQThhOWt2Ym1PMUJMNkEKLS0tIE11SzQrdTIraGM4KzVaQXBlVTFt
SURWMGdiYUxUbzE3K2ZpdGREY1o4Y28KGZhlU8MX3dnUz8rIqptiIvkffMhNSPd7
ezB9sFgg0qhzSwMHdD0yUyK3VGxOewUsNd9lurBfCtoS45VYstZyiw==
-----END AGE ENCRYPTED FILE-----
- recipient: age176uyyyk7veqnzmm8xzwfhf0u23m6hm02cldlfkldunqe6std0gcq6lg057
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSArS1dzaVdYYTdEY1VkQjg0
eVRxMVFQeXRwM0FlVFlZalozaU5laWMxc1NnCnMwN1NaamdUNTZoYXNFbTFiSXlG
Qm9FY1IzbUFTcFF4RlNZMUlNWXl0L2MKLS0tIFB0d2NHUVl3d0pJT3VXZW1pdWMw
NWFGMGdNSEpxTG5GbUl0bUtnUHFuNG8KRD0ZiUyFyk3ZBVrD28wNBSW/ew6HzV8N
I5SS+lLZYX0tzrtb/zfa5LfHB0k2OG+s0eOGwecaT5IqZ8+jWnijYA==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBLNEdoblEwMjNkYUREeWNw
cWR4cm1WM1p0Z2FXUVVrZFRXODBNeFJaaWg4CmNHRXFuOW5Ya2tna1pWR2RDdndr
VFlCbDEvTkxUdG9KOUl6QTZOUWxtdFUKLS0tIG9nU1F2WXBKeisrMm9RY1JxSGtF
UEZVbXZVRGk3Y2VRY3JJZ2N3a3VPcUUKbbZ8/MbITP2G9vjGYUr5HLITkU5KmSH4
8nidFf/YepiVRMGe0+SEAMtSus8MBjk22+Gv7Yajh85uXpFp6vFwIg==
-----END AGE ENCRYPTED FILE-----
- recipient: age15hmlkd9p5rladsjzpmvrh6u34xvggu9mzdsdxdj3ms43tltxeuhq4g7g9k
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBFS1hzVXdOWC96Zlg3N1hK
UnZLNG1WZk5NMU9ZaytKRCt1WXUvTFgxMGpnCmVQMW5BaXFHa3BnWjliUHh2TTFz
RjBhREFGY1g2TzRuK2QrWlRUTjRMdFEKLS0tIGNiS285MG5XTFBVWU5CMUcyekNs
S2Jka3Evd0JCNkVkSXBWZVMwRllQZXcKnVhtEVxTbNb04lYhRWODYUVkaxObl5br
FMzoYLDv6MKPlSRhVyerIzrKypHcUrONO8ARR0Nyv+mc9zTLGX4sMA==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRSTcyUDNzZWFOU1JpTkNS
NXdKSWl4QlE0MWNXdFR6c2pOM0lwZmtKaFc4CjV5Q3ZPZytwcU52NmlIWE9LbEhW
YUI5MVN0OGgxZ3VHbjNTWVF1RWdGV2MKLS0tIFdRNndWcDVKb3ZPSDFGV2paTlpL
aDhlYlA5N09qK1h5RDZqWGFodTBORHMKxhmh2JovuFD8HrNtt1Lv5A4vmHgOmL3O
cDgHNyuHEEv4lQwvCt8LBLtgrv5X+TpiOqJAsjy+c91xuuY3S4M8YQ==
-----END AGE ENCRYPTED FILE-----
- recipient: age10t6kc5069cyky929vvxk8aznqyxpkx3k5h5rmlyz83xtjmr22ahqe8mzes
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBKUjNaVTRsVFlwckM3Z0tN
aVJoNHR4VzgzQ1QvOFZ1WUkvUjJqSGRoV0ZVCjhZeTYwQm0xTUNGTHlUdUk5dkpU
RTlCTDhkRnZGR3MzUmtRMXlyMU1Wc3cKLS0tIGVPZXdhQ2NOcmthdXMydVZwNnJh
alZZSFFUVWp5RUxiRG53VFJaSXR2Q2MK+IjO2ZfS1kzYtQrahbIVzlxFafGHo4eG
cPknhegc6Ui/VrGjLrNfMpx5SiRAPWSEIRDO8OMt/YGZMTZu7Petng==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvaTZ1Vng1M3RmbHQybEJt
U3p1Unpab1R4MENRS2VuNUloRWMxS0dDTW44CjhncjdVbnlxZ2krOUxpMHMvVmNC
ZzR4K0hMVUJuNnlZMDAzYnIzSzZpTWMKLS0tIEMybFpyQTZ0U3NCN3JyNlJ3citp
KzZ4aUFWWS8wdmMxYllFeTJ2OHRkS2cKJMQQbu8J5yon7kQZ6vN2WR62t9zTtcFy
ZkBjX11DjEcBqP9So54S8nvB850UBdj00fn9YH1YpZzViX4kB5rx8A==
-----END AGE ENCRYPTED FILE-----
- recipient: age1a2quf2ekkj94ygu7wgvhrvh44fwn32c0l2cwvgvjh23wst90s54szdsvgr
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBPT1FsMnI5c3ZSdGwwZlNP
Ym5vZG5NdFZoVjBTeXlDWGI3WUd0UTFLSG5nCkEwanJQQXhGTyt5aVIySDZJQjVI
Qy9YckM2OEJjbGlGbWJXbjBJWkxHbUEKLS0tIE5hMndHZnlTVkFDYXhuOVY2SXJ0
Y2J5S3ByZ2xMTEhxYXZZazFUanhlcFEKggpyYid+PZCimZBsbdejF9HKQ5CvM1yq
Gi7ovZc83pfT1m2+4MaKhM6dAyrAUaqBqABHfIvQ4D4trOep/KENFQ==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBVVEFrdmhmSUErWXpiYzdO
MkY0ajNjRGdKemZYd2FKK3VoYTROTWovakJjCmpJWVQ3RU1HWG83RjVjSVpiQUFY
RHhWM2FuMmRWQkQvUWJNa09uaWJzSHcKLS0tIFBsdG9PWXhna0E5YUJGU1VqWGdq
em4ya09yc21rMERnVFdVQlhGa3B5M2MKI6Ie3H1P9XlLhiVQs+UGthW04mD+nvaN
ZBLAW6HB/xTtUbriFgASVVO4EDkPy8b2z/0ZAg5ho1JpBGvpvlHNqA==
-----END AGE ENCRYPTED FILE-----
- recipient: age16klpkaut5759dut8mdm3jn0rnp8w6kxyvs9n6ntqrdsayjtd7upqlvw489
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB5ZWhPbER0cEl0YmNXUEov
aWFOZ0tod1RDaUN0L3g3WTJzNk5LU2NUbEZjCkZCbmNOcXRGaXJ0aEJyMkp2aUxn
aWpFZU83VGNONytvUWpWRUhyMDhxcTgKLS0tIDhORGIwWnpxWlphV1VkejQyQ053
cHlldVlGM3I4MDhuU1hkdGVrTEJtL2MKQgkA+luYybh/cJP5gE0aOzkTTKgZ9tsQ
ZEjlfLfi3BItgrxebm3WU1fPnKcJYnKs02JhYTnAOIUzrhQOy4N39Q==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSByWU1sZDNubGdjY1JDejRO
azhyYXBheFJTbHZXUTlLK1hwc09ZZ2d6VGt3CmFLamlFWDJYSk9SSEhmOTY5bnQ1
K2s4Vm5ETVlLWFFBUEMxVGs1RUk5Z00KLS0tIFREZ05KS0ZaUklmbEpRaWR2N24x
RXA4NUNpNHM5bVhqbVcxMkZsQzNJcjQK4zq96qHkIHf33fq0q2QMwoYfUdZHogc1
lztXIDDO8G0Uxz5Dku+Am/Zz99rubpI6FthHZUMF4eyZbpwg2wWkIQ==
-----END AGE ENCRYPTED FILE-----
- recipient: age1xg6zm9t25wjakljm54m38pjdr9q53jysdcl82r5xwkrn0cgyuvvsuh63eh
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAxek04RzliTXRwMHg5WjQ3
TDJMYzN4VEpNNXFhZndQQmliMXBHYjkwRURJCnVZbWMzSkRhc2JmaEg0ZEptL3M5
ZnBkS3hmQzAxd25kNHFZbmpmd0FSclUKLS0tIHJYQUJ0Ull4NzhkUGI3aWRZKzB1
VlViSEJWelRyWFgwVFJBYWtGL0JsWGcK3EIGtfCsARPXXcI27pnkWJXKXkFOprNX
2OkDwh4cCxMRN4H5wnTb2tMgBVyFTQqp/mZtNAcnGLDFMbtlks342g==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBrTmtQSHlRWng4dTFwakJY
N0lSZStTRVZyRTNKT2VteFluSE9tYitsS0VNCldUM0xqellKM09yZWVsaTAyeVdY
KzAyZmhqenBCVUcrTnNIaE0yMFJlQUUKLS0tIENuRFNyMkIzV3NMV3BJTXlEaW1U
bFQxbGZMdGZ2dHZzdTNHK0R0NEJDNWMKPAUEo43kE8RG+XZWoqMmmGjQgq0gSUc7
eVdNwiI7Ep04pBv//MriQHvwv1nrPNwZdgZ56c6uRHYpePKd8ULEMA==
-----END AGE ENCRYPTED FILE-----
- recipient: age1ktmx2szedfnpe5xumnzs8vkk0ffqgga6ved3drtksg9pye6ndsnsnqq488
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAwT0MrV0lBVVpyMHZ4QnpZ
bmtjblE3b0RoNFJoMHd4UXhGV3FKbTk0UEE0CmxEYWlmWTBLemlVY2NFalJhbTV5
aXl2NTNUQ2syK0xxUVpuQnRGZFJIN0EKLS0tIGlibUlqVEQvU2lONzh1YUN4a0dM
UUJPTkwrbFNBRlZYUG5ld1Z2RkJJTlUKNUjZ8WFdSP+b+WXkhro9UU2dKWs+PLk2
2yV5LWu4MRAo/d1xTiGOnhu9DRWWRgnUWbkjU48kKKho80KijOkGuw==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBST2x0UHN1dEczL29veUNr
ek12cEx2WlIvbFl3Qk4xNktzbU45aHpWY1RrCkNZOHFKQkZiNUs4ZnlPUnppVmtU
M3E2UmM0bGY4bExtMUpsOHFLekh3encKLS0tIEcvZTlQZDBQK0hvQjFvL3VxRlh6
U0gyMnk3UmdWNWtRYXNBNzF2SDhSUFUKAWkmd5gv81oacLNgyGh7KElTwxSZU6He
XRyg0ep2QnCv0vQz99cArcPYPUNf+SQ08AvU2P2L4BgUfWH4MDajag==
-----END AGE ENCRYPTED FILE-----
- recipient: age1fjcafp0j45sz03zq5srnxyq2mujndmn25vceg3wj2cgzymqm73ssmhdgku
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBIdVBNK3hIbU8vbTlCOVBp
U0dxSnp3Tjhmek8xL0hFREdVMThacVR4NGxFCmJ0bm9xNjdBaExNNGRTWTFmVzM5
Nk45SjB1NnRQMmwycXN3S29PVThSYk0KLS0tIExuRFFSVFRXUmNNbXJZTmd1UzJn
Z0VmM0Z1a1FSa3dua3VNQjBYUjJtbFkKy/vlhW2Znr9Ot42O4+K17/rOLMBSW8BP
Q+5Ghy82bLOq5Ue+BRzFE7ScKx3WPf7xb4RPm55d+p+YtNawjI9V6A==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBGRWJjM1AraGoxSmk3U3h4
Y2JkczAyQjJGdmpsQlZPVkdUejNFMFR1ZkRrCmFqSFl2K3RYYVVNUm9wdjZlVXpx
a0JwY2N2VG0zc0ZyckNucG5TUlk4VzQKLS0tIHc4cWRKRjIxSldVRjB2K1VxWXBF
V2I2VUgvUVY1TUFIT2VOVWtHMmZEUWcKe4KH8lgrCR0mQoFYEJ5OzoOaRWwjn48P
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-----
- recipient: age1tkkau8vk5h9dh3kemash4eghn7lk84j0hhpmvvf7j6phgcsm9vmsphv0py
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBVUzZaU0dTYWI4K3N1dkZL
MVNlZ2l4RC9iVmxJVGIrMEZqaHd5ckVkTW5jClYrZTVNRlhJY3RlZEJkeWFiMlI0
Q0p1aUZ3b21BTlFxeW5FbzB5VFpDRTQKLS0tIDlYbk40cSs3ajNwTmo4NWFMU0RJ
SWN5cmorVHJQZDNHR0JKOVF1L2VORW8KUhNWa5qw58J4L/KCOwyRfpWnGvXr/hAX
t0iznS4MTEB7pmzK/At6xMZsviRQHI8F9qX2tI2IyPB9OX0c4NGJnw==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBFQURRYVRjVTF5WGtTcUN1
c2d0RTFKcjNCMnUwbEJyczd5V0hJZm1HMm5FCkRQN2NaQU1KeU1wY3BmMzBrMzUw
c29aS0FmNVc0MCtWc3BCc1BkdzhuK1UKLS0tIEExclI1aGhwMkNXaVIyd3hESmFi
MEFQZjlHVUswNS8vYklZVVBYTk4zQkEKJ1SnPv8Gg+ZX2ql9U6ScqQSq5IeQleM1
wZZp+dHrAFR32eKdqvZJUtQoAGSJTG+J7YZpNeM51umnRXFQnVdpWg==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2024-08-09T00:17:14Z"
mac: ENC[AES256_GCM,data:OtmPXZ0eSRId6oSEJ3UedRUJe8eLyC3q2dfl7MVumOuzq0zn4c2JqrbDibUCtdo/WOpZ0YUlkVx3rbrrJP0Jr+YCpfNN9kWnPbPoxYD9thAFHnbg8t1E5ytNhn6gqxXNksDU80hvldU1hcj0em7DXrPg4zOHbuEOF7Efb/xn5dU=,iv:astzy2U77KwlU7Y5HF1NH5kIgOVZiNfTVC9MHVaOWKQ=,tag:fHgvwo79shfeqAftILNgfA==,type:str]
lastmodified: "2024-09-07T20:15:53Z"
mac: ENC[AES256_GCM,data:LCuL2yrqeO+SIG8YxAouSH8iGAEO4HDtOBjeUsgqF6vkU7rYlrhjP8c9zmyrHgwkdoWE54oGTzr0GZD94wdHLdjr8fKITOxYjnql3Nx4MB7qNOcHzJx0IVXm2Io8lgP0qrJvd3SMk7Jskjl+NeDCBK3WE/nO5cf96xIw5219R18=,iv:aNin/EgT/X+4cfGlQWEeu4yIc0NXXJK0pDmc1tZa07E=,tag:BHhRPO7NKtA3mW/fIHlGVw==,type:str]
pgp:
- created_at: "2024-09-02T04:45:38Z"
- created_at: "2024-09-07T20:53:05Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQIMA82M54yws73UAQ/9E5a5u+mLqz/UoYg7hbQLkZQpB/Qr+VJG/kMvoGeuHJcF
0J4iS3AXQDT6vEeXkVTF2nje7fRA6g57/3zhI0nOAblKN9PLMdRrTgiUPeTjw/SK
j7O6FDTJjF8WuGoXD5emQHyghsNTPalOUeoxv8Aw2nCUunt8z2cXYtoZX01L4J26
4LE+r4MSwmWbXGY9BcUlX0Vge+ERhOCpHlyMpA6b5/WBllr6y0f48hR8rwoAAQRA
u++ypg0xD8dhgiWh9Ey+cu5tcBYtn/vUDd5jSSZnl30iqnMULMlqWnBn7AfcnwF4
LwDKP/3E6+NkLHzs6Asl+aVHy11NNeTQ6QhmbqIfhw/17ogKGcFjll9zDeslzUi0
IzV5JE1ClMuneI97Ihz8t4UH7vtuq2EEymDWgpsK3pnItqYUVwEqRqlE8xbw/ZHD
LLlv1yU9dVD057Ue+4lJSmJU0vGnykOVuKEptWlsI32GD86w/aripW1sMhPurIml
/5YiOzDQR6K9VvvtNnFuu+KwLFjagHuO2msgyLZprEEr9BBvZnJGVRYmoWdRNRwt
WdKw4F4TWpcxcPcI1Q/go27gJsSKK+bwsz11LEYPTBd8JCUf4Ls0roqoo5yRJZcW
3TmFNU7ca5zHlGXpvyG68DUZhSf1a0m823FaSl/Quqnr13SgvoV0gQJ0Ow+QCPrS
XgFliP3nlV+FANVVfeZZoL9YXMFVxnZgci2Rg6xtkbd0AFBqjuuEgufSCYLQdx4i
cdJXJzEqgDGjrsnkSqCzcfVPaU2SQvmdvhnfL8zgG8M7lYASOERpD48Q51vUWu4=
=DTsn
hQIMA82M54yws73UAQ/7BTY6UWQ8eTe4ThkDGksU/Hg4hNxFnb1ccJs7q51c+PjR
vUKggEP0OnnCg4PfC3O7UF+r8FAHx9WDVaZHePTa53niFPo9lVyNR34WtSgGspZp
R71NRUSuJIsqRmbxIANt8Gxaq7aUK0pW+r4D4bSulCKOClj1c+s+PjZkBOXD2YHK
5HAv0tMO/gvqkZYDjK++YTYyijj5aGUWHlzKy/pZ7CbOde/qnXQQsf3ndB221DSx
GZKO5/UBPIbFb30+GeSpAJ4vCs/Lul21uVrtJoP8Oc63XyTUearmG93Xe9vTxwPI
85xJ+2Fzaq4Z0fhW3QB4YMdJ7VoTzROCTPg07WivyUbYlSvB93nay1lHlMwnZ+aj
tT+F7LcWCfBfUU0qV9JMjaSHmg/OyVmENFXCgnLDDyKr0daWF0P2YxYKWAII+mCL
26D7eBrJXvg5PkI1dkaPg71ek7tRQbx+lJIRkuQxS3/zHOhnvjEIvtjJtWZp+See
hrVcfDXsf/+ojO5HmD0pjtihGdxTmTX2p83exwBCe+V6lp/JNFUQII9eVy5XTGvP
Y9d3J6kD+J1u978w2TL9kVQgjxKDzhJAfpLuVot83vhkrt5RWX8CiDqysjWK02hI
hFLe43BjH08K7ErtuGMogMcRl4WRoR3/wqJ/ykVVZpEWyCUZzEAFEy2OK2ciWwjS
XgHSp8tXBOuzA5k+Ebmpl2oJnIzvYLAFab+yoMKo+iActYtxWOD5m4fQ3Z56qIeY
Xyqgnd8rfVjNTAeaK1guhOB9LfWKpAJKVLrvvaELxdkMtaiosPACLwYp+cgnt20=
=DiuG
-----END PGP MESSAGE-----
fp: CD8CE78CB0B3BDD4
- created_at: "2024-09-02T04:45:38Z"
- created_at: "2024-09-07T20:53:05Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQEMA2W9MER3HLb7AQgAnFvG/F/G2RPwrZE1QRGs30Hs0FyfgqvmPILziLFZdveG
unCz//6qxMgPoMSrrBRLTcSGVjqgBAcSJ2tU78Xe2jUnOArfxY/a19BDzBttJBy0
RARCAfjOkYfMVkFhT5jsd36i9dFG5EQWRXkPkjo9pOK36BvE6J25Z3o0X+3TNHXp
rs4/xoJmAlgQHj2vmRlQeiDDZ7g42pjbQ2hZtBBaHYiHThCQmG7FKpSqF+va1QhF
csj+IsV4nJ5ivG7PyPI5STQL8SEfZZJ8mgkficcuwZqGv/2mzif9vRXrWvmg6et1
nbCjrwwB8pMZdQkc6EzCYdyGk/iEu1pjEkrZ4ySPvtJeAYBZIltIfD1k5RuCQ+zx
xOAB0jq70Mx7KrGMkaIK+wOBr2NFO86DRotBNd2vHNIWytkkp9mueNqfub7RtsLQ
gl0DtSKutPU3ZKMPRQwW4B55nWxmLPz3MZrLTzUPfg==
=iCOa
hQEMA2W9MER3HLb7AQf8CoAmcWtfAjiDG8aIeWq+rT3qcfWfDkzPF/0p/yrLTL6T
w07hk8gRKOjgN6IDPlIuuzWTSkXjsPKHkSQLgSlIUA5pc29O23gPAkHtYz5fYWKo
LMQdl0B/5mnCnPjCpnr2O1eyxUdOkaa8QMlASOPUDKRrOE68U7J2KT8naJ3pmHF+
gs69oxnfviJTYeFl7VKemTXsvgSPQpy6K5fSvlQ0ShSqXWqPI2VxGJNhI/j/z6Xi
5xIHpC7rKHbXbXKE/wrNIPGLcSihnO3sZ74s4DPfBrMna3cYE2g7mhpp916I2BZt
I0+cuG5IObYI7HTunSMeyTFzzpVQ4xCx77XTSgE6itJeAbDB0u1LhgfQHHn67cLR
/yXcwbrzhoL680STc/wmruqfebolrjOH2MHKlPpLMxax57L2rCWDWGdUrgBGZmxo
uHl3gcvg4Utv3gmBlLHemtDRW+h+xn6oSVIH3ce8BA==
=Jd6c
-----END PGP MESSAGE-----
fp: 65BD3044771CB6FB
unencrypted_suffix: _unencrypted

View file

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

View file

@ -16,9 +16,7 @@ in {
nixos.barcodebuddy-scanner
nixos.motion
nixos.cameras.kitchen
nixos.cameras.printer
nixos.cameras.logistics-webcam
nixos.klipper
./hardware-configuration.nix
];
@ -63,7 +61,7 @@ in {
description = "Logistics";
extraGroups = [
"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")
];
hashedPasswordFile = config.sops.secrets.logistics-user-password.path;

View file

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

View file

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