feat: Initial commit
This commit is contained in:
32
config.json
Normal file
32
config.json
Normal file
@@ -0,0 +1,32 @@
|
||||
[
|
||||
{
|
||||
"name": "Komodo",
|
||||
"description": "Manages services and docker stacks that run on the different servers.",
|
||||
"url": "https://komo.housh.dev"
|
||||
},
|
||||
{
|
||||
"name": "Home-Assistant",
|
||||
"description": "Manages IOT devices.",
|
||||
"url": "https://homeassistant.housh.dev"
|
||||
},
|
||||
{
|
||||
"name": "Uptime-Kuma",
|
||||
"description": "Uptime status of services.",
|
||||
"url": "https://uptime.housh.dev"
|
||||
},
|
||||
{
|
||||
"name": "Homarr",
|
||||
"description": "Dashboard website.",
|
||||
"url": "https://dash.housh.dev"
|
||||
},
|
||||
{
|
||||
"name": "Pocket-ID",
|
||||
"description": "Authentication services for passkey usage.",
|
||||
"url": "https://id.housh.dev"
|
||||
},
|
||||
{
|
||||
"name": "Docs",
|
||||
"description": "Documentation site for HHE.",
|
||||
"url": "https://docs.housh.dev"
|
||||
}
|
||||
]
|
||||
113
homelab-launcher
Executable file
113
homelab-launcher
Executable file
@@ -0,0 +1,113 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
SCRIPTS=${SCRIPTS:-$HOME/.local/scripts}
|
||||
THIS_FILE=${BASH_SOURCE[0]}
|
||||
LOG_LABEL="homelab-launcher"
|
||||
THIS=${THIS:-$LOG_LABEL}
|
||||
LOG_FILE=${LOG_FILE:-"$LOG_LABEL.log"}
|
||||
HOMELAB_LAUNCH_CONFIG=${HOMELAB_LAUNCH_CONFIG:-""}
|
||||
FZF_DEFAULT_OPTS=${FZF_DEFAULT_OPTS:-""}
|
||||
|
||||
window_class="com.ghostty.homelab-launcher"
|
||||
window_padding_x="10"
|
||||
|
||||
# Logging utility function, use in place of echo.
|
||||
log() {
|
||||
logging log --source "$THIS_FILE" "$@"
|
||||
}
|
||||
|
||||
footer() {
|
||||
cat <<'EOF'
|
||||
__ __ __ __
|
||||
/ // /__ __ _ ___ / /__ _/ /
|
||||
/ _ / _ \/ ' \/ -_) / _ `/ _ \
|
||||
/_//_/\___/_/_/_/\__/_/\_,_/_.__/
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
prompt_for_selection() {
|
||||
local rows=()
|
||||
local desc=""
|
||||
local sel=""
|
||||
|
||||
for name in $(jq -r '.[] | .name' $HOMELAB_LAUNCH_CONFIG); do
|
||||
desc=$(jq -r ".[] | select(.name == \"$name\") | .description" $HOMELAB_LAUNCH_CONFIG)
|
||||
rows+=("$desc:$name")
|
||||
done
|
||||
|
||||
sel=$(
|
||||
printf "%s\n" "${rows[@]}" |
|
||||
fzf --footer="$(footer)" \
|
||||
--delimiter=':' \
|
||||
--with-nth=2 \
|
||||
--preview-label='[ Description ]' \
|
||||
--preview='echo -e "\n{1}"' \
|
||||
--preview-window='down,20%'
|
||||
)
|
||||
|
||||
echo "${sel#*:}"
|
||||
}
|
||||
|
||||
get_url() {
|
||||
read -r name
|
||||
if [[ -z $name ]]; then
|
||||
log "No selection." && exit 1
|
||||
fi
|
||||
echo $(jq -r ".[] | select(.name == \"$name\") | .url" $HOMELAB_LAUNCH_CONFIG)
|
||||
}
|
||||
|
||||
picker() {
|
||||
|
||||
if [[ -z $HOMELAB_LAUNCH_CONFIG ]]; then
|
||||
# log "Configuration not set, using: ~/.config/homelab-launcher/config.json"
|
||||
HOMELAB_LAUNCH_CONFIG="$(pwd)/config.json"
|
||||
fi
|
||||
|
||||
if [[ ! -f $HOMELAB_LAUNCH_CONFIG ]]; then
|
||||
echo "Error, config file is not setup properly." && exit 1
|
||||
fi
|
||||
|
||||
# Setup fzf color scheme.
|
||||
[[ -z $FZF_DEFAULT_OPTS ]] &&
|
||||
source "$SCRIPTS/catppuccin-colors"
|
||||
|
||||
while true; do
|
||||
url=$(prompt_for_selection | get_url)
|
||||
"$SCRIPTS/hypr/launch-webapp" "$url" >/dev/null 2>&1 &
|
||||
sleep 0.1 # need to sleep or the application doesn't launch.
|
||||
done
|
||||
}
|
||||
|
||||
launch() {
|
||||
ghostty --class="$window_class" --window-padding-x="$window_padding_x" \
|
||||
--keybind="ctrl+c=quit" \
|
||||
-e $THIS_FILE picker
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# MAIN
|
||||
################################################################################
|
||||
|
||||
# Setup logging file and label.
|
||||
source "$SCRIPTS/hypr/logging"
|
||||
setup-logging "$LOG_FILE" "$LOG_LABEL"
|
||||
|
||||
if [[ ! $# -gt 0 ]]; then
|
||||
launch && exit 0
|
||||
fi
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
if [[ $1 == "launch" ]]; then
|
||||
launch && exit $?
|
||||
elif [[ $1 == "picker" ]]; then
|
||||
picker && exit $?
|
||||
else
|
||||
log --error "Invalid argument." && exit 1
|
||||
fi
|
||||
shift
|
||||
done
|
||||
Reference in New Issue
Block a user