nixos-config/modules
Gabriel Arazas 207a682045 backup-archive: switch to NixOS borg module
While Borgmatic is great, the NixOS module does have easier
configuration for various use cases such as backups in removable
devices. To make this possible in Borgmatic, you have to go through some
loops.

Borgmatic does have easier way of indicating paths. However, in recent
versions of Borg, they have the experimental feature of indicate both
include and exclude through patterns which is close enough.

Also, because of this, we'll be deprecating the custom borgmatic service
at this point. It'll be removed once all of my NixOS-related backup
setups are not using it.
2022-02-19 16:58:08 +08:00
..
home-manager Clean up the files 2022-02-02 12:27:32 +08:00
nixos backup-archive: switch to NixOS borg module 2022-02-19 16:58:08 +08:00
README.adoc Update documentation 2021-12-21 14:29:27 +08:00

Table of Contents

These are various modules ranging from NixOS modules and home-manager modules.

The modules are imported usually through lib.filesToAttr, allowing for easier structuring without modifying the index file of each module (i.e., default.nix). (See the implementation for more details.)

For example, take the following module folder structure of the custom NixOS modules…​

nixos/
├── themes/
│   ├── a-happy-gnome/
│   │   ├── default.nix
│   │   └── README.adoc
│   ├── a-sad-gnome/
│   │   ├── default.nix
│   │   └── README.adoc
│   └── default.nix
├── specific/
│   ├── borg.nix
│   └── prometheus.nix
├── agenix.nix
├── archiving.nix
├── desktop.nix
├── dev.nix
├── editors.nix
└── users.nix

where it should have the equivalent attribute set.

{
  agenix = path/to/agenix.nix;
  archiving = path/to/archiving.nix;
  desktop = path/to/desktop.nix;
  dev = path/to/dev.nix;
  editors = path/to/editors.nix;
  specific = {
    borg = path/to/specific/borg.nix;
    prometheus = path/to/specific/prometheus.nix;
  };
  themes = path/to/themes; # Since it has a 'default.nix' detected, we're using it instead.
  users = path/to/users.nix;
}

The resulting attribute set can be easily be used for importing. Heres an example of a NixOS system created with the modules which can used for shared configuration between hosts.

lib.nixosSystem {
  system = "x86_64-linux";
  modules = lib.mapAttrsToList (name: path: import path) (lib.filesToAttr ./modules);
}

Flake outputs

Various modules are then exported to the project flake as the following output: