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=",
+
"lastModified": 1764788330,
+
"narHash": "sha256-hE/gXK+Z0j654T0tsW+KcndRqsgZXe8HyWchjBJgQpw=",
"owner": "nix-community",
"repo": "home-manager",
-
"rev": "ea164b7c9ccdc2321379c2ff78fd4317b4c41312",
+
"rev": "fca4cba863e76c26cfe48e5903c2ff4bac2b2d5d",
"type": "github"
},
"original": {
···
},
"nixpkgs": {
"locked": {
-
"lastModified": 1763553727,
-
"narHash": "sha256-4aRqRkYHplWk0mrtoF5i3Uo73E3niOWiUZU8kmPm9hQ=",
+
"lastModified": 1764811743,
+
"narHash": "sha256-Ypfd8oBuG3HWtzcY7VtYiI6Pawznag7YHWy8RoOfiBs=",
"owner": "NixOS",
"repo": "nixpkgs",
-
"rev": "094318ea16502a7a81ce90dd3638697020f030a2",
+
"rev": "4a6ebaabd716d6479b39fa234a8f895f0ec1cb88",
"type": "github"
},
"original": {
···
},
"nixpkgs-stable": {
"locked": {
-
"lastModified": 1763608124,
-
"narHash": "sha256-zlZnIcby+AdBREjjqOG7xLamvs2RljQ48dyUwYFD6oM=",
+
"lastModified": 1764769562,
+
"narHash": "sha256-Lx/5433PaXsAe58ng9teZ3LpHbVLTZ0Ue6WewpkAWcM=",
"owner": "NixOS",
"repo": "nixpkgs",
-
"rev": "f6af808f2d4b1d2feb64ec2d9901b322e980938a",
+
"rev": "6d76c70a214229ada04edc84b25be34f3dc34dd3",
"type": "github"
},
"original": {
···
},
"nixpkgs-unstable": {
"locked": {
-
"lastModified": 1763421233,
-
"narHash": "sha256-Stk9ZYRkGrnnpyJ4eqt9eQtdFWRRIvMxpNRf4sIegnw=",
+
"lastModified": 1764667669,
+
"narHash": "sha256-7WUCZfmqLAssbDqwg9cUDAXrSoXN79eEEq17qhTNM/Y=",
"owner": "NixOS",
"repo": "nixpkgs",
-
"rev": "89c2b2330e733d6cdb5eae7b899326930c2c0648",
+
"rev": "418468ac9527e799809c900eda37cbff999199b6",
"type": "github"
},
"original": {
···
},
"nixpkgs_3": {
"locked": {
-
"lastModified": 1763191728,
-
"narHash": "sha256-esRhOS0APE6k40Hs/jjReXg+rx+J5LkWw7cuWFKlwYA=",
+
"lastModified": 1764445028,
+
"narHash": "sha256-ik6H/0Zl+qHYDKTXFPpzuVHSZE+uvVz2XQuQd1IVXzo=",
"owner": "NixOS",
"repo": "nixpkgs",
-
"rev": "1d4c88323ac36805d09657d13a5273aea1b34f0c",
+
"rev": "a09378c0108815dbf3961a0e085936f4146ec415",
"type": "github"
},
"original": {
···
"rust-overlay": "rust-overlay"
},
"locked": {
-
"lastModified": 1763583727,
-
"narHash": "sha256-nhEg5l2h9fjqjFyBd+85laV6A3coUIN2UFhGoHJJxSI=",
+
"lastModified": 1764805253,
+
"narHash": "sha256-uGyOlk8bB0Eno/qQl6bk3gF1FerlYFAAJFwYsD7mmJc=",
"owner": "roc-lang",
"repo": "roc",
-
"rev": "2fc3b7afb622fcc66d899975ba6a208e1c1d199e",
+
"rev": "bb17e26f7bd1aa51ce8e18a2a795eab9d07369a9",
"type": "github"
},
"original": {
···
"nixpkgs": "nixpkgs_3"
},
"locked": {
-
"lastModified": 1763607916,
-
"narHash": "sha256-VefBA1JWRXM929mBAFohFUtQJLUnEwZ2vmYUNkFnSjE=",
+
"lastModified": 1764483358,
+
"narHash": "sha256-EyyvCzXoHrbL467YSsQBTWWg4sR96MH1sPpKoSOelB4=",
"owner": "Mic92",
"repo": "sops-nix",
-
"rev": "877bb495a6f8faf0d89fc10bd142c4b7ed2bcc0b",
+
"rev": "5aca6ff67264321d47856a2ed183729271107c9c",
"type": "github"
},
"original": {
+64 -2
modules/cloud-storage.nix
···
-
{ pkgs, ... }:
+
{
+
config,
+
lib,
+
pkgs,
+
...
+
}:
{
-
users.users.mou.packages = with pkgs; [ nextcloud-client ];
+
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]
+
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-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]
+
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