diff --git a/nixos/modules/services/system/swapspace.nix b/nixos/modules/services/system/swapspace.nix index 9dfea492cd672..4fe0ca3a3b075 100644 --- a/nixos/modules/services/system/swapspace.nix +++ b/nixos/modules/services/system/swapspace.nix @@ -9,11 +9,27 @@ let cfg = config.services.swapspace; inherit (lib) types + mkIf mkOption mkPackageOption mkEnableOption ; - configFile = pkgs.writeText "swapspace.conf" (lib.generators.toKeyValue { } cfg.settings); + inherit (pkgs) + makeWrapper + runCommand + writeText + ; + configFile = writeText "swapspace.conf" (lib.generators.toKeyValue { } cfg.settings); + userWrapper = + runCommand "swapspace" + { + buildInputs = [ makeWrapper ]; + } + '' + mkdir -p "$out/bin" + makeWrapper '${lib.getExe cfg.package}' "$out/bin/swapspace" \ + --add-flags "-c '${configFile}'" + ''; in { options.services.swapspace = { @@ -28,6 +44,13 @@ in ]; description = "Any extra arguments to pass to swapspace"; }; + installWrapper = mkOption { + type = types.bool; + default = true; + description = '' + This will add swapspace wrapped with the generated config, to environment.systemPackages + ''; + }; settings = mkOption { type = types.submodule { options = { @@ -92,8 +115,8 @@ in }; }; - config = lib.mkIf cfg.enable { - environment.systemPackages = [ cfg.package ]; + config = mkIf cfg.enable { + environment.systemPackages = [ (if cfg.installWrapper then userWrapper else cfg.package) ]; systemd.packages = [ cfg.package ]; systemd.services.swapspace = { wantedBy = [ "multi-user.target" ]; diff --git a/nixos/tests/swapspace.nix b/nixos/tests/swapspace.nix index ab0174629eb8d..89153d3e30a40 100644 --- a/nixos/tests/swapspace.nix +++ b/nixos/tests/swapspace.nix @@ -1,10 +1,10 @@ import ./make-test-python.nix ( - { pkgs, lib, ... }: + { lib, ... }: { name = "swapspace"; - meta = with pkgs.lib.maintainers; { + meta = with lib.maintainers; { maintainers = [ Luflosi phanirithvij @@ -38,6 +38,9 @@ import ./make-test-python.nix ( machine.wait_for_unit("swapspace.service") machine.wait_for_unit("root-swapfile.swap") + # ensure swapspace wrapper command runs + machine.succeed("swapspace --inspect") + swamp = False with subtest("swapspace works"): machine.execute("mkdir /root/memfs")