Add all of iogamaster modules

This commit is contained in:
2024-06-15 09:59:52 +02:00
parent c97f22254a
commit fa99b32cad
120 changed files with 3587 additions and 254 deletions

View File

@@ -0,0 +1,30 @@
{
options,
config,
lib,
...
}:
with lib;
with lib.frajul; let
cfg = config.services.arion.filebrowser;
in {
options.services.arion.filebrowser = with types; {
enable = mkBoolOpt false "Enable the filebrowser docker service";
};
config = mkIf cfg.enable {
virtualisation.arion.enable = true;
virtualisation.arion.projects.filebrowser.settings = {
project.name = "filebrowser";
services.filebrowser.service = {
image = "filebrowser/filebrowser";
ports = [
"8080:80"
];
volumes = [
"/home/${config.user.name}:/srv"
];
};
};
};
}

View File

@@ -0,0 +1,37 @@
{
options,
config,
lib,
...
}:
with lib;
with lib.frajul; let
cfg = config.services.arion.jellyfin;
in {
options.services.arion.jellyfin = with types; {
enable = mkBoolOpt false "Enable jellyfin";
};
config = mkIf cfg.enable {
virtualisation.arion.enable = true;
virtualisation.arion.projects.jellyfin.settings = {
project.name = "jellyfin";
services.jellyfin.service = {
image = "jellyfin/jellyfin";
ports = [
"8096:8096"
];
volumes = [
"/home/${config.user.name}/.local/share/jellyfin/config:/config"
"/home/${config.user.name}/.local/share/jellyfin/cache:/cache"
"/home/${config.user.name}/.local/share/jellyfin/media:/media"
];
};
};
home.persist.directories = [
".local/share/jellyfin/config"
".local/share/jellyfin/cache"
];
};
}

View File

@@ -0,0 +1,48 @@
{
options,
config,
lib,
...
}:
with lib;
with lib.frajul; let
cfg = config.services.arion.terraria.vanilla;
in {
options.services.arion.terraria.vanilla = with types; {
enable = mkBoolOpt false "";
};
config = mkIf cfg.enable {
virtualisation.arion.enable = true;
virtualisation.arion.projects.terraria-vanilla.settings = {
project.name = "vanilla";
services.terraria.service = {
image = "ryshe/terraria:latest";
environment = {
WORLD_FILENAME = "world.wld";
CONFIGPATH = "config.json";
};
ports = [
"7777:7777"
];
volumes = [
"/home/${config.user.name}/.local/share/terraria/vanilla/worlds:/root/.local/share/Terraria/Worlds"
];
# For the first run you will need to generate a new world with a size where: 1 = Small, 2=Medium, 3=Large
command = [
"-autocreate"
"2"
];
};
services.ngrok.service = {
image = "ngrok/ngrok";
env_file = ["${config.sops.secrets."ngrok/terraria".path}"];
command = ["tcp" "terraria:7777"];
};
};
home.persist.directories = [
".local/share/terraria/vanilla/worlds"
];
};
}

View File

@@ -0,0 +1,40 @@
{
options,
config,
lib,
...
}:
with lib;
with lib.frajul; let
cfg = config.services.arion.windows;
in {
options.services.arion.windows = with types; {
enable = mkBoolOpt false "Enable the windows docker service";
};
config = mkIf cfg.enable {
virtualisation.arion.enable = true;
virtualisation.arion.projects.windows.settings = {
project.name = "windows";
services.windows.service = {
image = "dockurr/windows";
environment.VERSION = "win11";
ports = [
"8006:8006"
"3389:3389/tcp"
"3389:3389/udp"
];
devices = [
"/dev/kvm"
];
capabilities = {
NET_ADMIN = true;
};
stop_grace_period = "2m";
volumes = [
"/home/${config.user.name}:/srv"
];
};
};
};
}

View File

@@ -0,0 +1,52 @@
{
options,
config,
lib,
...
}:
with lib;
with lib.frajul; let
cfg = config.services.internalDomain;
in {
options.services.internalDomain = with types; {
enable = mkBoolOpt false "Enable dnsmasq, a custom internalDomain server";
domain = mkOpt str "home.lan" "Internal Domain to use, defaults to home.lan";
reverseProxyIp = mkOpt str "127.0.0.1" "IP address for the reverse proxy";
};
config =
(mkIf cfg.enable {
services.caddy.enable = true;
services.caddy.virtualHosts."*.home.lan".extraConfig = ''
tls internal
'';
networking.firewall.allowedTCPPorts = [53];
networking.firewall.allowedUDPPorts = [53];
services.dnsmasq = {
enable = true;
resolveLocalQueries = true;
alwaysKeepRunning = true;
settings = {
server = ["9.9.9.9"];
inherit (cfg) domain;
local = "/${cfg.domain}/";
bogus-priv = true;
expand-hosts = true;
no-hosts = true;
domain-needed = true;
no-resolv = true;
no-poll = true;
address = [
"/${cfg.domain}/${cfg.reverseProxyIp}"
];
};
};
})
// {
};
}

View File

@@ -0,0 +1,50 @@
{
options,
config,
lib,
...
}:
with lib;
with lib.frajul;
let
cfg = config.services.ssh;
in
{
options.services.ssh = with types; {
enable = mkBoolOpt false "Enable ssh";
};
config = mkIf cfg.enable {
services.openssh = {
enable = true;
ports = [ 22 ];
passwordAuthentication = false;
};
users.users = {
root.openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL9nKsW0v9SMQo86fxHlX5gnS/ELlWqAS/heyzZ+oPzd iogamastercode@gmail.com"
];
${config.user.name}.openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL9nKsW0v9SMQo86fxHlX5gnS/ELlWqAS/heyzZ+oPzd iogamastercode@gmail.com"
];
};
home.file.".ssh/config".text = ''
identityfile ~/.ssh/key
'';
home.persist.directories = [ ".ssh" ];
environment.persist.directories = [ "/root/ssh" ];
environment.persist.files = [
"/etc/machine-id"
"/etc/ssh/ssh_host_ed25519_key"
"/etc/ssh/ssh_host_ed25519_key.pub"
"/etc/ssh/ssh_host_rsa_key"
"/etc/ssh/ssh_host_rsa_key.pub"
];
};
}