44 lines
1.2 KiB
Nix
44 lines
1.2 KiB
Nix
{ config, lib, ... }:
|
|
|
|
let
|
|
### --> SnapRAID disks research
|
|
contentDiskMounts = lib.attrsets.attrNames (
|
|
lib.attrsets.filterAttrs (name: value: lib.strings.hasPrefix "/mnt/content-" name) config.fileSystems
|
|
);
|
|
parityDiskMounts = lib.attrsets.attrNames (
|
|
lib.attrsets.filterAttrs (name: value: lib.strings.hasPrefix "/mnt/parity-" name) config.fileSystems
|
|
);
|
|
snapraidDataDisks = lib.lists.foldl'
|
|
(acc: path: acc // { "d${toString (acc.i + 1)}" = path; i = acc.i + 1; })
|
|
{ i = 0; }
|
|
contentDiskMounts;
|
|
### SnapRAID disks research <--
|
|
in
|
|
|
|
### --> MergerFS setup
|
|
{
|
|
fileSystems."/mnt/data-storage" = {
|
|
device = "mergerfs";
|
|
fsType = "fuse";
|
|
options = [
|
|
"defaults"
|
|
"allow_other"
|
|
"use_ino"
|
|
"cache.files=off"
|
|
"moveonenospc=true"
|
|
"category.create=mfs"
|
|
"srcmounts=${lib.strings.concatStringsSep ":" contentDiskMounts}"
|
|
];
|
|
};
|
|
### MergerFS setup <--
|
|
|
|
### --> SnapRAID setup
|
|
services.snapraid = {
|
|
enable = true;
|
|
contentFiles = map (disk: "${disk}/snapraid.content") contentDiskMounts;
|
|
parityFiles = map (disk: "${disk}/snapraid.parity") parityDiskMounts;
|
|
dataDisks = builtins.removeAttrs snapraidDataDisks [ "i" ];
|
|
};
|
|
### SnapRAID setup <--
|
|
|
|
} |