mirror of
https://github.com/foo-dogsquared/nixos-config.git
synced 2025-01-31 04:58:01 +00:00
118 lines
3.2 KiB
Nix
118 lines
3.2 KiB
Nix
# A replacement module for the Borgmatic home-manager module. It is quite
|
|
# limited and also feels janky to use.
|
|
{ config, lib, pkgs, ... }:
|
|
|
|
let
|
|
cfg = config.programs.borgmatic;
|
|
|
|
settingsFormat = pkgs.formats.yaml { };
|
|
|
|
borgmaticBackupsModule = { name, lib, ... }: {
|
|
options = {
|
|
settings = lib.mkOption {
|
|
type = settingsFormat.type;
|
|
default = { };
|
|
example = lib.literalExpression ''
|
|
{
|
|
source_directories = [
|
|
"''${config.xdg.configHome}"
|
|
"''${config.xdg.userDirs.extraConfig.XDG_PROJECTS_DIR}"
|
|
"''${config.home.homeDirectory}/.thunderbird"
|
|
"''${config.home.homeDirectory}/Zotero"
|
|
];
|
|
|
|
repositories = [
|
|
{
|
|
path = "ssh://k8pDxu32@k8pDxu32.repo.borgbase.com/./repo";
|
|
label = "borgbase";
|
|
}
|
|
|
|
{
|
|
path = "/var/lib/backups/local.borg";
|
|
label = "local";
|
|
}
|
|
];
|
|
|
|
keep_daily = 7;
|
|
keep_weekly = 4;
|
|
keep_monthly = 6;
|
|
|
|
checks = [
|
|
{ name = "repository"; }
|
|
{ name = "archives"; frequency = "2 weeks"; }
|
|
];
|
|
}
|
|
'';
|
|
};
|
|
|
|
validateConfig =
|
|
lib.mkEnableOption "validation step for the resulting configuration" // {
|
|
default = true;
|
|
};
|
|
};
|
|
};
|
|
|
|
mkBorgmaticConfig = n: v:
|
|
lib.nameValuePair "borgmatic.d/${n}.yaml" {
|
|
source = let
|
|
settingsFile = settingsFormat.generate "borgmatic-config-${n}" v.settings;
|
|
|
|
borgmaticValidateCmd =
|
|
if lib.versionOlder cfg.package.version "1.7.15" then
|
|
"borgmatic config validate --config ${settingsFile}"
|
|
else
|
|
"validate-borgmatic-config --config ${settingsFile}";
|
|
in
|
|
if v.validateConfig then
|
|
pkgs.runCommand "generate-borgmatic-config-with-validation" {
|
|
buildInputs = [ cfg.package ];
|
|
preferLocalBuild = true;
|
|
} ''
|
|
${borgmaticValidateCmd} && install ${settingsFile} $out
|
|
''
|
|
else
|
|
settingsFile;
|
|
};
|
|
in
|
|
{
|
|
disabledModules = [ "programs/borgmatic.nix" ];
|
|
options.programs.borgmatic = {
|
|
enable = lib.mkEnableOption "configuring Borg backups with Borgmatic";
|
|
|
|
package = lib.mkPackageOption pkgs "borgmatic" { };
|
|
|
|
backups = lib.mkOption {
|
|
type = with lib.types; attrsOf (submodule borgmaticBackupsModule);
|
|
default = { };
|
|
example = lib.literalExpression ''
|
|
{
|
|
personal = {
|
|
validateConfig = true;
|
|
settings = {
|
|
source_directories = [
|
|
config.xdg.configHome
|
|
config.xdg.userDirs.documents
|
|
config.xdg.userDirs.photos
|
|
];
|
|
|
|
repositories = lib.singleton {
|
|
path = "ssh://alskdjalskdjalsdkj";
|
|
label = "remote-hetzner-box";
|
|
};
|
|
|
|
keep_daily = 7;
|
|
keep_weekly = 6;
|
|
keep_monthly = 6;
|
|
}
|
|
};
|
|
}
|
|
'';
|
|
};
|
|
};
|
|
|
|
config = lib.mkIf cfg.enable {
|
|
home.packages = [ cfg.package ];
|
|
xdg.configFile = lib.mapAttrs' mkBorgmaticConfig cfg.backups;
|
|
};
|
|
}
|