feat(hyprland): add Junie CLI and AwesomeJunieSkills to first-login setup

Co-authored-by: Junie <junie@jetbrains.com>
This commit is contained in:
2026-09-06 12:17:57 +02:00
co-authored by Junie
parent 04a68df15c
commit 28319183b6
3 changed files with 107 additions and 17 deletions
@@ -1,10 +1,9 @@
#!/usr/bin/env bash
# ==============================================================================
# ~/.config/hypr/scripts/install-dots-prompt.sh
# Fragt nach der Anmeldung nach der gewünschten Dotfiles-Konfiguration:
# 1) LinuxBeginnings Hyprland-Dotfiles (GitHub)
# 2) Eigenes Git-Repository als ~/.config klonen
# 3) Überspringen (rudimentäre Basiskonfiguration beibehalten)
# Ersteinrichtung beim ersten Login:
# 1) Desktop-Konfiguration (LinuxBeginnings Hyprland-Dots oder eigenes Git-Repo)
# 2) Installation der JetBrains Junie CLI & AwesomeJunieSkills
# ==============================================================================
set -euo pipefail
@@ -29,7 +28,7 @@ fi
# starte das Skript in einem Kitty-Fenster:
if [[ ! -t 0 || ! -t 1 ]]; then
if command -v kitty >/dev/null 2>&1; then
exec kitty --title "Dotfiles Setup & Konfiguration" bash -c "$0 --in-terminal; echo; read -r -p 'Drücke Enter zum Schließen...' || true"
exec kitty --title "System-Ersteinrichtung & Dotfiles" bash -c "$0 --in-terminal; echo; read -r -p 'Drücke Enter zum Schließen...' || true"
else
exit 0
fi
@@ -50,12 +49,97 @@ mark_as_prompted() {
touch "$MARKER_FILE" 2>/dev/null || true
}
install_junie_cli_and_skills() {
printf "\n"
printf "%b\n" "${CLR_BOLD}${CLR_CYAN}==============================================================================${CLR_RESET}"
printf "%b\n" "${CLR_BOLD}${CLR_CYAN} JetBrains Junie CLI & AwesomeJunieSkills Installation ${CLR_RESET}"
printf "%b\n" "${CLR_BOLD}${CLR_CYAN}==============================================================================${CLR_RESET}"
printf "\n"
# 1. JetBrains Junie CLI installieren
printf "%b\n" "${CLR_CYAN}[1/2] Installiere JetBrains Junie CLI...${CLR_RESET}"
if command -v curl >/dev/null 2>&1; then
if curl -fsSL https://junie.jetbrains.com/install.sh | bash; then
printf "%b\n" "${CLR_GREEN}[✓] JetBrains Junie CLI erfolgreich installiert.${CLR_RESET}"
else
printf "%b\n" "${CLR_YELLOW}[WARNUNG] Installation von JetBrains Junie CLI fehlgeschlagen oder unterbrochen.${CLR_RESET}"
fi
else
printf "%b\n" "${CLR_RED}[FEHLER] 'curl' ist nicht installiert. Junie CLI konnte nicht geladen werden.${CLR_RESET}"
fi
# 2. AwesomeJunieSkills im Benutzer-Skillverzeichnis (~/.junie/skills) klonen / aktualisieren
printf "\n"
printf "%b\n" "${CLR_CYAN}[2/2] Installiere AwesomeJunieSkills im Benutzer-Skillverzeichnis (~/.junie/skills)...${CLR_RESET}"
local skills_dir="$HOME/.junie/skills"
local repo_dir="$skills_dir/awesome-junie-skills"
mkdir -p "$skills_dir"
if command -v git >/dev/null 2>&1; then
if [[ -d "$repo_dir/.git" ]]; then
printf "%b\n" "${CLR_BLUE}[INFO] Repository existiert bereits in $repo_dir. Führe 'git pull' aus...${CLR_RESET}"
if git -C "$repo_dir" pull --ff-only 2>/dev/null; then
printf "%b\n" "${CLR_GREEN}[✓] AwesomeJunieSkills erfolgreich aktualisiert.${CLR_RESET}"
else
printf "%b\n" "${CLR_YELLOW}[WARNUNG] 'git pull' in $repo_dir fehlgeschlagen.${CLR_RESET}"
fi
else
printf "%b\n" "${CLR_BLUE}[INFO] Klone AwesomeJunieSkills nach $repo_dir...${CLR_RESET}"
rm -rf "$repo_dir" 2>/dev/null || true
if git clone https://github.com/alebaffa/awesome-junie-skills.git "$repo_dir"; then
printf "%b\n" "${CLR_GREEN}[✓] AwesomeJunieSkills erfolgreich nach $repo_dir geklont.${CLR_RESET}"
else
printf "%b\n" "${CLR_YELLOW}[WARNUNG] Klonen von AwesomeJunieSkills fehlgeschlagen.${CLR_RESET}"
fi
fi
# Symlinks für alle Skills im Skill-Hauptordner erstellen
if [[ -d "$repo_dir" ]]; then
local count=0
for skill_path in "$repo_dir"/*; do
if [[ -d "$skill_path" && -f "$skill_path/SKILL.md" ]]; then
local s_name
s_name="$(basename "$skill_path")"
ln -sfn "$skill_path" "$skills_dir/$s_name"
((count++)) || true
fi
done
printf "%b\n" "${CLR_GREEN}[✓] $count Skills verknüpft in '$skills_dir' (kann via 'git pull' in '$repo_dir' aktualisiert werden).${CLR_RESET}"
fi
# Junie config.json konfigurieren (skill-locations)
mkdir -p "$HOME/.junie"
local config_file="$HOME/.junie/config.json"
if command -v python3 >/dev/null 2>&1; then
python3 -c "
import json, os
cfg_path = os.path.expanduser('$config_file')
repo_path = os.path.expanduser('$repo_dir')
data = {}
if os.path.exists(cfg_path):
try:
with open(cfg_path, 'r', encoding='utf-8') as f:
data = json.load(f)
except Exception:
data = {}
locs = data.get('skill-locations', [])
if repo_path not in locs:
locs.append(repo_path)
data['skill-locations'] = locs
with open(cfg_path, 'w', encoding='utf-8') as f:
json.dump(data, f, indent=2)
" 2>/dev/null || true
fi
else
printf "%b\n" "${CLR_RED}[FEHLER] 'git' ist nicht installiert. AwesomeJunieSkills konnte nicht eingerichtet werden.${CLR_RESET}"
fi
}
install_linuxbeginnings() {
printf "\n"
printf "%b\n" "${CLR_GREEN}${CLR_BOLD}[INFO] Starte Installation der LinuxBeginnings Hyprland-Dotfiles...${CLR_RESET}"
printf "\n"
if command -v curl >/dev/null 2>&1; then
mark_as_prompted
sh <(curl -fsSL https://raw.githubusercontent.com/LinuxBeginnings/Hyprland-Dots/main/Distro-Hyprland.sh)
else
printf "%b\n" "${CLR_RED}[FEHLER] 'curl' ist nicht installiert. Bitte installieren Sie curl und wiederholen Sie den Vorgang.${CLR_RESET}"
@@ -143,8 +227,6 @@ clone_custom_repo() {
printf "%b\n" " - Ihr gesamter ${CLR_BOLD}~/.config${CLR_RESET}-Ordner ist nun das Git-Repository."
printf "%b\n" " - Vorherige Konfigurationen wurden gesichert in: ${CLR_BOLD}${backup_dir}${CLR_RESET}"
mark_as_prompted
# Hyprland-Konfiguration neu laden falls aktiv
if command -v hyprctl >/dev/null 2>&1; then
printf "\n"
@@ -154,7 +236,7 @@ clone_custom_repo() {
fi
printf "\n"
printf "%b\n" "${CLR_GREEN}Einrichtung abgeschlossen!${CLR_RESET}"
printf "%b\n" "${CLR_GREEN}Dotfiles-Einrichtung abgeschlossen!${CLR_RESET}"
return 0
else
printf "\n"
@@ -216,11 +298,8 @@ while true; do
break
;;
3)
mark_as_prompted
printf "\n"
printf "%b\n" "${CLR_YELLOW}[INFO] Einrichtung übersprungen. Die Basiskonfiguration bleibt aktiv.${CLR_RESET}"
printf "%b\n" "Sie können dieses Menü jederzeit erneut aufrufen mit:"
printf "%b\n" " ${CLR_BOLD}~/.config/hypr/scripts/install-dots-prompt.sh --force${CLR_RESET}"
printf "%b\n" "${CLR_YELLOW}[INFO] Dotfiles-Einrichtung übersprungen. Die Basiskonfiguration bleibt aktiv.${CLR_RESET}"
break
;;
*)
@@ -228,3 +307,14 @@ while true; do
;;
esac
done
# JetBrains Junie CLI & AwesomeJunieSkills installieren
install_junie_cli_and_skills
# Marker-Datei setzen
mark_as_prompted
printf "\n"
printf "%b\n" "${CLR_GREEN}${CLR_BOLD}[✓] Ersteinrichtung vollständig abgeschlossen!${CLR_RESET}"
printf "%b\n" "Sie können dieses Menü jederzeit erneut aufrufen mit:"
printf "%b\n" " ${CLR_BOLD}~/.config/hypr/scripts/install-dots-prompt.sh --force${CLR_RESET}"
+3 -3
View File
@@ -37,7 +37,7 @@ grep -q '^source /etc/profile' /etc/zsh/zprofile 2>/dev/null || echo 'source /et
# 2. Provision /etc/skel for Future New Users
log_substep "Provisioning /etc/skel with default templates and configs..."
mkdir -p /etc/skel/Templates
mkdir -p /etc/skel/Templates /etc/skel/.junie/skills
if [[ -d "$SCRIPT_DIR/data/skel/Templates" ]]; then
cp -r "$SCRIPT_DIR"/data/skel/Templates/* /etc/skel/Templates/ 2>/dev/null || true
fi
@@ -55,7 +55,7 @@ chown -R root:root /etc/skel
# 3. Synchronize User Environment for Target User
log_substep "Synchronizing Dotfiles & Templates into $TARGET_HOME..."
mkdir -p "$TARGET_HOME/Templates" "$TARGET_HOME/.config"
mkdir -p "$TARGET_HOME/Templates" "$TARGET_HOME/.config" "$TARGET_HOME/.junie/skills"
# Backup existing .zshrc if present
if [[ -f "$TARGET_HOME/.zshrc" ]]; then
@@ -91,7 +91,7 @@ if [[ ! -d "$TARGET_HOME/.oh-my-zsh" ]]; then
fi
# Fix ownership
chown -R "$TARGET_USER:$TARGET_USER" "$TARGET_HOME/.zshrc" "$TARGET_HOME/Templates" "$TARGET_HOME/.config"
chown -R "$TARGET_USER:$TARGET_USER" "$TARGET_HOME/.zshrc" "$TARGET_HOME/Templates" "$TARGET_HOME/.config" "$TARGET_HOME/.junie"
if [[ -d "$TARGET_HOME/.oh-my-zsh" ]]; then
chown -R "$TARGET_USER:$TARGET_USER" "$TARGET_HOME/.oh-my-zsh"
fi
+1 -1
View File
@@ -67,5 +67,5 @@ chown -R "$TARGET_USER:$TARGET_USER" "$TARGET_HOME/.config/hypr"
log_success "Rudimentary Hyprland configuration deployed:"
log_info " - SUPER+ENTER: Kitty Terminal"
log_info " - SUPER+Q: Close Active Window"
log_info " - Login Prompt: Asks user after login to choose Dotfiles setup (LinuxBeginnings or custom Git repo for ~/.config)"
log_info " - Login Prompt: Asks user after login to choose Dotfiles setup & installs JetBrains Junie CLI + AwesomeJunieSkills"
log_success "Stage 09: Hyprland Desktop installation & configuration completed successfully!"