diff --git a/home/hosts/y2q.nix b/home/hosts/y2q.nix index c761a92..33b5a03 100644 --- a/home/hosts/y2q.nix +++ b/home/hosts/y2q.nix @@ -4,6 +4,7 @@ imports = [ inputs.nixvim.homeModules.nixvim + ../modules/runit ../modules/cli/git.nix ../modules/cli/ripgrep.nix ../modules/cli/btop.nix diff --git a/home/modules/runit/default.nix b/home/modules/runit/default.nix new file mode 100644 index 0000000..eb12c04 --- /dev/null +++ b/home/modules/runit/default.nix @@ -0,0 +1,50 @@ +{ config, lib, ... }: + +{ + imports = ( + let + servicesPath = ./services; + serviceModules = builtins.attrNames (builtins.readDir (servicesPath)); + in + map (module: servicesPath + "/${module}") serviceModules + ); + + options.runit = { + services = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule ({ name, ... }: { + options = { + script = lib.mkOption { + type = lib.types.str; + description = "Shell commands executed as the service's main process"; + }; + log.enable = lib.mkEnableOption "Enable logging"; + }; + })); + }; + default = {}; + description = "User-level runit services under ~/runit/services/"; + }; + + config = { + home.file = lib.mkMerge ( + lib.mapAttrsToList (serviceName: sCfg: + { + # run script + "runit/services/${serviceName}/run" = { + text = sCfg.script; + executable = true; + }; + + # logging + "runit/services/${serviceName}/log/run" = lib.mkIf sCfg.log.enable { + text = '' + #!/bin/sh + exec svlogd -t ./main + ''; + }; + } + ) config.runit.services + ); + }; +} + diff --git a/home/modules/runit/services/glances.nix b/home/modules/runit/services/glances.nix new file mode 100644 index 0000000..4a7079f --- /dev/null +++ b/home/modules/runit/services/glances.nix @@ -0,0 +1,10 @@ +{ pkgs, ... }: + +{ + runit.services.glances = { + script = '' + #!/bin/bash + ${pkgs.glances}/bin/glances -w + ''; + }; +}