Files
vmimages/modules/home-manager/beets/default.nix
2025-07-02 15:48:57 +00:00

209 lines
6.9 KiB
Nix
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
config,
pkgs,
lib,
...
}:
with lib; let
cfg = config.custom.beets;
in {
options.custom.beets = {
enable = mkOption {
type = types.bool;
default = false;
description = "Enable Beets";
};
};
config = mkIf cfg.enable {
home.packages = [
pkgs.ffmpeg # for replaygain
#pkgs.beets-bpmanalyser #BPManayser
];
sops = {
secrets.discogs_json = {
path = "${config.xdg.configHome}/beets/discogs_token.json";
};
};
programs.beets = {
enable = true;
package = pkgs.beets.override {
pluginOverrides = {
originquery = {
enable = true;
propagatedBuildInputs = [pkgs.beets-originquery];
};
bpmanalyser = {
enable = true;
#propagatedBuildInputs = [pkgs.beets-bpmanalyser pkgs.python3Packages.numpy pkgs.python3Packages.aubio pkgs.python3Packages.pydub];
propagatedBuildInputs = [
pkgs.beets-bpmanalyser
] ++ (with pkgs.python3Packages; [numpy aubio pydub]);
};
};
};
settings = {
album_fields = {
artist_grouping = ''
albumartist_dev = ["devin townsend", "devin townsend project","punky brüster","strapping young lad"]
DevinFolder = "_Devin Townsend Projects"
if albumartist.lower() in albumartist_dev:
return DevinFolder
albumartist_les = ["primus", "les claypool","les claypool and the holy mackerel","les claypools duo de twang","oysterhead","colonel claypools bucket of bernie brains","the les claypool frog brigade","the claypool lennon delirium"]
LesFolder = "_Les Claypool Projects"
if albumartist.lower() in albumartist_les:
return LesFolder
'';
atype = ''
atypes = ['EP', 'Single','Live']
for atype in atypes:
if atype.lower() == albumtype.lower():
return f' [{atype}]'
'';
first_artist = "albumartist.split(', ',1)[0:1][0]";
};
albumtypes = {
bracket = "[]";
ignore_va = "compilation";
types = [
{ep = "EP";}
{single = "Single";}
{soundtrack = "OST";}
{live = "Live";}
{compilation = "Anthology";}
{remix = "Remix";}
];
};
aunique = {
bracket = "[]";
disambiguators = "media";
keys = "albumartist album";
};
copyartifacts = {extensions = ".cue .log .jpg .jpeg .png .txt";};
directory = "/mnt/q/CleanMusic/";
embedart = {auto = true;};
extrafiles = {
paths = {
artworkdir = "$albumpath/Artwork";
"ext:cue" = "$albumpath/$disc_folder/Data/";
"ext:jpg" = "$albumpath/$disc_folder/";
"ext:log" = "$albumpath/$disc_folder/Data/";
};
patterns = {
all = "*.*";
artworkdir = ["[sS]cans/" "[aA]rtwork/" "[aA]rt/" "[cC]over/"];
};
};
fetchart = {
auto = true;
sources = "filesystem coverart itunes amazon albumart fanarttv";
};
import = {
autotag = true;
bell = false;
copy = true;
languages = "en";
log = "~/.config/beets/beet.log";
move = false;
write = true;
};
item_fields = {
isMultidisc = "1 if disctotal > 1 else 0";
myBitDepth = "('' if bitdepth != 24 else '[24bit - '+ media + ']')";
myDisc = "('' if disctotal <= 1 else str(disc) + ' - ')";
mySongartist = "artist + ' - ' if artist != albumartist and artist != '' else ''";
};
library = "~/musiclibrary.db";
match = {
max_rec = {
album = "strong";
album_id = "strong";
albumdisambig = "strong";
artist = "strong";
catalognum = "strong";
country = "strong";
label = "strong";
media = "strong";
mediums = "strong";
missing_tracks = "medium";
source = "strong";
track_artist = "strong";
track_id = "strong";
track_index = "strong";
track_length = "strong";
track_title = "strong";
tracks = "strong";
unmatched_tracks = "medium";
year = "strong";
};
strong_rec_thresh = 5.0e-2;
};
missing = {
format_album = "$albumartist: ($year) $album $albumtype $atype";
format_item = "$albumartist - $album [$albumtype]$atype: $track/$tracktotal $title";
};
musicbrainz = {
extra_tags = ["year" "catalognum" "country" "media" "label"];
pass = "7ANCLPczDNFn6Sf65vdZ";
user = "shapechecker";
};
original_date = true;
originquery = {
origin_file = "origin.yaml";
tag_patterns = {
media = ''$.Media'';
year = ''$."Edition year"'';
label = ''$."Record label"'';
catalognum = ''$."Catalog number"'';
albumdisambig = ''$.Edition'';
};
use_origin_on_conflict = true;
};
paths = {
"albumtype:soundtrack" = "Soundtracks/$albumartist - $album%aunique{} ($year)/$myDisc$track - $artist - $title";
comp = "Compilations/$albumartist/($year) $album%aunique{}/$myDisc$track - $artist - $title";
default = "%if{$artist_grouping,$artist_grouping/}$first_artist/$year - $album $atype%aunique{media}[%upper{$format}$bitdepth]%if{$media,[$media]}/%if{$isMultidisc,$disc - }$track - $mySongartist$title";
};
per_disc_numbering = true;
plugins = [
"albumtypes"
"duplicates"
"fetchart"
"rewrite"
"missing"
"chroma"
"embedart"
"inline"
"discogs"
"mbcollection"
"replaygain"
"info"
"mbsync"
"originquery"
"bpmanalyser"
];
replaygain = {
backend = "ffmpeg";
};
rewrite = {
"artist Björk & Tríó Guðmundar Ingólfssonar" = "Björk";
"artist Brant Bjork and The Low Desert Punk Band" = "Brant Bjork";
"artist King Gizzard & The Lizard Wizard with Mild High Club" = "King Gizzard & The Lizard Wizard";
"artist Kyuss _ Queens of the Stone Age" = "Kyuss";
"artist Professor Elemental & Tom Caruana" = "Professor Elemental";
"artist Resin Dogs Feat Spikey Tee" = "Resin Dogs";
"artist Sepultura _ Exodus" = "Sepultura";
"artist The Knife in collaboration with Mount Sims and Planningtorock" = "The Knife";
"artist Unida _ Dozer" = "Unida";
};
};
};
};
}