refactor rclone, use same serviceConfig for all mounts

This commit is contained in:
cy 2025-03-20 19:43:22 -04:00
parent 8ffe43a441
commit c67622ba36
Signed by: cy
SSH key fingerprint: SHA256:o/geVWV4om1QhUSkKvDQeW/eAihwnjyXkqMwrVdbuts

View file

@ -4,6 +4,32 @@
lib, lib,
... ...
}: }:
let
mkServiceConfig = remote: mount: {
Type = "notify";
TimeoutSec = "5min 20s";
ExecStartPre = "/usr/bin/env mkdir -p ${mount}";
ExecStart = ''
${lib.getExe pkgs.rclone} mount \
--config ${config.sops.secrets."rclone/config".path} \
--allow-other \
--cache-dir /var/cache/rclone \
--transfers 32 \
--vfs-cache-mode full \
--vfs-cache-min-free-space 5G \
--dir-cache-time 30d \
--no-checksum \
--no-modtime \
--vfs-fast-fingerprint \
--vfs-read-chunk-size 4M \
--vfs-read-chunk-streams 32 \
--sftp-concurrency 128 \
--sftp-chunk-size 255k \
${remote} ${mount}
'';
ExecStop = "${lib.getExe' pkgs.fuse "fusermount"} -zu ${mount}";
};
in
{ {
systemd.services.immich-mount = { systemd.services.immich-mount = {
enable = true; enable = true;
@ -12,21 +38,7 @@
after = [ "network-online.target" ]; after = [ "network-online.target" ];
requiredBy = [ "podman-immich-server.service" ]; requiredBy = [ "podman-immich-server.service" ];
before = [ "podman-immich-server.service" ]; before = [ "podman-immich-server.service" ];
serviceConfig = { serviceConfig = mkServiceConfig "photos:" "/mnt/photos";
Type = "notify";
ExecStartPre = "/usr/bin/env mkdir -p /mnt/photos";
ExecStart = ''
${lib.getExe pkgs.rclone} mount \
--config ${config.sops.secrets."rclone/config".path} \
--cache-dir /var/cache/rclone \
--transfers=32 \
--dir-cache-time 30d \
--vfs-cache-mode writes \
--vfs-cache-max-size 2G \
photos: /mnt/photos
'';
ExecStop = "${lib.getExe' pkgs.fuse "fusermount"} -u /mnt/photos";
};
}; };
systemd.services.garage-mount = { systemd.services.garage-mount = {
@ -36,28 +48,6 @@
after = [ "network-online.target" ]; after = [ "network-online.target" ];
requiredBy = [ "garage.service" ]; requiredBy = [ "garage.service" ];
before = [ "garage.service" ]; before = [ "garage.service" ];
serviceConfig = { serviceConfig = mkServiceConfig "rsyncnet:garage" "/mnt/garage";
Type = "notify";
ExecStartPre = "/usr/bin/env mkdir -p /mnt/garage";
ExecStart = ''
${lib.getExe pkgs.rclone} mount \
--config ${config.sops.secrets."rclone/config".path} \
--allow-other \
--cache-dir /var/cache/rclone \
--transfers 32 \
--vfs-cache-mode full \
--vfs-cache-min-free-space 5G \
--dir-cache-time 30d \
--no-checksum \
--no-modtime \
--vfs-fast-fingerprint \
--vfs-read-chunk-size 4M \
--vfs-read-chunk-streams 64 \
--sftp-concurrency 128 \
--sftp-chunk-size 255k \
rsyncnet:garage /mnt/garage
'';
ExecStop = "${lib.getExe' pkgs.fuse "fusermount"} -u /mnt/garage";
};
}; };
} }