2022-12-27 04:22:07 +00:00
|
|
|
# Personal configuration on storage solution
|
2023-06-18 00:46:31 +00:00
|
|
|
{
|
|
|
|
pkgs,
|
|
|
|
config,
|
|
|
|
lib,
|
|
|
|
...
|
|
|
|
}: {
|
2022-12-27 04:22:07 +00:00
|
|
|
environment.systemPackages = [
|
|
|
|
pkgs.s3fs
|
|
|
|
pkgs.cifs-utils
|
|
|
|
];
|
|
|
|
|
|
|
|
# Sadly, autofs uses systemd, so we can't put it in home-manager
|
|
|
|
# HACK: need to store secret somewhere so that root can access this
|
|
|
|
# because autofs may run as root for now, we enforce putting the secret in this monorepo
|
|
|
|
# TODO: make this configuration nix-less to show that it's 100% data
|
2023-06-18 00:46:31 +00:00
|
|
|
services.autofs = let
|
|
|
|
# confToBackendArg {lol="what"; empty=""; name_only=null;} -> "lol=what,empty=,name_only"
|
|
|
|
# TODO: change null -> true/false. This allows overriding & better self-documentation
|
|
|
|
confToBackendArg = conf: (lib.concatStringsSep ","
|
|
|
|
(lib.mapAttrsToList (name: value: "${name}${lib.optionalString (value != null) "=${value}"}") conf));
|
2022-12-27 04:22:07 +00:00
|
|
|
|
2023-06-18 00:46:31 +00:00
|
|
|
# mount_dest: path ("wow")
|
|
|
|
# backend_args: nix attrs representing the arguments to be passed to s3fs
|
|
|
|
# ({"-fstype" = "fuse"; "use_cache" = "/tmp";})
|
|
|
|
# bucket: bucket name (hungtr-hot)
|
|
|
|
# NOTE: s3 custom provider will be provided inside
|
|
|
|
# backend_args, so just put the bucket name here
|
|
|
|
#
|
|
|
|
#-> "${mount_dest} ${formatted_args} ${s3fs-bin}#${bucket}"
|
|
|
|
autofs-s3fs_entry = {
|
|
|
|
mount_dest,
|
|
|
|
backend_args ? {"-fstype" = "fuse";},
|
|
|
|
bucket,
|
|
|
|
} @ inputs: let
|
|
|
|
s3fs-exec = "${pkgs.s3fs}/bin/s3fs";
|
|
|
|
in "${mount_dest} ${confToBackendArg backend_args} :${s3fs-exec}\#${bucket}";
|
|
|
|
personalStorage = [
|
|
|
|
(autofs-s3fs_entry {
|
|
|
|
mount_dest = "garden";
|
|
|
|
backend_args = {
|
|
|
|
"-fstype" = "fuse";
|
|
|
|
use_cache = "/tmp";
|
|
|
|
del_cache = null;
|
|
|
|
allow_other = null;
|
|
|
|
url = "https://v5h5.la11.idrivee2-14.com";
|
|
|
|
passwd_file = config.age.secrets."s3fs.digital-garden".path;
|
|
|
|
dbglevel = "debug"; # enable this for better debugging info in journalctl
|
|
|
|
uid = "1000"; # default user
|
|
|
|
gid = "100"; # users
|
|
|
|
umask = "003"; # others read only, fully shared for users group
|
|
|
|
};
|
|
|
|
bucket = "digital-garden";
|
|
|
|
})
|
|
|
|
(
|
2022-12-27 04:22:07 +00:00
|
|
|
let
|
2023-06-18 00:46:31 +00:00
|
|
|
args = {
|
|
|
|
"-fstype" = "cifs";
|
|
|
|
credentials = config.age.secrets._nhitrl_cred.path;
|
|
|
|
user = null;
|
|
|
|
uid = "1001";
|
|
|
|
gid = "100";
|
|
|
|
dir_mode = "0777";
|
|
|
|
file_mode = "0777";
|
2022-12-27 04:22:07 +00:00
|
|
|
};
|
2023-06-18 00:46:31 +00:00
|
|
|
in "felia_d ${confToBackendArg args} ://felia.coati-celsius.ts.net/d"
|
|
|
|
)
|
|
|
|
(
|
|
|
|
let
|
|
|
|
args = {
|
|
|
|
"-fstype" = "cifs";
|
|
|
|
credentials = config.age.secrets._nhitrl_cred.path;
|
|
|
|
user = null;
|
|
|
|
uid = "1001";
|
|
|
|
gid = "100";
|
|
|
|
dir_mode = "0777";
|
|
|
|
file_mode = "0777";
|
|
|
|
};
|
|
|
|
in "felia_f ${confToBackendArg args} ://felia.coati-celsius.ts.net/f"
|
|
|
|
)
|
|
|
|
];
|
|
|
|
persoConf = pkgs.writeText "auto.personal" (builtins.concatStringsSep "\n" personalStorage);
|
|
|
|
in {
|
|
|
|
enable = true;
|
|
|
|
# Creates /perso directory with every subdirectory declared by ${personalStorage}
|
|
|
|
# as of now (might be stale), /perso/hot is the only mount accessible
|
|
|
|
# that is also managed by s3fs
|
|
|
|
autoMaster = ''
|
|
|
|
/perso file:${persoConf}
|
|
|
|
'';
|
|
|
|
timeout = 30; # default: 600, 600 seconds (10 mins) of inactivity => unmount
|
|
|
|
# debug = true; # writes to more to journalctl
|
|
|
|
};
|
2022-12-27 04:22:07 +00:00
|
|
|
}
|