Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 25c604cbca | |||
| 6e0b207284 | |||
| fa51ede141 | |||
| e6d276e3ac | |||
| 8ad532878e | |||
| 978c5fbb51 | |||
| 55457fbeac |
@@ -1,8 +1,16 @@
|
|||||||
{ config, pkgs, lib, ... }: let
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
cfg = config.services.dibbler;
|
cfg = config.services.dibbler;
|
||||||
|
worbleCfg = config.services.worblehat;
|
||||||
|
|
||||||
format = pkgs.formats.toml { };
|
format = pkgs.formats.toml { };
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
options.services.dibbler = {
|
options.services.dibbler = {
|
||||||
enable = lib.mkEnableOption "dibbler, the little kiosk computer";
|
enable = lib.mkEnableOption "dibbler, the little kiosk computer";
|
||||||
|
|
||||||
@@ -56,7 +64,8 @@ in {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable (lib.mkMerge [
|
config = lib.mkIf cfg.enable (
|
||||||
|
lib.mkMerge [
|
||||||
{
|
{
|
||||||
services.dibbler.settings = lib.pipe ../example-config.toml [
|
services.dibbler.settings = lib.pipe ../example-config.toml [
|
||||||
builtins.readFile
|
builtins.readFile
|
||||||
@@ -65,7 +74,10 @@ in {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
environment.systemPackages = [ cfg.package ];
|
environment.systemPackages = [
|
||||||
|
cfg.package
|
||||||
|
worbleCfg.package
|
||||||
|
];
|
||||||
|
|
||||||
environment.etc."dibbler/dibbler.toml".source = format.generate "dibbler.toml" cfg.settings;
|
environment.etc."dibbler/dibbler.toml".source = format.generate "dibbler.toml" cfg.settings;
|
||||||
|
|
||||||
@@ -84,11 +96,13 @@ in {
|
|||||||
|
|
||||||
services.postgresql = lib.mkIf cfg.createLocalDatabase {
|
services.postgresql = lib.mkIf cfg.createLocalDatabase {
|
||||||
ensureDatabases = [ "dibbler" ];
|
ensureDatabases = [ "dibbler" ];
|
||||||
ensureUsers = [{
|
ensureUsers = [
|
||||||
|
{
|
||||||
name = "dibbler";
|
name = "dibbler";
|
||||||
ensureDBOwnership = true;
|
ensureDBOwnership = true;
|
||||||
ensureClauses.login = true;
|
ensureClauses.login = true;
|
||||||
}];
|
}
|
||||||
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.services.dibbler-setup-database = lib.mkIf cfg.createLocalDatabase {
|
systemd.services.dibbler-setup-database = lib.mkIf cfg.createLocalDatabase {
|
||||||
@@ -114,10 +128,11 @@ in {
|
|||||||
"console=tty1"
|
"console=tty1"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
users.users.dibbler = {
|
users.users.dibbler = {
|
||||||
extraGroups = [ "lp" ];
|
extraGroups = [ "lp" ];
|
||||||
shell = (pkgs.writeShellScriptBin "login-shell" "${lib.getExe' cfg.screenPackage "screen"} -x dibbler") // {
|
shell =
|
||||||
|
(pkgs.writeShellScriptBin "login-shell" "${lib.getExe' cfg.screenPackage "screen"} -x dibbler")
|
||||||
|
// {
|
||||||
shellPath = "/bin/login-shell";
|
shellPath = "/bin/login-shell";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -132,10 +147,14 @@ in {
|
|||||||
wantedBy = [
|
wantedBy = [
|
||||||
"default.target"
|
"default.target"
|
||||||
];
|
];
|
||||||
after = if cfg.createLocalDatabase then [
|
after =
|
||||||
|
if cfg.createLocalDatabase then
|
||||||
|
[
|
||||||
"postgresql.service"
|
"postgresql.service"
|
||||||
"dibbler-setup-database.service"
|
"dibbler-setup-database.service"
|
||||||
] else [
|
]
|
||||||
|
else
|
||||||
|
[
|
||||||
"network.target"
|
"network.target"
|
||||||
];
|
];
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
@@ -149,7 +168,8 @@ in {
|
|||||||
Group = "dibbler";
|
Group = "dibbler";
|
||||||
|
|
||||||
ExecStartPre = "-${lib.getExe' cfg.screenPackage "screen"} -X -S dibbler kill";
|
ExecStartPre = "-${lib.getExe' cfg.screenPackage "screen"} -X -S dibbler kill";
|
||||||
ExecStart = let
|
ExecStart =
|
||||||
|
let
|
||||||
screenArgs = lib.escapeShellArgs [
|
screenArgs = lib.escapeShellArgs [
|
||||||
# -dm creates the screen in detached mode without accessing it
|
# -dm creates the screen in detached mode without accessing it
|
||||||
"-dm"
|
"-dm"
|
||||||
@@ -163,24 +183,33 @@ in {
|
|||||||
|
|
||||||
# Enable login mode, updates utmp entries
|
# Enable login mode, updates utmp entries
|
||||||
"-l"
|
"-l"
|
||||||
|
|
||||||
|
# Set window name
|
||||||
|
"-t"
|
||||||
|
"dibblerino"
|
||||||
];
|
];
|
||||||
|
|
||||||
dibblerArgs = lib.cli.toCommandLineShellGNU { } {
|
dibblerArgs = lib.cli.toCommandLineShellGNU { } {
|
||||||
config = "/etc/dibbler/dibbler.toml";
|
config = "/etc/dibbler/dibbler.toml";
|
||||||
};
|
};
|
||||||
|
|
||||||
in "${lib.getExe' cfg.screenPackage "screen"} ${screenArgs} ${lib.getExe cfg.package} ${dibblerArgs} loop";
|
in
|
||||||
|
"${lib.getExe' cfg.screenPackage "screen"} ${screenArgs} ${lib.getExe cfg.package} ${dibblerArgs} loop";
|
||||||
ExecStartPost =
|
ExecStartPost =
|
||||||
lib.optionals (cfg.limitScreenWidth != null) [
|
lib.optionals (cfg.limitScreenWidth != null) [
|
||||||
"${lib.getExe' cfg.screenPackage "screen"} -X -S dibbler width ${toString cfg.limitScreenWidth}"
|
"${lib.getExe' cfg.screenPackage "screen"} -X -S dibbler width ${toString cfg.limitScreenWidth}"
|
||||||
]
|
]
|
||||||
++ lib.optionals (cfg.limitScreenHeight != null) [
|
++ lib.optionals (cfg.limitScreenHeight != null) [
|
||||||
"${lib.getExe' cfg.screenPackage "screen"} -X -S dibbler height ${toString cfg.limitScreenHeight}"
|
"${lib.getExe' cfg.screenPackage "screen"} -X -S dibbler height ${toString cfg.limitScreenHeight}"
|
||||||
|
]
|
||||||
|
++ [
|
||||||
|
"${lib.getExe' cfg.screenPackage "screen"} -S dibbler -X screen -t worblehat ${lib.getExe worbleCfg.package}"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
services.getty.autologinUser = "dibbler";
|
services.getty.autologinUser = "dibbler";
|
||||||
})
|
})
|
||||||
]);
|
]
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user