[nix] allow configuration of triggers/actions in nix

This commit is contained in:
2023-10-31 02:45:25 +01:00
parent d0439394cf
commit f376d8684b

104
flake.nix
View File

@@ -47,7 +47,7 @@
nixosModules.gokill = { config, lib, pkgs, ... }: nixosModules.gokill = { config, lib, pkgs, ... }:
let let
cfg = config.services.gokill; cfg = config.services.gokill;
configFile = pkgs.writeText "config.json" ''${cfg.extraConfig}''; configFile = pkgs.writeText "config.json" (builtins.toJSON cfg.triggers);
gokill-pkg = self.packages.x86_64-linux.gokill; gokill-pkg = self.packages.x86_64-linux.gokill;
in in
{ {
@@ -61,6 +61,45 @@
''; '';
}; };
triggers = lib.mkOption {
description = "list of triggers";
default = [];
type = with lib.types; lib.types.listOf ( submodule {
options = {
type = lib.mkOption {
type = lib.types.str;
};
name = lib.mkOption {
type = lib.types.str;
};
options = lib.mkOption {
type = lib.types.attrs;
};
actions = lib.mkOption {
description = "list of actions";
type = with lib.types; lib.types.listOf ( submodule {
options = {
type = lib.mkOption {
type = lib.types.str;
};
options = lib.mkOption {
type = lib.types.attrs;
};
stage = lib.mkOption {
type = lib.types.int;
};
};
});
};
};
});
};
extraConfig = lib.mkOption { extraConfig = lib.mkOption {
type = lib.types.str; type = lib.types.str;
description = lib.mdDoc '' description = lib.mdDoc ''
@@ -92,53 +131,30 @@
self.nixosModules.gokill self.nixosModules.gokill
{ {
services.gokill.enable = true; services.gokill.enable = true;
services.gokill.extraConfig = '' services.gokill.triggers = [
[
{ {
"type": "Timeout", type = "Timeout";
"name": "custom timeout", name = "custom timeout";
"options": { options = {
"duration": 30 duration = 10;
}, };
"actions": [ actions = [
{ {
"type": "Print", type = "Timeout";
"options": { options = {
"message": "Stage 1 triggered. Waiting 25 seconds" duration = 5;
}, };
"stage": 1 stage = 1;
},
{
"type": "Timeout",
"options": {
"duration": 20
},
"stage": 1
},
{
"type": "Timeout",
"options": {
"duration": 5
},
"stage": 2
},
{
"type": "Print",
"options": {
"message": "Shutdown in 5 seconds..."
},
"stage": 2
},
{
"type": "Shutdown",
"options": {
},
"stage": 3
} }
] {
type = "Shutdown";
options = {
};
stage = 2;
} }
] ];
''; }
];
users.users.root.password = "root"; users.users.root.password = "root";
virtualisation.vmVariant.virtualisation.graphics = false; virtualisation.vmVariant.virtualisation.graphics = false;
} }