112 lines
3.7 KiB
Bash
Executable File
112 lines
3.7 KiB
Bash
Executable File
#!/usr/bin/env zsh
|
|
|
|
source $HOME/dotfiles/bin/helpers/functions.sh
|
|
|
|
countdown() {
|
|
for i in $(seq $1 -1 1); do
|
|
printfe "%s" "green" " - Waiting for $i seconds... "
|
|
echo -en "\r"
|
|
sleep 1
|
|
done
|
|
}
|
|
|
|
run_startup_scripts() {
|
|
logo continue
|
|
echo ""
|
|
local time_of_day
|
|
# Time of day (morning, afternoon, evening, night)
|
|
case $(date +%H) in
|
|
0[0-9]|1[0-1])
|
|
time_of_day="morning"
|
|
emoji="🌅"
|
|
;;
|
|
1[2-7])
|
|
time_of_day="afternoon"
|
|
emoji="🌞"
|
|
;;
|
|
1[8-9]|2[0-3])
|
|
time_of_day="evening"
|
|
emoji="🌆"
|
|
;;
|
|
esac
|
|
printfe "%s" "cyan" "Hi $(whoami), good $time_of_day! $emoji"
|
|
echo ""
|
|
|
|
# Initialize array to hold commands
|
|
local startup_commands=()
|
|
|
|
# Read each command key and add it to the array
|
|
while IFS= read -r command; do
|
|
startup_commands+=("$command")
|
|
done < <(cat $HOME/dotfiles/config/config.yaml | shyaml keys config.startup.commands)
|
|
|
|
# Read delay and delay_between_ms values from YAML
|
|
local delay=$(cat $HOME/dotfiles/config/config.yaml | shyaml get-value config.startup.delay)
|
|
local delay_between_ms=$(cat $HOME/dotfiles/config/config.yaml | shyaml get-value config.startup.delay_between_ms)
|
|
|
|
printfe "%s\n" "cyan" "Running startup commands... (delay: $delay s, delay_between: $delay_between_ms ms)"
|
|
|
|
# Wait for the initial delay
|
|
countdown $delay
|
|
|
|
# Ensure the log folder exists
|
|
mkdir -p $HOME/dotfiles/logs/startup
|
|
|
|
# Execute each command in a new screen window
|
|
for command_key in "${startup_commands[@]}"; do
|
|
local command=$(cat $HOME/dotfiles/config/config.yaml | shyaml get-value config.startup.commands.$command_key)
|
|
|
|
printfe "%s" "green" " - Running '"
|
|
printfe "%s" "blue" "$command_key"
|
|
printfe "%s" "green" "'... ("
|
|
printfe "%s" "blue" "$command"
|
|
printfe "%s\n" "green" ")"
|
|
|
|
# Check if a screen with the same name already exists, if so log it and don't run the command
|
|
if screen -list | grep -q $command_key; then
|
|
printfe "%s" "red" " - Screen session already exists: "
|
|
printfe "%s" "blue" "$command_key"
|
|
printfe "%s\n" "red" ""
|
|
continue
|
|
fi
|
|
|
|
# Ensure the log file exists, if it exists, clear it
|
|
touch $HOME/dotfiles/logs/startup/$command_key.log
|
|
|
|
# Run the command in a new screen session named after the command_key
|
|
screen -dmS $command_key zsh -c "eval $command > $HOME/dotfiles/logs/startup/$command_key.log 2>&1"
|
|
sleep $(echo "scale=2; $delay_between_ms / 1000" | bc)
|
|
|
|
if ! screen -list | grep -q $command_key; then
|
|
printfe "%s" "red" " - Screen session died immediately: "
|
|
printfe "%s" "blue" "$command_key"
|
|
printfe "%s\n" "red" " (Within $delay_between_ms ms, check the logs for more information in $HOME/dotfiles/logs/startup/$command_key.log)"
|
|
continue
|
|
fi
|
|
|
|
# Check if command is ok, if not log that it failed
|
|
if [ $? -ne 0 ]; then
|
|
printfe "%s" "red" " - Command failed: "
|
|
printfe "%s" "blue" "$command"
|
|
printfe "%s\n" "red" ""
|
|
fi
|
|
done
|
|
}
|
|
|
|
# Check if we're in a graphical session
|
|
if [[ -z "$DISPLAY" && "$XDG_SESSION_TYPE" != "x11" && "$XDG_SESSION_TYPE" != "wayland" ]]; then
|
|
echo "Not in a graphical session. Exiting."
|
|
exit 0
|
|
fi
|
|
|
|
run_startup_scripts
|
|
|
|
echo ""
|
|
printfe "%s" "green" "Something went wrong? Check the logs in $HOME/dotfiles/logs/startup/ for more information."
|
|
echo ""
|
|
|
|
# Show message to press any key to close the terminal window
|
|
printfe "%s\n" "green" "Press any key to close this window..."
|
|
read -s -n 1
|
|
exit 0
|