From af8e8bf582237a433a3a4220893740a3000ba239 Mon Sep 17 00:00:00 2001 From: ibizaman Date: Sun, 13 Jul 2025 16:29:12 +0200 Subject: [PATCH] expose fine grained modules and overlay --- docs/usage.md | 12 +- flake.nix | 157 +++++++++++--------------- modules/services/jellyfin.nix | 47 +++++++- modules/services/nextcloud-server.nix | 10 +- 4 files changed, 129 insertions(+), 97 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index ca9eb1b..a6a1613 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -9,7 +9,7 @@ Self Host Blocks is available as a flake. To use it in your project, add the fol inputs.selfhostblocks.url = "github:ibizaman/selfhostblocks"; ``` -Then, in your `nixosConfigurations`, import the module with: +Then, in your `nixosConfigurations`, you can import all modules with: ```nix imports = [ @@ -17,6 +17,16 @@ imports = [ ]; ``` +or selectively import some with, for example: + +```nix +imports = [ + inputs.selfhostblocks.nixosModules.x86_64-linux.authelia + inputs.selfhostblocks.nixosModules.x86_64-linux.lldap + inputs.selfhostblocks.nixosModules.x86_64-linux.nextcloud +]; +``` + ### Substituter {#usage-flake-substituter} You can also use the public cache as a substituter with: diff --git a/flake.nix b/flake.nix index 68e5b30..c8fabcd 100644 --- a/flake.nix +++ b/flake.nix @@ -37,99 +37,8 @@ }); pkgs = import patchedNixpkgs { inherit system; - - config = { - permittedInsecurePackages = [ - # TODO: https://github.com/NixOS/nixpkgs/issues/326335 - "dotnet-sdk-6.0.428" - ]; - }; - - overlays = [ - (final: prev: { - exiftool = prev.exiftool.overrideAttrs (f: p: { - version = "12.70"; - src = pkgs.fetchurl { - url = "https://exiftool.org/Image-ExifTool-12.70.tar.gz"; - hash = "sha256-TLJSJEXMPj870TkExq6uraX8Wl4kmNerrSlX3LQsr/4="; - }; - }); - - jellyfin-cli = pkgs.buildDotnetModule rec { - pname = "jellyfin-cli"; - version = "10.10.7"; - - src = pkgs.fetchFromGitHub { - owner = "ibizaman"; - repo = "jellyfin"; - rev = "0b1a5d929960f852dba90c1fc36f3a19dc094f8d"; - hash = "sha256-H9V65+886EYMn/xDEgmxvoEOrbZaI1wSfmkN9vAzGhw="; - }; - - propagatedBuildInputs = [ pkgs.sqlite ]; - - projectFile = "Jellyfin.Cli/Jellyfin.Cli.csproj"; - executables = [ "jellyfin-cli" ]; - nugetDeps = "${pkgs.path}/pkgs/by-name/je/jellyfin/nuget-deps.json"; - runtimeDeps = [ - pkgs.jellyfin-ffmpeg - pkgs.fontconfig - pkgs.freetype - ]; - dotnet-sdk = pkgs.dotnetCorePackages.sdk_8_0; - dotnet-runtime = pkgs.dotnetCorePackages.aspnetcore_8_0; - dotnetBuildFlags = [ "--no-self-contained" ]; - - passthru.tests = { - smoke-test = pkgs.nixosTests.jellyfin; - }; - - meta = with pkgs.lib; { - description = "Free Software Media System"; - homepage = "https://jellyfin.org/"; - # https://github.com/jellyfin/jellyfin/issues/610#issuecomment-537625510 - license = licenses.gpl2Plus; - maintainers = with maintainers; [ - nyanloutre - minijackson - purcell - jojosch - ]; - mainProgram = "jellyfin-cli"; - platforms = dotnet-runtime.meta.platforms; - }; - }; - }) - ]; }; - allModules = [ - modules/blocks/authelia.nix - modules/blocks/davfs.nix - modules/blocks/hardcodedsecret.nix - modules/blocks/lldap.nix - modules/blocks/monitoring.nix - modules/blocks/nginx.nix - modules/blocks/postgresql.nix - modules/blocks/restic.nix - modules/blocks/ssl.nix - modules/blocks/sops.nix - modules/blocks/tinyproxy.nix - modules/blocks/vpn.nix - modules/blocks/zfs.nix - - modules/services/arr.nix - modules/services/audiobookshelf.nix - modules/services/deluge.nix - modules/services/forgejo.nix - modules/services/grocy.nix - modules/services/hledger.nix - modules/services/home-assistant.nix - modules/services/jellyfin.nix - modules/services/nextcloud-server.nix - modules/services/vaultwarden.nix - ]; - # The contract dummies are used to show options for contracts. contractDummyModules = [ modules/contracts/backup/dummyModule.nix @@ -137,13 +46,73 @@ ]; in { - nixosModules.default = { config, ... }: { - imports = allModules; + nixosModules.default = self.nixosModules.${system}.all; + nixosModules.all = { + imports = [ + self.nixosModules.${system}.insecure + + # blocks + self.nixosModules.${system}.authelia + self.nixosModules.${system}.davfs + self.nixosModules.${system}.hardcodedsecret + self.nixosModules.${system}.lldap + self.nixosModules.${system}.monitoring + self.nixosModules.${system}.nginx + self.nixosModules.${system}.postgresql + self.nixosModules.${system}.restic + self.nixosModules.${system}.ssl + self.nixosModules.${system}.sops + self.nixosModules.${system}.tinyproxy + self.nixosModules.${system}.vpn + self.nixosModules.${system}.zfs + + # services + self.nixosModules.${system}.arr + self.nixosModules.${system}.audiobookshelf + self.nixosModules.${system}.deluge + self.nixosModules.${system}.forgejo + self.nixosModules.${system}.grocy + self.nixosModules.${system}.hledger + self.nixosModules.${system}.assistant + self.nixosModules.${system}.jellyfin + self.nixosModules.${system}.nextcloud-server + self.nixosModules.${system}.vaultwarden + ]; }; + nixosModules.insecure = { + nixpkgs.config.permittedInsecurePackages = [ + ]; + }; + + nixosModules.authelia = modules/blocks/authelia.nix; + nixosModules.davfs = modules/blocks/davfs.nix; + nixosModules.hardcodedsecret = modules/blocks/hardcodedsecret.nix; + nixosModules.lldap = modules/blocks/lldap.nix; + nixosModules.monitoring = modules/blocks/monitoring.nix; + nixosModules.nginx = modules/blocks/nginx.nix; + nixosModules.postgresql = modules/blocks/postgresql.nix; + nixosModules.restic = modules/blocks/restic.nix; + nixosModules.ssl = modules/blocks/ssl.nix; + nixosModules.sops = modules/blocks/sops.nix; + nixosModules.tinyproxy = modules/blocks/tinyproxy.nix; + nixosModules.vpn = modules/blocks/vpn.nix; + nixosModules.zfs = modules/blocks/zfs.nix; + + nixosModules.arr = modules/services/arr.nix; + nixosModules.audiobookshelf = modules/services/audiobookshelf.nix; + nixosModules.deluge = modules/services/deluge.nix; + nixosModules.forgejo = modules/services/forgejo.nix; + nixosModules.grocy = modules/services/grocy.nix; + nixosModules.hledger = modules/services/hledger.nix; + nixosModules.assistant = modules/services/home-assistant.nix; + nixosModules.jellyfin = modules/services/jellyfin.nix; + nixosModules.nextcloud-server = modules/services/nextcloud-server.nix; + nixosModules.vaultwarden = modules/services/vaultwarden.nix; + packages.manualHtml = pkgs.callPackage ./docs { inherit nmdsrc; - allModules = allModules ++ contractDummyModules; + allModules = self.nixosModules.${system}.all.imports ++ contractDummyModules; release = builtins.readFile ./VERSION; substituteVersionIn = [ diff --git a/modules/services/jellyfin.nix b/modules/services/jellyfin.nix index a525b21..a493785 100644 --- a/modules/services/jellyfin.nix +++ b/modules/services/jellyfin.nix @@ -9,6 +9,51 @@ let shblib = pkgs.callPackage ../../lib {}; fqdn = "${cfg.subdomain}.${cfg.domain}"; + + jellyfin-cli = pkgs.buildDotnetModule rec { + pname = "jellyfin-cli"; + version = "10.10.7"; + + src = pkgs.fetchFromGitHub { + owner = "ibizaman"; + repo = "jellyfin"; + rev = "0b1a5d929960f852dba90c1fc36f3a19dc094f8d"; + hash = "sha256-H9V65+886EYMn/xDEgmxvoEOrbZaI1wSfmkN9vAzGhw="; + }; + + propagatedBuildInputs = [ pkgs.sqlite ]; + + projectFile = "Jellyfin.Cli/Jellyfin.Cli.csproj"; + executables = [ "jellyfin-cli" ]; + nugetDeps = "${pkgs.path}/pkgs/by-name/je/jellyfin/nuget-deps.json"; + runtimeDeps = [ + pkgs.jellyfin-ffmpeg + pkgs.fontconfig + pkgs.freetype + ]; + dotnet-sdk = pkgs.dotnetCorePackages.sdk_8_0; + dotnet-runtime = pkgs.dotnetCorePackages.aspnetcore_8_0; + dotnetBuildFlags = [ "--no-self-contained" ]; + + passthru.tests = { + smoke-test = pkgs.nixosTests.jellyfin; + }; + + meta = with pkgs.lib; { + description = "Free Software Media System"; + homepage = "https://jellyfin.org/"; + # https://github.com/jellyfin/jellyfin/issues/610#issuecomment-537625510 + license = licenses.gpl2Plus; + maintainers = with maintainers; [ + nyanloutre + minijackson + purcell + jojosch + ]; + mainProgram = "jellyfin-cli"; + platforms = dotnet-runtime.meta.platforms; + }; + }; in { options.shb.jellyfin = { @@ -597,7 +642,7 @@ in runtimeInputs = [ pkgs.systemd ]; text = '' if ! [ -f "${restartedFile}" ]; then - ${lib.getExe pkgs.jellyfin-cli} wizard \ + ${lib.getExe jellyfin-cli} wizard \ --datadir='${config.services.jellyfin.dataDir}' \ --configdir='${config.services.jellyfin.configDir}' \ --cachedir='${config.services.jellyfin.cacheDir}' \ diff --git a/modules/services/nextcloud-server.nix b/modules/services/nextcloud-server.nix index c1bceb5..1a05f24 100644 --- a/modules/services/nextcloud-server.nix +++ b/modules/services/nextcloud-server.nix @@ -1185,6 +1185,14 @@ in (lib.mkIf cfg.apps.memories.enable (let cfg' = cfg.apps.memories; + + exiftool = pkgs.exiftool.overrideAttrs (f: p: { + version = "12.70"; + src = pkgs.fetchurl { + url = "https://exiftool.org/Image-ExifTool-12.70.tar.gz"; + hash = "sha256-TLJSJEXMPj870TkExq6uraX8Wl4kmNerrSlX3LQsr/4="; + }; + }); in { assertions = [ @@ -1207,7 +1215,7 @@ in services.nextcloud = { # See all options at https://memories.gallery/system-config/ settings = { - "memories.exiftool" = "${pkgs.exiftool}/bin/exiftool"; + "memories.exiftool" = "${exiftool}/bin/exiftool"; "memories.exiftool_no_local" = false; "memories.index.mode" = "3"; "memories.index.path" = cfg'.photosPath;