mirror of
https://github.com/m-housh/dotfiles.git
synced 2026-02-14 14:12:41 +00:00
79 lines
2.4 KiB
Bash
Executable File
79 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
usage() {
|
|
cat <<EOF
|
|
|
|
Get weather information using wttr.in for the given location [default: Cincinnati].
|
|
|
|
USAGE:
|
|
$ weather [OPTIONS] <location>
|
|
|
|
OPTIONS:
|
|
|
|
-i | --interactve: Prompts user to quit or refresh, which keeps the terminal alive until user quits.
|
|
-l | --launch: Launches the interactive option in a new ghostty terminal.
|
|
--window-class <name>: Optional window class used only with launch command [default: com.ghostty.weather]
|
|
--window-padding-x <n>: Optional window padding used only with launch command [default: 10]
|
|
-h | --help: Show usage.
|
|
|
|
EOF
|
|
}
|
|
|
|
location="Cincinnati"
|
|
interactive_flag="0"
|
|
launch_flag="0"
|
|
should_continue="0"
|
|
window_class="com.ghostty.weather"
|
|
window_padding_x="10"
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
if [[ $1 =~ ^-i ]] || [[ $1 =~ ^--interactive ]]; then
|
|
interactive_flag="1"
|
|
elif [[ $1 =~ ^-h ]] || [[ $1 =~ ^--help ]]; then
|
|
usage && exit 0
|
|
elif [[ $1 =~ ^-l ]] || [[ $1 =~ ^--launch ]]; then
|
|
launch_flag="1"
|
|
elif [[ $1 =~ ^--window-class ]]; then
|
|
shift
|
|
window_class=$1
|
|
elif [[ $1 =~ ^--window-padding-x ]]; then
|
|
shift
|
|
window_padding_x=$1
|
|
else
|
|
location=$1
|
|
fi
|
|
shift
|
|
done
|
|
|
|
get_weather() {
|
|
curl "wttr.in/$location"
|
|
}
|
|
|
|
##################################################
|
|
# MAIN
|
|
##################################################
|
|
|
|
if [[ -z $location ]]; then
|
|
# Fail if we don't have a location.
|
|
echo -e "\n[ERROR]: Invalid location"
|
|
usage && exit 1
|
|
elif [[ $launch_flag == "1" ]]; then
|
|
# Launch a new window and call this script with --interactive flag set, so the window stays open until the user quits.
|
|
ghostty --class=$window_class --window-padding-x=$window_padding_x \
|
|
--keybind="j=scroll_page_fractional:0.5" --keybind="k=scroll_page_fractional:-0.5" \
|
|
--keybind="q=quit" \
|
|
-e ${BASH_SOURCE[0]} --interactive
|
|
|
|
elif [[ $interactive_flag == "1" ]]; then
|
|
# Interactive mode starts a loop until the user quits. It prompts them to quit or refresh the weather results.
|
|
while [[ $should_continue == "0" ]]; do
|
|
echo "Fetching weather for: $location"
|
|
get_weather
|
|
# Set's should_continue to '0' if when user hits the quit option or '1' if the hit refresh.
|
|
should_continue=$(gum confirm "Weather: $location" --affirmative Refresh --negative Quit && echo "0" || echo "1")
|
|
done
|
|
else
|
|
# Just show the weather in normal mode.
|
|
get_weather
|
|
fi
|