1{
2 config,
3 lib,
4 pkgs,
5 ...
6}:
7let
8 cfg = config.services.zram-generator;
9 settingsFormat = pkgs.formats.ini { };
10in
11{
12 meta = {
13 maintainers = with lib.maintainers; [ nickcao ];
14 };
15
16 options.services.zram-generator = {
17 enable = lib.mkEnableOption "Systemd unit generator for zram devices";
18
19 package = lib.mkPackageOption pkgs "zram-generator" { };
20
21 settings = lib.mkOption {
22 type = lib.types.submodule {
23 freeformType = settingsFormat.type;
24 };
25 default = { };
26 description = ''
27 Configuration for zram-generator,
28 see https://github.com/systemd/zram-generator for documentation.
29 '';
30 };
31 };
32
33 config = lib.mkIf cfg.enable {
34 system.requiredKernelConfig = with config.lib.kernelConfig; [
35 (isEnabled "ZRAM")
36 ];
37
38 systemd.packages = [ cfg.package ];
39 systemd.services."systemd-zram-setup@".path = [ pkgs.util-linux ]; # for mkswap
40
41 environment.etc."systemd/zram-generator.conf".source =
42 settingsFormat.generate "zram-generator.conf" cfg.settings;
43 };
44}