diff --git a/nixos/access/kitchencam.nix b/nixos/access/kitchencam.nix index f6bb51b0..00af3023 100644 --- a/nixos/access/kitchencam.nix +++ b/nixos/access/kitchencam.nix @@ -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 ""; ''; - locations = { - "/" = { - proxyPass = mkDefault url; - extraConfig = '' - sub_filter_once off; - ${mkSubFilter motion.ports.stream} - ${mkSubFilter motion.ports.default} - ''; - }; - "~ ^/[0-9]+/(stream|motion|substream|current|source|status\\.json)$" = { - proxyPass = mkDefault streamUrl; - inherit extraConfig; - }; - "~ ^/(stream|motion|substream|current|source|cameras\\.json|status\\.json)$" = { - proxyPass = mkDefault streamUrl; - inherit extraConfig; + # 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 = { + "/" = { + 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' = { 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; }; diff --git a/nixos/access/moonraker.nix b/nixos/access/moonraker.nix index 0750b930..4e4bba82 100644 --- a/nixos/access/moonraker.nix +++ b/nixos/access/moonraker.nix @@ -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; } diff --git a/nixos/fluidd.nix b/nixos/fluidd.nix index 5ee33d33..b4ddfe61 100644 --- a/nixos/fluidd.nix +++ b/nixos/fluidd.nix @@ -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; diff --git a/nixos/klipper/default.nix b/nixos/klipper/default.nix index 32b8db2e..d9a45603 100644 --- a/nixos/klipper/default.nix +++ b/nixos/klipper/default.nix @@ -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 { diff --git a/nixos/klipper/moonraker.nix b/nixos/klipper/moonraker.nix index 5b374b80..a57a5635 100644 --- a/nixos/klipper/moonraker.nix +++ b/nixos/klipper/moonraker.nix @@ -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 = { diff --git a/nixos/secrets/moonraker.yaml b/nixos/secrets/moonraker.yaml index 5d743c02..34be7bc1 100644 --- a/nixos/secrets/moonraker.yaml +++ b/nixos/secrets/moonraker.yaml @@ -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 diff --git a/systems/logistics/default.nix b/systems/logistics/default.nix index c4500e94..f6cc31a4 100644 --- a/systems/logistics/default.nix +++ b/systems/logistics/default.nix @@ -12,7 +12,6 @@ _: { enable = true; ports.stream.port = 41081; }; - moonraker.enable = true; }; }; network.networks = { diff --git a/systems/logistics/nixos.nix b/systems/logistics/nixos.nix index 95f4a364..037c1027 100644 --- a/systems/logistics/nixos.nix +++ b/systems/logistics/nixos.nix @@ -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; diff --git a/systems/sakuya/default.nix b/systems/sakuya/default.nix index 4b51c68c..1d679e13 100644 --- a/systems/sakuya/default.nix +++ b/systems/sakuya/default.nix @@ -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; }; }; } diff --git a/systems/sakuya/nixos.nix b/systems/sakuya/nixos.nix index cecb8ba4..68a2bcee 100644 --- a/systems/sakuya/nixos.nix +++ b/systems/sakuya/nixos.nix @@ -12,6 +12,9 @@ nixos.base nixos.sops nixos.tailscale + nixos.klipper + nixos.motion + nixos.cameras.printer ]; boot.loader = { grub.enable = false;