organization

This commit is contained in:
mjallen18
2024-02-24 23:08:52 -06:00
parent dc6ebf3cbb
commit f0e5baea4b
22 changed files with 811 additions and 205 deletions

View File

@@ -4,17 +4,17 @@
* [flake.nix](./flake.nix)
### Desktop
* [configuration.nix](./configuration.nix)
* [hardware-configuration.nix](./hardware-configuration.nix)
* [home.nix](./home.nix)
* [impermenance.nix](./impermanence.nix)
* [configuration.nix](./hosts/desktop/configuration.nix)
* [hardware-configuration.nix](./hosts/desktop/hardware-configuration.nix)
* [home.nix](./hosts/desktop/home.nix)
* [impermenance.nix](./hosts/desktop/impermanence.nix)
* cachix
* [cachix.nix](./cachix.nix)
* [cachix.nix](./cachix/cachix.nix)
* [nix-community.nix](./cachix/nix-community.nix)
### NAS
* [configuration.nix](./configuration-nas.nix)
* [hardware-configuration.nix](./hardware-configuration-nas.nix)
* [configuration.nix](./hosts/nas/configuration.nix)
* [hardware-configuration.nix](./hosts/nas/hardware-configuration.nix)
* [samba](./nas-samba/samba.nix)
* nas-apps
* [swag](./nas-apps/swag.nix)
@@ -27,6 +27,6 @@
* [radarr](./nas-apps/radarr.nix)
### Raspberry Pi 4
* [configuration.nix](./configuration-pi4.nix)
* [hardware-configuration.nix](./hardware-configuration-pi4.nix)
* [docker](./docker-pi4.nix)
* [configuration.nix](./hosts/pi4/configuration.nix)
* [hardware-configuration.nix](./hosts/pi4/hardware-configuration.nix)
* [docker](./hosts/pi4/docker-pi4.nix)

View File

@@ -23,7 +23,7 @@ in
imports =
[ # Include the results of the hardware scan.
./hardware-configuration.nix
./cachix.nix
./cachix/cachix.nix
];
# Enable nix flakes and nix-command tools

View File

