feat(hyprland): add Junie CLI and AwesomeJunieSkills to first-login setup
Co-authored-by: Junie <junie@jetbrains.com>
This commit is contained in:
@@ -1,10 +1,9 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
# ~/.config/hypr/scripts/install-dots-prompt.sh
|
# ~/.config/hypr/scripts/install-dots-prompt.sh
|
||||||
# Fragt nach der Anmeldung nach der gewünschten Dotfiles-Konfiguration:
|
# Ersteinrichtung beim ersten Login:
|
||||||
# 1) LinuxBeginnings Hyprland-Dotfiles (GitHub)
|
# 1) Desktop-Konfiguration (LinuxBeginnings Hyprland-Dots oder eigenes Git-Repo)
|
||||||
# 2) Eigenes Git-Repository als ~/.config klonen
|
# 2) Installation der JetBrains Junie CLI & AwesomeJunieSkills
|
||||||
# 3) Überspringen (rudimentäre Basiskonfiguration beibehalten)
|
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
|
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
@@ -29,7 +28,7 @@ fi
|
|||||||
# starte das Skript in einem Kitty-Fenster:
|
# starte das Skript in einem Kitty-Fenster:
|
||||||
if [[ ! -t 0 || ! -t 1 ]]; then
|
if [[ ! -t 0 || ! -t 1 ]]; then
|
||||||
if command -v kitty >/dev/null 2>&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
|
else
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
@@ -50,12 +49,97 @@ mark_as_prompted() {
|
|||||||
touch "$MARKER_FILE" 2>/dev/null || true
|
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() {
|
install_linuxbeginnings() {
|
||||||
printf "\n"
|
printf "\n"
|
||||||
printf "%b\n" "${CLR_GREEN}${CLR_BOLD}[INFO] Starte Installation der LinuxBeginnings Hyprland-Dotfiles...${CLR_RESET}"
|
printf "%b\n" "${CLR_GREEN}${CLR_BOLD}[INFO] Starte Installation der LinuxBeginnings Hyprland-Dotfiles...${CLR_RESET}"
|
||||||
printf "\n"
|
printf "\n"
|
||||||
if command -v curl >/dev/null 2>&1; then
|
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)
|
sh <(curl -fsSL https://raw.githubusercontent.com/LinuxBeginnings/Hyprland-Dots/main/Distro-Hyprland.sh)
|
||||||
else
|
else
|
||||||
printf "%b\n" "${CLR_RED}[FEHLER] 'curl' ist nicht installiert. Bitte installieren Sie curl und wiederholen Sie den Vorgang.${CLR_RESET}"
|
printf "%b\n" "${CLR_RED}[FEHLER] 'curl' ist nicht installiert. Bitte installieren Sie curl und wiederholen Sie den Vorgang.${CLR_RESET}"
|
||||||
@@ -142,8 +226,6 @@ clone_custom_repo() {
|
|||||||
printf "%b\n" "${CLR_GREEN}${CLR_BOLD}[ERFOLG] Repository wurde erfolgreich nach ~/.config geklont!${CLR_RESET}"
|
printf "%b\n" "${CLR_GREEN}${CLR_BOLD}[ERFOLG] Repository wurde erfolgreich nach ~/.config geklont!${CLR_RESET}"
|
||||||
printf "%b\n" " - Ihr gesamter ${CLR_BOLD}~/.config${CLR_RESET}-Ordner ist nun das Git-Repository."
|
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}"
|
printf "%b\n" " - Vorherige Konfigurationen wurden gesichert in: ${CLR_BOLD}${backup_dir}${CLR_RESET}"
|
||||||
|
|
||||||
mark_as_prompted
|
|
||||||
|
|
||||||
# Hyprland-Konfiguration neu laden falls aktiv
|
# Hyprland-Konfiguration neu laden falls aktiv
|
||||||
if command -v hyprctl >/dev/null 2>&1; then
|
if command -v hyprctl >/dev/null 2>&1; then
|
||||||
@@ -154,7 +236,7 @@ clone_custom_repo() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
printf "\n"
|
printf "\n"
|
||||||
printf "%b\n" "${CLR_GREEN}Einrichtung abgeschlossen!${CLR_RESET}"
|
printf "%b\n" "${CLR_GREEN}Dotfiles-Einrichtung abgeschlossen!${CLR_RESET}"
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
printf "\n"
|
printf "\n"
|
||||||
@@ -216,11 +298,8 @@ while true; do
|
|||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
mark_as_prompted
|
|
||||||
printf "\n"
|
printf "\n"
|
||||||
printf "%b\n" "${CLR_YELLOW}[INFO] Einrichtung übersprungen. Die Basiskonfiguration bleibt aktiv.${CLR_RESET}"
|
printf "%b\n" "${CLR_YELLOW}[INFO] Dotfiles-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}"
|
|
||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@@ -228,3 +307,14 @@ while true; do
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
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}"
|
||||||
|
|||||||
@@ -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
|
# 2. Provision /etc/skel for Future New Users
|
||||||
log_substep "Provisioning /etc/skel with default templates and configs..."
|
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
|
if [[ -d "$SCRIPT_DIR/data/skel/Templates" ]]; then
|
||||||
cp -r "$SCRIPT_DIR"/data/skel/Templates/* /etc/skel/Templates/ 2>/dev/null || true
|
cp -r "$SCRIPT_DIR"/data/skel/Templates/* /etc/skel/Templates/ 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
@@ -55,7 +55,7 @@ chown -R root:root /etc/skel
|
|||||||
|
|
||||||
# 3. Synchronize User Environment for Target User
|
# 3. Synchronize User Environment for Target User
|
||||||
log_substep "Synchronizing Dotfiles & Templates into $TARGET_HOME..."
|
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
|
# Backup existing .zshrc if present
|
||||||
if [[ -f "$TARGET_HOME/.zshrc" ]]; then
|
if [[ -f "$TARGET_HOME/.zshrc" ]]; then
|
||||||
@@ -91,7 +91,7 @@ if [[ ! -d "$TARGET_HOME/.oh-my-zsh" ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Fix ownership
|
# 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
|
if [[ -d "$TARGET_HOME/.oh-my-zsh" ]]; then
|
||||||
chown -R "$TARGET_USER:$TARGET_USER" "$TARGET_HOME/.oh-my-zsh"
|
chown -R "$TARGET_USER:$TARGET_USER" "$TARGET_HOME/.oh-my-zsh"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -67,5 +67,5 @@ chown -R "$TARGET_USER:$TARGET_USER" "$TARGET_HOME/.config/hypr"
|
|||||||
log_success "Rudimentary Hyprland configuration deployed:"
|
log_success "Rudimentary Hyprland configuration deployed:"
|
||||||
log_info " - SUPER+ENTER: Kitty Terminal"
|
log_info " - SUPER+ENTER: Kitty Terminal"
|
||||||
log_info " - SUPER+Q: Close Active Window"
|
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!"
|
log_success "Stage 09: Hyprland Desktop installation & configuration completed successfully!"
|
||||||
|
|||||||
Reference in New Issue
Block a user