{ config, lib, pkgs, ... }: let inherit (lib) mkEnableOption mkOption mkPackageOption mkIf types; cfg = config.programs.resticprofile; yamlFormat = pkgs.formats.yaml { }; baseProfile = import ./profiles/base.nix { inherit lib config; }; profiles = lib.recursiveUpdate baseProfile cfg.profiles; in { options.programs.resticprofile = { enable = mkEnableOption "Enable resticprofile (Restic backup profile manager)"; package = mkPackageOption pkgs "resticprofile" { }; # Multiple configuration files support profiles = mkOption { type = types.attrsOf yamlFormat.type; default = { }; description = '' Multiple configuration files for resticprofile. Each attribute name becomes a YAML file under `$XDG_CONFIG_HOME/resticprofile/`. ''; example = { common = { repository = "local:/backup"; passwordFile = "password.txt"; includes = [ "common.yaml" ]; backup = { source = [ "/home/user/Documents" ]; schedule = "12:30"; }; forget = { keep-daily = 7; keep-weekly = 4; keep-monthly = 6; keep-yearly = 2; }; }; }; }; }; config = mkIf cfg.enable ( let resticprofileCmd = '' ${cfg.package}/bin/resticprofile --config "${config.xdg.configHome}/resticprofile/profiles.yaml" ''; in { # Add a script to manually unschedule and reschedule all resticprofiles home.packages = [ cfg.package (pkgs.writeShellScriptBin "rp" '' set -e sudo ${cfg.package}/bin/resticprofile --config "${config.xdg.configHome}/resticprofile/profiles.yaml" $@ '') (pkgs.writeShellScriptBin "rps" '' set -e rp unschedule --all rp schedule --all '') (pkgs.writeShellScriptBin "rp-test" "rp run-schedule backup@default --dry-run") ]; xdg.configFile."resticprofile/profiles.yaml".source = yamlFormat.generate "profiles" { version = "2"; profiles = profiles; }; } ); }