diff --git a/modules/system/exports/fluidd.nix b/modules/system/exports/fluidd.nix new file mode 100644 index 00000000..5c88ca43 --- /dev/null +++ b/modules/system/exports/fluidd.nix @@ -0,0 +1,40 @@ +{ + lib, + gensokyo-zone, + ... +}: let + inherit (gensokyo-zone.lib) mkAlmostOptionDefault; + inherit (lib.modules) mkIf; +in { + config.exports.services.fluidd = {config, ...}: { + displayName = mkAlmostOptionDefault "Fluidd"; + id = mkAlmostOptionDefault "print"; + nixos = { + serviceAttr = "fluidd"; + assertions = let + mkAssertion = f: nixosConfig: let + cfg = nixosConfig.services.nginx; + in + f nixosConfig cfg; + in + mkIf config.enable [ + (mkAssertion (nixosConfig: cfg: { + assertion = config.ports.default.port == 80; + message = "port mismatch"; + })) + ]; + }; + defaults.port.listen = mkAlmostOptionDefault "lan"; + ports = { + default = { + port = mkAlmostOptionDefault 80; + protocol = "http"; + status = { + enable = mkAlmostOptionDefault true; + gatus.client.network = mkAlmostOptionDefault "ip4"; + }; + prometheus.exporter.enable = mkAlmostOptionDefault true; + }; + }; + }; +} diff --git a/nixos/access/octoprint.nix b/nixos/access/octoprint.nix index 93f24d33..2fd2f0cb 100644 --- a/nixos/access/octoprint.nix +++ b/nixos/access/octoprint.nix @@ -4,33 +4,27 @@ ... }: let inherit (lib.modules) mkIf mkDefault; - inherit (config.services) octoprint; + inherit (config.services) nginx fluidd; name.shortServer = mkDefault "print"; - upstreamName = "octoprint'access"; + upstreamName = "fluidd'access"; in { config.services.nginx = { upstreams'.${upstreamName}.servers = { - local = { - enable = mkDefault octoprint.enable; - addr = mkDefault "localhost"; - port = mkIf octoprint.enable (mkDefault octoprint.port); - }; service = {upstream, ...}: { - enable = mkIf upstream.servers.local.enable (mkDefault false); + enable = true; accessService = { - name = "octoprint"; + name = "nginx"; + system = "logistics"; + port = "http"; # XXX: logistics doesn't listen on v6 getAddressFor = "getAddress4For"; }; }; }; virtualHosts = let - copyFromVhost = mkDefault "octoprint"; + copyFromVhost = mkDefault "fluidd"; locations = { "/" = { - proxy.enable = true; - }; - "/sockjs/" = { proxy = { enable = true; websocket.enable = true; @@ -38,12 +32,15 @@ in { }; }; in { - octoprint = { + fluidd = { inherit name locations; - proxy.upstream = mkDefault upstreamName; + proxy = { + upstream = mkDefault upstreamName; + host = nginx.virtualHosts.fluidd'local.serverName; + }; vouch.enable = mkDefault true; }; - octoprint'local = { + fluidd'local = { inherit name locations; ssl.cert = { inherit copyFromVhost; diff --git a/nixos/fluidd.nix b/nixos/fluidd.nix index 54c292cf..95f5664f 100644 --- a/nixos/fluidd.nix +++ b/nixos/fluidd.nix @@ -5,10 +5,13 @@ in { services = { fluidd = { enable = true; + hostName = "print.local.gensokyo.zone"; nginx.locations."/webcam".proxyPass = let inherit (motion.cameras) printercam; inherit (printercam.settings) camera_id; in "https://kitchen.local.${domain}/${toString camera_id}/stream"; }; }; + + networking.firewall.interfaces.lan.allowedTCPPorts = [80]; } diff --git a/nixos/moonraker.nix b/nixos/moonraker.nix index 81699853..9d38775b 100644 --- a/nixos/moonraker.nix +++ b/nixos/moonraker.nix @@ -1,4 +1,7 @@ -_: { +{ config, gensokyo-zone, ... }: let + inherit (config.services) motion; + inherit (gensokyo-zone.lib) domain; + in { services = { moonraker = { enable = true; @@ -8,6 +11,23 @@ _: { settings = { octoprint_compat = { }; history = { }; + "webcam printer" = { + location = "printer"; + enabled = true; + service = "mjpegstreamer"; + icon = "mdiPrinter3d"; + target_fps = 5; + target_fps_idle = 1; + stream_url = let + inherit (motion.cameras) printercam; + inherit (printercam.settings) camera_id; + in "https://kitchen.local.${domain}/${toString camera_id}/stream"; + snapshot_url = let + inherit (motion.cameras) printercam; + inherit (printercam.settings) camera_id; + in "https://kitchen.local.${domain}/${toString camera_id}/current"; + aspect_ratio = "16:9"; + }; authorization = { force_logins = true; cors_domains = [ diff --git a/systems/hakurei/nixos.nix b/systems/hakurei/nixos.nix index 40e2cc8b..32c66513 100644 --- a/systems/hakurei/nixos.nix +++ b/systems/hakurei/nixos.nix @@ -269,10 +269,10 @@ in { }; print = { inherit (nginx) group; - domain = virtualHosts.octoprint.serverName; + domain = virtualHosts.fluidd.serverName; extraDomainNames = mkMerge [ - virtualHosts.octoprint.otherServerNames - virtualHosts.octoprint'local.allServerNames + virtualHosts.fluidd.otherServerNames + virtualHosts.fluidd'local.allServerNames ]; }; webrx = { @@ -405,7 +405,7 @@ in { }; }; kitchencam.ssl.cert.enable = true; - octoprint.ssl.cert.enable = true; + fluidd.ssl.cert.enable = true; openwebrx.ssl.cert.enable = true; deluge.ssl.cert.enable = true; invidious = { diff --git a/systems/logistics/default.nix b/systems/logistics/default.nix index eca8afe3..a4782599 100644 --- a/systems/logistics/default.nix +++ b/systems/logistics/default.nix @@ -14,6 +14,7 @@ _: { octoprint.enable = true; nginx.enable = true; moonraker.enable = true; + fluidd.enable = true; }; }; network.networks = {