Commit ee71222fe756

Vincent Demeester <vincent@sbr.pm>
2026-04-20 15:02:15
feat(beets): rename playlists to 'Category - Name' format
Renamed all smartplaylists from kebab-case prefixes to human-readable 'Category - Name.m3u' format for better display in Navidrome and Feishin. Added 24 missing podcast playlists covering all folders on aion.
1 parent 3720acc
Changed files (1)
home
common
services
home/common/services/beets.nix
@@ -147,340 +147,438 @@ in
         playlist_dir = "${actualBaseDir}/playlists";
         playlists = [
           # ===========================================
-          # Artist Collections (artist-)
+          # Artist Collections
           # Sorted by year, then album, disc, track (chronological discography)
           # ===========================================
           {
-            name = "artist-brian-eno.m3u";
+            name = "Artist - Brian Eno.m3u";
             query = "artist:'Brian Eno' year+ album+ disc+ track+";
           }
           {
-            name = "artist-joe-hisaishi.m3u";
+            name = "Artist - Joe Hisaishi.m3u";
             query = "artist:久石譲 , artist:'Joe Hisaishi' year+ album+ disc+ track+";
           }
           {
-            name = "artist-pink-floyd.m3u";
+            name = "Artist - Pink Floyd.m3u";
             query = "artist:'Pink Floyd' year+ album+ disc+ track+";
           }
           {
-            name = "artist-queen.m3u";
+            name = "Artist - Queen.m3u";
             query = "artist:Queen year+ album+ disc+ track+";
           }
           {
-            name = "artist-tangerine-dream.m3u";
+            name = "Artist - Tangerine Dream.m3u";
             query = "artist:'Tangerine Dream' year+ album+ disc+ track+";
           }
           {
-            name = "artist-u2.m3u";
+            name = "Artist - U2.m3u";
             query = "artist:U2 year+ album+ disc+ track+";
           }
           {
-            name = "artist-vangelis.m3u";
+            name = "Artist - Vangelis.m3u";
             query = "artist:Vangelis year+ album+ disc+ track+";
           }
           {
-            name = "artist-yoko-kanno.m3u";
+            name = "Artist - Yoko Kanno.m3u";
             query = "artist:菅野よう子 , artist:'Yoko Kanno' year+ album+ disc+ track+";
           }
           # ===========================================
-          # Decades (decade-)
+          # Decades
           # Sorted by year, artist, album, disc, track
           # ===========================================
           {
-            name = "decade-1960s.m3u";
+            name = "Decade - 1960s.m3u";
             query = "year:1960..1969 year+ artist+ album+ disc+ track+";
           }
           {
-            name = "decade-1970s.m3u";
+            name = "Decade - 1970s.m3u";
             query = "year:1970..1979 year+ artist+ album+ disc+ track+";
           }
           {
-            name = "decade-1980s.m3u";
+            name = "Decade - 1980s.m3u";
             query = "year:1980..1989 year+ artist+ album+ disc+ track+";
           }
           {
-            name = "decade-1990s.m3u";
+            name = "Decade - 1990s.m3u";
             query = "year:1990..1999 year+ artist+ album+ disc+ track+";
           }
           {
-            name = "decade-2000s.m3u";
+            name = "Decade - 2000s.m3u";
             query = "year:2000..2009 year+ artist+ album+ disc+ track+";
           }
           {
-            name = "decade-2010s.m3u";
+            name = "Decade - 2010s.m3u";
             query = "year:2010..2019 year+ artist+ album+ disc+ track+";
           }
           {
-            name = "decade-2020s.m3u";
+            name = "Decade - 2020s.m3u";
             query = "year:2020..2029 year+ artist+ album+ disc+ track+";
           }
           # ===========================================
-          # Discovery (discover-)
+          # Discovery
           # Sorted by added date (newest first), then album order
           # ===========================================
           {
-            name = "discover-unplayed.m3u";
+            name = "Discover - Unplayed.m3u";
             query = "play_count:0 added- album+ disc+ track+";
           }
           {
-            name = "discover-rarely-played.m3u";
+            name = "Discover - Rarely Played.m3u";
             query = "play_count:..3 added:..2024-01-01 added- album+ disc+ track+";
           }
           # ===========================================
-          # Genre (genre-)
+          # Genre
           # Sorted by artist, year, album, disc, track
           # ===========================================
           {
-            name = "genre-ambient.m3u";
+            name = "Genre - Ambient.m3u";
             query = "genre:Ambient artist+ year+ album+ disc+ track+";
           }
           {
-            name = "genre-classical.m3u";
+            name = "Genre - Classical.m3u";
             query = "genre:Classical artist+ year+ album+ disc+ track+";
           }
           {
-            name = "genre-electronic.m3u";
+            name = "Genre - Electronic.m3u";
             query = "genre:Electronic artist+ year+ album+ disc+ track+";
           }
           {
-            name = "genre-folk.m3u";
+            name = "Genre - Folk.m3u";
             query = "genre:Folk artist+ year+ album+ disc+ track+";
           }
           {
-            name = "genre-hiphop.m3u";
+            name = "Genre - Hip Hop.m3u";
             query = "genre:'Hip Hop' artist+ year+ album+ disc+ track+";
           }
           {
-            name = "genre-jazz.m3u";
+            name = "Genre - Jazz.m3u";
             query = "genre:Jazz artist+ year+ album+ disc+ track+";
           }
           {
-            name = "genre-metal.m3u";
+            name = "Genre - Metal.m3u";
             query = "genre:Metal artist+ year+ album+ disc+ track+";
           }
           {
-            name = "genre-pop.m3u";
+            name = "Genre - Pop.m3u";
             query = "genre:Pop artist+ year+ album+ disc+ track+";
           }
           {
-            name = "genre-rock.m3u";
+            name = "Genre - Rock.m3u";
             query = "genre:Rock artist+ year+ album+ disc+ track+";
           }
           {
-            name = "genre-trance.m3u";
+            name = "Genre - Trance.m3u";
             query = "genre:Trance artist+ year+ album+ disc+ track+";
           }
           # ===========================================
-          # Language (lang-)
+          # Language
           # Sorted by artist, year, album, disc, track
           # ===========================================
           {
-            name = "lang-asian.m3u";
+            name = "Language - Asian.m3u";
             query = "language:jpn,kor,cmn,zho artist+ year+ album+ disc+ track+";
           }
           {
-            name = "lang-english.m3u";
+            name = "Language - English.m3u";
             query = "language:eng artist+ year+ album+ disc+ track+";
           }
           {
-            name = "lang-european.m3u";
+            name = "Language - European.m3u";
             query = "language:fra,deu,ita,spa artist+ year+ album+ disc+ track+";
           }
           {
-            name = "lang-french.m3u";
+            name = "Language - French.m3u";
             query = "language:fra artist+ year+ album+ disc+ track+";
           }
           {
-            name = "lang-german.m3u";
+            name = "Language - German.m3u";
             query = "language:deu artist+ year+ album+ disc+ track+";
           }
           {
-            name = "lang-instrumental.m3u";
+            name = "Language - Instrumental.m3u";
             query = "language:zxx artist+ year+ album+ disc+ track+";
           }
           {
-            name = "lang-italian.m3u";
+            name = "Language - Italian.m3u";
             query = "language:ita artist+ year+ album+ disc+ track+";
           }
           {
-            name = "lang-japanese.m3u";
+            name = "Language - Japanese.m3u";
             query = "language:jpn artist+ year+ album+ disc+ track+";
           }
           {
-            name = "lang-korean.m3u";
+            name = "Language - Korean.m3u";
             query = "language:kor artist+ year+ album+ disc+ track+";
           }
           {
-            name = "lang-spanish.m3u";
+            name = "Language - Spanish.m3u";
             query = "language:spa artist+ year+ album+ disc+ track+";
           }
           # ===========================================
-          # Mood & Activity (mood-)
+          # Mood & Activity
           # Sorted by artist, album, disc, track
           # ===========================================
           {
-            name = "mood-chill.m3u";
+            name = "Mood - Chill.m3u";
             query = "genre:Ambient,Jazz,Folk bpm:..100 artist+ album+ disc+ track+";
           }
           {
-            name = "mood-christmas.m3u";
+            name = "Mood - Christmas.m3u";
             query = "genre:Christmas,Holiday artist+ album+ disc+ track+";
           }
           {
-            name = "mood-driving.m3u";
+            name = "Mood - Driving.m3u";
             query = "genre:Rock,Electronic,'Indie Rock' bpm:100..130 artist+ album+ disc+ track+";
           }
           {
-            name = "mood-focus.m3u";
+            name = "Mood - Focus.m3u";
             query = "genre:Classical,Ambient,'Post-Rock' bpm:..90 artist+ album+ disc+ track+";
           }
           {
-            name = "mood-party.m3u";
+            name = "Mood - Party.m3u";
             query = "genre:Pop,Dance,Electronic,'Hip Hop' bpm:110..140 year:2015.. artist+ album+ disc+ track+";
           }
           {
-            name = "mood-summer.m3u";
+            name = "Mood - Summer.m3u";
             query = "genre:Reggae,Ska,'Surf Rock' artist+ album+ disc+ track+";
           }
           {
-            name = "mood-workout.m3u";
+            name = "Mood - Workout.m3u";
             query = "genre:Electronic,Rock,'Hip Hop' bpm:120.. artist+ album+ disc+ track+";
           }
           # ===========================================
-          # Soundtrack Series (ost-)
+          # Soundtrack Series
           # Sorted by album, disc, track (proper soundtrack order)
           # ===========================================
           {
-            name = "ost-elder-scrolls.m3u";
+            name = "OST - Elder Scrolls.m3u";
             query = "album:'Elder Scrolls' album+ disc+ track+";
           }
           {
-            name = "ost-escaflowne.m3u";
+            name = "OST - Escaflowne.m3u";
             query = "album:Escaflowne album+ disc+ track+";
           }
           {
-            name = "ost-ghibli.m3u";
+            name = "OST - Ghibli.m3u";
             query = "album:Ghibli , album:Totoro , album:Mononoke , album:Ponyo , album:Howl , album:Laputa , album:Nausicaä album+ disc+ track+";
           }
           {
-            name = "ost-minecraft.m3u";
+            name = "OST - Minecraft.m3u";
             query = "album:Minecraft album+ disc+ track+";
           }
           {
-            name = "ost-samurai-champloo.m3u";
+            name = "OST - Samurai Champloo.m3u";
             query = "album:'Samurai Champloo' album+ disc+ track+";
           }
           {
-            name = "ost-stranger-things.m3u";
+            name = "OST - Stranger Things.m3u";
             query = "album:'Stranger Things' album+ disc+ track+";
           }
           # ===========================================
-          # Recent Additions (recent-)
+          # Recent Additions
           # Sorted by added date (newest first), then album order
           # ===========================================
           {
-            name = "recent-last-week.m3u";
+            name = "Recent - Last Week.m3u";
             query = "added:-1w.. added- album+ disc+ track+";
           }
           {
-            name = "recent-this-year.m3u";
+            name = "Recent - This Year.m3u";
             query = "added:-1y.. added- album+ disc+ track+";
           }
           # ===========================================
-          # Compilation Series (series-)
+          # Compilation Series
           # Sorted by album, disc, track
           # ===========================================
           {
-            name = "series-greatest-hits-millennium.m3u";
+            name = "Series - Greatest Hits Millennium.m3u";
             query = "album:'Greatest Hits of the Millennium' album+ disc+ track+";
           }
           {
-            name = "series-lofi-girl.m3u";
+            name = "Series - Lofi Girl.m3u";
             query = "album:lofi-girl album+ disc+ track+";
           }
           {
-            name = "series-nova-all.m3u";
+            name = "Series - Nova All.m3u";
             query = "album:Nova path:compilation album+ disc+ track+";
           }
           {
-            name = "series-nova-tunes.m3u";
+            name = "Series - Nova Tunes.m3u";
             query = "album:'Nova Tunes' album+ disc+ track+";
           }
           # ===========================================
-          # Album Types (type-)
+          # Album Types
           # Sorted by artist, year, album, disc, track
           # ===========================================
           {
-            name = "type-all-compilations.m3u";
+            name = "Type - All Compilations.m3u";
             query = "path:compilation artist+ year+ album+ disc+ track+";
           }
           {
-            name = "type-all-soundtracks.m3u";
+            name = "Type - All Soundtracks.m3u";
             query = "path:soundtrack artist+ year+ album+ disc+ track+";
           }
           {
-            name = "type-compilations.m3u";
+            name = "Type - Compilations.m3u";
             query = "albumtype:compilation artist+ year+ album+ disc+ track+";
           }
           {
-            name = "type-eps.m3u";
+            name = "Type - EPs.m3u";
             query = "albumtype:ep artist+ year+ album+ disc+ track+";
           }
           {
-            name = "type-live-albums.m3u";
+            name = "Type - Live Albums.m3u";
             query = "albumtype:live artist+ year+ album+ disc+ track+";
           }
           {
-            name = "type-podcasts.m3u";
+            name = "Type - Podcasts.m3u";
             query = "albumtype:podcast artist+ year+ album+ disc+ track+";
           }
           {
-            name = "type-remixes.m3u";
+            name = "Type - Remixes.m3u";
             query = "albumtype:remix artist+ year+ album+ disc+ track+";
           }
           {
-            name = "type-singles.m3u";
+            name = "Type - Singles.m3u";
             query = "albumtype:single artist+ year+ album+ disc+ track+";
           }
           # ===========================================
-          # Music Podcasts (podcast-)
+          # Podcasts (Podcast - Name)
           # Sorted by title (episode name/date)
           # ===========================================
+          # Music / DJ shows
           {
-            name = "podcast-deep-search.m3u";
-            query = "path::podcasts/\\[DEEP\\]Search title+";
-          }
-          {
-            name = "podcast-bon-entendeur.m3u";
+            name = "Podcast - Bon Entendeur.m3u";
             query = "path::podcasts/Bon Entendeur title+";
           }
           {
-            name = "podcast-wym-radio.m3u";
-            query = "path::podcasts/Cosmic Gate title+";
+            name = "Podcast - Deep Search.m3u";
+            query = "path::podcasts/\\[DEEP\\]Search title+";
           }
           {
-            name = "podcast-fip-tape.m3u";
+            name = "Podcast - Fip Tape.m3u";
             query = "path::podcasts/Fip Tape title+";
           }
           {
-            name = "podcast-global-dj-broadcast.m3u";
+            name = "Podcast - Florileges.m3u";
+            query = "path::podcasts/Florileges title+";
+          }
+          {
+            name = "Podcast - French Touch.m3u";
+            query = "path::podcasts/French Touch title+";
+          }
+          {
+            name = "Podcast - Global DJ Broadcast.m3u";
             query = "path::podcasts/Markus Schulz title+";
           }
           {
-            name = "podcast-vonyc-sessions.m3u";
-            query = "path::podcasts/Paul van Dyk title+";
+            name = "Podcast - La Ballade.m3u";
+            query = "path::podcasts/La ballade title+";
           }
           {
-            name = "podcast-perfecto.m3u";
+            name = "Podcast - La Ballade Souchon Voulzy.m3u";
+            query = "path::podcasts/La ballade de Souchon title+";
+          }
+          {
+            name = "Podcast - La Radio De.m3u";
+            query = "path::podcasts/La radio de title+";
+          }
+          {
+            name = "Podcast - Les Feuilletons Musicaux.m3u";
+            query = "path::podcasts/Les Feuilletons Musicaux title+";
+          }
+          {
+            name = "Podcast - Les Sagas Musicales.m3u";
+            query = "path::podcasts/Les Sagas musicales title+";
+          }
+          {
+            name = "Podcast - Perfecto.m3u";
             query = "path::podcasts/Perfecto title+";
           }
           {
-            name = "podcast-resonation-radio.m3u";
+            name = "Podcast - Pogo Chill.m3u";
+            query = "path::podcasts/P\\(\\)G\\(\\) title+";
+          }
+          {
+            name = "Podcast - Resonation Radio.m3u";
             query = "path::podcasts/Resonation title+";
           }
           {
-            name = "podcast-pogo-chill.m3u";
-            query = "path::podcasts/P\\(\\)G\\(\\) title+";
+            name = "Podcast - Vonyc Sessions.m3u";
+            query = "path::podcasts/Paul van Dyk title+";
+          }
+          {
+            name = "Podcast - WYM Radio.m3u";
+            query = "path::podcasts/Cosmic Gate title+";
+          }
+          # Talk / Culture / Tech
+          {
+            name = "Podcast - Chaleur Humaine.m3u";
+            query = "path::podcasts/Chaleur Humaine title+";
+          }
+          {
+            name = "Podcast - Command Line Heroes.m3u";
+            query = "path::podcasts/Command Line Heroes title+";
+          }
+          {
+            name = "Podcast - Continue Tu M'interesses.m3u";
+            query = "path::podcasts/Continue title+";
+          }
+          {
+            name = "Podcast - Darknet Diaries.m3u";
+            query = "path::podcasts/Darknet Diaries title+";
+          }
+          {
+            name = "Podcast - Developer Voices.m3u";
+            query = "path::podcasts/Developer Voices title+";
+          }
+          {
+            name = "Podcast - Entendez-Vous L'Eco.m3u";
+            query = "path::podcasts/Entendez-vous title+";
+          }
+          {
+            name = "Podcast - Entre La Chaise Et Le Clavier.m3u";
+            query = "path::podcasts/Entre la chaise title+";
+          }
+          {
+            name = "Podcast - Fifty States.m3u";
+            query = "path::podcasts/Fifty States title+";
+          }
+          {
+            name = "Podcast - Grandes Traversees.m3u";
+            query = "path::podcasts/GRANDES TRAVERSEES title+";
+          }
+          {
+            name = "Podcast - IRL.m3u";
+            query = "path::podcasts/IRL title+";
+          }
+          {
+            name = "Podcast - La Terre Au Carre.m3u";
+            query = "path::podcasts/La Terre au title+";
+          }
+          {
+            name = "Podcast - Le Fil Mental.m3u";
+            query = "path::podcasts/Le Fil Mental title+";
+          }
+          {
+            name = "Podcast - Les Grands Remplacants.m3u";
+            query = "path::podcasts/Les grands title+";
+          }
+          {
+            name = "Podcast - Nota Bene.m3u";
+            query = "path::podcasts/Nota Bene title+";
+          }
+          {
+            name = "Podcast - Personnage Principal.m3u";
+            query = "path::podcasts/Personnage principal title+";
+          }
+          {
+            name = "Podcast - Sismique.m3u";
+            query = "path::podcasts/Sismique title+";
+          }
+          {
+            name = "Podcast - Strangers On A Bench.m3u";
+            query = "path::podcasts/Strangers on a Bench title+";
           }
         ];
       };