diff --git a/flake.lock b/flake.lock index 1fe213f..7cb2d96 100644 --- a/flake.lock +++ b/flake.lock @@ -20,11 +20,11 @@ ] }, "locked": { - "lastModified": 1778857089, - "narHash": "sha256-TclWRW2SdFeETLaiTG4BA8C8C4m/LppQEldncqyTzAQ=", + "lastModified": 1784368054, + "narHash": "sha256-zF1iJkBQSDWmRO4/LEeHR1SpKY0lqZaxkoQJpPS9K9U=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "ab2b0af63fbc9fb779d684f19149b790978be8a8", + "rev": "9b5f14d9483445e766294eb8fbe0b8f370269ed0", "type": "github" }, "original": { @@ -61,11 +61,11 @@ ] }, "locked": { - "lastModified": 1780290312, - "narHash": "sha256-eTAlX0CwgB84Ts3GaBd944A3DRXVMzgA0EqroZBISUo=", + "lastModified": 1781152676, + "narHash": "sha256-RxWs5ND31KzTG7wvMM+PMfUjyNpmIEr999lqNARaM5o=", "owner": "nix-community", "repo": "disko", - "rev": "115e5211780054d8a890b41f0b7734cafad54dfe", + "rev": "ff8702b4de27f72b4c78573dfb89ec74e36abdf1", "type": "github" }, "original": { @@ -82,11 +82,11 @@ }, "locked": { "dir": "pkgs/firefox-addons", - "lastModified": 1780286561, - "narHash": "sha256-73UvAlulbn6cSaoq+Wllj7WxKrhti8wkT+zYKvFD9d0=", + "lastModified": 1785211368, + "narHash": "sha256-FJFp7T2KGoOhsT0cmXi38bFtrK/fB9jOs3KBoiNz6vQ=", "owner": "rycee", "repo": "nur-expressions", - "rev": "2838055f920c314b0731f71a53a6b878de0309cc", + "rev": "854311a577a3646df9175010e943890aceef4d66", "type": "gitlab" }, "original": { @@ -151,11 +151,11 @@ "nixpkgs-lib": "nixpkgs-lib_2" }, "locked": { - "lastModified": 1778716662, - "narHash": "sha256-m1Yf0wZ8j1OHjTc2UwHwyQRSnNeSgLJOd7q5Y45hzi4=", + "lastModified": 1782949081, + "narHash": "sha256-vp6Y/Grm98ESt6ceOkWiHWyZRDV3J1RID4w+6NWK9yA=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb", + "rev": "17c9d6cdfc60c64f4ee8d306f9bc0b4ccb51481e", "type": "github" }, "original": { @@ -169,11 +169,11 @@ "nixpkgs-lib": "nixpkgs-lib_3" }, "locked": { - "lastModified": 1775087534, - "narHash": "sha256-91qqW8lhL7TLwgQWijoGBbiD4t7/q75KTi8NxjVmSmA=", + "lastModified": 1782949081, + "narHash": "sha256-vp6Y/Grm98ESt6ceOkWiHWyZRDV3J1RID4w+6NWK9yA=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "3107b77cd68437b9a76194f0f7f9c55f2329ca5b", + "rev": "17c9d6cdfc60c64f4ee8d306f9bc0b4ccb51481e", "type": "github" }, "original": { @@ -191,11 +191,11 @@ ] }, "locked": { - "lastModified": 1772408722, - "narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=", + "lastModified": 1782949081, + "narHash": "sha256-vp6Y/Grm98ESt6ceOkWiHWyZRDV3J1RID4w+6NWK9yA=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3", + "rev": "17c9d6cdfc60c64f4ee8d306f9bc0b4ccb51481e", "type": "github" }, "original": { @@ -204,28 +204,6 @@ "type": "github" } }, - "gitignore": { - "inputs": { - "nixpkgs": [ - "hyprland", - "pre-commit-hooks", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1709087332, - "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", - "owner": "hercules-ci", - "repo": "gitignore.nix", - "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "gitignore.nix", - "type": "github" - } - }, "home-manager": { "inputs": { "nixpkgs": "nixpkgs" @@ -251,11 +229,11 @@ ] }, "locked": { - "lastModified": 1780341248, - "narHash": "sha256-PPWavrpeQFqE3bEShp9xcWeh2xyVbUucjBbG64MLRl0=", + "lastModified": 1785119570, + "narHash": "sha256-Rgs2xKnGLFWQscxUaXX07oyZeuMDOHEbqDOsgliLFGM=", "owner": "nix-community", "repo": "home-manager", - "rev": "4baa8ac595f6122d2899093f575347af9c4e66d7", + "rev": "d4fd24667c8cbef124bb70a20380cab75ec8474d", "type": "github" }, "original": { @@ -270,11 +248,11 @@ "nixpkgs": "nixpkgs_7" }, "locked": { - "lastModified": 1780347968, - "narHash": "sha256-I8ibSDQx+E8cgw6k3UxX6Bm7awmGoKSTXc8Gt1Zbpp4=", + "lastModified": 1785168662, + "narHash": "sha256-kGJTc0oEUQuEwV66lSlMxYtOEtpk9N/HS43k+rFAvs8=", "owner": "nix-community", "repo": "home-manager", - "rev": "d0af9b8bf3b4a1d449be7034bebc9f8f9fd6ee99", + "rev": "cbb77679b3d992c8b62f884cd3a84af534a28621", "type": "github" }, "original": { @@ -328,11 +306,11 @@ ] }, "locked": { - "lastModified": 1776426399, - "narHash": "sha256-RUESLKNikIeEq9ymGJ6nmcDXiSFQpUW1IhJ245nL3xM=", + "lastModified": 1782566056, + "narHash": "sha256-haEZcHzYrePnjFOYSWTbxm/Nrla0aPslJfmvdCvqtVc=", "owner": "hyprwm", "repo": "hyprgraphics", - "rev": "68d064434787cf1ed4a2fe257c03c5f52f33cf84", + "rev": "c6e7b9f673f4360bc813d3dc75028f75ee88d3f8", "type": "github" }, "original": { @@ -358,11 +336,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1780334452, - "narHash": "sha256-v+GmvijnXvcpN7pMrKFSYnNozYZ/hz5w7fsswLaT7DM=", + "lastModified": 1785237127, + "narHash": "sha256-M2ktqS/7o1tThairxRh7m5iR6doJktVeypGJE8RebyA=", "ref": "refs/heads/main", - "rev": "13be9a3305150fa9b9492418bbc409707129ab44", - "revCount": 7402, + "rev": "ff24e1755fd308ee70367d63168a12feb05d1fc2", + "revCount": 7664, "submodules": true, "type": "git", "url": "https://github.com/hyprwm/Hyprland" @@ -406,11 +384,11 @@ ] }, "locked": { - "lastModified": 1776426575, - "narHash": "sha256-KI6nIfVihn/DPaeB5Et46Xg3dkNHrrEtUd5LBBVomB0=", + "lastModified": 1784196523, + "narHash": "sha256-ahtKMGXFJdlQNhatQm1+BBU/pGfGYnAqQt3vWvq4p8s=", "owner": "hyprwm", "repo": "hyprland-guiutils", - "rev": "a968d211048e3ed538e47b84cb3649299578f19d", + "rev": "a6ccb6cb112ed5a244c0191fb972347ecfa893e0", "type": "github" }, "original": { @@ -512,11 +490,11 @@ ] }, "locked": { - "lastModified": 1772462885, - "narHash": "sha256-5pHXrQK9zasMnIo6yME6EOXmWGFMSnCITcfKshhKJ9I=", + "lastModified": 1782554491, + "narHash": "sha256-+p3MlyN/nqRefcf2IckPlGRUn9+hielqpS9XClbLleM=", "owner": "hyprwm", "repo": "hyprtoolkit", - "rev": "9af245a69fa6b286b88ddfc340afd288e00a6998", + "rev": "bdba25ced39ea39ab004a8f31593ba0b0ff1ca35", "type": "github" }, "original": { @@ -537,11 +515,11 @@ ] }, "locked": { - "lastModified": 1779475241, - "narHash": "sha256-Nw4DN0A5krWNcPBvuWe5Gz2yuxsUUPiDgtu6SVPJQeU=", + "lastModified": 1784323413, + "narHash": "sha256-XnAVV+H4f8Xdv0yZcSwJ5kCjLyE8fHxPeLX6a3HSrAU=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "3cd3972b2ee658a14d2610d8494e09259e530124", + "rev": "5f03477ab3a005ff27c527486f551883535aea2f", "type": "github" }, "original": { @@ -621,11 +599,11 @@ }, "import-tree_2": { "locked": { - "lastModified": 1778781969, - "narHash": "sha256-Jjuz5CmSkur8KvLDoGa+vylEp+RkQtv4mt/qcMznpH0=", + "lastModified": 1784254960, + "narHash": "sha256-iI88R3wHz8wTKQb5orvpc51L/Xr64AJyxid/0MKa/b8=", "owner": "vic", "repo": "import-tree", - "rev": "d321337efd0f23a9eb14a42adb7b2c29313ab274", + "rev": "4ebb10ae17d5f1ad366e7aef5b92cb8eecf24f69", "type": "github" }, "original": { @@ -639,11 +617,11 @@ "nixpkgs": "nixpkgs_4" }, "locked": { - "lastModified": 1780310866, - "narHash": "sha256-fPBRVf6A5xlACYcOI59shGrjURuvwu0lRsDoSCEXt/I=", + "lastModified": 1785232496, + "narHash": "sha256-65EQYIRRpTdpH8lUiB6Mvo5uBkG60aBIzAJuALfx+O0=", "owner": "nixos", "repo": "nixos-hardware", - "rev": "4ed851c979641e28597a05086332d75cdc9e395f", + "rev": "2e790b0a6be8ec2b76174ac0931b8ff11919ec98", "type": "github" }, "original": { @@ -659,11 +637,11 @@ "nixpkgs": "nixpkgs_5" }, "locked": { - "lastModified": 1784058842, - "narHash": "sha256-3u3tvbCIAid3Mv7RrJx13jusIEQC/HeKYhO/SUSxR3A=", + "lastModified": 1784642409, + "narHash": "sha256-hcbDqFuySAJawljt5r0sKBCJKYnbtGD0T/ZIozH1Dq0=", "owner": "nix-community", "repo": "NixOS-WSL", - "rev": "24c8dc8e0f2170e1a377be24dfadc7d9d21dc1ad", + "rev": "eaeb18da90024448a60eb1ec7132eafa4003404e", "type": "github" }, "original": { @@ -706,11 +684,11 @@ }, "nixpkgs-lib_2": { "locked": { - "lastModified": 1777168982, - "narHash": "sha256-GOkGPcboWE9BmGCRMLX3worL4EMnsnG8MyKmXNeYuhQ=", + "lastModified": 1782614948, + "narHash": "sha256-ePjCwr1sNm9NYUqywL7QfK3JnlS015msC+eBu2zKlp8=", "owner": "nix-community", "repo": "nixpkgs.lib", - "rev": "f5901329dade4a6ea039af1433fb087bd9c1fe14", + "rev": "db3f255737b94216eb71cce308e2912cf6bc2d7c", "type": "github" }, "original": { @@ -721,11 +699,11 @@ }, "nixpkgs-lib_3": { "locked": { - "lastModified": 1774748309, - "narHash": "sha256-+U7gF3qxzwD5TZuANzZPeJTZRHS29OFQgkQ2kiTJBIQ=", + "lastModified": 1782614948, + "narHash": "sha256-ePjCwr1sNm9NYUqywL7QfK3JnlS015msC+eBu2zKlp8=", "owner": "nix-community", "repo": "nixpkgs.lib", - "rev": "333c4e0545a6da976206c74db8773a1645b5870a", + "rev": "db3f255737b94216eb71cce308e2912cf6bc2d7c", "type": "github" }, "original": { @@ -736,11 +714,11 @@ }, "nixpkgs-us": { "locked": { - "lastModified": 1780243769, - "narHash": "sha256-x5UQuRsH3MqI0U9afaXSNqzTPSeZlRLvFAav2Ux1pNw=", + "lastModified": 1785090369, + "narHash": "sha256-m0pDuRJG7EDo9ri+4Ksu83VsI+PlxNC9lNBfydejce4=", "owner": "nixos", "repo": "nixpkgs", - "rev": "331800de5053fcebacf6813adb5db9c9dca22a0c", + "rev": "624af665418d3c65d544145b4d34ad696439570e", "type": "github" }, "original": { @@ -784,11 +762,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1779357205, - "narHash": "sha256-cCO8aTqss5x9Ky8GWkpY0Hy5fyTZEbtifSUV8QjSzic=", + "lastModified": 1784356753, + "narHash": "sha256-12KrbMiWLcf8m7pCvAtZh1ZrgF85ZXDXvfR/fWTKy84=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "f83fc3c307e74bc5fd5adb7eb6b8b13ffd2a36e1", + "rev": "61b7c44c4073f0b827768aff0049561b5110ea5a", "type": "github" }, "original": { @@ -829,11 +807,11 @@ }, "nixpkgs_6": { "locked": { - "lastModified": 1780203844, - "narHash": "sha256-K5sT4jTpGs15ADhviMKNBH38REpPf5Q6mM1+N6cArVE=", + "lastModified": 1785104993, + "narHash": "sha256-eKbrvPoAOFutbYMdbB3r5EQVmFxKv24iKqHPPUXA0gM=", "owner": "nixos", "repo": "nixpkgs", - "rev": "b51242d7d43689db2f3be91bd05d5b24fbb469c4", + "rev": "8623c4c20aa4ca2f5fb81510d2944066c3fb0d96", "type": "github" }, "original": { @@ -845,11 +823,11 @@ }, "nixpkgs_7": { "locked": { - "lastModified": 1779877693, - "narHash": "sha256-NOF9NAREhxr50bbBfVcVOq+ArCMSoe8dP79Pk2uyARk=", + "lastModified": 1783604885, + "narHash": "sha256-tzMgSkV7kljEkqIjlgV6F+n+xD+/a35Db8bs7a4BFAo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "4100e830e085863741bc69b156ec4ccd53ab5be0", + "rev": "767b0d3ec98a143ad9ed7dfc0d5553510ac27133", "type": "github" }, "original": { @@ -861,11 +839,11 @@ }, "nixpkgs_8": { "locked": { - "lastModified": 1775710090, - "narHash": "sha256-ar3rofg+awPB8QXDaFJhJ2jJhu+KqN/PRCXeyuXR76E=", + "lastModified": 1785090369, + "narHash": "sha256-m0pDuRJG7EDo9ri+4Ksu83VsI+PlxNC9lNBfydejce4=", "owner": "nixos", "repo": "nixpkgs", - "rev": "4c1018dae018162ec878d42fec712642d214fdfa", + "rev": "624af665418d3c65d544145b4d34ad696439570e", "type": "github" }, "original": { @@ -877,11 +855,11 @@ }, "nixpkgs_9": { "locked": { - "lastModified": 1774701658, - "narHash": "sha256-CIS/4AMUSwUyC8X5g+5JsMRvIUL3YUfewe8K4VrbsSQ=", + "lastModified": 1784555310, + "narHash": "sha256-/FCliTPgiuV1owejZFNx3Ch9irdvkOfOFl+HHZ+DrtM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "b63fe7f000adcfa269967eeff72c64cafecbbebe", + "rev": "421eebfd0ec7bccd4abe826ce62d7e6e83129493", "type": "github" }, "original": { @@ -899,11 +877,11 @@ "nixvim": "nixvim_2" }, "locked": { - "lastModified": 1776887413, - "narHash": "sha256-zIx29OCh30Bpi4lHwce/5Qz86n6OVqDFi3P5QLRXh7Y=", + "lastModified": 1785202851, + "narHash": "sha256-k80oByOkICFc5g//BN/dmIvZU7b0gisoS9xY9jhz6LA=", "ref": "refs/heads/master", - "rev": "7fb16160f7170a580d6791d0f26736ff68cceb3c", - "revCount": 40, + "rev": "e9c296072c90d65a2573fee682ea51100f5916c8", + "revCount": 41, "type": "git", "url": "https://gitea.esotericbytes.com/nathan/Moirai" }, @@ -919,11 +897,11 @@ "systems": "systems_2" }, "locked": { - "lastModified": 1775837497, - "narHash": "sha256-L17VI03w/wVXvc1SK7EI1muLqHxD3+esYPPzgQvvdOE=", + "lastModified": 1785001306, + "narHash": "sha256-xWqmquUtqKXLeDZ1oQUO+rV4sjA9TShIJhLL8M5Bozo=", "owner": "nix-community", "repo": "nixvim", - "rev": "a587a96a48c705609bfd2ad23f9ae5961eb0d373", + "rev": "48409beb41e8e28b64e8160ca82d8a93fb628963", "type": "github" }, "original": { @@ -954,18 +932,17 @@ "pre-commit-hooks": { "inputs": { "flake-compat": "flake-compat", - "gitignore": "gitignore", "nixpkgs": [ "hyprland", "nixpkgs" ] }, "locked": { - "lastModified": 1778507602, - "narHash": "sha256-kTwur1wV+01SdqskVMSo6JMEpg71ps3HpbFY2GsflKs=", + "lastModified": 1784288435, + "narHash": "sha256-ReRHaLgr/uVqdD8afFSn+myXIfpHeOhP0yYe0TJqAA8=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "61ab0e80d9c7ab14c256b5b453d8b3fb0189ba0a", + "rev": "43b3c1ab9d40fb1dbb008f451988a91e375825e9", "type": "github" }, "original": { @@ -999,11 +976,11 @@ ] }, "locked": { - "lastModified": 1777944972, - "narHash": "sha256-VfGRo1qTBKOe3s2gOv8LSoA6Fk19PvBlwQ1ECN0Evn8=", + "lastModified": 1783174389, + "narHash": "sha256-aCWC8ngycU7OdJrU2+Je3qf+1a2ykuBvpPhZT/9tXMc=", "owner": "Mic92", "repo": "sops-nix", - "rev": "c591bf665727040c6cc5cb409079acb22dcce33c", + "rev": "f1406619a3884cd5c47992a70b8b35c9c0fcb4c9", "type": "github" }, "original": { @@ -1029,15 +1006,16 @@ }, "systems_2": { "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "lastModified": 1774449309, + "narHash": "sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w=", "owner": "nix-systems", "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "rev": "c29398b59d2048c4ab79345812849c9bd15e9150", "type": "github" }, "original": { "owner": "nix-systems", + "ref": "future-26.11", "repo": "default", "type": "github" } @@ -1070,11 +1048,11 @@ ] }, "locked": { - "lastModified": 1778265244, - "narHash": "sha256-8jlPtGSsv/CQY6tVVyLF4Jjd0gnS+Zbn9yk/V13A9nM=", + "lastModified": 1784371182, + "narHash": "sha256-S8A1lezEalltWcCp3gAic5lssS0xTSISK6fKODefhOk=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "813ea5ca9a1702a9a2d1f5836bc00172ef698968", + "rev": "08d99f727944dd15e4740090305e31c5fb92a50a", "type": "github" }, "original": { diff --git a/modules/features/mediaServer/bazarr.nix b/modules/features/mediaServer/bazarr.nix new file mode 100644 index 0000000..fd46b47 --- /dev/null +++ b/modules/features/mediaServer/bazarr.nix @@ -0,0 +1,97 @@ +{ self, ... }: { + + flake.nixosModules.bazarr = { config, lib, pkgs, ... }: let + + subdomain = "bazarr"; + + name = "bazarr"; + + in { + + imports = [ + self.nixosModules.docker + ]; + + + config = { + + virtualisation.oci-containers.containers.bazarr = { + + image = "lscr.io/linuxserver/bazarr:latest"; + +# unstable, waiting for 26.05 +#pull = "newer"; + + hostname = "${subdomain}.esotericbytes.com"; + + networks = [ + "docker-main" + ]; + + labels = { + "traefik.enable" = "true"; + "traefik.http.routers.${name}.entrypoints" = "localsecure"; + "traefik.http.routers.${name}.rule" = "Host(`${subdomain}.esotericbytes.com`)"; + "traefik.http.routers.${name}.service" = "${name}"; + "traefik.http.routers.${name}.tls.certResolver" = "cloudflare"; + +#"traefik.http.services.${name}.loadbalancer.server.url" = "http://192.168.100.10:${builtins.toString hostPort}"; + "traefik.http.services.${name}.loadbalancer.server.port" = "8989"; + }; + + ports = [ + ]; + + extraOptions = [ + "--ip=192.168.101.10" + ]; + + volumes = [ + "vol_bazarr-config:/config" + "/ssd1/Jellyfin/data:/data" + ]; + }; + + systemd.services."docker-bazarr" = { + serviceConfig = { + Restart = lib.mkOverride 90 "always"; + RestartMaxDelaySec = lib.mkOverride 90 "1m"; + RestartSec = lib.mkOverride 90 "100ms"; + RestartSteps = lib.mkOverride 90 9; + }; + after = [ + "docker-network-setup.service" + "docker-volume-bazarr-config.service" + ]; + requires = [ + "docker-network-setup.service" + "docker-volume-bazarr-config.service" + ]; + partOf = [ + "docker-compose-bazarr-root.target" + ]; + wantedBy = [ + "docker-compose-bazarr-root.target" + ]; + }; + + systemd.services."docker-volume-bazarr-config" = { + path = [ pkgs.docker ]; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + }; + script = '' + docker volume inspect vol_bazarr-config || docker volume create vol_bazarr-config --driver=local + ''; + partOf = [ "docker-compose-bazarr-root.target" ]; + wantedBy = [ "docker-compose-bazarr-root.target" ]; + }; + + systemd.targets."docker-compose-bazarr-root" = { + wantedBy = [ "multi-user.target" ]; + }; + + }; + }; +} diff --git a/modules/features/jellyfin.nix b/modules/features/mediaServer/jellyfin.nix similarity index 96% rename from modules/features/jellyfin.nix rename to modules/features/mediaServer/jellyfin.nix index ae31942..b765c49 100644 --- a/modules/features/jellyfin.nix +++ b/modules/features/mediaServer/jellyfin.nix @@ -29,9 +29,10 @@ volumes = [ "vol_jellyfin-config:/config" - "vol_jellyfin-cache:/cache" + "vol_jellyfin-cache:/cache" - "/etc/jellyfin/media:/media" + "/ssd1/Jellyfin/media:/media" + "/ssd1/Jellyfin/data:/data" ]; labels = { diff --git a/modules/features/mediaServer/jellyseerr.nix b/modules/features/mediaServer/jellyseerr.nix new file mode 100644 index 0000000..7bee6dc --- /dev/null +++ b/modules/features/mediaServer/jellyseerr.nix @@ -0,0 +1,96 @@ +{ self, ... }: { + + flake.nixosModules.jellyseerr = { config, lib, pkgs, ... }: let + + subdomain = "jellyseerr"; + + name = "jellyseerr"; + + in { + + imports = [ + self.nixosModules.docker + ]; + + + config = { + + virtualisation.oci-containers.containers.jellyseerr = { + + image = "lscr.io/linuxserver/jellyseerr:latest"; + +# unstable, waiting for 26.05 +#pull = "newer"; + + hostname = "${subdomain}.esotericbytes.com"; + + networks = [ + "docker-main" + ]; + + labels = { + "traefik.enable" = "true"; + "traefik.http.routers.${name}.entrypoints" = "localsecure"; + "traefik.http.routers.${name}.rule" = "Host(`${subdomain}.esotericbytes.com`)"; + "traefik.http.routers.${name}.service" = "${name}"; + "traefik.http.routers.${name}.tls.certResolver" = "cloudflare"; + +#"traefik.http.services.${name}.loadbalancer.server.url" = "http://192.168.100.10:${builtins.toString hostPort}"; + "traefik.http.services.${name}.loadbalancer.server.port" = "8989"; + }; + + ports = [ + ]; + + extraOptions = [ + "--ip=192.168.101.10" + ]; + + volumes = [ + "vol_jellyseerr-config:/config" + ]; + }; + + systemd.services."docker-jellyseerr" = { + serviceConfig = { + Restart = lib.mkOverride 90 "always"; + RestartMaxDelaySec = lib.mkOverride 90 "1m"; + RestartSec = lib.mkOverride 90 "100ms"; + RestartSteps = lib.mkOverride 90 9; + }; + after = [ + "docker-network-setup.service" + "docker-volume-jellyseerr-config.service" + ]; + requires = [ + "docker-network-setup.service" + "docker-volume-jellyseerr-config.service" + ]; + partOf = [ + "docker-compose-jellyseerr-root.target" + ]; + wantedBy = [ + "docker-compose-jellyseerr-root.target" + ]; + }; + + systemd.services."docker-volume-jellyseerr-config" = { + path = [ pkgs.docker ]; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + }; + script = '' + docker volume inspect vol_jellyseerr-config || docker volume create vol_jellyseerr-config --driver=local + ''; + partOf = [ "docker-compose-jellyseerr-root.target" ]; + wantedBy = [ "docker-compose-jellyseerr-root.target" ]; + }; + + systemd.targets."docker-compose-jellyseerr-root" = { + wantedBy = [ "multi-user.target" ]; + }; + + }; + }; +} diff --git a/modules/features/mediaServer/lidarr.nix b/modules/features/mediaServer/lidarr.nix new file mode 100644 index 0000000..e8654c1 --- /dev/null +++ b/modules/features/mediaServer/lidarr.nix @@ -0,0 +1,97 @@ +{ self, ... }: { + + flake.nixosModules.lidarr = { config, lib, pkgs, ... }: let + + subdomain = "lidarr"; + + name = "lidarr"; + + in { + + imports = [ + self.nixosModules.docker + ]; + + + config = { + + virtualisation.oci-containers.containers.lidarr = { + + image = "lscr.io/linuxserver/lidarr:latest"; + +# unstable, waiting for 26.05 +#pull = "newer"; + + hostname = "${subdomain}.esotericbytes.com"; + + networks = [ + "docker-main" + ]; + + labels = { + "traefik.enable" = "true"; + "traefik.http.routers.${name}.entrypoints" = "localsecure"; + "traefik.http.routers.${name}.rule" = "Host(`${subdomain}.esotericbytes.com`)"; + "traefik.http.routers.${name}.service" = "${name}"; + "traefik.http.routers.${name}.tls.certResolver" = "cloudflare"; + +#"traefik.http.services.${name}.loadbalancer.server.url" = "http://192.168.100.10:${builtins.toString hostPort}"; + "traefik.http.services.${name}.loadbalancer.server.port" = "8989"; + }; + + ports = [ + ]; + + extraOptions = [ + "--ip=192.168.101.10" + ]; + + volumes = [ + "vol_lidarr-config:/config" + "/ssd1/Jellyfin/data:/data" + ]; + }; + + systemd.services."docker-lidarr" = { + serviceConfig = { + Restart = lib.mkOverride 90 "always"; + RestartMaxDelaySec = lib.mkOverride 90 "1m"; + RestartSec = lib.mkOverride 90 "100ms"; + RestartSteps = lib.mkOverride 90 9; + }; + after = [ + "docker-network-setup.service" + "docker-volume-lidarr-config.service" + ]; + requires = [ + "docker-network-setup.service" + "docker-volume-lidarr-config.service" + ]; + partOf = [ + "docker-compose-lidarr-root.target" + ]; + wantedBy = [ + "docker-compose-lidarr-root.target" + ]; + }; + + systemd.services."docker-volume-lidarr-config" = { + path = [ pkgs.docker ]; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + }; + script = '' + docker volume inspect vol_lidarr-config || docker volume create vol_lidarr-config --driver=local + ''; + partOf = [ "docker-compose-lidarr-root.target" ]; + wantedBy = [ "docker-compose-lidarr-root.target" ]; + }; + + systemd.targets."docker-compose-lidarr-root" = { + wantedBy = [ "multi-user.target" ]; + }; + + }; + }; +} diff --git a/modules/features/mediaServer/prowlarr.nix b/modules/features/mediaServer/prowlarr.nix new file mode 100644 index 0000000..9dcc594 --- /dev/null +++ b/modules/features/mediaServer/prowlarr.nix @@ -0,0 +1,96 @@ +{ self, ... }: { + + flake.nixosModules.prowlarr = { config, lib, pkgs, ... }: let + + subdomain = "prowlarr"; + + name = "prowlarr"; + + in { + + imports = [ + self.nixosModules.docker + ]; + + + config = { + + virtualisation.oci-containers.containers.prowlarr = { + + image = "lscr.io/linuxserver/prowlarr:latest"; + +# unstable, waiting for 26.05 +#pull = "newer"; + + hostname = "${subdomain}.esotericbytes.com"; + + networks = [ + "docker-main" + ]; + + labels = { + "traefik.enable" = "true"; + "traefik.http.routers.${name}.entrypoints" = "localsecure"; + "traefik.http.routers.${name}.rule" = "Host(`${subdomain}.esotericbytes.com`)"; + "traefik.http.routers.${name}.service" = "${name}"; + "traefik.http.routers.${name}.tls.certResolver" = "cloudflare"; + +#"traefik.http.services.${name}.loadbalancer.server.url" = "http://192.168.100.10:${builtins.toString hostPort}"; + "traefik.http.services.${name}.loadbalancer.server.port" = "8989"; + }; + + ports = [ + ]; + + extraOptions = [ + "--ip=192.168.101.10" + ]; + + volumes = [ + "vol_prowlarr-config:/config" + ]; + }; + + systemd.services."docker-prowlarr" = { + serviceConfig = { + Restart = lib.mkOverride 90 "always"; + RestartMaxDelaySec = lib.mkOverride 90 "1m"; + RestartSec = lib.mkOverride 90 "100ms"; + RestartSteps = lib.mkOverride 90 9; + }; + after = [ + "docker-network-setup.service" + "docker-volume-prowlarr-config.service" + ]; + requires = [ + "docker-network-setup.service" + "docker-volume-prowlarr-config.service" + ]; + partOf = [ + "docker-compose-prowlarr-root.target" + ]; + wantedBy = [ + "docker-compose-prowlarr-root.target" + ]; + }; + + systemd.services."docker-volume-prowlarr-config" = { + path = [ pkgs.docker ]; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + }; + script = '' + docker volume inspect vol_prowlarr-config || docker volume create vol_prowlarr-config --driver=local + ''; + partOf = [ "docker-compose-prowlarr-root.target" ]; + wantedBy = [ "docker-compose-prowlarr-root.target" ]; + }; + + systemd.targets."docker-compose-prowlarr-root" = { + wantedBy = [ "multi-user.target" ]; + }; + + }; + }; +} diff --git a/modules/features/mediaServer/qbittorrent.nix b/modules/features/mediaServer/qbittorrent.nix new file mode 100644 index 0000000..0e1cfa0 --- /dev/null +++ b/modules/features/mediaServer/qbittorrent.nix @@ -0,0 +1,97 @@ +{ self, ... }: { + + flake.nixosModules.qbittorrent = { config, lib, pkgs, ... }: let + + subdomain = "qbittorrent"; + + name = "qbittorrent"; + + in { + + imports = [ + self.nixosModules.docker + ]; + + + config = { + + virtualisation.oci-containers.containers.qbittorrent = { + + image = "hotio/qbittorrent:latest"; + +# unstable, waiting for 26.05 +#pull = "newer"; + + hostname = "${subdomain}.esotericbytes.com"; + + networks = [ + "docker-main" + ]; + + labels = { + "traefik.enable" = "true"; + "traefik.http.routers.${name}.entrypoints" = "localsecure"; + "traefik.http.routers.${name}.rule" = "Host(`${subdomain}.esotericbytes.com`)"; + "traefik.http.routers.${name}.service" = "${name}"; + "traefik.http.routers.${name}.tls.certResolver" = "cloudflare"; + +#"traefik.http.services.${name}.loadbalancer.server.url" = "http://192.168.100.10:${builtins.toString hostPort}"; + "traefik.http.services.${name}.loadbalancer.server.port" = "8989"; + }; + + ports = [ + ]; + + extraOptions = [ + "--ip=192.168.101.10" + ]; + + volumes = [ + "vol_qbittorrent-config:/config" + "/ssd1/Jellyfin/data:/data" + ]; + }; + + systemd.services."docker-qbittorrent" = { + serviceConfig = { + Restart = lib.mkOverride 90 "always"; + RestartMaxDelaySec = lib.mkOverride 90 "1m"; + RestartSec = lib.mkOverride 90 "100ms"; + RestartSteps = lib.mkOverride 90 9; + }; + after = [ + "docker-network-setup.service" + "docker-volume-qbittorrent-config.service" + ]; + requires = [ + "docker-network-setup.service" + "docker-volume-qbittorrent-config.service" + ]; + partOf = [ + "docker-compose-qbittorrent-root.target" + ]; + wantedBy = [ + "docker-compose-qbittorrent-root.target" + ]; + }; + + systemd.services."docker-volume-qbittorrent-config" = { + path = [ pkgs.docker ]; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + }; + script = '' + docker volume inspect vol_qbittorrent-config || docker volume create vol_qbittorrent-config --driver=local + ''; + partOf = [ "docker-compose-qbittorrent-root.target" ]; + wantedBy = [ "docker-compose-qbittorrent-root.target" ]; + }; + + systemd.targets."docker-compose-qbittorrent-root" = { + wantedBy = [ "multi-user.target" ]; + }; + + }; + }; +} diff --git a/modules/features/mediaServer/radarr.nix b/modules/features/mediaServer/radarr.nix new file mode 100644 index 0000000..71831b4 --- /dev/null +++ b/modules/features/mediaServer/radarr.nix @@ -0,0 +1,97 @@ +{ self, ... }: { + + flake.nixosModules.radarr = { config, lib, pkgs, ... }: let + + subdomain = "radarr"; + + name = "radarr"; + + in { + + imports = [ + self.nixosModules.docker + ]; + + + config = { + + virtualisation.oci-containers.containers.radarr = { + + image = "lscr.io/linuxserver/radarr:latest"; + +# unstable, waiting for 26.05 +#pull = "newer"; + + hostname = "${subdomain}.esotericbytes.com"; + + networks = [ + "docker-main" + ]; + + labels = { + "traefik.enable" = "true"; + "traefik.http.routers.${name}.entrypoints" = "localsecure"; + "traefik.http.routers.${name}.rule" = "Host(`${subdomain}.esotericbytes.com`)"; + "traefik.http.routers.${name}.service" = "${name}"; + "traefik.http.routers.${name}.tls.certResolver" = "cloudflare"; + +#"traefik.http.services.${name}.loadbalancer.server.url" = "http://192.168.100.10:${builtins.toString hostPort}"; + "traefik.http.services.${name}.loadbalancer.server.port" = "8989"; + }; + + ports = [ + ]; + + extraOptions = [ + "--ip=192.168.101.10" + ]; + + volumes = [ + "vol_radarr-config:/config" + "/ssd1/Jellyfin/data:/data" + ]; + }; + + systemd.services."docker-radarr" = { + serviceConfig = { + Restart = lib.mkOverride 90 "always"; + RestartMaxDelaySec = lib.mkOverride 90 "1m"; + RestartSec = lib.mkOverride 90 "100ms"; + RestartSteps = lib.mkOverride 90 9; + }; + after = [ + "docker-network-setup.service" + "docker-volume-radarr-config.service" + ]; + requires = [ + "docker-network-setup.service" + "docker-volume-radarr-config.service" + ]; + partOf = [ + "docker-compose-radarr-root.target" + ]; + wantedBy = [ + "docker-compose-radarr-root.target" + ]; + }; + + systemd.services."docker-volume-radarr-config" = { + path = [ pkgs.docker ]; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + }; + script = '' + docker volume inspect vol_radarr-config || docker volume create vol_radarr-config --driver=local + ''; + partOf = [ "docker-compose-radarr-root.target" ]; + wantedBy = [ "docker-compose-radarr-root.target" ]; + }; + + systemd.targets."docker-compose-radarr-root" = { + wantedBy = [ "multi-user.target" ]; + }; + + }; + }; +} diff --git a/modules/features/mediaServer/sonarr.nix b/modules/features/mediaServer/sonarr.nix new file mode 100644 index 0000000..6cb91f4 --- /dev/null +++ b/modules/features/mediaServer/sonarr.nix @@ -0,0 +1,96 @@ +{ self, ... }: { + + flake.nixosModules.sonarr = { config, lib, pkgs, ... }: let + + subdomain = "sonarr"; + + name = "sonarr"; + + in { + + imports = [ + self.nixosModules.docker + ]; + + + config = { + + virtualisation.oci-containers.containers.sonarr = { + + image = "lscr.io/linuxserver/sonarr:latest"; + +# unstable, waiting for 26.05 +#pull = "newer"; + + hostname = "${subdomain}.esotericbytes.com"; + + networks = [ + "docker-main" + ]; + + labels = { + "traefik.enable" = "true"; + "traefik.http.routers.${name}.entrypoints" = "localsecure"; + "traefik.http.routers.${name}.rule" = "Host(`${subdomain}.esotericbytes.com`)"; + "traefik.http.routers.${name}.service" = "${name}"; + "traefik.http.routers.${name}.tls.certResolver" = "cloudflare"; + +#"traefik.http.services.${name}.loadbalancer.server.url" = "http://192.168.100.10:${builtins.toString hostPort}"; + "traefik.http.services.${name}.loadbalancer.server.port" = "8989"; + }; + + ports = [ + ]; + + extraOptions = [ + "--ip=192.168.101.10" + ]; + + volumes = [ + "vol_sonarr-config:/config" + "/ssd1/Jellyfin/data:/data" + ]; + }; + + systemd.services."docker-sonarr" = { + serviceConfig = { + Restart = lib.mkOverride 90 "always"; + RestartMaxDelaySec = lib.mkOverride 90 "1m"; + RestartSec = lib.mkOverride 90 "100ms"; + RestartSteps = lib.mkOverride 90 9; + }; + after = [ + "docker-network-setup.service" + "docker-volume-sonarr-config.service" + ]; + requires = [ + "docker-network-setup.service" + "docker-volume-sonarr-config.service" + ]; + partOf = [ + "docker-compose-sonarr-root.target" + ]; + wantedBy = [ + "docker-compose-sonarr-root.target" + ]; + }; + + systemd.services."docker-volume-sonarr-config" = { + path = [ pkgs.docker ]; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + }; + script = '' + docker volume inspect vol_sonarr-config || docker volume create vol_sonarr-config --driver=local + ''; + partOf = [ "docker-compose-sonarr-root.target" ]; + wantedBy = [ "docker-compose-sonarr-root.target" ]; + }; + + systemd.targets."docker-compose-sonarr-root" = { + wantedBy = [ "multi-user.target" ]; + }; + }; + }; +}