Nix configurations for my homelab

Use rclone for nextcloud instead of nextcloud client

The nextcloud client requires user interaction with the secret service
and since im in the process of setting up autostarting for frequently
used applications, I'd rather not have this.

Additionally, this means I won't have every single file in a sync on
my machine at once which will help with space savings.

yemou.pink 12d0edb8 23c9376d

verified
Changed files
+91 -25
modules
secrets
+21 -21
flake.lock
···
]
},
"locked": {
-
"lastModified": 1763416652,
-
"narHash": "sha256-8EBEEvtzQ11LCxpQHMNEBQAGtQiCu/pqP9zSovDSbNM=",
"owner": "nix-community",
"repo": "home-manager",
-
"rev": "ea164b7c9ccdc2321379c2ff78fd4317b4c41312",
"type": "github"
},
"original": {
···
},
"nixpkgs": {
"locked": {
-
"lastModified": 1763553727,
-
"narHash": "sha256-4aRqRkYHplWk0mrtoF5i3Uo73E3niOWiUZU8kmPm9hQ=",
"owner": "NixOS",
"repo": "nixpkgs",
-
"rev": "094318ea16502a7a81ce90dd3638697020f030a2",
"type": "github"
},
"original": {
···
},
"nixpkgs-stable": {
"locked": {
-
"lastModified": 1763608124,
-
"narHash": "sha256-zlZnIcby+AdBREjjqOG7xLamvs2RljQ48dyUwYFD6oM=",
"owner": "NixOS",
"repo": "nixpkgs",
-
"rev": "f6af808f2d4b1d2feb64ec2d9901b322e980938a",
"type": "github"
},
"original": {
···
},
"nixpkgs-unstable": {
"locked": {
-
"lastModified": 1763421233,
-
"narHash": "sha256-Stk9ZYRkGrnnpyJ4eqt9eQtdFWRRIvMxpNRf4sIegnw=",
"owner": "NixOS",
"repo": "nixpkgs",
-
"rev": "89c2b2330e733d6cdb5eae7b899326930c2c0648",
"type": "github"
},
"original": {
···
},
"nixpkgs_3": {
"locked": {
-
"lastModified": 1763191728,
-
"narHash": "sha256-esRhOS0APE6k40Hs/jjReXg+rx+J5LkWw7cuWFKlwYA=",
"owner": "NixOS",
"repo": "nixpkgs",
-
"rev": "1d4c88323ac36805d09657d13a5273aea1b34f0c",
"type": "github"
},
"original": {
···
"rust-overlay": "rust-overlay"
},
"locked": {
-
"lastModified": 1763583727,
-
"narHash": "sha256-nhEg5l2h9fjqjFyBd+85laV6A3coUIN2UFhGoHJJxSI=",
"owner": "roc-lang",
"repo": "roc",
-
"rev": "2fc3b7afb622fcc66d899975ba6a208e1c1d199e",
"type": "github"
},
"original": {
···
"nixpkgs": "nixpkgs_3"
},
"locked": {
-
"lastModified": 1763607916,
-
"narHash": "sha256-VefBA1JWRXM929mBAFohFUtQJLUnEwZ2vmYUNkFnSjE=",
"owner": "Mic92",
"repo": "sops-nix",
-
"rev": "877bb495a6f8faf0d89fc10bd142c4b7ed2bcc0b",
"type": "github"
},
"original": {
···
]
},
"locked": {
+
"lastModified": 1764788330,
+
"narHash": "sha256-hE/gXK+Z0j654T0tsW+KcndRqsgZXe8HyWchjBJgQpw=",
"owner": "nix-community",
"repo": "home-manager",
+
"rev": "fca4cba863e76c26cfe48e5903c2ff4bac2b2d5d",
"type": "github"
},
"original": {
···
},
"nixpkgs": {
"locked": {
+
"lastModified": 1764811743,
+
"narHash": "sha256-Ypfd8oBuG3HWtzcY7VtYiI6Pawznag7YHWy8RoOfiBs=",
"owner": "NixOS",
"repo": "nixpkgs",
+
"rev": "4a6ebaabd716d6479b39fa234a8f895f0ec1cb88",
"type": "github"
},
"original": {
···
},
"nixpkgs-stable": {
"locked": {
+
"lastModified": 1764769562,
+
"narHash": "sha256-Lx/5433PaXsAe58ng9teZ3LpHbVLTZ0Ue6WewpkAWcM=",
"owner": "NixOS",
"repo": "nixpkgs",
+
"rev": "6d76c70a214229ada04edc84b25be34f3dc34dd3",
"type": "github"
},
"original": {
···
},
"nixpkgs-unstable": {
"locked": {
+
"lastModified": 1764667669,
+
"narHash": "sha256-7WUCZfmqLAssbDqwg9cUDAXrSoXN79eEEq17qhTNM/Y=",
"owner": "NixOS",
"repo": "nixpkgs",
+
"rev": "418468ac9527e799809c900eda37cbff999199b6",
"type": "github"
},
"original": {
···
},
"nixpkgs_3": {
"locked": {
+
"lastModified": 1764445028,
+
"narHash": "sha256-ik6H/0Zl+qHYDKTXFPpzuVHSZE+uvVz2XQuQd1IVXzo=",
"owner": "NixOS",
"repo": "nixpkgs",
+
"rev": "a09378c0108815dbf3961a0e085936f4146ec415",
"type": "github"
},
"original": {
···
"rust-overlay": "rust-overlay"
},
"locked": {
+
"lastModified": 1764805253,
+
"narHash": "sha256-uGyOlk8bB0Eno/qQl6bk3gF1FerlYFAAJFwYsD7mmJc=",
"owner": "roc-lang",
"repo": "roc",
+
"rev": "bb17e26f7bd1aa51ce8e18a2a795eab9d07369a9",
"type": "github"
},
"original": {
···
"nixpkgs": "nixpkgs_3"
},
"locked": {
+
"lastModified": 1764483358,
+
"narHash": "sha256-EyyvCzXoHrbL467YSsQBTWWg4sR96MH1sPpKoSOelB4=",
"owner": "Mic92",
"repo": "sops-nix",
+
"rev": "5aca6ff67264321d47856a2ed183729271107c9c",
"type": "github"
},
"original": {
+64 -2
modules/cloud-storage.nix
···
-
{ pkgs, ... }:
{
-
users.users.mou.packages = with pkgs; [ nextcloud-client ];
}
···
+
{
+
config,
+
lib,
+
pkgs,
+
...
+
}:
{
+
sops = {
+
secrets = {
+
"rclone-nextcloud/url" = { };
+
"rclone-nextcloud/user" = { };
+
"rclone-nextcloud/password" = { };
+
};
+
templates.rclone-nextcloud-config.content = lib.generators.toINI { } {
+
nextcloud = {
+
type = "webdav";
+
url = config.sops.placeholder."rclone-nextcloud/url";
+
vendor = "nextcloud";
+
user = config.sops.placeholder."rclone-nextcloud/user";
+
pass = config.sops.placeholder."rclone-nextcloud/password";
+
};
+
};
+
};
+
+
environment.persistence."/data/persistent".directories = [
+
{
+
directory = "/var/cache/rclone";
+
mode = "0700";
+
}
+
];
+
+
systemd.services.rclone-nextcloud = {
+
enable = true;
+
description = "NextCloud VFS (rclone)";
+
after = [ "network-online.target" ];
+
wants = [ "network-online.target" ];
+
wantedBy = [ "multi-user.target" ];
+
serviceConfig = {
+
Type = "notify";
+
ExecStartPre = "${pkgs.coreutils}/bin/mkdir -p /media/nextcloud";
+
ExecStart =
+
let
+
args = [
+
"--config ${config.sops.templates.rclone-nextcloud-config.path}"
+
"--cache-dir /var/cache/rclone/nextcloud"
+
# "--dir-cache-time 5m" # This is the default
+
# "--poll-interval 1m" # This is the default
+
"--vfs-cache-mode writes"
+
"--webdav-nextcloud-chunk-size 2Gi"
+
"--checksum"
+
"--track-renames"
+
"--allow-other"
+
"--uid 1000"
+
"--gid 1000"
+
"--dir-perms 0770"
+
"--file-perms 0660"
+
"--umask 007"
+
];
+
in
+
"${pkgs.rclone}/bin/rclone mount nextcloud:/ /media/nextcloud ${lib.strings.join " " args}";
+
ExecStop = "${pkgs.fuse3}/bin/fusermount3 -z /media/nextcloud";
+
Restart = "on-failure";
+
};
+
restartTriggers = [ config.sops.secrets."rclone-nextcloud/password".sopsFileHash ];
+
};
}
+6 -2
secrets/lutea.yaml
···
protonvpn-torrent:
private-key: ENC[AES256_GCM,data:RrXsojuB1y2cFD8yHWvK6NxoANfwPrRA0m+AL/5tmwcLtSWWgxoirucx7M8=,iv:GKUz7QIWeTZmN5G7nFHsn68rJNpG+hqPDL+JNUqLJGA=,tag:lJACT6FYjQEXQylsTd3OTA==,type:str]
public-key: ENC[AES256_GCM,data:nXscOyxUTkXQN/fuHn6FxmAiNDXANBv2UPBOhiknGYN3xH9HK68psdS/yNA=,iv:5OEd8qo1ITTgyOGL1zCjk7ard2mO9k5BXuabZ8GDyfI=,tag:2oUui7PS2R5tFfhmRoazvQ==,type:str]
sops:
age:
- recipient: age1p55em5e3uk3fprj2mpum7ulrslcqgly63pjsyw2yv6hx99trdsnsvvv9ex
···
ZWI2RWEwZllOUDRYV2tCNXZnZFpBS1kKYktM+w+tQbJMcmZBUpuKpeiioChqrWzd
FU4qWfJw3tEZKdTWECGYaQuCUQm7s+PJBc1HQlxd+eFm8YZMPwoa/Q==
-----END AGE ENCRYPTED FILE-----
-
lastmodified: "2025-11-06T18:18:05Z"
-
mac: ENC[AES256_GCM,data:UVTm4DIK+qN+VpmoDYMOPAEunSu7r7i/qP42lbxS7157Tjt1g5+jziS5s5Jmyvu4XZ+zIKcOorfm5/18XbIYLSQJdSKKNbCh6vahSqOSludzXv89evTJx8gyw9W2uDLEpRYWWSl+llqsf6PkTaIfut4+6XqDWHUl6+cJAAvMNRM=,iv:JKD2RW0i1hLgekPXPAT8YlFxkietNN6DilKLCo6ilUI=,tag:7Oma9whDvpV+wwucAwqydw==,type:str]
unencrypted_suffix: _unencrypted
version: 3.11.0
···
protonvpn-torrent:
private-key: ENC[AES256_GCM,data:RrXsojuB1y2cFD8yHWvK6NxoANfwPrRA0m+AL/5tmwcLtSWWgxoirucx7M8=,iv:GKUz7QIWeTZmN5G7nFHsn68rJNpG+hqPDL+JNUqLJGA=,tag:lJACT6FYjQEXQylsTd3OTA==,type:str]
public-key: ENC[AES256_GCM,data:nXscOyxUTkXQN/fuHn6FxmAiNDXANBv2UPBOhiknGYN3xH9HK68psdS/yNA=,iv:5OEd8qo1ITTgyOGL1zCjk7ard2mO9k5BXuabZ8GDyfI=,tag:2oUui7PS2R5tFfhmRoazvQ==,type:str]
+
rclone-nextcloud:
+
url: ENC[AES256_GCM,data:rKYE/vwUHXCDXvYBP2DLPS7Ua83FOY3Pajas7/ue2Gzag9ALvT4+Bl/WUeBl0K+kbiWy,iv:JupnQYmT0mWuJ5DP5HH77CCfJ7JGB7vzs84ZyM4OAFE=,tag:x6bRgrN8e1LHVEMI40hveg==,type:str]
+
user: ENC[AES256_GCM,data:hGfcQ14=,iv:GA9zY8QmNYuj/DRPEWl4OWxY8IQ9bw+OzZg/j9JcnXc=,tag:0grJZ75HbsRpeOTlPjzFbg==,type:str]
+
password: ENC[AES256_GCM,data:AP6JhAreTu7hORjZR5qFcO+3GQAZMIj+OZposHX8CYbFqFGHpQiC5GvVsQBmWffx8vYg3x+3qsyia6me,iv:TVei1Xpn52fq+rBr5hKpHCFstJowqabLrlOw/jiRUd0=,tag:Imm+2C2gmlMjZJXqnxropg==,type:str]
sops:
age:
- recipient: age1p55em5e3uk3fprj2mpum7ulrslcqgly63pjsyw2yv6hx99trdsnsvvv9ex
···
ZWI2RWEwZllOUDRYV2tCNXZnZFpBS1kKYktM+w+tQbJMcmZBUpuKpeiioChqrWzd
FU4qWfJw3tEZKdTWECGYaQuCUQm7s+PJBc1HQlxd+eFm8YZMPwoa/Q==
-----END AGE ENCRYPTED FILE-----
+
lastmodified: "2025-12-02T07:06:57Z"
+
mac: ENC[AES256_GCM,data:7pymCS0iXDcCgkYNd15K7n0bfgX+DgGO81bAAHNciIAsuk2mxzBc4+pBbeBjoo5X8Pgrinhj26Od3xRJ+RpCqM20dYOkHqnBZ8KbX3Q3ZxnRJ2yACeMuTQHbnHNrWrHL0ZwqB7Rq6CYDrrpVyy/LdGZORu+vFaLQPK1GQKmozPM=,iv:YNtrhULRWU3SiNhndci04R7u13ZomTIl4MXQuu+8LXo=,tag:okZ7bSWlZYPaHl03Ynlfjg==,type:str]
unencrypted_suffix: _unencrypted
version: 3.11.0