fix type stuff for cli args

This commit is contained in:
Vegard Bieker Matthey
2026-03-17 15:55:21 +01:00
parent 98e3e316c4
commit 2c85161654

View File

@@ -82,174 +82,180 @@ in
}; };
config = lib.mkIf cfg.enable ( config = lib.mkIf cfg.enable (
{ lib.mkMerge [
environment.systemPackages = [ {
cfg.dibblerPackage environment.systemPackages = [
cfg.worblehatPackage 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"
]; ];
ensureUsers = [
{
name = "drumknotty";
ensureDBOwnership = true;
ensureClauses.login = true;
}
];
};
systemd.services.dibbler-setup-database = lib.mkIf cfg.createLocalDatabase { environment.etc."dibbler/dibbler.toml".source = format.generate "dibbler.toml" cfg.dibblerSettings;
description = "Dibbler database setup"; environment.etc."worblehat/config.toml".source =
wantedBy = [ "default.target" ]; format.generate "worblehat-config.toml" cfg.worblehatSettings;
after = [ "postgresql.service" ];
unitConfig = { users = {
ConditionPathExists = "!/var/lib/dibbler/.db-setup-done"; 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"; services.dibbler.settings.database = lib.mkIf cfg.createLocalDatabase {
Group = "drumknotty"; type = "postgresql";
postgresql.host = "/run/postgresql";
}; };
};
systemd.services.worblehat-setup-database = lib.mkIf cfg.createLocalDatabase { services.postgresql = lib.mkIf cfg.createLocalDatabase {
description = "Worblehat database setup"; ensureDatabases = [
wantedBy = [ "default.target" ]; "dibbler"
after = [ "postgresql.service" ]; "worblehat"
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"
]; ];
ensureUsers = [
{
name = "drumknotty";
ensureDBOwnership = true;
ensureClauses.login = true;
}
];
};
users.users.drumknotty = { systemd.services.dibbler-setup-database = lib.mkIf cfg.createLocalDatabase {
extraGroups = [ "lp" ]; description = "Dibbler database setup";
shell = wantedBy = [ "default.target" ];
(pkgs.writeShellScriptBin "login-shell" "${lib.getExe' cfg.screenPackage "screen"} -x ${cfg.screenSessionName}") after = [ "postgresql.service" ];
// { unitConfig = {
shellPath = "/bin/login-shell"; 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 = { worblehatArgs = lib.cli.toCommandLineShellGNU { } {
quit_allowed = false; config = "/etc/worblehat/config.toml";
stop_allowed = false; };
};
systemd.services.drumknotty-screen-session = { in
description = "Drumknotty Screen Session"; {
wantedBy = [ Type = "forking";
"default.target" RemainAfterExit = false;
]; Restart = "always";
after = RestartSec = "5s";
if cfg.createLocalDatabase then SuccessExitStatus = 1;
[
"postgresql.service"
"dibbler-setup-database.service"
"worblehat-setup-database.service"
]
else
[
"network.target"
];
serviceConfig =
let
dibblerArgs = lib.cli.toCommandLineShellGNU { } {
config = "/etc/dibbler/dibbler.toml";
};
worblehatArgs = lib.cli.toCommandLineShellGNU { } { User = "drumknotty";
config = "/etc/worblehat/config.toml"; Group = "drumknotty";
};
in ExecStartPre = "-${lib.getExe' cfg.screenPackage "screen"} -X -S ${cfg.screenSessionName} kill";
{ ExecStart =
Type = "forking"; let
RemainAfterExit = false; screenArgs = lib.escapeShellArgs [
Restart = "always"; # -dm creates the screen in detached mode without accessing it
RestartSec = "5s"; "-dm"
SuccessExitStatus = 1;
User = "drumknotty"; # Session name
Group = "drumknotty"; "-S"
"drumknotty"
ExecStartPre = "-${lib.getExe' cfg.screenPackage "screen"} -X -S ${cfg.screenSessionName} kill"; # Window name
ExecStart = "-t"
let "dibbler"
screenArgs = lib.escapeShellArgs [
# -dm creates the screen in detached mode without accessing it
"-dm"
# Session name # Set optimal output mode instead of VT100 emulation
"-S" "-O"
"drumknotty"
# Window name # Enable login mode, updates utmp entries
"-t" "-l"
"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}"
]; ];
};
};
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";
})
]
); );
} }