anchor.diff:                  building of firmware and addition of klipper-flash tools for manual flashing.
                   This will add `klipper-flash-$mcu` scripts to your environment which can be called to flash the firmware.
                 '');
  +              serial = mkOption {
  +                type = types.nullOr path;
  +                description = lib.mdDoc "Path to serial port this printer is connected to. Leave `null` to derive it from `service.klipper.settings`.";
  +              };
                 configFile = mkOption {
                   type = path;
                   description = lib.mdDoc "Path to firmware config which is generated using `klipper-genconf`";
  
positive.code:       let
          klippyArgs = "--input-tty=${cfg.inputTTY}"
            + optionalString (cfg.apiSocket != null) " --api-server=${cfg.apiSocket}";
        in
        {
          description = "Klipper 3D Printer Firmware";
          wantedBy = [ "multi-user.target" ];
          after = [ "network.target" ];
  
          serviceConfig = {
            ExecStart = "${cfg.package}/lib/klipper/klippy.py ${klippyArgs} /etc/klipper.cfg";
            RuntimeDirectory = "klipper";
            SupplementaryGroups = [ "dialout" ];
            WorkingDirectory = "${cfg.package}/lib";
            OOMScoreAdjust = "-999";
  
negative.code:     environment.systemPackages =
        with pkgs;
        let
          default = a: b: if a != null then a else b;
          firmwares = filterAttrs (n: v: v!= null) (mapAttrs
            (mcu: { enable, configFile, serial }: if enable then pkgs.klipper-firmware.override {
              mcu = lib.strings.sanitizeDerivationName mcu;
              firmwareConfig = configFile;
            } else null)
  