mirror of
https://git.pvv.ntnu.no/Drift/pvv-nixos-config.git
synced 2026-03-17 21:27:33 +01:00
fix type stuff for cli args
This commit is contained in:
@@ -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";
|
||||||
|
})
|
||||||
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user