about summary refs log tree commit diff stats
path: root/modules/home/conf/beets/default.nix
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-08-10 23:31:27 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-08-10 23:31:27 +0200
commitf678531285bbabf73e0daa3952697cb877822986 (patch)
treeaf2d6fcdbe212aa79a830750a8939a3e8b26a266 /modules/home/conf/beets/default.nix
parentfeat(home/beets): Add further smartplaylists (integrating with `mpdstats`) (diff)
downloadnixos-config-f678531285bbabf73e0daa3952697cb877822986.tar.gz
nixos-config-f678531285bbabf73e0daa3952697cb877822986.zip
feat(home/beets): Place songs under the main artist directory
Diffstat (limited to '')
-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"