{ arion, config, lib, ... } @ inputs: with lib; with builtins; let user = config.vars.user; configPath = "/var/lib/arion"; in { imports = [arion.nixosModules.arion]; users.extraUsers.${user}.extraGroups = ["docker"]; services.borgbackup.configs.arion = { paths = [configPath]; exclude = ["**/lineageos*"]; }; virtualisation = { docker = { enable = true; storageDriver = "btrfs"; }; arion = { backend = "docker"; projects = let composeFiles = filter (n: hasSuffix "compose.nix" (toString n)) (filesystem.listFilesRecursive ./.); projects = filterAttrs (n: v: v.enabled or true) (listToAttrs (map (p: { name = elemAt (match ".*\/(.*)\/compose\.nix" (toString p)) 0; value = import p (inputs // { rwPath = configPath + "/" + elemAt (match "[^-]*-(.*)" "${dirOf p}") 0; }); }) composeFiles)); in mapAttrs (n: v: { # https://docs.hercules-ci.com/arion/options settings = { enableDefaultNetwork = v.enableDefaultNetwork or true; networks = optionalAttrs (hasAttr "networks" v) v.networks; services = mapAttrs (n': v': { image = optionalAttrs (hasAttr "customImage" v') v'.customImage; service = filterAttrs (n: v: n != "customImage") v'; }) v.services; }; }) projects; }; }; }