diff options
Diffstat (limited to 'modules/home/conf/beets/default.nix')
-rw-r--r-- | modules/home/conf/beets/default.nix | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/modules/home/conf/beets/default.nix b/modules/home/conf/beets/default.nix new file mode 100644 index 00000000..fe3281ac --- /dev/null +++ b/modules/home/conf/beets/default.nix @@ -0,0 +1,117 @@ +{ + pkgs, + config, + ... +}: { + programs.beets = { + enable = true; + package = pkgs.beets.override { + pluginOverrides = { + beatport.enable = true; + }; + }; + settings = { + library = "${config.xdg.dataHome}/beets/library.db"; + art_filename = "cover"; + directory = config.xdg.userDirs.music; + ui = { + color = true; + }; + import = { + # link, instead of copying or moving the files + copy = false; + move = false; + link = true; + + # Write the metadata to the files + write = true; + log = "beetslog.txt"; + }; + + paths = { + default = "$genre/$albumartist/$album/$track $title"; + comp = "$genre/$album/$track $title"; + singleton = "$genre/$artist/$title"; + "albumtype:soundtrack" = "Soundtracks/$album/$track $title"; + }; + + # Plugin config + fetchart = {}; + lastgenre = {}; + lyrics = { + # Always fetch lyrics (and update them, if some were found) + force = true; + }; + hook = { + hooks = [ + { + # Called, when `beet import` finishes + event = "import"; + command = "echo 'Import finished. Starting to calculate replay gain..' && beet replaygain"; + } + ]; + }; + replaygain = { + # Can't run in parallel in the import because of writing issues, thus we run it + # after the import finishes (see the `hooks` config) + auto = false; + backend = "ffmpeg"; + + # Re-calculate the replay gain value even for files, that already have one set. + overwrite = true; + }; + scrub = { + # Could be set to false, to only scrub metadata with the `beet scrub` command. + auto = true; + }; + + plugins = [ + # Remove all previous tags before import (this is useful to ensure, that + # the metadata in the libary.db is synced with the tags on disk) + # # FIXME: I think, that this also removes the baked-in images, which is not ideal + # <2024-08-07> + # "scrub" + + # Calculate replay gain + "replaygain" + + # Generate fingerprints + "chroma" + + # Download album art + "fetchart" + + # Fetches tags from `last.fm` and adds them as genres to imported music + "lastgenre" + + # Run commands on events + "hooks" + + # Fetch lyrics + "lyrics" + + # Allow beets to understand deezer id's + "deezer" + + "mpdstats" # Transfer MPD stats to beets + "mpdupdate" # Update MPD database on import + ]; + + # Log-on config + # musicbrainz: + # external_ids: + # deezer: true + # TODO: Add this, to upload the generated fingerprints (to help improve their + # database) <2024-08-07> + # acoustid = { + # apikey = "TODO"; + # }; + }; + + mpdIntegration = { + enableStats = true; + enableUpdate = true; + host = config.home.sessionVariables.MPD_HOST; + }; + }; +} |