Compare commits

..

No commits in common. "6deb36d92061cbb5c359a9c2c6c84a07f69882d3" and "81a07af1521169a7ffac5e0850a0e236d9580248" have entirely different histories.

8 changed files with 162 additions and 79 deletions

1
.gitignore vendored
View file

@ -1 +0,0 @@
.idea

12
flake.lock generated
View file

@ -20,11 +20,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1760524057, "lastModified": 1759381078,
"narHash": "sha256-EVAqOteLBFmd7pKkb0+FIUyzTF61VKi7YmvP1tw4nEw=", "narHash": "sha256-gTrEEp5gEspIcCOx9PD8kMaF1iEmfBcTbO0Jag2QhQs=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "544961dfcce86422ba200ed9a0b00dd4b1486ec5", "rev": "7df7ff7d8e00218376575f0acdcc5d66741351ee",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -48,11 +48,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1760393368, "lastModified": 1759188042,
"narHash": "sha256-8mN3kqyqa2PKY0wwZ2UmMEYMcxvNTwLaOrrDsw6Qi4E=", "narHash": "sha256-f9QC2KKiNReZDG2yyKAtDZh0rSK2Xp1wkPzKbHeQVRU=",
"owner": "Mic92", "owner": "Mic92",
"repo": "sops-nix", "repo": "sops-nix",
"rev": "ab8d56e85b8be14cff9d93735951e30c3e86a437", "rev": "9fcfabe085281dd793589bdc770a2e577a3caa5d",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -16,7 +16,6 @@
apps = { apps = {
speedtest.enable = true; speedtest.enable = true;
technitiumDNS.enable = true; technitiumDNS.enable = true;
traefik.enable = true;
}; };
virtualisation.guest.enable = true; virtualisation.guest.enable = true;
}; };
@ -77,14 +76,6 @@
}; };
}; };
virtualisation.oci-containers.containers.traefik.labels = {
"traefik.http.routers.roxanne.rule" = "Host(`roxanne.depeuter.dev`)";
"traefik.http.services.roxanne.loadbalancer.server.url" = "https://192.168.0.13:8006";
"traefik.http.routers.hugo.rule" = "Host(`hugo.depeuter.dev`)";
"traefik.http.services.hugo.loadbalancer.server.url" = "https://192.168.0.11:444";
};
system.stateVersion = "24.05"; system.stateVersion = "24.05";
}; };
} }

View file

