about summary refs log tree commit diff stats
path: root/modules/home/conf/beets/default.nix
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--modules/home/conf/beets/default.nix205
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 = {