mostly fixes, some improvements
[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 # nonvocal / instrumental
49 nv
50 latin
51 metal
52 # mq = mac quale. similar to the mr robot soundtracks.
53 # slow, foreboding. usually electronic.
54 mq
55 pop
56 rap
57 rock
58 # like rain by brian crain. mostly slow airy/broody piano
59 sleep
60 techno
61 world
62 )
63
64 # because we were destined to run out of single key buttons.
65 rare_genres=(
66 jazz
67 musical
68 noise
69 skit
70 spoken-w
71 )
72
73 all_genres=(${common_genres[@]} ${rare_genres[@]})
74
75
76
77 #### playlist things #####
78
79
80 declare -A ignore_genres_a
81 ignore_genres=(
82 skit
83 spoken-w
84 )
85
86 declare -A slow_genres_a
87 slow_genres=(
88 ambient
89 avant
90 classical
91 noise
92 sleep
93 mq
94 jazz
95 )
96
97
98 tags=(
99 expl
100 sad
101 )
102
103 declare -A bpla # beet playlist associative array
104 beetapl() { # beet add playlist
105 local name
106 name="$1"
107 shift
108 bpla[$name]="${@@Q}"
109 }
110
111
112 # this function is just so we can have some local vars
113 # and not mess with the global var namespace.
114 _beet-gen-global-vars() {
115
116 local first g t r
117
118 for g in ${ignore_genres[@]}; do
119 ignore_genres_a[$g]=t
120 done
121 for g in ${slow_genres[@]}; do
122 slow_genres_a[$g]=t
123 done
124
125 # genres that have a beat
126 beat_genres=()
127 genres=()
128
129
130 # relatively upbeat genres to listen, eg while biking
131 upbeat_genres=()
132 for g in ${all_genres[@]}; do
133 if [[ ${ignore_genres_a[$g]} ]]; then continue; fi
134 genres+=($g)
135 if [[ ${slow_genres_a[$g]} ]]; then continue; fi
136 beat_genres+=($g)
137 case $g in
138 chill)
139 continue
140 ;;
141 esac
142 upbeat_genres+=($g)
143 done
144
145 # generate regex for beat playlist
146 beat_regex=
147 first=true
148 for g in ${beat_genres[@]}; do
149 if $first; then
150 first=false
151 beat_regex=$g
152 else
153 beat_regex+="|$g"
154 fi
155 done
156
157 # generate regex for upbeat playlist
158 upbeat_regex=
159 first=true
160 for g in ${upbeat_genres[@]}; do
161 if $first; then
162 first=false
163 upbeat_regex=$g
164 else
165 upbeat_regex+="|$g"
166 fi
167 done
168
169
170 for g in ${genres[@]}; do
171 for r in {3..5}; do
172 case $g in
173 pop|rap)
174 beetapl ${g}-${r} rating:${r}..5 genre::^$g\$ ^expl:t ^gimicky:t ^lesser_version:t
175 beetapl ${g}-x-${r} rating:${r}..5 genre::^$g\$ ^gimicky:t ^lesser_version:t
176 ;;
177 *)
178 beetapl ${g}-${r} rating:${r}..5 genre:$g ^gimicky:t ^lesser_version:t
179 ;;
180 esac
181 done
182 done
183
184 for t in ${tags[@]}; do
185 for r in {3..5}; do
186 beetapl ${t}-${r} rating:${r}..5 $t:t ^lesser_version:t
187 done
188 done
189
190 for r in {3..5}; do
191 beetapl beat-${r} rating:${r}..5 genre::$beat_regex ^expl:t ^gimicky:t ^lesser_version:t
192 beetapl beat-x-${r} rating:${r}..5 genre::$beat_regex ^gimicky:t ^lesser_version:t
193 beetapl upbeat-${r} rating:${r}..5 genre::$upbeat_regex ^expl:t ^gimicky:t ^lesser_version:t ^sad:t
194 beetapl upbeat-x-${r} rating:${r}..5 genre::$upbeat_regex ^gimicky:t ^lesser_version:t ^sad:t
195 beetapl gimicky-${r} rating:${r}..5 gimicky:t ^lesser_version:t
196 done
197
198 for r in {3..5}; do
199 beetapl \
200 sy$r rating:${r}..5 genre::$upbeat_regex ^gimicky:t ^lesser_version:t 'artist:sonic youth'
201 done
202
203 for t in ${nav_tags[@]}; do
204 beetapl $t $t:t
205 done
206 }
207 _beet-gen-global-vars