{ config, lib, ... }: { options = { ezServices = with lib; mkOption { type = with types; attrsOf str; default = { }; }; ezOneShots = with lib; mkOption { type = with types; attrsOf str; default = { }; }; ezConf = with lib; mkOption { type = with types; attrsOf path; default = { }; }; # for specifying an additional systemd target extraTarget = with lib; mkOption { type = with types; listOf str; default = [ ]; }; }; config = { systemd.user.services = builtins.mapAttrs (name: cmd: { Unit = { Description = "${name}"; Requires = [ "graphical-session.target" ] ++ config.extraTarget; After = [ "graphical-session.target" ] ++ config.extraTarget; }; Service = { ExecStart = cmd; }; Install = { WantedBy = [ "graphical-session.target" ] ++ config.extraTarget; }; }) config.ezServices // builtins.mapAttrs (name: cmd: { Unit = { Description = "${name}"; After = [ "graphical-session.target" ] ++ config.extraTarget; }; Service = { ExecStart = cmd; Type = "oneshot"; }; Install = { WantedBy = [ "graphical-session.target" ] ++ config.extraTarget; }; }) config.ezOneShots; xdg.configFile = builtins.mapAttrs (_name: value: { enable = true; source = value; }) config.ezConf; }; }