Compare commits

..

4 Commits

Author SHA1 Message Date
Noah Masur
120b97f970
audiobookshelf 2024-10-12 15:18:58 +00:00
Noah Masur
5f71437e57
fix: samba setting renamed 2024-10-12 15:18:15 +00:00
Noah Masur
e8e65ba4d1
fix: zfs deprecated latest compatible linux 2024-10-12 15:17:51 +00:00
Noah Masur
c594a0b161
use flake input for gh-collaborators 2024-10-12 10:52:04 -04:00
10 changed files with 174 additions and 12 deletions

View File

@ -244,6 +244,22 @@
"type": "github"
}
},
"gh-collaborators": {
"flake": false,
"locked": {
"lastModified": 1717117275,
"narHash": "sha256-x3p2bHL6U8gWanXnTTJGgA9x4Ixy9AOZiBbfcfn5VVw=",
"owner": "katiem0",
"repo": "gh-collaborators",
"rev": "4dfcd0b5c2e31f2d0fbfd4b83fdfae787a5e6ff8",
"type": "github"
},
"original": {
"owner": "katiem0",
"repo": "gh-collaborators",
"type": "github"
}
},
"hmts-nvim-src": {
"flake": false,
"locked": {
@ -584,6 +600,7 @@
"disko": "disko",
"fidget-nvim-src": "fidget-nvim-src",
"firefox-darwin": "firefox-darwin",
"gh-collaborators": "gh-collaborators",
"hmts-nvim-src": "hmts-nvim-src",
"home-manager": "home-manager",
"mac-app-util": "mac-app-util",

View File

@ -185,6 +185,11 @@
flake = false;
};
gh-collaborators = {
url = "github:katiem0/gh-collaborators";
flake = false;
};
# Nextcloud Apps
nextcloud-news = {
# https://github.com/nextcloud/news/releases
@ -230,6 +235,7 @@
mail.smtpHost = "smtp.purelymail.com";
dotfilesRepo = "https://github.com/nmasur/dotfiles";
hostnames = {
audiobooks = "read.${baseName}";
files = "files.${baseName}";
git = "git.${baseName}";
influxdb = "influxdb.${baseName}";
@ -260,7 +266,7 @@
(import ./overlays/mpv-scripts.nix inputs)
(import ./overlays/nextcloud-apps.nix inputs)
(import ./overlays/betterlockscreen.nix)
(import ./overlays/gh-collaborators.nix)
(import ./overlays/gh-collaborators.nix inputs)
(import ./overlays/ren-rep.nix inputs)
];

View File

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

View File

@ -1,4 +1,9 @@
{ config, lib, ... }:
{
config,
pkgs,
lib,
...
}:
{
options = {
@ -8,7 +13,7 @@
config = lib.mkIf (config.server && config.zfs.enable) {
# Only use compatible Linux kernel, since ZFS can be behind
boot.kernelPackages = config.boot.zfs.package.latestCompatibleLinuxPackages;
boot.kernelPackages = pkgs.linuxPackages; # Defaults to latest LTS
boot.kernelParams = [ "nohibernate" ];
boot.supportedFilesystems = [ "zfs" ];
services.prometheus.exporters.zfs.enable = config.prometheus.exporters.enable;

View File

@ -14,6 +14,11 @@ let
url = "localhost:7878";
apiKey = config.secrets.radarrApiKey.dest;
};
readarr = {
exportarrPort = "9711";
url = "localhost:8787";
apiKey = config.secrets.readarrApiKey.dest;
};
sonarr = {
exportarrPort = "9708";
url = "localhost:8989";
@ -61,6 +66,10 @@ in
enable = true;
group = "media";
};
readarr = {
enable = true;
group = "media";
};
};
# 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";
match = [
@ -223,6 +247,11 @@ in
dest = "/var/private/radarr-api";
prefix = "API_KEY=";
};
secrets.readarrApiKey = {
source = ../../../private/radarr-api-key.age;
dest = "/var/private/readarr-api";
prefix = "API_KEY=";
};
secrets.sonarrApiKey = {
source = ../../../private/sonarr-api-key.age;
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 = [
./audiobookshelf.nix
./arr.nix
./backups.nix
./bind.nix

View File

@ -53,6 +53,7 @@ in
uid = promUid;
}
];
# TODO: Add option to pull services from a list like Caddy does
dashboards.settings.providers = [
{
name = "test";
@ -368,6 +369,18 @@ in
range = true;
refId = "C";
}
{
datasource = {
type = "prometheus";
uid = promUid;
};
editorMode = "code";
expr = "readarr_system_status";
hide = false;
legendFormat = "Readarr";
range = true;
refId = "F";
}
{
datasource = {
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 = {
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 = {

View File

@ -7,7 +7,7 @@
services.samba = lib.mkIf config.services.samba.enable {
openFirewall = true;
shares.data = {
settings.data = {
path = "/data";
browseable = "yes";
"read only" = "no";

View File

@ -1,15 +1,9 @@
_final: prev: {
inputs: _final: prev: {
gh-collaborators = prev.buildGoModule rec {
pname = "gh-collaborators";
version = "v2.0.3";
src = prev.fetchFromGitHub {
owner = "nmasur";
repo = "gh-collaborators";
rev = version;
sha256 = "sha256-XgAZ/+7QxIRKiAZ4Gp/rLgTABSXkVjFQ8TbXOFj9vpM=";
};
src = inputs.gh-collaborators;
# vendorHash = "sha256-rsRDOgJBa8T6+bC/APcmuRmg6ykbIp9pwRnJ9rrfHEs=";
vendorHash = "sha256-fykxRb2U9DDsXorRTLiVWmhMY89N7RS07sal8ww6gz4=";