7 Commits

Author SHA1 Message Date
25c604cbca worbling... 2026-02-15 12:42:06 +01:00
6e0b207284 thing 2026-02-15 12:17:18 +01:00
fa51ede141 other test thing 2026-02-15 12:16:50 +01:00
e6d276e3ac test other thing 2026-02-15 12:05:54 +01:00
8ad532878e don't use not builtin 2026-02-15 11:31:05 +01:00
978c5fbb51 testing 2026-02-15 00:08:59 +01:00
55457fbeac init 2026-02-14 23:28:47 +01:00
2 changed files with 148 additions and 119 deletions

View File

@@ -645,7 +645,7 @@ class ConfirmMenu(Menu):
options = {True: "[Y/n]", False: "[y/N]", None: "[y/n]"}[self.default] options = {True: "[Y/n]", False: "[y/N]", None: "[y/n]"}[self.default]
while True: while True:
result = self.input_str( result = self.input_str(
f"{self.prompt} {options}", f"{self.prompt} ({options})",
end_prompt=": ", end_prompt=": ",
timeout=self.timeout, timeout=self.timeout,
) )

View File

@@ -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";
}) })
]); ]
);
} }