{ lib, pkgs, ... }: let instanceType = lib.types.submodule { options = { enable = lib.mkEnableOption "Enable Kopia instance"; user = lib.mkOption { type = lib.types.str; default = "root"; description = "User under which the Kopia instance runs."; }; environmentFile = lib.mkOption { type = lib.types.nullOr lib.types.path; default = null; description = "File containing environment variables for kopia like password."; }; }; }; mkInstanceServices = instances: serviceCreator: lib.pipe instances [ (lib.attrsets.mapAttrs' serviceCreator) (lib.recursiveUpdate { }) ]; in { imports = [ { _module.args.mkInstanceServices = mkInstanceServices; imports = [ ./repositories.nix ./maintenance.nix ./snapshot.nix ./policy.nix ./web.nix ]; } ]; options.services.kopia = { enable = lib.mkEnableOption "Enable Kopia backup"; instances = lib.mkOption { type = lib.types.attrsOf instanceType; default = { }; }; }; config.environment.systemPackages = [ pkgs.kopia ]; }