diff --git a/klipper/printer.cfg b/klipper/printer.cfg deleted file mode 100644 index 86abede8..00000000 --- a/klipper/printer.cfg +++ /dev/null @@ -1,31 +0,0 @@ -[include fluidd.cfg] -[include ender3v3se.cfg] -[include macros.cfg] - -[display_status] - -[pause_resume] - -[print_stats] - -[virtual_sdcard] -path:/var/lib/moonraker/gcodes - -[bed_mesh default] -version = 1 -points = - -0.007500, 0.075000, 0.205000, 0.325000, 0.472500 - -0.177500, -0.050000, 0.090000, 0.205000, 0.327500 - -0.287500, -0.157500, -0.027500, 0.077500, 0.225000 - -0.375000, -0.237500, -0.105000, 0.015000, 0.142500 - -0.345000, -0.227500, -0.090000, 0.022500, 0.202500 -x_count = 5 -y_count = 5 -mesh_x_pps = 2 -mesh_y_pps = 2 -algo = bicubic -tension = 0.2 -min_x = 30.0 -max_x = 207.0 -min_y = 30.0 -max_y = 215.48000000000002 diff --git a/modules/nixos/klipper.nix b/modules/nixos/klipper.nix new file mode 100644 index 00000000..f138420d --- /dev/null +++ b/modules/nixos/klipper.nix @@ -0,0 +1,53 @@ +{ + pkgs, + config, + gensokyo-zone, + lib, + ... +}: let + inherit (gensokyo-zone.lib) mapListToAttrs; + inherit (lib.options) mkOption mkEnableOption; + inherit (lib.modules) mkIf mkMerge mkAfter mkOptionDefault; + inherit (lib.attrsets) nameValuePair; + inherit (lib.strings) concatMapStrings escapeShellArg; + cfg = config.services.klipper; + includeFileName = "00-includes.cfg"; + includeFile = pkgs.writeText "klipper-includes.cfg" (concatMapStrings ( + path: "[include ${path}]\n" + ) + cfg.configFiles); + mkIncludeSetting = path: nameValuePair "include ${path}" (mkOptionDefault {}); + includeSettings = mapListToAttrs mkIncludeSetting ( + if cfg.mutableConfig + then [includeFileName] + else cfg.configFiles + ); +in { + options.services.klipper = with lib.types; { + quiet = mkEnableOption "more silent logs"; + configFiles = mkOption { + type = listOf path; + default = []; + }; + }; + config.services.klipper = { + settings = mkMerge [ + (mkIf (cfg.configFiles != []) includeSettings) + { + virtual_sdcard = mkIf cfg.mutableConfig { + path = mkOptionDefault "${cfg.mutableConfigFolder}/gcodes"; + }; + } + ]; + }; + config.systemd.services.klipper = mkIf cfg.enable { + serviceConfig = mkIf cfg.quiet { + LogFilterPatterns = [ + ''~INFO:root:Stats'' + ]; + }; + preStart = mkIf (cfg.configFiles != [] && cfg.mutableConfig) (mkAfter '' + ln -sfT ${includeFile} ${escapeShellArg "${cfg.mutableConfigFolder}/${includeFileName}"} + ''); + }; +} diff --git a/nixos/klipper.nix b/nixos/klipper.nix deleted file mode 100644 index dfd9de5b..00000000 --- a/nixos/klipper.nix +++ /dev/null @@ -1,31 +0,0 @@ -{ - 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 = { - klipper = { - enable = mkDefault true; - octoprintIntegration = mkIf octoprint.enable (mkDefault true); - user = mkIf moonraker.enable (mkAlmostOptionDefault "moonraker"); - group = mkIf moonraker.enable (mkAlmostOptionDefault "moonraker"); - mutableConfig = true; - mutableConfigFolder = mkIf moonraker.enable (mkDefault "${moonraker.stateDir}/config"); - settings = {}; - }; - }; - systemd = mkIf cfg.enable { - services.klipper = { - restartIfChanged = false; - serviceConfig.LogFilterPatterns = [ - ''~INFO:root:Stats'' - ]; - }; - }; -} diff --git a/nixos/klipper/default.nix b/nixos/klipper/default.nix new file mode 100644 index 00000000..32b8db2e --- /dev/null +++ b/nixos/klipper/default.nix @@ -0,0 +1,25 @@ +{ + config, + lib, + ... +}: let + inherit (lib.modules) mkIf mkAfter mkDefault; + inherit (config.services) octoprint; + cfg = config.services.klipper; +in { + services = { + klipper = { + enable = mkDefault true; + quiet = mkDefault true; + octoprintIntegration = mkIf octoprint.enable (mkDefault true); + configFiles = [ + ./printer.cfg + ./ender3v3se.cfg + ./macros.cfg + ]; + }; + }; + systemd.services.klipper = mkIf cfg.enable { + restartIfChanged = false; + }; +} diff --git a/klipper/ender3v3se.cfg b/nixos/klipper/ender3v3se.cfg similarity index 85% rename from klipper/ender3v3se.cfg rename to nixos/klipper/ender3v3se.cfg index 4df993de..64f10b32 100644 --- a/klipper/ender3v3se.cfg +++ b/nixos/klipper/ender3v3se.cfg @@ -165,3 +165,22 @@ mesh_max:207,215.5 mesh_min:30,30 probe_count:5,5 speed:120 + +[bed_mesh fallback] +version = 1 +points = + -0.007500, 0.075000, 0.205000, 0.325000, 0.472500 + -0.177500, -0.050000, 0.090000, 0.205000, 0.327500 + -0.287500, -0.157500, -0.027500, 0.077500, 0.225000 + -0.375000, -0.237500, -0.105000, 0.015000, 0.142500 + -0.345000, -0.227500, -0.090000, 0.022500, 0.202500 +x_count = 5 +y_count = 5 +mesh_x_pps = 2 +mesh_y_pps = 2 +algo = bicubic +tension = 0.2 +min_x = 30.0 +max_x = 207.0 +min_y = 30.0 +max_y = 215.48000000000002 diff --git a/klipper/fluidd.cfg b/nixos/klipper/fluidd.cfg similarity index 99% rename from klipper/fluidd.cfg rename to nixos/klipper/fluidd.cfg index 6284cc7e..e7475cd7 100644 --- a/klipper/fluidd.cfg +++ b/nixos/klipper/fluidd.cfg @@ -48,7 +48,6 @@ #gcode: [virtual_sdcard] -path: ~/printer_data/gcodes on_error_gcode: CANCEL_PRINT [pause_resume] diff --git a/klipper/macros.cfg b/nixos/klipper/macros.cfg similarity index 100% rename from klipper/macros.cfg rename to nixos/klipper/macros.cfg diff --git a/nixos/moonraker.nix b/nixos/klipper/moonraker.nix similarity index 69% rename from nixos/moonraker.nix rename to nixos/klipper/moonraker.nix index 28d34d43..5b374b80 100644 --- a/nixos/moonraker.nix +++ b/nixos/klipper/moonraker.nix @@ -5,14 +5,14 @@ lib, ... }: let - inherit (lib.modules) mkIf mkDefault; - inherit (gensokyo-zone.lib) domain; + inherit (lib.modules) mkIf mkBefore mkDefault; + inherit (gensokyo-zone.lib) mkAlmostOptionDefault domain; inherit (config.services) klipper; cfg = config.services.moonraker; in { sops.secrets = { moonraker_cfg = { - sopsFile = ./secrets/moonraker.yaml; + sopsFile = mkDefault ../secrets/moonraker.yaml; path = "${cfg.stateDir}/config/secrets.conf"; owner = cfg.user; }; @@ -60,9 +60,27 @@ in { }; }; }; + klipper = mkIf cfg.enable { + user = mkAlmostOptionDefault "moonraker"; + group = mkAlmostOptionDefault "moonraker"; + mutableConfig = true; + mutableConfigFolder = mkDefault "${cfg.stateDir}/config"; + configFiles = mkBefore [./fluidd.cfg]; + settings = { + print_stats = {}; + pause_resume = {}; + display_status = {}; + virtual_sdcard = { + path = "${cfg.stateDir}/gcodes"; + on_error_gcode = mkAlmostOptionDefault "CANCEL_PRINT"; + }; + }; + }; }; - systemd.services.moonraker = mkIf cfg.enable { - restartIfChanged = false; + systemd.services = mkIf cfg.enable { + moonraker = { + restartIfChanged = false; + }; }; networking.firewall = mkIf cfg.enable { interfaces.lan.allowedTCPPorts = [ diff --git a/nixos/klipper/printer.cfg b/nixos/klipper/printer.cfg new file mode 100644 index 00000000..75fc6ab7 --- /dev/null +++ b/nixos/klipper/printer.cfg @@ -0,0 +1,5 @@ +[display_status] + +[pause_resume] + +[print_stats] diff --git a/systems/logistics/nixos.nix b/systems/logistics/nixos.nix index 55dc18a7..95f4a364 100644 --- a/systems/logistics/nixos.nix +++ b/systems/logistics/nixos.nix @@ -19,7 +19,6 @@ in { nixos.cameras.printer nixos.cameras.logistics-webcam nixos.klipper - nixos.moonraker ./hardware-configuration.nix ];