@@ -12,22 +12,38 @@ in
{
imports =
[ # Include the results of the hardware scan.
./hardware-configuration-nas.nix
./nas-samba/samba.nix
./nas-apps/swag.nix
./nas-apps/jellyfin.nix
./nas-apps/sonarr.nix
./nas-apps/radarr.nix
./nas-apps/sabnzbd.nix
./nas-apps/mariadb.nix
./nas-apps/nextcloud.nix
./nas-apps/collabora.nix
./nas-apps/jellyseerr.nix
./hardware-configuration.nix
../../nas-samba/samba.nix
../../nas-apps/nas-apps.nix
];
# Enable nix flakes and nix-command tools
nix.settings.experimental-features = [ "nix-command" "flakes" ];
nas-apps = {
jellyfin.enable = true;
jellyseerr.enable = true;
sabnzbd.enable = true;
radarr.enable = true;
sonarr.enable = true;
collabora.enable = true;
mariadb.enable = true;
nextcloud = {
enable = true;
httpPort = "9980";
httpsPort = "9443";
};
swag.enable = true;
};
# Configure bootloader with lanzaboot and secureboot
boot = {
loader = {
@@ -216,8 +232,8 @@ in
enable = true;
allowPing = true;
extraCommands = ''iptables -t raw -A OUTPUT -p udp -m udp --dport 137 -j CT --helper netbios-ns''; # TODO is this needed?
allowedTCPPorts = [ 80 443 61208 ];
allowedUDPPorts = [ 80 443 61208 ];
allowedTCPPorts = [ 61208 ];
allowedUDPPorts = [ 61208 ];
};
};

View File

@@ -1,9 +1,61 @@
{ config, pkgs, ... }:
{
# code
virtualisation.oci-containers.containers."collabora" = {
autoStart = true;
image = "collabora/code";
ports = [ "9980:9980" ];
{ lib, pkgs, config, ... }:
with lib;
let
cfg = config.nas-apps.collabora;
in {
options.nas-apps.collabora = {
enable = mkEnableOption "collabora docker service";
autoStart = mkOption {
type = types.bool;
default = true;
};
port = mkOption {
type = types.str;
default = "9980";
};
name = mkOption {
type = types.str;
default = "collabora";
};
image = mkOption {
type = types.str;
default = "collabora/code";
};
puid = mkOption {
type = types.str;
default = "911";
};
pgid = mkOption {
type = types.str;
default = "1000";
};
timeZone = mkOption {
type = types.str;
default = "America/Chicago";
};
};
config = mkIf cfg.enable {
virtualisation.oci-containers.containers."${cfg.name}" = {
autoStart = cfg.autoStart;
image = cfg.image;
ports = [ "${cfg.port}:9980" ];
volumes = [
# ...
];
environment = {
PUID = cfg.puid;
PGID = cfg.pgid;
TZ = cfg.timeZone;
};
};
};
}

17
nas-apps/dashy.nix Normal file
View File

@@ -0,0 +1,17 @@
{ config, pkgs, ... }:
{
# dashy
virtualisation.oci-containers.containers."dashy" = {
autoStart = true;
image = " lissy93/dashy:latest";
ports = [ "8888:80" ];
volumes = [
"/mnt/ssd/nix-app-data/dashy/conf.yaml:/app/public/conf.yaml"
];
environment = {
PUID = "911";
PGID = "1000";
TZ = "America/Chicago";
};
};
}

View File

@@ -1,67 +1,128 @@
{ config, pkgs, ... }:
{ lib, pkgs, config, ... }:
with lib;
let
cfg = config.nas-apps.jellyfin;
in {
options.nas-apps.jellyfin = {
enable = mkEnableOption "jellyfin docker service";
autoStart = mkOption {
type = types.bool;
default = true;
};
{
# Jellyfin
# Nix
# environment.systemPackages = [
# pkgs.jellyfin
# pkgs.jellyfin-web
# pkgs.jellyfin-ffmpeg
# ];
port = mkOption {
type = types.str;
default = "8096";
};
# services.jellyfin = {
# enable = true;
# user = "911";
# group = "1000";
# # dataDir = "/mnt/Safe\ SSD/ssd_app_data/jellyfin/config"; # defaults to /var/lib/jellyfin and cannot be changed....
# openFirewall = true;
name = mkOption {
type = types.str;
default = "jellyfin";
};
# };
image = mkOption {
type = types.str;
default = "lscr.io/linuxserver/jellyfin";
};
# nix-docker
# virtualisation.oci-containers.containers."jellyfin" = {
# autoStart = true;
# image = "linuxserver/jellyfin";
# cmd = [ "--gpus all" ];
# volumes = [
# "/mnt/Safe\ SSD/ssd_app_data/jellyfin/config:/config"
# "/mnt/Safe\ SSD/ssd_app_data/jellyfin/cache:/cache"
# "/mnt/Safe\ SSD/ssd_app_data/jellyfin/log:/log"
# "/mnt/Main\ Pool/Movies:/movies"
# "/mnt/Main\ Pool/TV:/tv"
# ];
# ports = [ "8096:8096" ];
# environment = {
# NVIDIA_VISIBLE_DEVICES = "all";
# NVIDIA_DRIVER_CAPABILITIES = "compute,utility";
# JELLYFIN_LOG_DIR = "/log";
# PUID = "911";
# PGID = "1000";
# };
# };
configPath = mkOption {
type = types.str;
default = "/mnt/ssd/nix-app-data/jellyfin";
};
moviesPath = mkOption {
type = types.str;
default = "/mnt/mainpool/Movies";
};
tvPath = mkOption {
type = types.str;
default = "/mnt/mainpool/Tv";
};
puid = mkOption {
type = types.str;
default = "911";
};
pgid = mkOption {
type = types.str;
default = "1000";
};
timeZone = mkOption {
type = types.str;
default = "America/Chicago";
};
# Manual
systemd.services.jellyfin-nvidia-docker = {
path = [ pkgs.bash pkgs.docker ];
script = ''
set -e
exec docker run \
--rm \
--gpus all \
--runtime=nvidia \
--name=jellyfin \
-e PUID=911 \
-e PGID=1000 \
-e TZ=America/Chicago \
-e 'NVIDIA_DRIVER_CAPABILITIES'='all' \
-e 'NVIDIA_VISIBLE_DEVICES'='all' \
-p 8096:8096 \
-v '/mnt/ssd/nix-app-data/jellyfin:/config' \
-v '/mnt/mainpool/Movies:/data/movies' \
-v '/mnt/mainpool/TV:/data/tv' \
lscr.io/linuxserver/jellyfin:latest
'';
wantedBy = [ "multi-user.target" ];
};
config = mkIf cfg.enable {
systemd.services.jellyfin-nvidia-docker = {
path = [ pkgs.bash pkgs.docker ];
script = ''
set -e
exec docker run \
--rm \
--gpus all \
--runtime=nvidia \
--name=${cfg.name} \
-e PUID=${cfg.puid} \
-e PGID=${cfg.pgid} \
-e TZ=${cfg.timeZone} \
-e 'NVIDIA_DRIVER_CAPABILITIES'='all' \
-e 'NVIDIA_VISIBLE_DEVICES'='all' \
-p ${cfg.port}:8096 \
-v '${cfg.configPath}:/config' \
-v '${cfg.moviesPath}:/data/movies' \
-v '${cfg.tvPath}:/data/tv' \
${cfg.image}:latest
'';
wantedBy = [ "multi-user.target" ];
};
};
}
# { config, pkgs, ... }:
# {
# # Jellyfin
# # Nix
# # environment.systemPackages = [
# # pkgs.jellyfin
# # pkgs.jellyfin-web
# # pkgs.jellyfin-ffmpeg
# # ];
# # services.jellyfin = {
# # enable = true;
# # user = "911";
# # group = "1000";
# # # dataDir = "/mnt/Safe\ SSD/ssd_app_data/jellyfin/config"; # defaults to /var/lib/jellyfin and cannot be changed....
# # openFirewall = true;
# # };
# # nix-docker
# # virtualisation.oci-containers.containers."jellyfin" = {
# # autoStart = true;
# # image = "linuxserver/jellyfin";
# # cmd = [ "--gpus all" ];
# # volumes = [
# # "/mnt/Safe\ SSD/ssd_app_data/jellyfin/config:/config"
# # "/mnt/Safe\ SSD/ssd_app_data/jellyfin/cache:/cache"
# # "/mnt/Safe\ SSD/ssd_app_data/jellyfin/log:/log"
# # "/mnt/Main\ Pool/Movies:/movies"
# # "/mnt/Main\ Pool/TV:/tv"
# # ];
# # ports = [ "8096:8096" ];
# # environment = {
# # NVIDIA_VISIBLE_DEVICES = "all";
# # NVIDIA_DRIVER_CAPABILITIES = "compute,utility";
# # JELLYFIN_LOG_DIR = "/log";
# # PUID = "911";
# # PGID = "1000";
# # };
# # };
# }

View File

@@ -1,17 +1,66 @@
{ config, pkgs, ... }:
{
# jellyseerr
virtualisation.oci-containers.containers."jellyseerr" = {
autoStart = true;
image = "fallenbagel/jellyseerr";
ports = [ "5055:5055" ];
volumes = [
"/mnt/ssd/ssd_app_data/jellyseerr:/config"
];
environment = {
PUID = "911";
PGID = "1000";
TZ = "America/Chicago";
{ lib, pkgs, config, ... }:
with lib;
let
cfg = config.nas-apps.jellyseerr;
in {
options.nas-apps.jellyseerr = {
enable = mkEnableOption "jellyseerr docker service";
autoStart = mkOption {
type = types.bool;
default = true;
};
port = mkOption {
type = types.str;
default = "5055";
};
name = mkOption {
type = types.str;
default = "jellyseerr";
};
image = mkOption {
type = types.str;
default = "fallenbagel/jellyseerr";
};
configPath = mkOption {
type = types.str;
default = "/mnt/ssd/ssd_app_data/jellyseerr";
};
puid = mkOption {
type = types.str;
default = "911";
};
pgid = mkOption {
type = types.str;
default = "1000";
};
timeZone = mkOption {
type = types.str;
default = "America/Chicago";
};
};
config = mkIf cfg.enable {
virtualisation.oci-containers.containers."${cfg.name}" = {
autoStart = cfg.autoStart;
image = cfg.image;
ports = [ "${cfg.port}:5055" ];
volumes = [
"${cfg.configPath}:/config"
];
environment = {
PUID = cfg.puid;
PGID = cfg.pgid;
TZ = cfg.timeZone;
};
};
};
}

View File

@@ -1,21 +1,90 @@
{ config, pkgs, ... }:
{
# mariadb
virtualisation.oci-containers.containers."mariadb" = {
autoStart = true;
image = "linuxserver/mariadb";
ports = [ "3306:3306" ];
volumes = [
"/mnt/ssd/mariadb:/config"
];
environment = {
PUID = "911";
PGID = "1000";
TZ = "America/Chicago";
MYSQL_ROOT_PASSWORD = "BogieDudie1";
MYSQL_DATABASE = "jallen_nextcloud";
MYSQL_USER = "nextcloud";
MYSQL_PASSWORD = "BogieDudie1";
{ lib, pkgs, config, ... }:
with lib;
let
cfg = config.nas-apps.mariadb;
in {
options.nas-apps.mariadb = {
enable = mkEnableOption "mariadb docker service";
autoStart = mkOption {
type = types.bool;
default = true;
};
port = mkOption {
type = types.str;
default = "3306";
};
name = mkOption {
type = types.str;
default = "mariadb";
};
image = mkOption {
type = types.str;
default = "linuxserver/mariadb";
};
configPath = mkOption {
type = types.str;
default = "/mnt/ssd/mariadb";
};
puid = mkOption {
type = types.str;
default = "911";
};
pgid = mkOption {
type = types.str;
default = "1000";
};
timeZone = mkOption {
type = types.str;
default = "America/Chicago";
};
rootPassword = mkOption {
type = types.str;
default = "BogieDudie1";
};
databaseName = mkOption {
type = types.str;
default = "jallen_nextcloud";
};
databaseUser = mkOption {
type = types.str;
default = "nextcloud";
};
databasePassword = mkOption {
type = types.str;
default = "BogieDudie1";
};
};
config = mkIf cfg.enable {
virtualisation.oci-containers.containers."${cfg.name}" = {
autoStart = cfg.autoStart;
image = cfg.image;
ports = [ "${cfg.port}:3306" ];
volumes = [
"${cfg.configPath}:/config"
];
environment = {
PUID = cfg.puid;
PGID = cfg.pgid;
TZ = cfg.timeZone;
MYSQL_ROOT_PASSWORD = cfg.rootPassword;
MYSQL_DATABASE = cfg.databaseName;
MYSQL_USER = cfg.databaseUser;
MYSQL_PASSWORD = cfg.databasePassword;
};
};
};
}

16
nas-apps/nas-apps.nix Normal file
View File

@@ -0,0 +1,16 @@
{ ... }:
{
imports =
[
./swag.nix
./jellyfin.nix
./sonarr.nix
./radarr.nix
./sabnzbd.nix
./mariadb.nix
./nextcloud.nix
./collabora.nix
./jellyseerr.nix
# ./dashy.nix
];
}

View File

@@ -1,18 +1,77 @@
{ config, pkgs, ... }:
{
# nextcloud
virtualisation.oci-containers.containers."nextcloud" = {
autoStart = true;
image = "linuxserver/nextcloud";
ports = [ "9443:443" "9880:80" ];
volumes = [
"/mnt/ssd/ssd_app_data/nextcloud:/config"
"/mnt/mainpool/Nextcloud:/data"
];
environment = {
PUID = "911";
PGID = "1000";
TZ = "America/Chicago";
{ lib, pkgs, config, ... }:
with lib;
let
cfg = config.nas-apps.nextcloud;
in {
options.nas-apps.nextcloud = {
enable = mkEnableOption "nextcloud docker service";
autoStart = mkOption {
type = types.bool;
default = true;
};
httpPort = mkOption {
type = types.str;
default = "80";
};
httpsPort = mkOption {
type = types.str;
default = "443";
};
name = mkOption {
type = types.str;
default = "nextcloud";
};
image = mkOption {
type = types.str;
default = "linuxserver/nextcloud";
};
configPath = mkOption {
type = types.str;
default = "/mnt/ssd/ssd_app_data/nextcloud";
};
dataPath = mkOption {
type = types.str;
default = "/mnt/mainpool/Nextcloud";
};
puid = mkOption {
type = types.str;
default = "911";
};
pgid = mkOption {
type = types.str;
default = "1000";
};
timeZone = mkOption {
type = types.str;
default = "America/Chicago";
};
};
config = mkIf cfg.enable {
virtualisation.oci-containers.containers."${cfg.name}" = {
autoStart = cfg.autoStart;
image = cfg.image;
ports = [ "${cfg.httpPort}:80" "${cfg.httpsPort}:443" ];
volumes = [
"${cfg.configPath}:/config"
"${cfg.dataPath}:/data"
];
environment = {
PUID = cfg.puid;
PGID = cfg.pgid;
TZ = cfg.timeZone;
};
};
};
}

View File

@@ -1,19 +1,78 @@
{ config, pkgs, ... }:
{
# radarr
virtualisation.oci-containers.containers."radarr" = {
autoStart = true;
image = "linuxserver/radarr";
ports = [ "7878:7878" ];
volumes = [
"/mnt/ssd/ssd_app_data/radarr:/config"
"/mnt/mainpool/Movies:/movies"
"/mnt/ssd/ssd_app_data/downloads:/downloads"
];
environment = {
PUID = "911";
PGID = "1000";
TZ = "America/Chicago";
{ lib, pkgs, config, ... }:
with lib;
let
cfg = config.nas-apps.radarr;
in {
options.nas-apps.radarr = {
enable = mkEnableOption "radarr docker service";
autoStart = mkOption {
type = types.bool;
default = true;
};
port = mkOption {
type = types.str;
default = "7878";
};
name = mkOption {
type = types.str;
default = "radarr";
};
image = mkOption {
type = types.str;
default = "linuxserver/radarr";
};
configPath = mkOption {
type = types.str;
default = "/mnt/ssd/ssd_app_data/radarr";
};
moviesPath = mkOption {
type = types.str;
default = "/mnt/mainpool/Movies";
};
downloadsPath = mkOption {
type = types.str;
default = "/mnt/ssd/ssd_app_data/downloads";
};
puid = mkOption {
type = types.str;
default = "911";
};
pgid = mkOption {
type = types.str;
default = "1000";
};
timeZone = mkOption {
type = types.str;
default = "America/Chicago";
};
};
config = mkIf cfg.enable {
virtualisation.oci-containers.containers."${cfg.name}" = {
autoStart = cfg.autoStart;
image = cfg.image;
ports = [ "${cfg.port}:7878" ];
volumes = [
"${cfg.configPath}:/config"
"${cfg.moviesPath}:/movies"
"${cfg.downloadsPath}:/downloads"
];
environment = {
PUID = cfg.puid;
PGID = cfg.pgid;
TZ = cfg.timeZone;
};
};
};
}

View File

@@ -1,21 +1,90 @@
{ config, pkgs, ... }:
{
# sabnzbd
virtualisation.oci-containers.containers."sabnzbd" = {
autoStart = true;
image = "linuxserver/sabnzbd";
ports = [ "8080:8080" ];
volumes = [
"/mnt/ssd/ssd_app_data/sabnzbd:/config"
"/mnt/mainpool/TV:/tv"
"/mnt/mainpool/Movies:/movies"
"/mnt/ssd/ssd_app_data/downloads:/downloads"
"/mnt/ssd/ssd_app_data/downloads-incomplete:/downloads-incomplete"
];
environment = {
PUID = "911";
PGID = "1000";
TZ = "America/Chicago";
{ lib, pkgs, config, ... }:
with lib;
let
cfg = config.nas-apps.sabnzbd;
in {
options.nas-apps.sabnzbd = {
enable = mkEnableOption "sabnzbd docker service";
autoStart = mkOption {
type = types.bool;
default = true;
};
port = mkOption {
type = types.str;
default = "8080";
};
name = mkOption {
type = types.str;
default = "sabnzbd";
};
image = mkOption {
type = types.str;
default = "linuxserver/sabnzbd";
};
configPath = mkOption {
type = types.str;
default = "/mnt/ssd/ssd_app_data/sabnzbd";
};
moviesPath = mkOption {
type = types.str;
default = "/mnt/mainpool/Movies";
};
tvPath = mkOption {
type = types.str;
default = "/mnt/mainpool/Tv";
};
downloadsPath = mkOption {
type = types.str;
default = "/mnt/ssd/ssd_app_data/downloads";
};
downloadsIncompletePath = mkOption {
type = types.str;
default = "/mnt/ssd/ssd_app_data/downloads-incomplete";
};
puid = mkOption {
type = types.str;
default = "911";
};
pgid = mkOption {
type = types.str;
default = "1000";
};
timeZone = mkOption {
type = types.str;
default = "America/Chicago";
};
};
config = mkIf cfg.enable {
virtualisation.oci-containers.containers."${cfg.name}" = {
autoStart = cfg.autoStart;
image = cfg.image;
ports = [ "${cfg.port}:8080" ];
volumes = [
"${cfg.configPath}:/config"
"${cfg.moviesPath}:/movies"
"${cfg.tvPath}:/tv"
"${cfg.downloadsPath}:/downloads"
"${cfg.downloadsIncompletePath}:/downloads-incomplete"
];
environment = {
PUID = cfg.puid;
PGID = cfg.pgid;
TZ = cfg.timeZone;
};
};
};
}

View File

@@ -1,19 +1,78 @@
{ config, pkgs, ... }:
{
# sonarr
virtualisation.oci-containers.containers."sonarr" = {
autoStart = true;
image = "linuxserver/sonarr";
ports = [ "8989:8989" ];
volumes = [
"/mnt/ssd/ssd_app_data/sonarr:/config"
"/mnt/mainpool/TV:/tv"
"/mnt/ssd/ssd_app_data/downloads:/downloads"
];
environment = {
PUID = "911";
PGID = "1000";
TZ = "America/Chicago";
{ lib, pkgs, config, ... }:
with lib;
let
cfg = config.nas-apps.sonarr;
in {
options.nas-apps.sonarr = {
enable = mkEnableOption "sonarr docker service";
autoStart = mkOption {
type = types.bool;
default = true;
};
port = mkOption {
type = types.str;
default = "8989";
};
name = mkOption {
type = types.str;
default = "sonarr";
};
image = mkOption {
type = types.str;
default = "linuxserver/sonarr";
};
configPath = mkOption {
type = types.str;
default = "/mnt/ssd/ssd_app_data/sonarr";
};
tvPath = mkOption {
type = types.str;
default = "/mnt/mainpool/TV";
};
downloadsPath = mkOption {
type = types.str;
default = "/mnt/ssd/ssd_app_data/downloads";
};
puid = mkOption {
type = types.str;
default = "911";
};
pgid = mkOption {
type = types.str;
default = "1000";
};
timeZone = mkOption {
type = types.str;
default = "America/Chicago";
};
};
config = mkIf cfg.enable {
virtualisation.oci-containers.containers."${cfg.name}" = {
autoStart = cfg.autoStart;
image = cfg.image;
ports = [ "${cfg.port}:8989" ];
volumes = [
"${cfg.configPath}:/config"
"${cfg.tvPath}:/tv"
"${cfg.downloadsPath}:/downloads"
];
environment = {
PUID = cfg.puid;
PGID = cfg.pgid;
TZ = cfg.timeZone;
};
};
};
}

View File

@@ -1,21 +1,101 @@
{ config, pkgs, ... }:
{
# Swag
virtualisation.oci-containers.containers."swag" = {
autoStart = true;
image = "linuxserver/swag";
ports = [ "80:80" "443:443" ];
volumes = [
"/mnt/ssd/ssd_app_data/swag:/config"
];
environment = {
PGID = "1000";
PUID = "1000";
EMAIL = "jalle008@proton.me";
TZ = "America/Chicago";
URL = "mjallen.dev";
VALIDATION = "http";
SUBDOMAINS = "jellyfin,hass,cloud,office,jellyseerr";
{ lib, pkgs, config, ... }:
with lib;
let
cfg = config.nas-apps.swag;
in {
options.nas-apps.swag = {
enable = mkEnableOption "swag docker service";
autoStart = mkOption {
type = types.bool;
default = true;
};
httpPort = mkOption {
type = types.int;
default = 80;
};
httpsPort = mkOption {
type = types.int;
default = 443;
};
name = mkOption {
type = types.str;
default = "swag";
};
image = mkOption {
type = types.str;
default = "linuxserver/swag";
};
configPath = mkOption {
type = types.str;
default = "/mnt/ssd/ssd_app_data/swag";
};
puid = mkOption {
type = types.str;
default = "911";
};
pgid = mkOption {
type = types.str;
default = "1000";
};
timeZone = mkOption {
type = types.str;
default = "America/Chicago";
};
email = mkOption {
type = types.str;
default = "jalle008@proton.me";
};
url = mkOption {
type = types.str;
default = "mjallen.dev";
};
validation = mkOption {
type = types.str;
default = "http";
};
subdomains = mkOption {
type = types.str;
default = "jellyfin,hass,cloud,office,jellyseerr";
};
};
config = mkIf cfg.enable {
networking.firewall = {
allowedTCPPorts = [ cfg.httpPort cfg.httpsPort ];
allowedUDPPorts = [ cfg.httpPort cfg.httpsPort ];
};
virtualisation.oci-containers.containers."${cfg.name}" = {
autoStart = cfg.autoStart;
image = cfg.image;
ports = [ "${toString cfg.httpPort}:80" "${toString cfg.httpsPort}:443" ];
volumes = [
"${cfg.configPath}:/config"
];
environment = {
PUID = cfg.puid;
PGID = cfg.pgid;
TZ = cfg.timeZone;
EMAIL = cfg.email;
URL = cfg.url;
VALIDATION = cfg.validation;
SUBDOMAINS = cfg.subdomains;
};
};
};
}