From 94466519443c57b35949c2a81e246c2887ed8a94 Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Sun, 31 Jan 2021 22:31:04 +0100 Subject: [PATCH] services: add jellyfin This makes use of the 'media' group, to allow using the same group for any software that would either read or write to my media collection. --- configuration.nix | 2 ++ services/default.nix | 2 ++ services/jellyfin.nix | 27 +++++++++++++++++++++++++++ services/media.nix | 10 ++++++++++ 4 files changed, 41 insertions(+) create mode 100644 services/jellyfin.nix create mode 100644 services/media.nix diff --git a/configuration.nix b/configuration.nix index 0f9938e..f756d33 100644 --- a/configuration.nix +++ b/configuration.nix @@ -74,6 +74,8 @@ my.services = { # Gitea forge gitea.enable = true; + # Jellyfin media server + jellyfin.enable = true; # Matrix backend and Element chat front-end matrix.enable = true; }; diff --git a/services/default.nix b/services/default.nix index 85bba5d..8623627 100644 --- a/services/default.nix +++ b/services/default.nix @@ -3,7 +3,9 @@ { imports = [ ./gitea.nix + ./jellyfin.nix ./matrix.nix + ./media.nix ./nginx.nix ]; } diff --git a/services/jellyfin.nix b/services/jellyfin.nix new file mode 100644 index 0000000..8e7637f --- /dev/null +++ b/services/jellyfin.nix @@ -0,0 +1,27 @@ +# A FLOSS media server +{ config, lib, ... }: +let + cfg = config.my.services.jellyfin; + domain = config.networking.domain; + jellyfinDomain = "jellyfin.${config.networking.domain}"; +in +{ + options.my.services.jellyfin = { + enable = lib.mkEnableOption "Jellyfin Media Server"; + }; + + config = lib.mkIf cfg.enable { + services.jellyfin = { + enable = true; + group = "media"; + }; + + # Proxy to Jellyfin + services.nginx.virtualHosts."${jellyfinDomain}" = { + forceSSL = true; + useACMEHost = "${domain}"; + + locations."/".proxyPass = "http://localhost:8096/"; + }; + }; +} diff --git a/services/media.nix b/services/media.nix new file mode 100644 index 0000000..278f74e --- /dev/null +++ b/services/media.nix @@ -0,0 +1,10 @@ +# Abstracting away the need for a common 'media' group + +{ config, lib, ... }: +let + needed = with config.my.services; + jellyfin.enable; +in +{ + config.users.groups.media = lib.mkIf needed { }; +}