lots o fixes, beets, shellcheck stuff
[distro-setup] / beet-data
1 #!/bin/bash
2
3 nav_tags=(
4 ## cross-genre tags that dont really make a playlist
5 expl
6 # songs i like but they get old fast due to feeling gimicky, or cringy after a while.
7 gimicky
8 # anything sad which i sometimes like or avoid.
9 sad
10
11 ## playlists
12 # intimate, love
13 love
14 # favorite songs pump up songs
15 pump1
16 # favorite rap pump up songs, allows more songs than pump1
17 pumprap
18 # heart rending, spine tickling
19 rend
20 # for running
21 run
22 )
23
24 pl_tags=(
25 "${nav_tags[@]}"
26 # alternate version of a song we already have which isn't as good
27 lesser_version
28 )
29
30 nav_convert_query="^genre:spoken-w ^genre:skit ^lesser_version:t rating:3..5"
31
32
33 common_genres=(
34 ambient
35 # gangsta rap / angry rap. something like g-rap would make beet queries for genre:rap include it
36 arp
37 avant
38 blues
39 # slow instrumental. todo: reclassify some ambient into this.
40 chill
41 classical
42 country
43 # lyrical edm. todo: some pop needs reclassification to this
44 dance
45 # like power glove
46 darkwave
47 hardcore
48 instrumental
49 latin
50 metal
51 # mq = mac quale. similar to the mr robot soundtracks.
52 # slow, foreboding. usually electronic.
53 mq
54 pop
55 rap
56 rock
57 # like rain by brian crain. mostly slow airy/broody piano
58 sleep
59 techno
60 world
61 )
62
63 # because we were destined to run out of single key buttons.
64 rare_genres=(
65 jazz
66 musical
67 noise
68 skit
69 spoken-w
70 )
71
72 all_genres=(${common_genres[@]} ${rare_genres[@]})
73
74
75
76 #### playlist things #####
77
78
79 declare -A ignore_genres_a
80 ignore_genres=(
81 skit
82 spoken-w
83 )
84
85 declare -A slow_genres_a
86 slow_genres=(
87 ambient
88 avant
89 classical
90 noise
91 sleep
92 mq
93 jazz
94 )
95
96
97 tags=(
98 expl
99 sad
100 )
101
102
103 for g in ${ignore_genres[@]}; do
104 ignore_genres_a[$g]=t
105 done
106 for g in ${slow_genres[@]}; do
107 slow_genres_a[$g]=t
108 done
109
110 # genres that have a beat
111 beat_genres=()
112 genres=()
113
114
115 # relatively upbeat genres to listen, eg while biking
116 upbeat_genres=()
117 for g in ${all_genres[@]}; do
118 if [[ ${ignore_genres_a[$g]} ]]; then continue; fi
119 genres+=($g)
120 if [[ ${slow_genres_a[$g]} ]]; then continue; fi
121 beat_genres+=($g)
122 case $g in
123 chill)
124 continue
125 ;;
126 esac
127 upbeat_genres+=($g)
128 done
129
130 # generate regex for beat playlist
131 beat_regex=
132 first=true
133 for g in ${beat_genres[@]}; do
134 if $first; then
135 first=false
136 beat_regex=$g
137 else
138 beat_regex+="|$g"
139 fi
140 done
141
142 # generate regex for upbeat playlist
143 upbeat_regex=
144 first=true
145 for g in ${upbeat_genres[@]}; do
146 if $first; then
147 first=false
148 upbeat_regex=$g
149 else
150 upbeat_regex+="|$g"
151 fi
152 done
153
154 declare -A bpla # beet playlist associative array
155 beetapl() { # beet add playlist
156 local name
157 name="$1"
158 shift
159 bpla[$name]="${@@Q}"
160 }
161
162 for g in ${genres[@]}; do
163 for r in {3..5}; do
164 case $g in
165 pop|rap)
166 beetapl ${g}-${r} rating:${r}..5 genre::^$g\$ ^expl:t ^gimicky:t ^lesser_version:t
167 beetapl ${g}-x-${r} rating:${r}..5 genre::^$g\$ ^gimicky:t ^lesser_version:t
168 ;;
169 *)
170 beetapl ${g}-${r} rating:${r}..5 genre:$g ^gimicky:t ^lesser_version:t
171 ;;
172 esac
173 done
174 done
175
176 for t in ${tags[@]}; do
177 for r in {3..5}; do
178 beetapl ${t}-${r} rating:${r}..5 $t:t ^lesser_version:t
179 done
180 done
181
182 for r in {3..5}; do
183 beetapl beat-${r} rating:${r}..5 genre::$beat_regex ^expl:t ^gimicky:t ^lesser_version:t
184 beetapl beat-x-${r} rating:${r}..5 genre::$beat_regex ^gimicky:t ^lesser_version:t
185 beetapl upbeat-${r} rating:${r}..5 genre::$upbeat_regex ^expl:t ^gimicky:t ^lesser_version:t ^sad:t
186 beetapl upbeat-x-${r} rating:${r}..5 genre::$upbeat_regex ^gimicky:t ^lesser_version:t ^sad:t
187 beetapl gimicky-${r} rating:${r}..5 gimicky:t ^lesser_version:t
188 done
189
190 for r in {3..5}; do
191 beetapl \
192 sy$r rating:${r}..5 genre::$upbeat_regex ^gimicky:t ^lesser_version:t 'artist:sonic youth'
193 done