expose fine grained modules and overlay

This commit is contained in:
ibizaman 2025-07-13 16:29:12 +02:00 committed by Pierre Penninckx
parent 2ab1211eb0
commit af8e8bf582
4 changed files with 129 additions and 97 deletions

View file

@ -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:

157
flake.nix
View file

@ -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 = [

View file

@ -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}' \

View file

@ -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;