add music shuffle and concept for main menu

This commit is contained in:
Laila van Reenen 2025-10-22 17:16:34 +02:00
parent ae874134dc
commit fb1b589f8d
Signed by: LailaTheElf
GPG Key ID: 8A3EF0226518C12D
6 changed files with 249 additions and 2 deletions

View File

@ -0,0 +1 @@
real time systems:exec:./hr/rts.sh

View File

@ -0,0 +1,4 @@
#!/usr/bin/env bash
codium $HOME/projects/hr/rts10_reports/
flatpak run md.obsidian.Obsidian $HOME/projects/hr/rts10_reports/

View File

@ -0,0 +1,2 @@
Hoogeschool Rotterdam:menu:hr
projects:menu:proj

View File

@ -0,0 +1,126 @@
ems31_2024-2025_groep_2_ccs:exec:kgx --working-directory=$HOME/projects/ems31_2024-2025_groep_2_ccs
ems31_2024-2025_groep_2_wsl:exec:kgx --working-directory=$HOME/projects/ems31_2024-2025_groep_2_wsl
escaperoom/pages:exec:kgx --working-directory=$HOME/projects/escaperoom/pages
ffmpeg:exec:kgx --working-directory=$HOME/projects/ffmpeg
freenen/3dprinter_profiles:exec:kgx --working-directory=$HOME/projects/freenen/3dprinter_profiles
freenen/ansible-authelia:exec:kgx --working-directory=$HOME/projects/freenen/ansible-authelia
freenen/ansible-codimd:exec:kgx --working-directory=$HOME/projects/freenen/ansible-codimd
freenen/ansible-collabora:exec:kgx --working-directory=$HOME/projects/freenen/ansible-collabora
freenen/ansible-docker:exec:kgx --working-directory=$HOME/projects/freenen/ansible-docker
freenen/ansible-firefly-iii:exec:kgx --working-directory=$HOME/projects/freenen/ansible-firefly-iii
freenen/ansible-git:exec:kgx --working-directory=$HOME/projects/freenen/ansible-git
freenen/ansible-gitea:exec:kgx --working-directory=$HOME/projects/freenen/ansible-gitea
freenen/ansible-gitea-act-runner:exec:kgx --working-directory=$HOME/projects/freenen/ansible-gitea-act-runner
freenen/ansible-grafana:exec:kgx --working-directory=$HOME/projects/freenen/ansible-grafana
freenen/ansible-lamp:exec:kgx --working-directory=$HOME/projects/freenen/ansible-lamp
freenen/ansible-minecraft-server:exec:kgx --working-directory=$HOME/projects/freenen/ansible-minecraft-server
freenen/ansible-mqtt:exec:kgx --working-directory=$HOME/projects/freenen/ansible-mqtt
freenen/ansible-mysql:exec:kgx --working-directory=$HOME/projects/freenen/ansible-mysql
freenen/ansible-nextcloud:exec:kgx --working-directory=$HOME/projects/freenen/ansible-nextcloud
freenen/ansible-pi-hole:exec:kgx --working-directory=$HOME/projects/freenen/ansible-pi-hole
freenen/ansible-prometheus:exec:kgx --working-directory=$HOME/projects/freenen/ansible-prometheus
freenen/ansible-proxymanager:exec:kgx --working-directory=$HOME/projects/freenen/ansible-proxymanager
freenen/ansible-rustdesk:exec:kgx --working-directory=$HOME/projects/freenen/ansible-rustdesk
freenen/ansible-server-base:exec:kgx --working-directory=$HOME/projects/freenen/ansible-server-base
freenen/ansible-vscode-server:exec:kgx --working-directory=$HOME/projects/freenen/ansible-vscode-server
freenen/ansible-zigbee2mqtt:exec:kgx --working-directory=$HOME/projects/freenen/ansible-zigbee2mqtt
freenen/astrid:exec:kgx --working-directory=$HOME/projects/freenen/astrid
freenen/babaisyousolver:exec:kgx --working-directory=$HOME/projects/freenen/babaisyousolver
freenen/bakje:exec:kgx --working-directory=$HOME/projects/freenen/bakje
freenen/contacts:exec:kgx --working-directory=$HOME/projects/freenen/contacts
freenen/dasbob:exec:kgx --working-directory=$HOME/projects/freenen/dasbob
freenen/dasbob_qmk:exec:kgx --working-directory=$HOME/projects/freenen/dasbob_qmk
freenen/dometimer:exec:kgx --working-directory=$HOME/projects/freenen/dometimer
freenen/downloads:exec:kgx --working-directory=$HOME/projects/freenen/downloads
freenen/elfos:exec:kgx --working-directory=$HOME/projects/freenen/elfos
freenen/elven_cli:exec:kgx --working-directory=$HOME/projects/freenen/elven_cli
freenen/embassy:exec:kgx --working-directory=$HOME/projects/freenen/embassy
freenen/energyPulseCounter:exec:kgx --working-directory=$HOME/projects/freenen/energyPulseCounter
freenen/hasio-addons:exec:kgx --working-directory=$HOME/projects/freenen/hasio-addons
freenen/keycounter:exec:kgx --working-directory=$HOME/projects/freenen/keycounter
freenen/keys:exec:kgx --working-directory=$HOME/projects/freenen/keys
freenen/kicad-build:exec:kgx --working-directory=$HOME/projects/freenen/kicad-build
freenen/kladjes:exec:kgx --working-directory=$HOME/projects/freenen/kladjes
freenen/kladjes.html:exec:kgx --working-directory=$HOME/projects/freenen/kladjes.html
freenen/klippertoolboard:exec:kgx --working-directory=$HOME/projects/freenen/klippertoolboard
freenen/labvoeding-front:exec:kgx --working-directory=$HOME/projects/freenen/labvoeding-front
freenen/makitapowerbank:exec:kgx --working-directory=$HOME/projects/freenen/makitapowerbank
freenen/maps:exec:kgx --working-directory=$HOME/projects/freenen/maps
freenen/mbc_barritoolpcb:exec:kgx --working-directory=$HOME/projects/freenen/mbc_barritoolpcb
freenen/minecraft-clone:exec:kgx --working-directory=$HOME/projects/freenen/minecraft-clone
freenen/Monikers:exec:kgx --working-directory=$HOME/projects/freenen/Monikers
freenen/mp3_pcb:exec:kgx --working-directory=$HOME/projects/freenen/mp3_pcb
freenen/mqttAutomation:exec:kgx --working-directory=$HOME/projects/freenen/mqttAutomation
freenen/mqttclient:exec:kgx --working-directory=$HOME/projects/freenen/mqttclient
freenen/mqttClock:exec:kgx --working-directory=$HOME/projects/freenen/mqttClock
freenen/mr-iot:exec:kgx --working-directory=$HOME/projects/freenen/mr-iot
freenen/mute_experiment:exec:kgx --working-directory=$HOME/projects/freenen/mute_experiment
freenen/nixconfig:exec:kgx --working-directory=$HOME/projects/freenen/nixconfig
freenen/noteapp:exec:kgx --working-directory=$HOME/projects/freenen/noteapp
freenen/notes:exec:kgx --working-directory=$HOME/projects/freenen/notes
freenen/obsidian_fr-calendar:exec:kgx --working-directory=$HOME/projects/freenen/obsidian_fr-calendar
freenen/oscilloscoop:exec:kgx --working-directory=$HOME/projects/freenen/oscilloscoop
freenen/pages:exec:kgx --working-directory=$HOME/projects/freenen/pages
freenen/penningbot:exec:kgx --working-directory=$HOME/projects/freenen/penningbot
freenen/portfolioWebsite:exec:kgx --working-directory=$HOME/projects/freenen/portfolioWebsite
freenen/pringels_config:exec:kgx --working-directory=$HOME/projects/freenen/pringels_config
freenen/qmk_firmware:exec:kgx --working-directory=$HOME/projects/freenen/qmk_firmware
freenen/QR_knowledgebase:exec:kgx --working-directory=$HOME/projects/freenen/QR_knowledgebase
freenen/rcrf-wifi:exec:kgx --working-directory=$HOME/projects/freenen/rcrf-wifi
freenen/relayclient:exec:kgx --working-directory=$HOME/projects/freenen/relayclient
freenen/rotoryencoder:exec:kgx --working-directory=$HOME/projects/freenen/rotoryencoder
freenen/rp2040_c:exec:kgx --working-directory=$HOME/projects/freenen/rp2040_c
freenen/rp2040_projects:exec:kgx --working-directory=$HOME/projects/freenen/rp2040_projects
freenen/rp2040-project-template:exec:kgx --working-directory=$HOME/projects/freenen/rp2040-project-template
freenen/rustlings:exec:kgx --working-directory=$HOME/projects/freenen/rustlings
freenen/rzh-server:exec:kgx --working-directory=$HOME/projects/freenen/rzh-server
freenen/scrum-board:exec:kgx --working-directory=$HOME/projects/freenen/scrum-board
freenen/servermanager:exec:kgx --working-directory=$HOME/projects/freenen/servermanager
freenen/soldeerstation:exec:kgx --working-directory=$HOME/projects/freenen/soldeerstation
freenen/sshkeys:exec:kgx --working-directory=$HOME/projects/freenen/sshkeys
freenen/stofzuiger:exec:kgx --working-directory=$HOME/projects/freenen/stofzuiger
freenen/taklift:exec:kgx --working-directory=$HOME/projects/freenen/taklift
freenen/tasky:exec:kgx --working-directory=$HOME/projects/freenen/tasky
freenen/tempmeter:exec:kgx --working-directory=$HOME/projects/freenen/tempmeter
freenen/tmc_control:exec:kgx --working-directory=$HOME/projects/freenen/tmc_control
freenen/viool:exec:kgx --working-directory=$HOME/projects/freenen/viool
freenen/voltarush:exec:kgx --working-directory=$HOME/projects/freenen/voltarush
freenen/webtemplate:exec:kgx --working-directory=$HOME/projects/freenen/webtemplate
freenen/webtemplate_differant:exec:kgx --working-directory=$HOME/projects/freenen/webtemplate_differant
gridfinity-rebuilt-openscad:exec:kgx --working-directory=$HOME/projects/gridfinity-rebuilt-openscad
hedgedoc:exec:kgx --working-directory=$HOME/projects/hedgedoc
hr/ane10.2_pcb1:exec:kgx --working-directory=$HOME/projects/hr/ane10.2_pcb1
hr/ane10.3_pcb1:exec:kgx --working-directory=$HOME/projects/hr/ane10.3_pcb1
hr/ane10.3_pcb2:exec:kgx --working-directory=$HOME/projects/hr/ane10.3_pcb2
hr/ane10_pcb1:exec:kgx --working-directory=$HOME/projects/hr/ane10_pcb1
hr/ane21_cm4:exec:kgx --working-directory=$HOME/projects/hr/ane21_cm4
hr/csc10_labs:exec:kgx --working-directory=$HOME/projects/hr/csc10_labs
hr/dis10:exec:kgx --working-directory=$HOME/projects/hr/dis10
hr/eep71_code:exec:kgx --working-directory=$HOME/projects/hr/eep71_code
hr/ems20_handshake:exec:kgx --working-directory=$HOME/projects/hr/ems20_handshake
hr/ems31:exec:kgx --working-directory=$HOME/projects/hr/ems31
hr/ems31_ccs:exec:kgx --working-directory=$HOME/projects/hr/ems31_ccs
hr/ems31_eindopdracht2:exec:kgx --working-directory=$HOME/projects/hr/ems31_eindopdracht2
hr/ems31_submodules:exec:kgx --working-directory=$HOME/projects/hr/ems31_submodules
hr/ems31_wsl:exec:kgx --working-directory=$HOME/projects/hr/ems31_wsl
hr/eps10:exec:kgx --working-directory=$HOME/projects/hr/eps10
hr/hwp01_labs:exec:kgx --working-directory=$HOME/projects/hr/hwp01_labs
hr/pee20_motioncontroller:exec:kgx --working-directory=$HOME/projects/hr/pee20_motioncontroller
hr/pee30_belasting:exec:kgx --working-directory=$HOME/projects/hr/pee30_belasting
hr/PEE51_formula_documents:exec:kgx --working-directory=$HOME/projects/hr/PEE51_formula_documents
hr/pee51_gan_motor_driver:exec:kgx --working-directory=$HOME/projects/hr/pee51_gan_motor_driver
hr/pee51_pcb:exec:kgx --working-directory=$HOME/projects/hr/pee51_pcb
hr/pee71_documents:exec:kgx --working-directory=$HOME/projects/hr/pee71_documents
hr/pee71_eeprom_test:exec:kgx --working-directory=$HOME/projects/hr/pee71_eeprom_test
hr/rts10_assignment_project_files:exec:kgx --working-directory=$HOME/projects/hr/rts10_assignment_project_files
hr/rts10_labs:exec:kgx --working-directory=$HOME/projects/hr/rts10_labs
hr/rts10_rust:exec:kgx --working-directory=$HOME/projects/hr/rts10_rust
hr/rts10_verslagen:exec:kgx --working-directory=$HOME/projects/hr/rts10_verslagen
hr/spc_stabilisatie_firmware:exec:kgx --working-directory=$HOME/projects/hr/spc_stabilisatie_firmware
hr/stg30_notes:exec:kgx --working-directory=$HOME/projects/hr/stg30_notes
Kompas:exec:kgx --working-directory=$HOME/projects/Kompas
pico-examples:exec:kgx --working-directory=$HOME/projects/pico-examples
volta/wan-party-website:exec:kgx --working-directory=$HOME/projects/volta/wan-party-website
volta/webgenerator:exec:kgx --working-directory=$HOME/projects/volta/webgenerator
volta/website:exec:kgx --working-directory=$HOME/projects/volta/website
volta/website-wp-thema:exec:kgx --working-directory=$HOME/projects/volta/website-wp-thema