@ -5,13 +5,6 @@
homelab = { homelab = {
apps.gitea.enable = true; apps.gitea.enable = true;
virtualisation.guest.enable = true; virtualisation.guest.enable = true;
users.admin = {
enable = true;
authorizedKeys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFrp6aM62Bf7bj1YM5AlAWuNrANU3N5e8+LtbbpmZPKS"
];
};
}; };
networking = { networking = {

View file

@ -9,13 +9,6 @@
name = "Hugo's Vault"; name = "Hugo's Vault";
}; };
virtualisation.guest.enable = true; virtualisation.guest.enable = true;
users.admin = {
enable = true;
authorizedKeys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJnihoyozOCnm6T9OzL2xoMeMZckBYR2w43us68ABA93"
];
};
}; };
networking = { networking = {

View file

@ -12,16 +12,7 @@ let
PGID = toString config.users.groups.media.gid; PGID = toString config.users.groups.media.gid;
UMASK = "002"; UMASK = "002";
in { in {
options.homelab.apps.arr = let options.homelab.apps.arr = {
mkAppOption = appName: {
enable = lib.mkEnableOption "${appName} using Docker";
exposePorts = lib.mkOption {
type = lib.types.bool;
description = "Expose ${appName} port";
default = cfg.exposePorts;
};
};
in {
enable = lib.mkEnableOption "Arr Stack using Docker"; enable = lib.mkEnableOption "Arr Stack using Docker";
exposePorts = lib.mkOption { exposePorts = lib.mkOption {
type = lib.types.bool; type = lib.types.bool;
@ -30,11 +21,46 @@ in {
default = ! config.homelab.apps.traefik.enable; default = ! config.homelab.apps.traefik.enable;
}; };
bazarr = mkAppOption "Bazarr"; bazarr = {
prowlarr = mkAppOption "Prowlarr"; enable = lib.mkEnableOption "Bazarr using Docker";
qbittorrent = mkAppOption "qBittorrent"; exposePorts = lib.mkOption {
radarr = mkAppOption "Radarr"; type = lib.types.bool;
sonarr = mkAppOption "Sonarr"; description = "Expose Bazarr port";
default = cfg.exposePorts;
};
};
prowlarr = {
enable = lib.mkEnableOption "Prowlarr using Docker";
exposePorts = lib.mkOption {
type = lib.types.bool;
description = "Expose Prowlarr port";
default = cfg.exposePorts;
};
};
qbittorrent = {
enable = lib.mkEnableOption "qBittorrent using Docker";
exposePorts = lib.mkOption {
type = lib.types.bool;
description = "Expose qBittorrent port";
default = cfg.exposePorts;
};
};
radarr = {
enable = lib.mkEnableOption "Radarr using Docker";
exposePorts = lib.mkOption {
type = lib.types.bool;
description = "Expose Radarr port";
default = cfg.exposePorts;
};
};
sonarr = {
enable = lib.mkEnableOption "Sonarr using Docker";
exposePorts = lib.mkOption {
type = lib.types.bool;
description = "Expose Sonarr port";
default = cfg.exposePorts;
};
};
}; };
config = { config = {
@ -61,9 +87,9 @@ in {
virtualisation.containers.enable = lib.mkIf inUse true; virtualisation.containers.enable = lib.mkIf inUse true;
}; };
fileSystems = let fileSystems = lib.mkIf inUse {
mkFileSystem = device: { "/srv/bazarr-backup" = lib.mkIf cfg.bazarr.enable {
inherit device; device = "192.168.0.11:/mnt/BIG/BACKUP/BAZARR";
fsType = "nfs"; fsType = "nfs";
options = [ options = [
"rw" "rw"
@ -76,14 +102,75 @@ in {
]; ];
}; };
hugoBackup = "192.168.0.11:/mnt/BIG/BACKUP"; "/srv/prowlarr-backup" = lib.mkIf cfg.prowlarr.enable {
in lib.mkIf inUse { device = "192.168.0.11:/mnt/BIG/BACKUP/PROWLARR";
"/srv/bazarr-backup" = lib.mkIf cfg.bazarr.enable (mkFileSystem "${hugoBackup}/BAZARR"); fsType = "nfs";
"/srv/prowlarr-backup" = lib.mkIf cfg.bazarr.enable (mkFileSystem "${hugoBackup}/PROWLARR"); options = [
"/srv/qbittorrent" = lib.mkIf cfg.qbittorrent.enable (mkFileSystem "192.168.0.11:/mnt/SMALL/CONFIG/QBITTORRENT"); "rw"
"/srv/radarr-backup" = lib.mkIf cfg.radarr.enable (mkFileSystem "${hugoBackup}/RADARR"); "auto"
"/srv/sonarr-backup" = lib.mkIf cfg.sonarr.enable (mkFileSystem "${hugoBackup}/SONARR"); "nfsvers=4.2"
"/srv/torrent" = mkFileSystem "192.168.0.11:/mnt/SMALL/MEDIA/TORRENT"; "rsize=1048576" "wsize=1048576"
"hard"
"timeo=600" "retrans=2"
"_netdev" "nosuid" "tcp"
];
};
"/srv/qbittorrent" = lib.mkIf cfg.qbittorrent.enable {
device = "192.168.0.11:/mnt/SMALL/CONFIG/QBITTORRENT";
fsType = "nfs";
options = [
"rw"
"auto"
"nfsvers=4.2"
"rsize=1048576" "wsize=1048576"
"hard"
"timeo=600" "retrans=2"
"_netdev" "nosuid" "tcp"
];
};
"/srv/radarr-backup" = lib.mkIf cfg.radarr.enable {
device = "192.168.0.11:/mnt/BIG/BACKUP/RADARR";
fsType = "nfs";
options = [
"rw"
"auto"
"nfsvers=4.2"
"rsize=1048576" "wsize=1048576"
"hard"
"timeo=600" "retrans=2"
"_netdev" "nosuid" "tcp"
];
};
"/srv/sonarr-backup" = lib.mkIf cfg.sonarr.enable {
device = "192.168.0.11:/mnt/BIG/BACKUP/SONARR";
fsType = "nfs";
options = [
"rw"
"auto"
"nfsvers=4.2"
"rsize=1048576" "wsize=1048576"
"hard"
"timeo=600" "retrans=2"
"_netdev" "nosuid" "tcp"
];
};
"/srv/torrent" = {
device = "192.168.0.11:/mnt/SMALL/MEDIA/TORRENT";
fsType = "nfs";
options = [
"rw"
"auto"
"nfsvers=4.2"
"rsize=1048576" "wsize=1048576"
"hard"
"timeo=600" "retrans=2"
"_netdev" "nosuid" "tcp"
];
};
}; };
# Make sure the Docker network exists. # Make sure the Docker network exists.
@ -108,24 +195,45 @@ in {
}; };
# Create a user for each app. # Create a user for each app.
users.users = let users.users = {
mkUser = uid: { bazarr = lib.mkIf cfg.bazarr.enable {
uid = lib.mkForce uid; uid = lib.mkForce 3003;
isSystemUser = true; isSystemUser = true;
group = config.users.groups.media.name; group = config.users.groups.media.name;
home = "/var/empty"; home = "/var/empty";
shell = null; shell = null;
}; };
in { prowlarr = lib.mkIf cfg.prowlarr.enable {
bazarr = lib.mkIf cfg.bazarr.enable (mkUser 3003); uid = lib.mkForce 3004;
prowlarr = lib.mkIf cfg.prowlarr.enable (mkUser 3004); isSystemUser = true;
qbittorrent = lib.mkIf cfg.qbittorrent.enable (mkUser 3005) // { group = config.users.groups.media.name;
home = "/var/empty";
shell = null;
};
qbittorrent = lib.mkIf cfg.qbittorrent.enable {
uid = lib.mkForce 3005;
isSystemUser = true;
group = config.users.groups.media.name;
extraGroups = [ extraGroups = [
config.users.groups.apps.name config.users.groups.apps.name
]; ];
home = "/var/empty";
shell = null;
};
radarr = lib.mkIf cfg.radarr.enable {
uid = lib.mkForce 3006;
isSystemUser = true;
group = config.users.groups.media.name;
home = "/var/empty";
shell = null;
};
sonarr = lib.mkIf cfg.sonarr.enable {
uid = lib.mkForce 3007;
isSystemUser = true;
group = config.users.groups.media.name;
home = "/var/empty";
shell = null;
}; };
radarr = lib.mkIf cfg.radarr.enable (mkUser 3006);
sonarr = lib.mkIf cfg.sonarr.enable (mkUser 3007);
}; };
virtualisation.oci-containers.containers = let virtualisation.oci-containers.containers = let

View file

@ -3,30 +3,24 @@
let let
cfg = config.homelab.users.admin; cfg = config.homelab.users.admin;
in { in {
options.homelab.users.admin = { options.homelab.users.admin.enable = lib.mkEnableOption "user System Administrator";
enable = lib.mkEnableOption "user System Administrator";
authorizedKeys = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [
# HomeLab > NixOS > admin > ssh
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGWIOOEqTy8cWKpENVbzD4p7bsQgQb/Dgpzk8i0dZ00T"
];
};
};
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
nix.settings.trusted-users = [ nix.settings.trusted-users = [
config.users.users.gh0st.name config.users.users.admin.name
]; ];
users.users.gh0st = { users.users.admin = {
description = "System Administrator"; description = "System Administrator";
isNormalUser = true; isNormalUser = true;
extraGroups = [ extraGroups = [
config.users.groups.wheel.name # Enable 'sudo' for the user. config.users.groups.wheel.name # Enable 'sudo' for the user.
]; ];
initialPassword = "ChangeMe"; initialPassword = "ChangeMe";
openssh.authorizedKeys.keys = cfg.authorizedKeys; openssh.authorizedKeys.keys = [
# HomeLab > NixOS > admin > ssh
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGWIOOEqTy8cWKpENVbzD4p7bsQgQb/Dgpzk8i0dZ00T"
];
packages = with pkgs; [ packages = with pkgs; [
curl curl
git git

View file

@ -13,8 +13,13 @@ in {
"docker" # Allow access to the docker socket. "docker" # Allow access to the docker socket.
]; ];
openssh.authorizedKeys.keys = [ openssh.authorizedKeys.keys = [
# TODO ChangeMe
# Tibo-NixFat
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPrG+ldRBdCeHEXrsy/qHXIJYg8xQXVuiUR0DxhFjYNg"
# Hugo # Hugo
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICms6vjhE9kOlqV5GBPGInwUHAfCSVHLI2Gtzee0VXPh" "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDAxR813vqq5zbu1NHrIybu5Imlu3k0rDCGxHiuGEhPoVV9c5FpnKNGLCi3ctm15ZcVBX4HcponYsKRBsCzM2pI4uXjxhHkLzbss5LttFuSzv5v/QHfLW1bvyJEMBEPxguGqAydAeWrBFdI9uHBEXeb325uKxMKBZHYvvpyAQ115c1wKy1bL8BfR0LTkhsFqexRvI86q59AVrAU/KFf6RXO0T9QA6H/vyWLlIPc7Ta+tSWwQ68bMmS5Pwn8q58tOAOAd6Lpt4TqUDJSppPjLEPKyKC6ShwMdEjwmwpEG0hxfsvaU8XERyQbSbEE9sLHRA2LoEdtMx3J8nzX3AwYUNspsqIv6NQZksnVqJ8OfL45ngUFcSJ6kBsUvCZfzEUGUTJ6Js0v84NOIXxNG/ZfPsk6ArXm3dvj2TYeK8llO6wpJnMMyztmmiODWoj9tepZSij44IgVM5wdWYIK/RZoYTsCQbmvJFfB8jhyJnf/7F19Vo5+LwhmCOsQh/KEK0F1DVc= admin@Hugo"
]; ];
}; };
}; };