From cbcf47600228912bafcf5f5e35c2956797b31124 Mon Sep 17 00:00:00 2001 From: Evan Reichard Date: Wed, 21 Jan 2026 15:35:19 -0500 Subject: [PATCH] chore: add octoprint & orca slicer --- .../default.nix | 4 + modules/nixos/services/octoprint/default.nix | 79 +++++++++++++++++++ .../x86_64-linux/lin-va-utility/default.nix | 6 +- 3 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 modules/nixos/services/octoprint/default.nix diff --git a/homes/aarch64-linux/evanreichard@lin-va-mbp-personal/default.nix b/homes/aarch64-linux/evanreichard@lin-va-mbp-personal/default.nix index 4a313c1..5e70f9f 100755 --- a/homes/aarch64-linux/evanreichard@lin-va-mbp-personal/default.nix +++ b/homes/aarch64-linux/evanreichard@lin-va-mbp-personal/default.nix @@ -55,6 +55,10 @@ in }; }; + home.packages = with pkgs; [ + orca-slicer + ]; + dconf = { settings = { "org/gnome/desktop/interface" = { diff --git a/modules/nixos/services/octoprint/default.nix b/modules/nixos/services/octoprint/default.nix new file mode 100644 index 0000000..89f3a15 --- /dev/null +++ b/modules/nixos/services/octoprint/default.nix @@ -0,0 +1,79 @@ +{ config +, pkgs +, lib +, namespace +, ... +}: +let + inherit (lib) mkIf types mkEnableOption; + inherit (lib.${namespace}) mkOpt; + + settingsFormat = pkgs.formats.yaml { }; + + cfg = config.${namespace}.services.octoprint; +in +{ + options.${namespace}.services.octoprint = { + enable = mkEnableOption "Enable OctoPrint service"; + openFirewall = mkEnableOption "Open firewall"; + port = mkOpt types.port 5000 "Port to listen on"; + settings = lib.mkOption { + type = lib.types.submodule { freeformType = settingsFormat.type; }; + default = { }; + description = '' + OctoPrint configuration. Refer to the [OctoPrint example configuration](https://docs.octoprint.org/en/main/configuration/config_yaml.html) + for details on supported values. + ''; + }; + }; + + config = mkIf cfg.enable { + # Create User + users.groups.octoprint = { }; + users.users.octoprint = { + isSystemUser = true; + group = "octoprint"; + extraGroups = [ "dialout" ]; + }; + + # Create Service + systemd.services.octoprint = + let + # Merge Port + finalSettings = lib.recursiveUpdate cfg.settings { + server.port = cfg.port; + }; + + # Create Config + configFile = settingsFormat.generate "config.yaml" finalSettings; + in + { + description = "OctoPrint 3D Printing Service"; + after = [ "network.target" ]; + wantedBy = [ "multi-user.target" ]; + + serviceConfig = { + Type = "exec"; + ExecStartPre = pkgs.writeShellScript "setup-octoprint-config" '' + if [ ! -f /var/lib/octoprint/config.yaml ]; then + ${pkgs.coreutils}/bin/cp ${configFile} /var/lib/octoprint/config.yaml + fi + ''; + ExecStart = "${lib.getExe pkgs.octoprint} serve -b /var/lib/octoprint"; + Restart = "on-failure"; + RestartSec = 3; + + StateDirectory = "octoprint"; + WorkingDirectory = "/var/lib/octoprint"; + Environment = "HOME=/var/lib/octoprint"; + + User = "octoprint"; + Group = "octoprint"; + SupplementaryGroups = [ "dialout" ]; + PrivateDevices = false; + }; + }; + + networking.firewall = lib.mkIf cfg.openFirewall { allowedTCPPorts = [ cfg.port ]; }; + }; +} diff --git a/systems/x86_64-linux/lin-va-utility/default.nix b/systems/x86_64-linux/lin-va-utility/default.nix index 0b6aac8..5fd9fc8 100755 --- a/systems/x86_64-linux/lin-va-utility/default.nix +++ b/systems/x86_64-linux/lin-va-utility/default.nix @@ -42,9 +42,13 @@ in }; services = { - openssh = enabled; avahi = enabled; + openssh = enabled; ydotool = enabled; + octoprint = { + enable = true; + openFirewall = true; + }; }; virtualisation = {