about summary refs log tree commit diff stats
path: root/pkgs/by-name/so
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-05-23 13:26:22 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-05-23 13:26:22 +0200
commit204731c0a69136c9cebcb54f1afecf5145e26bbe (patch)
treefc9132e5dc74e4a8e1327cdd411839a90f9410aa /pkgs/by-name/so
parentrefactor(sys): Modularize and move to `modules/system` or `pkgs` (diff)
downloadnixos-config-204731c0a69136c9cebcb54f1afecf5145e26bbe.tar.gz
nixos-config-204731c0a69136c9cebcb54f1afecf5145e26bbe.zip
refactor(pkgs): Categorize into `by-name` shards
This might not be the perfect way to organize a package set --
especially if the set is not nearly the size of nixpkgs -- but it is
_at_ least a way of organization.
Diffstat (limited to 'pkgs/by-name/so')
-rw-r--r--pkgs/by-name/so/sort_song/package.nix17
-rwxr-xr-xpkgs/by-name/so/sort_song/sort_song.sh34
2 files changed, 51 insertions, 0 deletions
diff --git a/pkgs/by-name/so/sort_song/package.nix b/pkgs/by-name/so/sort_song/package.nix
new file mode 100644
index 00000000..f74ba57f
--- /dev/null
+++ b/pkgs/by-name/so/sort_song/package.nix
@@ -0,0 +1,17 @@
+{
+  sysLib,
+  mediainfo,
+  jq,
+  gawk,
+}:
+sysLib.writeShellScript {
+  name = "sort_song";
+  src = ./sort_song.sh;
+  generateCompletions = false;
+  keepPath = false;
+  dependencies = [
+    mediainfo
+    jq
+    gawk
+  ];
+}
diff --git a/pkgs/by-name/so/sort_song/sort_song.sh b/pkgs/by-name/so/sort_song/sort_song.sh
new file mode 100755
index 00000000..e2978507
--- /dev/null
+++ b/pkgs/by-name/so/sort_song/sort_song.sh
@@ -0,0 +1,34 @@
+#!/usr/bin/env dash
+
+# shellcheck source=/dev/null
+SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
+
+case "$("$1" | tr '[:upper:]' '[:lower:]')" in
+"lyrics")
+    filter="LYRICS"
+    directory="lyrics"
+    ;;
+"instrumental")
+    filter="INSTRUMENTAL"
+    directory="instrumental"
+    ;;
+*)
+    die "Expected 'instrumental|lyrics' but got '$1'"
+    ;;
+esac
+
+process() {
+    mediainfo --Output=JSON "$1" | jq '.media.track | map(.Lyrics) | join("")'
+}
+
+mkdir "../$directory"
+
+fd . --extension=opus | while read -r file; do
+    if [ "$(process "$file")" = '""' ] || [ "$(process "$file")" = '"Instrumental"' ] || [ "$(process "$file")" = '"instrumental"' ]; then
+        echo "INSTRUMENTAL::$file"
+    else
+        echo "LYRICS::$file"
+    fi
+done | grep "$filter" | awk 'BEGIN {FS="::"}{print $2}' | while read -r file; do ln -s "../all/$file" "../$directory/$file"; done
+
+# vim: ft=sh