audiobookshelf

This commit is contained in:
Noah Masur 2024-10-12 15:18:54 +00:00
parent 5f71437e57
commit 120b97f970
No known key found for this signature in database
6 changed files with 141 additions and 0 deletions

View File

@ -235,6 +235,7 @@
mail.smtpHost = "smtp.purelymail.com"; mail.smtpHost = "smtp.purelymail.com";
dotfilesRepo = "https://github.com/nmasur/dotfiles"; dotfilesRepo = "https://github.com/nmasur/dotfiles";
hostnames = { hostnames = {
audiobooks = "read.${baseName}";
files = "files.${baseName}"; files = "files.${baseName}";
git = "git.${baseName}"; git = "git.${baseName}";
influxdb = "influxdb.${baseName}"; influxdb = "influxdb.${baseName}";

View File

@ -67,6 +67,14 @@ inputs.nixpkgs.lib.nixosSystem rec {
devices = (import ../../disks/root.nix { disk = "/dev/nvme0n1"; }); devices = (import ../../disks/root.nix { disk = "/dev/nvme0n1"; });
}; };
zramSwap.enable = true;
swapDevices = [
{
device = "/swapfile";
size = 4 * 1024; # 4 GB
}
];
boot.zfs = { boot.zfs = {
# Automatically load the ZFS pool on boot # Automatically load the ZFS pool on boot
extraPools = [ "tank" ]; extraPools = [ "tank" ];
@ -98,6 +106,7 @@ inputs.nixpkgs.lib.nixosSystem rec {
dotfiles.enable = true; dotfiles.enable = true;
arrs.enable = true; arrs.enable = true;
filebrowser.enable = true; filebrowser.enable = true;
services.audiobookshelf.enable = true;
services.bind.enable = true; services.bind.enable = true;
services.caddy.enable = true; services.caddy.enable = true;
services.jellyfin.enable = true; services.jellyfin.enable = true;

View File

@ -14,6 +14,11 @@ let
url = "localhost:7878"; url = "localhost:7878";
apiKey = config.secrets.radarrApiKey.dest; apiKey = config.secrets.radarrApiKey.dest;
}; };
readarr = {
exportarrPort = "9711";
url = "localhost:8787";
apiKey = config.secrets.readarrApiKey.dest;
};
sonarr = { sonarr = {
exportarrPort = "9708"; exportarrPort = "9708";
url = "localhost:8989"; url = "localhost:8989";
@ -61,6 +66,10 @@ in
enable = true; enable = true;
group = "media"; group = "media";
}; };
readarr = {
enable = true;
group = "media";
};
}; };
# Create a media group to be shared between services # Create a media group to be shared between services
@ -110,6 +119,21 @@ in
} }
]; ];
} }
{
group = "download";
match = [
{
host = [ config.hostnames.download ];
path = [ "/readarr*" ];
}
];
handle = [
{
handler = "reverse_proxy";
upstreams = [ { dial = arrConfig.readarr.url; } ];
}
];
}
{ {
group = "download"; group = "download";
match = [ match = [
@ -223,6 +247,11 @@ in
dest = "/var/private/radarr-api"; dest = "/var/private/radarr-api";
prefix = "API_KEY="; prefix = "API_KEY=";
}; };
secrets.readarrApiKey = {
source = ../../../private/radarr-api-key.age;
dest = "/var/private/readarr-api";
prefix = "API_KEY=";
};
secrets.sonarrApiKey = { secrets.sonarrApiKey = {
source = ../../../private/sonarr-api-key.age; source = ../../../private/sonarr-api-key.age;
dest = "/var/private/sonarr-api"; dest = "/var/private/sonarr-api";

View File

@ -0,0 +1,44 @@
{ config, lib, ... }:
{
options = {
hostnames.audiobooks = lib.mkOption {
type = lib.types.str;
description = "Hostname for audiobook server (Audiobookshelf).";
};
};
config = lib.mkIf config.services.audiobookshelf.enable {
services.audiobookshelf = {
dataDir = "audiobookshelf";
};
# Allow web traffic to Caddy
caddy.routes = [
{
match = [ { host = [ config.hostnames.audiobooks ]; } ];
handle = [
{
handler = "reverse_proxy";
upstreams = [ { dial = "localhost:${builtins.toString config.services.audiobookshelf.port}"; } ];
}
];
}
];
# Configure Cloudflare DNS to point to this machine
services.cloudflare-dyndns.domains = [ config.hostnames.audiobooks ];
# Grant user access to Audiobookshelf directories
users.users.${config.user}.extraGroups = [ config.services.audiobookshelf.group ];
# Grant audiobookshelf access to media and Calibre directories
users.users.${config.services.audiobookshelf.user}.extraGroups = [
"media"
"calibre-web"
];
};
}

View File

@ -5,6 +5,7 @@
{ {
imports = [ imports = [
./audiobookshelf.nix
./arr.nix ./arr.nix
./backups.nix ./backups.nix
./bind.nix ./bind.nix

View File

@ -53,6 +53,7 @@ in
uid = promUid; uid = promUid;
} }
]; ];
# TODO: Add option to pull services from a list like Caddy does
dashboards.settings.providers = [ dashboards.settings.providers = [
{ {
name = "test"; name = "test";
@ -368,6 +369,18 @@ in
range = true; range = true;
refId = "C"; refId = "C";
} }
{
datasource = {
type = "prometheus";
uid = promUid;
};
editorMode = "code";
expr = "readarr_system_status";
hide = false;
legendFormat = "Readarr";
range = true;
refId = "F";
}
{ {
datasource = { datasource = {
type = "prometheus"; type = "prometheus";
@ -819,6 +832,28 @@ in
} }
]; ];
} }
{
matcher = {
id = "byName";
options = "localhost:8787";
};
properties = [
{
id = "displayName";
value = "Readarr";
}
{
id = "links";
value = [
{
targetBlank = true;
title = "";
url = "https://${config.hostnames.download}/readarr";
}
];
}
];
}
{ {
matcher = { matcher = {
id = "byName"; id = "byName";
@ -1105,6 +1140,28 @@ in
} }
]; ];
} }
{
matcher = {
id = "byName";
options = "localhost:${builtins.toString config.services.audiobookshelf.port}";
};
properties = [
{
id = "displayName";
value = "Audiobookshelf";
}
{
id = "links";
value = [
{
targetBlank = true;
title = "";
url = "https://${config.hostnames.audiobooks}";
}
];
}
];
}
]; ];
}; };
gridPos = { gridPos = {