From 095ab6dda11857f3ac3d2f54af9143708b2583d4 Mon Sep 17 00:00:00 2001 From: ediblerope Date: Tue, 20 Jan 2026 09:59:20 +0000 Subject: [PATCH] Create FredOS-Mediaserver.nix --- hosts/FredOS-Mediaserver.nix | 86 ++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 hosts/FredOS-Mediaserver.nix diff --git a/hosts/FredOS-Mediaserver.nix b/hosts/FredOS-Mediaserver.nix new file mode 100644 index 0000000..0c8ab99 --- /dev/null +++ b/hosts/FredOS-Mediaserver.nix @@ -0,0 +1,86 @@ +{ config, pkgs, lib, ... }: +{ + fileSystems."/mnt/disk1" = { + device = "/dev/disk/by-uuid/90ae3493-38c1-4473-b409-e9d99c3b315e"; + fsType = "ext4"; + options = [ "defaults" ]; + }; + fileSystems."/mnt/disk2" = { + device = "/dev/disk/by-uuid/7145223e-f285-424a-a114-cb0b1b64e068"; + fsType = "ext4"; + options = [ "defaults" ]; + }; + fileSystems."/mnt/disk3" = { + device = "/dev/disk/by-uuid/613abe28-9af9-481e-9673-0eab1913b32c"; + fsType = "ext4"; + options = [ "defaults" ]; + }; + fileSystems."/mnt/storage" = { + device = "/mnt/disk1:/mnt/disk2:/mnt/disk3"; + fsType = "fuse.mergerfs"; + options = [ + "defaults" + "allow_other" + "use_ino" + "cache.files=partial" + "dropcacheonclose=true" + "category.create=mfs" # Most free space for new files + ]; + }; + + # Create symlink from home to storage + systemd.tmpfiles.rules = [ + "L+ /home/fred/storage - - - - /mnt/storage" + "d /var/lib/nginx-proxy-manager/data 0755 root root -" + "d /var/lib/nginx-proxy-manager/letsencrypt 0755 root root -" + ]; + + # Basic system packages + environment.systemPackages = with pkgs; [ + mergerfs + wget + btop + ]; + + # Jellyfin + services.jellyfin = { + enable = true; + openFirewall = true; + }; + + # Nginx Proxy Manager + virtualisation.docker.enable = true; + + systemd.services.nginx-proxy-manager = { + description = "Nginx Proxy Manager"; + after = [ "docker.service" ]; + requires = [ "docker.service" ]; + wantedBy = [ "multi-user.target" ]; + + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + ExecStart = '' + ${pkgs.docker}/bin/docker run -d \ + --name=nginx-proxy-manager \ + --restart=unless-stopped \ + -p 80:80 \ + -p 81:81 \ + -p 443:443 \ + -v /var/lib/nginx-proxy-manager/data:/data \ + -v /var/lib/nginx-proxy-manager/letsencrypt:/etc/letsencrypt \ + jc21/nginx-proxy-manager:latest + ''; + ExecStop = "${pkgs.docker}/bin/docker stop nginx-proxy-manager"; + }; + }; + + # Open firewall for web traffic + networking.firewall.allowedTCPPorts = [ 80 443 81 ]; # 81 is NPM admin interface + + # Basic networking + networking.useDHCP = lib.mkDefault true; + + # System state version + system.stateVersion = "25.11"; +}