about summary refs log tree commit diff stats
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/home/conf/beets/default.nix44
1 files changed, 42 insertions, 2 deletions
diff --git a/modules/home/conf/beets/default.nix b/modules/home/conf/beets/default.nix
index de15a857..cafc5ccb 100644
--- a/modules/home/conf/beets/default.nix
+++ b/modules/home/conf/beets/default.nix
@@ -34,8 +34,8 @@
       };
 
       paths = {
-        default = "$genre/$albumartist/$album/$track $title";
-        singleton = "$genre/$artist/$title";
+        default = "$genre/$first_artist/$album/$track $title";
+        singleton = "$genre/$first_artist_singleton/$title";
         comp = "$genre/$album/$track $title";
         "albumtype:soundtrack" = "Soundtracks/$genre/$album/$track $title";
       };
@@ -113,6 +113,43 @@
           }
         ];
       };
+      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
+          '';
+      };
       # scrub = {
       #   auto = true;
       # };
@@ -127,6 +164,9 @@
         # Calculate replay gain
         "replaygain"
 
+        # Alows to use inline python for parsing tags
+        "inline"
+
         # Show tags on files/queries
         "info"