a9903080679dd17a6e4aeeb945bc044d50ee6c94
[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
104 for g in ${ignore_genres[@]}; do
105 ignore_genres_a[$g]=t
106 done
107 for g in ${slow_genres[@]}; do
108 slow_genres_a[$g]=t
109 done
110
111 # genres that have a beat
112 beat_genres=()
113 genres=()
114
115
116 # relatively upbeat genres to listen, eg while biking
117 upbeat_genres=()
118 for g in ${all_genres[@]}; do
119 if [[ ${ignore_genres_a[$g]} ]]; then continue; fi
120 genres+=($g)
121 if [[ ${slow_genres_a[$g]} ]]; then continue; fi
122 beat_genres+=($g)
123 case $g in
124 chill)
125 continue
126 ;;
127 esac
128 upbeat_genres+=($g)
129 done
130
131 # generate regex for beat playlist
132 beat_regex=
133 first=true
134 for g in ${beat_genres[@]}; do
135 if $first; then
136 first=false
137 beat_regex=$g
138 else
139 beat_regex+="|$g"
140 fi
141 done
142
143 # generate regex for upbeat playlist
144 upbeat_regex=
145 first=true
146 for g in ${upbeat_genres[@]}; do
147 if $first; then
148 first=false
149 upbeat_regex=$g
150 else
151 upbeat_regex+="|$g"
152 fi
153 done
154
155 declare -A bpla # beet playlist associative array
156 beetapl() { # beet add playlist
157 local name
158 name="$1"
159 shift
160 bpla[$name]="${@@Q}"
161 }
162
163 for g in ${genres[@]}; do
164 for r in {3..5}; do
165 case $g in
166 pop|rap)
167 beetapl ${g}-${r} rating:${r}..5 genre::^$g\$ ^expl:t ^gimicky:t ^lesser_version:t
168 beetapl ${g}-x-${r} rating:${r}..5 genre::^$g\$ ^gimicky:t ^lesser_version:t
169 ;;
170 *)
171 beetapl ${g}-${r} rating:${r}..5 genre:$g ^gimicky:t ^lesser_version:t
172 ;;
173 esac
174 done
175 done
176
177 for t in ${tags[@]}; do
178 for r in {3..5}; do
179 beetapl ${t}-${r} rating:${r}..5 $t:t ^lesser_version:t
180 done
181 done
182
183 for r in {3..5}; do
184 beetapl beat-${r} rating:${r}..5 genre::$beat_regex ^expl:t ^gimicky:t ^lesser_version:t
185 beetapl beat-x-${r} rating:${r}..5 genre::$beat_regex ^gimicky:t ^lesser_version:t
186 beetapl upbeat-${r} rating:${r}..5 genre::$upbeat_regex ^expl:t ^gimicky:t ^lesser_version:t ^sad:t
187 beetapl upbeat-x-${r} rating:${r}..5 genre::$upbeat_regex ^gimicky:t ^lesser_version:t ^sad:t
188 beetapl gimicky-${r} rating:${r}..5 gimicky:t ^lesser_version:t
189 done
190
191 for r in {3..5}; do
192 beetapl \
193 sy$r rating:${r}..5 genre::$upbeat_regex ^gimicky:t ^lesser_version:t 'artist:sonic youth'
194 done
195
196 for t in ${nav_tags[@]}; do
197 beetapl $t $t:t
198 done