aboutsummaryrefslogtreecommitdiffstats
path: root/modules/home.legacy/conf/beets/plugins
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-10-18 17:07:46 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-10-18 17:07:46 +0200
commitc52c7f314ccadcc2fcd91e28c8fd1b88f6d5ce0c (patch)
treee8b947710b467b32740598ff574982097836f66c /modules/home.legacy/conf/beets/plugins
parentchore(pkgs/yt): 1.2.1 -> 1.3.0 (diff)
downloadnixos-config-c52c7f314ccadcc2fcd91e28c8fd1b88f6d5ce0c.zip
refactor(modules): Move all system modules to `by-name`
From now on all modules should be added to the new `by-name` directory. This should help remove the (superficial and utterly useless) distinction between `home-manager` and `NixOS` modules.
Diffstat (limited to 'modules/home.legacy/conf/beets/plugins')
-rw-r--r--modules/home.legacy/conf/beets/plugins/badfiles/default.nix13
-rw-r--r--modules/home.legacy/conf/beets/plugins/default.nix16
-rw-r--r--modules/home.legacy/conf/beets/plugins/duplicates/default.nix5
-rw-r--r--modules/home.legacy/conf/beets/plugins/fuzzy/default.nix6
-rw-r--r--modules/home.legacy/conf/beets/plugins/ihate/default.nix8
-rw-r--r--modules/home.legacy/conf/beets/plugins/inline/default.nix42
-rw-r--r--modules/home.legacy/conf/beets/plugins/lastgenre/default.nix7
-rw-r--r--modules/home.legacy/conf/beets/plugins/lyrics/default.nix6
-rw-r--r--modules/home.legacy/conf/beets/plugins/mbsubmit/default.nix9
-rw-r--r--modules/home.legacy/conf/beets/plugins/play/default.nix14
-rw-r--r--modules/home.legacy/conf/beets/plugins/replaygain/default.nix24
-rw-r--r--modules/home.legacy/conf/beets/plugins/smartplaylist/default.nix33
-rw-r--r--modules/home.legacy/conf/beets/plugins/xtractor/default.nix95
13 files changed, 278 insertions, 0 deletions
diff --git a/modules/home.legacy/conf/beets/plugins/badfiles/default.nix b/modules/home.legacy/conf/beets/plugins/badfiles/default.nix
new file mode 100644
index 00000000..33884785
--- /dev/null
+++ b/modules/home.legacy/conf/beets/plugins/badfiles/default.nix
@@ -0,0 +1,13 @@
+{
+ lib,
+ pkgs,
+ ...
+}: {
+ programs.beets.settings.badfiles = {
+ check_on_import = true;
+ commands = {
+ flac = "${lib.getExe' pkgs.flac "flac"} --test --warnings-as-errors --silent";
+ mp3 = "${lib.getExe pkgs.mp3val}";
+ };
+ };
+}
diff --git a/modules/home.legacy/conf/beets/plugins/default.nix b/modules/home.legacy/conf/beets/plugins/default.nix
new file mode 100644
index 00000000..3bea5ea8
--- /dev/null
+++ b/modules/home.legacy/conf/beets/plugins/default.nix
@@ -0,0 +1,16 @@
+{...}: {
+ imports = [
+ ./badfiles
+ ./duplicates
+ ./fuzzy
+ ./ihate
+ ./inline
+ ./lastgenre
+ ./lyrics
+ ./mbsubmit
+ ./play
+ ./replaygain
+ ./smartplaylist
+ ./xtractor
+ ];
+}
diff --git a/modules/home.legacy/conf/beets/plugins/duplicates/default.nix b/modules/home.legacy/conf/beets/plugins/duplicates/default.nix
new file mode 100644
index 00000000..c8a6c108
--- /dev/null
+++ b/modules/home.legacy/conf/beets/plugins/duplicates/default.nix
@@ -0,0 +1,5 @@
+{...}: {
+ programs.beets.settings.duplicates = {
+ keys = ["acoustid_fingerprint"];
+ };
+}
diff --git a/modules/home.legacy/conf/beets/plugins/fuzzy/default.nix b/modules/home.legacy/conf/beets/plugins/fuzzy/default.nix
new file mode 100644
index 00000000..b86b3a20
--- /dev/null
+++ b/modules/home.legacy/conf/beets/plugins/fuzzy/default.nix
@@ -0,0 +1,6 @@
+{...}: {
+ programs.beets.settings.fuzzy = {
+ # The prefix denoting that a search should be run in fuzzy mode
+ prefix = ".";
+ };
+}
diff --git a/modules/home.legacy/conf/beets/plugins/ihate/default.nix b/modules/home.legacy/conf/beets/plugins/ihate/default.nix
new file mode 100644
index 00000000..145f5f8b
--- /dev/null
+++ b/modules/home.legacy/conf/beets/plugins/ihate/default.nix
@@ -0,0 +1,8 @@
+{...}: {
+ programs.beets.settings.ihate = {
+ warn = [
+ "title:commentary"
+ "albumtype:live"
+ ];
+ };
+}
diff --git a/modules/home.legacy/conf/beets/plugins/inline/default.nix b/modules/home.legacy/conf/beets/plugins/inline/default.nix
new file mode 100644
index 00000000..0dda8cfc
--- /dev/null
+++ b/modules/home.legacy/conf/beets/plugins/inline/default.nix
@@ -0,0 +1,42 @@
+{...}: {
+ programs.beets.settings = {
+ 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
+ '';
+ };
+ album_fields = {};
+ };
+}
diff --git a/modules/home.legacy/conf/beets/plugins/lastgenre/default.nix b/modules/home.legacy/conf/beets/plugins/lastgenre/default.nix
new file mode 100644
index 00000000..d10ca49f
--- /dev/null
+++ b/modules/home.legacy/conf/beets/plugins/lastgenre/default.nix
@@ -0,0 +1,7 @@
+{...}: {
+ programs.beets.settings.lastgenre = {
+ prefer_specific = false;
+ # Lookup the track, not the album
+ source = "track";
+ };
+}
diff --git a/modules/home.legacy/conf/beets/plugins/lyrics/default.nix b/modules/home.legacy/conf/beets/plugins/lyrics/default.nix
new file mode 100644
index 00000000..80544aea
--- /dev/null
+++ b/modules/home.legacy/conf/beets/plugins/lyrics/default.nix
@@ -0,0 +1,6 @@
+{...}: {
+ programs.beets.settings.lyrics = {
+ # Always fetch lyrics (and update them, if some were found)
+ force = true;
+ };
+}
diff --git a/modules/home.legacy/conf/beets/plugins/mbsubmit/default.nix b/modules/home.legacy/conf/beets/plugins/mbsubmit/default.nix
new file mode 100644
index 00000000..b70f1c63
--- /dev/null
+++ b/modules/home.legacy/conf/beets/plugins/mbsubmit/default.nix
@@ -0,0 +1,9 @@
+{
+ lib,
+ pkgs,
+ ...
+}: {
+ programs.beets.settings.mbsubmit = {
+ picard_path = lib.getExe pkgs.picard;
+ };
+}
diff --git a/modules/home.legacy/conf/beets/plugins/play/default.nix b/modules/home.legacy/conf/beets/plugins/play/default.nix
new file mode 100644
index 00000000..f5bc3c9b
--- /dev/null
+++ b/modules/home.legacy/conf/beets/plugins/play/default.nix
@@ -0,0 +1,14 @@
+{
+ lib,
+ pkgs,
+ config,
+ ...
+}: {
+ programs.beets.settings.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;
+ };
+}
diff --git a/modules/home.legacy/conf/beets/plugins/replaygain/default.nix b/modules/home.legacy/conf/beets/plugins/replaygain/default.nix
new file mode 100644
index 00000000..611f3799
--- /dev/null
+++ b/modules/home.legacy/conf/beets/plugins/replaygain/default.nix
@@ -0,0 +1,24 @@
+{...}: {
+ programs.beets.settings = {
+ replaygain = {
+ auto = true;
+ backend = "ffmpeg";
+
+ r128_targetlevel = 89;
+
+ # Re-calculate the replay gain value even for files, that already have one set.
+ overwrite = 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!";
+ }
+ ];
+ };
+ };
+}
diff --git a/modules/home.legacy/conf/beets/plugins/smartplaylist/default.nix b/modules/home.legacy/conf/beets/plugins/smartplaylist/default.nix
new file mode 100644
index 00000000..b55c487c
--- /dev/null
+++ b/modules/home.legacy/conf/beets/plugins/smartplaylist/default.nix
@@ -0,0 +1,33 @@
+{config, ...}: {
+ programs.beets.settings.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:";
+ }
+ ];
+ };
+}
diff --git a/modules/home.legacy/conf/beets/plugins/xtractor/default.nix b/modules/home.legacy/conf/beets/plugins/xtractor/default.nix
new file mode 100644
index 00000000..d4582c5f
--- /dev/null
+++ b/modules/home.legacy/conf/beets/plugins/xtractor/default.nix
@@ -0,0 +1,95 @@
+{
+ lib,
+ pkgs,
+ config,
+ ...
+}: {
+ programs.beets.settings = {
+ xtractor = {
+ # This option is not yet implemented, thus requiring the hook
+ auto = true;
+
+ dry-run = false;
+ # Writes the bpm key to the media files
+ write = true;
+ threads = 0;
+ # Also run for files, which already have the required keys
+ force = true;
+ quiet = false;
+ keep_output = true;
+ keep_profiles = true;
+ output_path = "${config.xdg.dataHome}/beets/xtactor";
+ essentia_extractor = "${lib.getExe pkgs.essentia-extractor}";
+ extractor_profile = {
+ highlevel = {
+ svm_models = let
+ m = pkgs.beetsExtraPlugins.xtractor.models;
+ in [
+ "${m}/danceability.history"
+ "${m}/danceability.history.param"
+ "${m}/danceability.history.results.html"
+ "${m}/gender.history"
+ "${m}/gender.history.param"
+ "${m}/gender.history.results.html"
+ "${m}/genre_dortmund.history"
+ "${m}/genre_dortmund.history.param"
+ "${m}/genre_dortmund.history.results.html"
+ "${m}/genre_electronic.history"
+ "${m}/genre_electronic.history.param"
+ "${m}/genre_electronic.history.results.html"
+ "${m}/genre_rosamerica.history"
+ "${m}/genre_rosamerica.history.param"
+ "${m}/genre_rosamerica.history.results.html"
+ "${m}/genre_tzanetakis.history"
+ "${m}/genre_tzanetakis.history.param"
+ "${m}/genre_tzanetakis.history.results.html"
+ "${m}/ismir04_rhythm.history"
+ "${m}/ismir04_rhythm.history.param"
+ "${m}/ismir04_rhythm.history.results.html"
+ "${m}/mood_acoustic.history"
+ "${m}/mood_acoustic.history.param"
+ "${m}/mood_acoustic.history.results.html"
+ "${m}/mood_aggressive.history"
+ "${m}/mood_aggressive.history.param"
+ "${m}/mood_aggressive.history.results.html"
+ "${m}/mood_electronic.history"
+ "${m}/mood_electronic.history.param"
+ "${m}/mood_electronic.history.results.html"
+ "${m}/mood_happy.history"
+ "${m}/mood_happy.history.param"
+ "${m}/mood_happy.history.results.html"
+ "${m}/mood_party.history"
+ "${m}/mood_party.history.param"
+ "${m}/mood_party.history.results.html"
+ "${m}/mood_relaxed.history"
+ "${m}/mood_relaxed.history.param"
+ "${m}/mood_relaxed.history.results.html"
+ "${m}/mood_sad.history"
+ "${m}/mood_sad.history.param"
+ "${m}/mood_sad.history.results.html"
+ "${m}/moods_mirex.history"
+ "${m}/moods_mirex.history.param"
+ "${m}/moods_mirex.history.results.html"
+ "${m}/timbre.history"
+ "${m}/timbre.history.param"
+ "${m}/timbre.history.results.html"
+ "${m}/tonal_atonal.history"
+ "${m}/tonal_atonal.history.param"
+ "${m}/tonal_atonal.history.results.html"
+ "${m}/voice_instrumental.history"
+ "${m}/voice_instrumental.history.param"
+ "${m}/voice_instrumental.history.results.html"
+ ];
+ };
+ };
+ };
+ hook = {
+ hooks = [
+ {
+ event = "import";
+ command = "echo Remember to run 'beet xtractor'!";
+ }
+ ];
+ };
+ };
+}