infrastructure/nixos/kyuuto/opl.nix
arcnmx 51911b37ac chore(ci): flake update
samba module changed significantly
2024-09-14 13:39:34 -07:00

103 lines
2.5 KiB
Nix

{
pkgs,
config,
lib,
...
}: let
inherit (lib.options) mkOption mkEnableOption;
inherit (lib.modules) mkIf mkMerge mkDefault;
inherit (config) kyuuto;
cfg = kyuuto.opl;
in {
options.kyuuto.opl = with lib.types; {
enable =
mkEnableOption "hosting"
// {
default = config.services.samba.enable;
};
user = mkOption {
type = str;
default = "opl";
};
rootDir = mkOption {
type = path;
default = kyuuto.mountDir + "/opl";
};
dvdDir = mkOption {
type = path;
default = cfg.rootDir + "/DVD";
};
gameLibraryDir = mkOption {
type = path;
default = kyuuto.gameLibraryDir + "/PS2";
};
};
config = {
services.samba = {
settings' = mkIf cfg.enable {
"ntlm auth" = mkDefault "ntlmv1-permitted";
"server min protocol" = mkDefault "NT1";
"keepalive" = mkDefault 0;
};
shares'.opl = let
inherit (config.networking.access) cidrForNetwork;
in
mkIf cfg.enable {
comment = "Kyuuto Media OPL";
path = cfg.rootDir;
writeable = true;
browseable = true;
public = false;
"valid users" = [
cfg.user
"@kyuuto-peeps"
];
"strict sync" = false;
"hosts allow" = cidrForNetwork.allLocal.all;
};
};
services.tmpfiles = let
setupFiles = {
${cfg.rootDir} = {
owner = cfg.user;
group = mkDefault "kyuuto";
mode = mkDefault "2775";
};
${cfg.dvdDir} = {
type = mkDefault "directory";
owner = mkDefault "admin";
group = mkDefault "kyuuto";
mode = mkDefault "2775";
};
"${cfg.rootDir}/games.bin" = {
type = "copy";
owner = cfg.user;
group = mkDefault "kyuuto";
mode = "0775";
src = pkgs.writeText "empty" "";
noOverwrite = true;
};
"${cfg.gameLibraryDir}/games.bin" = {
type = "symlink";
src = cfg.rootDir + "/games.bin";
owner = mkDefault "admin";
group = mkDefault "kyuuto";
};
};
files = {
${cfg.dvdDir} = {
type = "bind";
src = cfg.gameLibraryDir;
bindReadOnly = true;
};
};
in {
enable = mkIf (kyuuto.setup || cfg.enable) true;
files = mkMerge [
(mkIf kyuuto.setup setupFiles)
(mkIf cfg.enable files)
];
};
};
}