aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md72
-rwxr-xr-xDistro-Hyprland.sh7
-rw-r--r--README.md133
-rwxr-xr-xarchive/release.sh7
-rwxr-xr-xarchive/update-dots.sh6
-rwxr-xr-xarchive/upgrade.sh7
-rw-r--r--config/fastfetch/images/Arch-Logo-1.pngbin0 -> 4879423 bytes
-rw-r--r--config/fastfetch/images/Arch-Logo-2.pngbin0 -> 4267876 bytes
-rwxr-xr-xconfig/fastfetch/images/debian_swirl.pngbin0 -> 15638 bytes
-rw-r--r--config/fastfetch/images/fedora.pngbin0 -> 27194 bytes
-rw-r--r--config/fastfetch/images/gentoo1.pngbin0 -> 82212 bytes
-rw-r--r--config/fastfetch/images/gentoo2.pngbin0 -> 14086 bytes
-rwxr-xr-xconfig/fastfetch/images/nixos.pngbin0 -> 79458 bytes
-rw-r--r--config/fastfetch/images/ubuntu.jpegbin0 -> 80148 bytes
-rw-r--r--config/fastfetch/images/ubuntu.pngbin0 -> 141008 bytes
-rw-r--r--config/fastfetch/kooldots-arch.jsonc150
-rw-r--r--config/fastfetch/kooldots-debian.jsonc150
-rw-r--r--config/fastfetch/kooldots-fedora.jsonc150
-rw-r--r--config/fastfetch/kooldots-gentoo.jsonc150
-rw-r--r--config/fastfetch/kooldots-nixos.jsonc150
-rw-r--r--config/fastfetch/kooldots-ubuntu.jsonc150
-rw-r--r--config/ghostty/config (renamed from config/ghostty/ghostty.config)10
-rw-r--r--config/hypr/UserConfigs/00-Readme7
-rw-r--r--config/hypr/UserConfigs/01-UserDefaults.conf7
-rw-r--r--config/hypr/UserConfigs/ENVariables.conf7
-rw-r--r--config/hypr/UserConfigs/LaptopDisplay.conf6
-rw-r--r--config/hypr/UserConfigs/Laptops.conf7
-rw-r--r--config/hypr/UserConfigs/Startup_Apps.conf7
-rw-r--r--config/hypr/UserConfigs/UserAnimations.conf7
-rw-r--r--config/hypr/UserConfigs/UserDecorations.conf7
-rw-r--r--config/hypr/UserConfigs/UserKeybinds.conf8
-rw-r--r--config/hypr/UserConfigs/UserSettings.conf7
-rw-r--r--config/hypr/UserConfigs/WindowRules.conf13
-rw-r--r--config/hypr/UserConfigs/WorkSpaceRules.conf7
-rwxr-xr-xconfig/hypr/UserScripts/00-Readme7
-rwxr-xr-xconfig/hypr/UserScripts/RainbowBorders-low-cpu.sh6
-rwxr-xr-xconfig/hypr/UserScripts/RainbowBorders.bak.sh7
-rwxr-xr-xconfig/hypr/UserScripts/RofiBeats.sh7
-rwxr-xr-xconfig/hypr/UserScripts/RofiCalc.sh7
-rwxr-xr-xconfig/hypr/UserScripts/Tak0-Autodispatch.sh6
-rwxr-xr-xconfig/hypr/UserScripts/WallpaperAutoChange.sh14
-rwxr-xr-xconfig/hypr/UserScripts/WallpaperEffects.sh24
-rwxr-xr-xconfig/hypr/UserScripts/WallpaperRandom.sh25
-rwxr-xr-xconfig/hypr/UserScripts/WallpaperSelect.sh86
-rwxr-xr-xconfig/hypr/UserScripts/Weather.py7
-rwxr-xr-xconfig/hypr/UserScripts/Weather.sh7
-rwxr-xr-xconfig/hypr/UserScripts/WeatherWrap.sh7
-rwxr-xr-xconfig/hypr/UserScripts/ZshChangeTheme.sh7
-rw-r--r--config/hypr/configs/ENVariables.conf13
-rw-r--r--config/hypr/configs/Keybinds.conf44
-rw-r--r--config/hypr/configs/Laptops.conf7
-rw-r--r--config/hypr/configs/Startup_Apps.conf15
-rw-r--r--config/hypr/configs/SystemSettings.conf77
-rw-r--r--config/hypr/configs/WindowRules-config-v3.conf60
-rw-r--r--config/hypr/configs/WindowRules-pre-53.conf7
-rw-r--r--config/hypr/configs/WindowRules.conf60
-rwxr-xr-xconfig/hypr/initial-boot.sh11
-rwxr-xr-xconfig/hypr/scripts/AirplaneMode.sh7
-rwxr-xr-xconfig/hypr/scripts/Animations.sh7
-rwxr-xr-xconfig/hypr/scripts/Battery.sh7
-rwxr-xr-xconfig/hypr/scripts/Brightness.sh7
-rwxr-xr-xconfig/hypr/scripts/BrightnessKbd.sh7
-rwxr-xr-xconfig/hypr/scripts/ChangeBlur.sh7
-rwxr-xr-xconfig/hypr/scripts/ChangeLayout.sh133
-rwxr-xr-xconfig/hypr/scripts/ClipManager.sh7
-rwxr-xr-xconfig/hypr/scripts/DarkLight.sh15
-rwxr-xr-xconfig/hypr/scripts/Distro_update.sh7
-rwxr-xr-xconfig/hypr/scripts/Dropterminal.sh207
-rwxr-xr-xconfig/hypr/scripts/ExternalBrightness.sh103
-rwxr-xr-xconfig/hypr/scripts/Float-all-Windows.sh10
-rwxr-xr-xconfig/hypr/scripts/GameMode.sh15
-rwxr-xr-xconfig/hypr/scripts/Ghostty_themes.sh129
-rwxr-xr-xconfig/hypr/scripts/Hypridle.sh7
-rwxr-xr-xconfig/hypr/scripts/Hyprsunset.sh6
-rwxr-xr-xconfig/hypr/scripts/KeyBinds.sh7
-rwxr-xr-xconfig/hypr/scripts/KeyHints.sh11
-rwxr-xr-xconfig/hypr/scripts/KeybindsLayoutInit.sh17
-rwxr-xr-xconfig/hypr/scripts/KeyboardLayout.sh7
-rwxr-xr-xconfig/hypr/scripts/KillActiveProcess.sh7
-rwxr-xr-xconfig/hypr/scripts/Kitty_themes.sh15
-rwxr-xr-xconfig/hypr/scripts/KooLsDotsUpdate.sh7
-rwxr-xr-xconfig/hypr/scripts/Kool_Quick_Settings.sh9
-rwxr-xr-xconfig/hypr/scripts/LockScreen.sh7
-rwxr-xr-xconfig/hypr/scripts/MediaCtrl.sh7
-rwxr-xr-xconfig/hypr/scripts/MonitorProfiles.sh7
-rwxr-xr-xconfig/hypr/scripts/OverviewToggle.sh7
-rwxr-xr-xconfig/hypr/scripts/Polkit-NixOS.sh26
-rwxr-xr-xconfig/hypr/scripts/Polkit.sh42
-rwxr-xr-xconfig/hypr/scripts/PortalHyprland.sh7
-rwxr-xr-xconfig/hypr/scripts/PortalHyprlandUbuntu.sh24
-rwxr-xr-xconfig/hypr/scripts/PortalHyprlandUbuntu2604.sh15
-rwxr-xr-xconfig/hypr/scripts/Refresh.sh32
-rwxr-xr-xconfig/hypr/scripts/RefreshNoWaybar.sh10
-rwxr-xr-xconfig/hypr/scripts/RofiEmoji.sh7
-rwxr-xr-xconfig/hypr/scripts/RofiSearch.sh7
-rwxr-xr-xconfig/hypr/scripts/RofiThemeSelector-modified.sh7
-rwxr-xr-xconfig/hypr/scripts/RofiThemeSelector.sh7
-rwxr-xr-xconfig/hypr/scripts/ScreenShot.sh24
-rwxr-xr-xconfig/hypr/scripts/Sounds.sh52
-rwxr-xr-xconfig/hypr/scripts/Tak0-Autodispatch.sh7
-rwxr-xr-xconfig/hypr/scripts/Tak0-Per-Window-Switch.sh6
-rwxr-xr-xconfig/hypr/scripts/ThemeChanger.sh6
-rwxr-xr-xconfig/hypr/scripts/Toggle-Active-Window-Audio.sh6
-rwxr-xr-xconfig/hypr/scripts/Toggle-weather-waybar-units.sh6
-rwxr-xr-xconfig/hypr/scripts/TouchPad.sh7
-rwxr-xr-xconfig/hypr/scripts/UptimeNixOS.sh6
-rwxr-xr-xconfig/hypr/scripts/UserConfigsSwitcher.sh7
-rwxr-xr-xconfig/hypr/scripts/Volume.sh7
-rwxr-xr-xconfig/hypr/scripts/WallpaperCmd.sh31
-rwxr-xr-xconfig/hypr/scripts/WallpaperDaemon.sh66
-rwxr-xr-xconfig/hypr/scripts/WallustSwww.sh119
-rwxr-xr-xconfig/hypr/scripts/WaybarCava.sh6
-rwxr-xr-xconfig/hypr/scripts/WaybarLayout.sh7
-rwxr-xr-xconfig/hypr/scripts/WaybarScripts.sh7
-rwxr-xr-xconfig/hypr/scripts/WaybarStyles.sh7
-rwxr-xr-xconfig/hypr/scripts/Wlogout.sh7
-rwxr-xr-xconfig/hypr/scripts/build-awww.sh209
-rwxr-xr-xconfig/hypr/scripts/disable.cpu.turbo.sh63
-rwxr-xr-xconfig/hypr/scripts/fastfetch-wrapper.sh24
-rwxr-xr-xconfig/hypr/scripts/hyprshot.sh7
-rwxr-xr-xconfig/hypr/scripts/install-uv.sh6
-rwxr-xr-xconfig/hypr/scripts/keybinds_parser.py6
-rwxr-xr-xconfig/hypr/scripts/rofi-emacs-keybinds13
-rwxr-xr-xconfig/hypr/scripts/rofi-ssh-menu.sh117
-rwxr-xr-xconfig/hypr/scripts/sddm_wallpaper.sh7
-rwxr-xr-xconfig/hypr/scripts/set-default-thunar-terminal.sh148
-rwxr-xr-xconfig/hypr/scripts/update_WindowRules.sh6
-rw-r--r--config/hypr/v2.3.22 (renamed from config/hypr/v2.3.21)0
-rw-r--r--config/kitty/kitty-themes/00-Default.conf1
-rw-r--r--config/kitty/kitty.conf4
-rw-r--r--config/rofi/config-emacs-keybinds.rasi41
-rw-r--r--config/rofi/config-ghostty-theme.rasi74
-rw-r--r--config/rofi/dwm-config-horiz.rasi19
-rw-r--r--config/rofi/dwm-config-vert.rasi25
-rw-r--r--config/rofi/dwm-dmenu-horiz.rasi50
-rw-r--r--config/rofi/dwm-dmenu-vert.rasi54
-rw-r--r--config/rofi/themes/KooL_TokyoNight.rasi135
-rw-r--r--config/rofi/themes/KooL_dwm.rasi86
-rw-r--r--config/systemd/user/hyprpolkitagent.service.d/override.conf7
-rw-r--r--config/waybar/ModulesCustom11
-rw-r--r--config/waybar/ModulesWorkspaces19
-rw-r--r--config/waybar/configs/TOP-ddubs-simple-bar5
-rw-r--r--config/waybar/style/Dark-Latte-Wallust-combined-v2.css8
-rw-r--r--config/waybar/style/Dark-Latte-Wallust-combined.css4
-rw-r--r--config/waybar/style/Wallust-Bordered-Chroma-Fusion-Edge.css4
-rw-r--r--config/waybar/style/Wallust-Bordered-Chroma-Simple.css73
-rw-r--r--config/waybar/style/Wallust-Box-type.css11
-rw-r--r--config/waybar/style/Wallust-Chroma-Edge.css7
-rw-r--r--config/waybar/style/Wallust-Chroma-Fusion.css4
-rw-r--r--config/waybar/style/Wallust-ML4W-modern-mixed.css14
-rw-r--r--config/waybar/style/Wallust-ML4W-modern.css8
-rwxr-xr-xcopy.sh30
-rw-r--r--docs/Hyprland-LUA-analysis-Phase1.md159
-rw-r--r--docs/copy.sh-tui-analysis-3-14-2026.md105
-rw-r--r--i18n/README/README.ua.md83
-rwxr-xr-xscripts/copy_menu.sh6
-rw-r--r--scripts/lib_apps.sh52
-rw-r--r--scripts/lib_backup.sh14
-rw-r--r--scripts/lib_copy.sh94
-rw-r--r--scripts/lib_detect.sh6
-rw-r--r--scripts/lib_prompts.sh6
-rw-r--r--scripts/lib_update.sh6
162 files changed, 4390 insertions, 541 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4e0e347b..394bd80d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,74 @@
-# Changelog — JAK's Hyprland Dotfiles
+# Changelog — KoolDots
+
+## v2.3.22
+
+- Fixed: Kitty font issue
+ - Thank you `@JasonNero` for the fix
+- Enabled `touch on tablet` in `hypr/configs/SystemSettings.conf`
+- Updated `copy.sh` to support `ghostty`
+- The ghostty config directory is now backed up
+- Restore ghostty config added to restore options
+- [S3cBar0n](https://github.com/S3cBar0n) updated `WallpaperSelect.sh`
+ - It shows filename for the random image, and current wallpaper
+ - Thanks for support Kooldots!
+- `SWWW` project is archived moving to `AWWW`
+ - It's feature, syntax compatible
+ - Already has some fixes added
+ - Created a startup script to check for `awww-daemon` or fallback to `swww-daemon`
+ - Suggest everyone remove `swww` and replace with `awww`
+ - This has been done in `NixOS-Hyprland` but you have to update to current build in main branch
+- FIXED: Long delay updating colors after wallpaper change
+- Added more app icons for `WaybarWorkspaces`
+ - Emacs
+ - Nautilus
+ - Set new default icon to terminal with red X if no icon is available
+- Fixed delay is `ScreenShot.sh` script
+ - Removed existing `sleep` commands
+ - Moved audio `Sound.sh` to background
+ - This relates to `pipewire` [issue](https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/5155)
+- Fixed delay in `Sounds.sh`
+- Now uses `paplay` for sounds
+- Rewrote core logic of `DropDownterminal.sh`
+ - Doesn't use `specialworkspace` anymore
+ - Updates to Hyprland seem to break old logic
+ - The Dropdown would flash on hide
+- Fixed all float toggle
+ - Old command drepreciated
+ - Replaced with a script `Float-All-Windows.sh` in `Keybinds.conf` file
+- Fixed Package name for `waybar-weather`
+- Added `monocle` layout
+- Experimenting with some additional layerrules
+- Improving wallpaper based theming
+ - More consistent results
+ - Reducing the time to make change effective
+- Fixed several waybar style files with inconsitent colors
+- Updated `ChangeLayout` script for scrolling
+ - Requires Hyprland v0.54+
+- Added two keybinds for scrolling layout as a start
+ - SUPERSHIFT + comma swap columns
+ - SUPERSHIFT + period move to next column
+ - SUPERALT + H Horizonal Scrolling
+ - SUPERALT + V Vertical Scrolling
+- Updated `togglesplit` to `layoutmsg,togglesplit`
+ - Has been depreciated, w/0.54 it's not supported
+ - No errors just doesn't work
+- Fixed many of the WALLUST based waybars color issues
+ - Foreground/background colors were same light color
+- Kitty now has a "No color/no theme" option
+- Updated the Headers in the scripts to:
+ - KoolDots
+ - Added Project name and URL
+ - Added License info GPLv3 to each file also
+- Added new Rofi themes:
+ - dwm Horizontal (old classic dmenu style)
+ - dwm Vertical (dmenu with small dropdown list)
+ - TokyoNight
+- Changed `fastfetch` dotfiles name to `KoolDots`
+- ENVvariables file had both QT5CT and QT6CT variables
+ ` #Added style ENV for kvantum
+env = QT_QPA_PLATFORMTHEME,qt6ct
+env = QT_STYLE_OVERRIDE,kvantum`
+ > Note: Not sure how will this will work as I don't normally use kvantum
## v2.3.21
diff --git a/Distro-Hyprland.sh b/Distro-Hyprland.sh
index 9954947d..09f801a9 100755
--- a/Distro-Hyprland.sh
+++ b/Distro-Hyprland.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# https://github.com/LinuxBeginnings
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Script design to clone the Distro-Hyprland install scripts
diff --git a/README.md b/README.md
index 1ca83057..201050f9 100644
--- a/README.md
+++ b/README.md
@@ -15,43 +15,33 @@
<div align="center">
<br>
- <a href="#-copying--installation--update-instructions-"><kbd> <br> Installation <br> </kbd></a>&ensp;&ensp;
- <a href="https://www.youtube.com/playlist?list=PLDtGd5Fw5_GjXCznR0BzCJJDIQSZJRbxx"><kbd> <br> Youtube <br> </kbd></a>&ensp;&ensp;
+ <a href="#-installationupdate-instructions"><kbd> <br> Installation <br> </kbd></a>&ensp;&ensp;
<a href="https://github.com/LinuxBeginnings/Hyprland-Dots/wiki"><kbd> <br> Wiki <br> </kbd></a>&ensp;&ensp;
- <a href="https://github.com/LinuxBeginnings/Hyprland-Dots/discussions"><kbd> <br> Discussions <br> </kbd></a>&ensp;&ensp;
- <a href="https://github.com/LinuxBeginnings/Hyprland-Dots/wiki/Keybinds"><kbd> <br> Keybinds <br> </kbd></a>&ensp;&ensp;
- <a href="https://discord.gg/RZJgC7KAKm"><kbd> <br> Discord <br> </kbd></a>
+ <a href="https://www.youtube.com/@LinuxBeginnings"><kbd> <br> Youtube <br> </kbd></a>&ensp;&ensp;
+ <a href="https://discord.gg/RZJgC7KAKm"><kbd> <br> Discord <br> </kbd></a>&ensp;&ensp;
+ <a href="https://www.youtube.com/playlist?list=PLDtGd5Fw5_GjXCznR0BzCJJDIQSZJRbxx"><kbd> <br> Legacy Jak Videos <br> </kbd></a>&ensp;&ensp;
</div><br>
<div align="center">
-
<br/>
</div>
<h3 align="center">
<img src="https://github.com/LinuxBeginnings/Telegram-Animated-Emojis/blob/main/Activity/Sparkles.webp" alt="Sparkles" width="38" height="38" />
- KooL's Hyprland Dotfiles Showcase
+ KooL's Hyprland Dotfiles Showcase
<img src="https://github.com/LinuxBeginnings/Telegram-Animated-Emojis/blob/main/Activity/Sparkles.webp" alt="Sparkles" width="38" height="38" />
</h3>
<div align="center">
-
-https://github.com/user-attachments/assets/49bc12b2-abaf-45de-a21c-67aacd9bb872
-
+ <https://github.com/user-attachments/assets/49bc12b2-abaf-45de-a21c-67aacd9bb872>
</div>
-### 📹 A video walkthroughs
-
-- at the bottom
-
-</details>
-
---
[![Typing SVG](https://readme-typing-svg.herokuapp.com?font=Fira+Code&weight=700&size=22&pause=1000&color=F7077E&vCenter=true&width=435&height=30&lines=INSTALLATION)](https://git.io/typing-svg)
-### 🚩 🏁 Auto Distro-Hyprland install scripts cloning and starting 🇵🇭
+### 🏁 Auto Distro-Hyprland install scripts cloning and starting
> [!CAUTION]
> If you are using FISH SHELL, DO NOT use this function. Clone the Distro-Hyprland and ran install.sh instead
@@ -63,11 +53,11 @@ sh <(curl -L https://raw.githubusercontent.com/LinuxBeginnings/Hyprland-Dots/mai
```
- You can use the above command to automatically clone the `Distro-Hyprland` install scripts
-- It will clone the install script and start the `install.sh` 😎
+- It will clone the install script and start the `install.sh`
-### 👁️‍🗨️ My Hyprland install Scripts 👁️‍🗨️
+### 👁️‍🗨️ My Hyprland install Scripts
-- Automated Hyprland Scripts for Distro of choice which will pull this dotfiles if opted to install these configurations
+Automated Hyprland Scripts for Distro of choice which will pull this dotfiles if opted to install these configurations
- [Arch-Linux](https://github.com/LinuxBeginnings/Arch-Hyprland)
@@ -80,36 +70,35 @@ sh <(curl -L https://raw.githubusercontent.com/LinuxBeginnings/Hyprland-Dots/mai
- [NixOS (25.05+)](https://github.com/LinuxBeginnings/NixOS-Hyprland)
- [Ubuntu 24.04 LTS](https://github.com/LinuxBeginnings/Ubuntu-Hyprland/tree/24.04)
-- [Ubuntu 24.10 (depreciated)](https://github.com/LinuxBeginnings/Ubuntu-Hyprland/tree/24.10)
-- [Ubuntu 25.04 (depreciated)](https://github.com/LinuxBeginnings/Ubuntu-Hyprland/tree/25.04)
+- [Ubuntu 24.10 (deprecated)](https://github.com/LinuxBeginnings/Ubuntu-Hyprland/tree/24.10)
+- [Ubuntu 25.04 (deprecated)](https://github.com/LinuxBeginnings/Ubuntu-Hyprland/tree/25.04)
- [Ubuntu 25.10](https://github.com/LinuxBeginnings/Ubuntu-Hyprland/tree/25.10)
---
-### 🪧 Attention 🪧
+### 🪧 Attention
- This repo does NOT contain or will NOT install any packages. These are only pre-configured-hyprland configs or dotfiles
- refer to install scripts what packages needed to install... but at least, Hyprland packages are required
- This repo will be pulled by the Distro-Hyprland install scripts above if you opt to download pre-configured dots
-### 👀 Screenshots 👀
+### 👀 Screenshots
- All screenshots are collected here [Screenshots](https://github.com/LinuxBeginnings/screenshots/tree/main/Hyprland-ScreenShots)
-### 📦 Whats new?
+### 📦 What's new?
- To easily track changes, I will be updating the [CHANGELOGS](https://github.com/LinuxBeginnings/Hyprland-Dots/wiki/Changelogs) Screenshots will be included if worth mentioning the changes!
-> [!NOTE]
-> Kindly note that by default, Kools Dots are adjusted / configured for 2k (1440p) display without scaling.
-
-### 💥 Copying / Installation / Update instructions 💥
+### 💥 Installation/Update instructions
- [`MORE INFO HERE`](https://github.com/LinuxBeginnings/Hyprland-Dots/wiki/Install_&_Update)
> [!Note]
> The auto copy script `copy.sh` will create backups of intended directories to be copied.
> However, it's still a good idea to manually backup just incase script fails to backup your configuration.
> If you already have a hyprland configuration, uninstall it first, or create a new user, and install it with that user
+
+> To download from main branch
- Clone this repo by using `git`.
- Change directory, i.e. `cd Arch-Hyprland`
- Make `install.sh` executable `chmod +x ./install.sh`
@@ -119,16 +108,14 @@ sh <(curl -L https://raw.githubusercontent.com/LinuxBeginnings/Hyprland-Dots/mai
> Note: Ubuntu is exception, it has version specific branches
```bash
-git clone --depth=1 https://github.com/LinuxBeginnings/Hyprland-Dots.git
-cd Hyprland-Dots
+git clone --depth=1 https://github.com/LinuxBeginnings/Hyprland-Dots.git && cd Hyprland-Dots
```
-> to download from Development branch (development and testing)
-> Not recommeded for non-testing systems
+> To download from Development branch
+> Not recommended for non-testing systems
```bash
-git clone --depth=1 https://github.com/LinuxBeginnings/Hyprland-Dots.git -b development
-cd Hyprland-Dots
+git clone --depth=1 https://github.com/LinuxBeginnings/Hyprland-Dots.git -b development && cd Hyprland-Dots
```
- automatic copy/install of pre-configured dots (recommended for updating)
@@ -138,95 +125,55 @@ chmod +x copy.sh
./copy.sh
```
-- to copy/install from releases (stable) (note this is 1 version older than in main)
-
-```bash
-chmod +x release.sh
-./release.sh
-```
-
-- UPGRADE.sh function
- > [!IMPORTANT]
- > You need rsync for it to work
- > you should have already up and running KooL's Hyprland before using this function
-
-```bash
-chmod +x upgrade.sh
-./upgrade.sh
-```
-
-## ❗❗❗ DEBIAN AND UBUNTU!
-
-- Debian 13
- - Now builds Hyprland 0.51.1 from source using the `install.sh` script
- - So the current version of Hyprland-Dots is compatible only in those cases.
-
-- Ubuntu 24.04/25.10
- - We are now using a PPA to get more current versions of Hyprland.
- - So the current version of these Dotfiles are compatible if you updated to the PPA based configuration.
-
-#### ⚠️⚠️⚠️ ATTENTION - BACKUPS CREATED by SCRIPT
+#### ⚠️ BACKUPS CREATED by SCRIPT
> [!CAUTION]
-> `copy.sh`, `release.sh` and even `upgrade.sh` creates a backup!
+> `copy.sh` creates a backup!
> Kindly investigate manually contents on your `$HOME/.config`
> Delete manually any backups which you dont want.
#### 🛎️ a small note on wallpapers
-- by default, only few wallpapers will be copied (1 each dark and light plus 3 more). You will be offered to download more wallpapers. You can preview/check the additional wallpapers from [`THIS`](https://github.com/LinuxBeginnings/Wallpaper-Bank/tree/main/wallpapers) Link
-
-#### ⚠️⚠️⚠️ A MUST! after copying / Installing these dots
-
-- Press `SUPER W` and set a wallpaper. This is also to initiate wallust for waybar, kitty (tty) and rofi themes.
-- However, If you use the `copy.sh` or the `release.sh`, there will be a preset initial Wallpaper and you dont have to do this
-
-- Nvidia Owners. Make sure to edit your `~/.config/hypr/UserConfigs/ENVariables.conf` (highly recommended).
+- by default, only few wallpapers will be copied (1 each dark and light plus 3 more). You will be offered to download more wallpapers. You can preview/check the additional wallpapers from this [`LINK`](https://github.com/LinuxBeginnings/Wallpaper-Bank/tree/main/wallpapers)
-* NVIDIA users / owners, after installation, check [`THIS`](https://github.com/LinuxBeginnings/Hyprland-Dots/wiki/Notes_to_remember#--for-nvidia-gpu-users)
+#### ⚠️ after installing these dots
+- NVIDIA Owners.
+ - After installation, check [`THIS`](https://github.com/LinuxBeginnings/Hyprland-Dots/wiki/FAQ_NVIDIA)
+ - Make sure to edit your `~/.config/hypr/UserConfigs/ENVariables.conf` (highly recommended).
- If you have already set your own keybinds, monitors, etc.... Just copy over from backup created before log-out or reboot. (recommended)
-#### 📖 Known issues and possible solutions
-
-- check out this page [FAQ](https://github.com/LinuxBeginnings/Hyprland-Dots/wiki/FAQ) and [UNSOLVED ISSUES](https://github.com/LinuxBeginnings/Hyprland-Dots/wiki/Known_Issues)
-
-#### 🙋 QUESTIONS ?!?! ⁉️
+#### 🙋 QUESTIONS ?
- FAQ! Yes you can use these dotfiles to other distro! Just ensure to install proper packages first! If it makes you feel better, I use same config on my Gentoo:)
-- QUICK HINT! Click the HINT! Waybar module (note only available in Waybar default and Simple-L [TOP] layout). Can be launched by Keybind `SUPER H`
+- QUICK HINT! Click the HINT! Waybar module (only available on some layouts). Also can be launched by keybind `SUPER + H`
- More question? click here browse through this [WIKI](https://github.com/LinuxBeginnings/Hyprland-Dots/wiki/)
-- If you want the old configs, it is collected on my "Archive" repo. See [HERE](https://github.com/LinuxBeginnings/Hyprland-Dots-releases-Archive)
#### ⌨ Keybinds
-- Keybinds [`CLICK`](https://github.com/LinuxBeginnings/Hyprland-Dots/wiki/Keybinds)
+- Keybinds [`HERE`](https://github.com/LinuxBeginnings/Hyprland-Dots/wiki/Keybinds)
-#### 🙏 Special request
+### ✍️ Contributing
- If you have improvements on the dotfiles or configuration, feel free to submit a PR for improvement.
- I always welcome improvements as I am also just learning just like you guys!
+- Click [`HERE`](https://github.com/LinuxBeginnings/Hyprland-Dots/blob/main/CONTRIBUTING.md) for a guide how to contribute
-#### ✍️ Contributing
+> Thanks to all who have contributed code, or support on the Discord server. Your efforts are greatly appreciated
+### 🔮 Discord Server
- Want to contribute? Click [`HERE`](https://github.com/LinuxBeginnings/Hyprland-Dots/blob/main/CONTRIBUTING.md) for a guide how to contribute
> Thanks to all who have contributed code, or support on the Discord server. You efforts are greatly appreciated
-#### 🤷‍♂️ TO DO!
-
-- [ ] Tweak dots - 🚧 in constant progress
-
-#### 🔮 Discord Server
+- kindly join my [Discord](https://discord.gg/RZJgC7KAKm)
-- kindly join my [Discord](https://discord.com/invite/kool-tech-world)
-
-#### 💖 Support
+### 💖 Support
- a Star on my Github repos would be nice 🌟
-
-- Subscribe to my Youtube Channel [YouTube](https://www.youtube.com/@Ja.KooLit)
+- Subscribe to my Youtube Channel [YouTube](https://www.youtube.com/@LinuxBeginnings)
## 🫰 Thank you for the stars 🩷
+
### Document translations
- Spanish: [Código de Conducta](./i18n/CODE_OF_CONDUCT/CODE_OF_CONDUCT.es.md) · [Guía de mensajes de commit](./i18n/COMMIT_MESSAGE_GUIDELINES/COMMIT_MESSAGE_GUIDELINES.es.md) · [Guía de contribución](./i18n/CONTRIBUTING/CONTRIBUTING.es.md)
diff --git a/archive/release.sh b/archive/release.sh
index 78df3444..8262708c 100755
--- a/archive/release.sh
+++ b/archive/release.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# For downloading dots from releases
# Set some colors for output messages
diff --git a/archive/update-dots.sh b/archive/update-dots.sh
index 84bd7611..4ac97bec 100755
--- a/archive/update-dots.sh
+++ b/archive/update-dots.sh
@@ -1,4 +1,10 @@
#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
set -euo pipefail
IFS=$'\n\t'
diff --git a/archive/upgrade.sh b/archive/upgrade.sh
index 63375762..f8442ded 100755
--- a/archive/upgrade.sh
+++ b/archive/upgrade.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# for Semi-Manual upgrading your system.
# NOTE: requires rsync
diff --git a/config/fastfetch/images/Arch-Logo-1.png b/config/fastfetch/images/Arch-Logo-1.png
new file mode 100644
index 00000000..0a587b3e
--- /dev/null
+++ b/config/fastfetch/images/Arch-Logo-1.png
Binary files differ
diff --git a/config/fastfetch/images/Arch-Logo-2.png b/config/fastfetch/images/Arch-Logo-2.png
new file mode 100644
index 00000000..b0abc76b
--- /dev/null
+++ b/config/fastfetch/images/Arch-Logo-2.png
Binary files differ
diff --git a/config/fastfetch/images/debian_swirl.png b/config/fastfetch/images/debian_swirl.png
new file mode 100755
index 00000000..d45dffce
--- /dev/null
+++ b/config/fastfetch/images/debian_swirl.png
Binary files differ
diff --git a/config/fastfetch/images/fedora.png b/config/fastfetch/images/fedora.png
new file mode 100644
index 00000000..2fdc5793
--- /dev/null
+++ b/config/fastfetch/images/fedora.png
Binary files differ
diff --git a/config/fastfetch/images/gentoo1.png b/config/fastfetch/images/gentoo1.png
new file mode 100644
index 00000000..65e6a934
--- /dev/null
+++ b/config/fastfetch/images/gentoo1.png
Binary files differ
diff --git a/config/fastfetch/images/gentoo2.png b/config/fastfetch/images/gentoo2.png
new file mode 100644
index 00000000..d9db41bf
--- /dev/null
+++ b/config/fastfetch/images/gentoo2.png
Binary files differ
diff --git a/config/fastfetch/images/nixos.png b/config/fastfetch/images/nixos.png
new file mode 100755
index 00000000..571410a7
--- /dev/null
+++ b/config/fastfetch/images/nixos.png
Binary files differ
diff --git a/config/fastfetch/images/ubuntu.jpeg b/config/fastfetch/images/ubuntu.jpeg
new file mode 100644
index 00000000..62da0561
--- /dev/null
+++ b/config/fastfetch/images/ubuntu.jpeg
Binary files differ
diff --git a/config/fastfetch/images/ubuntu.png b/config/fastfetch/images/ubuntu.png
new file mode 100644
index 00000000..f54657ed
--- /dev/null
+++ b/config/fastfetch/images/ubuntu.png
Binary files differ
diff --git a/config/fastfetch/kooldots-arch.jsonc b/config/fastfetch/kooldots-arch.jsonc
new file mode 100644
index 00000000..bb1f2cd8
--- /dev/null
+++ b/config/fastfetch/kooldots-arch.jsonc
@@ -0,0 +1,150 @@
+{
+ "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
+
+ "logo": {
+ "type": "kitty-direct",
+ "source": "$HOME/.config/fastfetch/images/Arch-Logo-2.png",
+ // "type": "small",
+ "width": 20,
+ "height": 10,
+ "padding": {
+ "top": 4,
+ "right": 4,
+ "left": 2,
+ },
+ },
+
+ "display": {
+ "separator": " ",
+ "color": {
+ "keys": "white",
+ },
+ "key": {
+ "width": 18,
+ },
+ "brightColor": false,
+ },
+
+ "modules": [
+ "break",
+ "break",
+
+ // ── Identity header ────────────────────────────────────────────
+ // {
+ // "type": "custom",
+ // "format": "\u001b[1m\u001b[38;5;197m <---- KoolDots ---->\u001b[0m"
+ // },
+ // "break",
+
+ "break",
+ // ── System ─────────────────────────────────────────────────────
+ {
+ "type": "custom",
+ "format": "\u001b[38;5;197m── \u001b[1m\u001b[38;5;231mSYSTEM\u001b[0m \u001b[38;5;197m──────────────────────────\u001b[0m",
+ },
+ {
+ "type": "os",
+ "key": " {icon} OS",
+ },
+ {
+ "type": "kernel",
+ "key": " {icon} Kernel",
+ },
+ {
+ "type": "command",
+ "key": " {icon} Hostname",
+ "text": "printf '%s@%s' \"$USER\" \"$(hostname)\"",
+ },
+ {
+ "type": "uptime",
+ "key": " {icon} Uptime",
+ },
+ {
+ "type": "packages",
+ "key": " {icon} Packages",
+ },
+ {
+ "type": "disk",
+ "key": " {icon} OS Age",
+ "folders": "/",
+ "format": "installed {create-time:10} ({days} days ago)",
+ },
+ "break",
+
+ // ── Hardware ───────────────────────────────────────────────────
+ {
+ "type": "custom",
+ "format": "\u001b[38;5;197m── \u001b[1m\u001b[38;5;231mHARDWARE\u001b[0m \u001b[38;5;197m────────────────────────\u001b[0m",
+ },
+ {
+ "type": "host",
+ "key": " {icon} Machine",
+ "format": "{name}",
+ },
+ {
+ "type": "cpu",
+ "key": " {icon} CPU",
+ "showPeCoreCount": true,
+ },
+ {
+ "type": "gpu",
+ "key": " {icon} GPU",
+ },
+ {
+ "type": "memory",
+ "key": " {icon} RAM",
+ "percent": {
+ "type": 3,
+ "green": 40,
+ "yellow": 75,
+ },
+ },
+ {
+ "type": "disk",
+ "key": " {icon} Disk",
+ "format": "{size-used} / {size-total} ({size-percentage})",
+ },
+ "break",
+
+ // ── Desktop ────────────────────────────────────────────────────
+ {
+ "type": "custom",
+ "format": "\u001b[38;5;197m── \u001b[1m\u001b[38;5;231mDESKTOP\u001b[0m \u001b[38;5;197m─────────────────────────\u001b[0m",
+ },
+ {
+ "type": "wm",
+ "key": " {icon} WM",
+ },
+ {
+ "type": "command",
+ "key": "  KoolDots",
+ "text": "echo v${DOTS_VERSION}",
+ },
+ {
+ "type": "display",
+ "key": " {icon} Display",
+ "compactType": "original-with-refresh-rate",
+ },
+ {
+ "type": "shell",
+ "key": " {icon} Shell",
+ },
+ {
+ "type": "terminal",
+ "key": " {icon} Terminal",
+ },
+ {
+ "type": "editor",
+ "key": " {icon} Editor",
+ },
+ "break",
+
+ // ── Footer ─────────────────────────────────────────────────────
+ // {
+ // black → dark pink → hot pink → light pink → white
+ // "type": "custom",
+ // "format": " \u001b[48;5;232m \u001b[48;5;53m \u001b[48;5;89m \u001b[48;5;125m \u001b[48;5;161m \u001b[48;5;197m \u001b[48;5;198m \u001b[48;5;199m \u001b[48;5;205m \u001b[48;5;211m \u001b[48;5;224m \u001b[48;5;231m \u001b[0m"
+ // },
+ "break",
+ ],
+}
diff --git a/config/fastfetch/kooldots-debian.jsonc b/config/fastfetch/kooldots-debian.jsonc
new file mode 100644
index 00000000..f66233fb
--- /dev/null
+++ b/config/fastfetch/kooldots-debian.jsonc
@@ -0,0 +1,150 @@
+{
+ "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
+
+ "logo": {
+ "type": "kitty-direct",
+ "source": "$HOME/.config/fastfetch/images/debian_swirl.png",
+ // "type": "small",
+ "width": 20,
+ "height": 10,
+ "padding": {
+ "top": 4,
+ "right": 4,
+ "left": 2,
+ },
+ },
+
+ "display": {
+ "separator": " ",
+ "color": {
+ "keys": "white",
+ },
+ "key": {
+ "width": 18,
+ },
+ "brightColor": false,
+ },
+
+ "modules": [
+ "break",
+ "break",
+
+ // ── Identity header ────────────────────────────────────────────
+ // {
+ // "type": "custom",
+ // "format": "\u001b[1m\u001b[38;5;197m <---- KoolDots ---->\u001b[0m"
+ // },
+ // "break",
+
+ "break",
+ // ── System ─────────────────────────────────────────────────────
+ {
+ "type": "custom",
+ "format": "\u001b[38;5;197m── \u001b[1m\u001b[38;5;231mSYSTEM\u001b[0m \u001b[38;5;197m──────────────────────────\u001b[0m",
+ },
+ {
+ "type": "os",
+ "key": " {icon} OS",
+ },
+ {
+ "type": "kernel",
+ "key": " {icon} Kernel",
+ },
+ {
+ "type": "command",
+ "key": " {icon} Hostname",
+ "text": "printf '%s@%s' \"$USER\" \"$(hostname)\"",
+ },
+ {
+ "type": "uptime",
+ "key": " {icon} Uptime",
+ },
+ {
+ "type": "packages",
+ "key": " {icon} Packages",
+ },
+ {
+ "type": "disk",
+ "key": " {icon} OS Age",
+ "folders": "/",
+ "format": "installed {create-time:10} ({days} days ago)",
+ },
+ "break",
+
+ // ── Hardware ───────────────────────────────────────────────────
+ {
+ "type": "custom",
+ "format": "\u001b[38;5;197m── \u001b[1m\u001b[38;5;231mHARDWARE\u001b[0m \u001b[38;5;197m────────────────────────\u001b[0m",
+ },
+ {
+ "type": "host",
+ "key": " {icon} Machine",
+ "format": "{name}",
+ },
+ {
+ "type": "cpu",
+ "key": " {icon} CPU",
+ "showPeCoreCount": true,
+ },
+ {
+ "type": "gpu",
+ "key": " {icon} GPU",
+ },
+ {
+ "type": "memory",
+ "key": " {icon} RAM",
+ "percent": {
+ "type": 3,
+ "green": 40,
+ "yellow": 75,
+ },
+ },
+ {
+ "type": "disk",
+ "key": " {icon} Disk",
+ "format": "{size-used} / {size-total} ({size-percentage})",
+ },
+ "break",
+
+ // ── Desktop ────────────────────────────────────────────────────
+ {
+ "type": "custom",
+ "format": "\u001b[38;5;197m── \u001b[1m\u001b[38;5;231mDESKTOP\u001b[0m \u001b[38;5;197m─────────────────────────\u001b[0m",
+ },
+ {
+ "type": "wm",
+ "key": " {icon} WM",
+ },
+ {
+ "type": "command",
+ "key": "  KoolDots",
+ "text": "echo v${DOTS_VERSION}",
+ },
+ {
+ "type": "display",
+ "key": " {icon} Display",
+ "compactType": "original-with-refresh-rate",
+ },
+ {
+ "type": "shell",
+ "key": " {icon} Shell",
+ },
+ {
+ "type": "terminal",
+ "key": " {icon} Terminal",
+ },
+ {
+ "type": "editor",
+ "key": " {icon} Editor",
+ },
+ "break",
+
+ // ── Footer ─────────────────────────────────────────────────────
+ // {
+ // black → dark pink → hot pink → light pink → white
+ // "type": "custom",
+ // "format": " \u001b[48;5;232m \u001b[48;5;53m \u001b[48;5;89m \u001b[48;5;125m \u001b[48;5;161m \u001b[48;5;197m \u001b[48;5;198m \u001b[48;5;199m \u001b[48;5;205m \u001b[48;5;211m \u001b[48;5;224m \u001b[48;5;231m \u001b[0m"
+ // },
+ "break",
+ ],
+}
diff --git a/config/fastfetch/kooldots-fedora.jsonc b/config/fastfetch/kooldots-fedora.jsonc
new file mode 100644
index 00000000..4a877680
--- /dev/null
+++ b/config/fastfetch/kooldots-fedora.jsonc
@@ -0,0 +1,150 @@
+{
+ "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
+
+ "logo": {
+ "type": "kitty-direct",
+ "source": "$HOME/.config/fastfetch/images/fedora.png",
+ // "type": "small",
+ "width": 20,
+ "height": 10,
+ "padding": {
+ "top": 4,
+ "right": 4,
+ "left": 2,
+ },
+ },
+
+ "display": {
+ "separator": " ",
+ "color": {
+ "keys": "white",
+ },
+ "key": {
+ "width": 18,
+ },
+ "brightColor": false,
+ },
+
+ "modules": [
+ "break",
+ "break",
+
+ // ── Identity header ────────────────────────────────────────────
+ // {
+ // "type": "custom",
+ // "format": "\u001b[1m\u001b[38;5;197m <---- KoolDots ---->\u001b[0m"
+ // },
+ // "break",
+
+ "break",
+ // ── System ─────────────────────────────────────────────────────
+ {
+ "type": "custom",
+ "format": "\u001b[38;5;197m── \u001b[1m\u001b[38;5;231mSYSTEM\u001b[0m \u001b[38;5;197m──────────────────────────\u001b[0m",
+ },
+ {
+ "type": "os",
+ "key": " {icon} OS",
+ },
+ {
+ "type": "kernel",
+ "key": " {icon} Kernel",
+ },
+ {
+ "type": "command",
+ "key": " {icon} Hostname",
+ "text": "printf '%s@%s' \"$USER\" \"$(hostname)\"",
+ },
+ {
+ "type": "uptime",
+ "key": " {icon} Uptime",
+ },
+ {
+ "type": "packages",
+ "key": " {icon} Packages",
+ },
+ {
+ "type": "disk",
+ "key": " {icon} OS Age",
+ "folders": "/",
+ "format": "installed {create-time:10} ({days} days ago)",
+ },
+ "break",
+
+ // ── Hardware ───────────────────────────────────────────────────
+ {
+ "type": "custom",
+ "format": "\u001b[38;5;197m── \u001b[1m\u001b[38;5;231mHARDWARE\u001b[0m \u001b[38;5;197m────────────────────────\u001b[0m",
+ },
+ {
+ "type": "host",
+ "key": " {icon} Machine",
+ "format": "{name}",
+ },
+ {
+ "type": "cpu",
+ "key": " {icon} CPU",
+ "showPeCoreCount": true,
+ },
+ {
+ "type": "gpu",
+ "key": " {icon} GPU",
+ },
+ {
+ "type": "memory",
+ "key": " {icon} RAM",
+ "percent": {
+ "type": 3,
+ "green": 40,
+ "yellow": 75,
+ },
+ },
+ {
+ "type": "disk",
+ "key": " {icon} Disk",
+ "format": "{size-used} / {size-total} ({size-percentage})",
+ },
+ "break",
+
+ // ── Desktop ────────────────────────────────────────────────────
+ {
+ "type": "custom",
+ "format": "\u001b[38;5;197m── \u001b[1m\u001b[38;5;231mDESKTOP\u001b[0m \u001b[38;5;197m─────────────────────────\u001b[0m",
+ },
+ {
+ "type": "wm",
+ "key": " {icon} WM",
+ },
+ {
+ "type": "command",
+ "key": "  KoolDots",
+ "text": "echo v${DOTS_VERSION}",
+ },
+ {
+ "type": "display",
+ "key": " {icon} Display",
+ "compactType": "original-with-refresh-rate",
+ },
+ {
+ "type": "shell",
+ "key": " {icon} Shell",
+ },
+ {
+ "type": "terminal",
+ "key": " {icon} Terminal",
+ },
+ {
+ "type": "editor",
+ "key": " {icon} Editor",
+ },
+ "break",
+
+ // ── Footer ─────────────────────────────────────────────────────
+ // {
+ // black → dark pink → hot pink → light pink → white
+ // "type": "custom",
+ // "format": " \u001b[48;5;232m \u001b[48;5;53m \u001b[48;5;89m \u001b[48;5;125m \u001b[48;5;161m \u001b[48;5;197m \u001b[48;5;198m \u001b[48;5;199m \u001b[48;5;205m \u001b[48;5;211m \u001b[48;5;224m \u001b[48;5;231m \u001b[0m"
+ // },
+ "break",
+ ],
+}
diff --git a/config/fastfetch/kooldots-gentoo.jsonc b/config/fastfetch/kooldots-gentoo.jsonc
new file mode 100644
index 00000000..591f7755
--- /dev/null
+++ b/config/fastfetch/kooldots-gentoo.jsonc
@@ -0,0 +1,150 @@
+{
+ "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
+
+ "logo": {
+ "type": "kitty-direct",
+ "source": "$HOME/.config/fastfetch/images/gentoo1.png",
+ // "type": "small",
+ "width": 20,
+ "height": 10,
+ "padding": {
+ "top": 4,
+ "right": 4,
+ "left": 2
+ }
+ },
+
+ "display": {
+ "separator": " ",
+ "color": {
+ "keys": "white"
+ },
+ "key": {
+ "width": 18
+ },
+ "brightColor": false
+ },
+
+ "modules": [
+ "break",
+ "break",
+
+ // ── Identity header ────────────────────────────────────────────
+ // {
+ // "type": "custom",
+ // "format": "\u001b[1m\u001b[38;5;197m <---- KoolDots ---->\u001b[0m"
+ // },
+ // "break",
+
+ "break",
+ // ── System ─────────────────────────────────────────────────────
+ {
+ "type": "custom",
+ "format": "\u001b[38;5;197m── \u001b[1m\u001b[38;5;231mSYSTEM\u001b[0m \u001b[38;5;197m──────────────────────────\u001b[0m"
+ },
+ {
+ "type": "os",
+ "key": " {icon} OS"
+ },
+ {
+ "type": "kernel",
+ "key": " {icon} Kernel"
+ },
+ {
+ "type": "command",
+ "key": " {icon} Hostname",
+ "text": "printf '%s@%s' \"$USER\" \"$(hostname)\""
+ },
+ {
+ "type": "uptime",
+ "key": " {icon} Uptime"
+ },
+ {
+ "type": "packages",
+ "key": " {icon} Packages"
+ },
+ {
+ "type": "disk",
+ "key": " {icon} OS Age",
+ "folders": "/",
+ "format": "installed {create-time:10} ({days} days ago)"
+ },
+ "break",
+
+ // ── Hardware ───────────────────────────────────────────────────
+ {
+ "type": "custom",
+ "format": "\u001b[38;5;197m── \u001b[1m\u001b[38;5;231mHARDWARE\u001b[0m \u001b[38;5;197m────────────────────────\u001b[0m"
+ },
+ {
+ "type": "host",
+ "key": " {icon} Machine",
+ "format": "{name}"
+ },
+ {
+ "type": "cpu",
+ "key": " {icon} CPU",
+ "showPeCoreCount": true
+ },
+ {
+ "type": "gpu",
+ "key": " {icon} GPU"
+ },
+ {
+ "type": "memory",
+ "key": " {icon} RAM",
+ "percent": {
+ "type": 3,
+ "green": 40,
+ "yellow": 75
+ }
+ },
+ {
+ "type": "disk",
+ "key": " {icon} Disk",
+ "format": "{size-used} / {size-total} ({size-percentage})"
+ },
+ "break",
+
+ // ── Desktop ────────────────────────────────────────────────────
+ {
+ "type": "custom",
+ "format": "\u001b[38;5;197m── \u001b[1m\u001b[38;5;231mDESKTOP\u001b[0m \u001b[38;5;197m─────────────────────────\u001b[0m"
+ },
+ {
+ "type": "wm",
+ "key": " {icon} WM"
+ },
+ {
+ "type": "command",
+ "key": "  KoolDots",
+ "text": "echo v${DOTS_VERSION}"
+ },
+ {
+ "type": "display",
+ "key": " {icon} Display",
+ "compactType": "original-with-refresh-rate"
+ },
+ {
+ "type": "shell",
+ "key": " {icon} Shell"
+ },
+ {
+ "type": "terminal",
+ "key": " {icon} Terminal"
+ },
+ {
+ "type": "editor",
+ "key": " {icon} Editor"
+ },
+ "break",
+
+ // ── Footer ─────────────────────────────────────────────────────
+ // {
+ // black → dark pink → hot pink → light pink → white
+ // "type": "custom",
+ // "format": " \u001b[48;5;232m \u001b[48;5;53m \u001b[48;5;89m \u001b[48;5;125m \u001b[48;5;161m \u001b[48;5;197m \u001b[48;5;198m \u001b[48;5;199m \u001b[48;5;205m \u001b[48;5;211m \u001b[48;5;224m \u001b[48;5;231m \u001b[0m"
+ // },
+ "break"
+ ]
+}
diff --git a/config/fastfetch/kooldots-nixos.jsonc b/config/fastfetch/kooldots-nixos.jsonc
new file mode 100644
index 00000000..54cb39e8
--- /dev/null
+++ b/config/fastfetch/kooldots-nixos.jsonc
@@ -0,0 +1,150 @@
+{
+ "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
+
+ "logo": {
+ "type": "kitty-direct",
+ "source": "$HOME/.config/fastfetch/images/nixos.png",
+ // "type": "small",
+ "width": 20,
+ "height": 10,
+ "padding": {
+ "top": 4,
+ "right": 4,
+ "left": 2,
+ },
+ },
+
+ "display": {
+ "separator": " ",
+ "color": {
+ "keys": "white",
+ },
+ "key": {
+ "width": 18,
+ },
+ "brightColor": false,
+ },
+
+ "modules": [
+ "break",
+ "break",
+
+ // ── Identity header ────────────────────────────────────────────
+ // {
+ // "type": "custom",
+ // "format": "\u001b[1m\u001b[38;5;197m <---- KoolDots ---->\u001b[0m"
+ // },
+ // "break",
+
+ "break",
+ // ── System ─────────────────────────────────────────────────────
+ {
+ "type": "custom",
+ "format": "\u001b[38;5;197m── \u001b[1m\u001b[38;5;231mSYSTEM\u001b[0m \u001b[38;5;197m──────────────────────────\u001b[0m",
+ },
+ {
+ "type": "os",
+ "key": " {icon} OS",
+ },
+ {
+ "type": "kernel",
+ "key": " {icon} Kernel",
+ },
+ {
+ "type": "command",
+ "key": " {icon} Hostname",
+ "text": "printf '%s@%s' \"$USER\" \"$(hostname)\"",
+ },
+ {
+ "type": "uptime",
+ "key": " {icon} Uptime",
+ },
+ {
+ "type": "packages",
+ "key": " {icon} Packages",
+ },
+ {
+ "type": "disk",
+ "key": " {icon} OS Age",
+ "folders": "/",
+ "format": "installed {create-time:10} ({days} days ago)",
+ },
+ "break",
+
+ // ── Hardware ───────────────────────────────────────────────────
+ {
+ "type": "custom",
+ "format": "\u001b[38;5;197m── \u001b[1m\u001b[38;5;231mHARDWARE\u001b[0m \u001b[38;5;197m────────────────────────\u001b[0m",
+ },
+ {
+ "type": "host",
+ "key": " {icon} Machine",
+ "format": "{name}",
+ },
+ {
+ "type": "cpu",
+ "key": " {icon} CPU",
+ "showPeCoreCount": true,
+ },
+ {
+ "type": "gpu",
+ "key": " {icon} GPU",
+ },
+ {
+ "type": "memory",
+ "key": " {icon} RAM",
+ "percent": {
+ "type": 3,
+ "green": 40,
+ "yellow": 75,
+ },
+ },
+ {
+ "type": "disk",
+ "key": " {icon} Disk",
+ "format": "{size-used} / {size-total} ({size-percentage})",
+ },
+ "break",
+
+ // ── Desktop ────────────────────────────────────────────────────
+ {
+ "type": "custom",
+ "format": "\u001b[38;5;197m── \u001b[1m\u001b[38;5;231mDESKTOP\u001b[0m \u001b[38;5;197m─────────────────────────\u001b[0m",
+ },
+ {
+ "type": "wm",
+ "key": " {icon} WM",
+ },
+ {
+ "type": "command",
+ "key": "  KoolDots",
+ "text": "echo v${DOTS_VERSION}",
+ },
+ {
+ "type": "display",
+ "key": " {icon} Display",
+ "compactType": "original-with-refresh-rate",
+ },
+ {
+ "type": "shell",
+ "key": " {icon} Shell",
+ },
+ {
+ "type": "terminal",
+ "key": " {icon} Terminal",
+ },
+ {
+ "type": "editor",
+ "key": " {icon} Editor",
+ },
+ "break",
+
+ // ── Footer ─────────────────────────────────────────────────────
+ // {
+ // black → dark pink → hot pink → light pink → white
+ // "type": "custom",
+ // "format": " \u001b[48;5;232m \u001b[48;5;53m \u001b[48;5;89m \u001b[48;5;125m \u001b[48;5;161m \u001b[48;5;197m \u001b[48;5;198m \u001b[48;5;199m \u001b[48;5;205m \u001b[48;5;211m \u001b[48;5;224m \u001b[48;5;231m \u001b[0m"
+ // },
+ "break",
+ ],
+}
diff --git a/config/fastfetch/kooldots-ubuntu.jsonc b/config/fastfetch/kooldots-ubuntu.jsonc
new file mode 100644
index 00000000..1bf94987
--- /dev/null
+++ b/config/fastfetch/kooldots-ubuntu.jsonc
@@ -0,0 +1,150 @@
+{
+ "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
+
+ "logo": {
+ "type": "kitty-direct",
+ "source": "$HOME/.config/fastfetch/images/ubuntu.png",
+ // "type": "small",
+ "width": 20,
+ "height": 10,
+ "padding": {
+ "top": 4,
+ "right": 4,
+ "left": 2
+ }
+ },
+
+ "display": {
+ "separator": " ",
+ "color": {
+ "keys": "white"
+ },
+ "key": {
+ "width": 18
+ },
+ "brightColor": false
+ },
+
+ "modules": [
+ "break",
+ "break",
+
+ // ── Identity header ────────────────────────────────────────────
+ // {
+ // "type": "custom",
+ // "format": "\u001b[1m\u001b[38;5;197m <---- KoolDots ---->\u001b[0m"
+ // },
+ // "break",
+
+ "break",
+ // ── System ─────────────────────────────────────────────────────
+ {
+ "type": "custom",
+ "format": "\u001b[38;5;197m── \u001b[1m\u001b[38;5;231mSYSTEM\u001b[0m \u001b[38;5;197m──────────────────────────\u001b[0m"
+ },
+ {
+ "type": "os",
+ "key": " {icon} OS"
+ },
+ {
+ "type": "kernel",
+ "key": " {icon} Kernel"
+ },
+ {
+ "type": "command",
+ "key": " {icon} Hostname",
+ "text": "printf '%s@%s' \"$USER\" \"$(hostname)\""
+ },
+ {
+ "type": "uptime",
+ "key": " {icon} Uptime"
+ },
+ {
+ "type": "packages",
+ "key": " {icon} Packages"
+ },
+ {
+ "type": "disk",
+ "key": " {icon} OS Age",
+ "folders": "/",
+ "format": "installed {create-time:10} ({days} days ago)"
+ },
+ "break",
+
+ // ── Hardware ───────────────────────────────────────────────────
+ {
+ "type": "custom",
+ "format": "\u001b[38;5;197m── \u001b[1m\u001b[38;5;231mHARDWARE\u001b[0m \u001b[38;5;197m────────────────────────\u001b[0m"
+ },
+ {
+ "type": "host",
+ "key": " {icon} Machine",
+ "format": "{name}"
+ },
+ {
+ "type": "cpu",
+ "key": " {icon} CPU",
+ "showPeCoreCount": true
+ },
+ {
+ "type": "gpu",
+ "key": " {icon} GPU"
+ },
+ {
+ "type": "memory",
+ "key": " {icon} RAM",
+ "percent": {
+ "type": 3,
+ "green": 40,
+ "yellow": 75
+ }
+ },
+ {
+ "type": "disk",
+ "key": " {icon} Disk",
+ "format": "{size-used} / {size-total} ({size-percentage})"
+ },
+ "break",
+
+ // ── Desktop ────────────────────────────────────────────────────
+ {
+ "type": "custom",
+ "format": "\u001b[38;5;197m── \u001b[1m\u001b[38;5;231mDESKTOP\u001b[0m \u001b[38;5;197m─────────────────────────\u001b[0m"
+ },
+ {
+ "type": "wm",
+ "key": " {icon} WM"
+ },
+ {
+ "type": "command",
+ "key": "  KoolDots",
+ "text": "echo v${DOTS_VERSION}"
+ },
+ {
+ "type": "display",
+ "key": " {icon} Display",
+ "compactType": "original-with-refresh-rate"
+ },
+ {
+ "type": "shell",
+ "key": " {icon} Shell"
+ },
+ {
+ "type": "terminal",
+ "key": " {icon} Terminal"
+ },
+ {
+ "type": "editor",
+ "key": " {icon} Editor"
+ },
+ "break",
+
+ // ── Footer ─────────────────────────────────────────────────────
+ // {
+ // black → dark pink → hot pink → light pink → white
+ // "type": "custom",
+ // "format": " \u001b[48;5;232m \u001b[48;5;53m \u001b[48;5;89m \u001b[48;5;125m \u001b[48;5;161m \u001b[48;5;197m \u001b[48;5;198m \u001b[48;5;199m \u001b[48;5;205m \u001b[48;5;211m \u001b[48;5;224m \u001b[48;5;231m \u001b[0m"
+ // },
+ "break"
+ ]
+}
diff --git a/config/ghostty/ghostty.config b/config/ghostty/config
index 42b073d5..fb539f6b 100644
--- a/config/ghostty/ghostty.config
+++ b/config/ghostty/config
@@ -114,9 +114,17 @@ font-size = 12
#font-family-italic = JetBrainsMono NFM Italic
#font-family = BerkeleyMono Nerd Font
-font-family = Iosevka Nerd Font
+#font-family = Iosevka Nerd Font
# font-family = SFMono Nerd Font
+# Font families
+font-family = "Iosevkeley Mono"
+font-family-bold = "Iosevkeley Mono"
+font-family-italic = "Iosevkeley Mono"
+font-family-bold-italic = "Iosevkeley Mono"
+font-family = "Symbols Nerd Font Mono"
+
+
title = "GhosTTY"
wait-after-command = false
diff --git a/config/hypr/UserConfigs/00-Readme b/config/hypr/UserConfigs/00-Readme
index b39873b1..275919bb 100644
--- a/config/hypr/UserConfigs/00-Readme
+++ b/config/hypr/UserConfigs/00-Readme
@@ -1,4 +1,9 @@
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
KooL's Hyprland-Dots
diff --git a/config/hypr/UserConfigs/01-UserDefaults.conf b/config/hypr/UserConfigs/01-UserDefaults.conf
index 7a91336f..dd5f299a 100644
--- a/config/hypr/UserConfigs/01-UserDefaults.conf
+++ b/config/hypr/UserConfigs/01-UserDefaults.conf
@@ -1,4 +1,9 @@
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# This is a file where you put your own default apps, default search Engine etc
diff --git a/config/hypr/UserConfigs/ENVariables.conf b/config/hypr/UserConfigs/ENVariables.conf
index 67861b86..e2b3498a 100644
--- a/config/hypr/UserConfigs/ENVariables.conf
+++ b/config/hypr/UserConfigs/ENVariables.conf
@@ -1,4 +1,9 @@
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Environment variables. See https://wiki.hyprland.org/Configuring/Environment-variables/
# Set your defaults editor through ENV in ~/.config/hypr/UserConfigs/01-UserDefaults.conf
diff --git a/config/hypr/UserConfigs/LaptopDisplay.conf b/config/hypr/UserConfigs/LaptopDisplay.conf
index 9f766582..a9129190 100644
--- a/config/hypr/UserConfigs/LaptopDisplay.conf
+++ b/config/hypr/UserConfigs/LaptopDisplay.conf
@@ -1,3 +1,9 @@
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# NOTE, THIS FILE IS BEING USED by disabling Laptop display monitor behaviour when closing lid.
# See notes on Laptops.conf
diff --git a/config/hypr/UserConfigs/Laptops.conf b/config/hypr/UserConfigs/Laptops.conf
index 463f0b46..b4e3cbdc 100644
--- a/config/hypr/UserConfigs/Laptops.conf
+++ b/config/hypr/UserConfigs/Laptops.conf
@@ -1,4 +1,9 @@
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# See https://wiki.hyprland.org/Configuring/Keywords/ for more variable settings
# These configs are mostly for laptops. This is addemdum to Keybinds.conf
diff --git a/config/hypr/UserConfigs/Startup_Apps.conf b/config/hypr/UserConfigs/Startup_Apps.conf
index f87bbe15..8a3de78a 100644
--- a/config/hypr/UserConfigs/Startup_Apps.conf
+++ b/config/hypr/UserConfigs/Startup_Apps.conf
@@ -1,3 +1,8 @@
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Commands and Apps to be executed at launch
diff --git a/config/hypr/UserConfigs/UserAnimations.conf b/config/hypr/UserConfigs/UserAnimations.conf
index f2d33d93..aebff1be 100644
--- a/config/hypr/UserConfigs/UserAnimations.conf
+++ b/config/hypr/UserConfigs/UserAnimations.conf
@@ -1,4 +1,9 @@
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
animations {
enabled = yes
diff --git a/config/hypr/UserConfigs/UserDecorations.conf b/config/hypr/UserConfigs/UserDecorations.conf
index eaccff80..d962092f 100644
--- a/config/hypr/UserConfigs/UserDecorations.conf
+++ b/config/hypr/UserConfigs/UserDecorations.conf
@@ -1,4 +1,9 @@
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Decoration Settings
# Hyprland Wiki Links
diff --git a/config/hypr/UserConfigs/UserKeybinds.conf b/config/hypr/UserConfigs/UserKeybinds.conf
index 82a7e568..cc19ff78 100644
--- a/config/hypr/UserConfigs/UserKeybinds.conf
+++ b/config/hypr/UserConfigs/UserKeybinds.conf
@@ -1,11 +1,15 @@
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# This is where you put your own keybinds. Be Mindful to check as well ~/.config/hypr/configs/Keybinds.conf to avoid conflict
# if you think I should replace the Pre-defined Keybinds in ~/.config/hypr/configs/Keybinds.conf , submit an issue or let me know in DC and present me a valid reason as to why, such as conflicting with global shortcuts, etc etc
# See https://wiki.hyprland.org/Configuring/Keywords/ for more settings and variables
# See also Laptops.conf for laptops keybinds
-# /* ---- ✴️ Variables ✴️ ---- */ #
$mainMod = SUPER
$scriptsDir = $HOME/.config/hypr/scripts
$UserScripts = $HOME/.config/hypr/UserScripts
diff --git a/config/hypr/UserConfigs/UserSettings.conf b/config/hypr/UserConfigs/UserSettings.conf
index 9bd9131d..51b0adbd 100644
--- a/config/hypr/UserConfigs/UserSettings.conf
+++ b/config/hypr/UserConfigs/UserSettings.conf
@@ -1,4 +1,9 @@
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# User Settings
# This is where you put your own settings as this will not be touched during update
# if the upgrade.sh is used.
diff --git a/config/hypr/UserConfigs/WindowRules.conf b/config/hypr/UserConfigs/WindowRules.conf
index 79fbc24e..b6d65135 100644
--- a/config/hypr/UserConfigs/WindowRules.conf
+++ b/config/hypr/UserConfigs/WindowRules.conf
@@ -1,7 +1,18 @@
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# For window rules and layerrules
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
# This file is used to add or overwrite window rules
# This file will not be modified during dotfiles updates
+
+# Optional Layer rules
+# To Resolve blurred corners in rofi Uncomment
+# layerrule = blur on, ignore_alpha 0, match:namespace rofi
+
+
diff --git a/config/hypr/UserConfigs/WorkSpaceRules.conf b/config/hypr/UserConfigs/WorkSpaceRules.conf
index 78d61389..7d45ec16 100644
--- a/config/hypr/UserConfigs/WorkSpaceRules.conf
+++ b/config/hypr/UserConfigs/WorkSpaceRules.conf
@@ -1,4 +1,9 @@
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# NOTE: THIS IS NOT BEING SOURCED by hyprland
# It is only here as a guide if you want to do it manually
diff --git a/config/hypr/UserScripts/00-Readme b/config/hypr/UserScripts/00-Readme
index 54d7fff2..259fc9d9 100755
--- a/config/hypr/UserScripts/00-Readme
+++ b/config/hypr/UserScripts/00-Readme
@@ -1,4 +1,9 @@
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Place your new scripts here.
# If you need to edit a script from main script (~/.config/hypr/scripts), copy it on this directory, and edit.
diff --git a/config/hypr/UserScripts/RainbowBorders-low-cpu.sh b/config/hypr/UserScripts/RainbowBorders-low-cpu.sh
index bc0ab9ef..a8de4c89 100755
--- a/config/hypr/UserScripts/RainbowBorders-low-cpu.sh
+++ b/config/hypr/UserScripts/RainbowBorders-low-cpu.sh
@@ -1,4 +1,10 @@
#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# RainbowBorders-low-cpu.sh — low-overhead animated rainbow border for Hyprland
#
# Goal
diff --git a/config/hypr/UserScripts/RainbowBorders.bak.sh b/config/hypr/UserScripts/RainbowBorders.bak.sh
index 49de9ea7..87f13c34 100755
--- a/config/hypr/UserScripts/RainbowBorders.bak.sh
+++ b/config/hypr/UserScripts/RainbowBorders.bak.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Smooth border cycling effect using Wallust palette or full rainbow
# Possible values: "wallust_random", "rainbow", "gradient_flow"
diff --git a/config/hypr/UserScripts/RofiBeats.sh b/config/hypr/UserScripts/RofiBeats.sh
index 64e8ee99..057d53b9 100755
--- a/config/hypr/UserScripts/RofiBeats.sh
+++ b/config/hypr/UserScripts/RofiBeats.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# RofiBeats - unified, dynamic UI (add, remove, manage, play)
mDIR="$HOME/Music/"
diff --git a/config/hypr/UserScripts/RofiCalc.sh b/config/hypr/UserScripts/RofiCalc.sh
index 116fc6cc..40a7ca3f 100755
--- a/config/hypr/UserScripts/RofiCalc.sh
+++ b/config/hypr/UserScripts/RofiCalc.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# /* Calculator (using qalculate) and rofi */
# /* Submitted by: https://github.com/JosephArmas */
diff --git a/config/hypr/UserScripts/Tak0-Autodispatch.sh b/config/hypr/UserScripts/Tak0-Autodispatch.sh
index 48c22515..b0607e13 100755
--- a/config/hypr/UserScripts/Tak0-Autodispatch.sh
+++ b/config/hypr/UserScripts/Tak0-Autodispatch.sh
@@ -1,4 +1,10 @@
#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# USAGE:
# 1) Run from terminal:
# ./dispatch.sh <application_command> <target_workspace_number>
diff --git a/config/hypr/UserScripts/WallpaperAutoChange.sh b/config/hypr/UserScripts/WallpaperAutoChange.sh
index 9643c7e9..aa6cf89e 100755
--- a/config/hypr/UserScripts/WallpaperAutoChange.sh
+++ b/config/hypr/UserScripts/WallpaperAutoChange.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# source https://wiki.archlinux.org/title/Hyprland#Using_a_script_to_change_wallpaper_every_X_minutes
# This script will randomly go through the files of a directory, setting it
@@ -10,6 +15,11 @@
wallust_refresh=$HOME/.config/hypr/scripts/RefreshNoWaybar.sh
focused_monitor=$(hyprctl monitors | awk '/^Monitor/{name=$2} /focused: yes/{print name}')
+if command -v awww >/dev/null 2>&1; then
+ WWW="awww"
+else
+ WWW="swww"
+fi
if [[ $# -lt 1 ]] || [[ ! -d $1 ]]; then
echo "Usage:
@@ -31,7 +41,7 @@ while true; do
done \
| sort -n | cut -d':' -f2- \
| while read -r img; do
- swww img -o $focused_monitor "$img"
+ $WWW img -o $focused_monitor "$img"
# Regenerate colors from the exact image path to avoid cache races
$HOME/.config/hypr/scripts/WallustSwww.sh "$img"
# Refresh UI components that depend on wallust output
diff --git a/config/hypr/UserScripts/WallpaperEffects.sh b/config/hypr/UserScripts/WallpaperEffects.sh
index caca56e1..57db3532 100755
--- a/config/hypr/UserScripts/WallpaperEffects.sh
+++ b/config/hypr/UserScripts/WallpaperEffects.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Wallpaper Effects using ImageMagick (SUPER SHIFT W)
# Variables
@@ -9,17 +14,26 @@ wallpaper_output="$HOME/.config/hypr/wallpaper_effects/.wallpaper_modified"
SCRIPTSDIR="$HOME/.config/hypr/scripts"
focused_monitor=$(hyprctl monitors -j | jq -r '.[] | select(.focused) | .name')
rofi_theme="$HOME/.config/rofi/config-wallpaper-effect.rasi"
+if command -v awww >/dev/null 2>&1; then
+ WWW="awww"
+else
+ WWW="swww"
+fi
# Directory for swaync
iDIR="$HOME/.config/swaync/images"
iDIRi="$HOME/.config/swaync/icons"
-# swww transition config
+# swww transition config (only when using swww)
FPS=60
TYPE="wipe"
DURATION=2
BEZIER=".43,1.19,1,.4"
-SWWW_PARAMS="--transition-fps $FPS --transition-type $TYPE --transition-duration $DURATION --transition-bezier $BEZIER"
+if [[ "$WWW" == "swww" ]]; then
+ SWWW_PARAMS="--transition-fps $FPS --transition-type $TYPE --transition-duration $DURATION --transition-bezier $BEZIER"
+else
+ SWWW_PARAMS=""
+fi
# Define ImageMagick effects
declare -A effects=(
@@ -45,7 +59,7 @@ declare -A effects=(
# Function to apply no effects
no-effects() {
- swww img -o "$focused_monitor" "$wallpaper_current" $SWWW_PARAMS &&
+ $WWW img -o "$focused_monitor" "$wallpaper_current" $SWWW_PARAMS &&
wait $!
wallust run "$wallpaper_current" -s &&
wait $!
@@ -83,7 +97,7 @@ main() {
done
sleep 1
- swww img -o "$focused_monitor" "$wallpaper_output" $SWWW_PARAMS &
+ $WWW img -o "$focused_monitor" "$wallpaper_output" $SWWW_PARAMS &
sleep 2
diff --git a/config/hypr/UserScripts/WallpaperRandom.sh b/config/hypr/UserScripts/WallpaperRandom.sh
index a9908e19..db8251f2 100755
--- a/config/hypr/UserScripts/WallpaperRandom.sh
+++ b/config/hypr/UserScripts/WallpaperRandom.sh
@@ -1,10 +1,17 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Script for Random Wallpaper ( CTRL ALT W)
PICTURES_DIR="$(xdg-user-dir PICTURES 2>/dev/null || echo "$HOME/Pictures")"
wallDIR="$PICTURES_DIR/wallpapers"
SCRIPTSDIR="$HOME/.config/hypr/scripts"
+# shellcheck source=/dev/null
+. "$SCRIPTSDIR/WallpaperCmd.sh"
focused_monitor=$(hyprctl monitors -j | jq -r '.[] | select(.focused) | .name')
@@ -12,18 +19,24 @@ PICS=($(find -L "${wallDIR}" -type f \( -name "*.jpg" -o -name "*.jpeg" -o -name
RANDOMPICS=${PICS[ $RANDOM % ${#PICS[@]} ]}
-# Transition config
+# Transition config (only when using swww)
FPS=30
TYPE="random"
DURATION=1
BEZIER=".43,1.19,1,.4"
-SWWW_PARAMS="--transition-fps $FPS --transition-type $TYPE --transition-duration $DURATION --transition-bezier $BEZIER"
+if [[ "$WWW_CMD" == "swww" ]]; then
+ SWWW_PARAMS="--transition-fps $FPS --transition-type $TYPE --transition-duration $DURATION --transition-bezier $BEZIER"
+else
+ SWWW_PARAMS=""
+fi
+if ! "$WWW_CMD" query >/dev/null 2>&1; then
+ "$WWW_DAEMON" "${WWW_DAEMON_ARGS[@]}" &
+fi
-
-swww query || swww-daemon --format xrgb && swww img -o $focused_monitor ${RANDOMPICS} $SWWW_PARAMS
+"$WWW_CMD" img -o "$focused_monitor" "$RANDOMPICS" $SWWW_PARAMS
wait $!
-"$SCRIPTSDIR/WallustSwww.sh" &&
+"$SCRIPTSDIR/WallustSwww.sh" "$RANDOMPICS" &&
wait $!
sleep 2
diff --git a/config/hypr/UserScripts/WallpaperSelect.sh b/config/hypr/UserScripts/WallpaperSelect.sh
index ed0b2846..9dafdf57 100755
--- a/config/hypr/UserScripts/WallpaperSelect.sh
+++ b/config/hypr/UserScripts/WallpaperSelect.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# This script for selecting wallpapers (SUPER W)
# WALLPAPERS PATH
@@ -7,18 +12,25 @@ terminal=kitty
PICTURES_DIR="$(xdg-user-dir PICTURES 2>/dev/null || echo "$HOME/Pictures")"
wallDIR="$PICTURES_DIR/wallpapers"
SCRIPTSDIR="$HOME/.config/hypr/scripts"
+# shellcheck source=/dev/null
+. "$SCRIPTSDIR/WallpaperCmd.sh"
wallpaper_current="$HOME/.config/hypr/wallpaper_effects/.wallpaper_current"
+wallpaper_link="$HOME/.config/rofi/.current_wallpaper"
# Directory for swaync
iDIR="$HOME/.config/swaync/images"
iDIRi="$HOME/.config/swaync/icons"
-# swww transition config
+# swww transition config (only when using swww)
FPS=60
TYPE="any"
DURATION=2
BEZIER=".43,1.19,1,.4"
-SWWW_PARAMS="--transition-fps $FPS --transition-type $TYPE --transition-duration $DURATION --transition-bezier $BEZIER"
+if [[ "$WWW_CMD" == "swww" ]]; then
+ SWWW_PARAMS="--transition-fps $FPS --transition-type $TYPE --transition-duration $DURATION --transition-bezier $BEZIER"
+else
+ SWWW_PARAMS=""
+fi
# Check if package bc exists
if ! command -v bc &>/dev/null; then
@@ -46,7 +58,7 @@ rofi_override="element-icon{size:${adjusted_icon_size}%;}"
# Kill existing wallpaper daemons for video
kill_wallpaper_for_video() {
- swww kill 2>/dev/null
+ "$WWW_CMD" kill 2>/dev/null
pkill mpvpaper 2>/dev/null
pkill swaybg 2>/dev/null
pkill hyprpaper 2>/dev/null
@@ -66,7 +78,19 @@ mapfile -d '' PICS < <(find -L "${wallDIR}" -type f \( \
-iname "*.mp4" -o -iname "*.mkv" -o -iname "*.mov" -o -iname "*.webm" \) -print0)
RANDOM_PIC="${PICS[$((RANDOM % ${#PICS[@]}))]}"
-RANDOM_PIC_NAME=". random"
+RANDOM_PIC_NAME="$(basename "$RANDOM_PIC")"
+
+CURRENT_MON_PIC_PATH=$("$WWW_CMD" query 2>/dev/null | grep "$focused_monitor" | awk '{print $NF}')
+if [[ -z "$CURRENT_MON_PIC_PATH" ]]; then
+ if [[ -L "$wallpaper_link" ]]; then
+ CURRENT_MON_PIC_PATH="$(readlink -f "$wallpaper_link")"
+ elif [[ -f "$wallpaper_link" ]]; then
+ CURRENT_MON_PIC_PATH="$wallpaper_link"
+ elif [[ -f "$wallpaper_current" ]]; then
+ CURRENT_MON_PIC_PATH="$wallpaper_current"
+ fi
+fi
+CURRENT_MON_PIC_NAME=$(basename "$CURRENT_MON_PIC_PATH")
# Rofi command
rofi_command="rofi -i -show -dmenu -config $rofi_theme -theme-str $rofi_override"
@@ -75,7 +99,10 @@ rofi_command="rofi -i -show -dmenu -config $rofi_theme -theme-str $rofi_override
menu() {
IFS=$'\n' sorted_options=($(sort <<<"${PICS[*]}"))
- printf "%s\x00icon\x1f%s\n" "$RANDOM_PIC_NAME" "$RANDOM_PIC"
+ printf "%s\x00icon\x1f%s\n" "Random: $RANDOM_PIC_NAME" "$RANDOM_PIC"
+ if [[ -n "$CURRENT_MON_PIC_PATH" ]]; then
+ printf "%s\x00icon\x1f%s\n" "Current: $CURRENT_MON_PIC_NAME" "$CURRENT_MON_PIC_PATH"
+ fi
for pic_path in "${sorted_options[@]}"; do
pic_name=$(basename "$pic_path")
@@ -107,6 +134,7 @@ modify_startup_config() {
# Check if it's a live wallpaper (video)
if [[ "$selected_file" =~ \.(mp4|mkv|mov|webm)$ ]]; then
# For video wallpapers:
+ sed -i '/^\s*exec-once\s*=\s*\$scriptsDir\/WallpaperDaemon\.sh\s*$/s/^/\#/' "$startup_config"
sed -i '/^\s*exec-once\s*=\s*swww-daemon\s*--format\s*xrgb\s*$/s/^/\#/' "$startup_config"
sed -i '/^\s*#\s*exec-once\s*=\s*mpvpaper\s*.*$/s/^#\s*//;' "$startup_config"
@@ -117,6 +145,7 @@ modify_startup_config() {
echo "Configured for live wallpaper (video)."
else
# For image wallpapers:
+ sed -i '/^\s*#\s*exec-once\s*=\s*\$scriptsDir\/WallpaperDaemon\.sh\s*$/s/^\s*#\s*//;' "$startup_config"
sed -i '/^\s*#\s*exec-once\s*=\s*swww-daemon\s*--format\s*xrgb\s*$/s/^\s*#\s*//;' "$startup_config"
sed -i '/^\s*exec-once\s*=\s*mpvpaper\s*.*$/s/^/\#/' "$startup_config"
@@ -131,12 +160,20 @@ apply_image_wallpaper() {
kill_wallpaper_for_image
- if ! pgrep -x "swww-daemon" >/dev/null; then
- echo "Starting swww-daemon..."
- swww-daemon --format xrgb &
+ if ! pgrep -x "$WWW_DAEMON" >/dev/null; then
+ echo "Starting $WWW_DAEMON..."
+ "$WWW_DAEMON" "${WWW_DAEMON_ARGS[@]}" &
fi
-
- swww img -o "$focused_monitor" "$image_path" $SWWW_PARAMS
+ # Wait for daemon to be ready before applying
+ for _ in {1..20}; do
+ "$WWW_CMD" query >/dev/null 2>&1 && break
+ sleep 0.1
+ done
+ "$WWW_CMD" img -o "$focused_monitor" "$image_path" $SWWW_PARAMS || {
+ sleep 0.2
+ "$WWW_CMD" img -o "$focused_monitor" "$image_path" $SWWW_PARAMS
+ }
+ "$WWW_CMD" img -o "$focused_monitor" "$image_path" $SWWW_PARAMS
# Run additional scripts (pass the image path to avoid cache race conditions)
"$SCRIPTSDIR/WallustSwww.sh" "$image_path"
@@ -165,21 +202,32 @@ main() {
choice=$(menu | $rofi_command)
choice=$(echo "$choice" | xargs)
RANDOM_PIC_NAME=$(echo "$RANDOM_PIC_NAME" | xargs)
+ raw_choice="$choice"
+ choice="${choice#Random: }"
+ choice="${choice#Current: }"
if [[ -z "$choice" ]]; then
echo "No choice selected. Exiting."
exit 0
fi
- # Handle random selection correctly
- if [[ "$choice" == "$RANDOM_PIC_NAME" ]]; then
- choice=$(basename "$RANDOM_PIC")
- fi
-
- choice_basename=$(basename "$choice" | sed 's/\(.*\)\.[^.]*$/\1/')
+ # Resolve selection directly when using Random/Current entries
+ if [[ "$raw_choice" == Random:\ * ]]; then
+ selected_file="$RANDOM_PIC"
+ elif [[ "$raw_choice" == Current:\ * && -n "$CURRENT_MON_PIC_PATH" ]]; then
+ selected_file="$CURRENT_MON_PIC_PATH"
+ elif [[ -f "$choice" ]]; then
+ selected_file="$choice"
+ else
+ # Handle random selection by name when needed
+ if [[ "$choice" == "$RANDOM_PIC_NAME" ]]; then
+ choice=$(basename "$RANDOM_PIC")
+ fi
+ choice_basename=$(basename "$choice" | sed 's/\(.*\)\.[^.]*$/\1/')
- # Search for the selected file in the wallpapers directory, including subdirectories
- selected_file=$(find "$wallDIR" -iname "$choice_basename.*" -print -quit)
+ # Search for the selected file in the wallpapers directory, including subdirectories
+ selected_file=$(find "$wallDIR" -iname "$choice_basename.*" -print -quit)
+ fi
if [[ -z "$selected_file" ]]; then
echo "File not found. Selected choice: $choice"
diff --git a/config/hypr/UserScripts/Weather.py b/config/hypr/UserScripts/Weather.py
index e7a0fe01..6905e0e1 100755
--- a/config/hypr/UserScripts/Weather.py
+++ b/config/hypr/UserScripts/Weather.py
@@ -1,5 +1,10 @@
#!/usr/bin/env python3
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Rewritten to use Open-Meteo APIs (worldwide, no API key) for robust weather data.
# Outputs Waybar-compatible JSON and a simple text cache.
diff --git a/config/hypr/UserScripts/Weather.sh b/config/hypr/UserScripts/Weather.sh
index c01a4e12..c6683e07 100755
--- a/config/hypr/UserScripts/Weather.sh
+++ b/config/hypr/UserScripts/Weather.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# weather info from wttr. https://github.com/chubin/wttr.in
# Remember to add city
# Function to get current city from IP address with fallback
diff --git a/config/hypr/UserScripts/WeatherWrap.sh b/config/hypr/UserScripts/WeatherWrap.sh
index 5e8b4733..1e15e4a6 100755
--- a/config/hypr/UserScripts/WeatherWrap.sh
+++ b/config/hypr/UserScripts/WeatherWrap.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Weather entrypoint: prefer Python (Open‑Meteo), fallback to legacy Bash (wttr.in)
SCRIPT_DIR="$(dirname "$0")"
diff --git a/config/hypr/UserScripts/ZshChangeTheme.sh b/config/hypr/UserScripts/ZshChangeTheme.sh
index 3e2f077a..94c1b448 100755
--- a/config/hypr/UserScripts/ZshChangeTheme.sh
+++ b/config/hypr/UserScripts/ZshChangeTheme.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Script for Oh my ZSH theme ( CTRL SHIFT O)
# preview of theme can be view here: https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
diff --git a/config/hypr/configs/ENVariables.conf b/config/hypr/configs/ENVariables.conf
index 585ae9f5..fd7831b8 100644
--- a/config/hypr/configs/ENVariables.conf
+++ b/config/hypr/configs/ENVariables.conf
@@ -1,11 +1,16 @@
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Environment variables. See https://wiki.hyprland.org/Configuring/Environment-variables/
# Set your defaults editor through ENV in ~/.config/hypr/UserConfigs/01-UserDefaults.conf
# environment-variables
-# Current Version of JakooLit Dotfiles:
-env = DOTS_VERSION,2.3.21
+# Current Version of KoolDots:
+env = DOTS_VERSION,2.3.22
### Toolkit Backend Variables ###
env = GDK_BACKEND,wayland,x11,*
@@ -24,8 +29,8 @@ env = XDG_SESSION_TYPE,wayland
### QT Variables ###
env = QT_AUTO_SCREEN_SCALE_FACTOR,1
env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1
-env = QT_QPA_PLATFORMTHEME,qt5ct
env = QT_QPA_PLATFORMTHEME,qt6ct
+env = QT_STYLE_OVERRIDE,kvantum
### hyprland-qt-support ###
env = QT_QUICK_CONTROLS_STYLE,org.hyprland.style
diff --git a/config/hypr/configs/Keybinds.conf b/config/hypr/configs/Keybinds.conf
index ba0201f1..bbc93b25 100644
--- a/config/hypr/configs/Keybinds.conf
+++ b/config/hypr/configs/Keybinds.conf
@@ -1,8 +1,12 @@
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Default Keybinds
# visit https://wiki.hyprland.org/Configuring/Binds/ for more info
-# /* ---- ✴️ Variables ✴️ ---- */ #
$mainMod = SUPER
$scriptsDir = $HOME/.config/hypr/scripts
$UserConfigs = $HOME/.config/hypr/UserConfigs
@@ -11,7 +15,7 @@ $UserScripts = $HOME/.config/hypr/UserScripts
# settings for User defaults apps - set your default terminal and file manager on this file
source= $UserConfigs/01-UserDefaults.conf
-#### STANDAR ####
+#### STANDARD ####
# Common shortcuts
#bindr = $mainMod, $mainMod_L, exec, pkill rofi || rofi -show drun -modi drun,filebrowser,run,window # Super Key to Launch rofi menu
bindd = $mainMod, D, app launcher, exec, pkill rofi || true && rofi -show drun -modi drun,filebrowser,run,window
@@ -21,6 +25,7 @@ bindd = $mainMod, A, desktop overview, exec, $scriptsDir/OverviewToggle.sh # tog
#bindd = $mainMod, A, Quickshell overview, global, quickshell:overviewToggle # desktop overview (if installed)
bindd = $mainMod, Return, Open terminal, exec, $term
bindd = $mainMod, E, file manager, exec, $files
+bindd = $mainMod, C, SSH session manager, exec, $scriptsDir/rofi-ssh-menu.sh
# FEATURES / EXTRAS
bindd = $mainMod, T, Global theme switcher using Wallust, exec, $scriptsDir/ThemeChanger.sh #Global theme switcher
@@ -31,19 +36,19 @@ bindd = $mainMod, S, web search, exec, $scriptsDir/RofiSearch.sh
bindd = $mainMod CTRL, S, window switcher, exec, rofi -show window
bindd = $mainMod ALT, O, toggle blur, exec, $scriptsDir/ChangeBlur.sh
bindd = $mainMod SHIFT, G, toggle game mode, exec, $scriptsDir/GameMode.sh
-bindd = $mainMod ALT, L, toggle master/dwindle layout, exec, $scriptsDir/ChangeLayout.sh
+bindd = $mainMod ALT, L, toggle layouts, exec, $scriptsDir/ChangeLayout.sh toggle
bindd = $mainMod ALT, V, clipboard manager, exec, $scriptsDir/ClipManager.sh
bindd = $mainMod CTRL, R, rofi theme selector, exec, $scriptsDir/RofiThemeSelector.sh
bindd = $mainMod CTRL SHIFT, R, rofi theme selector (modified), exec, pkill rofi || true && $scriptsDir/RofiThemeSelector-modified.sh
bindd = $mainMod CTRL, K, Kitty theme selector, exec, $scriptsDir/Kitty_themes.sh
bindd = $mainMod SHIFT, B, Set static Rainbow Border, exec, $UserScripts/RainbowBorders-low-cpu.sh --run-once
bindd = $mainMod SHIFT, H, Toggle Mute/Unmute for Active-Window, exec, $scriptsDir/Toggle-Active-Window-Audio.sh
-bindd = ALT SHIFT, S, Hyprshot Screen Capture, exec, $scriptsDir/hyprshot.sh -m region -o %HOME/Pictures/Screenshots
+bindd = ALT SHIFT, S, Hyprshot Screen Capture, exec, $scriptsDir/hyprshot.sh -m region -o $HOME/Pictures/Screenshots
bindd = $mainMod SHIFT, F, fullscreen, fullscreen
bindd = $mainMod CTRL, F, maximize window, fullscreen, 1
bindd = $mainMod, SPACE, Float current window, togglefloating,
-bindd = $mainMod ALT, SPACE, Float all windows, exec, hyprctl dispatch workspaceopt allfloat
+bindd = $mainMod ALT, SPACE, Float all windows, exec, $scriptsDir/Float-all-Windows.sh
bindd = $mainMod SHIFT, Return, DropDown terminal, exec, $scriptsDir/Dropterminal.sh $term
# Desktop zooming or magnifier
@@ -90,14 +95,13 @@ bindd = $mainMod SHIFT, E, Quick settings menu, exec, $scriptsDir/Kool_Quick_Set
# Master Layout
bindd = $mainMod CTRL, D, remove master, layoutmsg, removemaster
bindd = $mainMod, I, add master, layoutmsg, addmaster
-# NOTE: J/K bindings are set dynamically by scripts/KeybindsLayoutInit.sh and scripts/ChangeLayout.sh
-# (we intentionally do not bind them statically here to avoid conflicts across layouts)
-# bindd = $mainMod, J, cycle next, layoutmsg, cyclenext
-# bindd = $mainMod, K, cycle previous, layoutmsg, cycleprev
+# j/k cycle windows globally
+bindd = $mainMod, j, cycle next, layoutmsg, cyclenext
+bindd = $mainMod, k, cycle previous, layoutmsg, cycleprev
bindd = $mainMod CTRL, Return, swap with master, layoutmsg, swapwithmaster
# Dwindle Layout
-bindd = $mainMod SHIFT, I, toggle split (dwindle), togglesplit
+bindd = $mainMod SHIFT, I, toggle split (dwindle), layoutmsg, togglesplit
bindd = $mainMod, P, toggle pseudo (dwindle), pseudo,
# Works on either layout (Master or Dwindle)
@@ -105,6 +109,24 @@ bindd = $mainMod, M, set split ratio 0.3, exec, hyprctl dispatch splitratio 0.3
# layout aware keybinds
exec-once = $scriptsDir/ChangeLayout.sh init
+# Direct layout binds
+bindd = $mainMod ALT, 1, layout dwindle, exec, $scriptsDir/ChangeLayout.sh dwindle
+bindd = $mainMod ALT, 2, layout master, exec, $scriptsDir/ChangeLayout.sh master
+bindd = $mainMod ALT, 3, layout scrolling, exec, $scriptsDir/ChangeLayout.sh scrolling
+bindd = $mainMod ALT, 4, layout monocle, exec, $scriptsDir/ChangeLayout.sh monocle
+
+# Scrolling Layout
+bindd = $mainMod SHIFT, period, move to right column, layoutmsg, move +col
+bindd = $mainMod SHIFT, comma, move to left column, layoutmsg, move -col
+bindd = $mainMod ALT, comma, swap columns left, layoutmsg, swapcol l
+bindd = $mainMod ALT, period, swap columns right, layoutmsg, swapcol r
+
+# Set layout to Horizontal (Standard "Tape" style)
+bindd = $mainMod ALT, H, Horizonal scroll right,exec, hyprctl keyword scrolling:direction right
+# Set layout to Vertical (Stacked "Column" style)
+bindd = $mainMod ALT, V, Vertical Scroll down,exec, hyprctl keyword scrolling:direction down
+# Create a toggle bind (e.g., Mod + Shift + S)
+bindd = $mainMod ALT, S, toggle scrolling V/H, exec, bash -c '[[ $(hyprctl getoption scrolling:direction -j | jq -r ".str") == "right" ]] && hyprctl keyword scrolling:direction down || hyprctl keyword scrolling:direction right'
# Cycle windows; if floating bring to top
bindd = ALT, tab, cycle next window, cyclenext
diff --git a/config/hypr/configs/Laptops.conf b/config/hypr/configs/Laptops.conf
index ec58fdd6..9ee2b2b2 100644
--- a/config/hypr/configs/Laptops.conf
+++ b/config/hypr/configs/Laptops.conf
@@ -1,4 +1,9 @@
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# See https://wiki.hyprland.org/Configuring/Keywords/ for more variable settings
# These configs are mostly for laptops. This is addemdum to Keybinds.conf
diff --git a/config/hypr/configs/Startup_Apps.conf b/config/hypr/configs/Startup_Apps.conf
index 67680af4..a27a12b9 100644
--- a/config/hypr/configs/Startup_Apps.conf
+++ b/config/hypr/configs/Startup_Apps.conf
@@ -1,4 +1,9 @@
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Commands and Apps to be executed at launch (vendor defaults)
$scriptsDir = $HOME/.config/hypr/scripts
$UserScripts = $HOME/.config/hypr/UserScripts
@@ -8,7 +13,7 @@ $livewallpaper=""
$wallDIR = $HOME/Pictures/wallpapers # change path manually here if needed
### wallpaper stuff ###
-exec-once = swww-daemon --format xrgb
+exec-once = $scriptsDir/WallpaperDaemon.sh
#exec-once = mpvpaper '*' -o "load-scripts=no no-audio --loop" $livewallpaper
# wallpaper random
#exec-once = $SwwwRandom $wallDIR # random wallpaper switcher every 30 minutes
@@ -16,7 +21,7 @@ exec-once = swww-daemon --format xrgb
### Startup ###
exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
-exec-once = $HOME/.config/hypr/scripts/Dropterminal.sh kitty &
+exec-once = $HOME/.config/hypr/scripts/Dropterminal.sh "kitty --class kitty-dropterm" &
exec-once = $scriptsDir/Polkit.sh
exec-once = nm-applet --indicator
exec-once = nm-tray # For ubuntu
@@ -24,7 +29,7 @@ exec-once = swaync
#exec-once = ags
#exec-once = blueman-applet
#exec-once = rog-control-center
-exec-once = $scriptsDir/PortalHyprlandUbuntu2604.sh
+exec-once = $scriptsDir/PortalHyprlandUbuntu.sh
exec-once = waybar
exec-once = qs -c overview # Quickshell Overview
exec-once = hypridle
@@ -40,7 +45,7 @@ exec-once = wl-paste --type image --watch cliphist store
# Here are list of features available but disabled by default
# Persistent wallpaper
-# exec-once = swww-daemon --format xrgb && swww img $wallDIR/mecha-nostalgia.png
+# exec-once = sh -c '$HOME/.config/hypr/scripts/WallpaperDaemon.sh && (command -v awww >/dev/null 2>&1 && awww img "$wallDIR/mecha-nostalgia.png" || swww img "$wallDIR/mecha-nostalgia.png")'
# Gnome polkit for NixOS
#exec-once = $scriptsDir/Polkit-NixOS.sh
diff --git a/config/hypr/configs/SystemSettings.conf b/config/hypr/configs/SystemSettings.conf
index d7892d17..3d8122be 100644
--- a/config/hypr/configs/SystemSettings.conf
+++ b/config/hypr/configs/SystemSettings.conf
@@ -1,4 +1,9 @@
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Default settings
# This is where you put your own settings as this will not be touched during update
# if the upgrade.sh is used.
@@ -9,16 +14,42 @@
$scriptsDir = $HOME/.config/hypr/scripts
dwindle {
- pseudotile = true
+ pseudotile = false
preserve_split = true
- #smart_split = true
+ smart_resizing = true
+ use_active_for_splits = true
+ smart_split = false
+ default_split_ratio = 1.0
+ split_bias = 0
+ precise_mouse_move = false
special_scale_factor = 0.8
}
master {
- new_status = master
- new_on_top = 1
- mfact = 0.5
+ new_status = slave
+ new_on_top = false
+ new_on_active = none
+ orientation = left
+ mfact = 0.55
+ slave_count_for_center_master = 2
+ center_master_fallback = left
+ smart_resizing = true
+ drop_at_cursor = true
+ always_keep_position = false
+}
+
+scrolling {
+ # Default width of new windows (0.1 - 1.0)
+ column_width = 0.80
+ # If only one window is open, should it span the whole screen?
+ fullscreen_on_one_column = true
+ # Direction: right, left, up, or down
+ direction = right
+ # Center the focused window automatically
+ follow_focus = true
+}
+monocle {
+ # I can't find any settings on the wiki
}
general {
@@ -34,7 +65,6 @@ input {
kb_rules =
repeat_rate = 50
repeat_delay = 300
-
sensitivity = 0 #mouse sensitivity
#accel_profile = # flat or adaptive or blank or EMPTY means libinput’s default mode
numlock_by_default = true
@@ -63,20 +93,23 @@ input {
}
}
-
gestures {
- gesture = 3, horizontal, workspace
- workspace_swipe_distance = 500
+ workspace_swipe_distance = 300
+ workspace_swipe_touch = false
workspace_swipe_invert = true
workspace_swipe_min_speed_to_force = 30
workspace_swipe_cancel_ratio = 0.5
- workspace_swipe_create_new = true
- workspace_swipe_forever = true
- #workspace_swipe_use_r = true #uncomment if wanted a forever create a new workspace with swipe right
+ workspace_swipe_create_new = true
+ workspace_swipe_direction_lock = true
+ workspace_swipe_forever = false
+ workspace_swipe_use_r = false
+ close_max_timeout = 100
- gesture = 4, up, dispatcher, exec, hyprctl keyword cursor:zoom_factor "$(hyprctl getoption cursor:zoom_factor | awk 'NR==1 {factor = $2; if (factor < 1) {factor = 1}; print factor * 1.5}')"
- gesture = 4, down, dispatcher, exec, hyprctl keyword cursor:zoom_factor "$(hyprctl getoption cursor:zoom_factor | awk 'NR==1 {factor = $2; if (factor < 1) {factor = 1}; print factor / 1.5}')"
- gesture = 3, up, dispatcher, exec, $scriptsDir/OverviewToggle.sh
+ gesture = 3, horizontal, workspace
+ gesture = 3, up, dispatcher, exec, hyprctl keyword cursor:zoom_factor "$(hyprctl getoption cursor:zoom_factor | awk 'NR==1 {factor = $2; if (factor < 1) {factor = 1}; print factor * 1.5}')"
+ gesture = 3, down, dispatcher, exec, hyprctl keyword cursor:zoom_factor "$(hyprctl getoption cursor:zoom_factor | awk 'NR==1 {factor = $2; if (factor < 1) {factor = 1}; print factor / 1.5}')"
+ gesture = 4, up, dispatcher, exec, $scriptsDir/OverviewToggle.sh
+ gesture = 4, down, float
}
misc {
@@ -126,4 +159,16 @@ cursor {
enable_hyprcursor = true
warp_on_change_workspace = 2
no_warps = true
+ no_break_fs_vrr = false
+ min_refresh_rate = 24
+ hotspot_padding = 1
+ inactive_timeout = 0
+ default_monitor =
+ zoom_factor = 1.0
+ zoom_rigid = false
+ zoom_detached_camera = true
+ hide_on_key_press = true
+ hide_on_touch = false
+ hide_on_tablet = false
+ use_cpu_buffer = false
}
diff --git a/config/hypr/configs/WindowRules-config-v3.conf b/config/hypr/configs/WindowRules-config-v3.conf
index 8212e9bf..29d5c274 100644
--- a/config/hypr/configs/WindowRules-config-v3.conf
+++ b/config/hypr/configs/WindowRules-config-v3.conf
@@ -1,4 +1,9 @@
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Vendor defaults for window rules and layerrules
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
@@ -37,7 +42,7 @@ windowrule = match:title ^(KooL Hyprland Settings)$, tag +KooL_Settings
windowrule = match:class ^(nwg-displays|nwg-look)$, tag +KooL-Settings
# terminal tags
-windowrule = match:class ^(Alacritty|kitty|kitty-dropterm)$, tag +terminal
+windowrule = match:class ^(ghostty|wezterm|Alacritty|kitty|kitty-dropterm)$, tag +terminal
# email tags
windowrule = match:class ^([Tt]hunderbird|org.mozilla.Thunderbird)$, tag +email
@@ -116,6 +121,7 @@ windowrule = match:class ^([Qq]alculate-gtk)$, float on
# float popups and dialogue
windowrule = match:title ^(Authentication Required)$, float on, center on
+windowrule = match:class ^(xfce-polkit|mate-polkit|polkit-mate-authentication-agent-1)$, match:title ^(Authentication required|Authentication Required)$, float on, center on, size (monitor_w*0.35) (monitor_h*0.35)
windowrule = match:class (codium|codium-url-handler|VSCodium), match:title negative:(.*codium.*|.*VSCodium.*), float on
windowrule = match:class ^(com.heroicgameslauncher.hgl)$, match:title negative:(Heroic Games Launcher), float on
windowrule = match:class ^([Ss]team)$, match:title negative:^([Ss]team)$, float on
@@ -166,6 +172,18 @@ layerrule = match:namespace notifications, blur on
layerrule = match:namespace quickshell:overview, blur on
layerrule = match:namespace quickshell:overview, ignore_alpha 0.5
+#
+layerrule = blur on, match:namespace wallpaper
+layerrule = animation slide, match:namespace rofi
+layerrule = animation slide, match:namespace notifications
+
+# Optional Layer rules
+# To Resolve blurred corners in rofi Add to User config
+# SUPER SHIFT + E Edit User Window Rules
+#layerrule = blur on, ignore_alpha 0, match:namespace rofi
+#layerrule = blur on, match:namespace waybar
+
+
windowrule {
name = Picture-in-Picture
match:title = ^[Pp]icture-in-[Pp]icture$
@@ -189,6 +207,40 @@ windowrule {
size = (monitor_w*0.6) (monitor_h*0.6)
}
+# Named rule for Mainline Kernels
+windowrule {
+ name = Mainline Kernels
+ match:class = ^(mainline-gtk)$
+ match:title = ^(Mainline Kernels)$
+ match:initial_class = ^(mainline-gtk)$
+ match:initial_title = ^(Mainline Kernels)$
+ float = on
+ center = on
+ size = (monitor_w*0.45) (monitor_h*0.55)
+}
+
+# Named rule for Kwallet
+windowrule {
+ name = Kwallet
+ match:class = ^(org.kde.kwalletmanager)$
+ match:title = ^(Wallet Manager)$
+ match:initial_class = ^(org.kde.kwalletmanager)$
+ match:initial_title = ^(Wallet Manager)$
+ float = on
+ center = on
+ size = (monitor_w*0.6) (monitor_h*0.6)
+}
+# Named rule for NVIDIA Settings
+windowrule {
+ name = NVIDIA Settings
+ match:class = ^(nvidia-settings)$
+ match:title = ^(NVIDIA Settings)$
+ match:initial_class = ^(nvidia-settings)$
+ match:initial_title = ^(NVIDIA Settings)$
+ float = on
+ center = on
+ size = (monitor_w*0.6) (monitor_h*0.6)
+}
# Named rule for CachyOS Package Installer
windowrule {
name = CachyOS Package Installer
@@ -326,7 +378,7 @@ windowrule {
match:class = (org.gnome.Calculator|qalculate-gtk)
float = on
center = on
- size = (monitor_w*0.25) (monitor_h*0.3)
+ size = (monitor_w*0.55) (monitor_h*0.45)
}
# Named rule for Thunar Dialogs
@@ -347,5 +399,5 @@ windowrule {
match:initial_title = ^(Bitwarden)$
float = on
center = on
- size = (monitor_w*0.6) (monitor_h*0.6)
+ size = (monitor_w*0.6) (monitor_h*0.6)
}
diff --git a/config/hypr/configs/WindowRules-pre-53.conf b/config/hypr/configs/WindowRules-pre-53.conf
index 589a8acb..fc74f600 100644
--- a/config/hypr/configs/WindowRules-pre-53.conf
+++ b/config/hypr/configs/WindowRules-pre-53.conf
@@ -1,4 +1,9 @@
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Vendor defaults for window rules and layerrules
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
diff --git a/config/hypr/configs/WindowRules.conf b/config/hypr/configs/WindowRules.conf
index 8212e9bf..29d5c274 100644
--- a/config/hypr/configs/WindowRules.conf
+++ b/config/hypr/configs/WindowRules.conf
@@ -1,4 +1,9 @@
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Vendor defaults for window rules and layerrules
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
@@ -37,7 +42,7 @@ windowrule = match:title ^(KooL Hyprland Settings)$, tag +KooL_Settings
windowrule = match:class ^(nwg-displays|nwg-look)$, tag +KooL-Settings
# terminal tags
-windowrule = match:class ^(Alacritty|kitty|kitty-dropterm)$, tag +terminal
+windowrule = match:class ^(ghostty|wezterm|Alacritty|kitty|kitty-dropterm)$, tag +terminal
# email tags
windowrule = match:class ^([Tt]hunderbird|org.mozilla.Thunderbird)$, tag +email
@@ -116,6 +121,7 @@ windowrule = match:class ^([Qq]alculate-gtk)$, float on
# float popups and dialogue
windowrule = match:title ^(Authentication Required)$, float on, center on
+windowrule = match:class ^(xfce-polkit|mate-polkit|polkit-mate-authentication-agent-1)$, match:title ^(Authentication required|Authentication Required)$, float on, center on, size (monitor_w*0.35) (monitor_h*0.35)
windowrule = match:class (codium|codium-url-handler|VSCodium), match:title negative:(.*codium.*|.*VSCodium.*), float on
windowrule = match:class ^(com.heroicgameslauncher.hgl)$, match:title negative:(Heroic Games Launcher), float on
windowrule = match:class ^([Ss]team)$, match:title negative:^([Ss]team)$, float on
@@ -166,6 +172,18 @@ layerrule = match:namespace notifications, blur on
layerrule = match:namespace quickshell:overview, blur on
layerrule = match:namespace quickshell:overview, ignore_alpha 0.5
+#
+layerrule = blur on, match:namespace wallpaper
+layerrule = animation slide, match:namespace rofi
+layerrule = animation slide, match:namespace notifications
+
+# Optional Layer rules
+# To Resolve blurred corners in rofi Add to User config
+# SUPER SHIFT + E Edit User Window Rules
+#layerrule = blur on, ignore_alpha 0, match:namespace rofi
+#layerrule = blur on, match:namespace waybar
+
+
windowrule {
name = Picture-in-Picture
match:title = ^[Pp]icture-in-[Pp]icture$
@@ -189,6 +207,40 @@ windowrule {
size = (monitor_w*0.6) (monitor_h*0.6)
}
+# Named rule for Mainline Kernels
+windowrule {
+ name = Mainline Kernels
+ match:class = ^(mainline-gtk)$
+ match:title = ^(Mainline Kernels)$
+ match:initial_class = ^(mainline-gtk)$
+ match:initial_title = ^(Mainline Kernels)$
+ float = on
+ center = on
+ size = (monitor_w*0.45) (monitor_h*0.55)
+}
+
+# Named rule for Kwallet
+windowrule {
+ name = Kwallet
+ match:class = ^(org.kde.kwalletmanager)$
+ match:title = ^(Wallet Manager)$
+ match:initial_class = ^(org.kde.kwalletmanager)$
+ match:initial_title = ^(Wallet Manager)$
+ float = on
+ center = on
+ size = (monitor_w*0.6) (monitor_h*0.6)
+}
+# Named rule for NVIDIA Settings
+windowrule {
+ name = NVIDIA Settings
+ match:class = ^(nvidia-settings)$
+ match:title = ^(NVIDIA Settings)$
+ match:initial_class = ^(nvidia-settings)$
+ match:initial_title = ^(NVIDIA Settings)$
+ float = on
+ center = on
+ size = (monitor_w*0.6) (monitor_h*0.6)
+}
# Named rule for CachyOS Package Installer
windowrule {
name = CachyOS Package Installer
@@ -326,7 +378,7 @@ windowrule {
match:class = (org.gnome.Calculator|qalculate-gtk)
float = on
center = on
- size = (monitor_w*0.25) (monitor_h*0.3)
+ size = (monitor_w*0.55) (monitor_h*0.45)
}
# Named rule for Thunar Dialogs
@@ -347,5 +399,5 @@ windowrule {
match:initial_title = ^(Bitwarden)$
float = on
center = on
- size = (monitor_w*0.6) (monitor_h*0.6)
+ size = (monitor_w*0.6) (monitor_h*0.6)
}
diff --git a/config/hypr/initial-boot.sh b/config/hypr/initial-boot.sh
index c68560ab..8ccda640 100755
--- a/config/hypr/initial-boot.sh
+++ b/config/hypr/initial-boot.sh
@@ -17,7 +17,14 @@ gtk_theme="Flat-Remix-GTK-Blue-Dark"
icon_theme="Flat-Remix-Blue-Dark"
cursor_theme="Bibata-Modern-Ice"
-swww="swww img"
+if command -v awww >/dev/null 2>&1; then
+ WWW="awww"
+ DAEMON="awww-daemon"
+else
+ WWW="swww"
+ DAEMON="swww-daemon"
+fi
+swww="$WWW img"
effect="--transition-bezier .43,1.19,1,.4 --transition-fps 30 --transition-type grow --transition-pos 0.925,0.977 --transition-duration 2"
# Check if a marker file exists.
@@ -26,7 +33,7 @@ if [ ! -f "$HOME/.config/hypr/.initial_startup_done" ]; then
# Initialize wallust and wallpaper
if [ -f "$wallpaper" ]; then
wallust run -s $wallpaper > /dev/null
- swww query || swww-daemon && $swww $wallpaper $effect
+ $WWW query || $DAEMON && $swww $wallpaper $effect
"$scriptsDir/WallustSwww.sh" > /dev/null 2>&1 &
fi
diff --git a/config/hypr/scripts/AirplaneMode.sh b/config/hypr/scripts/AirplaneMode.sh
index ba692f98..21aa04a8 100755
--- a/config/hypr/scripts/AirplaneMode.sh
+++ b/config/hypr/scripts/AirplaneMode.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Airplane Mode. Turning on or off all wifi using rfkill.
notif="$HOME/.config/swaync/images/ja.png"
diff --git a/config/hypr/scripts/Animations.sh b/config/hypr/scripts/Animations.sh
index ff3a6e45..5fb77750 100755
--- a/config/hypr/scripts/Animations.sh
+++ b/config/hypr/scripts/Animations.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# For applying Animations from different users
# Check if rofi is already running
diff --git a/config/hypr/scripts/Battery.sh b/config/hypr/scripts/Battery.sh
index 2baed6ca..c42a4dac 100755
--- a/config/hypr/scripts/Battery.sh
+++ b/config/hypr/scripts/Battery.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
for i in {0..3}; do
if [ -f /sys/class/power_supply/BAT$i/capacity ]; then
battery_level=$(cat /sys/class/power_supply/BAT$i/status)
diff --git a/config/hypr/scripts/Brightness.sh b/config/hypr/scripts/Brightness.sh
index e0091417..bf0f4bf1 100755
--- a/config/hypr/scripts/Brightness.sh
+++ b/config/hypr/scripts/Brightness.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Script for Monitor backlights (if supported) using brightnessctl
iDIR="$HOME/.config/swaync/icons"
diff --git a/config/hypr/scripts/BrightnessKbd.sh b/config/hypr/scripts/BrightnessKbd.sh
index f9015fe0..5bd09a78 100755
--- a/config/hypr/scripts/BrightnessKbd.sh
+++ b/config/hypr/scripts/BrightnessKbd.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Script for keyboard backlights (if supported) using brightnessctl
iDIR="$HOME/.config/swaync/icons"
diff --git a/config/hypr/scripts/ChangeBlur.sh b/config/hypr/scripts/ChangeBlur.sh
index 084af2cb..10b5914e 100755
--- a/config/hypr/scripts/ChangeBlur.sh
+++ b/config/hypr/scripts/ChangeBlur.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Script for changing blurs on the fly
notif="$HOME/.config/swaync/images"
diff --git a/config/hypr/scripts/ChangeLayout.sh b/config/hypr/scripts/ChangeLayout.sh
index 499fa1e2..f52d783f 100755
--- a/config/hypr/scripts/ChangeLayout.sh
+++ b/config/hypr/scripts/ChangeLayout.sh
@@ -1,39 +1,112 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
-# for changing Hyprland Layouts (Master or Dwindle) on the fly
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
+# for changing Hyprland Layouts (master, dwindle, scrolling, monocle) on the fly
notif="$HOME/.config/swaync/images/ja.png"
-LAYOUT=$(hyprctl -j getoption general:layout | jq '.str' | sed 's/"//g')
+layouts=(master dwindle scrolling monocle)
-# Reverse layout value to reuse toggle logic. So layouts don't get swapped initially.
-if [ "$1" = "init" ]; then
- if [ "$LAYOUT" = "master" ]; then
- LAYOUT="dwindle"
- else
- LAYOUT="master"
- fi
-fi
+get_layout() {
+ hyprctl -j getoption general:layout | jq -r '.str'
+}
-case $LAYOUT in
-"master")
- hyprctl keyword general:layout dwindle
- hyprctl keyword unbind SUPER,J
- hyprctl keyword unbind SUPER,K
- hyprctl keyword bind SUPER,J,cyclenext
- hyprctl keyword bind SUPER,K,cyclenext,prev
- hyprctl keyword bind SUPER,O,togglesplit
- notify-send -e -u low -i "$notif" " Dwindle Layout"
- ;;
-"dwindle")
- hyprctl keyword general:layout master
- hyprctl keyword unbind SUPER,J
- hyprctl keyword unbind SUPER,K
+next_layout() {
+ local current="$1"
+ local i
+ for i in "${!layouts[@]}"; do
+ if [[ "${layouts[i]}" == "$current" ]]; then
+ echo "${layouts[((i + 1) % ${#layouts[@]})]}"
+ return
+ fi
+ done
+ echo "${layouts[0]}"
+}
+
+set_layout() {
+ local target="$1"
+
+ hyprctl keyword general:layout "$target"
+ hyprctl keyword unbind SUPER,j
+ hyprctl keyword unbind SUPER,k
+ hyprctl keyword unbind SUPER,left
+ hyprctl keyword unbind SUPER,right
+ hyprctl keyword unbind SUPER,up
+ hyprctl keyword unbind SUPER,down
hyprctl keyword unbind SUPER,O
- hyprctl keyword bind SUPER,J,layoutmsg,cyclenext
- hyprctl keyword bind SUPER,K,layoutmsg,cycleprev
- notify-send -e -u low -i "$notif" " Master Layout"
- ;;
-*) ;;
+ hyprctl keyword unbind SUPER_SHIFT,M
+
+ case "$target" in
+ "dwindle")
+ hyprctl keyword bind SUPER,j,cyclenext
+ hyprctl keyword bind SUPER,k,cyclenext,prev
+ hyprctl keyword bind SUPER,left,cyclenext,prev
+ hyprctl keyword bind SUPER,up,cyclenext,prev
+ hyprctl keyword bind SUPER,right,cyclenext
+ hyprctl keyword bind SUPER,down,cyclenext
+ hyprctl keyword bind SUPER,O,layoutmsg,togglesplit
+ notify-send -e -u low -i "$notif" " Dwindle Layout"
+ ;;
+ "scrolling")
+ hyprctl keyword bind SUPER,j,cyclenext
+ hyprctl keyword bind SUPER,k,cyclenext,prev
+ hyprctl keyword bind SUPER,left,cyclenext,prev
+ hyprctl keyword bind SUPER,up,cyclenext,prev
+ hyprctl keyword bind SUPER,right,cyclenext
+ hyprctl keyword bind SUPER,down,cyclenext
+ notify-send -e -u low -i "$notif" " Scrolling Layout"
+ ;;
+ "monocle")
+ hyprctl keyword bind SUPER,j,layoutmsg,cyclenext
+ hyprctl keyword bind SUPER,k,layoutmsg,cycleprev
+ hyprctl keyword bind SUPER,left,layoutmsg,cycleprev
+ hyprctl keyword bind SUPER,up,layoutmsg,cycleprev
+ hyprctl keyword bind SUPER,right,layoutmsg,cyclenext
+ hyprctl keyword bind SUPER,down,layoutmsg,cyclenext
+ hyprctl keyword bind SUPER_SHIFT,M,layoutmsg,swapnext
+ notify-send -e -u low -i "$notif" " Monocle Layout"
+ ;;
+ "master")
+ hyprctl keyword bind SUPER,j,layoutmsg,cyclenext
+ hyprctl keyword bind SUPER,k,layoutmsg,cycleprev
+ hyprctl keyword bind SUPER,left,movefocus,l
+ hyprctl keyword bind SUPER,right,movefocus,r
+ hyprctl keyword bind SUPER,up,movefocus,u
+ hyprctl keyword bind SUPER,down,movefocus,d
+ notify-send -e -u low -i "$notif" " Master Layout"
+ ;;
+ *)
+ hyprctl keyword bind SUPER,j,layoutmsg,cyclenext
+ hyprctl keyword bind SUPER,k,layoutmsg,cycleprev
+ hyprctl keyword bind SUPER,left,movefocus,l
+ hyprctl keyword bind SUPER,right,movefocus,r
+ hyprctl keyword bind SUPER,up,movefocus,u
+ hyprctl keyword bind SUPER,down,movefocus,d
+ echo "Unknown layout: $target" >&2
+ return 1
+ ;;
+ esac
+}
+current="$(get_layout)"
+arg="${1:-toggle}"
+
+case "$arg" in
+init)
+ set_layout "$current"
+ ;;
+toggle|next)
+ set_layout "$(next_layout "$current")"
+ ;;
+master|dwindle|scrolling|monocle)
+ set_layout "$arg"
+ ;;
+*)
+ echo "Usage: $(basename "$0") [toggle|next|init|master|dwindle|scrolling|monocle]" >&2
+ exit 1
+ ;;
esac
diff --git a/config/hypr/scripts/ClipManager.sh b/config/hypr/scripts/ClipManager.sh
index d08fd8f4..e3fbd066 100755
--- a/config/hypr/scripts/ClipManager.sh
+++ b/config/hypr/scripts/ClipManager.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Clipboard Manager. This script uses cliphist, rofi, and wl-copy.
# Variables
diff --git a/config/hypr/scripts/DarkLight.sh b/config/hypr/scripts/DarkLight.sh
index 62bad62b..5b1cc3e7 100755
--- a/config/hypr/scripts/DarkLight.sh
+++ b/config/hypr/scripts/DarkLight.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-## /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# For Dark and Light switching
# Note: Scripts are looking for keywords Light or Dark except for wallpapers as the are in a separate directories
@@ -12,6 +17,8 @@ hypr_config_path="$HOME/.config/hypr"
swaync_style="$HOME/.config/swaync/style.css"
ags_style="$HOME/.config/ags/user/style.css"
SCRIPTSDIR="$HOME/.config/hypr/scripts"
+# shellcheck source=/dev/null
+. "$SCRIPTSDIR/WallpaperCmd.sh"
notif="$HOME/.config/swaync/images/bell.png"
wallust_rofi="$HOME/.config/wallust/templates/colors-rofi.rasi"
@@ -31,11 +38,11 @@ for pid in waybar rofi swaync ags swaybg; do
done
-# Initialize swww if needed
-swww query || swww-daemon --format xrgb
+# Initialize wallpaper daemon if needed
+"$WWW_CMD" query || "$WWW_DAEMON" "${WWW_DAEMON_ARGS[@]}"
# Set swww options
-swww="swww img"
+swww="$WWW_CMD img"
effect="--transition-bezier .43,1.19,1,.4 --transition-fps 60 --transition-type grow --transition-pos 0.925,0.977 --transition-duration 2"
# Determine current theme mode
diff --git a/config/hypr/scripts/Distro_update.sh b/config/hypr/scripts/Distro_update.sh
index b4b8e90c..b9bcae71 100755
--- a/config/hypr/scripts/Distro_update.sh
+++ b/config/hypr/scripts/Distro_update.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Simple bash script to check and will try to update your system
# Local Paths
diff --git a/config/hypr/scripts/Dropterminal.sh b/config/hypr/scripts/Dropterminal.sh
index 2a9eb5b1..81c0f157 100755
--- a/config/hypr/scripts/Dropterminal.sh
+++ b/config/hypr/scripts/Dropterminal.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
#
# Made and brought to by Kiran George
# /* -- ✨ https://github.com/SherLock707 ✨ -- */ ##
@@ -12,7 +17,13 @@
DEBUG=false
SPECIAL_WS="special:scratchpad"
+SPECIAL_NAME="${SPECIAL_WS#special:}"
ADDR_FILE="/tmp/dropdown_terminal_addr"
+STATE_FILE="/tmp/dropdown_terminal_state"
+LOCK_FILE="/tmp/dropdown_terminal_lock"
+LAST_TOGGLE_FILE="/tmp/dropdown_terminal_last_toggle"
+MIN_TOGGLE_INTERVAL_MS=250
+DROPDOWN_KITTY_CLASS="kitty-dropterm"
# Dropdown size and position configuration (percentages)
WIDTH_PERCENT=65 # Width as percentage of screen width
@@ -31,12 +42,63 @@ if [ "$1" = "-d" ]; then
fi
TERMINAL_CMD="$1"
+if [[ "$TERMINAL_CMD" == kitty* ]] && [[ "$TERMINAL_CMD" != *"--class"* ]] && [[ "$TERMINAL_CMD" != *"--name"* ]] && [[ "$TERMINAL_CMD" != *"--app-id"* ]]; then
+ TERMINAL_CMD="$TERMINAL_CMD --class $DROPDOWN_KITTY_CLASS"
+fi
+
+# Ensure only one instance runs at a time (prevents overlapping animations)
+exec 9>"$LOCK_FILE"
+flock -n 9 || exit 0
+
+# Debounce rapid toggles
+now_ms=""
+if date +%s%3N >/dev/null 2>&1; then
+ now_ms=$(date +%s%3N)
+else
+ now_ms=$(( $(date +%s) * 1000 ))
+fi
+if [ -f "$LAST_TOGGLE_FILE" ]; then
+ last_ms=$(cat "$LAST_TOGGLE_FILE" 2>/dev/null || echo 0)
+ if [ -n "$last_ms" ] && [ "$last_ms" -ge 0 ] 2>/dev/null; then
+ delta_ms=$((now_ms - last_ms))
+ if [ "$delta_ms" -lt "$MIN_TOGGLE_INTERVAL_MS" ] 2>/dev/null; then
+ if [ "$DEBUG" = true ]; then
+ echo "Toggle debounced (${delta_ms}ms < ${MIN_TOGGLE_INTERVAL_MS}ms)" >&2
+ fi
+ exit 0
+ fi
+ fi
+fi
+echo "$now_ms" >"$LAST_TOGGLE_FILE"
# Debug echo function
debug_echo() {
if [ "$DEBUG" = true ]; then
- echo "$@"
+ echo "$@" >&2
+ fi
+}
+
+# Resolve terminal address, recovering by class if needed
+resolve_terminal_address() {
+ local addr
+ addr=$(get_terminal_address)
+ if [ -n "$addr" ] && window_exists "$addr"; then
+ echo "$addr"
+ return 0
+ fi
+
+ local recovered
+ recovered=$(find_terminal_by_class)
+ if [ -n "$recovered" ] && [ "$recovered" != "null" ]; then
+ local mon_name
+ mon_name=$(get_monitor_info | awk '{print $6}')
+ echo "$recovered $mon_name" >"$ADDR_FILE"
+ echo "$recovered"
+ return 0
fi
+
+ rm -f "$ADDR_FILE"
+ return 1
}
# Validate input
@@ -62,6 +124,28 @@ get_window_geometry() {
hyprctl clients -j | jq -r --arg ADDR "$addr" '.[] | select(.address == $ADDR) | "\(.at[0]) \(.at[1]) \(.size[0]) \(.size[1])"'
}
+# Function to check if window is currently hidden off-screen
+window_is_hidden() {
+ local addr="$1"
+ local y
+ y=$(hyprctl clients -j 2>/dev/null | jq -r --arg ADDR "$addr" '.[] | select(.address == $ADDR) | .at[1]' 2>/dev/null)
+ if [[ "$y" =~ ^-?[0-9]+$ ]] && [ "$y" -lt 0 ]; then
+ return 0
+ fi
+ return 1
+}
+
+# State helpers
+get_hidden_state() {
+ if [ -f "$STATE_FILE" ]; then
+ cat "$STATE_FILE" 2>/dev/null
+ fi
+}
+
+set_hidden_state() {
+ echo "$1" >"$STATE_FILE"
+}
+
# Function to animate window slide down (show)
animate_slide_down() {
local addr="$1"
@@ -121,7 +205,30 @@ animate_slide_up() {
# Function to get monitor info including scale and name of focused monitor
get_monitor_info() {
- local monitor_data=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | "\(.x) \(.y) \(.width) \(.height) \(.scale) \(.name)"')
+ local monitor_data
+ monitor_data=$(hyprctl monitors -j 2>/dev/null | jq -er 'map(select(.focused == true)) | .[0] | "\(.x) \(.y) \(.width) \(.height) \(.scale) \(.name)"' 2>/dev/null) || monitor_data=""
+ if [ -z "$monitor_data" ]; then
+ # Fallback for older Hyprland without -j support
+ monitor_data=$(hyprctl monitors 2>/dev/null | awk '
+ /^Monitor / {name=$2; sub(/\(.*/, "", name); x=y=w=h=scale=""; focused="no"}
+ / at / {
+ # e.g. "1920x1080@74.97300 at 0x0"
+ split($1, res, "x"); w=res[1]; split(res[2], tmp, "@"); h=tmp[1]
+ split($4, pos, "x"); x=pos[1]; y=pos[2]
+ }
+ /scale:/ {scale=$2}
+ /focused:/ {focused=$2}
+ /^$/ {
+ if (focused=="yes" && x!="" && y!="" && w!="" && h!="" && scale!="" && name!="") {
+ print x, y, w, h, scale, name; exit
+ }
+ }
+ END {
+ if (focused=="yes" && x!="" && y!="" && w!="" && h!="" && scale!="" && name!="") {
+ print x, y, w, h, scale, name
+ }
+ }')
+ fi
if [ -z "$monitor_data" ] || [[ "$monitor_data" =~ ^null ]]; then
debug_echo "Error: Could not get focused monitor information"
return 1
@@ -129,6 +236,7 @@ get_monitor_info() {
echo "$monitor_data"
}
+
# Function to calculate dropdown position with proper scaling and centering
calculate_dropdown_position() {
local monitor_info=$(get_monitor_info)
@@ -148,6 +256,13 @@ calculate_dropdown_position() {
debug_echo "Monitor info: x=$mon_x, y=$mon_y, width=$mon_width, height=$mon_height, scale=$mon_scale"
+ # Validate numeric fields
+ if ! [[ "$mon_x" =~ ^-?[0-9]+$ && "$mon_y" =~ ^-?[0-9]+$ && "$mon_width" =~ ^[0-9]+$ && "$mon_height" =~ ^[0-9]+$ ]]; then
+ debug_echo "Invalid monitor info format, using fallback values"
+ echo "100 100 800 600 fallback-monitor"
+ return 1
+ fi
+
# Validate scale value and provide fallback
if [ -z "$mon_scale" ] || [ "$mon_scale" = "null" ] || [ "$mon_scale" = "0" ]; then
debug_echo "Invalid scale value, using 1.0 as fallback"
@@ -207,6 +322,12 @@ get_terminal_address() {
fi
}
+# Try to find an existing dropdown terminal by class (kitty only)
+find_terminal_by_class() {
+ hyprctl clients -j 2>/dev/null | jq -r --arg CLASS "$DROPDOWN_KITTY_CLASS" \
+ '.[] | select(.class == $CLASS) | .address' | head -1
+}
+
# Function to get stored monitor name
get_terminal_monitor() {
if [ -f "$ADDR_FILE" ] && [ -s "$ADDR_FILE" ]; then
@@ -218,22 +339,48 @@ get_terminal_monitor() {
terminal_exists() {
local addr=$(get_terminal_address)
if [ -n "$addr" ]; then
- hyprctl clients -j | jq -e --arg ADDR "$addr" 'any(.[]; .address == $ADDR)' >/dev/null 2>&1
+ hyprctl clients -j 2>/dev/null | jq -e --arg ADDR "$addr" 'any(.[]; .address == $ADDR)' >/dev/null 2>&1
else
return 1
fi
}
-# Function to check if terminal is in special workspace
-terminal_in_special() {
- local addr=$(get_terminal_address)
+# Function to check if a window address exists
+window_exists() {
+ local addr="$1"
+ if [ -n "$addr" ]; then
+ hyprctl clients -j 2>/dev/null | jq -e --arg ADDR "$addr" 'any(.[]; .address == $ADDR)' >/dev/null 2>&1
+ else
+ return 1
+ fi
+}
+
+
+# Function to check if window is pinned
+window_is_pinned() {
+ local addr="$1"
if [ -n "$addr" ]; then
- hyprctl clients -j | jq -e --arg ADDR "$addr" 'any(.[]; .address == $ADDR and .workspace.name == "special:scratchpad")' >/dev/null 2>&1
+ hyprctl clients -j 2>/dev/null | jq -e --arg ADDR "$addr" '.[] | select(.address == $ADDR) | .pinned == true' >/dev/null 2>&1
else
return 1
fi
}
+# Ensure pin state without toggling unexpectedly
+ensure_pinned() {
+ local addr="$1"
+ if ! window_is_pinned "$addr"; then
+ hyprctl dispatch pin "address:$addr" >/dev/null 2>&1
+ fi
+}
+
+ensure_unpinned() {
+ local addr="$1"
+ if window_is_pinned "$addr"; then
+ hyprctl dispatch pin "address:$addr" >/dev/null 2>&1
+ fi
+}
+
# Function to spawn terminal and capture its address
spawn_terminal() {
debug_echo "Creating new dropdown terminal with command: $TERMINAL_CMD"
@@ -288,12 +435,13 @@ spawn_terminal() {
# Small delay to ensure it's properly in special workspace
sleep 0.2
-
- # Now bring it back with the same animation as subsequent shows
- # Use movetoworkspacesilent to avoid affecting workspace history
+ # Move to current workspace but start hidden off-screen
hyprctl dispatch movetoworkspacesilent "$CURRENT_WS,address:$new_addr"
- hyprctl dispatch pin "address:$new_addr"
- animate_slide_down "$new_addr" "$target_x" "$target_y" "$width" "$height"
+ ensure_pinned "$new_addr"
+ hyprctl dispatch resizewindowpixel "exact $width $height,address:$new_addr" >/dev/null 2>&1
+ local off_y=$((target_y - height - 200))
+ hyprctl dispatch movewindowpixel "exact $target_x $off_y,address:$new_addr" >/dev/null 2>&1
+ set_hidden_state "hidden"
return 0
fi
@@ -303,8 +451,9 @@ spawn_terminal() {
}
# Main logic
-if terminal_exists; then
- TERMINAL_ADDR=$(get_terminal_address)
+TERMINAL_ADDR=$(resolve_terminal_address)
+
+if [ -n "$TERMINAL_ADDR" ]; then
debug_echo "Found existing terminal: $TERMINAL_ADDR"
focused_monitor=$(get_monitor_info | awk '{print $6}')
dropdown_monitor=$(get_terminal_monitor)
@@ -324,8 +473,9 @@ if terminal_exists; then
echo "$TERMINAL_ADDR $monitor_name" >"$ADDR_FILE"
fi
- if terminal_in_special; then
- debug_echo "Bringing terminal from scratchpad with slide down animation"
+ hidden_state=$(get_hidden_state)
+ if [ "$hidden_state" = "hidden" ] || [ -z "$hidden_state" ] || window_is_hidden "$TERMINAL_ADDR"; then
+ debug_echo "Bringing terminal from hidden position with slide down animation"
# Calculate target position
pos_info=$(calculate_dropdown_position)
@@ -334,17 +484,16 @@ if terminal_exists; then
width=$(echo $pos_info | cut -d' ' -f3)
height=$(echo $pos_info | cut -d' ' -f4)
- # Use movetoworkspacesilent to avoid affecting workspace history
- hyprctl dispatch movetoworkspacesilent "$CURRENT_WS,address:$TERMINAL_ADDR"
- hyprctl dispatch pin "address:$TERMINAL_ADDR"
+ ensure_pinned "$TERMINAL_ADDR"
# Set size and animate slide down
hyprctl dispatch resizewindowpixel "exact $width $height,address:$TERMINAL_ADDR"
animate_slide_down "$TERMINAL_ADDR" "$target_x" "$target_y" "$width" "$height"
hyprctl dispatch focuswindow "address:$TERMINAL_ADDR"
+ set_hidden_state "shown"
else
- debug_echo "Hiding terminal to scratchpad with slide up animation"
+ debug_echo "Hiding terminal off-screen with slide up animation"
# Get current geometry for animation
geometry=$(get_window_geometry "$TERMINAL_ADDR")
@@ -359,14 +508,16 @@ if terminal_exists; then
# Animate slide up first
animate_slide_up "$TERMINAL_ADDR" "$curr_x" "$curr_y" "$curr_width" "$curr_height"
- # Small delay then move to special workspace and unpin
- sleep 0.1
- hyprctl dispatch pin "address:$TERMINAL_ADDR" # Unpin (toggle)
- hyprctl dispatch movetoworkspacesilent "$SPECIAL_WS,address:$TERMINAL_ADDR"
+ # Move off-screen after animation
+ off_y=$((curr_y - curr_height - 200))
+ hyprctl dispatch movewindowpixel "exact $curr_x $off_y,address:$TERMINAL_ADDR" >/dev/null 2>&1
+ ensure_unpinned "$TERMINAL_ADDR"
+ set_hidden_state "hidden"
else
- debug_echo "Could not get window geometry, moving to scratchpad without animation"
- hyprctl dispatch pin "address:$TERMINAL_ADDR"
- hyprctl dispatch movetoworkspacesilent "$SPECIAL_WS,address:$TERMINAL_ADDR"
+ debug_echo "Could not get window geometry, moving off-screen without animation"
+ hyprctl dispatch movewindowpixel "exact 0 -1000,address:$TERMINAL_ADDR" >/dev/null 2>&1
+ ensure_unpinned "$TERMINAL_ADDR"
+ set_hidden_state "hidden"
fi
fi
else
diff --git a/config/hypr/scripts/ExternalBrightness.sh b/config/hypr/scripts/ExternalBrightness.sh
new file mode 100755
index 00000000..29c1b238
--- /dev/null
+++ b/config/hypr/scripts/ExternalBrightness.sh
@@ -0,0 +1,103 @@
+#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
+# External monitor brightness via ddcutil
+
+set -u
+
+step=10
+vcp_code=10
+
+usage() {
+ cat <<'EOF'
+Usage: ExternalBrightness.sh [--get|--inc|--dec|--set N] [--display N]
+Env:
+ DDCUTIL_DISPLAY Optional display number passed to ddcutil --display
+ DDCUTIL_OPTS Extra options passed to ddcutil (e.g. "--sleep-multiplier 0.2")
+EOF
+}
+
+ddcutil_cmd() {
+ local display_arg=()
+ local display="${DDCUTIL_DISPLAY:-}"
+ if [[ -n "${display}" ]]; then
+ display_arg+=(--display "${display}")
+ fi
+ ddcutil ${DDCUTIL_OPTS:-} "${display_arg[@]}" "$@"
+}
+
+get_brightness() {
+ # Example output: "VCP code 0x10 (Brightness): current value = 50, max value = 100"
+ local line
+ if ! line="$(ddcutil_cmd getvcp "${vcp_code}" 2>/dev/null | tail -n 1)"; then
+ return 1
+ fi
+ local current max
+ current="$(printf "%s" "${line}" | sed -n 's/.*current value = \([0-9]\+\).*/\1/p')"
+ max="$(printf "%s" "${line}" | sed -n 's/.*max value = \([0-9]\+\).*/\1/p')"
+ [[ -n "${current}" && -n "${max}" ]] || return 1
+ printf "%s %s\n" "${current}" "${max}"
+}
+
+set_brightness() {
+ local value="$1"
+ ddcutil_cmd setvcp "${vcp_code}" "${value}" >/dev/null 2>&1
+}
+
+json_output() {
+ local current max percent icon
+ if ! read -r current max < <(get_brightness); then
+ printf '{"text":"󰃜 N/A","tooltip":"External brightness unavailable (load i2c-dev, allow i2c access)","class":"brightness-external-off"}\n'
+ return 0
+ fi
+ percent=$(( current * 100 / max ))
+ if (( percent >= 80 )); then
+ icon="󰃠"
+ elif (( percent >= 60 )); then
+ icon="󰃟"
+ elif (( percent >= 40 )); then
+ icon="󰃞"
+ elif (( percent >= 20 )); then
+ icon="󰃝"
+ else
+ icon=""
+ fi
+ printf '{"text":"%s %s%%","tooltip":"External display brightness: %s%%","class":"brightness-external"}\n' "${icon}" "${percent}" "${percent}"
+}
+
+case "${1:-}" in
+ --get|"")
+ json_output
+ ;;
+ --inc|--dec)
+ read -r current max < <(get_brightness) || exit 1
+ delta=$step
+ [[ "$1" == "--dec" ]] && delta=$(( -step ))
+ new=$(( current + delta ))
+ (( new < 5 )) && new=5
+ (( new > max )) && new="${max}"
+ set_brightness "${new}"
+ json_output
+ ;;
+ --set)
+ [[ -n "${2:-}" ]] || { usage; exit 1; }
+ set_brightness "${2}"
+ json_output
+ ;;
+ --display)
+ [[ -n "${2:-}" ]] || { usage; exit 1; }
+ DDCUTIL_DISPLAY="${2}" shift 2
+ "${0}" "${@:-"--get"}"
+ ;;
+ -h|--help)
+ usage
+ ;;
+ *)
+ usage
+ exit 1
+ ;;
+esac
diff --git a/config/hypr/scripts/Float-all-Windows.sh b/config/hypr/scripts/Float-all-Windows.sh
new file mode 100755
index 00000000..e658cabb
--- /dev/null
+++ b/config/hypr/scripts/Float-all-Windows.sh
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
+
+ws=$(hyprctl activeworkspace -j | jq -r .id)
+hyprctl clients -j | jq -r --arg ws "$ws" '.[] | select(.workspace.id == ($ws|tonumber)) | .address' | xargs -r -I {} hyprctl dispatch togglefloating address:{}
diff --git a/config/hypr/scripts/GameMode.sh b/config/hypr/scripts/GameMode.sh
index a28a27fb..9c5b8264 100755
--- a/config/hypr/scripts/GameMode.sh
+++ b/config/hypr/scripts/GameMode.sh
@@ -1,9 +1,16 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Game Mode. Turning off all animations
notif="$HOME/.config/swaync/images/ja.png"
SCRIPTSDIR="$HOME/.config/hypr/scripts"
+# shellcheck source=/dev/null
+. "$SCRIPTSDIR/WallpaperCmd.sh"
HYPRGAMEMODE=$(hyprctl getoption animations:enabled | awk 'NR==1{print $2}')
@@ -17,13 +24,13 @@ if [ "$HYPRGAMEMODE" = 1 ] ; then
keyword general:border_size 1;\
keyword decoration:rounding 0"
- hyprctl keyword "windowrule opacity 1 override 1 override 1 override, ^(.*)$"
- swww kill
+\thyprctl keyword "windowrule opacity 1 override 1 override 1 override, ^(.*)$"
+ "$WWW_CMD" kill
notify-send -e -u low -i "$notif" " Gamemode:" " enabled"
sleep 0.1
exit
else
- swww-daemon --format xrgb && swww img "$HOME/.config/rofi/.current_wallpaper" &
+\t"$WWW_DAEMON" "${WWW_DAEMON_ARGS[@]}" && "$WWW_CMD" img "$HOME/.config/rofi/.current_wallpaper" &
sleep 0.1
${SCRIPTSDIR}/WallustSwww.sh
sleep 0.5
diff --git a/config/hypr/scripts/Ghostty_themes.sh b/config/hypr/scripts/Ghostty_themes.sh
new file mode 100755
index 00000000..a69f246e
--- /dev/null
+++ b/config/hypr/scripts/Ghostty_themes.sh
@@ -0,0 +1,129 @@
+#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
+# Ghostty theme selector
+
+config_file="$HOME/.config/ghostty/config"
+iDIR="$HOME/.config/swaync/images"
+rofi_theme_primary="$HOME/.config/rofi/config-ghostty-theme.rasi"
+rofi_theme_fallback="$HOME/.config/rofi/config-edit.rasi"
+
+notify_user() {
+ local icon="$1"
+ local title="$2"
+ local body="$3"
+ if [[ -n "$icon" && -f "$icon" ]]; then
+ notify-send -u low -i "$icon" "$title" "$body"
+ else
+ notify-send -u low "$title" "$body"
+ fi
+}
+
+if [[ ! -f "$config_file" ]]; then
+ notify_user "$iDIR/error.png" "Ghostty Theme" "Config not found: $config_file"
+ exit 1
+fi
+
+rofi_config_args=()
+if [[ -f "$rofi_theme_primary" ]]; then
+ rofi_config_args=(-config "$rofi_theme_primary")
+elif [[ -f "$rofi_theme_fallback" ]]; then
+ rofi_config_args=(-config "$rofi_theme_fallback")
+fi
+
+current_theme=$(
+ awk -F'=' '/^[[:space:]]*theme[[:space:]]*=/ {
+ val=$2
+ sub(/^[[:space:]]+/, "", val)
+ sub(/[[:space:]]+$/, "", val)
+ gsub(/^"|"$/, "", val)
+ print val
+ exit
+ }' "$config_file"
+)
+
+mapfile -t available_theme_names < <(
+ awk -F'=' '/^[[:space:]]*#[[:space:]]*theme[[:space:]]*=/ {
+ val=$2
+ sub(/^[[:space:]]+/, "", val)
+ sub(/[[:space:]]+$/, "", val)
+ gsub(/^"|"$/, "", val)
+ print val
+ }' "$config_file"
+)
+
+if [[ ${#available_theme_names[@]} -eq 0 ]]; then
+ notify_user "$iDIR/error.png" "Ghostty Theme" "No commented themes found in $config_file"
+ exit 1
+fi
+
+menu_entries=()
+if [[ -n "$current_theme" ]]; then
+ menu_entries+=("Current: $current_theme")
+fi
+for t in "${available_theme_names[@]}"; do
+ menu_entries+=("$t")
+done
+
+choice=$(
+ printf "%s\n" "${menu_entries[@]}" |
+ rofi -i -dmenu -p "Ghostty Theme" "${rofi_config_args[@]}" -mesg "Select a theme to apply"
+)
+
+[[ -z "$choice" ]] && exit 0
+
+if [[ "$choice" == "Current: "* ]]; then
+ exit 0
+fi
+
+selected_theme="$choice"
+
+if [[ -n "$current_theme" && "$selected_theme" == "$current_theme" ]]; then
+ exit 0
+fi
+
+format_theme_value() {
+ if [[ "$1" =~ [[:space:]] ]]; then
+ printf "\"%s\"" "$1"
+ else
+ printf "%s" "$1"
+ fi
+}
+
+selected_formatted=$(format_theme_value "$selected_theme")
+
+tmp_file=$(mktemp)
+awk -v selected="$selected_theme" -v selected_formatted="$selected_formatted" '
+function trim(s) { sub(/^[[:space:]]+/, "", s); sub(/[[:space:]]+$/, "", s); return s }
+function strip_quotes(s) { gsub(/^"|"$/, "", s); return s }
+{
+ line=$0
+ if ($0 ~ /^[[:space:]]*theme[[:space:]]*=/) {
+ sub(/^[[:space:]]*theme[[:space:]]*=/, "#theme =", line)
+ print line
+ next
+ }
+ if ($0 ~ /^[[:space:]]*#[[:space:]]*theme[[:space:]]*=/) {
+ val=$0
+ sub(/^[[:space:]]*#[[:space:]]*theme[[:space:]]*=[[:space:]]*/, "", val)
+ val=trim(val)
+ val=strip_quotes(val)
+ if (val == selected) {
+ print "theme = " selected_formatted
+ next
+ }
+ }
+ print $0
+}' "$config_file" > "$tmp_file"
+
+mv "$tmp_file" "$config_file"
+
+pkill -SIGUSR2 ghostty >/dev/null 2>&1 || true
+
+notify_user "$iDIR/ja.png" "Ghostty Theme Applied" "$selected_theme"
+
+exit 0
diff --git a/config/hypr/scripts/Hypridle.sh b/config/hypr/scripts/Hypridle.sh
index 4bf6a985..240fec3e 100755
--- a/config/hypr/scripts/Hypridle.sh
+++ b/config/hypr/scripts/Hypridle.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# This is for custom version of waybar idle_inhibitor which activates / deactivates hypridle instead
PROCESS="hypridle"
diff --git a/config/hypr/scripts/Hyprsunset.sh b/config/hypr/scripts/Hyprsunset.sh
index 4a2b52f4..52140728 100755
--- a/config/hypr/scripts/Hyprsunset.sh
+++ b/config/hypr/scripts/Hyprsunset.sh
@@ -1,4 +1,10 @@
#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
set -euo pipefail
# Hyprsunset toggle + Waybar status helper
diff --git a/config/hypr/scripts/KeyBinds.sh b/config/hypr/scripts/KeyBinds.sh
index 341f104f..69111047 100755
--- a/config/hypr/scripts/KeyBinds.sh
+++ b/config/hypr/scripts/KeyBinds.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# searchable enabled keybinds using rofi (supports bindd descriptions)
# kill yad to not interfere with this binds
diff --git a/config/hypr/scripts/KeyHints.sh b/config/hypr/scripts/KeyHints.sh
index 3916a925..f00837d3 100755
--- a/config/hypr/scripts/KeyHints.sh
+++ b/config/hypr/scripts/KeyHints.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# GDK BACKEND. Change to either wayland or x11 if having issues
BACKEND=wayland
@@ -40,8 +45,8 @@ GDK_BACKEND=$BACKEND yad \
" ALT mouse scroll up/down " "Desktop Zoom" "Desktop Magnifier" \
" Alt V" "Clipboard Manager" "(cliphist)" \
" W" "Choose wallpaper" "(Wallpaper Menu)" \
-" Shift W" "Choose wallpaper effects" "(imagemagick + swww)" \
-"CTRL ALT W" "Random wallpaper" "(via swww)" \
+" Shift W" "Choose wallpaper effects" "(imagemagick + awww)" \
+"CTRL ALT W" "Random wallpaper" "(via awww)" \
" CTRL ALT B" "Hide/UnHide Waybar" "waybar" \
" CTRL B" "Choose waybar styles" "(waybar styles)" \
" ALT B" "Choose waybar layout" "(waybar layout)" \
diff --git a/config/hypr/scripts/KeybindsLayoutInit.sh b/config/hypr/scripts/KeybindsLayoutInit.sh
index 80bee9d6..f47197af 100755
--- a/config/hypr/scripts/KeybindsLayoutInit.sh
+++ b/config/hypr/scripts/KeybindsLayoutInit.sh
@@ -1,14 +1,19 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Initialize J/K keybinds so they always cycle windows globally (no layout-specific behavior)
# This avoids double-actions when layouts change.
set -euo pipefail
# Always reset and bind SUPER+J/K the same way on startup
-hyprctl keyword unbind SUPER,J || true
-hyprctl keyword unbind SUPER,K || true
+hyprctl keyword unbind SUPER,j || true
+hyprctl keyword unbind SUPER,k || true
-# Cycle windows globally: J = next, K = previous
-hyprctl keyword bind SUPER,J,cyclenext
-hyprctl keyword bind SUPER,K,cyclenext,prev
+# Cycle windows globally
+hyprctl keyword bind SUPER,j,layoutmsg,cyclenext
+hyprctl keyword bind SUPER,k,layoutmsg,cycleprev
diff --git a/config/hypr/scripts/KeyboardLayout.sh b/config/hypr/scripts/KeyboardLayout.sh
index 926514dd..fe092e7f 100755
--- a/config/hypr/scripts/KeyboardLayout.sh
+++ b/config/hypr/scripts/KeyboardLayout.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# This is for changing kb_layouts. Set kb_layouts in "$HOME/.config/hypr/UserConfigs/UserSettings.conf"
notif_icon="$HOME/.config/swaync/images/ja.png"
diff --git a/config/hypr/scripts/KillActiveProcess.sh b/config/hypr/scripts/KillActiveProcess.sh
index ff0628b2..66d6b009 100755
--- a/config/hypr/scripts/KillActiveProcess.sh
+++ b/config/hypr/scripts/KillActiveProcess.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Copied from Discord post. Thanks to @Zorg
diff --git a/config/hypr/scripts/Kitty_themes.sh b/config/hypr/scripts/Kitty_themes.sh
index 8bc6e0f0..3183b20b 100755
--- a/config/hypr/scripts/Kitty_themes.sh
+++ b/config/hypr/scripts/Kitty_themes.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */  #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Kitty Themes Source https://github.com/dexpota/kitty-themes #
# Define directories and variables
@@ -23,6 +28,8 @@ apply_kitty_theme_to_config() {
fi
local theme_file_path_to_apply
if [ "$theme_name_to_apply" = "Set by wallpaper" ]; then
+ theme_file_path_to_apply="$kitty_themes_DiR/01-Wallust.conf"
+ elif [ "$theme_name_to_apply" = "Default no color" ]; then
theme_file_path_to_apply="$kitty_themes_DiR/00-Default.conf"
else
theme_file_path_to_apply="$kitty_themes_DiR/$theme_name_to_apply.conf"
@@ -80,7 +87,7 @@ fi
original_kitty_config_content_backup=$(cat "$kitty_config")
mapfile -t available_theme_names < <(find "$kitty_themes_DiR" -maxdepth 1 -name "*.conf" -type f -printf "%f\n" | sed 's/\.conf$//' | grep -v -E '^(00-Default|01-Wallust)$' | sort)
-available_theme_names=("Set by wallpaper" "${available_theme_names[@]}")
+available_theme_names=("Set by wallpaper" "Default no color" "${available_theme_names[@]}")
if [ ${#available_theme_names[@]} -eq 0 ]; then
notify_user "$iDIR/error.png" "No Kitty Themes" "No .conf files found in $kitty_themes_DiR."
@@ -89,8 +96,10 @@ fi
current_selection_index=0
current_active_theme_name=$(awk -F'include ./kitty-themes/|\\.conf' '/^[[:space:]]*include \\.\/kitty-themes\/.*\\.conf/{print $2; exit}' "$kitty_config")
-if [ "$current_active_theme_name" = "00-Default" ]; then
+if [ "$current_active_theme_name" = "01-Wallust" ]; then
current_active_theme_name="Set by wallpaper"
+elif [ "$current_active_theme_name" = "00-Default" ]; then
+ current_active_theme_name="Default no color"
fi
if [ -n "$current_active_theme_name" ]; then
diff --git a/config/hypr/scripts/KooLsDotsUpdate.sh b/config/hypr/scripts/KooLsDotsUpdate.sh
index 8ed50f27..887993a5 100755
--- a/config/hypr/scripts/KooLsDotsUpdate.sh
+++ b/config/hypr/scripts/KooLsDotsUpdate.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# simple bash script to check if update is available by comparing local version and github version
# Local Paths
diff --git a/config/hypr/scripts/Kool_Quick_Settings.sh b/config/hypr/scripts/Kool_Quick_Settings.sh
index 5081fe72..fcd04998 100755
--- a/config/hypr/scripts/Kool_Quick_Settings.sh
+++ b/config/hypr/scripts/Kool_Quick_Settings.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Rofi menu for KooL Hyprland Quick Settings (SUPER SHIFT E)
# Updated for UserConfigs/configs separation
@@ -193,6 +198,7 @@ Edit System Default Settings
--- UTILITIES ---
Set SDDM Wallpaper
Choose Kitty Terminal Theme
+Choose Ghostty Terminal Theme
Configure Monitors (nwg-displays)
Configure Workspace Rules (nwg-displays)
GTK Settings (nwg-look)
@@ -230,6 +236,7 @@ main() {
"Edit System Default Settings") file="$configs/SystemSettings.conf" ;;
"Set SDDM Wallpaper") $scriptsDir/sddm_wallpaper.sh --normal ;;
"Choose Kitty Terminal Theme") $scriptsDir/Kitty_themes.sh ;;
+ "Choose Ghostty Terminal Theme") $scriptsDir/Ghostty_themes.sh ;;
"Configure Monitors (nwg-displays)")
if ! command -v nwg-displays &>/dev/null; then
notify-send -i "$iDIR/error.png" "E-R-R-O-R" "Install nwg-displays first"
diff --git a/config/hypr/scripts/LockScreen.sh b/config/hypr/scripts/LockScreen.sh
index 548a7652..a7b27ad9 100755
--- a/config/hypr/scripts/LockScreen.sh
+++ b/config/hypr/scripts/LockScreen.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# For Hyprlock
#pidof hyprlock || hyprlock -q
diff --git a/config/hypr/scripts/MediaCtrl.sh b/config/hypr/scripts/MediaCtrl.sh
index b49a967b..aeabcac9 100755
--- a/config/hypr/scripts/MediaCtrl.sh
+++ b/config/hypr/scripts/MediaCtrl.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Playerctl
music_icon="$HOME/.config/swaync/icons/music.png"
diff --git a/config/hypr/scripts/MonitorProfiles.sh b/config/hypr/scripts/MonitorProfiles.sh
index 62213490..78825986 100755
--- a/config/hypr/scripts/MonitorProfiles.sh
+++ b/config/hypr/scripts/MonitorProfiles.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# For applying Pre-configured Monitor Profiles
# Check if rofi is already running
diff --git a/config/hypr/scripts/OverviewToggle.sh b/config/hypr/scripts/OverviewToggle.sh
index 3fe9ba96..719788da 100755
--- a/config/hypr/scripts/OverviewToggle.sh
+++ b/config/hypr/scripts/OverviewToggle.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Overview toggle wrapper - tries Quickshell first, falls back to AGS
set -euo pipefail
diff --git a/config/hypr/scripts/Polkit-NixOS.sh b/config/hypr/scripts/Polkit-NixOS.sh
index 925deab5..c1e6e0a2 100755
--- a/config/hypr/scripts/Polkit-NixOS.sh
+++ b/config/hypr/scripts/Polkit-NixOS.sh
@@ -1,6 +1,26 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
-# For NixOS starting of polkit-gnome. Dec 2023, the settings stated in NixOS wiki does not work so have to manual start it
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
+# For NixOS starting of polkit agents. Prefer xfce4-polkit, fallback to polkit-gnome.
+
+# Find all xfce4-polkit executables in the Nix store
+xfce_polkit_paths=$(find /nix/store -name 'xfce4-polkit' -type f 2>/dev/null)
+
+for xfce_polkit_path in $xfce_polkit_paths; do
+ # Extract the directory containing the executable
+ xfce_polkit_dir=$(dirname "$xfce_polkit_path")
+
+ # Check if the executable is valid and exists
+ if [ -x "$xfce_polkit_dir/xfce4-polkit" ]; then
+ # Start the xfce4-polkit Authentication Agent
+ "$xfce_polkit_dir/xfce4-polkit" &
+ exit 0
+ fi
+done
# Find all polkit-gnome executables in the Nix store
polkit_gnome_paths=$(find /nix/store -name 'polkit-gnome-authentication-agent-1' -type f 2>/dev/null)
@@ -18,4 +38,4 @@ for polkit_gnome_path in $polkit_gnome_paths; do
done
# If no valid executable is found, report an error
-echo "No valid Polkit-GNOME Authentication Agent executable found." \ No newline at end of file
+echo "No valid polkit authentication agent executable found."
diff --git a/config/hypr/scripts/Polkit.sh b/config/hypr/scripts/Polkit.sh
index 9db94d89..768747ab 100755
--- a/config/hypr/scripts/Polkit.sh
+++ b/config/hypr/scripts/Polkit.sh
@@ -1,19 +1,47 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# This script starts the first available Polkit agent from a list of possible locations
+# Avoid duplicate agents (common with UWSM/session autostart)
+if pgrep -u "$UID" -f 'xfce-polkit|polkit-gnome-authentication-agent-1|polkit-kde-authentication-agent-1|polkit-mate-authentication-agent-1|mate-polkit|hyprpolkitagent' >/dev/null 2>&1; then
+ echo "Polkit agent already running. Skipping start."
+ exit 0
+fi
+
+# Ensure Qt apps default to Wayland in a Wayland session
+if [ -n "${WAYLAND_DISPLAY:-}" ] && [ -z "${QT_QPA_PLATFORM:-}" ]; then
+ export QT_QPA_PLATFORM=wayland
+fi
-# List of potential Polkit agent file paths
+# Avoid KDE polkit agent crashing if Kvantum QML module is missing
+if [ -z "${QT_QUICK_CONTROLS_STYLE:-}" ]; then
+ export QT_QUICK_CONTROLS_STYLE=Basic
+fi
+if [ -z "${QT_STYLE_OVERRIDE:-}" ]; then
+ export QT_STYLE_OVERRIDE=Fusion
+fi
+
+# List of potential Polkit agent file paths (preferred order)
polkit=(
+ "/usr/bin/xfce-polkit"
+ "/usr/lib/xfce4/polkit-agent/xfce-polkit"
+ "/usr/libexec/xfce-polkit"
"/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1"
- "/usr/libexec/hyprpolkitagent"
- "/usr/lib/hyprpolkitagent"
- "/usr/lib/hyprpolkitagent/hyprpolkitagent"
- "/usr/lib/polkit-kde-authentication-agent-1"
"/usr/lib/polkit-gnome-authentication-agent-1"
"/usr/libexec/polkit-gnome-authentication-agent-1"
"/usr/libexec/polkit-mate-authentication-agent-1"
- "/usr/lib/x86_64-linux-gnu/libexec/polkit-kde-authentication-agent-1"
+ "/usr/lib/polkit-mate/polkit-mate-authentication-agent-1"
+ "/usr/bin/polkit-mate-authentication-agent-1"
"/usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1"
+ "/usr/lib/polkit-kde-authentication-agent-1"
+ "/usr/libexec/polkit-kde-authentication-agent-1"
+ "/usr/libexec/hyprpolkitagent"
+ "/usr/lib/hyprpolkitagent"
+ "/usr/lib/hyprpolkitagent/hyprpolkitagent"
)
executed=false
diff --git a/config/hypr/scripts/PortalHyprland.sh b/config/hypr/scripts/PortalHyprland.sh
index 79b1bb96..243ee2e8 100755
--- a/config/hypr/scripts/PortalHyprland.sh
+++ b/config/hypr/scripts/PortalHyprland.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# For manually starting xdg-desktop-portal-hyprland
set -euo pipefail
diff --git a/config/hypr/scripts/PortalHyprlandUbuntu.sh b/config/hypr/scripts/PortalHyprlandUbuntu.sh
new file mode 100755
index 00000000..86e1a6d3
--- /dev/null
+++ b/config/hypr/scripts/PortalHyprlandUbuntu.sh
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
+# Ubuntu-based workaround: start portals manually before waybar.
+
+set -euo pipefail
+
+if [[ -r /etc/os-release ]]; then
+ # shellcheck disable=SC1091
+ . /etc/os-release
+ if [[ "${ID:-}" == "ubuntu" \
+ || "${ID:-}" == "linuxmint" \
+ || "${ID:-}" == "zorin" \
+ || "${ID:-}" == "rhino" \
+ || "${ID_LIKE:-}" == *ubuntu* ]]; then
+ if [[ -x "$HOME/.config/hypr/scripts/PortalHyprland.sh" ]]; then
+ "$HOME/.config/hypr/scripts/PortalHyprland.sh"
+ fi
+ fi
+fi
diff --git a/config/hypr/scripts/PortalHyprlandUbuntu2604.sh b/config/hypr/scripts/PortalHyprlandUbuntu2604.sh
deleted file mode 100755
index 5cb3c01b..00000000
--- a/config/hypr/scripts/PortalHyprlandUbuntu2604.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
-# Ubuntu 26.04 workaround: start portals manually before waybar.
-
-set -euo pipefail
-
-if [[ -r /etc/os-release ]]; then
- # shellcheck disable=SC1091
- . /etc/os-release
- if [[ "${ID:-}" == "ubuntu" && "${VERSION_ID:-}" == "26.04" ]]; then
- if [[ -x "$HOME/.config/hypr/scripts/PortalHyprland.sh" ]]; then
- "$HOME/.config/hypr/scripts/PortalHyprland.sh"
- fi
- fi
-fi
diff --git a/config/hypr/scripts/Refresh.sh b/config/hypr/scripts/Refresh.sh
index 95248b35..03f55fa0 100755
--- a/config/hypr/scripts/Refresh.sh
+++ b/config/hypr/scripts/Refresh.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Scripts for refreshing ags, waybar, rofi, swaync, wallust
SCRIPTSDIR=$HOME/.config/hypr/scripts
@@ -14,8 +19,8 @@ file_exists() {
fi
}
-# Kill already running processes
-_ps=(waybar rofi swaync ags)
+# Kill already running processes (exclude waybar to avoid double reloads)
+_ps=(rofi swaync ags)
for _prs in "${_ps[@]}"; do
if pidof "${_prs}" >/dev/null; then
pkill "${_prs}"
@@ -25,10 +30,6 @@ done
# Clean up any Waybar-spawned cava instances (unique temp conf names)
pkill -f 'waybar-cava\..*\.conf' 2>/dev/null || true
-# added since wallust sometimes not applying
-killall -SIGUSR2 waybar
-# Added sleep for GameMode causing multiple waybar
-sleep 0.1
# quit ags & relaunch ags
#ags -q && ags &
@@ -36,15 +37,22 @@ sleep 0.1
# quit quickshell & relaunch quickshell
#pkill qs && qs &
-# some process to kill
-for pid in $(pidof waybar rofi swaync ags swaybg); do
+# some process to kill (exclude waybar to avoid restart loops)
+for pid in $(pidof rofi swaync ags swaybg); do
kill -SIGUSR1 "$pid"
sleep 0.1
done
-#Restart waybar
-sleep 0.1
-waybar &
+# Reload or start waybar once
+if pidof waybar >/dev/null; then
+ if command -v waybar-msg >/dev/null 2>&1; then
+ waybar-msg cmd reload >/dev/null 2>&1 || true
+ else
+ killall -SIGUSR2 waybar 2>/dev/null || true
+ fi
+else
+ waybar &
+fi
# relaunch swaync
sleep 0.3
diff --git a/config/hypr/scripts/RefreshNoWaybar.sh b/config/hypr/scripts/RefreshNoWaybar.sh
index afbda1f2..f5d564ac 100755
--- a/config/hypr/scripts/RefreshNoWaybar.sh
+++ b/config/hypr/scripts/RefreshNoWaybar.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Modified version of Refresh.sh but waybar wont refresh
# Used by automatic wallpaper change
@@ -31,9 +36,6 @@ done
# quit quickshell & relaunch quickshell
#pkill qs && qs &
-# Wallust refresh (synchronous to ensure colors are ready)
-${SCRIPTSDIR}/WallustSwww.sh
-sleep 0.2
# reload swaync
swaync-client --reload-config
diff --git a/config/hypr/scripts/RofiEmoji.sh b/config/hypr/scripts/RofiEmoji.sh
index a21c2374..539a03b6 100755
--- a/config/hypr/scripts/RofiEmoji.sh
+++ b/config/hypr/scripts/RofiEmoji.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Variables
rofi_theme="$HOME/.config/rofi/config-emoji.rasi"
diff --git a/config/hypr/scripts/RofiSearch.sh b/config/hypr/scripts/RofiSearch.sh
index d7dd5726..42b54d75 100755
--- a/config/hypr/scripts/RofiSearch.sh
+++ b/config/hypr/scripts/RofiSearch.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# For Searching via web browsers
# Define the path to the config file
diff --git a/config/hypr/scripts/RofiThemeSelector-modified.sh b/config/hypr/scripts/RofiThemeSelector-modified.sh
index de3ebf4a..535b7313 100755
--- a/config/hypr/scripts/RofiThemeSelector-modified.sh
+++ b/config/hypr/scripts/RofiThemeSelector-modified.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# A modified version of Rofi-Theme-Selector, concentrating only on ~/.local and also, applying only 10 @themes in ~/.config/rofi/config.rasi
# as opposed to continous adding of //@theme
diff --git a/config/hypr/scripts/RofiThemeSelector.sh b/config/hypr/scripts/RofiThemeSelector.sh
index 66327d09..db723b6f 100755
--- a/config/hypr/scripts/RofiThemeSelector.sh
+++ b/config/hypr/scripts/RofiThemeSelector.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */  #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Rofi Themes - Script to preview and apply themes by live-reloading the config.
# --- Configuration ---
diff --git a/config/hypr/scripts/ScreenShot.sh b/config/hypr/scripts/ScreenShot.sh
index b12c08f0..baad89a1 100755
--- a/config/hypr/scripts/ScreenShot.sh
+++ b/config/hypr/scripts/ScreenShot.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Screenshots scripts
# variables
@@ -25,7 +30,7 @@ notify_cmd_NOT="notify-send -u low -i ${iDoR}/note.png "
notify_view() {
if [[ "$1" == "active" ]]; then
if [[ -e "${active_window_path}" ]]; then
- "${sDIR}/Sounds.sh" --screenshot
+ "${sDIR}/Sounds.sh" --screenshot >/dev/null 2>&1 &
resp=$(timeout 5 ${notify_cmd_shot_win} " Screenshot of:" " ${active_window_class} Saved.")
case "$resp" in
action1)
@@ -37,11 +42,11 @@ notify_view() {
esac
else
${notify_cmd_NOT} " Screenshot of:" " ${active_window_class} NOT Saved."
- "${sDIR}/Sounds.sh" --error
+ "${sDIR}/Sounds.sh" --error >/dev/null 2>&1 &
fi
elif [[ "$1" == "swappy" ]]; then
- "${sDIR}/Sounds.sh" --screenshot
+ "${sDIR}/Sounds.sh" --screenshot >/dev/null 2>&1 &
resp=$(${notify_cmd_shot} " Screenshot:" " Captured by Swappy")
case "$resp" in
action1)
@@ -55,7 +60,7 @@ notify_view() {
else
local check_file="${dir}/${file}"
if [[ -e "$check_file" ]]; then
- "${sDIR}/Sounds.sh" --screenshot
+ "${sDIR}/Sounds.sh" --screenshot >/dev/null 2>&1 &
resp=$(timeout 5 ${notify_cmd_shot} " Screenshot" " Saved")
case "$resp" in
action1)
@@ -67,7 +72,7 @@ notify_view() {
esac
else
${notify_cmd_NOT} " Screenshot" " NOT Saved"
- "${sDIR}/Sounds.sh" --error
+ "${sDIR}/Sounds.sh" --error >/dev/null 2>&1 &
fi
fi
}
@@ -83,14 +88,12 @@ countdown() {
# take shots
shotnow() {
cd ${dir} && grim - | tee "$file" | wl-copy
- sleep 2
notify_view
}
shot5() {
countdown '5'
sleep 1 && cd ${dir} && grim - | tee "$file" | wl-copy
- sleep 1
notify_view
}
@@ -125,7 +128,6 @@ shotactive() {
active_window_path="${dir}/${active_window_file}"
hyprctl -j activewindow | jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"' | grim -g - "${active_window_path}"
- sleep 1
notify_view "active"
}
@@ -156,10 +158,10 @@ elif [[ "$1" == "--area" ]]; then
shotarea
elif [[ "$1" == "--active" ]]; then
shotactive
-elif [[ "$1" == "--swappy" ]]; then
+elif [[ "$1" == "--swappy" || "$1" == "--swapp" || "$1" == "--swap" ]]; then
shotswappy
else
- echo -e "Available Options : --now --in5 --in10 --win --area --active --swappy"
+ echo -e "Available Options : --now --in5 --in10 --win --area --active --swappy (--swapp/--swap)"
fi
exit 0
diff --git a/config/hypr/scripts/Sounds.sh b/config/hypr/scripts/Sounds.sh
index 7c0bf57c..3af4944f 100755
--- a/config/hypr/scripts/Sounds.sh
+++ b/config/hypr/scripts/Sounds.sh
@@ -1,10 +1,16 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# This script is used to play system sounds.
# Script is used by Volume.Sh and ScreenShots.sh
theme="freedesktop" # Set the theme for the system sounds.
mute=false # Set to true to mute the system sounds.
+directSoundDir="$HOME/.config/hypr/sounds"
# Mute individual sounds here.
muteScreenshots=false
@@ -20,16 +26,19 @@ if [[ "$1" == "--screenshot" ]]; then
if [[ "$muteScreenshots" = true ]]; then
exit 0
fi
+ directSound="$directSoundDir/screenshot.ogg"
soundoption="screen-capture.*"
elif [[ "$1" == "--volume" ]]; then
if [[ "$muteVolume" = true ]]; then
exit 0
fi
+ directSound="$directSoundDir/volume.ogg"
soundoption="audio-volume-change.*"
elif [[ "$1" == "--error" ]]; then
if [[ "$muteScreenshots" = true ]]; then
exit 0
fi
+ directSound="$directSoundDir/error.ogg"
soundoption="dialog-error.*"
else
echo -e "Available sounds: --screenshot, --volume, --error"
@@ -57,6 +66,29 @@ fi
iTheme=$(cat "$sDIR/index.theme" | grep -i "inherits" | cut -d "=" -f 2)
iDIR="$sDIR/../$iTheme"
+# Helper to play in the background (fast return).
+play_sound() {
+ if command -v paplay >/dev/null 2>&1; then
+ paplay "$1" >/dev/null 2>&1 &
+ exit 0
+ fi
+ if command -v pw-play >/dev/null 2>&1; then
+ pw-play "$1" >/dev/null 2>&1 &
+ exit 0
+ fi
+ if command -v aplay >/dev/null 2>&1; then
+ aplay "$1" >/dev/null 2>&1 &
+ exit 0
+ fi
+ echo "Error: No suitable audio player found. Install paplay (pulseaudio-utils) or PipeWire/ALSA tools."
+ exit 1
+}
+
+# If a direct sound file exists, play it immediately to avoid lookup delay.
+if [[ -n "$directSound" && -f "$directSound" ]]; then
+ play_sound "$directSound"
+fi
+
# Find the sound file and play it.
sound_file=$(find -L $sDIR/stereo -name "$soundoption" -print -quit)
if ! test -f "$sound_file"; then
@@ -72,19 +104,5 @@ if ! test -f "$sound_file"; then
fi
fi
fi
-
-# Play the sound: prefer PipeWire, then PulseAudio, then ALSA
-if command -v pw-play >/dev/null 2>&1; then
- pw-play "$sound_file" && exit 0
-fi
-
-if command -v paplay >/dev/null 2>&1; then
- paplay "$sound_file" && exit 0
-fi
-
-if command -v aplay >/dev/null 2>&1; then
- aplay "$sound_file" && exit 0
-fi
-
-echo "Error: No suitable audio player (pw-play/paplay/aplay) found."
-exit 1
+# Play the sound (background for quick return).
+play_sound "$sound_file"
diff --git a/config/hypr/scripts/Tak0-Autodispatch.sh b/config/hypr/scripts/Tak0-Autodispatch.sh
index 6ed7ec13..034a6402 100755
--- a/config/hypr/scripts/Tak0-Autodispatch.sh
+++ b/config/hypr/scripts/Tak0-Autodispatch.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# ─────────────────────────────────────────────────────────────────────────────
# Tak0-Autodispatch.sh
# ─────────────────────────────────────────────────────────────────────────────
diff --git a/config/hypr/scripts/Tak0-Per-Window-Switch.sh b/config/hypr/scripts/Tak0-Per-Window-Switch.sh
index 3ba2c7af..04baebe0 100755
--- a/config/hypr/scripts/Tak0-Per-Window-Switch.sh
+++ b/config/hypr/scripts/Tak0-Per-Window-Switch.sh
@@ -1,3 +1,9 @@
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
##################################################################
# #
# #
diff --git a/config/hypr/scripts/ThemeChanger.sh b/config/hypr/scripts/ThemeChanger.sh
index 19ee3298..b41738f6 100755
--- a/config/hypr/scripts/ThemeChanger.sh
+++ b/config/hypr/scripts/ThemeChanger.sh
@@ -1,4 +1,10 @@
#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
set -euo pipefail
# SPDX-FileCopyrightText: 2025-present Ahum Maitra theahummaitra@gmail.com
diff --git a/config/hypr/scripts/Toggle-Active-Window-Audio.sh b/config/hypr/scripts/Toggle-Active-Window-Audio.sh
index 4d9bcd33..f32ded0e 100755
--- a/config/hypr/scripts/Toggle-Active-Window-Audio.sh
+++ b/config/hypr/scripts/Toggle-Active-Window-Audio.sh
@@ -1,4 +1,10 @@
#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
set -euo pipefail
XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
diff --git a/config/hypr/scripts/Toggle-weather-waybar-units.sh b/config/hypr/scripts/Toggle-weather-waybar-units.sh
index 4007536c..abc089ff 100755
--- a/config/hypr/scripts/Toggle-weather-waybar-units.sh
+++ b/config/hypr/scripts/Toggle-weather-waybar-units.sh
@@ -1,4 +1,10 @@
#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Toggle waybar-weather units between metric and imperial
CONFIG_FILE="$HOME/.config/waybar-weather/config.toml"
diff --git a/config/hypr/scripts/TouchPad.sh b/config/hypr/scripts/TouchPad.sh
index 56506382..1042a652 100755
--- a/config/hypr/scripts/TouchPad.sh
+++ b/config/hypr/scripts/TouchPad.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# For disabling touchpad.
# Edit the Touchpad_Device on ~/.config/hypr/UserConfigs/Laptops.conf according to your system
# use hyprctl devices to get your system touchpad device name
diff --git a/config/hypr/scripts/UptimeNixOS.sh b/config/hypr/scripts/UptimeNixOS.sh
index 654ae2c8..5c3085b1 100755
--- a/config/hypr/scripts/UptimeNixOS.sh
+++ b/config/hypr/scripts/UptimeNixOS.sh
@@ -1,4 +1,10 @@
#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Script parses /proc/uptime to get the system uptime
# and prints it in a human-readable format
# This is a workaround for system where `uptime` command is taken from coreutils
diff --git a/config/hypr/scripts/UserConfigsSwitcher.sh b/config/hypr/scripts/UserConfigsSwitcher.sh
index ac44b4bc..7d9968a6 100755
--- a/config/hypr/scripts/UserConfigsSwitcher.sh
+++ b/config/hypr/scripts/UserConfigsSwitcher.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Script to manage UserConfigs and UserConfigsBak
HYPR_CONFIG_DIR="$HOME/.config/hypr"
diff --git a/config/hypr/scripts/Volume.sh b/config/hypr/scripts/Volume.sh
index 41e474d0..dec7837c 100755
--- a/config/hypr/scripts/Volume.sh
+++ b/config/hypr/scripts/Volume.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Scripts for volume controls for audio and mic
iDIR="$HOME/.config/swaync/icons"
diff --git a/config/hypr/scripts/WallpaperCmd.sh b/config/hypr/scripts/WallpaperCmd.sh
new file mode 100755
index 00000000..0191ee14
--- /dev/null
+++ b/config/hypr/scripts/WallpaperCmd.sh
@@ -0,0 +1,31 @@
+#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
+# Wallpaper command selector (awww preferred, swww fallback)
+
+if command -v awww >/dev/null 2>&1; then
+ WWW_CMD="awww"
+ WWW_DAEMON="awww-daemon"
+ WWW_CACHE_DIR="$HOME/.cache/awww"
+ WWW_DAEMON_ARGS=()
+ WWW_MIGRATION_MARKER="$WWW_CACHE_DIR/.cache_cleared"
+else
+ WWW_CMD="swww"
+ WWW_DAEMON="swww-daemon"
+ WWW_CACHE_DIR="$HOME/.cache/swww"
+ WWW_DAEMON_ARGS=(--format xrgb)
+fi
+# One-time cache clear when migrating from swww to awww
+if [ "$WWW_CMD" = "awww" ]; then
+ mkdir -p "$WWW_CACHE_DIR"
+ if [ ! -f "$WWW_MIGRATION_MARKER" ]; then
+ awww clear-cache >/dev/null 2>&1 || true
+ touch "$WWW_MIGRATION_MARKER"
+ fi
+fi
+
+export WWW_CMD WWW_DAEMON WWW_CACHE_DIR WWW_DAEMON_ARGS WWW_MIGRATION_MARKER
diff --git a/config/hypr/scripts/WallpaperDaemon.sh b/config/hypr/scripts/WallpaperDaemon.sh
new file mode 100755
index 00000000..fc7f71c0
--- /dev/null
+++ b/config/hypr/scripts/WallpaperDaemon.sh
@@ -0,0 +1,66 @@
+#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
+# Start wallpaper daemon, preferring awww with swww fallback
+
+SCRIPTSDIR="$HOME/.config/hypr/scripts"
+# shellcheck source=/dev/null
+. "$SCRIPTSDIR/WallpaperCmd.sh"
+
+if command -v "$WWW_DAEMON" >/dev/null 2>&1 && command -v "$WWW_CMD" >/dev/null 2>&1; then
+ "$WWW_DAEMON" "${WWW_DAEMON_ARGS[@]}" &
+fi
+
+# Give the daemon a moment to become ready
+for _ in {1..20}; do
+ "$WWW_CMD" query >/dev/null 2>&1 && break
+ sleep 0.1
+done
+
+wallpaper_link="$HOME/.config/rofi/.current_wallpaper"
+wallpaper_current="$HOME/.config/hypr/wallpaper_effects/.wallpaper_current"
+wallpaper_path=""
+
+# Prefer the symlink target if it's valid
+if [ -L "$wallpaper_link" ]; then
+ resolved="$(readlink -f "$wallpaper_link")"
+ if [ -n "$resolved" ] && [ -f "$resolved" ]; then
+ wallpaper_path="$resolved"
+ fi
+fi
+
+# Fall back to link file or copied current wallpaper
+if [ -z "$wallpaper_path" ] && [ -f "$wallpaper_link" ]; then
+ wallpaper_path="$wallpaper_link"
+fi
+if [ -z "$wallpaper_path" ] && [ -f "$wallpaper_current" ]; then
+ wallpaper_path="$wallpaper_current"
+fi
+
+# Last resort: use cached swww/awww wallpaper paths
+if [ -z "$wallpaper_path" ]; then
+ for cache_dir in "$HOME/.cache/awww" "$HOME/.cache/swww"; do
+ [ -d "$cache_dir" ] || continue
+ for cache_file in "$cache_dir"/*; do
+ [ -f "$cache_file" ] || continue
+ candidate="$(awk 'NF && $0 !~ /^filter/ {print; exit}' "$cache_file")"
+ if [ -n "$candidate" ] && [ -f "$candidate" ]; then
+ wallpaper_path="$candidate"
+ break
+ fi
+ done
+ [ -n "$wallpaper_path" ] && break
+ done
+fi
+
+if [ -n "$wallpaper_path" ] && [ -f "$wallpaper_path" ]; then
+ if ! "$WWW_CMD" img "$wallpaper_path" >/dev/null 2>&1; then
+ # Retry once after a short delay
+ sleep 0.3
+ "$WWW_CMD" img "$wallpaper_path" >/dev/null 2>&1 &
+ fi
+fi
diff --git a/config/hypr/scripts/WallustSwww.sh b/config/hypr/scripts/WallustSwww.sh
index 1f0f50c7..9df3ed61 100755
--- a/config/hypr/scripts/WallustSwww.sh
+++ b/config/hypr/scripts/WallustSwww.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Wallust: derive colors from the current wallpaper and update templates
# Usage: WallustSwww.sh [absolute_path_to_wallpaper]
@@ -7,7 +12,15 @@ set -euo pipefail
# Inputs and paths
passed_path="${1:-}"
-cache_dir="$HOME/.cache/swww/"
+if command -v awww >/dev/null 2>&1; then
+ WWW="awww"
+ cache_dir="$HOME/.cache/awww/"
+ cache_dir_fallback="$HOME/.cache/swww/"
+else
+ WWW="swww"
+ cache_dir="$HOME/.cache/swww/"
+ cache_dir_fallback="$HOME/.cache/awww/"
+fi
rofi_link="$HOME/.config/rofi/.current_wallpaper"
wallpaper_current="$HOME/.config/hypr/wallpaper_effects/.wallpaper_current"
read_cached_wallpaper() {
@@ -19,7 +32,7 @@ read_cached_wallpaper() {
read_wallpaper_from_query() {
local monitor="$1"
- swww query | awk -v mon="$monitor" '
+ $WWW query | awk -v mon="$monitor" '
/^Monitor/ {
cur=$2
gsub(":", "", cur)
@@ -46,17 +59,21 @@ wallpaper_path=""
if [[ -n "$passed_path" && -f "$passed_path" ]]; then
wallpaper_path="$passed_path"
else
- # Try to read from swww cache for the focused monitor, with a short retry loop
+ # Try to read from awww/swww cache for the focused monitor, with a short retry loop
current_monitor="$(get_focused_monitor)"
cache_file="$cache_dir$current_monitor"
+ alt_cache_file="${cache_dir_fallback}${current_monitor}"
- # Wait briefly for swww to write its cache after an image change
+ # Wait briefly for awww/swww to write its cache after an image change
for i in {1..10}; do
- if [[ -f "$cache_file" ]]; then
+ if [[ -f "$cache_file" || -f "$alt_cache_file" ]]; then
break
fi
sleep 0.1
done
+ if [[ ! -f "$cache_file" && -f "$alt_cache_file" ]]; then
+ cache_file="$alt_cache_file"
+ fi
if [[ -f "$cache_file" ]]; then
# The first non-filter line is the original wallpaper path
@@ -111,9 +128,28 @@ wallust run -s "$wallpaper_path" || true
wallust_targets=(
"$HOME/.config/waybar/wallust/colors-waybar.css"
"$HOME/.config/rofi/wallust/colors-rofi.rasi"
+ "$HOME/.config/hypr/wallust/wallust-hyprland.conf"
)
wait_for_templates "$start_ts" "${wallust_targets[@]}" || true
+# Normalize Rofi selection colors to a brighter accent and readable foreground
+rofi_colors="$HOME/.config/rofi/wallust/colors-rofi.rasi"
+if [ -f "$rofi_colors" ]; then
+ accent_hex=$(sed -n 's/^\s*color13:\s*\(#[0-9A-Fa-f]\{6\}\).*/\1/p' "$rofi_colors" | head -n1)
+ [ -z "$accent_hex" ] && accent_hex=$(sed -n 's/^\s*color12:\s*\(#[0-9A-Fa-f]\{6\}\).*/\1/p' "$rofi_colors" | head -n1)
+ fg_hex=$(sed -n 's/^\s*foreground:\s*\(#[0-9A-Fa-f]\{6\}\).*/\1/p' "$rofi_colors" | head -n1)
+ if [ -n "$accent_hex" ]; then
+ sed -i -E "s|^(\s*selected-normal-background:\s*).*$|\1$accent_hex;|" "$rofi_colors"
+ sed -i -E "s|^(\s*selected-active-background:\s*).*$|\1$accent_hex;|" "$rofi_colors"
+ sed -i -E "s|^(\s*selected-urgent-background:\s*).*$|\1$accent_hex;|" "$rofi_colors"
+ fi
+ if [ -n "$fg_hex" ]; then
+ sed -i -E "s|^(\s*selected-normal-foreground:\s*).*$|\1$fg_hex;|" "$rofi_colors"
+ sed -i -E "s|^(\s*selected-active-foreground:\s*).*$|\1$fg_hex;|" "$rofi_colors"
+ sed -i -E "s|^(\s*selected-urgent-foreground:\s*).*$|\1$fg_hex;|" "$rofi_colors"
+ fi
+fi
+
# Run kitty-only wallust config to keep terminal palette separate
run_wallust_with_config() {
local cfg="$1"
@@ -125,43 +161,42 @@ run_wallust_with_config() {
}
kitty_cfg="$HOME/.config/wallust/wallust-kitty.toml"
-if [ -f "$kitty_cfg" ]; then
- kitty_ts=$(date +%s)
- run_wallust_with_config "$kitty_cfg"
- wait_for_templates "$kitty_ts" "$HOME/.config/kitty/kitty-themes/01-Wallust.conf" || true
-fi
-
-# Reload kitty colors when wallpaper-based theme is active
-kitty_wallust_theme="$HOME/.config/kitty/kitty-themes/01-Wallust.conf"
-if [ -s "$kitty_wallust_theme" ]; then
- if command -v kitty >/dev/null 2>&1; then
- kitty @ load-config >/dev/null 2>&1 || true
- kitty @ set-colors --all --configured "$kitty_wallust_theme" >/dev/null 2>&1 || true
+(
+ if [ -f "$kitty_cfg" ]; then
+ kitty_ts=$(date +%s)
+ run_wallust_with_config "$kitty_cfg"
+ wait_for_templates "$kitty_ts" "$HOME/.config/kitty/kitty-themes/01-Wallust.conf" || true
fi
- if pidof kitty >/dev/null 2>&1; then
- for pid in $(pidof kitty); do
- kill -SIGUSR1 "$pid" 2>/dev/null || true
- done
- fi
-fi
-# Normalize Ghostty palette syntax in case ':' was used by older files
-if [ -f "$HOME/.config/ghostty/wallust.conf" ]; then
- sed -i -E 's/^(\s*palette\s*=\s*)([0-9]{1,2}):/\1\2=/' "$HOME/.config/ghostty/wallust.conf" 2>/dev/null || true
-fi
+ # Reload kitty colors when wallpaper-based theme is active
+ kitty_wallust_theme="$HOME/.config/kitty/kitty-themes/01-Wallust.conf"
+ if [ -s "$kitty_wallust_theme" ]; then
+ if command -v kitty >/dev/null 2>&1; then
+ kitty @ load-config >/dev/null 2>&1 || true
+ kitty @ set-colors --all --configured "$kitty_wallust_theme" >/dev/null 2>&1 || true
+ fi
+ if pidof kitty >/dev/null 2>&1; then
+ for pid in $(pidof kitty); do
+ kill -SIGUSR1 "$pid" 2>/dev/null || true
+ done
+ fi
+ fi
-# Light wait for Ghostty colors file to be present then signal Ghostty to reload (SIGUSR2)
-for _ in 1 2 3; do
- [ -s "$HOME/.config/ghostty/wallust.conf" ] && break
- sleep 0.1
-done
-if pidof ghostty >/dev/null; then
- for pid in $(pidof ghostty); do kill -SIGUSR2 "$pid" 2>/dev/null || true; done
-fi
+ # Normalize Ghostty palette syntax in case ':' was used by older files
+ if [ -f "$HOME/.config/ghostty/wallust.conf" ]; then
+ sed -i -E 's/^(\s*palette\s*=\s*)([0-9]{1,2}):/\1\2=/' "$HOME/.config/ghostty/wallust.conf" 2>/dev/null || true
+ fi
-# Prompt Waybar to reload colors
-if command -v waybar-msg >/dev/null 2>&1; then
- waybar-msg cmd reload >/dev/null 2>&1 || true
-elif pidof waybar >/dev/null; then
- killall -SIGUSR2 waybar 2>/dev/null || true
-fi
+ # Light wait for Ghostty colors file to be present then signal Ghostty to reload (SIGUSR2)
+ for _ in 1 2 3; do
+ [ -s "$HOME/.config/ghostty/wallust.conf" ] && break
+ sleep 0.1
+ done
+ if pidof ghostty >/dev/null; then
+ for pid in $(pidof ghostty); do kill -SIGUSR2 "$pid" 2>/dev/null || true; done
+ fi
+ # Reload Hyprland so new border colors from wallust-hyprland.conf take effect
+ if command -v hyprctl >/dev/null 2>&1; then
+ hyprctl reload >/dev/null 2>&1 || true
+ fi
+) >/dev/null 2>&1 &
diff --git a/config/hypr/scripts/WaybarCava.sh b/config/hypr/scripts/WaybarCava.sh
index 98db60dd..2295f0ab 100755
--- a/config/hypr/scripts/WaybarCava.sh
+++ b/config/hypr/scripts/WaybarCava.sh
@@ -1,4 +1,10 @@
#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# WaybarCava.sh — safer single-instance handling, cleanup, and robustness
# Original concept by LinuxBeginnings; this variant focuses on lifecycle hardening.
diff --git a/config/hypr/scripts/WaybarLayout.sh b/config/hypr/scripts/WaybarLayout.sh
index 247ccf78..66d45a07 100755
--- a/config/hypr/scripts/WaybarLayout.sh
+++ b/config/hypr/scripts/WaybarLayout.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Script for waybar layout or configs
IFS=$'\n\t'
diff --git a/config/hypr/scripts/WaybarScripts.sh b/config/hypr/scripts/WaybarScripts.sh
index 142b548d..afb55712 100755
--- a/config/hypr/scripts/WaybarScripts.sh
+++ b/config/hypr/scripts/WaybarScripts.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# This file used on waybar modules sourcing defaults set in $HOME/.config/hypr/UserConfigs/01-UserDefaults.conf
# Define the path to the config file
diff --git a/config/hypr/scripts/WaybarStyles.sh b/config/hypr/scripts/WaybarStyles.sh
index 2ed8bf26..611e0a12 100755
--- a/config/hypr/scripts/WaybarStyles.sh
+++ b/config/hypr/scripts/WaybarStyles.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Script for waybar styles
IFS=$'\n\t'
diff --git a/config/hypr/scripts/Wlogout.sh b/config/hypr/scripts/Wlogout.sh
index e33222cc..973c5704 100755
--- a/config/hypr/scripts/Wlogout.sh
+++ b/config/hypr/scripts/Wlogout.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ##
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# wlogout (Power, Screen Lock, Suspend, etc)
# Set variables for parameters. First numbers corresponts to Monitor Resolution
diff --git a/config/hypr/scripts/build-awww.sh b/config/hypr/scripts/build-awww.sh
new file mode 100755
index 00000000..c59c34c0
--- /dev/null
+++ b/config/hypr/scripts/build-awww.sh
@@ -0,0 +1,209 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+RED="\033[0;31m"
+GREEN="\033[0;32m"
+YELLOW="\033[1;33m"
+BLUE="\033[0;34m"
+NC="\033[0m"
+
+ICON_OK="✅"
+ICON_WARN="⚠️"
+ICON_ERR="❌"
+ICON_INFO="ℹ️"
+
+fail() {
+ printf "${RED}${ICON_ERR} %s${NC}\n" "$1" >&2
+ exit 1
+}
+
+info() {
+ printf "${BLUE}${ICON_INFO} %s${NC}\n" "$1"
+}
+
+warn() {
+ printf "${YELLOW}${ICON_WARN} %s${NC}\n" "$1"
+}
+
+ok() {
+ printf "${GREEN}${ICON_OK} %s${NC}\n" "$1"
+}
+
+trap 'fail "Script failed at line $LINENO."' ERR
+
+if [[ ! -t 0 ]]; then
+ fail "This script requires an interactive terminal. Run it directly in a terminal (e.g. ./build-awww.sh)."
+fi
+
+info "Starting awww installer..."
+
+if command -v awww >/dev/null 2>&1; then
+ ok "awww is already installed. Nothing to do."
+ exit 0
+fi
+
+if ! command -v git >/dev/null 2>&1; then
+ fail "git is required but not installed."
+fi
+
+detect_distro() {
+ if [[ -r /etc/os-release ]]; then
+ # shellcheck disable=SC1091
+ . /etc/os-release
+ echo "${ID:-}"
+ return
+ fi
+ echo ""
+}
+
+prompt_confirm_distro() {
+ local detected="$1"
+ local choice=""
+ if [[ -n "$detected" ]]; then
+ printf "${BLUE}${ICON_INFO} Detected distro: %s${NC}\n" "$detected" >/dev/tty
+ printf "Confirm? (Y/y to confirm, N/n to choose, Q/q to quit): " >/dev/tty
+ read -r choice </dev/tty
+ case "$choice" in
+ [Yy]) echo "$detected"; return ;;
+ [Qq]) exit 0 ;;
+ [Nn]) ;;
+ *) warn "Invalid choice, continuing to manual selection." ;;
+ esac
+ fi
+ echo "Supported distros:"
+ echo " 1) debian"
+ echo " 2) ubuntu"
+ echo " 3) arch"
+ echo " 4) opensuse"
+ echo " 5) fedora"
+ echo " 6) gentoo"
+ printf "Select your distro (1-6) or Q/q to quit: " >/dev/tty
+ read -r choice </dev/tty
+ read -r choice
+ case "$choice" in
+ 1) echo "debian" ;;
+ 2) echo "ubuntu" ;;
+ 3) echo "arch" ;;
+ 4) echo "opensuse" ;;
+ 5) echo "fedora" ;;
+ 6) echo "gentoo" ;;
+ [Qq]) exit 0 ;;
+ *) fail "Invalid selection." ;;
+ esac
+}
+
+distro="$(prompt_confirm_distro "$(detect_distro)")"
+
+install_deps_debian_ubuntu() {
+ local missing=()
+ for pkg in pkg-config liblz4-dev; do
+ dpkg -s "$pkg" >/dev/null 2>&1 || missing+=("$pkg")
+ done
+ if (( ${#missing[@]} )); then
+ info "Installing deps: ${missing[*]}"
+ sudo apt update
+ sudo apt install -y "${missing[@]}"
+ else
+ ok "All required deps already installed."
+ fi
+}
+
+install_deps_fedora() {
+ local missing=()
+ for pkg in wayland-protocols lz4-devel wayland-devel; do
+ rpm -q "$pkg" >/dev/null 2>&1 || missing+=("$pkg")
+ done
+ if (( ${#missing[@]} )); then
+ info "Installing deps: ${missing[*]}"
+ sudo dnf install -y "${missing[@]}"
+ else
+ ok "All required deps already installed."
+ fi
+}
+
+install_deps_opensuse() {
+ local missing=()
+ for pkg in pkg-config liblz4-devel; do
+ rpm -q "$pkg" >/dev/null 2>&1 || missing+=("$pkg")
+ done
+ if (( ${#missing[@]} )); then
+ info "Installing deps: ${missing[*]}"
+ sudo zypper install -y "${missing[@]}"
+ else
+ ok "All required deps already installed."
+ fi
+}
+
+install_deps_arch() {
+ local missing=()
+ for pkg in pkgconf lz4 wayland-protocols; do
+ pacman -Qi "$pkg" >/dev/null 2>&1 || missing+=("$pkg")
+ done
+ if (( ${#missing[@]} )); then
+ info "Installing deps: ${missing[*]}"
+ sudo pacman -S --needed --noconfirm "${missing[@]}"
+ else
+ ok "All required deps already installed."
+ fi
+}
+
+ensure_cargo() {
+ if command -v cargo >/dev/null 2>&1; then
+ ok "cargo is available."
+ return
+ fi
+ case "$distro" in
+ debian|ubuntu|fedora|opensuse)
+ info "Installing Rust toolchain via rustup..."
+ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
+ # shellcheck disable=SC1091
+ source "$HOME/.cargo/env"
+ ;;
+ arch)
+ info "Installing Rust toolchain..."
+ sudo pacman -S --needed --noconfirm rust
+ ;;
+ gentoo)
+ ;;
+ *)
+ fail "Unknown distro for cargo install."
+ ;;
+ esac
+ command -v cargo >/dev/null 2>&1 || fail "cargo is still not available."
+}
+
+case "$distro" in
+ debian) install_deps_debian_ubuntu ;;
+ ubuntu) install_deps_debian_ubuntu ;;
+ fedora) install_deps_fedora ;;
+ opensuse) install_deps_opensuse ;;
+ arch) install_deps_arch ;;
+ gentoo)
+ info "Installing awww via Portage..."
+ sudo emerge gui-apps/awww
+ ok "awww installed successfully."
+ exit 0
+ ;;
+ *) fail "Unsupported distro: $distro" ;;
+esac
+
+ensure_cargo
+
+info "Cloning or updating awww..."
+cd "$HOME"
+if [[ -d awww/.git ]]; then
+ git -C awww pull --rebase
+else
+ git clone https://codeberg.org/LGFae/awww.git
+fi
+
+cd "$HOME/awww"
+info "Building awww..."
+cargo build --release
+
+info "Installing binaries..."
+sudo install -vDm755 target/release/awww -t /usr/bin/
+sudo install -vDm755 target/release/awww-daemon -t /usr/bin/
+sudo install -vDm644 completions/_awww -t /usr/share/zsh/site-functions/
+
+ok "awww installed successfully."
diff --git a/config/hypr/scripts/disable.cpu.turbo.sh b/config/hypr/scripts/disable.cpu.turbo.sh
new file mode 100755
index 00000000..dafee76b
--- /dev/null
+++ b/config/hypr/scripts/disable.cpu.turbo.sh
@@ -0,0 +1,63 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+require_root() {
+ if [[ ${EUID} -ne 0 ]]; then
+ exec sudo -- "$0" "$@"
+ fi
+}
+
+write_sysfs() {
+ local path="$1"
+ local value="$2"
+ if [[ -w "$path" ]]; then
+ printf '%s' "$value" >"$path"
+ return 0
+ fi
+ return 1
+}
+
+require_root "$@"
+
+changed=0
+
+# Intel P-State turbo control
+if [[ -e /sys/devices/system/cpu/intel_pstate/no_turbo ]]; then
+ if write_sysfs /sys/devices/system/cpu/intel_pstate/no_turbo 1; then
+ changed=1
+ fi
+fi
+
+# Generic cpufreq boost control (AMD/Intel)
+if [[ -e /sys/devices/system/cpu/cpufreq/boost ]]; then
+ if write_sysfs /sys/devices/system/cpu/cpufreq/boost 0; then
+ changed=1
+ fi
+fi
+
+# Prefer a quieter governor if available
+for gov in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
+ if [[ -w "$gov" ]]; then
+ current=$(cat "$gov")
+ if [[ "$current" != "powersave" ]] && grep -q powersave "${gov%/*}/scaling_available_governors"; then
+ printf '%s' powersave >"$gov"
+ changed=1
+ fi
+ fi
+done
+
+# Lower energy/performance preference if supported
+for epp in /sys/devices/system/cpu/cpu*/cpufreq/energy_performance_preference; do
+ if [[ -w "$epp" ]]; then
+ printf '%s' power >"$epp" 2>/dev/null || true
+ changed=1
+ fi
+done
+
+if [[ $changed -eq 1 ]]; then
+ echo "CPU turbo/boost disabled and power-saving preferences applied."
+ exit 0
+fi
+
+echo "No writable turbo/boost controls found. Check kernel driver support."
+exit 1
diff --git a/config/hypr/scripts/fastfetch-wrapper.sh b/config/hypr/scripts/fastfetch-wrapper.sh
new file mode 100755
index 00000000..ad5f7873
--- /dev/null
+++ b/config/hypr/scripts/fastfetch-wrapper.sh
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+
+# 1. Get the specific ID and the "ID_LIKE" family
+source /etc/os-release
+SPECIFIC_ID=$ID
+FAMILY_ID=$ID_LIKE
+
+# 2. Define your asset directory
+ASSET_DIR="$HOME/.config/fastfetch/images"
+
+# 3. Selection Logic
+if [ -f "$ASSET_DIR/$SPECIFIC_ID.png" ]; then
+ # Use exact match if available (e.g., soplos.png)
+ SELECTED_LOGO="$ASSET_DIR/$SPECIFIC_ID.png"
+elif [ -n "$FAMILY_ID" ] && [ -f "$ASSET_DIR/${FAMILY_ID%% *}.png" ]; then
+ # Fallback to family (e.g., debian.png) - takes the first word of ID_LIKE
+ SELECTED_LOGO="$ASSET_DIR/${FAMILY_ID%% *}.png"
+else
+ # Let fastfetch handle it natively if no custom image found
+ fastfetch
+ exit 0
+fi
+
+fastfetch --kitty "$SELECTED_LOGO"
diff --git a/config/hypr/scripts/hyprshot.sh b/config/hypr/scripts/hyprshot.sh
index 0fb976fa..0e97d15b 100755
--- a/config/hypr/scripts/hyprshot.sh
+++ b/config/hypr/scripts/hyprshot.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
set -e
function Help() {
diff --git a/config/hypr/scripts/install-uv.sh b/config/hypr/scripts/install-uv.sh
index 3582a78e..da4b2d86 100755
--- a/config/hypr/scripts/install-uv.sh
+++ b/config/hypr/scripts/install-uv.sh
@@ -1,2 +1,8 @@
#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
curl -LsSf https://astral.sh/uv/install.sh | sh
diff --git a/config/hypr/scripts/keybinds_parser.py b/config/hypr/scripts/keybinds_parser.py
index d12e3854..5b75d81c 100755
--- a/config/hypr/scripts/keybinds_parser.py
+++ b/config/hypr/scripts/keybinds_parser.py
@@ -1,4 +1,10 @@
#!/usr/bin/env python3
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
import sys
import re
import os
diff --git a/config/hypr/scripts/rofi-emacs-keybinds b/config/hypr/scripts/rofi-emacs-keybinds
new file mode 100755
index 00000000..bee1a54d
--- /dev/null
+++ b/config/hypr/scripts/rofi-emacs-keybinds
@@ -0,0 +1,13 @@
+#!/usr/bin/env bash
+set -u
+set -o pipefail
+
+ROFI_CONFIG="${HOME}/.config/rofi/config-emacs-keybinds.rasi"
+CACHE_FILE="${HOME}/.cache/rofi-emacs-keybinds.txt"
+
+if [[ ! -s "${CACHE_FILE}" ]]; then
+ notify-send "Rofi Emacs Keybinds" "Keybind cache missing. In Emacs, run: M-x rofi-emacs-keybinds-refresh"
+ exit 1
+fi
+
+rofi -dmenu -i -p "Emacs Keybinds" -config "${ROFI_CONFIG}" < "${CACHE_FILE}"
diff --git a/config/hypr/scripts/rofi-ssh-menu.sh b/config/hypr/scripts/rofi-ssh-menu.sh
new file mode 100755
index 00000000..d1640c66
--- /dev/null
+++ b/config/hypr/scripts/rofi-ssh-menu.sh
@@ -0,0 +1,117 @@
+#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
+# Rofi SSH menu - list SSH hosts from ~/.ssh/config and connect.
+
+set -euo pipefail
+
+SSH_CONFIG="${HOME}/.ssh/config"
+ROFI_CONFIG="${HOME}/.config/rofi/config.rasi"
+MSG='Select a host to connect via SSH'
+
+notify() {
+ if command -v notify-send >/dev/null 2>&1; then
+ notify-send -u low "Rofi SSH" "$1"
+ else
+ printf '%s\n' "$1" >&2
+ fi
+}
+
+if [[ ! -f "${SSH_CONFIG}" ]]; then
+ notify "SSH config not found: ${SSH_CONFIG}"
+ exit 1
+fi
+
+# Build list: host|user|hostname
+host_entries="$(
+ awk '
+ function is_wildcard(h) { return (h ~ /[*?]/ || h ~ /^!/); }
+ function remember_hosts(list, i, n, h) {
+ delete current
+ n = split(list, parts, /[ \t]+/)
+ for (i = 1; i <= n; i++) {
+ h = parts[i]
+ if (h == "") continue
+ if (is_wildcard(h)) continue
+ current[h] = 1
+ if (!(h in seen)) {
+ seen[h] = 1
+ order[++count] = h
+ }
+ }
+ }
+ {
+ sub(/[ \t]*#.*/, "", $0)
+ if ($0 ~ /^[ \t]*$/) next
+ if ($1 == "Host") {
+ $1 = ""
+ sub(/^[ \t]+/, "", $0)
+ remember_hosts($0)
+ next
+ }
+ if ($1 == "HostName") {
+ for (h in current) hostname[h] = $2
+ next
+ }
+ if ($1 == "User") {
+ for (h in current) user[h] = $2
+ next
+ }
+ }
+ END {
+ for (i = 1; i <= count; i++) {
+ h = order[i]
+ print h "|" (h in user ? user[h] : "") "|" (h in hostname ? hostname[h] : "")
+ }
+ }
+ ' "${SSH_CONFIG}"
+)"
+
+if [[ -z "${host_entries}" ]]; then
+ notify "No SSH hosts found in ${SSH_CONFIG}"
+ exit 1
+fi
+
+menu_entries="$(
+ while IFS='|' read -r host user hostname; do
+ [[ -n "${host}" ]] || continue
+ [[ -n "${user}" ]] || user="${USER}"
+ [[ -n "${hostname}" ]] || hostname="${host}"
+ printf '%s | %s@%s\n' "${host}" "${user}" "${hostname}"
+ done <<< "${host_entries}"
+)"
+
+# Close any existing rofi before launching
+if pgrep -x "rofi" >/dev/null 2>&1; then
+ pkill rofi
+fi
+
+selection="$(printf '%s\n' "${menu_entries}" | rofi -dmenu -i -p "SSH" -mesg "${MSG}" -config "${ROFI_CONFIG}")"
+
+if [[ -z "${selection}" ]]; then
+ exit 0
+fi
+
+selected_host="${selection%% | *}"
+if [[ -z "${selected_host}" ]]; then
+ exit 0
+fi
+
+if command -v kitty >/dev/null 2>&1; then
+ exec kitty --title "SSH ${selected_host}" sh -lc "ssh ${selected_host}"
+fi
+
+if command -v ghostty >/dev/null 2>&1; then
+ exec ghostty -e sh -lc "ssh ${selected_host}"
+fi
+
+if command -v alacritty >/dev/null 2>&1; then
+ exec alacritty -e sh -lc "ssh ${selected_host}"
+fi
+
+notify "No supported terminal found (kitty, ghostty, alacritty). Unable to start SSH session."
+exit 1
diff --git a/config/hypr/scripts/sddm_wallpaper.sh b/config/hypr/scripts/sddm_wallpaper.sh
index 26f6c613..deee938c 100755
--- a/config/hypr/scripts/sddm_wallpaper.sh
+++ b/config/hypr/scripts/sddm_wallpaper.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# SDDM Wallpaper and Wallust Colors Setter
# for the upcoming changes on the simple_sddm_theme
diff --git a/config/hypr/scripts/set-default-thunar-terminal.sh b/config/hypr/scripts/set-default-thunar-terminal.sh
new file mode 100755
index 00000000..fd50eb6c
--- /dev/null
+++ b/config/hypr/scripts/set-default-thunar-terminal.sh
@@ -0,0 +1,148 @@
+#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
+#
+setup_default_terminal() {
+ echo "Setting kitty as the default terminal for Thunar and CLI apps..."
+
+ # 1. Configure XFCE/Exo (Thunar's primary helper)
+ # This handles "Open Terminal Here" and "Open with [CLI App]"
+ HELPER_DIR="$HOME/.config/xfce4"
+ mkdir -p "$HELPER_DIR"
+ KITTY_PATH="$(command -v kitty 2>/dev/null || true)"
+ if [ -z "$KITTY_PATH" ]; then
+ echo "Warning: kitty not found in PATH. Thunar may report no terminal available."
+ fi
+ # Prefer exo-preferred-applications when available (XFCE/Thunar)
+ if command -v exo-preferred-applications >/dev/null 2>&1; then
+ exo-preferred-applications --set TerminalEmulator kitty >/dev/null 2>&1 || true
+ fi
+
+ # Ensure helpers.rc exists and has a [Default] section
+ if [ ! -f "$HELPER_DIR/helpers.rc" ]; then
+ printf "[Default]\n" >"$HELPER_DIR/helpers.rc"
+ elif ! grep -q '^\[Default\]$' "$HELPER_DIR/helpers.rc"; then
+ printf "[Default]\n%s" "$(cat "$HELPER_DIR/helpers.rc")" >"$HELPER_DIR/helpers.rc"
+ fi
+
+ # Update TerminalEmulator entry in [Default] section
+ if grep -q '^TerminalEmulator=' "$HELPER_DIR/helpers.rc"; then
+ sed -i 's|^TerminalEmulator=.*|TerminalEmulator=kitty|' "$HELPER_DIR/helpers.rc"
+ else
+ sed -i '/^\[Default\]$/a TerminalEmulator=kitty' "$HELPER_DIR/helpers.rc"
+ fi
+ # Set a full path if available (GUI PATH can differ)
+ if [ -n "$KITTY_PATH" ]; then
+ if grep -q '^TerminalEmulatorPath=' "$HELPER_DIR/helpers.rc"; then
+ sed -i "s|^TerminalEmulatorPath=.*|TerminalEmulatorPath=$KITTY_PATH|" "$HELPER_DIR/helpers.rc"
+ else
+ sed -i "/^\[Default\]$/a TerminalEmulatorPath=$KITTY_PATH" "$HELPER_DIR/helpers.rc"
+ fi
+ fi
+
+ # 2. Create a User-Level "xterm" Shim
+ # Many older .desktop files and scripts have 'xterm' hardcoded.
+ # By placing this in ~/.local/bin, we intercept those calls.
+ BIN_DIR="$HOME/.local/bin"
+ mkdir -p "$BIN_DIR"
+ if ! printf "%s" "$PATH" | tr ':' '\n' | grep -qx "$BIN_DIR"; then
+ echo "Warning: $BIN_DIR is not in PATH for this session. GUI apps may still use /usr/bin/xterm."
+ fi
+
+ cat <<EOF >"$BIN_DIR/xterm"
+#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
+#
+# Shim to redirect xterm calls to kitty
+# Resolves Open with (vim/neovim/etc) opening in xterm
+args=()
+pass_through=()
+while [ \$# -gt 0 ]; do
+ case "\$1" in
+ -e)
+ shift
+ if [ \$# -gt 0 ]; then
+ pass_through+=("\$@")
+ fi
+ break
+ ;;
+ -T|-title|-geometry|-bg|-fg|-fs|-fa|-fn)
+ # Skip common xterm-only flags and their values
+ shift
+ [ \$# -gt 0 ] && shift
+ ;;
+ -class|-name)
+ shift
+ [ \$# -gt 0 ] && shift
+ ;;
+ -hold|-ls|-sb|-sk|-sr|-s)
+ # Ignore boolean flags that kitty doesn't understand
+ shift
+ ;;
+ *)
+ args+=("\$1")
+ shift
+ ;;
+ esac
+done
+
+if [ \${#pass_through[@]} -gt 0 ]; then
+ exec kitty "\${args[@]}" -- "\${pass_through[@]}"
+else
+ exec kitty "\${args[@]}"
+fi
+EOF
+ chmod +x "$BIN_DIR/xterm"
+
+ # 3. Update GLib/GIO Default Terminal (for GNOME-based backends)
+ # Some distros use gsettings to define the terminal schema.
+ if command -v gsettings >/dev/null 2>&1; then
+ gsettings set org.gnome.desktop.default-applications.terminal exec 'kitty' 2>/dev/null || true
+ fi
+
+ # 4. Refresh Mime Database
+ # Ensures Thunar sees the changes to terminal handling immediately.
+ if command -v update-desktop-database >/dev/null 2>&1; then
+ update-desktop-database ~/.local/share/applications 2>/dev/null || true
+ fi
+
+ # 5. Hide Kitty URL Handler from "Open With"
+ # Prevents Kitty URL handler from showing up for text files.
+ USER_APP_DIR="$HOME/.local/share/applications"
+ mkdir -p "$USER_APP_DIR"
+ KITTY_URL_HANDLER=""
+ for dir in $XDG_DATA_DIRS /usr/local/share /usr/share; do
+ [ -z "$dir" ] && continue
+ if [ -f "$dir/applications/kitty-url-handler.desktop" ]; then
+ KITTY_URL_HANDLER="$dir/applications/kitty-url-handler.desktop"
+ break
+ fi
+ done
+
+ if [ -n "$KITTY_URL_HANDLER" ]; then
+ cp "$KITTY_URL_HANDLER" "$USER_APP_DIR/kitty-url-handler.desktop"
+ if grep -q '^NoDisplay=' "$USER_APP_DIR/kitty-url-handler.desktop"; then
+ sed -i 's|^NoDisplay=.*|NoDisplay=true|' "$USER_APP_DIR/kitty-url-handler.desktop"
+ else
+ printf "\nNoDisplay=true\n" >>"$USER_APP_DIR/kitty-url-handler.desktop"
+ fi
+ if grep -q '^Hidden=' "$USER_APP_DIR/kitty-url-handler.desktop"; then
+ sed -i 's|^Hidden=.*|Hidden=true|' "$USER_APP_DIR/kitty-url-handler.desktop"
+ else
+ printf "Hidden=true\n" >>"$USER_APP_DIR/kitty-url-handler.desktop"
+ fi
+ fi
+
+ echo "Default terminal set to kitty successfully."
+}
+
+setup_default_terminal
diff --git a/config/hypr/scripts/update_WindowRules.sh b/config/hypr/scripts/update_WindowRules.sh
index 8b4262ba..c8d236c4 100755
--- a/config/hypr/scripts/update_WindowRules.sh
+++ b/config/hypr/scripts/update_WindowRules.sh
@@ -1,4 +1,10 @@
#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Script to update WindowRules config if Hyprland version is >= 0.53
CONFIGS_DIR="$HOME/.config/hypr/configs"
diff --git a/config/hypr/v2.3.21 b/config/hypr/v2.3.22
index 51de9972..51de9972 100644
--- a/config/hypr/v2.3.21
+++ b/config/hypr/v2.3.22
diff --git a/config/kitty/kitty-themes/00-Default.conf b/config/kitty/kitty-themes/00-Default.conf
index 640a8d68..1405d594 100644
--- a/config/kitty/kitty-themes/00-Default.conf
+++ b/config/kitty/kitty-themes/00-Default.conf
@@ -1,4 +1,3 @@
# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
# This is just created to remove all the themes
-include ./01-Wallust.conf
diff --git a/config/kitty/kitty.conf b/config/kitty/kitty.conf
index 4757ed7e..a9571d59 100644
--- a/config/kitty/kitty.conf
+++ b/config/kitty/kitty.conf
@@ -1,9 +1,9 @@
# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
# you can choose themes from $HOME/.config/kitty/kitty-themes/
-include ./kitty-themes/00-Default.conf
+include ./kitty-themes/01-Wallust.conf
-font_family FantasqueSansM Nerd Font Mono Bold
+font_family FantasqueSansM Nerd Font Mono
font_size 16.0
bold_font auto
italic_font auto
diff --git a/config/rofi/config-emacs-keybinds.rasi b/config/rofi/config-emacs-keybinds.rasi
new file mode 100644
index 00000000..cb198d43
--- /dev/null
+++ b/config/rofi/config-emacs-keybinds.rasi
@@ -0,0 +1,41 @@
+/* ---- Emacs Keybinds (rofi) ---- */
+@import "~/.config/rofi/config.rasi"
+
+mainbox {
+ children:
+ [ "inputbar", "message", "listview" ];
+}
+
+entry {
+ expand: true;
+ placeholder: " ⌨️ Search Emacs Keybinds";
+}
+
+listview {
+ columns: 2;
+ lines: 10;
+ fixed-height: false;
+ scrollbar: true;
+ spacing: 6px;
+ cycle: true;
+}
+
+window {
+ width: 90%;
+ height: inherit;
+}
+
+element {
+ orientation: horizontal;
+}
+
+element-icon {
+ size: 0%;
+}
+
+element-text {
+ horizontal-align: 0.0;
+ vertical-align: 0.5;
+ margin: 0px;
+ padding: 0px;
+}
diff --git a/config/rofi/config-ghostty-theme.rasi b/config/rofi/config-ghostty-theme.rasi
new file mode 100644
index 00000000..8d317b00
--- /dev/null
+++ b/config/rofi/config-ghostty-theme.rasi
@@ -0,0 +1,74 @@
+/* ================================================== */
+/* KoolDots (2026) */
+/* Project URL: https://github.com/LinuxBeginnings */
+/* License: GNU GPLv3 */
+/* SPDX-License-Identifier: GPL-3.0-or-later */
+/* ================================================== */
+
+/* Ghostty Theme Selector */
+
+@import "~/.config/rofi/config.rasi"
+
+/* ---- Configuration ---- */
+configuration {
+ modi: "drun";
+}
+
+/* ---- Window ---- */
+window {
+ width: inherit;
+ height: inherit;
+ border-radius: 15px;
+}
+
+mainbox {
+ children: [ "inputbar" , "listview" ];
+}
+
+/* ---- Listbox ---- */
+listbox {
+ border-radius: 12px;
+}
+
+/* ---- Inputbar ---- */
+inputbar {
+ padding: 14px;
+ border-radius: 10px;
+}
+
+entry {
+ expand: true;
+ placeholder: " 👻 Choose Ghostty theme: Enter to Apply";
+}
+
+/* ---- Listview ---- */
+listview {
+ columns: 3;
+ lines: 4;
+ spacing: 4px;
+ border-radius: 10px;
+ cycle: true;
+}
+
+/* ---- Element ---- */
+element {
+ orientation: horizontal;
+}
+
+/* ---- Message ---- */
+message {
+ border-radius: 10px;
+}
+
+textbox {
+ padding: 15px;
+}
+
+/* ---- Element ---- */
+element-icon {
+ size: 0%;
+}
+element-text {
+ horizontal-align: 0.0;
+ margin: 5px 30px 5px 30px;
+}
diff --git a/config/rofi/dwm-config-horiz.rasi b/config/rofi/dwm-config-horiz.rasi
new file mode 100644
index 00000000..e93bcc5e
--- /dev/null
+++ b/config/rofi/dwm-config-horiz.rasi
@@ -0,0 +1,19 @@
+configuration {
+ modi: "drun";
+ font: "JetBrainsMono Nerd Font 10";
+ show-icons: false;
+ terminal: "kitty";
+ drun-display-format: "{name}";
+ display-drun: " ";
+ timeout {
+ action: "kb-cancel";
+ delay: 0;
+ }
+ filebrowser {
+ directories-first: true;
+ sorting-method: "name";
+ }
+ }
+
+@theme "~/.config/rofi/dwm-dmenu-horiz.rasi"
+
diff --git a/config/rofi/dwm-config-vert.rasi b/config/rofi/dwm-config-vert.rasi
new file mode 100644
index 00000000..6e3e735e
--- /dev/null
+++ b/config/rofi/dwm-config-vert.rasi
@@ -0,0 +1,25 @@
+configuration {
+ modi: "drun";
+ font: "JetBrainsMono Nerd Font 10";
+ show-icons: false;
+ terminal: "kitty";
+ drun-display-format: "{name}";
+ display-drun: " ";
+ timeout {
+ action: "kb-cancel";
+ delay: 0;
+ }
+ filebrowser {
+ directories-first: true;
+ sorting-method: "name";
+ }
+ }
+
+@theme "~/.config/rofi/dwm-dmenu-vert.rasi"
+
+listview {
+ columns: 1;
+ lines: 12;
+ fixed-height: true;
+ layout: vertical;
+}
diff --git a/config/rofi/dwm-dmenu-horiz.rasi b/config/rofi/dwm-dmenu-horiz.rasi
new file mode 100644
index 00000000..8a433d93
--- /dev/null
+++ b/config/rofi/dwm-dmenu-horiz.rasi
@@ -0,0 +1,50 @@
+* {
+ background-color: #282828;
+ border-color: #458588;
+ text-color: #ebdbb2;
+ height: 24px;
+ font: "JetBrainsMono Nerd Font 10";
+ prompt-font: "JetBrainsMono Nerd Font 10"";
+ prompt-background: #458588;
+ prompt-foreground: #282828;
+ prompt-padding: 2px 6px;
+ selected-normal-background: #458588;
+ selected-normal-foreground: #ebdbb2;
+}
+#window {
+ anchor: north;
+ location: north;
+ width: 100%;
+ padding: 0px;
+ children: [ horibox ];
+}
+#horibox {
+ orientation: horizontal;
+ children: [ prompt, entry, listview ];
+}
+#prompt {
+ padding: @prompt-padding;
+ background-color: @prompt-background;
+ text-color: @prompt-foreground;
+ font: @prompt-font;
+}
+#listview {
+ layout: horizontal;
+ lines: 100;
+}
+#entry {
+ padding: 2px;
+ expand: false;
+ width: 10em;
+}
+#element {
+ padding: 2px 8px;
+}
+#element selected {
+ background-color: @selected-normal-background;
+ text-color: @selected-normal-foreground;
+}
+element-text {
+ background-color: inherit;
+ text-color: inherit;
+}
diff --git a/config/rofi/dwm-dmenu-vert.rasi b/config/rofi/dwm-dmenu-vert.rasi
new file mode 100644
index 00000000..a88bdaf5
--- /dev/null
+++ b/config/rofi/dwm-dmenu-vert.rasi
@@ -0,0 +1,54 @@
+* {
+ background-color: #282828;
+ border-color: #458588;
+ text-color: #ebdbb2;
+ font: "JetBrainsMono Nerd Font 10";
+ prompt-font: "JetBrainsMono Nerd Font 10";
+ prompt-background: #458588;
+ prompt-foreground: #282828;
+ prompt-padding: 2px 6px;
+ selected-normal-background: #458588;
+ selected-normal-foreground: #ebdbb2;
+}
+#window {
+ anchor: north;
+ location: north;
+ width: 35%;
+ padding: 0px;
+ children: [ mainbox ];
+}
+#mainbox {
+ orientation: vertical;
+ children: [ inputbar, listview ];
+}
+#inputbar {
+ children: [ prompt, entry ];
+}
+#prompt {
+ padding: @prompt-padding;
+ background-color: @prompt-background;
+ text-color: @prompt-foreground;
+ font: @prompt-font;
+}
+#listview {
+ layout: vertical;
+ columns: 1;
+ lines: 12;
+ fixed-height: false;
+}
+#entry {
+ padding: 2px;
+ expand: false;
+ width: 10em;
+}
+#element {
+ padding: 2px 8px;
+}
+#element selected {
+ background-color: @selected-normal-background;
+ text-color: @selected-normal-foreground;
+}
+element-text {
+ background-color: inherit;
+ text-color: inherit;
+}
diff --git a/config/rofi/themes/KooL_TokyoNight.rasi b/config/rofi/themes/KooL_TokyoNight.rasi
new file mode 100644
index 00000000..330fa716
--- /dev/null
+++ b/config/rofi/themes/KooL_TokyoNight.rasi
@@ -0,0 +1,135 @@
+/*
+ * Tokyonight colorscheme (big icons) for rofi
+ * User: w8ste
+ */
+
+
+// define colors etc.
+* {
+ bg: #24283b;
+ hv: #9274ca;
+ primary: #444b6a; // TokyoNight bright black
+ ug: #0B2447;
+ font: "Monospace 11";
+ background-color: @bg;
+ //dark: @bg;
+ border: 0px;
+ kl: #7aa2f7;
+ black: #000000;
+
+ transparent: rgba(46,52,64,0);
+}
+
+// defines different aspects of the window
+window {
+ width: 700;
+ /*since line wont work with height, i comment it out
+ if you rather control the size via height
+ just comment it out */
+ //height: 500;
+
+ orientation: horizontal;
+ location: center;
+ anchor: center;
+ transparency: "screenshot";
+ border-color: @transparent;
+ border: 0px;
+ border-radius: 6px;
+ spacing: 0;
+ children: [ mainbox ];
+}
+
+mainbox {
+ spacing: 0;
+ children: [ inputbar, message, listview ];
+}
+
+inputbar {
+ color: @kl;
+ padding: 11px;
+ border: 3px 3px 2px 3px;
+ border-color: @primary;
+ border-radius: 6px 6px 0px 0px;
+}
+
+message {
+ padding: 0;
+ border-color: @primary;
+ border: 0px 1px 1px 1px;
+}
+
+entry, prompt, case-indicator {
+ font: inherit;
+ text-color: inherit;
+}
+
+entry {
+ cursor: pointer;
+}
+
+prompt {
+ margin: 0px 5px 0px 0px;
+}
+
+listview {
+ layout: vertical;
+ //spacing: 5px;
+ padding: 8px;
+ lines: 7;
+ columns: 2;
+ border: 0px 3px 3px 3px;
+ border-radius: 0px 0px 6px 6px;
+ border-color: @primary;
+ dynamic: false;
+}
+
+element {
+ padding: 2px;
+ vertical-align: 1;
+ text-color: @kl;
+ font: inherit;
+}
+
+element-text {
+ background-color: inherit;
+ text-color: inherit;
+ vertical-align: 0.5;
+}
+
+element selected.normal {
+ text-color: @black;
+ background-color: @hv;
+}
+element normal.active {
+ background-color: @hv;
+ text-color: @black;
+}
+
+element-icon {
+ background-color: inherit;
+ text-color: inherit;
+ size: 2.5em;
+}
+
+element normal.urgent {
+ background-color: @primary;
+}
+element selected.active {
+ background-color: @hv;
+ text-color: @bg;
+}
+
+button {
+ padding: 6px;
+ color: @primary;
+ horizontal-align: 0.5;
+
+ border: 2px 0px 2px 2px;
+ border-radius: 4px 0px 0px 4px;
+ border-color: @primary;
+}
+
+button selected {
+ border: 2px 0px 2px 2px;
+ border-color: @primary;
+}
diff --git a/config/rofi/themes/KooL_dwm.rasi b/config/rofi/themes/KooL_dwm.rasi
new file mode 100644
index 00000000..6c6d2b7e
--- /dev/null
+++ b/config/rofi/themes/KooL_dwm.rasi
@@ -0,0 +1,86 @@
+configuration {
+ modi: "drun";
+ font: "JetBrainsMono Nerd Font 10";
+ show-icons: true;
+ terminal: "alacritty";
+ icon-theme: "Papirus-Dark";
+ drun-display-format: "{name}";
+ display-drun: "";
+ timeout {
+ action: "kb-cancel";
+ delay: 0;
+ }
+ filebrowser {
+ directories-first: true;
+ sorting-method: "name";
+ }
+}
+
+@theme "/dev/null"
+
+* {
+ bg: #232933;
+ fg: #d8dee9;
+ selected: #2d3543;
+ accent: #4d6a8e;
+ background-color: @bg;
+
+ color: @fg;
+ border: 0;
+ border-color: @bg;
+ margin: 0;
+ padding: 0;
+ spacing: 0;
+ highlight: none;
+}
+
+window {
+ width: 700px;
+}
+
+element {
+ padding: 6 5 7 5;
+ text-color: @fg;
+}
+
+element-text {
+ vertical-align: 0.5;
+ padding: 5px;
+}
+
+element selected {
+ background-color: @selected;
+}
+
+element-text selected {
+ background-color: @selected;
+}
+
+element-icon selected {
+ background-color: @selected;
+}
+
+element-icon {
+ size: 30;
+}
+
+inputbar {
+ children: [prompt, entry];
+}
+
+prompt {
+ text-color: @bg;
+ background-color: @accent;
+ padding: 12 12 12 12;
+}
+
+entry {
+ text-color: @bg;
+ padding: 12 5 12 0;
+}
+
+listview {
+ background-color: @bg;
+ columns: 3;
+ lines: 6;
+}
diff --git a/config/systemd/user/hyprpolkitagent.service.d/override.conf b/config/systemd/user/hyprpolkitagent.service.d/override.conf
new file mode 100644
index 00000000..04840d90
--- /dev/null
+++ b/config/systemd/user/hyprpolkitagent.service.d/override.conf
@@ -0,0 +1,7 @@
+[Unit]
+After=
+After=dbus.service
+PartOf=
+
+[Install]
+WantedBy=default.target
diff --git a/config/waybar/ModulesCustom b/config/waybar/ModulesCustom
index 8887fa1c..3abb96d4 100644
--- a/config/waybar/ModulesCustom
+++ b/config/waybar/ModulesCustom
@@ -78,6 +78,17 @@
"tooltip-format": "Left Click: Quick Tips\nRight Click: Keybinds",
},
+// External monitor brightness (ddcutil)
+"custom/brightness_external": {
+ "format": "{}",
+ "return-type": "json",
+ "interval": 2,
+ "exec": "$HOME/.config/hypr/scripts/ExternalBrightness.sh --get",
+ "on-scroll-up": "$HOME/.config/hypr/scripts/ExternalBrightness.sh --inc",
+ "on-scroll-down": "$HOME/.config/hypr/scripts/ExternalBrightness.sh --dec",
+ "tooltip": true
+},
+
"custom/dot_update": {
"format": " 󰁈 ",
"on-click": "$HOME/.config/hypr/scripts/KooLsDotsUpdate.sh",
diff --git a/config/waybar/ModulesWorkspaces b/config/waybar/ModulesWorkspaces
index 683fcfb5..c9497b74 100644
--- a/config/waybar/ModulesWorkspaces
+++ b/config/waybar/ModulesWorkspaces
@@ -180,7 +180,7 @@
},
"format": "{icon} {windows}",
"format-window-separator": " ",
- "window-rewrite-default": " ",
+ "window-rewrite-default": " <span foreground='#ff0000'>✘</span> ",
"window-rewrite": {
"title<.*amazon.*>": " ",
"title<.*reddit.*>": " ",
@@ -198,10 +198,11 @@
"class<kitty-dropterm>": " ",
"class<com.mitchellh.ghostty>": " ",
"class<org.wezfurlong.wezterm>": " ",
+ "class<play.mii.Boxxy>": " ",
"class<Warp|warp|dev.warp.Warp|warp-terminal>": "󰰭 ",
- "class<[Tt]hunderbird|[Tt]hunderbird-esr>": " ",
- "class<eu.betterbird.Betterbird>": " ",
+ "class<[Tt]hunderbird|[Tt]hunderbird-esr>": "󰊫 ",
+ "class<org.mozilla.Thunderbird|eu.betterbird.Betterbird>": "󰊫 ",
"title<.*gmail.*>": "󰊫 ",
"class<[Tt]elegram-desktop|org.telegram.desktop|io.github.tdesktop_x64.TDesktop>": " ",
@@ -217,6 +218,7 @@
"title<.*ChatGPT.*>": "󰚩 ",
"title<.*deepseek.*>": "󰚩 ",
"title<.*qwen.*>": "󰚩 ",
+ "title<.*Gemini.*>": "󰚩 ",
"class<subl>": "󰅳 ",
"class<slack>": " ",
@@ -238,11 +240,16 @@
"class<virtualbox manager>": "💽 ",
"title<virtualbox>": "💽 ",
"class<remmina|org.remmina.Remmina>": "🖥️ ",
+ "class<mainline-gtk>": " ",
"class<VSCode|code|code-url-handler|code-oss|codium|codium-url-handler|VSCodium>": "󰨞 ",
+ "class<[Aa]ntigravity>": "󰨞 ",
+ "title<.*[Aa]ntigravity.*>": "󰨞 ",
"class<dev.zed.Zed>": "󰵁",
"class<codeblocks>": "󰅩 ",
"title<.*github.*>": " ",
+ "class<com-jetpackduba-gitnuro-MainKt>": " ",
+ "title<.*Gitnuro.*>": " ",
"class<mousepad>": " ",
"class<libreoffice-writer>": " ",
"class<libreoffice-startcenter>": "󰏆 ",
@@ -253,6 +260,7 @@
"title<.*figma.*>": " ",
"title<.*jira.*>": " ",
"class<jetbrains-idea>": " ",
+ "class<emacs|Emacs>": " ",
"class<obs|com.obsproject.Studio>": " ",
@@ -261,7 +269,7 @@
"class<nwg-displays>": " ",
"class<[Pp]avucontrol|org.pulseaudio.pavucontrol>": "󱡫 ",
"class<steam>": " ",
- "class<thunar|nemo>": "󰝰 ",
+ "class<thunar|nemo|org.gnome.Nautilus>": "󰝰 ",
"class<Gparted>":"",
"class<gimp>": " ",
"class<emulator>": "📱 ",
@@ -269,6 +277,7 @@
"class<org.pipewire.Helvum>": "󰓃",
"class<localsend>":"",
"class<PrusaSlicer|UltiMaker-Cura|OrcaSlicer>": "󰹛",
+ "class<nvidia-settings>": "󰢮 ",
"class<io.github.kolunmi.Bazaar>": " ",
"title<^Bazaar$>": " ",
@@ -294,4 +303,4 @@
"title<^qs-wlogout$>": " ",
}
},
-} \ No newline at end of file
+}
diff --git a/config/waybar/configs/TOP-ddubs-simple-bar b/config/waybar/configs/TOP-ddubs-simple-bar
index 1b459c19..be5f136e 100644
--- a/config/waybar/configs/TOP-ddubs-simple-bar
+++ b/config/waybar/configs/TOP-ddubs-simple-bar
@@ -47,7 +47,10 @@
"tray",
"custom/separator#blank",
"custom/weather2",
- "group/laptop",
+ "cpu",
+ "memory",
+ "temperature",
+ "battery",
"group/status",
"custom/separator#blank",
],
diff --git a/config/waybar/style/Dark-Latte-Wallust-combined-v2.css b/config/waybar/style/Dark-Latte-Wallust-combined-v2.css
index e707c26b..12a573e2 100644
--- a/config/waybar/style/Dark-Latte-Wallust-combined-v2.css
+++ b/config/waybar/style/Dark-Latte-Wallust-combined-v2.css
@@ -53,12 +53,12 @@ tooltip {
border-bottom: 2px solid @border-color;
font-weight: bold;
font-style: normal;
- opacity: 0.8;
+ opacity: 1;
}
#taskbar button,
#workspaces button {
- color: @foreground;
+ color: @color15;
box-shadow: none;
text-shadow: none;
border-radius: 30px;
@@ -169,7 +169,7 @@ tooltip {
#custom-weather.showyIcyDay,
#custom-weather.snowyIcyNight,
#custom-weather.sunnyDay {
- color: @foreground;
+ color: @color15;
padding-right: 6px;
padding-left: 6px;;
}
@@ -262,7 +262,7 @@ tooltip {
}
#clock {
- color: @foreground;
+ color: @color15;
border-radius: 15px;
}
diff --git a/config/waybar/style/Dark-Latte-Wallust-combined.css b/config/waybar/style/Dark-Latte-Wallust-combined.css
index bbe23b8b..9ffad565 100644
--- a/config/waybar/style/Dark-Latte-Wallust-combined.css
+++ b/config/waybar/style/Dark-Latte-Wallust-combined.css
@@ -67,13 +67,13 @@ tooltip {
border:2px solid @border-color;
font-weight: bold;
font-style: normal;
- opacity:0.8;
+ opacity: 1;
color:#FFFFFF;
}
#taskbar button,
#workspaces button {
- color: #6E6A86;
+ color: @color15;
box-shadow: none;
text-shadow: none;
border-radius: 30px;
diff --git a/config/waybar/style/Wallust-Bordered-Chroma-Fusion-Edge.css b/config/waybar/style/Wallust-Bordered-Chroma-Fusion-Edge.css
index e593b9fd..a7eb725c 100644
--- a/config/waybar/style/Wallust-Bordered-Chroma-Fusion-Edge.css
+++ b/config/waybar/style/Wallust-Bordered-Chroma-Fusion-Edge.css
@@ -119,7 +119,7 @@ tooltip {
border-radius: 25px;
padding: 0px 10px 0px 10px;
margin: 5px;
- opacity:0.8;
+ opacity: 1;
border:2px solid @border-color;
}
@@ -212,7 +212,7 @@ tooltip {
#workspaces button {
border-radius: 15px;
border:0px;
- color: @color13;
+ color: @color15;
padding-left: 2px;
padding-right: 2px;
animation: gradient_f 20s ease-in infinite;
diff --git a/config/waybar/style/Wallust-Bordered-Chroma-Simple.css b/config/waybar/style/Wallust-Bordered-Chroma-Simple.css
index 3e277f6c..c0b97f06 100644
--- a/config/waybar/style/Wallust-Bordered-Chroma-Simple.css
+++ b/config/waybar/style/Wallust-Bordered-Chroma-Simple.css
@@ -12,6 +12,14 @@
min-height: 0;
}
+/* Make group buttons themselves use readable text */
+#group-audio,
+#group-mobo_drawer {
+ background: @background;
+ color: @color15;
+ border: 2px solid @color13;
+}
+
window#waybar {
background-color: transparent;
color: @foreground;
@@ -27,12 +35,12 @@ window#waybar.empty #window {
}
tooltip {
- background-color: @color12;
+ background-color: @background;
color: @foreground;
border-radius: 10px;
border-width: 1.5px;
border-style: solid;
- border-color: @color9;
+ border-color: @color13;
transition: 0.3s;
opacity: 0.9;
}
@@ -102,6 +110,8 @@ tooltip {
#tray,
#window,
#wireplumber,
+#group-mobo_drawer,
+#group-audio,
#custom-backlight,
#custom-nightlight,
#custom-browser,
@@ -149,6 +159,7 @@ tooltip {
border: 2px solid @color13;
}
+
#cpu {
border: 2px solid @color5;
color: @foreground;
@@ -177,14 +188,14 @@ tooltip {
}
#custom-power {
- color: red;
+ color: @color13;
padding-left: 10px;
padding-right: 2px;
- border: 2px solid red;
+ border: 2px solid @color13;
}
#backlight {
- color: #f9e2af;
+ color: @color14;
padding-right: 5px;
}
@@ -213,29 +224,35 @@ tooltip {
}
#clock {
- color: #fab387;
+ color: @color13;
+}
+
+#clock:hover {
+ color: @color13;
+ background: @background;
+ border: 2px solid @color13;
}
#bluetooth {
- color: #b4befe;
+ color: @color12;
margin-right: 10px
}
#pulseaudio.microphone,
#pulseaudio {
background-color: @color12;
- color: #89b4fa;
+ color: @color15;
border: 2px solid @color13;
}
#pulseaudio.muted {
- color: #f38ba8;
+ color: @color13;
padding-right: 20px;
}
#battery {
- color: #a6e3a1;
+ color: @color10;
margin-right: 5px;
padding-right: 15px;
border: 2px solid @color14;
@@ -249,22 +266,22 @@ tooltip {
}
#battery.good {
- color: #ffd57a;
+ color: @color14;
border: 2px solid @color15;
}
#battery.warning {
- color: #fab387;
+ color: @color13;
border-left: 0px;
border: 2px solid @color12;
}
#battery.charging {
- color: #a6e3a1;
+ color: @color10;
}
#battery.critical {
- color: #f38ba8;
+ color: @color13;
border-left: 0px;
border: 2px solid @color8;
}
@@ -287,7 +304,7 @@ tooltip {
}
#custom-weather {
- color: #8eacf3;
+ color: @color12;
border-right: 0px;
margin-left: 0px;
margin-right: 5px;
@@ -315,3 +332,29 @@ tooltip {
min-height: 10px;
border-radius: 5px;
}
+
+/* Ensure group drawer modules match base style (avoid bright per-module colors) */
+#group-audio #pulseaudio,
+#group-audio #pulseaudio.microphone,
+#group-mobo_drawer #temperature,
+#group-mobo_drawer #cpu,
+#group-mobo_drawer #power-profiles-daemon,
+#group-mobo_drawer #memory,
+#group-mobo_drawer #disk {
+ background-color: @background;
+ color: @color15;
+ border: 2px solid @color13;
+}
+
+/* Global overrides for this style (match other widgets: dark bg + light text) */
+#pulseaudio,
+#pulseaudio.microphone,
+#cpu,
+#memory,
+#disk,
+#temperature,
+#power-profiles-daemon {
+ background-color: @background;
+ color: @color15;
+ border: 2px solid @color13;
+}
diff --git a/config/waybar/style/Wallust-Box-type.css b/config/waybar/style/Wallust-Box-type.css
index 6bd2a5de..7f1d3ad2 100644
--- a/config/waybar/style/Wallust-Box-type.css
+++ b/config/waybar/style/Wallust-Box-type.css
@@ -51,8 +51,8 @@ window#waybar.empty #window {
#taskbar button.active,
#workspaces button.active {
- color: @color15;
- background-color: @background;
+ color: @background;
+ background-color: @color13;
padding-left: 4px;
padding-right: 8px;
animation: gradient_f 20s ease-in infinite;
@@ -61,8 +61,8 @@ window#waybar.empty #window {
#taskbar button.focused,
#workspaces button.focused {
- color: @color15;
- background-color: @background;
+ color: @background;
+ background-color: @color13;
}
#workspaces button.urgent {
@@ -72,7 +72,8 @@ window#waybar.empty #window {
#taskbar button:hover,
#workspaces button:hover {
- color: @color15;
+ color: @background;
+ background-color: @color13;
padding-left: 2px;
padding-right: 8px;
animation: gradient_f 20s ease-in infinite;
diff --git a/config/waybar/style/Wallust-Chroma-Edge.css b/config/waybar/style/Wallust-Chroma-Edge.css
index 82125870..4a17d473 100644
--- a/config/waybar/style/Wallust-Chroma-Edge.css
+++ b/config/waybar/style/Wallust-Chroma-Edge.css
@@ -50,7 +50,7 @@ tooltip label{
#taskbar button,
#workspaces button {
background-color: transparent;
- color: grey;
+ color: @color15;
box-shadow: none;
text-shadow: none;
padding: 0px;
@@ -63,7 +63,8 @@ tooltip label{
#workspaces button.active {
background-color: transparent;
- color: #D3D3D3;
+\tcolor: @color15;
+
padding-left: 8px;
padding-right: 8px;
animation: gradient_f 20s ease-in infinite;
@@ -143,7 +144,7 @@ tooltip label{
#custom-weather.showyIcyDay,
#custom-weather.snowyIcyNight,
#custom-weather.sunnyDay {
- color: #e5e5e5;
+\tcolor: @color15;
/* color: #bf616a; */
border-radius: 12px;
background-color: rgba(50, 50, 50, 0.1);
diff --git a/config/waybar/style/Wallust-Chroma-Fusion.css b/config/waybar/style/Wallust-Chroma-Fusion.css
index 4399f125..7113c6f4 100644
--- a/config/waybar/style/Wallust-Chroma-Fusion.css
+++ b/config/waybar/style/Wallust-Chroma-Fusion.css
@@ -119,7 +119,7 @@ tooltip {
background-color: @background-module;
border-radius: 25px;
margin: 5px 5px 5px 5px;
- opacity:0.8;
+ opacity: 1;
padding-top: 4px;
padding-bottom: 4px;
padding-right: 6px;
@@ -214,7 +214,7 @@ tooltip {
margin: 1px 1px;
border-radius: 15px;
border:0px;
- color: @color13;
+ color: @color15;
padding-left: 2px;
padding-right: 2px;
animation: gradient_f 20s ease-in infinite;
diff --git a/config/waybar/style/Wallust-ML4W-modern-mixed.css b/config/waybar/style/Wallust-ML4W-modern-mixed.css
index d627b576..f8ef2630 100644
--- a/config/waybar/style/Wallust-ML4W-modern-mixed.css
+++ b/config/waybar/style/Wallust-ML4W-modern-mixed.css
@@ -8,10 +8,10 @@
@define-color workspacesbackground1 @color12;
@define-color workspacesbackground2 @background;
@define-color bordercolor @color11;
-@define-color textcolor1 @foreground;
-@define-color textcolor2 @background;
-@define-color textcolor3 @foreground;
-@define-color iconcolor @foreground;
+@define-color textcolor1 @color15;
+@define-color textcolor2 @color7;
+@define-color textcolor3 @color15;
+@define-color iconcolor @color15;
* {
font-family: "JetBrainsMono Nerd Font";
@@ -42,7 +42,7 @@ border-bottom: 0px solid @foreground;
border: 0px;
font-weight: bold;
font-style: normal;
- opacity: 0.8;
+ opacity: 1;
color: @textcolor1;
}
@@ -54,7 +54,7 @@ border-bottom: 0px solid @foreground;
color: @textcolor1;
background-color: @workspacesbackground2;
transition: all 0.1s linear;
- opacity: 0.4;
+ opacity: 1;
}
#taskbar button.active,
@@ -93,7 +93,7 @@ tooltip label {
border-radius: 5px 5px 5px 5px;
color:white;
font-weight:normal;
- opacity:0.8;
+ opacity: 1;
}
window#waybar.empty #window {
diff --git a/config/waybar/style/Wallust-ML4W-modern.css b/config/waybar/style/Wallust-ML4W-modern.css
index 7c0e9c61..0ab8165c 100644
--- a/config/waybar/style/Wallust-ML4W-modern.css
+++ b/config/waybar/style/Wallust-ML4W-modern.css
@@ -8,10 +8,10 @@
@define-color workspacesbackground1 @color0;
@define-color workspacesbackground2 @color12;
@define-color bordercolor @color13;
-@define-color textcolor1 @foreground;
-@define-color textcolor2 @foreground;
-@define-color textcolor3 @foreground;
-@define-color iconcolor @foreground;
+@define-color textcolor1 @color15;
+@define-color textcolor2 @color7;
+@define-color textcolor3 @color15;
+@define-color iconcolor @color15;
* {
font-family: "JetBrainsMono Nerd Font";
diff --git a/copy.sh b/copy.sh
index b430595a..e301f605 100755
--- a/copy.sh
+++ b/copy.sh
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
-# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Purpose:
# Orchestrates copying/upgrading LinuxBeginnings's Hyprland dotfiles into ~/.config.
# Handles interactive prompts, backups/restores, per-app tweaks, and express mode.
@@ -593,6 +598,8 @@ printf "\\n%.0s" {1..1}
restore_user_scripts "$LOG" "$EXPRESS_MODE"
printf "\n%.0s" {1..1}
+restore_terminal_configs "$LOG" "$EXPRESS_MODE"
+printf "\\n%.0s" {1..1}
restore_hypr_files "$LOG" "$EXPRESS_MODE"
printf "\n%.0s" {1..1}
@@ -633,6 +640,27 @@ chmod +x "$HOME/.config/hypr/UserScripts/"* 2>&1 | tee -a "$LOG"
# Set executable for initial-boot.sh
chmod +x "$HOME/.config/hypr/initial-boot.sh" 2>&1 | tee -a "$LOG"
+# Copy systemd user overrides (e.g., hyprpolkitagent)
+SYSTEMD_SRC="$DOTFILES_DIR/config/systemd"
+SYSTEMD_DEST="$HOME/.config/systemd"
+if [ -d "$SYSTEMD_SRC" ]; then
+ mkdir -p "$SYSTEMD_DEST"
+ cp -r "$SYSTEMD_SRC/." "$SYSTEMD_DEST/" 2>&1 | tee -a "$LOG"
+fi
+
+# Reload user systemd and ensure hyprpolkitagent is enabled/running
+if command -v systemctl >/dev/null 2>&1; then
+ if systemctl --user list-unit-files 2>/dev/null | grep -q '^hyprpolkitagent\.service'; then
+ if ! pgrep -u "$UID" -f 'xfce-polkit|polkit-gnome-authentication-agent-1|polkit-kde-authentication-agent-1|hyprpolkitagent' >/dev/null 2>&1; then
+ systemctl --user daemon-reload 2>&1 | tee -a "$LOG" || true
+ systemctl --user enable hyprpolkitagent 2>&1 | tee -a "$LOG" || true
+ systemctl --user start hyprpolkitagent 2>&1 | tee -a "$LOG" || true
+ else
+ echo "${NOTE} Polkit agent already running. Skipping hyprpolkitagent enable/start." | tee -a "$LOG"
+ fi
+ fi
+fi
+
chassis_type=$(detect_waybar_config)
if [ "$chassis_type" = "desktop" ]; then
config_file="$waybar_config"
diff --git a/docs/Hyprland-LUA-analysis-Phase1.md b/docs/Hyprland-LUA-analysis-Phase1.md
new file mode 100644
index 00000000..e08901db
--- /dev/null
+++ b/docs/Hyprland-LUA-analysis-Phase1.md
@@ -0,0 +1,159 @@
+# 🧭 Hyprland → Lua Migration Analysis (Phase 1)
+<span style="color:#7dd3fc">Focus: identify scripts/configs that **write Hyprland config files** and therefore must change for Lua.</span>
+
+---
+
+## 📌 Table of Contents
+- [🎯 Scope & Assumptions](#-scope--assumptions)
+- [🧩 Hyprland Config Entry Points](#-hyprland-config-entry-points)
+- [✍️ Direct Hyprland Config Writers (must change)](#️-direct-hyprland-config-writers-must-change)
+- [🧪 Indirect / Generated Config Writers](#-indirect--generated-config-writers)
+- [🧰 Install/Upgrade Writers (copy/restore paths)](#-installupgrade-writers-copyrestore-paths)
+- [📟 Runtime‑Only Files (no file writes)](#-runtime-only-files-no-file-writes)
+- [📝 Notes / Follow‑ups](#-notes--follow-ups)
+
+---
+
+## 🎯 Scope & Assumptions
+<span style="color:#fbbf24">Goal:</span> Identify **files that directly modify Hyprland config on disk** (or generate files sourced by Hyprland), because those will need updating for Lua.
+
+<span style="color:#a3e635">Out of scope:</span> The new Lua syntax itself.
+
+---
+
+## 🧩 Hyprland Config Entry Points
+**Primary file:** `Hyprland-Dots/config/hypr/hyprland.conf`
+
+This file **sources**:
+- `Hyprland-Dots/config/hypr/configs/*.conf`
+- `Hyprland-Dots/config/hypr/UserConfigs/*.conf`
+- `Hyprland-Dots/config/hypr/monitors.conf`
+- `Hyprland-Dots/config/hypr/workspaces.conf`
+
+Also:
+- `Hyprland-Dots/config/hypr/UserConfigs/UserDecorations.conf` **sources**
+ `~/.config/hypr/wallust/wallust-hyprland.conf`
+
+➡️ Any script that writes these files must be updated for Lua.
+
+---
+
+## ✍️ Direct Hyprland Config Writers (must change)
+These **write/overwrite Hyprland config files**:
+
+### 🖥️ Monitor Profiles
+- `Hyprland-Dots/config/hypr/scripts/MonitorProfiles.sh`
+ **Writes:** `~/.config/hypr/monitors.conf`
+ **How:** `cp` chosen profile from `Monitor_Profiles/*.conf`
+
+### 🎞️ Animations
+- `Hyprland-Dots/config/hypr/scripts/Animations.sh`
+ **Writes:** `~/.config/hypr/UserConfigs/UserAnimations.conf`
+ **How:** `cp` selected animation file into UserConfigs
+
+### 🧱 Window Rules Version Switch
+- `Hyprland-Dots/config/hypr/scripts/update_WindowRules.sh`
+ **Writes:** `~/.config/hypr/configs/WindowRules.conf`
+ **How:** backup + `cp` from `WindowRules-config-v3.conf`, then `hyprctl reload`
+
+### 🎬 Startup Apps (wallpaper switching)
+- `Hyprland-Dots/config/hypr/UserScripts/WallpaperSelect.sh`
+ **Writes:** `~/.config/hypr/UserConfigs/Startup_Apps.conf`
+ **How:** `sed -i` toggles `exec-once` lines and updates `$livewallpaper`
+
+### 🗂️ UserConfig swapper
+- `Hyprland-Dots/config/hypr/scripts/UserConfigsSwitcher.sh`
+ **Writes:** directory move/rename
+ **How:** `mv` between `UserConfigs` and `UserConfigsBak`
+
+---
+
+## 🧪 Indirect / Generated Config Writers
+These generate **files that Hyprland sources**:
+
+### 🎨 Wallust → Hyprland colors
+- `Hyprland-Dots/config/hypr/scripts/ThemeChanger.sh`
+- `Hyprland-Dots/config/hypr/scripts/WallustSwww.sh`
+
+**Writes/overwrites:**
+`~/.config/hypr/wallust/wallust-hyprland.conf`
+
+**Used by:**
+`Hyprland-Dots/config/hypr/UserConfigs/UserDecorations.conf` (sources it)
+
+➡️ The Lua migration must either keep a compatible generated file or switch the generator target.
+
+---
+
+## 🧰 Install/Upgrade Writers (copy/restore paths)
+These **modify Hyprland configs during install/upgrade**:
+
+### 🔧 `copy.sh`
+- Edits `Hyprland-Dots/config/hypr/configs/ENVariables.conf` (enables hyprcursor)
+- Modifies `~/.config/hypr/configs/Startup_Apps.conf` (quickshell migration)
+- Renames/switches `hyprlock.conf` variants (not Hyprland config, but in same dir)
+- Calls restore helpers below
+
+### 🧱 `scripts/lib_copy.sh`
+Restores/copies:
+- `~/.config/hypr/monitors.conf`
+- `~/.config/hypr/workspaces.conf`
+- `~/.config/hypr/UserConfigs/Startup_Apps.conf`
+- `~/.config/hypr/UserConfigs/WindowRules.conf`
+- `~/.config/hypr/UserConfigs/UserKeybinds.conf`
+- Additional UserConfigs overlay logic
+
+---
+
+## 📟 Runtime‑Only Files (no file writes)
+These **appear to be runtime-only** (no direct file writes detected; they act via `hyprctl`, process control, notifications, etc.):
+
+### ✅ Scripts
+- `Hyprland-Dots/config/hypr/scripts/AirplaneMode.sh`
+- `Hyprland-Dots/config/hypr/scripts/Battery.sh`
+- `Hyprland-Dots/config/hypr/scripts/BrightnessKbd.sh`
+- `Hyprland-Dots/config/hypr/scripts/Brightness.sh`
+- `Hyprland-Dots/config/hypr/scripts/ChangeBlur.sh`
+- `Hyprland-Dots/config/hypr/scripts/ChangeLayout.sh`
+- `Hyprland-Dots/config/hypr/scripts/ClipManager.sh`
+- `Hyprland-Dots/config/hypr/scripts/ExternalBrightness.sh`
+- `Hyprland-Dots/config/hypr/scripts/fastfetch-wrapper.sh`
+- `Hyprland-Dots/config/hypr/scripts/Float-all-Windows.sh`
+- `Hyprland-Dots/config/hypr/scripts/GameMode.sh`
+- `Hyprland-Dots/config/hypr/scripts/Hypridle.sh`
+- `Hyprland-Dots/config/hypr/scripts/KeybindsLayoutInit.sh`
+- `Hyprland-Dots/config/hypr/scripts/keybinds_parser.py`
+- `Hyprland-Dots/config/hypr/scripts/KeyboardLayout.sh`
+- `Hyprland-Dots/config/hypr/scripts/KeyHints.sh`
+- `Hyprland-Dots/config/hypr/scripts/KillActiveProcess.sh`
+- `Hyprland-Dots/config/hypr/scripts/LockScreen.sh`
+- `Hyprland-Dots/config/hypr/scripts/MediaCtrl.sh`
+- `Hyprland-Dots/config/hypr/scripts/OverviewToggle.sh`
+- `Hyprland-Dots/config/hypr/scripts/Polkit-NixOS.sh`
+- `Hyprland-Dots/config/hypr/scripts/Polkit.sh`
+- `Hyprland-Dots/config/hypr/scripts/PortalHyprland.sh`
+- `Hyprland-Dots/config/hypr/scripts/PortalHyprlandUbuntu.sh`
+- `Hyprland-Dots/config/hypr/scripts/RefreshNoWaybar.sh`
+- `Hyprland-Dots/config/hypr/scripts/rofi-emacs-keybinds`
+- `Hyprland-Dots/config/hypr/scripts/RofiSearch.sh`
+- `Hyprland-Dots/config/hypr/scripts/Sounds.sh`
+- `Hyprland-Dots/config/hypr/scripts/Toggle-Active-Window-Audio.sh`
+- `Hyprland-Dots/config/hypr/scripts/UptimeNixOS.sh`
+- `Hyprland-Dots/config/hypr/scripts/Volume.sh`
+- `Hyprland-Dots/config/hypr/scripts/WallpaperDaemon.sh`
+- `Hyprland-Dots/config/hypr/scripts/WaybarScripts.sh`
+- `Hyprland-Dots/config/hypr/scripts/Wlogout.sh`
+
+### ✅ UserScripts
+- `Hyprland-Dots/config/hypr/UserScripts/00-Readme`
+- `Hyprland-Dots/config/hypr/UserScripts/RofiCalc.sh`
+- `Hyprland-Dots/config/hypr/UserScripts/WallpaperRandom.sh`
+- `Hyprland-Dots/config/hypr/UserScripts/WeatherWrap.sh`
+
+---
+
+## 📝 Notes / Follow‑ups
+<span style="color:#f97316">Important:</span>
+Some scripts are **file writers but not Hyprland config writers** (e.g., `install-uv.sh`, `Distro_update.sh`, and the binary `dots-tui-ubuntu-2404`). They don’t touch Hyprland configs but do modify the system.
+
+If you want an **exact “no file writes anywhere” list**, I can do a stricter pass (including temp/status files, downloads, etc.).
diff --git a/docs/copy.sh-tui-analysis-3-14-2026.md b/docs/copy.sh-tui-analysis-3-14-2026.md
new file mode 100644
index 00000000..2b94e693
--- /dev/null
+++ b/docs/copy.sh-tui-analysis-3-14-2026.md
@@ -0,0 +1,105 @@
+# copy.sh vs TUI Installer Parity Report (2026-03-14)
+
+This report compares the Bash-based `copy.sh` flow (including helper scripts) against the Python/Textual TUI installer in `../Hyprland-Dots-TUI-Installer/`.
+
+## ✅ Parity Matches
+
+### Core Modes & Flow
+- Install / Upgrade / Express workflows exist in both.
+ - `copy.sh`, `scripts/copy_menu.sh`
+ - TUI: `src/dots_tui/__main__.py`, `src/dots_tui/screens/menu.py`, `src/dots_tui/logic/orchestrator.py`
+
+### Safety / Setup
+- Root check (both abort if root).
+- Repo update flow (stash + pull + summary).
+- Logs written to `Copy-Logs/` with per-run log file.
+
+### Hardware / OS Detection + Tweaks
+- Nvidia / VM / NixOS tweaks.
+ - `scripts/lib_detect.sh`
+ - `src/dots_tui/logic/orchestrator.py`, `src/dots_tui/logic/system.py`
+
+### User Prompts / Config Choices
+- Keyboard layout detect + confirmation.
+- Resolution selection (<1440p vs ≥1440p).
+- 12h/24h clock (waybar + hyprlock edits).
+- Default editor selection (nvim/vim).
+- Optional app enablement: asusctl, blueman, ags, quickshell.
+
+### Copy / Backup / Restore
+- Phase1 copy w/ replace prompts: fastfetch, kitty, rofi, swaync.
+- Waybar merge semantics (backup, merge configs/styles/UserModules).
+- Phase2 copy (btop, cava, hypr, etc.).
+- Restore user configs / scripts / hypr files (with express skip).
+- Duplicate UserConfigs cleanup.
+
+### Wallpapers
+- Base wallpaper copy to `~/Pictures/wallpapers`.
+- Optional 1GB Wallpaper-Bank download (skipped in express).
+
+### Finalization
+- chmod scripts, waybar symlinks, cleanup backups, wallust init.
+
+## ⚠️ Parity Gaps (Missing or Divergent Behavior)
+
+### 1) waybar-weather install + config handling
+`copy.sh` does **two things** the TUI does not:
+- **Installs waybar-weather binary**
+ - `scripts/lib_apps.sh`: `install_waybar_weather()`
+ - `copy.sh`: calls it on non-NixOS, or warns on NixOS.
+- **Copies waybar-weather config + prompts for units**
+ - `copy.sh`: block near `WAYBAR_WEATHER_SRC / DEST` (install/upgrade/express logic + Fahrenheit prompt).
+
+✅ **TUI currently has no references to waybar-weather**.
+
+---
+
+### 2) KeybindsLayoutInit always enabled
+`copy.sh` always ensures `exec-once = $scriptsDir/KeybindsLayoutInit.sh` via `ensure_keybinds_init` (called unconditionally).
+
+TUI only adds it if **one of** (asus / blueman / ags / quickshell) is enabled:
+- `src/dots_tui/logic/orchestrator.py` → `_apply_user_choices`
+
+So if user disables all optional apps, TUI skips it while `copy.sh` still adds it.
+
+---
+
+### 3) Waybar symlink enforcement
+`copy.sh` forces `~/.config/waybar/config` and `style.css` to be symlinks even if they are regular files.
+
+TUI only replaces them **if missing or already a symlink**:
+- `src/dots_tui/logic/orchestrator.py` → `_finalize_post_copy`
+
+So regular files won’t be converted in TUI.
+
+---
+
+### 4) Express mode + SDDM 12h edits
+`copy.sh` explicitly **skips SDDM 12h edits** in express mode to avoid sudo prompts.
+
+TUI still attempts SDDM edits if user chooses 12h:
+- `src/dots_tui/logic/orchestrator.py` → `_finalize_post_copy` (SDDM clock edits run whenever `clock_24h` is false).
+
+---
+
+### 5) Menu behavior / CLI flags
+- `copy.sh` supports `--tty` to force non-whiptail menu.
+- TUI has no equivalent.
+
+---
+
+## ✅ TUI-only Extras (Not in copy.sh)
+- Dry-run / plan mode (`--dry-run`).
+- Download repo (clone flow).
+- Path safety guard (prevents deletes outside `$HOME`).
+- Default wallpaper initialization if `.wallpaper_current` missing.
+
+---
+
+## Summary
+The TUI installer is **mostly aligned** with `copy.sh`, but **not full parity** due to:
+1) Missing `waybar-weather` binary + config + units prompt
+2) KeybindsLayoutInit not always added
+3) Waybar symlink enforcement behavior mismatch
+4) Express-mode SDDM 12h edits mismatch
+5) Minor CLI/menu flag mismatch
diff --git a/i18n/README/README.ua.md b/i18n/README/README.ua.md
index 03c50dd1..6a4d6b8e 100644
--- a/i18n/README/README.ua.md
+++ b/i18n/README/README.ua.md
@@ -51,37 +51,60 @@ https://github.com/user-attachments/assets/49bc12b2-abaf-45de-a21c-67aacd9bb872
---
[![Typing SVG](https://readme-typing-svg.herokuapp.com?font=Fira+Code&weight=700&size=22&pause=1000&color=F7077E&vCenter=true&width=435&height=30&lines=ВСТАНОВЛЕННЯ)](https://git.io/typing-svg)
-### 🚩 🏁 Автоматичні скрипти встановлення Hyprland для дистрибутивів, клонування та запуск 🇵🇭
-> [!УВАГА]
-> Якщо ви використовуєте FISH SHELL, НЕ використовуйте цю функцію. Натомість клонуйте Distro-Hyprland і запустіть install.sh.
-- ПРИМІТКА: для роботи потрібен пакет `curl`
+
+## 🚩 🏁 Автоматичне встановлення Distro-Hyprland (клонування і запуск) 🇵🇭
+
+> ⚠️ **УВАГА**
+> Якщо ти користуєшся FISH SHELL — **не використовуй** цю функцію. Клонуй Distro-Hyprland вручну і запускай `install.sh`.
+
+- Потрібен пакет `curl`.
+
```bash
sh <(curl -L https://raw.githubusercontent.com/LinuxBeginnings/Hyprland-Dots/main/Distro-Hyprland.sh)
+
```
-- тепер ви можете використовувати наведену вище команду для автоматичного клонування скриптів встановлення Distro-Hyprland, зазначених нижче
-- вона клонує скрипти встановлення та запускає `install.sh` 😎
+- Команда вище автоматично клонить скрипти встановлення `Distro-Hyprland`.
+
+- Після цього автоматом запуститься `install.sh` 😎
+
+
+----------
+
+## 👁️‍🗨️ Мої скрипти встановлення Hyprland 👁️‍🗨️
-### 👁️‍🗨️ Мої скрипти встановлення Hyprland 👁️‍🗨️
-- Автоматичні скрипти Hyprland для обраного дистрибутива, які завантажать ці dotfiles, якщо ви оберете встановлення цих конфігурацій
+Автоматизовані скрипти Hyprland для обраного дистрибутиву. За бажанням вони підтягнуть ці dotfiles під час інсталяції.
- [Arch-Linux](https://github.com/LinuxBeginnings/Arch-Hyprland)
+
- [OpenSUSE(Tumbleweed)](https://github.com/LinuxBeginnings/OpenSuse-Hyprland)
-- [Fedora-Linux](https://github.com/LinuxBeginnings/Fedora-Hyprland)
+
+- [Fedora-Linux (43/Rawhide)](https://github.com/LinuxBeginnings/Fedora-Hyprland)
+
- [Debian-Linux (Trixie & SID)](https://github.com/LinuxBeginnings/Debian-Hyprland)
-- [NixOS](https://github.com/LinuxBeginnings/NixOS-Hyprland)
+
+- [NixOS (25.05+)](https://github.com/LinuxBeginnings/NixOS-Hyprland)
+
- [Ubuntu 24.04 LTS](https://github.com/LinuxBeginnings/Ubuntu-Hyprland/tree/24.04)
-- [Ubuntu 24.10](https://github.com/LinuxBeginnings/Ubuntu-Hyprland/tree/24.10)
-- [Ubuntu 25.04 - (АЛЬФА-ЕТАП)](https://github.com/LinuxBeginnings/Ubuntu-Hyprland/tree/25.04)
+- [Ubuntu 24.10 (depreciated)](https://github.com/LinuxBeginnings/Ubuntu-Hyprland/tree/24.10)
+- [Ubuntu 25.04 (depreciated)](https://github.com/LinuxBeginnings/Ubuntu-Hyprland/tree/25.04)
+- [Ubuntu 25.10](https://github.com/LinuxBeginnings/Ubuntu-Hyprland/tree/25.10)
+
----
+----------
+
+## 🪧 Увага
+
+- Цей репозиторій **не містить і не встановлює жодних пакетів**. Тут лише попередньо налаштовані конфіги (dotfiles) для Hyprland.
+
+- Подивись у скриптах встановлення, які пакети потрібні. Мінімум — має бути встановлений Hyprland.
+
+- Цей репо буде автоматично підтягнутий скриптами Distro-Hyprland, якщо ти обереш встановлення з готовими конфігами.
+
-### 🪧 Увага 🪧
-- Цей репозиторій НЕ містить і НЕ встановлює жодних пакетів. Це лише попередньо налаштовані конфігурації Hyprland або dotfiles
-- зверніться до скриптів встановлення, щоб дізнатися, які пакети потрібно встановити... але принаймні пакети Hyprland потрібні 😏😏😏 очевидно!!
-- Цей репозиторій буде завантажено скриптами встановлення Distro-Hyprland, зазначеними вище, якщо ви оберете завантаження попередньо налаштованих dotfiles
+----------
### 👀 Скріншоти 👀
- Усі скріншоти зібрано тут [Скріншоти](https://github.com/LinuxBeginnings/screenshots/tree/main/Hyprland-ScreenShots)
@@ -131,9 +154,16 @@ chmod +x release.sh
chmod +x upgrade.sh
./upgrade.sh
```
+## ❗❗❗ DEBIAN ТА UBUNTU!
+
+- Debian 13
+- Тепер Hyprland 0.51.1 збирається з вихідного коду за допомогою скрипта `install.sh`
+- Тож поточна версія Hyprland-Dots сумісна лише у цих випадках.
+
+- Ubuntu 24.04/25.10
+- Тепер ми використовуємо PPA для отримання більш актуальних версій Hyprland.
+- Тож поточні версії цих Dotfile сумісні, якщо ви оновилися до конфігурації на основі PPA.
-## ❗❗❗ УВАГА ДЛЯ КОРИСТУВАЧІВ DEBIAN ТА UBUNTU!
-- Я отримую величезну кількість повідомлень щодо оновлення dotfiles Hyprland від KooL. Я зробив велику примітку у [`ВІКІ`](https://github.com/LinuxBeginnings/Hyprland-Dots/wiki/Install_&_Update)
#### ⚠️⚠️⚠️ УВАГА - РЕЗЕРВНІ КОПІЇ, СТВОРЕНІ СКРИПТОМ
> [!УВАГА]
@@ -169,10 +199,12 @@ chmod +x upgrade.sh
#### ✍️ Внесок
- Хочете зробити внесок? Клікніть [`ТУТ`](https://github.com/LinuxBeginnings/Hyprland-Dots/blob/main/CONTRIBUTING.md) для посібника зі внесення внеску
+> Дякую всім, хто додав код або підтримав сервер Discord. Ваші зусилля дуже цінуються.
+
#### 🤷‍♂️ ЩО РОБИТИ!
- [ ] Налаштування dotfiles - 🚧 у постійному прогресі
-- ~~[ ] Можливо, перехід на starship? Хоча у starship обмежені теми порівняно з oh-my-zsh.~~ поки що планів немає
+
#### 🔮 Сервер Discord
- запрошую приєднатися до мого [Discord](https://discord.com/invite/kool-tech-world)
@@ -180,15 +212,14 @@ chmod +x upgrade.sh
#### 💖 Підтримка
- зірка на моїх репозиторіях GitHub була б чудовою 🌟
-- Підпишіться на мій канал YouTube [YouTube](https://www.youtube.com/@Ja.KooLit)
-
-- також ви можете підтримати через каву або btc 😊
+- Підпишіться на мій канал YouTube [YouTube](https://www.youtube.com/@Ja.KooLit)
-або
+## 🫰 Дякую за зірки 🩷
-Або ви можете пожертвувати криптовалюту на мій btc-гаманець :)
+### Document translations
+- Spanish(Іспанська): [Código de Conducta](./i18n/CODE_OF_CONDUCT/CODE_OF_CONDUCT.es.md) · [Guía de mensajes de commit](./i18n/COMMIT_MESSAGE_GUIDELINES/COMMIT_MESSAGE_GUIDELINES.es.md) · [Guía de contribución](./i18n/CONTRIBUTING/CONTRIBUTING.es.md)
-## 🫰 Дякую за зірки 🩷
+- French(Французька): [Code de Conduite](./i18n/CODE_OF_CONDUCT/CODE_OF_CONDUCT.fr.md) · [Directives pour les messages de commit](./i18n/COMMIT_MESSAGE_GUIDELINES/COMMIT_MESSAGE_GUIDELINES.fr.md) · [Guide de contribution](./i18n/CONTRIBUTING/CONTRIBUTING.fr.md)
diff --git a/scripts/copy_menu.sh b/scripts/copy_menu.sh
index 87f9301f..47843205 100755
--- a/scripts/copy_menu.sh
+++ b/scripts/copy_menu.sh
@@ -1,4 +1,10 @@
#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# show_copy_menu
# Arguments:
diff --git a/scripts/lib_apps.sh b/scripts/lib_apps.sh
index f19fd75a..9472831d 100644
--- a/scripts/lib_apps.sh
+++ b/scripts/lib_apps.sh
@@ -1,4 +1,10 @@
#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# App enablement and editor selection helpers.
enable_asusctl() {
@@ -67,10 +73,18 @@ install_terminal_configs() {
local base="${DOTFILES_DIR:-.}"
# Ghostty
- local GHOSTTY_SRC="$base/config/ghostty/ghostty.config"
+ local GHOSTTY_SRC="$base/config/ghostty/config"
local GHOSTTY_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/ghostty"
local GHOSTTY_DEST="$GHOSTTY_DIR/config"
if [ -f "$GHOSTTY_SRC" ]; then
+ if [ -d "$GHOSTTY_DIR" ]; then
+ BACKUP_DIR=$(get_backup_dirname)
+ local GHOSTTY_BACKUP="$GHOSTTY_DIR-backup-$BACKUP_DIR"
+ if [ ! -d "$GHOSTTY_BACKUP" ]; then
+ cp -a "$GHOSTTY_DIR" "$GHOSTTY_BACKUP" 2>&1 | tee -a "$log"
+ echo "${NOTE:-[NOTE]} - Backed up Ghostty config to $GHOSTTY_BACKUP." 2>&1 | tee -a "$log"
+ fi
+ fi
mkdir -p "$GHOSTTY_DIR"
install -m 0644 "$GHOSTTY_SRC" "$GHOSTTY_DEST" 2>&1 | tee -a "$log"
if [ -f "$GHOSTTY_DIR/wallust.conf" ]; then
@@ -140,14 +154,32 @@ install_waybar_weather_binary() {
return 0
fi
+ # Sudo handling for /usr/bin and /usr/local/bin
+ local SUDO=""
+ if [[ $EUID -ne 0 ]]; then
+ if command -v sudo >/dev/null 2>&1; then
+ SUDO="sudo"
+ else
+ _err "sudo not available; cannot write to ${INSTALL_PATH} as non-root"
+ return 1
+ fi
+ fi
+
if grep -qi '^ID=arch' /etc/os-release 2>/dev/null; then
- if command -v pacman >/dev/null 2>&1 && pacman -Qi weather-waybar >/dev/null 2>&1; then
- _log "weather-waybar already installed via pacman."
+ if command -v pacman >/dev/null 2>&1 && pacman -Qi waybar-weather >/dev/null 2>&1; then
+ _log "waybar-weather already installed via pacman."
return 0
fi
+
+ # If no package is installed but a static binary exists, remove it before AUR install
+ if [ -x /usr/bin/waybar-weather ] || [ -x /usr/local/bin/waybar-weather ]; then
+ _log "Removing waybar-weather static binary"
+ ${SUDO} rm -f /usr/bin/waybar-weather /usr/local/bin/waybar-weather || _warn "Failed to remove existing waybar-weather binary."
+ fi
+
if command -v yay >/dev/null 2>&1; then
- _log "Attempting to install AUR package 'weather-waybar' via yay"
- if yay -S --noconfirm weather-waybar; then
+ _log "Attempting to install AUR package 'waybar-weather' via yay"
+ if yay -S --noconfirm waybar-weather; then
_log "AUR install succeeded."
return 0
else
@@ -168,16 +200,6 @@ install_waybar_weather_binary() {
return 1
fi
- # Sudo handling for /usr/bin
- local SUDO=""
- if [[ $EUID -ne 0 ]]; then
- if command -v sudo >/dev/null 2>&1; then
- SUDO="sudo"
- else
- _err "sudo not available; cannot write to ${INSTALL_PATH} as non-root"
- return 1
- fi
- fi
_log "Installing prebuilt binary to ${INSTALL_PATH} from ${ASSET}"
if ${SUDO} sh -c "tmp=\$(mktemp '${INSTALL_PATH}.XXXXXX') && gzip -dc '$ASSET' > \"\$tmp\" && chmod 0755 \"\$tmp\" && mv -f \"\$tmp\" '${INSTALL_PATH}'"; then
diff --git a/scripts/lib_backup.sh b/scripts/lib_backup.sh
index 6867fb6d..b6f54f6a 100644
--- a/scripts/lib_backup.sh
+++ b/scripts/lib_backup.sh
@@ -1,9 +1,21 @@
#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Backup helper utilities shared by copy.sh (and future scripts).
# Create a unique backup directory name with month, day, hours, and minutes.
get_backup_dirname() {
- echo "back-up_$(date +"%m%d_%H%M")"
+ if [ -n "${BACKUP_DIR:-}" ]; then
+ echo "$BACKUP_DIR"
+ return
+ fi
+ BACKUP_DIR="back-up_$(date +"%m%d_%H%M")"
+ export BACKUP_DIR
+ echo "$BACKUP_DIR"
}
# Move a directory to a timestamped backup alongside the original.
diff --git a/scripts/lib_copy.sh b/scripts/lib_copy.sh
index 58fbe066..f6d4cdd2 100644
--- a/scripts/lib_copy.sh
+++ b/scripts/lib_copy.sh
@@ -1,4 +1,10 @@
#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# Copy helpers split into phases to keep copy.sh lean.
copy_phase1() {
@@ -216,15 +222,15 @@ cleanup_duplicate_userconfigs() {
return
fi
- # Run de-dupe only for existing installs up to and including v2.3.19.
- # For v2.3.20 and newer, the underlying duplication bug is fixed and
- # this cleanup is no longer needed (and might mask future issues).
- if version_gte "$current_version" "2.3.20"; then
- echo "${INFO:-[INFO]} Skipping UserConfigs duplicate cleanup for detected version v$current_version (>= 2.3.20)." 2>&1 | tee -a "$log"
+ # Run de-dupe only for existing installs up to and including v2.3.18.
+ # For v2.3.19 and newer, UserConfigs should be left as-is to avoid
+ # removing user modifications.
+ if version_gte "$current_version" "2.3.19"; then
+ echo "${INFO:-[INFO]} Skipping UserConfigs duplicate cleanup for detected version v$current_version (>= 2.3.19)." 2>&1 | tee -a "$log"
return
fi
- echo "${INFO:-[INFO]} Running UserConfigs duplicate cleanup for detected version v$current_version (<= 2.3.19)." 2>&1 | tee -a "$log"
+ echo "${INFO:-[INFO]} Running UserConfigs duplicate cleanup for detected version v$current_version (<= 2.3.18)." 2>&1 | tee -a "$log"
local HYPR_DIR="$HOME/.config/hypr"
local BASE_DIR="$HYPR_DIR/configs"
@@ -342,6 +348,9 @@ restore_user_configs() {
local log="$1"
local express_mode="$2"
local old_version="$3"
+ if [ "${RUN_MODE:-}" = "install" ]; then
+ return
+ fi
local DIRPATH="$HOME/.config/hypr"
local BACKUP_DIR
@@ -353,15 +362,7 @@ restore_user_configs() {
exit 1
fi
- # In express mode we still want to run the de-dupe logic, but we skip
- # the interactive restoration prompts so the workflow stays non-blocking.
- local SKIP_RESTORE_PROMPTS=0
- if [ -d "$BACKUP_DIR_PATH" ] && [ "$express_mode" -eq 1 ]; then
- echo "${NOTE:-[NOTE]} Express mode: skipping UserConfigs restoration prompts." 2>&1 | tee -a "$log"
- SKIP_RESTORE_PROMPTS=1
- fi
-
- if [ -d "$BACKUP_DIR_PATH" ] && [ "$SKIP_RESTORE_PROMPTS" -eq 0 ]; then
+ if [ -d "$BACKUP_DIR_PATH" ]; then
local VERSION_FILE
VERSION_FILE=$(find "$DIRPATH" -maxdepth 1 -name "v*.*.*" | head -n 1)
local CURRENT_VERSION="999.9.9"
@@ -370,6 +371,10 @@ restore_user_configs() {
fi
local TARGET_VERSION="2.3.19"
+ local AUTO_RESTORE=0
+ if version_gte "$CURRENT_VERSION" "2.3.18"; then
+ AUTO_RESTORE=1
+ fi
echo -e "${NOTE:-[NOTE]} Restoring previous ${MAGENTA:-}User-Configs${RESET:-}... " 2>&1 | tee -a "$log"
printf "${WARNING:-}\\
@@ -382,13 +387,19 @@ restore_user_configs() {
" >&2
if version_gte "$CURRENT_VERSION" "$TARGET_VERSION"; then
- read -r -p "${CAT:-[ACTION]} Do you want to restore your previous UserConfigs directory? (Y/n): " restore_userconfigs_dir
- if [[ "$restore_userconfigs_dir" != [Nn]* ]]; then
- echo "${NOTE:-[NOTE]} Restoring UserConfigs directory..." 2>&1 | tee -a "$log"
+ if [ "$express_mode" -eq 1 ] || [ "$AUTO_RESTORE" -eq 1 ]; then
+ echo "${NOTE:-[NOTE]} Restoring UserConfigs directory automatically." 2>&1 | tee -a "$log"
rsync -a "$BACKUP_DIR_PATH/" "$DIRPATH/UserConfigs/" 2>&1 | tee -a "$log"
echo "${OK:-[OK]} - UserConfigs directory restored." 2>&1 | tee -a "$log"
else
- echo "${NOTE:-[NOTE]} - Skipped restoring UserConfigs." 2>&1 | tee -a "$log"
+ read -r -p "${CAT:-[ACTION]} Do you want to restore your previous UserConfigs directory? (Y/n): " restore_userconfigs_dir
+ if [[ "$restore_userconfigs_dir" != [Nn]* ]]; then
+ echo "${NOTE:-[NOTE]} Restoring UserConfigs directory..." 2>&1 | tee -a "$log"
+ rsync -a "$BACKUP_DIR_PATH/" "$DIRPATH/UserConfigs/" 2>&1 | tee -a "$log"
+ echo "${OK:-[OK]} - UserConfigs directory restored." 2>&1 | tee -a "$log"
+ else
+ echo "${NOTE:-[NOTE]} - Skipped restoring UserConfigs." 2>&1 | tee -a "$log"
+ fi
fi
else
echo -e "${NOTE:-[NOTE]} Detected version ${YELLOW:-}v$CURRENT_VERSION${RESET:-} (older than v$TARGET_VERSION). Using legacy restoration mode." 2>&1 | tee -a "$log"
@@ -419,18 +430,25 @@ restore_user_configs() {
echo "${OK:-[OK]} - Migrated overlay for ${YELLOW:-}$FILE_NAME${RESET:-}" 2>&1 | tee -a "$log"
continue
fi
-
- printf "\n${INFO:-[INFO]} Found ${YELLOW:-}$FILE_NAME${RESET:-} in hypr backup...\n"
- read -r -p "${CAT:-[ACTION]} Do you want to restore ${YELLOW:-}$FILE_NAME${RESET:-} from backup? (Y/n): " file_restore
-
- if [[ "$file_restore" != [Nn]* ]]; then
+ if [ "$express_mode" -eq 1 ] || [ "$AUTO_RESTORE" -eq 1 ]; then
if cp "$BACKUP_FILE" "$DIRPATH/UserConfigs/$FILE_NAME"; then
echo "${OK:-[OK]} - $FILE_NAME restored!" 2>&1 | tee -a "$log"
else
echo "${ERROR:-[ERROR]} - Failed to restore $FILE_NAME!" 2>&1 | tee -a "$log"
fi
else
- echo "${NOTE:-[NOTE]} - Skipped restoring $FILE_NAME." 2>&1 | tee -a "$log"
+ printf "\n${INFO:-[INFO]} Found ${YELLOW:-}$FILE_NAME${RESET:-} in hypr backup...\n"
+ read -r -p "${CAT:-[ACTION]} Do you want to restore ${YELLOW:-}$FILE_NAME${RESET:-} from backup? (Y/n): " file_restore
+
+ if [[ "$file_restore" != [Nn]* ]]; then
+ if cp "$BACKUP_FILE" "$DIRPATH/UserConfigs/$FILE_NAME"; then
+ echo "${OK:-[OK]} - $FILE_NAME restored!" 2>&1 | tee -a "$log"
+ else
+ echo "${ERROR:-[ERROR]} - Failed to restore $FILE_NAME!" 2>&1 | tee -a "$log"
+ fi
+ else
+ echo "${NOTE:-[NOTE]} - Skipped restoring $FILE_NAME." 2>&1 | tee -a "$log"
+ fi
fi
fi
done
@@ -489,6 +507,32 @@ restore_user_scripts() {
fi
}
+restore_terminal_configs() {
+ local log="$1"
+ local express_mode="$2"
+
+ local GHOSTTY_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/ghostty"
+ local BACKUP_DIR
+ BACKUP_DIR=$(get_backup_dirname)
+ local GHOSTTY_BACKUP="$GHOSTTY_DIR-backup-$BACKUP_DIR"
+
+ if [ -d "$GHOSTTY_BACKUP" ] && [ "$express_mode" -eq 1 ]; then
+ echo "${NOTE:-[NOTE]} Express mode: skipping Ghostty restore prompt." 2>&1 | tee -a "$log"
+ return
+ fi
+
+ if [ -d "$GHOSTTY_BACKUP" ] && [ "$express_mode" -eq 0 ]; then
+ echo -e "${NOTE:-[NOTE]} Restore previous ${MAGENTA:-}Ghostty${RESET:-} config?" 2>&1 | tee -a "$log"
+ read -r -p "${CAT:-[ACTION]} Do you want to restore Ghostty config from backup? (y/N): " restore_ghostty
+ if [[ "$restore_ghostty" == [Yy]* ]]; then
+ rm -rf "$GHOSTTY_DIR"
+ cp -a "$GHOSTTY_BACKUP" "$GHOSTTY_DIR" 2>&1 | tee -a "$log"
+ echo "${OK:-[OK]} - Ghostty config restored." 2>&1 | tee -a "$log"
+ else
+ echo "${NOTE:-[NOTE]} - Skipped restoring Ghostty config." 2>&1 | tee -a "$log"
+ fi
+ fi
+}
restore_hypr_files() {
local log="$1"
local express_mode="$2"
diff --git a/scripts/lib_detect.sh b/scripts/lib_detect.sh
index 5cb26c1b..2b11baac 100644
--- a/scripts/lib_detect.sh
+++ b/scripts/lib_detect.sh
@@ -1,4 +1,10 @@
#!/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.
diff --git a/scripts/lib_prompts.sh b/scripts/lib_prompts.sh
index 6475e54d..8f2db3bc 100644
--- a/scripts/lib_prompts.sh
+++ b/scripts/lib_prompts.sh
@@ -1,4 +1,10 @@
#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# User interaction helpers extracted from copy.sh. Each helper echoes state or sets
# globals deliberately to minimize side effects.
diff --git a/scripts/lib_update.sh b/scripts/lib_update.sh
index be0b8a0a..397e7728 100644
--- a/scripts/lib_update.sh
+++ b/scripts/lib_update.sh
@@ -1,4 +1,10 @@
#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
# run_repo_update
# Arguments:
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage