homemanager module

This commit is contained in:
Robin Appelman 2025-10-13 20:10:18 +02:00
commit 0e572744bf
5 changed files with 108 additions and 5 deletions

88
nix/hm-module.nix Normal file
View file

@ -0,0 +1,88 @@
{
config,
lib,
pkgs,
...
}:
with lib; let
cfg = config.services.galton;
format = pkgs.formats.toml {};
removeNulls = filterAttrs (_: val: val != null);
configFile = format.generate "galton.toml" {
watch = removeNulls {inherit (cfg) symlink;};
rule = map removeNulls cfg.rules;
};
in {
options.services.galton = {
enable = mkEnableOption "galton";
directory = mkOption {
type = types.str;
example = "~/Downloads";
description = "Directory to watch for new files";
};
symlink = mkOption {
type = types.nullOr types.str;
default = null;
description = "Create a symlink to matched files";
};
rules = mkOption {
default = [];
type = types.listOf (types.submodule {
options = {
name = mkOption {
type = types.nullOr types.str;
default = null;
};
url = mkOption {
type = types.nullOr types.str;
default = null;
};
referrer = mkOption {
type = types.nullOr types.str;
default = null;
};
move = mkOption {
type = types.nullOr types.str;
default = null;
};
rename = mkOption {
type = types.nullOr types.str;
default = null;
};
};
});
};
logLevel = mkOption {
type = types.str;
default = "info";
};
package = mkOption {
type = types.package;
defaultText = literalExpression "pkgs.galton";
description = "package to use";
};
};
config = mkIf cfg.enable {
systemd.user.services.galton = {
Unit = {
Description = "Galton directory watcher";
};
Service = {
Environment = "RUST_LOG=${cfg.logLevel}";
ExecStart = "${getExe cfg.package} --config ${configFile} watch ${cfg.directory}";
Restart = "on-failure";
RestartSec = 10;
};
Install = {
WantedBy = ["default.target"];
};
};
};
}