Commit 95553f1a20fd

Vincent Demeester <vincent@sbr.pm>
2026-01-29 09:42:20
feat(beets): reorganize smartplaylists with category prefixes
Add prefix-based organization for Navidrome compatibility: - artist-: Brian Eno, Joe Hisaishi, Queen, Tangerine Dream, U2, Vangelis, Yoko Kanno - decade-: 1960s through 2020s - discover-: unplayed, rarely-played - genre-: ambient, classical, electronic, folk, hip-hop, jazz, metal, pop, rock, trance - lang-: asian, english, european, french, german, instrumental, italian, japanese, korean, spanish - mood-: chill, christmas, driving, focus, party, summer, workout - ost-: elder-scrolls, escaflowne, ghibli, minecraft, samurai-champloo, stranger-things - recent-: last-week, this-year - series-: greatest-hits-millennium, lofi-girl, nova-all, nova-tunes - type-: all-compilations, all-soundtracks, compilations, eps, live-albums, podcasts, remixes, singles Remove unused ratings and length-based playlists. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent fb8f7c8
Changed files (1)
home
common
services
home/common/services/beets.nix
@@ -166,225 +166,287 @@ in
         relative_to = "${actualBaseDir}/playlists";
         playlist_dir = "${actualBaseDir}/playlists";
         playlists = [
+          # ===========================================
+          # Artist Collections (artist-)
+          # ===========================================
           {
-            name = "podcasts.m3u";
-            query = "albumtype:podcast";
-          }
-          # Language-based playlists
-          {
-            name = "english.m3u";
-            query = "language:eng";
+            name = "artist-brian-eno.m3u";
+            query = "artist:'Brian Eno'";
           }
           {
-            name = "french.m3u";
-            query = "language:fra";
+            name = "artist-joe-hisaishi.m3u";
+            query = "artist:久石譲 , artist:'Joe Hisaishi'";
           }
           {
-            name = "japanese.m3u";
-            query = "language:jpn";
+            name = "artist-queen.m3u";
+            query = "artist:Queen";
           }
           {
-            name = "korean.m3u";
-            query = "language:kor";
+            name = "artist-tangerine-dream.m3u";
+            query = "artist:'Tangerine Dream'";
           }
           {
-            name = "spanish.m3u";
-            query = "language:spa";
+            name = "artist-u2.m3u";
+            query = "artist:U2";
           }
           {
-            name = "german.m3u";
-            query = "language:deu";
+            name = "artist-vangelis.m3u";
+            query = "artist:Vangelis";
           }
           {
-            name = "italian.m3u";
-            query = "language:ita";
+            name = "artist-yoko-kanno.m3u";
+            query = "artist:菅野よう子 , artist:'Yoko Kanno'";
           }
+          # ===========================================
+          # Decades (decade-)
+          # ===========================================
           {
-            name = "instrumental.m3u";
-            query = "language:zxx";
-          }
-          # Genre-based playlists
-          {
-            name = "rock.m3u";
-            query = "genre:Rock";
-          }
-          {
-            name = "electronic.m3u";
-            query = "genre:Electronic";
-          }
-          {
-            name = "trance.m3u";
-            query = "genre:Trance";
-          }
-          {
-            name = "jazz.m3u";
-            query = "genre:Jazz";
-          }
-          {
-            name = "classical.m3u";
-            query = "genre:Classical";
-          }
-          {
-            name = "hiphop.m3u";
-            query = "genre:'Hip Hop'";
-          }
-          {
-            name = "metal.m3u";
-            query = "genre:Metal";
-          }
-          {
-            name = "pop.m3u";
-            query = "genre:Pop";
-          }
-          {
-            name = "ambient.m3u";
-            query = "genre:Ambient";
-          }
-          {
-            name = "folk.m3u";
-            query = "genre:Folk";
-          }
-          # Time-based playlists - Decades
-          {
-            name = "1960s.m3u";
+            name = "decade-1960s.m3u";
             query = "year:1960..1969";
           }
           {
-            name = "1970s.m3u";
+            name = "decade-1970s.m3u";
             query = "year:1970..1979";
           }
           {
-            name = "1980s.m3u";
+            name = "decade-1980s.m3u";
             query = "year:1980..1989";
           }
           {
-            name = "1990s.m3u";
+            name = "decade-1990s.m3u";
             query = "year:1990..1999";
           }
           {
-            name = "2000s.m3u";
+            name = "decade-2000s.m3u";
             query = "year:2000..2009";
           }
           {
-            name = "2010s.m3u";
+            name = "decade-2010s.m3u";
             query = "year:2010..2019";
           }
           {
-            name = "2020s.m3u";
+            name = "decade-2020s.m3u";
             query = "year:2020..2029";
           }
-          # Time-based - Recent additions
+          # ===========================================
+          # Discovery (discover-)
+          # ===========================================
           {
-            name = "last-week.m3u";
-            query = "added:-1w..";
-          }
-          {
-            name = "this-year.m3u";
-            query = "added:-1y..";
-          }
-          # Discovery & Rediscovery
-          {
-            name = "unplayed.m3u";
+            name = "discover-unplayed.m3u";
             query = "play_count:0";
           }
           {
-            name = "rarely-played.m3u";
+            name = "discover-rarely-played.m3u";
             query = "play_count:..3 added:..2024-01-01";
           }
-          # Album types
+          # ===========================================
+          # Genre (genre-)
+          # ===========================================
           {
-            name = "compilations.m3u";
-            query = "albumtype:compilation";
+            name = "genre-ambient.m3u";
+            query = "genre:Ambient";
           }
           {
-            name = "live-albums.m3u";
-            query = "albumtype:live";
+            name = "genre-classical.m3u";
+            query = "genre:Classical";
           }
           {
-            name = "eps.m3u";
-            query = "albumtype:ep";
+            name = "genre-electronic.m3u";
+            query = "genre:Electronic";
           }
           {
-            name = "singles.m3u";
-            query = "albumtype:single";
+            name = "genre-folk.m3u";
+            query = "genre:Folk";
           }
           {
-            name = "remixes.m3u";
-            query = "albumtype:remix";
+            name = "genre-hiphop.m3u";
+            query = "genre:'Hip Hop'";
           }
-          # Multi-language cultural groups
           {
-            name = "asian.m3u";
+            name = "genre-jazz.m3u";
+            query = "genre:Jazz";
+          }
+          {
+            name = "genre-metal.m3u";
+            query = "genre:Metal";
+          }
+          {
+            name = "genre-pop.m3u";
+            query = "genre:Pop";
+          }
+          {
+            name = "genre-rock.m3u";
+            query = "genre:Rock";
+          }
+          {
+            name = "genre-trance.m3u";
+            query = "genre:Trance";
+          }
+          # ===========================================
+          # Language (lang-)
+          # ===========================================
+          {
+            name = "lang-asian.m3u";
             query = "language:jpn,kor,cmn,zho";
           }
           {
-            name = "european.m3u";
+            name = "lang-english.m3u";
+            query = "language:eng";
+          }
+          {
+            name = "lang-european.m3u";
             query = "language:fra,deu,ita,spa";
           }
-          # Energy & Mood
           {
-            name = "workout.m3u";
-            query = "genre:Electronic,Rock,'Hip Hop' bpm:120..";
+            name = "lang-french.m3u";
+            query = "language:fra";
           }
           {
-            name = "chill.m3u";
+            name = "lang-german.m3u";
+            query = "language:deu";
+          }
+          {
+            name = "lang-instrumental.m3u";
+            query = "language:zxx";
+          }
+          {
+            name = "lang-italian.m3u";
+            query = "language:ita";
+          }
+          {
+            name = "lang-japanese.m3u";
+            query = "language:jpn";
+          }
+          {
+            name = "lang-korean.m3u";
+            query = "language:kor";
+          }
+          {
+            name = "lang-spanish.m3u";
+            query = "language:spa";
+          }
+          # ===========================================
+          # Mood & Activity (mood-)
+          # ===========================================
+          {
+            name = "mood-chill.m3u";
             query = "genre:Ambient,Jazz,Folk bpm:..100";
           }
-          # Length-based playlists
           {
-            name = "short-tracks.m3u";
-            query = "length:..3:00";
-          }
-          {
-            name = "interludes.m3u";
-            query = "length:..1:30";
-          }
-          {
-            name = "long-tracks.m3u";
-            query = "length:6:00..";
-          }
-          {
-            name = "epics.m3u";
-            query = "length:10:00..";
-          }
-          {
-            name = "standard-length.m3u";
-            query = "length:3:00..5:00";
-          }
-          # Seasonal & Special Occasions
-          {
-            name = "christmas.m3u";
+            name = "mood-christmas.m3u";
             query = "genre:Christmas,Holiday";
           }
           {
-            name = "summer.m3u";
-            query = "genre:Reggae,Ska,'Surf Rock'";
+            name = "mood-driving.m3u";
+            query = "genre:Rock,Electronic,'Indie Rock' bpm:100..130";
           }
-          # Specific use cases
           {
-            name = "focus.m3u";
+            name = "mood-focus.m3u";
             query = "genre:Classical,Ambient,'Post-Rock' bpm:..90";
           }
           {
-            name = "party.m3u";
+            name = "mood-party.m3u";
             query = "genre:Pop,Dance,Electronic,'Hip Hop' bpm:110..140 year:2015..";
           }
           {
-            name = "driving.m3u";
-            query = "genre:Rock,Electronic,'Indie Rock' bpm:100..130";
-          }
-          # Favorites & Ratings
-          {
-            name = "5-stars.m3u";
-            query = "rating:5";
+            name = "mood-summer.m3u";
+            query = "genre:Reggae,Ska,'Surf Rock'";
           }
           {
-            name = "favorites.m3u";
-            query = "rating:4..";
+            name = "mood-workout.m3u";
+            query = "genre:Electronic,Rock,'Hip Hop' bpm:120..";
+          }
+          # ===========================================
+          # Soundtrack Series (ost-)
+          # ===========================================
+          {
+            name = "ost-elder-scrolls.m3u";
+            query = "album:'Elder Scrolls'";
           }
           {
-            name = "hidden-gems.m3u";
-            query = "rating:4.. play_count:..5";
+            name = "ost-escaflowne.m3u";
+            query = "album:Escaflowne";
+          }
+          {
+            name = "ost-ghibli.m3u";
+            query = "album:Ghibli , album:Totoro , album:Mononoke , album:Ponyo , album:Howl , album:Laputa , album:Nausicaä";
+          }
+          {
+            name = "ost-minecraft.m3u";
+            query = "album:Minecraft";
+          }
+          {
+            name = "ost-samurai-champloo.m3u";
+            query = "album:'Samurai Champloo'";
+          }
+          {
+            name = "ost-stranger-things.m3u";
+            query = "album:'Stranger Things'";
+          }
+          # ===========================================
+          # Recent Additions (recent-)
+          # ===========================================
+          {
+            name = "recent-last-week.m3u";
+            query = "added:-1w..";
+          }
+          {
+            name = "recent-this-year.m3u";
+            query = "added:-1y..";
+          }
+          # ===========================================
+          # Compilation Series (series-)
+          # ===========================================
+          {
+            name = "series-greatest-hits-millennium.m3u";
+            query = "album:'Greatest Hits of the Millennium'";
+          }
+          {
+            name = "series-lofi-girl.m3u";
+            query = "album:lofi-girl";
+          }
+          {
+            name = "series-nova-all.m3u";
+            query = "album:Nova path:compilation";
+          }
+          {
+            name = "series-nova-tunes.m3u";
+            query = "album:'Nova Tunes'";
+          }
+          # ===========================================
+          # Album Types (type-)
+          # ===========================================
+          {
+            name = "type-all-compilations.m3u";
+            query = "path:compilation";
+          }
+          {
+            name = "type-all-soundtracks.m3u";
+            query = "path:soundtrack";
+          }
+          {
+            name = "type-compilations.m3u";
+            query = "albumtype:compilation";
+          }
+          {
+            name = "type-eps.m3u";
+            query = "albumtype:ep";
+          }
+          {
+            name = "type-live-albums.m3u";
+            query = "albumtype:live";
+          }
+          {
+            name = "type-podcasts.m3u";
+            query = "albumtype:podcast";
+          }
+          {
+            name = "type-remixes.m3u";
+            query = "albumtype:remix";
+          }
+          {
+            name = "type-singles.m3u";
+            query = "albumtype:single";
           }
         ];
       };