opencode-skills-collection 4.0.11 → 4.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled-skills/.antigravity-install-manifest.json +4 -1
- package/bundled-skills/docs/integrations/jetski-cortex.md +3 -3
- package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +1 -1
- package/bundled-skills/docs/maintainers/repo-growth-seo.md +1 -1
- package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
- package/bundled-skills/docs/users/aas-core.md +1 -1
- package/bundled-skills/docs/users/bundles.md +1 -1
- package/bundled-skills/docs/users/claude-code-skills.md +1 -1
- package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
- package/bundled-skills/docs/users/kiro-integration.md +1 -1
- package/bundled-skills/docs/users/usage.md +3 -3
- package/bundled-skills/docs/users/visual-guide.md +4 -4
- package/bundled-skills/fedora-hyprland-installer/LICENSE +21 -0
- package/bundled-skills/fedora-hyprland-installer/README.md +125 -0
- package/bundled-skills/fedora-hyprland-installer/SKILL.md +112 -0
- package/bundled-skills/fedora-hyprland-installer/references/amd.md +10 -0
- package/bundled-skills/fedora-hyprland-installer/references/fedora.md +24 -0
- package/bundled-skills/fedora-hyprland-installer/references/hyprland.md +22 -0
- package/bundled-skills/fedora-hyprland-installer/references/intel.md +8 -0
- package/bundled-skills/fedora-hyprland-installer/references/nvidia.md +29 -0
- package/bundled-skills/fedora-hyprland-installer/references/portals.md +18 -0
- package/bundled-skills/fedora-hyprland-installer/references/troubleshooting.md +53 -0
- package/bundled-skills/fedora-hyprland-installer/references/wayland.md +9 -0
- package/bundled-skills/fedora-hyprland-installer/scripts/backup.sh +65 -0
- package/bundled-skills/fedora-hyprland-installer/scripts/configure.sh +158 -0
- package/bundled-skills/fedora-hyprland-installer/scripts/detect-gpu.sh +71 -0
- package/bundled-skills/fedora-hyprland-installer/scripts/detect-system.sh +95 -0
- package/bundled-skills/fedora-hyprland-installer/scripts/install.sh +62 -0
- package/bundled-skills/fedora-hyprland-installer/scripts/preflight.sh +94 -0
- package/bundled-skills/fedora-hyprland-installer/scripts/repair.sh +92 -0
- package/bundled-skills/fedora-hyprland-installer/scripts/uninstall.sh +57 -0
- package/bundled-skills/fedora-hyprland-installer/scripts/verify.sh +92 -0
- package/bundled-skills/fedora-hyprland-installer/tests/test-detection.sh +22 -0
- package/bundled-skills/fedora-hyprland-installer/tests/test-scripts.sh +47 -0
- package/bundled-skills/find-complementary-founders/LICENSE.txt +21 -0
- package/bundled-skills/find-complementary-founders/SKILL.md +386 -0
- package/bundled-skills/find-complementary-founders/agents/openai.yaml +4 -0
- package/bundled-skills/find-complementary-founders/references/community-growth.md +140 -0
- package/bundled-skills/find-complementary-founders/references/evidence-model.md +94 -0
- package/bundled-skills/find-complementary-founders/references/moltbook.md +125 -0
- package/bundled-skills/find-complementary-founders/references/owner-onboarding.ru.md +105 -0
- package/bundled-skills/find-complementary-founders/references/privacy-safety.md +63 -0
- package/bundled-skills/find-complementary-founders/references/profile-schema.md +117 -0
- package/bundled-skills/find-complementary-founders/scripts/assess_profile.py +532 -0
- package/bundled-skills/find-complementary-founders/scripts/github_thread.py +466 -0
- package/bundled-skills/find-complementary-founders/scripts/match_profiles.py +251 -0
- package/bundled-skills/find-complementary-founders/scripts/moltbook_publish.py +672 -0
- package/bundled-skills/find-complementary-founders/scripts/profile_card.py +307 -0
- package/bundled-skills/find-complementary-founders/scripts/validate_profile.py +473 -0
- package/bundled-skills/find-complementary-founders/scripts/verify_github_submission.py +296 -0
- package/bundled-skills/orchestrate/SKILL.md +61 -0
- package/bundled-skills/orchestrate/agents/openai.yaml +4 -0
- package/bundled-skills/uizze-ui-research/SKILL.md +47 -12
- package/package.json +1 -1
- package/skills_index.json +101 -1
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -Eeuo pipefail
|
|
3
|
+
|
|
4
|
+
# Backup Script for Fedora Hyprland Installer
|
|
5
|
+
|
|
6
|
+
TIMESTAMP=$(date +"%Y%m%d-%H%M%S")
|
|
7
|
+
BACKUP_BASE="${HOME:?HOME is not set}/.local/state/fedora-hyprland-installer/backups"
|
|
8
|
+
BACKUP_DIR="${BACKUP_BASE}/${TIMESTAMP}"
|
|
9
|
+
|
|
10
|
+
echo "=== Hyprland Configuration Backup ==="
|
|
11
|
+
echo "Target backup directory: ${BACKUP_DIR}"
|
|
12
|
+
|
|
13
|
+
CONFIG_ITEMS=(
|
|
14
|
+
".config/hypr"
|
|
15
|
+
".config/waybar"
|
|
16
|
+
".config/wofi"
|
|
17
|
+
".config/rofi"
|
|
18
|
+
".config/kitty"
|
|
19
|
+
".config/alacritty"
|
|
20
|
+
".config/dunst"
|
|
21
|
+
".config/mako"
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
# Check if any config items exist before creating backup directory
|
|
25
|
+
HAS_ITEMS="false"
|
|
26
|
+
for item in "${CONFIG_ITEMS[@]}"; do
|
|
27
|
+
if [ -e "${HOME}/${item}" ]; then
|
|
28
|
+
HAS_ITEMS="true"
|
|
29
|
+
break
|
|
30
|
+
fi
|
|
31
|
+
done
|
|
32
|
+
|
|
33
|
+
if [ "$HAS_ITEMS" = "false" ]; then
|
|
34
|
+
echo "[i] No pre-existing Hyprland configuration files found to back up."
|
|
35
|
+
echo "BACKUP_PATH=none"
|
|
36
|
+
exit 0
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
mkdir -p "${BACKUP_DIR}"
|
|
40
|
+
|
|
41
|
+
BACKED_UP_COUNT=0
|
|
42
|
+
|
|
43
|
+
for item in "${CONFIG_ITEMS[@]}"; do
|
|
44
|
+
SRC_PATH="${HOME}/${item}"
|
|
45
|
+
if [ -e "${SRC_PATH}" ]; then
|
|
46
|
+
DEST_PATH="${BACKUP_DIR}/${item}"
|
|
47
|
+
mkdir -p "$(dirname "${DEST_PATH}")"
|
|
48
|
+
if cp -a "${SRC_PATH}" "${DEST_PATH}"; then
|
|
49
|
+
echo "[+] Backed up: ~/${item} -> ${DEST_PATH}"
|
|
50
|
+
BACKED_UP_COUNT=$((BACKED_UP_COUNT + 1))
|
|
51
|
+
else
|
|
52
|
+
echo "[!] Warning: Failed to back up ~/${item}"
|
|
53
|
+
fi
|
|
54
|
+
fi
|
|
55
|
+
done
|
|
56
|
+
|
|
57
|
+
echo "[✓] Successfully created backup of $BACKED_UP_COUNT items at: ${BACKUP_DIR}"
|
|
58
|
+
|
|
59
|
+
cat <<EOF > "${BACKUP_DIR}/manifest.txt"
|
|
60
|
+
Backup Date: $(date)
|
|
61
|
+
Backed up items count: ${BACKED_UP_COUNT}
|
|
62
|
+
User: $(whoami)
|
|
63
|
+
EOF
|
|
64
|
+
|
|
65
|
+
echo "BACKUP_PATH=${BACKUP_DIR}"
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -Eeuo pipefail
|
|
3
|
+
|
|
4
|
+
# Configuration Script for Fedora Hyprland Installer
|
|
5
|
+
|
|
6
|
+
echo "=== Configuring Hyprland Desktop Environment ==="
|
|
7
|
+
|
|
8
|
+
HYPR_DIR="${HOME}/.config/hypr"
|
|
9
|
+
HYPR_CONF="${HYPR_DIR}/hyprland.conf"
|
|
10
|
+
|
|
11
|
+
mkdir -p "${HYPR_DIR}"
|
|
12
|
+
|
|
13
|
+
# 1. Detect Terminal — find which terminal is actually available
|
|
14
|
+
TERMINAL_BIN=""
|
|
15
|
+
if command -v kitty &>/dev/null; then
|
|
16
|
+
TERMINAL_BIN="kitty"
|
|
17
|
+
elif command -v alacritty &>/dev/null; then
|
|
18
|
+
TERMINAL_BIN="alacritty"
|
|
19
|
+
elif command -v foot &>/dev/null; then
|
|
20
|
+
TERMINAL_BIN="foot"
|
|
21
|
+
elif command -v gnome-terminal &>/dev/null; then
|
|
22
|
+
TERMINAL_BIN="gnome-terminal"
|
|
23
|
+
fi
|
|
24
|
+
|
|
25
|
+
if [ -z "$TERMINAL_BIN" ]; then
|
|
26
|
+
echo "[!] Warning: No supported terminal emulator detected. Defaulting to kitty."
|
|
27
|
+
TERMINAL_BIN="kitty"
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
# 2. Detect Launcher
|
|
31
|
+
LAUNCHER_BIN=""
|
|
32
|
+
if command -v wofi &>/dev/null; then
|
|
33
|
+
LAUNCHER_BIN="wofi --show drun"
|
|
34
|
+
elif command -v rofi &>/dev/null; then
|
|
35
|
+
LAUNCHER_BIN="rofi -show drun"
|
|
36
|
+
fi
|
|
37
|
+
|
|
38
|
+
if [ -z "$LAUNCHER_BIN" ]; then
|
|
39
|
+
echo "[!] Warning: No supported application launcher detected. Defaulting to wofi."
|
|
40
|
+
LAUNCHER_BIN="wofi --show drun"
|
|
41
|
+
fi
|
|
42
|
+
|
|
43
|
+
# 3. Detect GPU Environment Variables
|
|
44
|
+
GPU_CONFIG=""
|
|
45
|
+
if command -v lspci &>/dev/null && lspci -nnk 2>/dev/null | grep -iq "nvidia"; then
|
|
46
|
+
echo "[i] NVIDIA GPU detected. Adding conservative NVIDIA compatibility settings."
|
|
47
|
+
GPU_CONFIG=$(cat <<'ENVEOF'
|
|
48
|
+
|
|
49
|
+
# NVIDIA compatibility
|
|
50
|
+
env = LIBVA_DRIVER_NAME,nvidia
|
|
51
|
+
env = GBM_BACKEND,nvidia-drm
|
|
52
|
+
env = __GLX_VENDOR_LIBRARY_NAME,nvidia
|
|
53
|
+
env = NVD_BACKEND,direct
|
|
54
|
+
cursor {
|
|
55
|
+
no_hardware_cursors = true
|
|
56
|
+
}
|
|
57
|
+
ENVEOF
|
|
58
|
+
)
|
|
59
|
+
fi
|
|
60
|
+
|
|
61
|
+
# 4. Generate hyprland.conf if missing
|
|
62
|
+
if [ ! -f "${HYPR_CONF}" ]; then
|
|
63
|
+
echo "[+] Creating clean ${HYPR_CONF}"
|
|
64
|
+
cat <<EOF > "${HYPR_CONF}"
|
|
65
|
+
# Fedora Hyprland Default Configuration
|
|
66
|
+
# Generated by hyprfedora — Antigravity Fedora Hyprland Installer Skill
|
|
67
|
+
|
|
68
|
+
# Monitor setup (auto detect resolution & position)
|
|
69
|
+
monitor=,preferred,auto,1
|
|
70
|
+
|
|
71
|
+
# Input config
|
|
72
|
+
input {
|
|
73
|
+
kb_layout = us
|
|
74
|
+
follow_mouse = 1
|
|
75
|
+
touchpad {
|
|
76
|
+
natural_scroll = true
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
general {
|
|
81
|
+
gaps_in = 5
|
|
82
|
+
gaps_out = 10
|
|
83
|
+
border_size = 2
|
|
84
|
+
col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
|
|
85
|
+
col.inactive_border = rgba(595959aa)
|
|
86
|
+
layout = dwindle
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
decoration {
|
|
90
|
+
rounding = 8
|
|
91
|
+
blur {
|
|
92
|
+
enabled = true
|
|
93
|
+
size = 3
|
|
94
|
+
passes = 1
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
animations {
|
|
99
|
+
enabled = true
|
|
100
|
+
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
|
|
101
|
+
animation = windows, 1, 5, myBezier
|
|
102
|
+
animation = windowsOut, 1, 5, default, popin 80%
|
|
103
|
+
animation = border, 1, 10, default
|
|
104
|
+
animation = fade, 1, 5, default
|
|
105
|
+
animation = workspaces, 1, 5, default
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
dwindle {
|
|
109
|
+
pseudotile = true
|
|
110
|
+
preserve_split = true
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
# Autostart essential services
|
|
114
|
+
exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
|
|
115
|
+
exec-once = /usr/libexec/polkit-gnome-authentication-agent-1
|
|
116
|
+
exec-once = waybar
|
|
117
|
+
exec-once = dunst
|
|
118
|
+
exec-once = swaybg -c '#1e1e2e'
|
|
119
|
+
${GPU_CONFIG}
|
|
120
|
+
|
|
121
|
+
# Keybindings
|
|
122
|
+
\$mainMod = SUPER
|
|
123
|
+
|
|
124
|
+
bind = \$mainMod, RETURN, exec, ${TERMINAL_BIN}
|
|
125
|
+
bind = \$mainMod, SPACE, exec, ${LAUNCHER_BIN}
|
|
126
|
+
bind = \$mainMod, Q, killactive,
|
|
127
|
+
bind = \$mainMod, M, exit,
|
|
128
|
+
bind = \$mainMod, E, exec, nautilus || thunar || pcmanfm
|
|
129
|
+
bind = \$mainMod, V, togglefloating,
|
|
130
|
+
bind = \$mainMod, R, exec, hyprctl reload
|
|
131
|
+
bind = \$mainMod, P, pseudo, # dwindle
|
|
132
|
+
bind = \$mainMod, J, togglesplit, # dwindle
|
|
133
|
+
|
|
134
|
+
# Move focus
|
|
135
|
+
bind = \$mainMod, left, movefocus, l
|
|
136
|
+
bind = \$mainMod, right, movefocus, r
|
|
137
|
+
bind = \$mainMod, up, movefocus, u
|
|
138
|
+
bind = \$mainMod, down, movefocus, d
|
|
139
|
+
|
|
140
|
+
# Switch workspaces
|
|
141
|
+
bind = \$mainMod, 1, workspace, 1
|
|
142
|
+
bind = \$mainMod, 2, workspace, 2
|
|
143
|
+
bind = \$mainMod, 3, workspace, 3
|
|
144
|
+
bind = \$mainMod, 4, workspace, 4
|
|
145
|
+
bind = \$mainMod, 5, workspace, 5
|
|
146
|
+
bind = \$mainMod, 6, workspace, 6
|
|
147
|
+
bind = \$mainMod, 7, workspace, 7
|
|
148
|
+
bind = \$mainMod, 8, workspace, 8
|
|
149
|
+
bind = \$mainMod, 9, workspace, 9
|
|
150
|
+
bind = \$mainMod, 0, workspace, 10
|
|
151
|
+
|
|
152
|
+
# Screenshots
|
|
153
|
+
bind = , Print, exec, grim -g "\$(slurp)" - | wl-copy
|
|
154
|
+
EOF
|
|
155
|
+
echo "[✓] Configuration generated successfully."
|
|
156
|
+
else
|
|
157
|
+
echo "[i] ${HYPR_CONF} already exists. Skipping default creation to preserve user edits."
|
|
158
|
+
fi
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -Eeuo pipefail
|
|
3
|
+
|
|
4
|
+
# GPU Detection Script for Fedora Hyprland Installer
|
|
5
|
+
|
|
6
|
+
PRIMARY_GPU="unknown"
|
|
7
|
+
NVIDIA_DETECTED="false"
|
|
8
|
+
AMD_DETECTED="false"
|
|
9
|
+
INTEL_DETECTED="false"
|
|
10
|
+
IS_HYBRID="false"
|
|
11
|
+
NVIDIA_DRIVER_ACTIVE="false"
|
|
12
|
+
|
|
13
|
+
LSPCI_OUTPUT=""
|
|
14
|
+
if command -v lspci &>/dev/null; then
|
|
15
|
+
LSPCI_OUTPUT=$(lspci -nnk 2>/dev/null | grep -A 2 -E "VGA|3D" || true)
|
|
16
|
+
fi
|
|
17
|
+
|
|
18
|
+
if echo "$LSPCI_OUTPUT" | grep -iq "nvidia" 2>/dev/null; then
|
|
19
|
+
NVIDIA_DETECTED="true"
|
|
20
|
+
fi
|
|
21
|
+
|
|
22
|
+
if echo "$LSPCI_OUTPUT" | grep -iq -E "amd|radeon|advanced micro devices" 2>/dev/null; then
|
|
23
|
+
AMD_DETECTED="true"
|
|
24
|
+
fi
|
|
25
|
+
|
|
26
|
+
if echo "$LSPCI_OUTPUT" | grep -iq "intel" 2>/dev/null; then
|
|
27
|
+
INTEL_DETECTED="true"
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
# Count detected GPU vendors
|
|
31
|
+
GPU_COUNT=0
|
|
32
|
+
if [ "$NVIDIA_DETECTED" = "true" ]; then GPU_COUNT=$((GPU_COUNT + 1)); fi
|
|
33
|
+
if [ "$AMD_DETECTED" = "true" ]; then GPU_COUNT=$((GPU_COUNT + 1)); fi
|
|
34
|
+
if [ "$INTEL_DETECTED" = "true" ]; then GPU_COUNT=$((GPU_COUNT + 1)); fi
|
|
35
|
+
|
|
36
|
+
if [ "$GPU_COUNT" -gt 1 ]; then
|
|
37
|
+
IS_HYBRID="true"
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
# Determine primary GPU label
|
|
41
|
+
if [ "$NVIDIA_DETECTED" = "true" ] && [ "$IS_HYBRID" = "false" ]; then
|
|
42
|
+
PRIMARY_GPU="nvidia"
|
|
43
|
+
elif [ "$AMD_DETECTED" = "true" ] && [ "$IS_HYBRID" = "false" ]; then
|
|
44
|
+
PRIMARY_GPU="amd"
|
|
45
|
+
elif [ "$INTEL_DETECTED" = "true" ] && [ "$IS_HYBRID" = "false" ]; then
|
|
46
|
+
PRIMARY_GPU="intel"
|
|
47
|
+
elif [ "$IS_HYBRID" = "true" ]; then
|
|
48
|
+
if [ "$NVIDIA_DETECTED" = "true" ]; then
|
|
49
|
+
PRIMARY_GPU="hybrid-nvidia"
|
|
50
|
+
else
|
|
51
|
+
PRIMARY_GPU="hybrid-other"
|
|
52
|
+
fi
|
|
53
|
+
fi
|
|
54
|
+
|
|
55
|
+
# Check if NVIDIA proprietary driver is loaded
|
|
56
|
+
if command -v nvidia-smi &>/dev/null && nvidia-smi &>/dev/null; then
|
|
57
|
+
NVIDIA_DRIVER_ACTIVE="true"
|
|
58
|
+
elif lsmod 2>/dev/null | grep -q "^nvidia" 2>/dev/null; then
|
|
59
|
+
NVIDIA_DRIVER_ACTIVE="true"
|
|
60
|
+
fi
|
|
61
|
+
|
|
62
|
+
cat <<EOF
|
|
63
|
+
{
|
|
64
|
+
"primary_gpu": "${PRIMARY_GPU}",
|
|
65
|
+
"nvidia_detected": ${NVIDIA_DETECTED},
|
|
66
|
+
"nvidia_driver_active": ${NVIDIA_DRIVER_ACTIVE},
|
|
67
|
+
"amd_detected": ${AMD_DETECTED},
|
|
68
|
+
"intel_detected": ${INTEL_DETECTED},
|
|
69
|
+
"is_hybrid": ${IS_HYBRID}
|
|
70
|
+
}
|
|
71
|
+
EOF
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -Eeuo pipefail
|
|
3
|
+
|
|
4
|
+
# System Detection Script for Fedora Hyprland Installer
|
|
5
|
+
|
|
6
|
+
FEDORA_VERSION="unknown"
|
|
7
|
+
if [ -f /etc/fedora-release ]; then
|
|
8
|
+
FEDORA_VERSION=$(cat /etc/fedora-release)
|
|
9
|
+
fi
|
|
10
|
+
|
|
11
|
+
KERNEL_RELEASE=$(uname -r)
|
|
12
|
+
ARCH=$(uname -m)
|
|
13
|
+
CURRENT_USER=$(whoami 2>/dev/null || echo "${USER:-unknown}")
|
|
14
|
+
CURRENT_DESKTOP="${XDG_CURRENT_DESKTOP:-unknown}"
|
|
15
|
+
SESSION_TYPE="${XDG_SESSION_TYPE:-unknown}"
|
|
16
|
+
|
|
17
|
+
# Detect Display Manager
|
|
18
|
+
DISPLAY_MANAGER="unknown"
|
|
19
|
+
for dm in gdm sddm lightdm gdm3; do
|
|
20
|
+
if systemctl is-active --quiet "$dm" 2>/dev/null; then
|
|
21
|
+
DISPLAY_MANAGER="$dm"
|
|
22
|
+
break
|
|
23
|
+
fi
|
|
24
|
+
done
|
|
25
|
+
|
|
26
|
+
# Detect Hyprland binary
|
|
27
|
+
HYPRLAND_INSTALLED="false"
|
|
28
|
+
HYPRLAND_VERSION="none"
|
|
29
|
+
if command -v Hyprland &>/dev/null || command -v hyprland &>/dev/null; then
|
|
30
|
+
HYPRLAND_INSTALLED="true"
|
|
31
|
+
HYPRLAND_VERSION=$(Hyprland --version 2>/dev/null | head -n1 || hyprland --version 2>/dev/null | head -n1 || echo "installed")
|
|
32
|
+
fi
|
|
33
|
+
|
|
34
|
+
# Detect PipeWire & WirePlumber
|
|
35
|
+
PIPEWIRE_STATUS="inactive"
|
|
36
|
+
if systemctl --user is-active --quiet pipewire 2>/dev/null; then
|
|
37
|
+
PIPEWIRE_STATUS="active"
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
WIREPLUMBER_STATUS="inactive"
|
|
41
|
+
if systemctl --user is-active --quiet wireplumber 2>/dev/null; then
|
|
42
|
+
WIREPLUMBER_STATUS="active"
|
|
43
|
+
fi
|
|
44
|
+
|
|
45
|
+
# Detect XDG Desktop Portal
|
|
46
|
+
PORTAL_INSTALLED="false"
|
|
47
|
+
if rpm -q xdg-desktop-portal &>/dev/null; then
|
|
48
|
+
PORTAL_INSTALLED="true"
|
|
49
|
+
fi
|
|
50
|
+
|
|
51
|
+
PORTAL_HYPRLAND_INSTALLED="false"
|
|
52
|
+
if rpm -q xdg-desktop-portal-hyprland &>/dev/null; then
|
|
53
|
+
PORTAL_HYPRLAND_INSTALLED="true"
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
# Detect CPU
|
|
57
|
+
CPU_MODEL="unknown"
|
|
58
|
+
if [ -f /proc/cpuinfo ]; then
|
|
59
|
+
CPU_MODEL=$(grep -m1 "model name" /proc/cpuinfo | cut -d':' -f2 | sed 's/^ //' || echo "unknown")
|
|
60
|
+
fi
|
|
61
|
+
|
|
62
|
+
# Detect RAM
|
|
63
|
+
RAM_TOTAL="unknown"
|
|
64
|
+
if [ -f /proc/meminfo ]; then
|
|
65
|
+
RAM_KB=$(grep -m1 "MemTotal" /proc/meminfo | awk '{print $2}')
|
|
66
|
+
RAM_TOTAL="$((RAM_KB / 1024)) MB"
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
# Detect Flatpak
|
|
70
|
+
FLATPAK_AVAILABLE="false"
|
|
71
|
+
if command -v flatpak &>/dev/null; then
|
|
72
|
+
FLATPAK_AVAILABLE="true"
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
# Output JSON-formatted report
|
|
76
|
+
cat <<EOF
|
|
77
|
+
{
|
|
78
|
+
"fedora_release": "${FEDORA_VERSION}",
|
|
79
|
+
"kernel": "${KERNEL_RELEASE}",
|
|
80
|
+
"arch": "${ARCH}",
|
|
81
|
+
"user": "${CURRENT_USER}",
|
|
82
|
+
"cpu": "${CPU_MODEL}",
|
|
83
|
+
"ram": "${RAM_TOTAL}",
|
|
84
|
+
"current_desktop": "${CURRENT_DESKTOP}",
|
|
85
|
+
"session_type": "${SESSION_TYPE}",
|
|
86
|
+
"display_manager": "${DISPLAY_MANAGER}",
|
|
87
|
+
"hyprland_installed": ${HYPRLAND_INSTALLED},
|
|
88
|
+
"hyprland_version": "${HYPRLAND_VERSION}",
|
|
89
|
+
"pipewire_status": "${PIPEWIRE_STATUS}",
|
|
90
|
+
"wireplumber_status": "${WIREPLUMBER_STATUS}",
|
|
91
|
+
"portal_installed": ${PORTAL_INSTALLED},
|
|
92
|
+
"portal_hyprland_installed": ${PORTAL_HYPRLAND_INSTALLED},
|
|
93
|
+
"flatpak_available": ${FLATPAK_AVAILABLE}
|
|
94
|
+
}
|
|
95
|
+
EOF
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -Eeuo pipefail
|
|
3
|
+
|
|
4
|
+
# Installation Script for Fedora Hyprland Installer
|
|
5
|
+
|
|
6
|
+
DRY_RUN="false"
|
|
7
|
+
UPDATE_MODE="false"
|
|
8
|
+
|
|
9
|
+
for arg in "$@"; do
|
|
10
|
+
case "$arg" in
|
|
11
|
+
--dry-run) DRY_RUN="true" ;;
|
|
12
|
+
--update) UPDATE_MODE="true" ;;
|
|
13
|
+
esac
|
|
14
|
+
done
|
|
15
|
+
|
|
16
|
+
echo "=== Installing Fedora Hyprland Packages ==="
|
|
17
|
+
|
|
18
|
+
# Base required Fedora packages for Hyprland desktop environment
|
|
19
|
+
CORE_PACKAGES=(
|
|
20
|
+
"hyprland"
|
|
21
|
+
"xdg-desktop-portal"
|
|
22
|
+
"xdg-desktop-portal-hyprland"
|
|
23
|
+
"xdg-desktop-portal-gtk"
|
|
24
|
+
"pipewire"
|
|
25
|
+
"wireplumber"
|
|
26
|
+
"kitty"
|
|
27
|
+
"wofi"
|
|
28
|
+
"waybar"
|
|
29
|
+
"dunst"
|
|
30
|
+
"grim"
|
|
31
|
+
"slurp"
|
|
32
|
+
"wl-clipboard"
|
|
33
|
+
"polkit-gnome"
|
|
34
|
+
"swaybg"
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
echo "Packages to ensure installed:"
|
|
38
|
+
for pkg in "${CORE_PACKAGES[@]}"; do
|
|
39
|
+
echo " - $pkg"
|
|
40
|
+
done
|
|
41
|
+
|
|
42
|
+
if [ "$DRY_RUN" = "true" ]; then
|
|
43
|
+
echo "[DRY-RUN] Would run: sudo dnf install -y ${CORE_PACKAGES[*]}"
|
|
44
|
+
exit 0
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
if command -v dnf &>/dev/null; then
|
|
48
|
+
if [ "$UPDATE_MODE" = "true" ]; then
|
|
49
|
+
echo "[+] Updating Hyprland packages via dnf..."
|
|
50
|
+
# dnf install also handles upgrades for already-installed packages,
|
|
51
|
+
# ensuring missing packages are installed AND existing ones are updated.
|
|
52
|
+
sudo dnf install -y "${CORE_PACKAGES[@]}"
|
|
53
|
+
else
|
|
54
|
+
echo "[+] Installing Hyprland packages via dnf..."
|
|
55
|
+
sudo dnf install -y "${CORE_PACKAGES[@]}"
|
|
56
|
+
fi
|
|
57
|
+
else
|
|
58
|
+
echo "[!] Error: dnf package manager is missing."
|
|
59
|
+
exit 1
|
|
60
|
+
fi
|
|
61
|
+
|
|
62
|
+
echo "[✓] Core package installation completed."
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -Eeuo pipefail
|
|
3
|
+
|
|
4
|
+
# Preflight Check Script for Fedora Hyprland Installer
|
|
5
|
+
|
|
6
|
+
echo "=== Fedora Hyprland Preflight Verification ==="
|
|
7
|
+
|
|
8
|
+
PASS_COUNT=0
|
|
9
|
+
WARN_COUNT=0
|
|
10
|
+
FAIL_COUNT=0
|
|
11
|
+
|
|
12
|
+
log_pass() { echo "[PASS] $1"; PASS_COUNT=$((PASS_COUNT + 1)); }
|
|
13
|
+
log_warn() { echo "[WARN] $1"; WARN_COUNT=$((WARN_COUNT + 1)); }
|
|
14
|
+
log_fail() { echo "[FAIL] $1"; FAIL_COUNT=$((FAIL_COUNT + 1)); }
|
|
15
|
+
|
|
16
|
+
# Check 1: Fedora Linux OS
|
|
17
|
+
if [ -f /etc/fedora-release ]; then
|
|
18
|
+
FEDORA_VER=$(cat /etc/fedora-release)
|
|
19
|
+
log_pass "Fedora Linux detected ($FEDORA_VER)"
|
|
20
|
+
else
|
|
21
|
+
log_fail "Not a Fedora Linux distribution! This skill is Fedora-first."
|
|
22
|
+
fi
|
|
23
|
+
|
|
24
|
+
# Check 2: System Architecture
|
|
25
|
+
ARCH=$(uname -m)
|
|
26
|
+
if [ "$ARCH" = "x86_64" ] || [ "$ARCH" = "aarch64" ]; then
|
|
27
|
+
log_pass "Supported architecture: $ARCH"
|
|
28
|
+
else
|
|
29
|
+
log_warn "Unusual architecture: $ARCH"
|
|
30
|
+
fi
|
|
31
|
+
|
|
32
|
+
# Check 3: Package Manager (dnf)
|
|
33
|
+
if command -v dnf &>/dev/null; then
|
|
34
|
+
log_pass "Package manager 'dnf' is available"
|
|
35
|
+
else
|
|
36
|
+
log_fail "Package manager 'dnf' not found"
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
# Check 4: Network Access
|
|
40
|
+
if ping -c 1 -W 3 fedoraproject.org &>/dev/null || ping -c 1 -W 3 8.8.8.8 &>/dev/null; then
|
|
41
|
+
log_pass "Network connectivity active"
|
|
42
|
+
else
|
|
43
|
+
log_warn "Network connection could not be verified"
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
# Check 5: Disk Space (require at least 2GB free on /)
|
|
47
|
+
FREE_KB=$(df -k / | awk 'NR==2 {print $4}')
|
|
48
|
+
FREE_GB=$((FREE_KB / 1024 / 1024))
|
|
49
|
+
if [ "$FREE_KB" -gt 2097152 ]; then
|
|
50
|
+
log_pass "Sufficient disk space available (${FREE_GB} GB free)"
|
|
51
|
+
else
|
|
52
|
+
log_warn "Low disk space (${FREE_GB} GB free, <2GB recommended)"
|
|
53
|
+
fi
|
|
54
|
+
|
|
55
|
+
# Check 6: Sudo availability
|
|
56
|
+
if command -v sudo &>/dev/null; then
|
|
57
|
+
log_pass "Sudo command utility is installed"
|
|
58
|
+
else
|
|
59
|
+
log_warn "Sudo command utility not found"
|
|
60
|
+
fi
|
|
61
|
+
|
|
62
|
+
# Check 7: Existing Hyprland installation
|
|
63
|
+
if command -v Hyprland &>/dev/null || command -v hyprland &>/dev/null; then
|
|
64
|
+
log_warn "Hyprland is already installed on this system"
|
|
65
|
+
else
|
|
66
|
+
log_pass "No existing Hyprland installation detected"
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
# Check 8: GPU detection quick check
|
|
70
|
+
if command -v lspci &>/dev/null; then
|
|
71
|
+
GPU_LINE=$(lspci 2>/dev/null | grep -iE "VGA|3D" | head -n1 || echo "")
|
|
72
|
+
if [ -n "$GPU_LINE" ]; then
|
|
73
|
+
log_pass "GPU detected: $GPU_LINE"
|
|
74
|
+
else
|
|
75
|
+
log_warn "No GPU detected via lspci"
|
|
76
|
+
fi
|
|
77
|
+
else
|
|
78
|
+
log_warn "lspci not available — cannot detect GPU"
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
# Check 9: PipeWire status
|
|
82
|
+
if systemctl --user is-active --quiet pipewire 2>/dev/null; then
|
|
83
|
+
log_pass "PipeWire audio server is running"
|
|
84
|
+
else
|
|
85
|
+
log_warn "PipeWire is not currently running"
|
|
86
|
+
fi
|
|
87
|
+
|
|
88
|
+
echo "----------------------------------------------"
|
|
89
|
+
echo "Preflight Summary: $PASS_COUNT passed, $WARN_COUNT warnings, $FAIL_COUNT failures"
|
|
90
|
+
|
|
91
|
+
if [ "$FAIL_COUNT" -gt 0 ]; then
|
|
92
|
+
exit 1
|
|
93
|
+
fi
|
|
94
|
+
exit 0
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -Eeuo pipefail
|
|
3
|
+
|
|
4
|
+
# Repair Script for Fedora Hyprland Installer
|
|
5
|
+
|
|
6
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
7
|
+
APPLY="false"
|
|
8
|
+
if [ "${1:-}" = "--apply" ]; then
|
|
9
|
+
APPLY="true"
|
|
10
|
+
elif [ "$#" -gt 0 ]; then
|
|
11
|
+
echo "Usage: $0 [--apply]" >&2
|
|
12
|
+
exit 2
|
|
13
|
+
fi
|
|
14
|
+
|
|
15
|
+
echo "=== Hyprland Repair Subsystem ==="
|
|
16
|
+
|
|
17
|
+
REPAIRS_MADE=0
|
|
18
|
+
|
|
19
|
+
# Subsystem 1: Missing or corrupted hyprland.conf
|
|
20
|
+
HYPR_CONF="${HOME}/.config/hypr/hyprland.conf"
|
|
21
|
+
if [ ! -f "${HYPR_CONF}" ]; then
|
|
22
|
+
echo "[!] Missing hyprland.conf detected."
|
|
23
|
+
if [ "$APPLY" = "true" ]; then
|
|
24
|
+
bash "${SCRIPT_DIR}/configure.sh"
|
|
25
|
+
REPAIRS_MADE=$((REPAIRS_MADE + 1))
|
|
26
|
+
else
|
|
27
|
+
echo "[PLAN] Would run configure.sh to create a minimal configuration."
|
|
28
|
+
fi
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
# Subsystem 2: XDG Desktop Portal repair
|
|
32
|
+
if ! rpm -q xdg-desktop-portal-hyprland &>/dev/null; then
|
|
33
|
+
echo "[!] Missing xdg-desktop-portal-hyprland."
|
|
34
|
+
if [ "$APPLY" = "true" ] && command -v dnf &>/dev/null; then
|
|
35
|
+
echo "[+] Installing portal packages..."
|
|
36
|
+
if sudo dnf install -y xdg-desktop-portal-hyprland xdg-desktop-portal-gtk; then
|
|
37
|
+
REPAIRS_MADE=$((REPAIRS_MADE + 1))
|
|
38
|
+
else
|
|
39
|
+
echo "[!] Warning: Failed to install portal packages."
|
|
40
|
+
fi
|
|
41
|
+
elif [ "$APPLY" = "false" ]; then
|
|
42
|
+
echo "[PLAN] Would install xdg-desktop-portal-hyprland and xdg-desktop-portal-gtk."
|
|
43
|
+
fi
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
# Subsystem 3: PipeWire / WirePlumber user services
|
|
47
|
+
if command -v systemctl &>/dev/null; then
|
|
48
|
+
if ! systemctl --user is-active --quiet pipewire 2>/dev/null; then
|
|
49
|
+
if [ "$APPLY" = "true" ]; then
|
|
50
|
+
echo "[+] Enabling user service: pipewire"
|
|
51
|
+
if systemctl --user enable --now pipewire; then
|
|
52
|
+
REPAIRS_MADE=$((REPAIRS_MADE + 1))
|
|
53
|
+
else
|
|
54
|
+
echo "[!] Warning: Failed to enable pipewire."
|
|
55
|
+
fi
|
|
56
|
+
else
|
|
57
|
+
echo "[PLAN] Would enable and start the pipewire user service."
|
|
58
|
+
fi
|
|
59
|
+
fi
|
|
60
|
+
if ! systemctl --user is-active --quiet wireplumber 2>/dev/null; then
|
|
61
|
+
if [ "$APPLY" = "true" ]; then
|
|
62
|
+
echo "[+] Enabling user service: wireplumber"
|
|
63
|
+
if systemctl --user enable --now wireplumber; then
|
|
64
|
+
REPAIRS_MADE=$((REPAIRS_MADE + 1))
|
|
65
|
+
else
|
|
66
|
+
echo "[!] Warning: Failed to enable wireplumber."
|
|
67
|
+
fi
|
|
68
|
+
else
|
|
69
|
+
echo "[PLAN] Would enable and start the wireplumber user service."
|
|
70
|
+
fi
|
|
71
|
+
fi
|
|
72
|
+
fi
|
|
73
|
+
|
|
74
|
+
# Subsystem 4: Restart user portals
|
|
75
|
+
if [ "$APPLY" = "true" ] && command -v systemctl &>/dev/null; then
|
|
76
|
+
echo "[+] Resetting XDG portal user services..."
|
|
77
|
+
systemctl --user restart xdg-desktop-portal-hyprland 2>/dev/null || true
|
|
78
|
+
systemctl --user restart xdg-desktop-portal 2>/dev/null || true
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
echo "---------------------------------"
|
|
82
|
+
if [ "$APPLY" = "false" ]; then
|
|
83
|
+
echo "[i] Diagnostic complete. Re-run with --apply after reviewing the plan."
|
|
84
|
+
elif [ "$REPAIRS_MADE" -gt 0 ]; then
|
|
85
|
+
echo "[✓] Repair complete. $REPAIRS_MADE issues addressed."
|
|
86
|
+
else
|
|
87
|
+
echo "[i] Repair check finished. No automated issues identified."
|
|
88
|
+
fi
|
|
89
|
+
|
|
90
|
+
if [ "$APPLY" = "true" ]; then
|
|
91
|
+
bash "${SCRIPT_DIR}/verify.sh"
|
|
92
|
+
fi
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -Eeuo pipefail
|
|
3
|
+
|
|
4
|
+
# Uninstall Script for Fedora Hyprland Installer
|
|
5
|
+
|
|
6
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
7
|
+
if [ "${1:-}" != "--yes" ] || [ "$#" -ne 1 ]; then
|
|
8
|
+
echo "Usage: $0 --yes" >&2
|
|
9
|
+
echo "Review the package list in this script before confirming removal." >&2
|
|
10
|
+
exit 2
|
|
11
|
+
fi
|
|
12
|
+
|
|
13
|
+
echo "=== Uninstall Hyprland Setup ==="
|
|
14
|
+
|
|
15
|
+
PACKAGES_TO_REMOVE=(
|
|
16
|
+
"hyprland"
|
|
17
|
+
"xdg-desktop-portal-hyprland"
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
echo "The following Hyprland-specific packages will be removed:"
|
|
21
|
+
for pkg in "${PACKAGES_TO_REMOVE[@]}"; do
|
|
22
|
+
echo " - $pkg"
|
|
23
|
+
done
|
|
24
|
+
|
|
25
|
+
echo ""
|
|
26
|
+
echo "Note: Base desktop environments (GNOME, KDE Plasma, Xfce) and user backup files will NOT be touched."
|
|
27
|
+
|
|
28
|
+
# Run backup prior to uninstallation
|
|
29
|
+
if [ -f "${SCRIPT_DIR}/backup.sh" ]; then
|
|
30
|
+
echo "[+] Creating final backup before uninstallation..."
|
|
31
|
+
bash "${SCRIPT_DIR}/backup.sh" || true
|
|
32
|
+
fi
|
|
33
|
+
|
|
34
|
+
if command -v dnf &>/dev/null; then
|
|
35
|
+
echo "[+] Executing dnf removal..."
|
|
36
|
+
# Filter to only remove packages that are actually installed
|
|
37
|
+
INSTALLED_TO_REMOVE=()
|
|
38
|
+
for pkg in "${PACKAGES_TO_REMOVE[@]}"; do
|
|
39
|
+
if rpm -q "$pkg" &>/dev/null; then
|
|
40
|
+
INSTALLED_TO_REMOVE+=("$pkg")
|
|
41
|
+
else
|
|
42
|
+
echo "[i] Package '$pkg' is not installed, skipping."
|
|
43
|
+
fi
|
|
44
|
+
done
|
|
45
|
+
|
|
46
|
+
if [ "${#INSTALLED_TO_REMOVE[@]}" -gt 0 ]; then
|
|
47
|
+
sudo dnf remove -y "${INSTALLED_TO_REMOVE[@]}"
|
|
48
|
+
echo "[✓] Hyprland packages removed successfully."
|
|
49
|
+
else
|
|
50
|
+
echo "[i] No Hyprland packages found to remove."
|
|
51
|
+
fi
|
|
52
|
+
else
|
|
53
|
+
echo "[!] dnf package manager not found."
|
|
54
|
+
exit 1
|
|
55
|
+
fi
|
|
56
|
+
|
|
57
|
+
echo "Uninstallation finished cleanly."
|