diff options
Diffstat (limited to '')
-rw-r--r-- | modules/home/conf/beets/default.nix | 205 |
1 files changed, 10 insertions, 195 deletions
diff --git a/modules/home/conf/beets/default.nix b/modules/home/conf/beets/default.nix index aa5cc671..58008bd6 100644 --- a/modules/home/conf/beets/default.nix +++ b/modules/home/conf/beets/default.nix @@ -3,13 +3,17 @@ lib, config, ... -}: { +}: let + plugins = import ./plugins.nix; +in { + imports = [ + ./plugins + ]; + programs.beets = { enable = true; package = pkgs.beets.override { - pluginOverrides = { - beatport.enable = true; - }; + pluginOverrides = {}; }; settings = { @@ -52,202 +56,13 @@ "albumtype:soundtrack" = j ["Soundtracks" "$genre" "$first_artist" "$album" "$track $title"]; }; - # Plugin config - lastgenre = { - prefer_specific = false; - # Lookup the track, not the album - source = "track"; - }; - fetchart = {}; - lyrics = { - # Always fetch lyrics (and update them, if some were found) - force = true; - }; - hook = { - hooks = [ - { - # Also generate the replaygain for the album variant (so selecting between - # track and album becomes possible) - event = "import"; - command = "echo Remember to run 'beet replaygain --album' to generate the album replaygain values for the imported songs!"; - } - ]; - }; - replaygain = { - auto = true; - backend = "ffmpeg"; + inherit plugins; - r128_targetlevel = 89; - - # Re-calculate the replay gain value even for files, that already have one set. - overwrite = true; - }; - duplicates = { - keys = ["acoustid_fingerprint"]; - }; - fuzzy = { - # The prefix denoting that a search should be run in fuzzy mode - prefix = "."; - }; - ihate = { - warn = [ - "title:commentary" - "albumtype:live" - ]; - }; - play = { - command = "${lib.getExe pkgs.mpc-cli} $args add"; - relative_to = config.services.mpd.musicDirectory; - - # Run the command with the returned paths as arguments - raw = true; - }; - smartplaylist = { - relative_to = config.services.mpd.musicDirectory; - playlist_dir = config.services.mpd.playlistDirectory; - forward_slash = false; - - # Show the real m3u file paths, when running `--pretend` - pretend_paths = true; - - playlists = [ - { - name = "artists-$first_artist.m3u"; - query = ""; - } - { - name = "ratings-good.m3u"; - query = "rating:0.7..1.0"; - } - { - name = "ratings-mediocre.m3u"; - query = "rating:0.4..0.7"; - } - { - name = "ratings-bad.m3u"; - query = "rating:0.0..0.4"; - } - { - name = "not_played.m3u"; - query = "-play_count: artist:"; - } - ]; - }; - item_fields = { - # Taken from https://github.com/trapd00r/configs/blob/4f3dada5700846cca6c2869e6fa6b3c795b87b67/beets/config.yaml - first_artist = - /* - python - */ - '' - # import an album to another artists directory, like: - # Tom Jones │1999│ Burning Down the House [Single, CD, FLAC] - # to The Cardigans/+singles/Tom Jones & the Cardigans │1999│ Burning Down the House [Single, CD, FLAC] - # https://github.com/beetbox/beets/discussions/4012#discussioncomment-1021414 - # beet import --set myartist='The Cardigans' - # we must first check to see if myartist is defined, that is, given on - # import time, or we raise an NameError exception. - try: - myartist - except NameError: - import re - return re.split(',|\\s+(feat(.?|uring)|&|(Vs|Ft).)', albumartist, 1, flags=re.IGNORECASE)[0] - else: - return myartist - ''; - - first_artist_singleton = - /* - python - */ - '' - try: - myartist - except NameError: - import re - return re.split(',|\\s+(feat(.?|uring)|&|(Vs|Ft).)', artist, 1, flags=re.IGNORECASE)[0] - else: - return myartist - ''; - }; + # Plugin config # scrub = { # auto = true; # }; - mbsubmit = { - picard_path = lib.getExe pkgs.picard; - }; - - badfiles = { - check_on_import = true; - commands = { - flac = "${lib.getExe pkgs.flac} --test --warnings-as-errors --silent"; - mp3 = "${lib.getExe pkgs.mp3val}"; - }; - }; - - 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 deezer id, which is not ideal - # <2024-08-07> - # "scrub" - - # Help submitting stuff to music brainz - "mbsubmit" - - # Calculate replay gain - "replaygain" - - # Check for bad files - "badfiles" - - # Alows to use inline python for parsing tags - "inline" - - # Support player integration - "play" - - # Show tags on files/queries - "info" - - # Create playlist from `play_count`/`skip_count` (gathered by the `mpdstats` - # plugin) - # Note that this should come _before_ the `mpdupdate` plugin, to ensure that - # `mpdupgate` can propagate changed playlist to `mpd`. - "smartplaylist" - - # Warn, when importing a matching item - "ihate" - - # Allow fuzzy searching - "fuzzy" - - # Filter out duplicates - "duplicates" - - # 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 - "hook" - - # Fetch lyrics - "lyrics" - - # Allow beets to understand deezer id's - # "deezer" - - "mpdstats" # Transfer MPD stats to beets - "mpdupdate" # Update MPD database on import - ]; - musicbrainz = { # Search for deezer id's and use them in the autotagger # external_ids = { |