fix(logistics): remove octoprint

This commit is contained in:
arcnmx 2024-08-09 11:25:36 -07:00
parent 6e4118dec5
commit 1bbe964f6a
8 changed files with 83 additions and 51 deletions

View file

@ -1,21 +1,24 @@
{ {
config, config,
gensokyo-zone,
lib, lib,
... ...
}: let }: let
inherit (lib.modules) mkIf mkDefault; inherit (gensokyo-zone.lib) domain;
inherit (config.services) nginx fluidd; inherit (lib.modules) mkDefault;
name.shortServer = mkDefault "print"; name.shortServer = mkDefault "print";
upstreamName = "fluidd'access"; upstreamName = "fluidd'access";
serverName = "print.local.${domain}";
# TODO: serverName = "@fluidd_internal";
in { in {
config.services.nginx = { config.services.nginx = {
upstreams'.${upstreamName}.servers = { upstreams'.${upstreamName} = {
service = {upstream, ...}: { host = serverName;
enable = true; servers.service = {
accessService = { accessService = {
name = "nginx"; name = "nginx";
system = "logistics"; system = "logistics";
port = "http"; port = "proxied";
# XXX: logistics doesn't listen on v6 # XXX: logistics doesn't listen on v6
getAddressFor = "getAddress4For"; getAddressFor = "getAddress4For";
}; };
@ -34,10 +37,7 @@ in {
in { in {
fluidd = { fluidd = {
inherit name locations; inherit name locations;
proxy = { proxy.upstream = mkDefault upstreamName;
upstream = mkDefault upstreamName;
host = nginx.virtualHosts.fluidd'local.serverName;
};
vouch.enable = mkDefault true; vouch.enable = mkDefault true;
}; };
fluidd'local = { fluidd'local = {

View file

@ -1,17 +1,24 @@
{ config, gensokyo-zone, ... }: let { config, gensokyo-zone, lib, ... }: let
inherit (config.services) motion;
inherit (gensokyo-zone.lib) domain; inherit (gensokyo-zone.lib) domain;
inherit (lib.modules) mkIf mkDefault;
cfg = config.services.fluidd;
in { in {
services = { services = {
fluidd = { fluidd = {
enable = true; enable = mkDefault true;
hostName = "print.local.gensokyo.zone"; hostName = mkDefault "print.local.${domain}";
# TODO: hostName = "@fluidd_internal";
nginx.locations."/webcam".proxyPass = let nginx.locations."/webcam".proxyPass = let
inherit (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 "https://kitchen.local.${domain}/${toString camera_id}/stream";
}; };
nginx = mkIf cfg.enable {
proxied.enable = true;
virtualHosts.${cfg.hostName} = {
proxied.enable = true;
local.denyGlobal = true;
};
};
}; };
networking.firewall.interfaces.lan.allowedTCPPorts = [80];
} }

View file

@ -1,11 +1,17 @@
{ pkgs, ... }: { { config, gensokyo-zone, lib, ... }: let
inherit (gensokyo-zone.lib) mkAlmostOptionDefault;
inherit (lib.modules) mkIf mkDefault;
inherit (config.services) moonraker octoprint;
cfg = config.services.klipper;
in {
services = { services = {
klipper = { klipper = {
enable = true; enable = mkDefault true;
octoprintIntegration = true; octoprintIntegration = mkIf octoprint.enable (mkDefault true);
user = mkIf moonraker.enable (mkAlmostOptionDefault "moonraker");
group = mkIf moonraker.enable (mkAlmostOptionDefault "moonraker");
mutableConfig = true; mutableConfig = true;
mutableConfigFolder = "/var/lib/moonraker/config"; mutableConfigFolder = mkIf moonraker.enable (mkDefault "${moonraker.stateDir}/config");
settings = {}; settings = {};
}; };
}; };

View file

@ -1,39 +1,39 @@
{ config, gensokyo-zone, ... }: let { config, access, gensokyo-zone, lib, ... }: let
inherit (config.services) motion; inherit (lib.modules) mkIf mkDefault;
inherit (gensokyo-zone.lib) domain; inherit (gensokyo-zone.lib) domain;
inherit (config.services) klipper;
cfg = config.services.moonraker;
in { in {
sops.secrets = { sops.secrets = {
moonraker_cfg = { moonraker_cfg = {
sopsFile = ./secrets/moonraker.yaml; sopsFile = ./secrets/moonraker.yaml;
path = "/var/lib/moonraker/config/secrets.conf"; path = "${cfg.stateDir}/config/secrets.conf";
owner = "octoprint"; owner = cfg.user;
}; };
}; };
services = { services = {
moonraker = { moonraker = {
enable = true; enable = mkDefault true;
address = "0.0.0.0"; address = mkDefault "0.0.0.0";
user = "octoprint"; user = mkDefault klipper.user;
group = mkDefault klipper.group;
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 = { };
history = { }; history = { };
"webcam printer" = { "webcam printer" = let
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 = let stream_url = "https://kitchen.local.${domain}/${toString camera_id}/stream";
inherit (motion.cameras) printercam; snapshot_url = "https://kitchen.local.${domain}/${toString camera_id}/current";
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"; aspect_ratio = "16:9";
}; };
authorization = { authorization = {
@ -41,15 +41,16 @@
cors_domains = [ cors_domains = [
"*.local" "*.local"
"*.lan" "*.lan"
"*.gensokyo.zone" "*.${domain}"
]; ];
trusted_clients = [ trusted_clients = access.cidrForNetwork.allLocal.all;
"10.0.0.0/8" };
"127.0.0.0/8" };
"::1/128" };
};
networking.firewall = mkIf cfg.enable {
interfaces.lan.allowedTCPPorts = [
cfg.port
]; ];
}; };
};
};
};
} }

View file

@ -26,7 +26,7 @@ in {
marlingcodedocumentation marlingcodedocumentation
printtimegenius printtimegenius
stlviewer stlviewer
#octoklipper? octoklipper
#octolapse? #octolapse?
#dashboard? #dashboard?
]; ];

View file

@ -15,7 +15,7 @@ in {
}; };
packageOverrides = python3Packages: python3Packages'prev: packageOverrides = python3Packages: python3Packages'prev:
lib.mapAttrs (mapPlugin python3Packages) { lib.mapAttrs (mapPlugin python3Packages) {
inherit (final.octoprintPlugins) prometheus-exporter octorant queue printtimegenius; inherit (final.octoprintPlugins) prometheus-exporter octorant queue printtimegenius octoklipper;
}; };
octoprint = prev.octoprint.override (old: { octoprint = prev.octoprint.override (old: {
packageOverrides = lib.composeExtensions old.packageOverrides or (_: _: {}) packageOverrides; packageOverrides = lib.composeExtensions old.packageOverrides or (_: _: {}) packageOverrides;
@ -55,6 +55,23 @@ in {
}); });
in in
callPackage printtimegenius {}; callPackage printtimegenius {};
octoklipper = let
octoklipper = {
fetchFromGitHub,
python3Packages,
buildPlugin,
}:
octoprintPlugins.octoklipper.overrideAttrs (old: rec {
name = "${old.pname}-${version}";
version = lib.warnIf (lib.versionAtLeast old.version "0.3.8.4") "octoklipper updated upstream" "0.3.9.5";
src = fetchFromGitHub {
inherit (old.src) owner repo;
rev = version;
sha256 = "sha256-Ctxg6jyrXIR9sQQDu/Tjo+6+pOuSKgdDTYbnOKlU5ak=";
};
});
in
callPackage octoklipper {};
}; };
# XXX: build broken upstream ugh... # XXX: build broken upstream ugh...

View file

@ -6,13 +6,15 @@ _: {
]; ];
exports = { exports = {
services = { services = {
nginx = {
enable = true;
ports.proxied.enable = true;
};
motion = { motion = {
id = "kitchen"; id = "kitchen";
enable = true; enable = true;
ports.stream.port = 41081; ports.stream.port = 41081;
}; };
octoprint.enable = true;
nginx.enable = true;
moonraker.enable = true; moonraker.enable = true;
fluidd.enable = true; fluidd.enable = true;
}; };

View file

@ -12,13 +12,12 @@ in {
in [ in [
nixos.sops nixos.sops
nixos.base nixos.base
nixos.nginx
nixos.barcodebuddy-scanner nixos.barcodebuddy-scanner
nixos.motion nixos.motion
nixos.cameras.kitchen nixos.cameras.kitchen
nixos.cameras.printer nixos.cameras.printer
nixos.cameras.logistics-webcam nixos.cameras.logistics-webcam
nixos.octoprint
nixos.nginx
nixos.klipper nixos.klipper
nixos.moonraker nixos.moonraker
nixos.fluidd nixos.fluidd
@ -63,7 +62,7 @@ in {
description = "Logistics"; description = "Logistics";
extraGroups = [ extraGroups = [
"nixbuilder" "nixbuilder"
(mkIf (!config.services.octoprint.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;