From 0781321e3285d904e0a33325ef41b04c5a8e2bd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Madeleine=20Sydney=20=C5=9Alaga?= Date: Wed, 8 Jul 2026 23:19:20 -0600 Subject: [PATCH] feat(beats): init --- hosts/deertopia/configuration.nix | 1 + modules/nixos/deertopia/beets.nix | 67 +++++++++++++++++++++++++++++++ users/lain/default.nix | 1 + 3 files changed, 69 insertions(+) create mode 100644 modules/nixos/deertopia/beets.nix diff --git a/hosts/deertopia/configuration.nix b/hosts/deertopia/configuration.nix index 6981616..229db1a 100644 --- a/hosts/deertopia/configuration.nix +++ b/hosts/deertopia/configuration.nix @@ -67,6 +67,7 @@ murmur.enable = true; anki-sync-server.enable = true; vaultwarden.enable = true; + beets.enable = true; servarr = { enable = true; prowlarr.enable = true; diff --git a/modules/nixos/deertopia/beets.nix b/modules/nixos/deertopia/beets.nix new file mode 100644 index 0000000..d6736b2 --- /dev/null +++ b/modules/nixos/deertopia/beets.nix @@ -0,0 +1,67 @@ +{ config, lib, pkgs, ... }: + +let cfg = config.sydnix.deertopia.beets; +in { + options.sydnix.deertopia.beets = { + enable = lib.mkEnableOption "Beets"; + user = lib.mkOption { + default = "beets"; + type = lib.types.str; + description = '' + Name of the user which owns the Beets database. + ''; + }; + group = lib.mkOption { + default = "beets"; + type = lib.types.str; + description = '' + Name of the group which owns the Beets database. + ''; + }; + }; + + config = lib.mkIf cfg.enable { + users.users.${cfg.user} = { + description = "Beets"; + isSystemUser = true; + inherit (cfg) group; + }; + + users.groups.${cfg.group} = {}; + + # Persist allowed directories. + sydnix.impermanence.directories = [ + { + directory = "/var/lib/beets"; + inherit (cfg) user group; + mode = "u=rwx,g=rwx,o="; + } + ]; + + environment.systemPackages = [ + pkgs.beets + ]; + + environment.sessionVariables.BEETSDIR = "/var/lib/beets"; + systemd.tmpfiles.settings."50-var-lib-beets-beets-yaml" = { + "/var/lib/beets/beets.yaml"."L+".argument = + lib.toString + (pkgs.writeText + "beets.yaml" + (lib.toJSON { + directory = "/media/library/music"; + library = "/var/lib/beets/beets.db"; + import = { + copy = true; + write = true; + incremental = true; + }; + paths = { + default = "$albumartist/$album%aunique{} ($year)/$track $title"; + singleton = "Non-Album/$artist/$title"; + comp = "Compilations/$album%aunique{} ($year)/$title"; + }; + })); + }; + }; +} diff --git a/users/lain/default.nix b/users/lain/default.nix index a2b573b..fe2891e 100644 --- a/users/lain/default.nix +++ b/users/lain/default.nix @@ -18,6 +18,7 @@ "slskd" # Can access Nixarr's media. "media" + "beets" ]; initialHashedPassword = "$y$j9T$aEFDDwdTZbAc6VQRXrkBJ0$K8wxTGTWDihyX1wxJ.ZMH//wmQFfrGGUkLkxIU0Lyq8";