From 2c85161654e26b13b1cb34ed35793175964a74ce Mon Sep 17 00:00:00 2001 From: Vegard Bieker Matthey Date: Tue, 17 Mar 2026 15:55:21 +0100 Subject: [PATCH] fix type stuff for cli args --- modules/drumknotty.nix | 306 +++++++++++++++++++++-------------------- 1 file changed, 156 insertions(+), 150 deletions(-) diff --git a/modules/drumknotty.nix b/modules/drumknotty.nix index 3464fd6..0e2adeb 100644 --- a/modules/drumknotty.nix +++ b/modules/drumknotty.nix @@ -82,174 +82,180 @@ in }; config = lib.mkIf cfg.enable ( - { - environment.systemPackages = [ - cfg.dibblerPackage - cfg.worblehatPackage - ]; - - environment.etc."dibbler/dibbler.toml".source = format.generate "dibbler.toml" cfg.dibblerSettings; - environment.etc."worblehat/config.toml".source = - format.generate "worblehat-config.toml" cfg.worblehatSettings; - - users = { - users.drumknotty = { - group = "drumknotty"; - isNormalUser = true; - }; - groups.drumknotty = { }; - }; - - services.dibbler.settings.database = lib.mkIf cfg.createLocalDatabase { - type = "postgresql"; - postgresql.host = "/run/postgresql"; - }; - - services.postgresql = lib.mkIf cfg.createLocalDatabase { - ensureDatabases = [ - "dibbler" - "worblehat" + lib.mkMerge [ + { + environment.systemPackages = [ + cfg.dibblerPackage + cfg.worblehatPackage ]; - ensureUsers = [ - { - name = "drumknotty"; - ensureDBOwnership = true; - ensureClauses.login = true; - } - ]; - }; - systemd.services.dibbler-setup-database = lib.mkIf cfg.createLocalDatabase { - description = "Dibbler database setup"; - wantedBy = [ "default.target" ]; - after = [ "postgresql.service" ]; - unitConfig = { - ConditionPathExists = "!/var/lib/dibbler/.db-setup-done"; + environment.etc."dibbler/dibbler.toml".source = format.generate "dibbler.toml" cfg.dibblerSettings; + environment.etc."worblehat/config.toml".source = + format.generate "worblehat-config.toml" cfg.worblehatSettings; + + users = { + users.drumknotty = { + group = "drumknotty"; + isNormalUser = true; + }; + groups.drumknotty = { }; }; - serviceConfig = { - Type = "oneshot"; - ExecStart = "${lib.getExe cfg.dibblerPackage} --config /etc/dibbler/dibbler.toml create-db"; - ExecStartPost = "${lib.getExe' pkgs.coreutils "touch"} /var/lib/dibbler/.db-setup-done"; - StateDirectory = "dibbler"; - User = "drumknotty"; - Group = "drumknotty"; + services.dibbler.settings.database = lib.mkIf cfg.createLocalDatabase { + type = "postgresql"; + postgresql.host = "/run/postgresql"; }; - }; - systemd.services.worblehat-setup-database = lib.mkIf cfg.createLocalDatabase { - description = "Worblehat database setup"; - wantedBy = [ "default.target" ]; - after = [ "postgresql.service" ]; - unitConfig = { - ConditionPathExists = "!/var/lib/worblehat/.db-setup-done"; - }; - serviceConfig = { - Type = "oneshot"; - ExecStart = "${lib.getExe cfg.worblehatPackage} --config /etc/worblehat/config.toml create-db"; - ExecStartPost = "${lib.getExe' pkgs.coreutils "touch"} /var/lib/worblehat/.db-setup-done"; - StateDirectory = "worblehat"; - - User = "drumknotty"; - Group = "drumknotty"; - }; - }; - - } - ( - lib.mkIf cfg.kioskMode { - boot.kernelParams = [ - "console=tty1" + services.postgresql = lib.mkIf cfg.createLocalDatabase { + ensureDatabases = [ + "dibbler" + "worblehat" ]; + ensureUsers = [ + { + name = "drumknotty"; + ensureDBOwnership = true; + ensureClauses.login = true; + } + ]; + }; - users.users.drumknotty = { - extraGroups = [ "lp" ]; - shell = - (pkgs.writeShellScriptBin "login-shell" "${lib.getExe' cfg.screenPackage "screen"} -x ${cfg.screenSessionName}") - // { - shellPath = "/bin/login-shell"; + systemd.services.dibbler-setup-database = lib.mkIf cfg.createLocalDatabase { + description = "Dibbler database setup"; + wantedBy = [ "default.target" ]; + after = [ "postgresql.service" ]; + unitConfig = { + ConditionPathExists = "!/var/lib/dibbler/.db-setup-done"; + }; + serviceConfig = { + Type = "oneshot"; + ExecStart = "${lib.getExe cfg.dibblerPackage} --config /etc/dibbler/dibbler.toml create-db"; + ExecStartPost = "${lib.getExe' pkgs.coreutils "touch"} /var/lib/dibbler/.db-setup-done"; + StateDirectory = "dibbler"; + + User = "drumknotty"; + Group = "drumknotty"; + }; + }; + + systemd.services.worblehat-setup-database = lib.mkIf cfg.createLocalDatabase { + description = "Worblehat database setup"; + wantedBy = [ "default.target" ]; + after = [ "postgresql.service" ]; + unitConfig = { + ConditionPathExists = "!/var/lib/worblehat/.db-setup-done"; + }; + serviceConfig = { + Type = "oneshot"; + ExecStart = "${lib.getExe cfg.worblehatPackage} --config /etc/worblehat/config.toml create-db"; + ExecStartPost = "${lib.getExe' pkgs.coreutils "touch"} /var/lib/worblehat/.db-setup-done"; + StateDirectory = "worblehat"; + + User = "drumknotty"; + Group = "drumknotty"; + }; + }; + + } + (lib.mkIf cfg.kioskMode { + boot.kernelParams = [ + "console=tty1" + ]; + + users.users.drumknotty = { + extraGroups = [ "lp" ]; + shell = + (pkgs.writeShellScriptBin "login-shell" "${lib.getExe' cfg.screenPackage "screen"} -x ${cfg.screenSessionName}") + // { + shellPath = "/bin/login-shell"; + }; + }; + + services.drumknotty.dibblerSettings.general = { + quit_allowed = false; + stop_allowed = false; + }; + + services.drumknotty.worblehatSettings.general = { + quit_allowed = false; + stop_allowed = false; + }; + + systemd.services.drumknotty-screen-session = { + description = "Drumknotty Screen Session"; + wantedBy = [ + "default.target" + ]; + after = + if cfg.createLocalDatabase then + [ + "postgresql.service" + "dibbler-setup-database.service" + "worblehat-setup-database.service" + ] + else + [ + "network.target" + ]; + serviceConfig = + let + dibblerArgs = lib.cli.toCommandLineShellGNU { } { + config = "/etc/dibbler/dibbler.toml"; }; - }; - services.drumknotty.settings.general = { - quit_allowed = false; - stop_allowed = false; - }; + worblehatArgs = lib.cli.toCommandLineShellGNU { } { + config = "/etc/worblehat/config.toml"; + }; - systemd.services.drumknotty-screen-session = { - description = "Drumknotty Screen Session"; - wantedBy = [ - "default.target" - ]; - after = - if cfg.createLocalDatabase then - [ - "postgresql.service" - "dibbler-setup-database.service" - "worblehat-setup-database.service" - ] - else - [ - "network.target" - ]; - serviceConfig = - let - dibblerArgs = lib.cli.toCommandLineShellGNU { } { - config = "/etc/dibbler/dibbler.toml"; - }; + in + { + Type = "forking"; + RemainAfterExit = false; + Restart = "always"; + RestartSec = "5s"; + SuccessExitStatus = 1; - worblehatArgs = lib.cli.toCommandLineShellGNU { } { - config = "/etc/worblehat/config.toml"; - }; + User = "drumknotty"; + Group = "drumknotty"; - in - { - Type = "forking"; - RemainAfterExit = false; - Restart = "always"; - RestartSec = "5s"; - SuccessExitStatus = 1; + ExecStartPre = "-${lib.getExe' cfg.screenPackage "screen"} -X -S ${cfg.screenSessionName} kill"; + ExecStart = + let + screenArgs = lib.escapeShellArgs [ + # -dm creates the screen in detached mode without accessing it + "-dm" - User = "drumknotty"; - Group = "drumknotty"; + # Session name + "-S" + "drumknotty" - ExecStartPre = "-${lib.getExe' cfg.screenPackage "screen"} -X -S ${cfg.screenSessionName} kill"; - ExecStart = - let - screenArgs = lib.escapeShellArgs [ - # -dm creates the screen in detached mode without accessing it - "-dm" + # Window name + "-t" + "dibbler" - # Session name - "-S" - "drumknotty" + # Set optimal output mode instead of VT100 emulation + "-O" - # Window name - "-t" - "dibbler" - - # Set optimal output mode instead of VT100 emulation - "-O" - - # Enable login mode, updates utmp entries - "-l" - ]; - - in - "${lib.getExe' cfg.screenPackage "screen"} ${screenArgs} ${lib.getExe cfg.dibblerPackage} ${dibblerArgs} loop"; - ExecStartPost = - "${lib.getExe' cfg.screenPackage "screen"} -X -S ${cfg.screenSessionName} -t worblehat ${lib.getExe cfg.worblehatPackage} ${worblehatArgs} cli" - ++ lib.optionals (cfg.limitScreenWidth != null) [ - "${lib.getExe' cfg.screenPackage "screen"} -X -S ${cfg.screenSessionName} width ${toString cfg.limitScreenWidth}" - ] - ++ lib.optionals (cfg.limitScreenHeight != null) [ - "${lib.getExe' cfg.screenPackage "screen"} -X -S ${cfg.screenSessionName} height ${toString cfg.limitScreenHeight}" + # Enable login mode, updates utmp entries + "-l" ]; - }; - }; - services.getty.autologinUser = "drumknotty"; - } - ) + in + "${lib.getExe' cfg.screenPackage "screen"} ${screenArgs} ${lib.getExe cfg.dibblerPackage} ${dibblerArgs} loop"; + ExecStartPost = [ + "${lib.getExe' cfg.screenPackage "screen"} -X -S ${cfg.screenSessionName} -t worblehat ${lib.getExe cfg.worblehatPackage} ${worblehatArgs} cli" + ] + ++ lib.optionals (cfg.limitScreenWidth != null) [ + "${lib.getExe' cfg.screenPackage "screen"} -X -S ${cfg.screenSessionName} width ${toString cfg.limitScreenWidth}" + ] + ++ lib.optionals (cfg.limitScreenHeight != null) [ + "${lib.getExe' cfg.screenPackage "screen"} -X -S ${cfg.screenSessionName} height ${toString cfg.limitScreenHeight}" + ]; + }; + }; + + services.getty.autologinUser = "drumknotty"; + }) + ] ); }