1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
|
#!/usr/bin/env bash
# ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Detection and environment adjustment helpers shared by copy.sh.
# Nvidia tweaks: uncomments envs and adjusts hardware cursor setting.
detect_nvidia_adjust() {
local log="$1"
local pci_info
local has_nvidia=0
local has_intel=0
local has_amd=0
pci_info="$(lspci -k | grep -A 2 -E "(VGA|3D)" || true)"
if echo "$pci_info" | grep -iq nvidia; then
has_nvidia=1
fi
if echo "$pci_info" | grep -iq intel; then
has_intel=1
fi
if echo "$pci_info" | grep -Eiq 'amd|advanced micro devices|ati'; then
has_amd=1
fi
if [ "$has_nvidia" -eq 1 ]; then
echo "${INFO:-[INFO]} Nvidia GPU detected. Setting up proper env's and configs" 2>&1 | tee -a "$log" || true
sed -i '/env = LIBVA_DRIVER_NAME,nvidia/s/^#//' config/hypr/configs/ENVariables.conf
sed -i '/env = __GLX_VENDOR_LIBRARY_NAME,nvidia/s/^#//' config/hypr/configs/ENVariables.conf
sed -i '/env = NVD_BACKEND,direct/s/^#//' config/hypr/configs/ENVariables.conf
sed -i '/env = GSK_RENDERER,ngl/s/^#//' config/hypr/configs/ENVariables.conf
if [ "$has_intel" -eq 1 ] || [ "$has_amd" -eq 1 ]; then
echo "${INFO:-[INFO]} Hybrid GPU detected (Intel/NVIDIA or AMD/NVIDIA). Applying cursor handoff fixes." 2>&1 | tee -a "$log" || true
sed -i -E 's/^([[:space:]]*no_hardware_cursors[[:space:]]*=[[:space:]]*)[0-9]+/\1 0/' config/hypr/configs/SystemSettings.conf
sed -i -E 's/^([[:space:]]*no_hardware_cursors[[:space:]]*=[[:space:]]*)[0-9]+/\1 0/' config/hypr/lua/settings.lua
sed -i '/hyprctl setcursor/s/^#//' config/hypr/configs/Startup_Apps.conf
else
sed -i -E 's/^([[:space:]]*no_hardware_cursors[[:space:]]*=[[:space:]]*)[0-9]+/\1 1/' config/hypr/configs/SystemSettings.conf
sed -i -E 's/^([[:space:]]*no_hardware_cursors[[:space:]]*=[[:space:]]*)[0-9]+/\1 1/' config/hypr/lua/settings.lua
fi
fi
}
# VM tweaks: enable software renderer envs and virtual monitor defaults.
detect_vm_adjust() {
local log="$1"
if hostnamectl | grep -q 'Chassis: vm'; then
echo "${INFO:-[INFO]} System is running in a virtual machine. Setting up proper env's and configs" 2>&1 | tee -a "$log" || true
sed -i 's/^\([[:space:]]*no_hardware_cursors[[:space:]]*=[[:space:]]*\)2/\1 1/' config/hypr/configs/SystemSettings.conf
sed -i '/env = WLR_RENDERER_ALLOW_SOFTWARE,1/s/^#//' config/hypr/configs/ENVariables.conf
sed -i '/monitor = Virtual-1, 1920x1080@60,auto,1/s/^#//' config/hypr/monitors.conf
fi
}
# NixOS tweaks: ensure polkit overlay is enabled and default disabled.
detect_nixos_adjust() {
local log="$1"
if hostnamectl | grep -q 'Operating System: NixOS'; then
echo "${INFO:-[INFO]} NixOS Distro Detected. Setting up proper env's and configs." 2>&1 | tee -a "$log" || true
local OVERLAY_SA="config/hypr/configs/Startup_Apps.conf"
local DISABLE_SA="config/hypr/configs/Startup_Apps.disable"
mkdir -p "$(dirname "$OVERLAY_SA")"
touch "$OVERLAY_SA" "$DISABLE_SA"
grep -qx 'exec-once = $scriptsDir/Polkit-NixOS.sh' "$OVERLAY_SA" || echo 'exec-once = $scriptsDir/Polkit-NixOS.sh' >>"$OVERLAY_SA"
grep -qx '\$scriptsDir/Polkit.sh' "$DISABLE_SA" || echo '$scriptsDir/Polkit.sh' >>"$DISABLE_SA"
fi
}
# Qt Quick Controls style safety: enable Hyprland style only when module exists.
adjust_qt_quick_controls_style() {
local log="$1"
local source_hypr_dir="config/hypr"
local target_hypr_dir="${XDG_CONFIG_HOME:-$HOME/.config}/hypr"
local style="Basic"
local qt_style_override="Fusion"
local has_kvantum_qml=0
local set_env_conf_vars
local set_env_lua_vars
set_env_conf_vars() {
local file="$1"
[ -f "$file" ] || return 0
if grep -q '^env = QT_QUICK_CONTROLS_STYLE,' "$file"; then
sed -i -E "s|^env = QT_QUICK_CONTROLS_STYLE,.*$|env = QT_QUICK_CONTROLS_STYLE,${style}|" "$file"
else
printf '\nenv = QT_QUICK_CONTROLS_STYLE,%s\n' "$style" >>"$file"
fi
if grep -q '^env = QT_STYLE_OVERRIDE,' "$file"; then
sed -i -E "s|^env = QT_STYLE_OVERRIDE,.*$|env = QT_STYLE_OVERRIDE,${qt_style_override}|" "$file"
else
printf 'env = QT_STYLE_OVERRIDE,%s\n' "$qt_style_override" >>"$file"
fi
}
set_env_lua_vars() {
local file="$1"
[ -f "$file" ] || return 0
if grep -q '^hl\.env("QT_QUICK_CONTROLS_STYLE",' "$file"; then
sed -i -E "s|^hl\\.env\\(\"QT_QUICK_CONTROLS_STYLE\", \".*\"\\)$|hl.env(\"QT_QUICK_CONTROLS_STYLE\", \"${style}\")|" "$file"
else
printf '\nhl.env("QT_QUICK_CONTROLS_STYLE", "%s")\n' "$style" >>"$file"
fi
if grep -q '^hl\.env("QT_STYLE_OVERRIDE",' "$file"; then
sed -i -E "s|^hl\\.env\\(\"QT_STYLE_OVERRIDE\", \".*\"\\)$|hl.env(\"QT_STYLE_OVERRIDE\", \"${qt_style_override}\")|" "$file"
else
printf 'hl.env("QT_STYLE_OVERRIDE", "%s")\n' "$qt_style_override" >>"$file"
fi
}
if find /usr/lib /usr/lib64 /usr/share -type d -path '*/qml/*/org/hyprland/style' -print -quit 2>/dev/null | grep -q .; then
style="org.hyprland.style"
elif command -v dpkg >/dev/null 2>&1 && dpkg -s qml6-module-org-hyprland-style >/dev/null 2>&1; then
style="org.hyprland.style"
fi
if find /usr/lib /usr/lib64 /usr/share -type d -path '*/qml/*/kvantum' -print -quit 2>/dev/null | grep -q .; then
has_kvantum_qml=1
qt_style_override="kvantum"
fi
set_env_conf_vars "$source_hypr_dir/configs/ENVariables.conf"
set_env_lua_vars "$source_hypr_dir/lua/env.lua"
set_env_lua_vars "$source_hypr_dir/configs/system_env.lua"
set_env_conf_vars "$target_hypr_dir/configs/ENVariables.conf"
set_env_lua_vars "$target_hypr_dir/lua/env.lua"
set_env_lua_vars "$target_hypr_dir/configs/system_env.lua"
if [ "$style" = "org.hyprland.style" ]; then
echo "${INFO:-[INFO]} hyprland Qt style module detected. Using QT_QUICK_CONTROLS_STYLE=$style" 2>&1 | tee -a "$log" || true
else
echo "${WARN:-[WARN]} hyprland Qt style module not found. Using QT_QUICK_CONTROLS_STYLE=Basic to avoid Qt app crashes." 2>&1 | tee -a "$log" || true
fi
if [ "$has_kvantum_qml" -eq 1 ]; then
echo "${INFO:-[INFO]} Kvantum QML module detected. Using QT_STYLE_OVERRIDE=kvantum" 2>&1 | tee -a "$log" || true
else
echo "${WARN:-[WARN]} Kvantum QML module not found. Using QT_STYLE_OVERRIDE=Fusion as fallback." 2>&1 | tee -a "$log" || true
fi
}
# Ensure ~/.zprofile (zsh) and ~/.profile (bash) source /etc/profile.
# On Debian with zsh, /etc/profile sets up flatpak XDG data dirs so flatpak
# apps appear in the rofi menu. Without this entry the rofi app menu is often
# missing all flatpak-installed applications.
ensure_shell_profile_sources_etc_profile() {
local log="${1:-/dev/null}"
local user_shell
local entry_marker='source /etc/profile'
local entry
entry="$(printf 'if [ -f /etc/profile ]; then\n source /etc/profile\nfi')"
user_shell="$(basename "${SHELL:-bash}")"
_add_etc_profile_entry() {
local profile_file="$1"
local plog="$2"
if [ ! -f "$profile_file" ]; then
echo "${NOTE:-[NOTE]} Creating $profile_file and adding /etc/profile source entry (fixes flatpak in rofi on Debian)" 2>&1 | tee -a "$plog"
printf '\n# Source /etc/profile to ensure system paths (e.g. flatpak) are available\n%s\n' "$entry" > "$profile_file"
elif ! grep -qF "$entry_marker" "$profile_file"; then
echo "${NOTE:-[NOTE]} Adding /etc/profile source entry to $profile_file (fixes flatpak in rofi on Debian)" 2>&1 | tee -a "$plog"
printf '\n# Source /etc/profile to ensure system paths (e.g. flatpak) are available\n%s\n' "$entry" >> "$profile_file"
else
echo "${INFO:-[INFO]} $profile_file already sources /etc/profile; no changes needed." 2>&1 | tee -a "$plog"
fi
}
# zsh: check ~/.zprofile when the user's shell is zsh
if [ "$user_shell" = "zsh" ]; then
echo "${INFO:-[INFO]} zsh detected - checking ~/.zprofile for /etc/profile source entry..." 2>&1 | tee -a "$log"
_add_etc_profile_entry "$HOME/.zprofile" "$log"
fi
# bash: check ~/.profile when bash is the default shell and the file already exists
if [ "$user_shell" = "bash" ] && [ -f "$HOME/.profile" ]; then
echo "${INFO:-[INFO]} bash detected - checking ~/.profile for /etc/profile source entry..." 2>&1 | tee -a "$log"
_add_etc_profile_entry "$HOME/.profile" "$log"
fi
}
# Decide waybar config/style based on chassis type. Echoes chosen config path.
detect_waybar_config() {
if hostnamectl | grep -q 'Chassis: desktop'; then
echo "desktop"
else
echo "laptop"
fi
}
|