View File

@ -1,4 +1,37 @@
#!/usr/bin/foot fish
#!/usr/bin/env bash
open "$(find $HOME/Music | fzf)" &
function run_menu() {
menu="$1"
if [[ -z "$menu" ]]
then
menu="main"
fi
items="$(cat "$XDG_CONFIG_HOME/menu_main/$menu")"
echo "$XDG_CONFIG_HOME/menu_main/$menu"
echo "$items"
item="$(echo "$items" | sed -e 's|:.*$||' | walker --dmenu)"
action="$(echo "$items" | grep "^$item" | sed 's|^[^:]*:||' )"
exec_item "$action"
}
function exec_item() {
if [[ "$(echo "$action" | sed -e 's|:.*$||')" == "menu" ]]
then
menu_main "$(echo "$action" | sed -e 's|^[^:]*:||')"
exit
fi
if [[ "$(echo "$action" | sed -e 's|:.*$||')" == "exec" ]]
then
cd $XDG_CONFIG_HOME/menu_main
$(echo "$action" | sed -e 's|^[^:]*:||')
fi
}
run_menu "$1"

View File

@ -0,0 +1,81 @@
#!/usr/bin/env bash
PLAYLIST="$1"
set -e
SONGS="$(find $HOME/Music -type f)"
SONG_COUNT="$(echo "$SONGS" | wc -l)"
function pick_song() {
num=$(( 1 + $RANDOM % $SONG_COUNT ))
echo "$SONGS" | sed "${num}q;d"
}
function get_flags() {
path="$1"
meuadata="flac"
genre="$(ffmpeg -i "${path}" 2>&1 | grep GENRE | sed -e 's/^.*: //')"
if [[ "$(echo "${path}" | sed -e 's/^.*\.\([^\.]*\)$/\1/')" == "mp3" ]]
then
metadata="mp3"
genre="$(id3v2 -l "${path}" | grep '^TCON' | sed -e 's/^.*: //')"
fi
echo $genre
}
function in_playlist() {
flags="$1"
playlist="$2"
playlists="
ALL:(HE|ME|LE)
HE:HE
MHE:(ME|HE)
ME:ME
LME:(LE|ME)
LO:LO
LOFI:LOFI
LE_LOFI:(LE|LOFI)
"
query="$(echo "$playlists" | grep --ignore-case " ${playlist}:" | sed 's/^.*://')"
if [[ "$(echo "$flags" | grep -E --no-ignore-case "$query")" != "" ]]
then
echo true
else
echo false
fi
}
function get_like_level() {
flags="$1"
level="$(echo "$flags" | sed -e 's/^.*L\([0-3]\).*$/\1/')"
if [[ "$level" == "$(echo "$level" | tr -dc '0-3')" ]]
then
echo $level
fi
}
function shuffle() {
playlist="$1"
song="$(pick_song)"
flags="$(get_flags "$song")"
in_list=$(in_playlist "$flags" "$playlist")
like=$(get_like_level "$flags")
like_min=$(( 1 + $RANDOM % 3 ))
if [[ "$in_list" == "false" || "$like" -lt "$like_min" ]]
then
shuffle "$playlist"
else
mpd_song="$(echo "$song" | sed -e 's|.*/Music/||')"
echo "$mpd_song"
mpc add "$mpd_song"
fi
}
echo "$(shuffle $PLAYLIST)"