lots o fixes, beets, shellcheck stuff
[distro-setup] / beet-data
diff --git a/beet-data b/beet-data
new file mode 100644 (file)
index 0000000..5d1799e
--- /dev/null
+++ b/beet-data
@@ -0,0 +1,193 @@
+#!/bin/bash
+
+nav_tags=(
+  ## cross-genre tags that dont really make a playlist
+  expl
+  # songs i like but they get old fast due to feeling gimicky, or cringy after a while.
+  gimicky
+  # anything sad which i sometimes like or avoid.
+  sad
+
+  ## playlists
+  # intimate, love
+  love
+  # favorite songs pump up songs
+  pump1
+  # favorite rap pump up songs, allows more songs than pump1
+  pumprap
+  # heart rending, spine tickling
+  rend
+  # for running
+  run
+)
+
+pl_tags=(
+  "${nav_tags[@]}"
+  # alternate version of a song we already have which isn't as good
+  lesser_version
+)
+
+nav_convert_query="^genre:spoken-w ^genre:skit ^lesser_version:t rating:3..5"
+
+
+common_genres=(
+  ambient
+  # gangsta rap / angry rap. something like g-rap would make beet queries for genre:rap include it
+  arp
+  avant
+  blues
+  # slow instrumental. todo: reclassify some ambient into this.
+  chill
+  classical
+  country
+  # lyrical edm. todo: some pop needs reclassification to this
+  dance
+  # like power glove
+  darkwave
+  hardcore
+  instrumental
+  latin
+  metal
+  # mq = mac quale. similar to the mr robot soundtracks.
+  # slow, foreboding. usually electronic.
+  mq
+  pop
+  rap
+  rock
+  # like rain by brian crain. mostly slow airy/broody piano
+  sleep
+  techno
+  world
+)
+
+# because we were destined to run out of single key buttons.
+rare_genres=(
+  jazz
+  musical
+  noise
+  skit
+  spoken-w
+)
+
+all_genres=(${common_genres[@]} ${rare_genres[@]})
+
+
+
+#### playlist things  #####
+
+
+declare -A ignore_genres_a
+ignore_genres=(
+  skit
+  spoken-w
+)
+
+declare -A slow_genres_a
+slow_genres=(
+  ambient
+  avant
+  classical
+  noise
+  sleep
+  mq
+  jazz
+)
+
+
+tags=(
+  expl
+  sad
+)
+
+
+for g in ${ignore_genres[@]}; do
+  ignore_genres_a[$g]=t
+done
+for g in ${slow_genres[@]}; do
+  slow_genres_a[$g]=t
+done
+
+# genres that have a beat
+beat_genres=()
+genres=()
+
+
+# relatively upbeat genres to listen, eg while biking
+upbeat_genres=()
+for g in ${all_genres[@]}; do
+  if [[ ${ignore_genres_a[$g]} ]]; then continue; fi
+  genres+=($g)
+  if [[ ${slow_genres_a[$g]} ]]; then continue; fi
+  beat_genres+=($g)
+  case $g in
+    chill)
+      continue
+      ;;
+  esac
+  upbeat_genres+=($g)
+done
+
+# generate regex for beat playlist
+beat_regex=
+first=true
+for g in ${beat_genres[@]}; do
+  if $first; then
+    first=false
+    beat_regex=$g
+  else
+    beat_regex+="|$g"
+  fi
+done
+
+# generate regex for upbeat playlist
+upbeat_regex=
+first=true
+for g in ${upbeat_genres[@]}; do
+  if $first; then
+    first=false
+    upbeat_regex=$g
+  else
+    upbeat_regex+="|$g"
+  fi
+done
+
+declare -A bpla # beet playlist associative array
+beetapl() { # beet add playlist
+  local name
+  name="$1"
+  shift
+  bpla[$name]="${@@Q}"
+}
+
+for g in ${genres[@]}; do
+  for r in {3..5}; do
+    case $g in
+      pop|rap)
+        beetapl ${g}-${r} rating:${r}..5 genre::^$g\$ ^expl:t ^gimicky:t ^lesser_version:t
+        beetapl ${g}-x-${r} rating:${r}..5 genre::^$g\$ ^gimicky:t ^lesser_version:t
+        ;;
+      *)
+        beetapl ${g}-${r} rating:${r}..5 genre:$g ^gimicky:t ^lesser_version:t
+        ;;
+    esac
+  done
+done
+
+for t in ${tags[@]}; do
+  for r in {3..5}; do
+    beetapl ${t}-${r} rating:${r}..5 $t:t ^lesser_version:t
+  done
+done
+
+for r in {3..5}; do
+  beetapl beat-${r} rating:${r}..5 genre::$beat_regex ^expl:t ^gimicky:t ^lesser_version:t
+  beetapl beat-x-${r} rating:${r}..5 genre::$beat_regex ^gimicky:t ^lesser_version:t
+  beetapl upbeat-${r} rating:${r}..5 genre::$upbeat_regex ^expl:t ^gimicky:t ^lesser_version:t ^sad:t
+  beetapl upbeat-x-${r} rating:${r}..5 genre::$upbeat_regex ^gimicky:t ^lesser_version:t ^sad:t
+  beetapl gimicky-${r} rating:${r}..5 gimicky:t ^lesser_version:t
+done
+
+for r in {3..5}; do
+  beetapl \
+    sy$r rating:${r}..5 genre::$upbeat_regex ^gimicky:t ^lesser_version:t 'artist:sonic youth'
+done