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