mirror of
https://github.com/gensokyo-zone/infrastructure.git
synced 2026-02-09 04:19:19 -08:00
refactor(samba): kyuuto
This commit is contained in:
parent
602eda1012
commit
5dcd5a5be0
14 changed files with 379 additions and 125 deletions
62
nixos/kyuuto/mount.nix
Normal file
62
nixos/kyuuto/mount.nix
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
inherit (lib.options) mkOption mkEnableOption;
|
||||
inherit (lib.modules) mkIf mkMerge;
|
||||
cfg = config.kyuuto;
|
||||
in {
|
||||
options.kyuuto = with lib.types; {
|
||||
setup = mkEnableOption "directory and permission setup";
|
||||
mountDir = mkOption {
|
||||
type = path;
|
||||
default = "/mnt/kyuuto-media";
|
||||
};
|
||||
libraryDir = mkOption {
|
||||
type = path;
|
||||
default = cfg.mountDir + "/library";
|
||||
};
|
||||
transferDir = mkOption {
|
||||
type = path;
|
||||
default = cfg.mountDir + "/transfer";
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
systemd.tmpfiles.rules = mkIf cfg.setup [
|
||||
"d ${cfg.transferDir} 3775 root kyuuto"
|
||||
"d ${cfg.libraryDir} 3775 root kyuuto"
|
||||
"d ${cfg.libraryDir}/unsorted 3775 root kyuuto"
|
||||
"d ${cfg.libraryDir}/music 7775 sonarr kyuuto"
|
||||
"d ${cfg.libraryDir}/anime 7775 sonarr kyuuto"
|
||||
"d ${cfg.libraryDir}/tv 7775 sonarr kyuuto"
|
||||
"d ${cfg.libraryDir}/movies 7775 radarr kyuuto"
|
||||
];
|
||||
|
||||
users = let
|
||||
mapId = id: if config.proxmoxLXC.privileged or true then 100000 + id else id;
|
||||
mkDummyUsers = {
|
||||
name,
|
||||
group ? name,
|
||||
enable ? !config.services.${serviceName}.enable, serviceName ? name,
|
||||
uid ? config.ids.uids.${name},
|
||||
gid ? config.ids.gids.${group}
|
||||
}: mkIf enable {
|
||||
users.${name} = {
|
||||
group = mkIf (group != null) group;
|
||||
uid = mapId uid;
|
||||
isSystemUser = true;
|
||||
};
|
||||
groups.${group} = {
|
||||
gid = mapId gid;
|
||||
};
|
||||
};
|
||||
in mkMerge [
|
||||
(mkDummyUsers { name = "deluge"; })
|
||||
(mkDummyUsers { name = "radarr"; })
|
||||
(mkDummyUsers { name = "sonarr"; })
|
||||
(mkDummyUsers { name = "lidarr"; })
|
||||
];
|
||||
};
|
||||
}
|
||||
26
nixos/kyuuto/nfs.nix
Normal file
26
nixos/kyuuto/nfs.nix
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
inherit (lib.lists) optionals;
|
||||
inherit (lib.strings) concatStringsSep;
|
||||
inherit (config.networking.access) cidrForNetwork;
|
||||
inherit (config) kyuuto;
|
||||
in {
|
||||
services.nfs.server.exports = let
|
||||
mapPerm = perm: map (addr: "${addr}(${perm})");
|
||||
toPerms = concatStringsSep " ";
|
||||
localAddrs = cidrForNetwork.loopback.all ++ cidrForNetwork.local.all;
|
||||
tailAddrs = optionals config.services.tailscale.enable cidrForNetwork.tail.all;
|
||||
allAddrs = localAddrs ++ tailAddrs;
|
||||
kyuutoPerms =
|
||||
mapPerm "ro" localAddrs
|
||||
++ mapPerm "rw" tailAddrs;
|
||||
transferPerms = mapPerm "rw" allAddrs;
|
||||
in ''
|
||||
${kyuuto.mountDir} ${toPerms kyuutoPerms}
|
||||
${kyuuto.transferDir} ${toPerms transferPerms}
|
||||
'';
|
||||
}
|
||||
49
nixos/kyuuto/samba.nix
Normal file
49
nixos/kyuuto/samba.nix
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
inherit (lib.modules) mkIf mkDefault;
|
||||
inherit (lib.lists) optionals;
|
||||
inherit (config.networking.access) cidrForNetwork;
|
||||
inherit (config) kyuuto;
|
||||
cfg = config.services.samba;
|
||||
localAddrs = cidrForNetwork.loopback.all ++ cidrForNetwork.local.all
|
||||
++ optionals config.services.tailscale.enable cidrForNetwork.tail.all;
|
||||
in {
|
||||
services.samba = {
|
||||
usershare = {
|
||||
enable = mkDefault true;
|
||||
path = mkDefault (kyuuto.mountDir + "/usershares");
|
||||
};
|
||||
shares = mkIf cfg.enable {
|
||||
kyuuto-transfer = {
|
||||
path = kyuuto.transferDir;
|
||||
writeable = true;
|
||||
browseable = true;
|
||||
public = true;
|
||||
"acl group control" = true;
|
||||
#"guest only" = true;
|
||||
comment = "Kyuuto Media Transfer Area";
|
||||
"hosts allow" = localAddrs;
|
||||
};
|
||||
kyuuto-access = {
|
||||
path = kyuuto.libraryDir;
|
||||
writeable = false;
|
||||
browseable = true;
|
||||
public = true;
|
||||
comment = "Kyuuto Media Access";
|
||||
"hosts allow" = localAddrs;
|
||||
};
|
||||
kyuuto-media = {
|
||||
path = kyuuto.mountDir;
|
||||
writeable = true;
|
||||
browseable = true;
|
||||
public = false;
|
||||
comment = "Kyuuto Media";
|
||||
"valid users" = [ "@kyuuto" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue