expose fine grained modules and overlay
This commit is contained in:
parent
2ab1211eb0
commit
af8e8bf582
4 changed files with 129 additions and 97 deletions
|
|
@ -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";
|
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
|
```nix
|
||||||
imports = [
|
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}
|
### Substituter {#usage-flake-substituter}
|
||||||
|
|
||||||
You can also use the public cache as a substituter with:
|
You can also use the public cache as a substituter with:
|
||||||
|
|
|
||||||
157
flake.nix
157
flake.nix
|
|
@ -37,99 +37,8 @@
|
||||||
});
|
});
|
||||||
pkgs = import patchedNixpkgs {
|
pkgs = import patchedNixpkgs {
|
||||||
inherit system;
|
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.
|
# The contract dummies are used to show options for contracts.
|
||||||
contractDummyModules = [
|
contractDummyModules = [
|
||||||
modules/contracts/backup/dummyModule.nix
|
modules/contracts/backup/dummyModule.nix
|
||||||
|
|
@ -137,13 +46,73 @@
|
||||||
];
|
];
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
nixosModules.default = { config, ... }: {
|
nixosModules.default = self.nixosModules.${system}.all;
|
||||||
imports = allModules;
|
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 {
|
packages.manualHtml = pkgs.callPackage ./docs {
|
||||||
inherit nmdsrc;
|
inherit nmdsrc;
|
||||||
allModules = allModules ++ contractDummyModules;
|
allModules = self.nixosModules.${system}.all.imports ++ contractDummyModules;
|
||||||
release = builtins.readFile ./VERSION;
|
release = builtins.readFile ./VERSION;
|
||||||
|
|
||||||
substituteVersionIn = [
|
substituteVersionIn = [
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,51 @@ let
|
||||||
shblib = pkgs.callPackage ../../lib {};
|
shblib = pkgs.callPackage ../../lib {};
|
||||||
|
|
||||||
fqdn = "${cfg.subdomain}.${cfg.domain}";
|
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
|
in
|
||||||
{
|
{
|
||||||
options.shb.jellyfin = {
|
options.shb.jellyfin = {
|
||||||
|
|
@ -597,7 +642,7 @@ in
|
||||||
runtimeInputs = [ pkgs.systemd ];
|
runtimeInputs = [ pkgs.systemd ];
|
||||||
text = ''
|
text = ''
|
||||||
if ! [ -f "${restartedFile}" ]; then
|
if ! [ -f "${restartedFile}" ]; then
|
||||||
${lib.getExe pkgs.jellyfin-cli} wizard \
|
${lib.getExe jellyfin-cli} wizard \
|
||||||
--datadir='${config.services.jellyfin.dataDir}' \
|
--datadir='${config.services.jellyfin.dataDir}' \
|
||||||
--configdir='${config.services.jellyfin.configDir}' \
|
--configdir='${config.services.jellyfin.configDir}' \
|
||||||
--cachedir='${config.services.jellyfin.cacheDir}' \
|
--cachedir='${config.services.jellyfin.cacheDir}' \
|
||||||
|
|
|
||||||
|
|
@ -1185,6 +1185,14 @@ in
|
||||||
(lib.mkIf cfg.apps.memories.enable
|
(lib.mkIf cfg.apps.memories.enable
|
||||||
(let
|
(let
|
||||||
cfg' = cfg.apps.memories;
|
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
|
in
|
||||||
{
|
{
|
||||||
assertions = [
|
assertions = [
|
||||||
|
|
@ -1207,7 +1215,7 @@ in
|
||||||
services.nextcloud = {
|
services.nextcloud = {
|
||||||
# See all options at https://memories.gallery/system-config/
|
# See all options at https://memories.gallery/system-config/
|
||||||
settings = {
|
settings = {
|
||||||
"memories.exiftool" = "${pkgs.exiftool}/bin/exiftool";
|
"memories.exiftool" = "${exiftool}/bin/exiftool";
|
||||||
"memories.exiftool_no_local" = false;
|
"memories.exiftool_no_local" = false;
|
||||||
"memories.index.mode" = "3";
|
"memories.index.mode" = "3";
|
||||||
"memories.index.path" = cfg'.photosPath;
|
"memories.index.path" = cfg'.photosPath;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue