diff options
| author | Don Williams <don.e.williams@gmail.com> | 2025-10-13 20:36:51 -0400 |
|---|---|---|
| committer | Don Williams <don.e.williams@gmail.com> | 2025-10-13 20:36:51 -0400 |
| commit | dd2a2859841e6aa174b8e9b03799e1df76fd6c3f (patch) | |
| tree | b879abcf54989120a0931443bfb8203c885c2b20 | |
| parent | d20745840e43bfabef2a60190071d78016ddb658 (diff) | |
| parent | e4be12e23fa8d6f8a73dde974ea6adf242885bc1 (diff) | |
Merge remote-tracking branch 'origin/main' into development
33 files changed, 705 insertions, 452 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..d20a9670 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +WARP.md +.warp.md +result diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..cd0effc4 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,42 @@ +# Changelog — JAK's Hyprland Dotfiles + +## October 2025 + +### 🐛 Fixes + +- Correct `windowrule` syntax error. +- Ensure wallpaper selector applies wallpaper to SDDM. +- Update theme colors when a new wallpaper is selected. + +### 🌦️ Weather.py + +- ♻️ Substantial rewrite. +- ✅ Launches properly in Waybar. +- 📍 Improved location detection; overridable variables exposed. +- 🌐 Switched to Open-Meteo for weather data with fallback providers. + +### 🖥️ Support for debian and ubuntu installs + +- Providing they are using Hyprland 0.51.1 or greater + +### 🖥️ Drop-down terminal + +- 🔧 Start on login via `TerminalDropDown.sh` so first invocation works. +- 🐱 Use Kitty explicitly instead of `$TERM` for consistent behavior. + +### 🌇 HyprSunset + +- 🔧 Availble from waybar or`SUPER + N` + +### 🖱️ Gestures + +- 🔧 Updated to accommodate Hyprland 0.5x changes. + +### 👥 Contributors + +- [CharlyMH](https://github.com/CharlyMH) +- [ndeekshith](https://github.com/ndeekshith) +- [SherLock707](https://github.com/SherLock707) +- [SVIGHNESH](https://github.com/SVIGHNESH) + +If you have any questions, feel free to contact via [GitHub Discussions](https://github.com/JaKooLit/Hyprland-Dots/discussions) or [Through Discord Server](https://discord.gg/kool-tech-world) @@ -42,14 +42,18 @@ https://github.com/user-attachments/assets/49bc12b2-abaf-45de-a21c-67aacd9bb872 </div> ### 📹 A video walkthroughs + - at the bottom </details> --- + [](https://git.io/typing-svg) + ### 🚩 🏁 Auto Distro-Hyprland install scripts cloning and starting 🇵🇭 -> [!CAUTION] + +> [!CAUTION] > If you are using FISH SHELL, DO NOT use this function. Clone the Distro-Hyprland and ran install.sh instead - NOTE: you need package `curl` for this to work @@ -61,8 +65,8 @@ sh <(curl -L https://raw.githubusercontent.com/JaKooLit/Hyprland-Dots/main/Distr - you can now use above command to automatically clone the Distro-Hyprland install scripts below - it will clone the install scripts and start the `install.sh` 😎 - ### 👁️🗨️ My Hyprland install Scripts 👁️🗨️ + - Automated Hyprland Scripts for Distro of choice which will pull this dotfiles if opted to install these configurations - [Arch-Linux](https://github.com/JaKooLit/Arch-Hyprland) @@ -77,117 +81,136 @@ sh <(curl -L https://raw.githubusercontent.com/JaKooLit/Hyprland-Dots/main/Distr - [Ubuntu 24.04 LTS](https://github.com/JaKooLit/Ubuntu-Hyprland/tree/24.04) - [Ubuntu 24.10](https://github.com/JaKooLit/Ubuntu-Hyprland/tree/24.10) -- [Ubuntu 25.04 - (ALPHA STAGE)](https://github.com/JaKooLit/Ubuntu-Hyprland/tree/25.04) +- [Ubuntu 25.04](https://github.com/JaKooLit/Ubuntu-Hyprland/tree/25.04) +- [Ubuntu 25.10](https://github.com/JaKooLit/Ubuntu-Hyprland/tree/25.10) + --- ### 🪧 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 atleast, Hyprland packages is needed 😏😏😏 duh!! - This repo will be pulled by the Distro-Hyprland install scripts above if you opt to download pre-configured dots ### 👀 Screenshots 👀 + - All screenshots are collected here [Screenshots](https://github.com/JaKooLit/screenshots/tree/main/Hyprland-ScreenShots) ### 📦 Whats new? -- To easily track changes, I will be updating the [CHANGELOGS](https://github.com/JaKooLit/Hyprland-Dots/wiki/Changelogs) Screenshots will be included if worth mentioning the changes! + +- To easily track changes, I will be updating the [CHANGELOGS](https://github.com/JaKooLit/Hyprland-Dots/wiki/Changelogs) Screenshots will be included if worth mentioning the changes! > [!NOTE] -> Kindly note that by defeault, Kools Dots are adjusted / configured for 2k (1440p) display without scaling. +> Kindly note that by defeault, Kools Dots are adjusted / configured for 2k (1440p) display without scaling. ### 💥 Copying / Installation / Update instructions 💥 -- [`MORE INFO HERE`](https://github.com/JaKooLit/Hyprland-Dots/wiki/Install_&_Update) -> [!Note] -> The auto copy script "copy.sh" will create backups of intended directories to be copied. However, still a good idea to manually backup just incase script failed to backup! + +- [`MORE INFO HERE`](https://github.com/JaKooLit/Hyprland-Dots/wiki/Install_&_Update) + > [!Note] + > The auto copy script "copy.sh" will create backups of intended directories to be copied. However, still a good idea to manually backup just incase script failed to backup! - clone this repo by using git. Change directory, make executable and run the script > to download from Master branch + ```bash git clone --depth=1 https://github.com/JaKooLit/Hyprland-Dots.git cd Hyprland-Dots ``` > to download from Development branch (development and testing) + ```bash git clone --depth=1 https://github.com/JaKooLit/Hyprland-Dots.git -b development cd Hyprland-Dots ``` - automatic copy/install of pre-configured dots (recommended for updating) + ```bash 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 + > [!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 HEADS UP! -- I am getting ridiculously amount of messages for updating your KooL Hyprland dotfiles. I have made a BIG note on [`WIKI`](https://github.com/JaKooLit/Hyprland-Dots/wiki/Install_&_Update) +## ❗❗❗ DEBIAN AND UBUNTU! +- Debian 13 and ubuntu 25.10 +- You can now build Hyprland 0.51.1 from source using the `install.sh` script +- So the current version of Hyprland-Dots is compatible only in those cases. #### ⚠️⚠️⚠️ ATTENTION - BACKUPS CREATED by SCRIPT + > [!CAUTION] > copy.sh, release.sh and even upgrade.sh creates a backup! > Kindly investigate manually contents on your $HOME/.config > Delete manually all the backups which you dont need #### 🛎️ 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/JaKooLit/Wallpaper-Bank/tree/main/wallpapers) Link +#### ⚠️⚠️⚠️ A MUST! after copying / Installing these dots -#### ⚠️⚠️⚠️ 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 +- 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). -- NVIDIA users / owners, after installation, check [`THIS`](https://github.com/JaKooLit/Hyprland-Dots/wiki/Notes_to_remember#--for-nvidia-gpu-users) +- Nvidia Owners. 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) +* NVIDIA users / owners, after installation, check [`THIS`](https://github.com/JaKooLit/Hyprland-Dots/wiki/Notes_to_remember#--for-nvidia-gpu-users) +- 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/JaKooLit/Hyprland-Dots/wiki/FAQ) and [UNSOLVED ISSUES](https://github.com/JaKooLit/Hyprland-Dots/wiki/Known_Issues) +- check out this page [FAQ](https://github.com/JaKooLit/Hyprland-Dots/wiki/FAQ) and [UNSOLVED ISSUES](https://github.com/JaKooLit/Hyprland-Dots/wiki/Known_Issues) #### 🙋 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` - More question? click here browse through this [WIKI](https://github.com/JaKooLit/Hyprland-Dots/wiki/) - If you want the old configs, it is collected on my "Archive" repo. See [HERE](https://github.com/JaKooLit/Hyprland-Dots-releases-Archive) #### ⌨ Keybinds + - Keybinds [`CLICK`](https://github.com/JaKooLit/Hyprland-Dots/wiki/Keybinds) #### 🙏 Special request -- 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! +- 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! #### ✍️ Contributing -- Want to contribute? Click [`HERE`](https://github.com/JaKooLit/Hyprland-Dots/blob/main/CONTRIBUTING.md) for a guide how to contribute +- Want to contribute? Click [`HERE`](https://github.com/JaKooLit/Hyprland-Dots/blob/main/CONTRIBUTING.md) for a guide how to contribute #### 🤷♂️ TO DO! -- [ ] Tweak dots - 🚧 in constant progress + +- [ ] Tweak dots - 🚧 in constant progress #### 🔮 Discord Server -- kindly join my [Discord](https://discord.com/invite/kool-tech-world) +- kindly join my [Discord](https://discord.com/invite/kool-tech-world) #### 💖 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/@Ja.KooLit) - you can also give support through coffee's or btc 😊 @@ -197,12 +220,12 @@ or [](https://www.buymeacoffee.com/JaKooLit) -Or you can donate cryto on my btc wallet :) +Or you can donate cryto on my btc wallet :) + > 1N3MeV2dsX6gQB42HXU6MF2hAix1mqjo8i  +## 🫰 Thank you for the stars 🩷 - -## 🫰 Thank you for the stars 🩷 [](https://starchart.cc/JaKooLit/Hyprland-Dots) diff --git a/config/hypr/UserConfigs/UserKeybinds.conf b/config/hypr/UserConfigs/UserKeybinds.conf index 2f0e808f..4d35a9c9 100644 --- a/config/hypr/UserConfigs/UserKeybinds.conf +++ b/config/hypr/UserConfigs/UserKeybinds.conf @@ -29,6 +29,7 @@ bind = $mainMod, H, exec, $scriptsDir/KeyHints.sh # help / cheat sheet bind = $mainMod ALT, R, exec, $scriptsDir/Refresh.sh # Refresh waybar, swaync, rofi bind = $mainMod ALT, E, exec, $scriptsDir/RofiEmoji.sh # emoji menu bind = $mainMod, S, exec, $scriptsDir/RofiSearch.sh # Google search using rofi +bind = $mainMod SHIFT, S, exec, rofi -show windows # list/switch apps using rofi bind = $mainMod ALT, O, exec, $scriptsDir/ChangeBlur.sh # Toggle blur settings bind = $mainMod SHIFT, G, exec, $scriptsDir/GameMode.sh # Toggle animations ON/OFF bind = $mainMod ALT, L, exec, $scriptsDir/ChangeLayout.sh # Toggle Master or Dwindle Layout @@ -55,6 +56,9 @@ bind = $mainMod CTRL ALT, B, exec, pkill -SIGUSR1 waybar # Toggle hide/show wayb bind = $mainMod CTRL, B, exec, $scriptsDir/WaybarStyles.sh # Waybar Styles Menu bind = $mainMod ALT, B, exec, $scriptsDir/WaybarLayout.sh # Waybar Layout Menu +# Night light toggle (Hyprsunset) +bind = $mainMod, N, exec, $scriptsDir/Hyprsunset.sh toggle + # FEATURES / EXTRAS (UserScripts) bind = $mainMod SHIFT, M, exec, $UserScripts/RofiBeats.sh # online music using rofi bind = $mainMod, W, exec, $UserScripts/WallpaperSelect.sh # Select wallpaper to apply @@ -74,6 +78,7 @@ bind = $mainMod CTRL, F10, movecurrentworkspacetomonitor, r #move current worksp bind = $mainMod CTRL, F11, movecurrentworkspacetomonitor, u #move current workspace to UP monitor bind = $mainMod CTRL, F12, movecurrentworkspacetomonitor, d #move current workspace to DOWN monitor + # For passthrough keyboard into a VM # bind = $mainMod ALT, P, submap, passthru #submap = passthru diff --git a/config/hypr/UserConfigs/UserSettings.conf b/config/hypr/UserConfigs/UserSettings.conf index 325d24f7..f81ccc6a 100644 --- a/config/hypr/UserConfigs/UserSettings.conf +++ b/config/hypr/UserConfigs/UserSettings.conf @@ -63,6 +63,7 @@ input { } } + gestures { gesture = 3, horizontal, workspace workspace_swipe_distance = 500 diff --git a/config/hypr/UserConfigs/WindowRules.conf b/config/hypr/UserConfigs/WindowRules.conf index a5a6e4a3..d6959dc4 100644 --- a/config/hypr/UserConfigs/WindowRules.conf +++ b/config/hypr/UserConfigs/WindowRules.conf @@ -203,6 +203,14 @@ windowrule = keepaspectratio, title:^(Picture-in-Picture)$ windowrule = noblur, tag:games* windowrule = fullscreen, tag:games* + +#This not gonna take the focus to the window that appears when hovering over some of the parts of the IntelliJ Products +windowrule = noinitialfocus, class:^(jetbrains-*) +windowrule = noinitialfocus, title:^(wind.*)$ + +#This will gonna make the VS Code bluer like other apps +windowrule = opacity 0.8,class:^(code)$ + #windowrule = bordercolor rgb(EE4B55) rgb(880808), fullscreen:1 #windowrule = bordercolor rgb(282737) rgb(1E1D2D), floating:1 #windowrule = opacity 0.8 0.8, pinned:1 diff --git a/config/hypr/scripts/Dropterminal.sh b/config/hypr/scripts/Dropterminal.sh index e7332746..4833545c 100755 --- a/config/hypr/scripts/Dropterminal.sh +++ b/config/hypr/scripts/Dropterminal.sh @@ -377,4 +377,4 @@ else hyprctl dispatch focuswindow "address:$TERMINAL_ADDR" fi fi -fi
\ No newline at end of file +fi diff --git a/config/hypr/scripts/Hyprsunset.sh b/config/hypr/scripts/Hyprsunset.sh new file mode 100755 index 00000000..c7c4b395 --- /dev/null +++ b/config/hypr/scripts/Hyprsunset.sh @@ -0,0 +1,99 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Hyprsunset toggle + Waybar status helper +# Phase 1: manual toggle only (no scheduling) +# Icons: +# - Off: bright sun +# - On: sunset icon if available, otherwise a blue sun +# +# Customize via env vars: +# HYPERSUNSET_TEMP default 4500 (K) +# HYPERSUNSET_ICON_MODE sunset|blue (default: sunset) + +STATE_FILE="$HOME/.cache/.hyprsunset_state" +TARGET_TEMP="${HYPERSUNSET_TEMP:-4500}" +ICON_MODE="${HYPERSUNSET_ICON_MODE:-sunset}" + +ensure_state() { + [[ -f "$STATE_FILE" ]] || echo "off" > "$STATE_FILE" +} + +# Render icons using pango markup to allow colorization +icon_off() { + # universally available sun symbol + printf "☀" +} + +icon_on() { + case "$ICON_MODE" in + sunset) + # sunset emoji (falls back to tofu if no emoji font) + printf "🌇" + ;; + blue) + # no color in text; rely on CSS .on to style if desired + printf "☀" + ;; + *) + printf "☀" + ;; + esac +} + +cmd_toggle() { + ensure_state + state="$(cat "$STATE_FILE" || echo off)" + + # Always stop any running hyprsunset first to avoid CTM manager conflicts + if pgrep -x hyprsunset >/dev/null 2>&1; then + pkill -x hyprsunset || true + # give it a moment to release the CTM manager + sleep 0.2 + fi + +if [[ "$state" == "on" ]]; then + # Turning OFF: set identity and exit + if command -v hyprsunset >/dev/null 2>&1; then + nohup hyprsunset -i >/dev/null 2>&1 & + # if hyprsunset persists, stop it shortly after applying identity + sleep 0.3 && pkill -x hyprsunset || true + fi + echo off > "$STATE_FILE" + notify-send -u low "Hyprsunset: Disabled" || true + else + # Turning ON: start hyprsunset at target temp in background + if command -v hyprsunset >/dev/null 2>&1; then + nohup hyprsunset -t "$TARGET_TEMP" >/dev/null 2>&1 & + fi + echo on > "$STATE_FILE" + notify-send -u low "Hyprsunset: Enabled" "${TARGET_TEMP}K" || true + fi +} + +cmd_status() { + ensure_state + # Prefer live process detection; fall back to state file + if pgrep -x hyprsunset >/dev/null 2>&1; then + onoff="on" + else + onoff="$(cat "$STATE_FILE" || echo off)" + fi + + if [[ "$onoff" == "on" ]]; then + txt="<span size='18pt'>$(icon_on)</span>" + cls="on" + tip="Night light on @ ${TARGET_TEMP}K" + else + txt="<span size='16pt'>$(icon_off)</span>" + cls="off" + tip="Night light off" + fi + printf '{"text":"%s","class":"%s","tooltip":"%s"}\n' "$txt" "$cls" "$tip" +} + +case "${1:-}" in + toggle) cmd_toggle ;; + status) cmd_status ;; + *) echo "usage: $0 [toggle|status]" >&2; exit 2 ;; + esac diff --git a/config/hypr/v2.3.16 b/config/hypr/v2.3.16 deleted file mode 100644 index 31b3414d..00000000 --- a/config/hypr/v2.3.16 +++ /dev/null @@ -1,5 +0,0 @@ -### https://github.com/JaKooLit ### -## https://github.com/JaKooLit/Hyprland-Dots -## This is to have a reference of which version would be - -## note that this will always be higher than the released versions
\ No newline at end of file diff --git a/config/waybar/ModulesCustom b/config/waybar/ModulesCustom index dddc5ccc..146ec275 100644 --- a/config/waybar/ModulesCustom +++ b/config/waybar/ModulesCustom @@ -104,6 +104,19 @@ "tooltip-format": "Left Click: Switch Dark-Light Themes\nMiddle Click: Wallpaper Menu\nRight Click: Waybar Styles Menu", }, +// Night light (Hyprsunset) +"custom/nightlight": { + "return-type": "json", + "exec": "$HOME/.config/hypr/scripts/Hyprsunset.sh status", + "interval": 3, + "format": "{text}", + "min-length": 2, + "on-click": "$HOME/.config/hypr/scripts/Hyprsunset.sh toggle", + "tooltip": true, + "tooltip-format": "Night light toggle", + "escape": false +}, + "custom/lock": { "format": "", "on-click": "$HOME/.config/hypr/scripts/LockScreen.sh", diff --git a/config/waybar/ModulesGroups b/config/waybar/ModulesGroups index 30e47f16..8d4453a2 100644 --- a/config/waybar/ModulesGroups +++ b/config/waybar/ModulesGroups @@ -89,6 +89,7 @@ }, "modules": [ "custom/power", + "custom/nightlight", "custom/lock", "keyboard-state", "custom/keyboard", @@ -131,6 +132,7 @@ }, "modules": [ "custom/power", + "custom/nightlight", "custom/lock", "custom/logout", "custom/reboot" diff --git a/config/waybar/configs/[BOT & Left] SouthWest b/config/waybar/configs/[BOT & Left] SouthWest index a039f040..594b46d3 100644 --- a/config/waybar/configs/[BOT & Left] SouthWest +++ b/config/waybar/configs/[BOT & Left] SouthWest @@ -46,6 +46,7 @@ "power-profiles-daemon", "pulseaudio#microphone", "keyboard-state", + "custom/nightlight", "custom/power", ], }, diff --git a/config/waybar/configs/[BOT & Right] SouthEast b/config/waybar/configs/[BOT & Right] SouthEast index 9a58e952..03cdb06c 100644 --- a/config/waybar/configs/[BOT & Right] SouthEast +++ b/config/waybar/configs/[BOT & Right] SouthEast @@ -46,6 +46,7 @@ "power-profiles-daemon", "pulseaudio#microphone", "keyboard-state", + "custom/nightlight", "custom/power", ], }, diff --git a/config/waybar/configs/[LEFT] WestWing b/config/waybar/configs/[LEFT] WestWing index e3f25d1a..28e5dbec 100644 --- a/config/waybar/configs/[LEFT] WestWing +++ b/config/waybar/configs/[LEFT] WestWing @@ -39,6 +39,7 @@ "backlight#vertical", "pulseaudio#microphone_vertical", "pulseaudio#vertical", + "custom/nightlight", "custom/power_vertical", "custom/menu", ], diff --git a/config/waybar/configs/[LEFT] WestWing v2 b/config/waybar/configs/[LEFT] WestWing v2 index f1ed69c3..906f83d6 100644 --- a/config/waybar/configs/[LEFT] WestWing v2 +++ b/config/waybar/configs/[LEFT] WestWing v2 @@ -40,6 +40,7 @@ "backlight#vertical", "pulseaudio/slider", "pulseaudio#microphone_vertical", + "custom/nightlight", "group/power#vert", ], diff --git a/config/waybar/configs/[RIGHT] EastWing b/config/waybar/configs/[RIGHT] EastWing index b64fe5f8..a5ce6756 100644 --- a/config/waybar/configs/[RIGHT] EastWing +++ b/config/waybar/configs/[RIGHT] EastWing @@ -39,6 +39,7 @@ "backlight#vertical", "pulseaudio#microphone_vertical", "pulseaudio#vertical", + "custom/nightlight", "custom/power_vertical", "custom/menu", ], diff --git a/config/waybar/configs/[RIGHT] EastWing v2 b/config/waybar/configs/[RIGHT] EastWing v2 index f9991bd6..28dd1e43 100644 --- a/config/waybar/configs/[RIGHT] EastWing v2 +++ b/config/waybar/configs/[RIGHT] EastWing v2 @@ -40,6 +40,7 @@ "backlight#vertical", "pulseaudio/slider", "pulseaudio#microphone_vertical", + "custom/nightlight", "group/power#vert", ], diff --git a/config/waybar/configs/[TOP & BOT] SummitSplit b/config/waybar/configs/[TOP & BOT] SummitSplit index 03c8e81b..516e9834 100644 --- a/config/waybar/configs/[TOP & BOT] SummitSplit +++ b/config/waybar/configs/[TOP & BOT] SummitSplit @@ -44,6 +44,7 @@ "network", "custom/updater", "custom/cycle_wall", + "custom/nightlight", "custom/lock", ], }, @@ -88,6 +89,7 @@ "pulseaudio", //"wireplumber", "pulseaudio#microphone", + "custom/nightlight", "custom/power", ], }], diff --git a/config/waybar/configs/[TOP & BOT] SummitSplit v2 b/config/waybar/configs/[TOP & BOT] SummitSplit v2 index 1425f657..4d576aef 100644 --- a/config/waybar/configs/[TOP & BOT] SummitSplit v2 +++ b/config/waybar/configs/[TOP & BOT] SummitSplit v2 @@ -28,13 +28,14 @@ "network", ], "modules-center": ["hyprland/window"], - "modules-right": [ +"modules-right": [ "mpris", "battery", "backlight", "pulseaudio", "group/mobo_drawer", "idle_inhibitor", + "custom/nightlight", "group/power" ], diff --git a/config/waybar/configs/[TOP] 0-Ja-0 b/config/waybar/configs/[TOP] 0-Ja-0 index c4cb0a65..6e7fc9aa 100644 --- a/config/waybar/configs/[TOP] 0-Ja-0 +++ b/config/waybar/configs/[TOP] 0-Ja-0 @@ -48,6 +48,7 @@ "custom/separator#dot-line", "mpris", "custom/separator#blank", + "custom/nightlight", "group/status", ], }
\ No newline at end of file diff --git a/config/waybar/configs/[TOP] Arrow b/config/waybar/configs/[TOP] Arrow index 8001d8fb..7fc55f60 100644 --- a/config/waybar/configs/[TOP] Arrow +++ b/config/waybar/configs/[TOP] Arrow @@ -36,7 +36,8 @@ "battery", "custom/arrow2", "tray", - "custom/arrow1", +"custom/arrow1", + "custom/nightlight", "clock#2" ], } diff --git a/config/waybar/configs/[TOP] Camellia b/config/waybar/configs/[TOP] Camellia index c93e9079..efaf6e20 100644 --- a/config/waybar/configs/[TOP] Camellia +++ b/config/waybar/configs/[TOP] Camellia @@ -44,7 +44,8 @@ "power-profiles-daemon", "battery", "clock#3", - "network"], + "network", + "custom/nightlight"], // Additional modules // "pulseaudio/slider": { diff --git a/config/waybar/configs/[TOP] Chrysanthemum b/config/waybar/configs/[TOP] Chrysanthemum index ebaa0ca4..d12f73e3 100644 --- a/config/waybar/configs/[TOP] Chrysanthemum +++ b/config/waybar/configs/[TOP] Chrysanthemum @@ -36,6 +36,7 @@ "modules-right": [ "pulseaudio#1", "backlight#2", - "battery"], + "battery", + "custom/nightlight"], }
\ No newline at end of file diff --git a/config/waybar/configs/[TOP] Default Laptop b/config/waybar/configs/[TOP] Default Laptop index b9722b89..0b264c6b 100644 --- a/config/waybar/configs/[TOP] Default Laptop +++ b/config/waybar/configs/[TOP] Default Laptop @@ -54,6 +54,7 @@ "custom/separator#line", "group/audio", "custom/separator#dot-line", + "custom/nightlight", "group/status", ], }
\ No newline at end of file diff --git a/config/waybar/configs/[TOP] Everforest b/config/waybar/configs/[TOP] Everforest index a66763ed..7b007f78 100644 --- a/config/waybar/configs/[TOP] Everforest +++ b/config/waybar/configs/[TOP] Everforest @@ -45,6 +45,7 @@ "battery#forest", "custom/separator#blank_2", "group/audio", + "custom/nightlight", ], // Additional / Edited Waybar Modules // diff --git a/config/waybar/configs/[TOP] Gardenia b/config/waybar/configs/[TOP] Gardenia index 77e86bae..073ff46e 100644 --- a/config/waybar/configs/[TOP] Gardenia +++ b/config/waybar/configs/[TOP] Gardenia @@ -37,7 +37,8 @@ "modules-right": [ "pulseaudio#1", "backlight#2", - "battery" + "battery", + "custom/nightlight" ], }
\ No newline at end of file diff --git a/config/waybar/configs/[TOP] Minimal - Long b/config/waybar/configs/[TOP] Minimal - Long index b57cf3a3..a5be4bd7 100644 --- a/config/waybar/configs/[TOP] Minimal - Long +++ b/config/waybar/configs/[TOP] Minimal - Long @@ -42,6 +42,7 @@ "custom/separator#blank_2", "group/audio", "custom/separator#blank_2", + "custom/nightlight", "custom/power", ], diff --git a/config/waybar/configs/[TOP] Minimal - Short b/config/waybar/configs/[TOP] Minimal - Short index 57abd3d3..7b9a1929 100644 --- a/config/waybar/configs/[TOP] Minimal - Short +++ b/config/waybar/configs/[TOP] Minimal - Short @@ -34,5 +34,6 @@ "backlight", "pulseaudio", "battery", + "custom/nightlight", "custom/power"], } diff --git a/config/waybar/configs/[TOP] Peony b/config/waybar/configs/[TOP] Peony index 2fd1dfe3..a1ef02e8 100644 --- a/config/waybar/configs/[TOP] Peony +++ b/config/waybar/configs/[TOP] Peony @@ -44,6 +44,7 @@ "temperature", "custom/separator#blank", "group/mobo_drawer", - "network"], + "network", + "custom/nightlight"], }
\ No newline at end of file diff --git a/config/waybar/configs/[TOP] Sleek b/config/waybar/configs/[TOP] Sleek index fe0f41ba..f591f472 100644 --- a/config/waybar/configs/[TOP] Sleek +++ b/config/waybar/configs/[TOP] Sleek @@ -39,6 +39,7 @@ "pulseaudio", "custom/separator#blank", "group/mobo_drawer", + "custom/nightlight", "custom/power", ], } @@ -5,7 +5,7 @@ clear wallpaper=$HOME/.config/hypr/wallpaper_effects/.wallpaper_current waybar_style="$HOME/.config/waybar/style/[Extra] Neon Circuit.css" waybar_config="$HOME/.config/waybar/configs/[TOP] Default" -waybar_config_laptop="$HOME/.config/waybar/configs/[TOP] Default Laptop" +waybar_config_laptop="$HOME/.config/waybar/configs/[TOP] Default Laptop" # Set some colors for output messages OK="$(tput setaf 2)[OK]$(tput sgr0)" @@ -23,44 +23,51 @@ BLUE="$(tput setaf 4)" SKY_BLUE="$(tput setaf 6)" RESET="$(tput sgr0)" - # Check if running as root. If root, script will exit if [[ $EUID -eq 0 ]]; then - echo "${ERROR} This script should ${WARNING}NOT${RESET} be executed as root!! Exiting......." - printf "\n%.0s" {1..2} - exit 1 + echo "${ERROR} This script should ${WARNING}NOT${RESET} be executed as root!! Exiting......." + printf "\n%.0s" {1..2} + exit 1 fi # Function to print colorful text print_color() { - printf "%b%s%b\n" "$1" "$2" "$RESET" + printf "%b%s%b\n" "$1" "$2" "$RESET" } -# Check /etc/os-release to see if this is an Ubuntu or Debian based distro -if grep -iq '^\(ID_LIKE\|ID\)=.*\(debian\|ubuntu\)' /etc/os-release >/dev/null 2>&1; then - printf "\n%.0s" {1..1} - print_color $WARNING " - █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█ - KOOL DOTS version INCOMPATIBLE - █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█ - - Debian / Ubuntu detected. Refer to Hyprland-Dots README - For instruction on how to update your KooL Hyprland Dots - - exiting .... - " - printf "\n%.0s" {1..3} - exit 1 +# Check /etc/os-release for Ubuntu or Debian and warn about Hyprland version requirement +if grep -iqE '^(ID_LIKE|ID)=.*(ubuntu|debian)' /etc/os-release >/dev/null 2>&1; then + printf "\n%.0s" {1..1} + print_color $WARNING "\nThese Dotfiles are only supported on Hyprland 0.51.1 or greater. Do not install on older revisions.\n" + while true; do + echo -n "${CAT} Do you want to continue anyway? (y/N): " + read _continue + _continue=$(echo "${_continue}" | tr '[:upper:]' '[:lower:]') + case "${_continue}" in + y|yes) + echo "${NOTE} Proceeding on Ubuntu/Debian by user confirmation." + break + ;; + n|no|"") + printf "\n%.0s" {1..1} + echo "${INFO} Aborting per user choice. No changes made." + printf "\n%.0s" {1..1} + exit 1 + ;; + *) + echo "${WARN} Please answer 'y' or 'n'." + ;; + esac + done fi - -printf "\n%.0s" {1..1} +printf "\n%.0s" {1..1} echo -e "\e[35m ╦╔═┌─┐┌─┐╦ ╔╦╗┌─┐┌┬┐┌─┐ ╠╩╗│ ││ │║ ║║│ │ │ └─┐ 2025 ╩ ╩└─┘└─┘╩═╝ ═╩╝└─┘ ┴ └─┘ \e[0m" -printf "\n%.0s" {1..1} +printf "\n%.0s" {1..1} ####### Announcement echo "${WARNING}A T T E N T I O N !${RESET}" @@ -69,7 +76,7 @@ printf "\n%.0s" {1..1} # Create Directory for Copy Logs if [ ! -d Copy-Logs ]; then - mkdir Copy-Logs + mkdir Copy-Logs fi # Set the name of the log file to include the current date and time @@ -86,8 +93,8 @@ if lspci -k | grep -A 2 -E "(VGA|3D)" | grep -iq nvidia; then sed -i '/env = NVD_BACKEND,direct/s/^#//' config/hypr/UserConfigs/ENVariables.conf sed -i '/env = GSK_RENDERER,ngl/s/^#//' config/hypr/UserConfigs/ENVariables.conf - # no hardware cursors if nvidia detected - sed -i 's/^\([[:space:]]*no_hardware_cursors[[:space:]]*=[[:space:]]*\)2/\1 1/' config/hypr/UserConfigs/UserSettings.conf + # no hardware cursors if nvidia detected + sed -i 's/^\([[:space:]]*no_hardware_cursors[[:space:]]*=[[:space:]]*\)2/\1 1/' config/hypr/UserConfigs/UserSettings.conf #sed -i 's/^\([[:space:]]*explicit_sync[[:space:]]*=[[:space:]]*\)2/\1 0/' config/hypr/UserConfigs/UserSettings.conf fi @@ -110,13 +117,13 @@ fi # activating hyprcursor on env by checking if the directory ~/.icons/Bibata-Modern-Ice/hyprcursors exists if [ -d "$HOME/.icons/Bibata-Modern-Ice/hyprcursors" ]; then - HYPRCURSOR_ENV_FILE="config/hypr/UserConfigs/ENVariables.conf" - echo "${INFO} Bibata-Hyprcursor directory detected. Activating Hyprcursor...." 2>&1 | tee -a "$LOG" || true - sed -i 's/^#env = HYPRCURSOR_THEME,Bibata-Modern-Ice/env = HYPRCURSOR_THEME,Bibata-Modern-Ice/' "$HYPRCURSOR_ENV_FILE" - sed -i 's/^#env = HYPRCURSOR_SIZE,24/env = HYPRCURSOR_SIZE,24/' "$HYPRCURSOR_ENV_FILE" + HYPRCURSOR_ENV_FILE="config/hypr/UserConfigs/ENVariables.conf" + echo "${INFO} Bibata-Hyprcursor directory detected. Activating Hyprcursor...." 2>&1 | tee -a "$LOG" || true + sed -i 's/^#env = HYPRCURSOR_THEME,Bibata-Modern-Ice/env = HYPRCURSOR_THEME,Bibata-Modern-Ice/' "$HYPRCURSOR_ENV_FILE" + sed -i 's/^#env = HYPRCURSOR_SIZE,24/env = HYPRCURSOR_SIZE,24/' "$HYPRCURSOR_ENV_FILE" fi -printf "\n%.0s" {1..1} +printf "\n%.0s" {1..1} # Function to detect keyboard layout using localectl or setxkbmap detect_layout() { @@ -160,15 +167,15 @@ ${MAGENTA} NOTE:${RESET} • For example: ${YELLOW}us, kr, gb, ru${RESET} " printf "\n%.0s" {1..1} - + echo -n "${CAT} - Please enter the correct keyboard layout: " read new_layout if [ -n "$new_layout" ]; then - layout="$new_layout" - break + layout="$new_layout" + break else - echo "${CAT} Please enter a keyboard layout." + echo "${CAT} Please enter a keyboard layout." fi done fi @@ -182,15 +189,16 @@ while true; do read keyboard_layout case $keyboard_layout in - [yY]) - awk -v layout="$layout" '/kb_layout/ {$0 = " kb_layout = " layout} 1' config/hypr/UserConfigs/UserSettings.conf > temp.conf - mv temp.conf config/hypr/UserConfigs/UserSettings.conf - - echo "${NOTE} kb_layout ${MAGENTA}$layout${RESET} configured in settings." 2>&1 | tee -a "$LOG" - break ;; - [nN]) - printf "\n%.0s" {1..2} - print_color $WARNING " + [yY]) + awk -v layout="$layout" '/kb_layout/ {$0 = " kb_layout = " layout} 1' config/hypr/UserConfigs/UserSettings.conf >temp.conf + mv temp.conf config/hypr/UserConfigs/UserSettings.conf + + echo "${NOTE} kb_layout ${MAGENTA}$layout${RESET} configured in settings." 2>&1 | tee -a "$LOG" + break + ;; + [nN]) + printf "\n%.0s" {1..2} + print_color $WARNING " █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█ STOP AND READ █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█ @@ -210,54 +218,56 @@ ${MAGENTA} NOTE:${RESET} • You can also set more than 2 keyboard layouts • For example: ${YELLOW}us, kr, gb, ru${RESET} " - printf "\n%.0s" {1..1} - - echo -n "${CAT} - Please enter the correct keyboard layout: " - read new_layout + printf "\n%.0s" {1..1} - awk -v new_layout="$new_layout" '/kb_layout/ {$0 = " kb_layout = " new_layout} 1' config/hypr/UserConfigs/UserSettings.conf > temp.conf - mv temp.conf config/hypr/UserConfigs/UserSettings.conf - echo "${OK} kb_layout $new_layout configured in settings." 2>&1 | tee -a "$LOG" - break ;; - *) - echo "${ERROR} Please enter either 'y' or 'n'." ;; + echo -n "${CAT} - Please enter the correct keyboard layout: " + read new_layout + + awk -v new_layout="$new_layout" '/kb_layout/ {$0 = " kb_layout = " new_layout} 1' config/hypr/UserConfigs/UserSettings.conf >temp.conf + mv temp.conf config/hypr/UserConfigs/UserSettings.conf + echo "${OK} kb_layout $new_layout configured in settings." 2>&1 | tee -a "$LOG" + break + ;; + *) + echo "${ERROR} Please enter either 'y' or 'n'." + ;; esac done # Check if asusctl is installed and add rog-control-center on Startup if command -v asusctl >/dev/null 2>&1; then - sed -i '/^\s*#exec-once = rog-control-center/s/^#//' config/hypr/UserConfigs/Startup_Apps.conf + sed -i '/^\s*#exec-once = rog-control-center/s/^#//' config/hypr/UserConfigs/Startup_Apps.conf fi # Check if blueman-applet is installed and add blueman-applet on Startup if command -v blueman-applet >/dev/null 2>&1; then - sed -i '/^\s*#exec-once = blueman-applet/s/^#//' config/hypr/UserConfigs/Startup_Apps.conf + sed -i '/^\s*#exec-once = blueman-applet/s/^#//' config/hypr/UserConfigs/Startup_Apps.conf fi # Check if ags is installed edit ags behaviour on configs if command -v ags >/dev/null 2>&1; then - sed -i '/^\s*#exec-once = ags/s/^#//' config/hypr/UserConfigs/Startup_Apps.conf - sed -i '/#ags -q && ags &/s/^#//' config/hypr/scripts/RefreshNoWaybar.sh - sed -i '/#ags -q && ags &/s/^#//' config/hypr/scripts/Refresh.sh + sed -i '/^\s*#exec-once = ags/s/^#//' config/hypr/UserConfigs/Startup_Apps.conf + sed -i '/#ags -q && ags &/s/^#//' config/hypr/scripts/RefreshNoWaybar.sh + sed -i '/#ags -q && ags &/s/^#//' config/hypr/scripts/Refresh.sh - # Uncomment the ags overview keybind - sed -i '/^#bind = \$mainMod, A, exec, pkill rofi || true && ags -t '\''overview'\''/s/^#//' config/hypr/UserConfigs/UserKeybinds.conf + # Uncomment the ags overview keybind + sed -i '/^#bind = \$mainMod, A, exec, pkill rofi || true && ags -t '\''overview'\''/s/^#//' config/hypr/UserConfigs/UserKeybinds.conf - # Comment the quickshell line if not already commented - sed -i '/^\s*bind\s*=\s*\$mainMod,\s*A,\s*global,\s*quickshell:overviewToggle/{s/^\s*/#/}' config/hypr/UserConfigs/UserKeybinds.conf + # Comment the quickshell line if not already commented + sed -i '/^\s*bind\s*=\s*\$mainMod,\s*A,\s*global,\s*quickshell:overviewToggle/{s/^\s*/#/}' config/hypr/UserConfigs/UserKeybinds.conf fi # Check if quickshell is installed; edit quickshell behaviour on configs if command -v qs >/dev/null 2>&1; then - sed -i '/^\s*#exec-once = qs/s/^#//' config/hypr/UserConfigs/Startup_Apps.conf - sed -i '/#pkill qs && qs &/s/^#//' config/hypr/scripts/RefreshNoWaybar.sh - sed -i '/#pkill qs && qs &/s/^#//' config/hypr/scripts/Refresh.sh + sed -i '/^\s*#exec-once = qs/s/^#//' config/hypr/UserConfigs/Startup_Apps.conf + sed -i '/#pkill qs && qs &/s/^#//' config/hypr/scripts/RefreshNoWaybar.sh + sed -i '/#pkill qs && qs &/s/^#//' config/hypr/scripts/Refresh.sh - # Uncomment the quickshell keybind line - sed -i "/^#bind = \$mainMod, A, global, quickshell:overviewToggle/s/^#//" config/hypr/UserConfigs/UserKeybinds.conf + # Uncomment the quickshell keybind line + sed -i "/^#bind = \$mainMod, A, global, quickshell:overviewToggle/s/^#//" config/hypr/UserConfigs/UserKeybinds.conf - # Ensure the ags overview keybind is commented - sed -i "/^\s*bind\s*=\s*\\\$mainMod,\s*A,\s*exec,\s*pkill rofi\s*||\s*true\s*&&\s*ags\s*-t\s*'overview'/{s/^\s*/#/}" config/hypr/UserConfigs/UserKeybinds.conf + # Ensure the ags overview keybind is commented + sed -i "/^\s*bind\s*=\s*\\\$mainMod,\s*A,\s*exec,\s*pkill rofi\s*||\s*true\s*&&\s*ags\s*-t\s*'overview'/{s/^\s*/#/}" config/hypr/UserConfigs/UserKeybinds.conf fi printf "\n%.0s" {1..1} @@ -265,34 +275,34 @@ printf "\n%.0s" {1..1} # Checking if neovim or vim is installed and offer user if they want to make as default editor # Function to modify the ENVariables.conf file update_editor() { - local editor=$1 - sed -i "s/#env = EDITOR,.*/env = EDITOR,$editor #default editor/" config/hypr/UserConfigs/01-UserDefaults.conf - echo "${OK} Default editor set to ${MAGENTA}$editor${RESET}." 2>&1 | tee -a "$LOG" + local editor=$1 + sed -i "s/#env = EDITOR,.*/env = EDITOR,$editor #default editor/" config/hypr/UserConfigs/01-UserDefaults.conf + echo "${OK} Default editor set to ${MAGENTA}$editor${RESET}." 2>&1 | tee -a "$LOG" } EDITOR_SET=0 # Check for neovim if installed -if command -v nvim &> /dev/null; then - printf "${INFO} ${MAGENTA}neovim${RESET} is detected as installed\n" - echo -n "${CAT} Do you want to make ${MAGENTA}neovim${RESET} the default editor? (y/N): " - read EDITOR_CHOICE - if [[ "$EDITOR_CHOICE" == "y" || "$EDITOR_CHOICE" == "Y" ]]; then - update_editor "nvim" - EDITOR_SET=1 - fi +if command -v nvim &>/dev/null; then + printf "${INFO} ${MAGENTA}neovim${RESET} is detected as installed\n" + echo -n "${CAT} Do you want to make ${MAGENTA}neovim${RESET} the default editor? (y/N): " + read EDITOR_CHOICE + if [[ "$EDITOR_CHOICE" == "y" || "$EDITOR_CHOICE" == "Y" ]]; then + update_editor "nvim" + EDITOR_SET=1 + fi fi printf "\n" # Check for vim if installed, but only if neovim wasn't chosen -if [[ "$EDITOR_SET" -eq 0 ]] && command -v vim &> /dev/null; then - printf "${INFO} ${MAGENTA}vim${RESET} is detected as installed\n" - echo -n "${CAT} Do you want to make ${MAGENTA}vim${RESET} the default editor? (y/N): " - read EDITOR_CHOICE - if [[ "$EDITOR_CHOICE" == "y" || "$EDITOR_CHOICE" == "Y" ]]; then - update_editor "vim" - EDITOR_SET=1 - fi +if [[ "$EDITOR_SET" -eq 0 ]] && command -v vim &>/dev/null; then + printf "${INFO} ${MAGENTA}vim${RESET} is detected as installed\n" + echo -n "${CAT} Do you want to make ${MAGENTA}vim${RESET} the default editor? (y/N): " + read EDITOR_CHOICE + if [[ "$EDITOR_CHOICE" == "y" || "$EDITOR_CHOICE" == "Y" ]]; then + update_editor "vim" + EDITOR_SET=1 + fi fi printf "\n" @@ -305,22 +315,22 @@ while true; do echo "${MAGENTA}Select monitor resolution to properly configure appearance and fonts:" echo "$YELLOW -- Enter 1. for monitor resolution less than 1440p (< 1440p)" echo "$YELLOW -- Enter 2. for monitor resolution equal to or higher than 1440p (≥ 1440p)" - + echo -n "$CAT Enter the number of your choice (1 or 2): " read res_choice case $res_choice in - 1) - resolution="< 1440p" - break - ;; - 2) - resolution="≥ 1440p" - break - ;; - *) - echo "${ERROR} Invalid choice. Please enter 1 for < 1440p or 2 for ≥ 1440p." - ;; + 1) + resolution="< 1440p" + break + ;; + 2) + resolution="≥ 1440p" + break + ;; + *) + echo "${ERROR} Invalid choice. Please enter 1 for < 1440p or 2 for ≥ 1440p." + ;; esac done @@ -343,8 +353,8 @@ if [ "$resolution" == "< 1440p" ]; then # rofi fonts reduction rofi_config_file="config/rofi/0-shared-fonts.rasi" if [ -f "$rofi_config_file" ]; then - sed -i '/element-text {/,/}/s/[[:space:]]*font: "JetBrainsMono Nerd Font SemiBold 13"/font: "JetBrainsMono Nerd Font SemiBold 11"/' "$rofi_config_file" 2>&1 | tee -a "$LOG" - sed -i '/configuration {/,/}/s/[[:space:]]*font: "JetBrainsMono Nerd Font SemiBold 15"/font: "JetBrainsMono Nerd Font SemiBold 13"/' "$rofi_config_file" 2>&1 | tee -a "$LOG" + sed -i '/element-text {/,/}/s/[[:space:]]*font: "JetBrainsMono Nerd Font SemiBold 13"/font: "JetBrainsMono Nerd Font SemiBold 11"/' "$rofi_config_file" 2>&1 | tee -a "$LOG" + sed -i '/configuration {/,/}/s/[[:space:]]*font: "JetBrainsMono Nerd Font SemiBold 15"/font: "JetBrainsMono Nerd Font SemiBold 13"/' "$rofi_config_file" 2>&1 | tee -a "$LOG" fi fi @@ -352,46 +362,46 @@ printf "\n%.0s" {1..1} # Ask whether to change to 12hr format while true; do - echo -e "${NOTE} ${SKY_BLUE} By default, KooL's Dots are configured in 24H clock format." - echo -n "$CAT Do you want to change to 12H (AM/PM) clock format? (y/n): " - read answer + echo -e "${NOTE} ${SKY_BLUE} By default, KooL's Dots are configured in 24H clock format." + echo -n "$CAT Do you want to change to 12H (AM/PM) clock format? (y/n): " + read answer - # Convert the answer to lowercase for comparison - answer=$(echo "$answer" | tr '[:upper:]' '[:lower:]') + # Convert the answer to lowercase for comparison + answer=$(echo "$answer" | tr '[:upper:]' '[:lower:]') - # Check if the answer is valid - if [[ "$answer" == "y" ]]; then - # Modify waybar clock modules if 12hr is selected - # Clock 1 - sed -i 's#^\(\s*\)//\("format": " {:%I:%M %p}",\) #\1\2 #g' config/waybar/Modules 2>&1 | tee -a "$LOG" - sed -i 's#^\(\s*\)\("format": " {:%H:%M:%S}",\) #\1//\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG" - - # Clock 2 - sed -i 's#^\(\s*\)\("format": " {:%H:%M}",\) #\1//\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG" - - # Clock 3 - sed -i 's#^\(\s*\)//\("format": "{:%I:%M %p - %d/%b}",\) #\1\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG" - sed -i 's#^\(\s*\)\("format": "{:%H:%M - %d/%b}",\) #\1//\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG" - - # Clock 4 - sed -i 's#^\(\s*\)//\("format": "{:%B | %a %d, %Y | %I:%M %p}",\) #\1\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG" - sed -i 's#^\(\s*\)\("format": "{:%B | %a %d, %Y | %H:%M}",\) #\1//\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG" + # Check if the answer is valid + if [[ "$answer" == "y" ]]; then + # Modify waybar clock modules if 12hr is selected + # Clock 1 + sed -i 's#^\(\s*\)//\("format": " {:%I:%M %p}",\) #\1\2 #g' config/waybar/Modules 2>&1 | tee -a "$LOG" + sed -i 's#^\(\s*\)\("format": " {:%H:%M:%S}",\) #\1//\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG" - # Clock 5 - sed -i 's#^\(\s*\)//\("format": "{:%A, %I:%M %P}",\) #\1\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG" - sed -i 's#^\(\s*\)\("format": "{:%a %d | %H:%M}",\) #\1//\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG" - - # for hyprlock - sed -i 's/^\s*text = cmd\[update:1000\] echo "\$(date +"%H")"/# &/' config/hypr/hyprlock.conf 2>&1 | tee -a "$LOG" - sed -i 's/^\(\s*\)# *text = cmd\[update:1000\] echo "\$(date +"%I")" #AM\/PM/\1 text = cmd\[update:1000\] echo "\$(date +"%I")" #AM\/PM/' config/hypr/hyprlock.conf 2>&1 | tee -a "$LOG" + # Clock 2 + sed -i 's#^\(\s*\)\("format": " {:%H:%M}",\) #\1//\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG" - sed -i 's/^\s*text = cmd\[update:1000\] echo "\$(date +"%S")"/# &/' config/hypr/hyprlock.conf 2>&1 | tee -a "$LOG" - sed -i 's/^\(\s*\)# *text = cmd\[update:1000\] echo "\$(date +"%S %p")" #AM\/PM/\1 text = cmd\[update:1000\] echo "\$(date +"%S %p")" #AM\/PM/' config/hypr/hyprlock.conf 2>&1 | tee -a "$LOG" - - echo "${OK} 12H format set on waybar clocks succesfully." 2>&1 | tee -a "$LOG" + # Clock 3 + sed -i 's#^\(\s*\)//\("format": "{:%I:%M %p - %d/%b}",\) #\1\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG" + sed -i 's#^\(\s*\)\("format": "{:%H:%M - %d/%b}",\) #\1//\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG" - # Function to apply 12H format to SDDM themes - apply_sddm_12h_format() { + # Clock 4 + sed -i 's#^\(\s*\)//\("format": "{:%B | %a %d, %Y | %I:%M %p}",\) #\1\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG" + sed -i 's#^\(\s*\)\("format": "{:%B | %a %d, %Y | %H:%M}",\) #\1//\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG" + + # Clock 5 + sed -i 's#^\(\s*\)//\("format": "{:%A, %I:%M %P}",\) #\1\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG" + sed -i 's#^\(\s*\)\("format": "{:%a %d | %H:%M}",\) #\1//\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG" + + # for hyprlock + sed -i 's/^\s*text = cmd\[update:1000\] echo "\$(date +"%H")"/# &/' config/hypr/hyprlock.conf 2>&1 | tee -a "$LOG" + sed -i 's/^\(\s*\)# *text = cmd\[update:1000\] echo "\$(date +"%I")" #AM\/PM/\1 text = cmd\[update:1000\] echo "\$(date +"%I")" #AM\/PM/' config/hypr/hyprlock.conf 2>&1 | tee -a "$LOG" + + sed -i 's/^\s*text = cmd\[update:1000\] echo "\$(date +"%S")"/# &/' config/hypr/hyprlock.conf 2>&1 | tee -a "$LOG" + sed -i 's/^\(\s*\)# *text = cmd\[update:1000\] echo "\$(date +"%S %p")" #AM\/PM/\1 text = cmd\[update:1000\] echo "\$(date +"%S %p")" #AM\/PM/' config/hypr/hyprlock.conf 2>&1 | tee -a "$LOG" + + echo "${OK} 12H format set on waybar clocks succesfully." 2>&1 | tee -a "$LOG" + + # Function to apply 12H format to SDDM themes + apply_sddm_12h_format() { local sddm_directory=$1 # Check if the directory exists @@ -401,36 +411,36 @@ while true; do sudo sed -i 's|^## HourFormat="hh:mm AP"|HourFormat="hh:mm AP"|' "$sddm_directory/theme.conf" 2>&1 | tee -a "$LOG" || true sudo sed -i 's|^HourFormat="HH:mm"|## HourFormat="HH:mm"|' "$sddm_directory/theme.conf" 2>&1 | tee -a "$LOG" || true fi - } + } - # Applying to different SDDM themes - apply_sddm_12h_format "/usr/share/sddm/themes/simple-sddm" - apply_sddm_12h_format "/usr/share/sddm/themes/simple_sddm_2" + # Applying to different SDDM themes + apply_sddm_12h_format "/usr/share/sddm/themes/simple-sddm" + apply_sddm_12h_format "/usr/share/sddm/themes/simple_sddm_2" - # For SDDM (sequoia_2) - sddm_directory_3="/usr/share/sddm/themes/sequoia_2" - if [ -d "$sddm_directory_3" ]; then - echo "${YELLOW}sddm sequoia_2${RESET} theme exists. Editing to 12H format" 2>&1 | tee -a "$LOG" + # For SDDM (sequoia_2) + sddm_directory_3="/usr/share/sddm/themes/sequoia_2" + if [ -d "$sddm_directory_3" ]; then + echo "${YELLOW}sddm sequoia_2${RESET} theme exists. Editing to 12H format" 2>&1 | tee -a "$LOG" - # Comment out the existing clockFormat="HH:mm" line - sudo sed -i 's|^clockFormat="HH:mm"|## clockFormat="HH:mm"|' "$sddm_directory_3/theme.conf" 2>&1 | tee -a "$LOG" || true + # Comment out the existing clockFormat="HH:mm" line + sudo sed -i 's|^clockFormat="HH:mm"|## clockFormat="HH:mm"|' "$sddm_directory_3/theme.conf" 2>&1 | tee -a "$LOG" || true - # Insert the new clockFormat="hh:mm AP" line if it's not already present - if ! grep -q 'clockFormat="hh:mm AP"' "$sddm_directory_3/theme.conf"; then - sudo sed -i '/^clockFormat=/a clockFormat="hh:mm AP"' "$sddm_directory_3/theme.conf" 2>&1 | tee -a "$LOG" || true - fi - - echo "${OK} 12H format set to SDDM successfully." 2>&1 | tee -a "$LOG" + # Insert the new clockFormat="hh:mm AP" line if it's not already present + if ! grep -q 'clockFormat="hh:mm AP"' "$sddm_directory_3/theme.conf"; then + sudo sed -i '/^clockFormat=/a clockFormat="hh:mm AP"' "$sddm_directory_3/theme.conf" 2>&1 | tee -a "$LOG" || true fi - break - - elif [[ "$answer" == "n" ]]; then - echo "${NOTE} You chose not to change to 12H format." 2>&1 | tee -a "$LOG" - break # Exit the loop if the user chooses "n" - else - echo "${ERROR} Invalid choice. Please enter y for yes or n for no." + echo "${OK} 12H format set to SDDM successfully." 2>&1 | tee -a "$LOG" fi + + break + + elif [[ "$answer" == "n" ]]; then + echo "${NOTE} You chose not to change to 12H format." 2>&1 | tee -a "$LOG" + break # Exit the loop if the user chooses "n" + else + echo "${ERROR} Invalid choice. Please enter y for yes or n for no." + fi done printf "\n%.0s" {1..1} @@ -444,16 +454,16 @@ read border_choice # Check user's choice if [[ "$border_choice" =~ ^[Yy]$ ]]; then - # Disable Rainbow Borders - mv config/hypr/UserScripts/RainbowBorders.sh config/hypr/UserScripts/RainbowBorders.bak.sh - - # Comment out the exec-once and animation lines - sed -i '/exec-once = \$UserScripts\/RainbowBorders.sh/s/^/#/' config/hypr/UserConfigs/Startup_Apps.conf - sed -i '/^[[:space:]]*animation = borderangle, 1, 180, liner, loop/s/^/#/' config/hypr/UserConfigs/UserAnimations.conf - - echo "${OK} Rainbow borders are now disabled." 2>&1 | tee -a "$LOG" + # Disable Rainbow Borders + mv config/hypr/UserScripts/RainbowBorders.sh config/hypr/UserScripts/RainbowBorders.bak.sh + + # Comment out the exec-once and animation lines + sed -i '/exec-once = \$UserScripts\/RainbowBorders.sh/s/^/#/' config/hypr/UserConfigs/Startup_Apps.conf + sed -i '/^[[:space:]]*animation = borderangle, 1, 180, liner, loop/s/^/#/' config/hypr/UserConfigs/UserAnimations.conf + + echo "${OK} Rainbow borders are now disabled." 2>&1 | tee -a "$LOG" else - echo "${NOTE} No changes made. Rainbow borders remain enabled." 2>&1 | tee -a "$LOG" + echo "${NOTE} No changes made. Rainbow borders remain enabled." 2>&1 | tee -a "$LOG" fi printf "\n%.0s" {1..1} @@ -478,7 +488,7 @@ DIRS="fastfetch kitty rofi swaync" for DIR2 in $DIRS; do DIRPATH="$HOME/.config/$DIR2" - + if [ -d "$DIRPATH" ]; then while true; do printf "\n${INFO} Found ${YELLOW}$DIR2${RESET} config found in ~/.config/\n" @@ -486,43 +496,43 @@ for DIR2 in $DIRS; do read DIR1_CHOICE case "$DIR1_CHOICE" in - [Yy]* ) - BACKUP_DIR=$(get_backup_dirname) - # Backup the existing directory - mv "$DIRPATH" "$DIRPATH-backup-$BACKUP_DIR" 2>&1 | tee -a "$LOG" - echo -e "${NOTE} - Backed up $DIR2 to $DIRPATH-backup-$BACKUP_DIR." 2>&1 | tee -a "$LOG" + [Yy]*) + BACKUP_DIR=$(get_backup_dirname) + # Backup the existing directory + mv "$DIRPATH" "$DIRPATH-backup-$BACKUP_DIR" 2>&1 | tee -a "$LOG" + echo -e "${NOTE} - Backed up $DIR2 to $DIRPATH-backup-$BACKUP_DIR." 2>&1 | tee -a "$LOG" - # Copy the new config - cp -r "config/$DIR2" "$HOME/.config/$DIR2" 2>&1 | tee -a "$LOG" - echo -e "${OK} - Replaced $DIR2 with new configuration." 2>&1 | tee -a "$LOG" - - # Restoring rofi themes directory unique themes - if [ "$DIR2" = "rofi" ]; then - if [ -d "$DIRPATH-backup-$BACKUP_DIR/themes" ]; then - for file in "$DIRPATH-backup-$BACKUP_DIR/themes"/*; do - [ -e "$file" ] || continue # Skip if no files are found - echo "Copying $file to $HOME/.config/rofi/themes/" >> "$LOG" - cp -n "$file" "$HOME/.config/rofi/themes/" >> "$LOG" 2>&1 - done || true - fi - - # restoring global 0-shared-fonts.rasi - if [ -f "$DIRPATH-backup-$BACKUP_DIR/0-shared-fonts.rasi" ]; then - echo "Restoring $DIRPATH-backup-$BACKUP_DIR/0-shared-fonts.rasi to $HOME/.config/rofi/" >> "$LOG" - cp "$DIRPATH-backup-$BACKUP_DIR/0-shared-fonts.rasi" "$HOME/.config/rofi/0-shared-fonts.rasi" >> "$LOG" 2>&1 - fi + # Copy the new config + cp -r "config/$DIR2" "$HOME/.config/$DIR2" 2>&1 | tee -a "$LOG" + echo -e "${OK} - Replaced $DIR2 with new configuration." 2>&1 | tee -a "$LOG" + # Restoring rofi themes directory unique themes + if [ "$DIR2" = "rofi" ]; then + if [ -d "$DIRPATH-backup-$BACKUP_DIR/themes" ]; then + for file in "$DIRPATH-backup-$BACKUP_DIR/themes"/*; do + [ -e "$file" ] || continue # Skip if no files are found + echo "Copying $file to $HOME/.config/rofi/themes/" >>"$LOG" + cp -n "$file" "$HOME/.config/rofi/themes/" >>"$LOG" 2>&1 + done || true fi - break - ;; - [Nn]* ) - echo -e "${NOTE} - Skipping ${YELLOW}$DIR2${RESET}" 2>&1 | tee -a "$LOG" - break - ;; - * ) - echo -e "${WARN} - Invalid choice. Please enter Y or N." - ;; + # restoring global 0-shared-fonts.rasi + if [ -f "$DIRPATH-backup-$BACKUP_DIR/0-shared-fonts.rasi" ]; then + echo "Restoring $DIRPATH-backup-$BACKUP_DIR/0-shared-fonts.rasi to $HOME/.config/rofi/" >>"$LOG" + cp "$DIRPATH-backup-$BACKUP_DIR/0-shared-fonts.rasi" "$HOME/.config/rofi/0-shared-fonts.rasi" >>"$LOG" 2>&1 + fi + + fi + + break + ;; + [Nn]*) + echo -e "${NOTE} - Skipping ${YELLOW}$DIR2${RESET}" 2>&1 | tee -a "$LOG" + break + ;; + *) + echo -e "${WARN} - Invalid choice. Please enter Y or N." + ;; esac done else @@ -538,103 +548,103 @@ printf "\n%.0s" {1..1} DIRW="waybar" DIRPATHw="$HOME/.config/$DIRW" if [ -d "$DIRPATHw" ]; then - while true; do - echo -n "${CAT} Do you want to replace ${YELLOW}$DIRW${RESET} config? (y/n): " - read DIR1_CHOICE + while true; do + echo -n "${CAT} Do you want to replace ${YELLOW}$DIRW${RESET} config? (y/n): " + read DIR1_CHOICE - case "$DIR1_CHOICE" in - [Yy]* ) - BACKUP_DIR=$(get_backup_dirname) - cp -r "$DIRPATHw" "$DIRPATHw-backup-$BACKUP_DIR" 2>&1 | tee -a "$LOG" - echo -e "${NOTE} - Backed up $DIRW to $DIRPATHw-backup-$BACKUP_DIR." 2>&1 | tee -a "$LOG" - - # Remove the old $DIRPATHw and copy the new one - rm -rf "$DIRPATHw" && cp -r "config/$DIRW" "$DIRPATHw" 2>&1 | tee -a "$LOG" - - # Step 1: Handle waybar symlinks - for file in "config" "style.css"; do - symlink="$DIRPATHw-backup-$BACKUP_DIR/$file" - target_file="$DIRPATHw/$file" - - if [ -L "$symlink" ]; then - symlink_target=$(readlink "$symlink") - if [ -f "$symlink_target" ]; then - rm -f "$target_file" && cp -f "$symlink_target" "$target_file" - echo -e "${NOTE} - Copied $file as a regular file." - else - echo -e "${WARN} - Symlink target for $file does not exist." - fi - fi - done - - # Step 2: Copy non-existing directories and files under waybar/configs - for dir in "$DIRPATHw-backup-$BACKUP_DIR/configs"/*; do - [ -e "$dir" ] || continue # Skip if no files are found - if [ -d "$dir" ]; then - target_dir="$HOME/.config/waybar/configs/$(basename "$dir")" - if [ ! -d "$target_dir" ]; then - echo "Copying directory $dir to $HOME/.config/waybar/configs/" >> "$LOG" - cp -r "$dir" "$HOME/.config/waybar/configs/" - else - echo "Directory $target_dir already exists. Skipping." >> "$LOG" - fi - fi - done + case "$DIR1_CHOICE" in + [Yy]*) + BACKUP_DIR=$(get_backup_dirname) + cp -r "$DIRPATHw" "$DIRPATHw-backup-$BACKUP_DIR" 2>&1 | tee -a "$LOG" + echo -e "${NOTE} - Backed up $DIRW to $DIRPATHw-backup-$BACKUP_DIR." 2>&1 | tee -a "$LOG" - for file in "$DIRPATHw-backup-$BACKUP_DIR/configs"/*; do - [ -e "$file" ] || continue - target_file="$HOME/.config/waybar/configs/$(basename "$file")" - if [ ! -e "$target_file" ]; then - echo "Copying $file to $HOME/.config/waybar/configs/" >> "$LOG" - cp "$file" "$HOME/.config/waybar/configs/" - else - echo "File $target_file already exists. Skipping." >> "$LOG" - fi - done || true - - # Step 3: Copy unique files in waybar/style - for file in "$DIRPATHw-backup-$BACKUP_DIR/style"/*; do - [ -e "$file" ] || continue - - if [ -d "$file" ]; then - target_dir="$HOME/.config/waybar/style/$(basename "$file")" - if [ ! -d "$target_dir" ]; then - echo "Copying directory $file to $HOME/.config/waybar/style/" >> "$LOG" - cp -r "$file" "$HOME/.config/waybar/style/" - else - echo "Directory $target_dir already exists. Skipping." >> "$LOG" - fi - else - target_file="$HOME/.config/waybar/style/$(basename "$file")" - if [ ! -e "$target_file" ]; then - echo "Copying file $file to $HOME/.config/waybar/style/" >> "$LOG" - cp "$file" "$HOME/.config/waybar/style/" - else - echo "File $target_file already exists. Skipping." >> "$LOG" - fi - fi - done || true + # Remove the old $DIRPATHw and copy the new one + rm -rf "$DIRPATHw" && cp -r "config/$DIRW" "$DIRPATHw" 2>&1 | tee -a "$LOG" - # Step 4: restore Modules_Extras - BACKUP_FILEw="$DIRPATHw-backup-$BACKUP_DIR/UserModules" - if [ -f "$BACKUP_FILEw" ]; then - cp -f "$BACKUP_FILEw" "$DIRPATHw/UserModules" - fi + # Step 1: Handle waybar symlinks + for file in "config" "style.css"; do + symlink="$DIRPATHw-backup-$BACKUP_DIR/$file" + target_file="$DIRPATHw/$file" - break - ;; - [Nn]* ) - echo -e "${NOTE} - Skipping ${YELLOW}$DIRW${RESET} config replacement." 2>&1 | tee -a "$LOG" - break - ;; - * ) - echo -e "${WARN} - Invalid choice. Please enter Y or N." - ;; - esac - done + if [ -L "$symlink" ]; then + symlink_target=$(readlink "$symlink") + if [ -f "$symlink_target" ]; then + rm -f "$target_file" && cp -f "$symlink_target" "$target_file" + echo -e "${NOTE} - Copied $file as a regular file." + else + echo -e "${WARN} - Symlink target for $file does not exist." + fi + fi + done + + # Step 2: Copy non-existing directories and files under waybar/configs + for dir in "$DIRPATHw-backup-$BACKUP_DIR/configs"/*; do + [ -e "$dir" ] || continue # Skip if no files are found + if [ -d "$dir" ]; then + target_dir="$HOME/.config/waybar/configs/$(basename "$dir")" + if [ ! -d "$target_dir" ]; then + echo "Copying directory $dir to $HOME/.config/waybar/configs/" >>"$LOG" + cp -r "$dir" "$HOME/.config/waybar/configs/" + else + echo "Directory $target_dir already exists. Skipping." >>"$LOG" + fi + fi + done + + for file in "$DIRPATHw-backup-$BACKUP_DIR/configs"/*; do + [ -e "$file" ] || continue + target_file="$HOME/.config/waybar/configs/$(basename "$file")" + if [ ! -e "$target_file" ]; then + echo "Copying $file to $HOME/.config/waybar/configs/" >>"$LOG" + cp "$file" "$HOME/.config/waybar/configs/" + else + echo "File $target_file already exists. Skipping." >>"$LOG" + fi + done || true + + # Step 3: Copy unique files in waybar/style + for file in "$DIRPATHw-backup-$BACKUP_DIR/style"/*; do + [ -e "$file" ] || continue + + if [ -d "$file" ]; then + target_dir="$HOME/.config/waybar/style/$(basename "$file")" + if [ ! -d "$target_dir" ]; then + echo "Copying directory $file to $HOME/.config/waybar/style/" >>"$LOG" + cp -r "$file" "$HOME/.config/waybar/style/" + else + echo "Directory $target_dir already exists. Skipping." >>"$LOG" + fi + else + target_file="$HOME/.config/waybar/style/$(basename "$file")" + if [ ! -e "$target_file" ]; then + echo "Copying file $file to $HOME/.config/waybar/style/" >>"$LOG" + cp "$file" "$HOME/.config/waybar/style/" + else + echo "File $target_file already exists. Skipping." >>"$LOG" + fi + fi + done || true + + # Step 4: restore Modules_Extras + BACKUP_FILEw="$DIRPATHw-backup-$BACKUP_DIR/UserModules" + if [ -f "$BACKUP_FILEw" ]; then + cp -f "$BACKUP_FILEw" "$DIRPATHw/UserModules" + fi + + break + ;; + [Nn]*) + echo -e "${NOTE} - Skipping ${YELLOW}$DIRW${RESET} config replacement." 2>&1 | tee -a "$LOG" + break + ;; + *) + echo -e "${WARN} - Invalid choice. Please enter Y or N." + ;; + esac + done else - cp -r "config/$DIRW" "$DIRPATHw" 2>&1 | tee -a "$LOG" - echo -e "${OK} - Copy completed for ${YELLOW}$DIRW${RESET}" 2>&1 | tee -a "$LOG" + cp -r "config/$DIRW" "$DIRPATHw" 2>&1 | tee -a "$LOG" + echo -e "${OK} - Copy completed for ${YELLOW}$DIRW${RESET}" 2>&1 | tee -a "$LOG" fi printf "\n%.0s" {1..1} @@ -651,12 +661,12 @@ DIR="btop cava hypr Kvantum qt5ct qt6ct swappy wallust wlogout" for DIR_NAME in $DIR; do DIRPATH="$HOME/.config/$DIR_NAME" - + # Backup the existing directory if it exists if [ -d "$DIRPATH" ]; then echo -e "\n${NOTE} - Config for ${YELLOW}$DIR_NAME${RESET} found, attempting to back up." BACKUP_DIR=$(get_backup_dirname) - + # Backup the existing directory mv "$DIRPATH" "$DIRPATH-backup-$BACKUP_DIR" 2>&1 | tee -a "$LOG" if [ $? -eq 0 ]; then @@ -666,7 +676,7 @@ for DIR_NAME in $DIR; do exit 1 fi fi - + # Copy the new config if [ -d "config/$DIR_NAME" ]; then cp -r "config/$DIR_NAME/" "$HOME/.config/$DIR_NAME" 2>&1 | tee -a "$LOG" @@ -698,21 +708,21 @@ if command -v ags >/dev/null 2>&1; then else read -p "${CAT} Do you want to overwrite your existing ${YELLOW}ags${RESET} config? [y/N] " answer_ags case "$answer_ags" in - [Yy]* ) - BACKUP_DIR=$(get_backup_dirname) - mv "$DIRPATH_AGS" "$DIRPATH_AGS-backup-$BACKUP_DIR" 2>&1 | tee -a "$LOG" - echo -e "${NOTE} - Backed up ags config to $DIRPATH_AGS-backup-$BACKUP_DIR" - - if cp -r "config/ags/" "$DIRPATH_AGS" 2>&1 | tee -a "$LOG"; then - echo "${OK} - ${YELLOW}ags configs${RESET} overwritten successfully." - else - echo "${ERROR} - Failed to copy ${YELLOW}ags${RESET} config." - exit 1 - fi - ;; - * ) - echo "${NOTE} - Skipping overwrite of ags config." - ;; + [Yy]*) + BACKUP_DIR=$(get_backup_dirname) + mv "$DIRPATH_AGS" "$DIRPATH_AGS-backup-$BACKUP_DIR" 2>&1 | tee -a "$LOG" + echo -e "${NOTE} - Backed up ags config to $DIRPATH_AGS-backup-$BACKUP_DIR" + + if cp -r "config/ags/" "$DIRPATH_AGS" 2>&1 | tee -a "$LOG"; then + echo "${OK} - ${YELLOW}ags configs${RESET} overwritten successfully." + else + echo "${ERROR} - Failed to copy ${YELLOW}ags${RESET} config." + exit 1 + fi + ;; + *) + echo "${NOTE} - Skipping overwrite of ags config." + ;; esac fi fi @@ -734,28 +744,27 @@ if command -v qs >/dev/null 2>&1; then else read -p "${CAT} Do you want to overwrite your existing ${YELLOW}quickshell${RESET} config? [y/N] " answer_qs case "$answer_qs" in - [Yy]* ) - BACKUP_DIR=$(get_backup_dirname) - mv "$DIRPATH_QS" "$DIRPATH_QS-backup-$BACKUP_DIR" 2>&1 | tee -a "$LOG" - echo -e "${NOTE} - Backed up quickshell to $DIRPATH_QS-backup-$BACKUP_DIR" - - cp -r "config/quickshell/" "$DIRPATH_QS" 2>&1 | tee -a "$LOG" - if [ $? -eq 0 ]; then - echo "${OK} - ${YELLOW}quickshell${RESET} overwritten successfully." - else - echo "${ERROR} - Failed to copy ${YELLOW}quickshell${RESET} config." - exit 1 - fi - ;; - * ) - echo "${NOTE} - Skipping overwrite of quickshell config." - ;; + [Yy]*) + BACKUP_DIR=$(get_backup_dirname) + mv "$DIRPATH_QS" "$DIRPATH_QS-backup-$BACKUP_DIR" 2>&1 | tee -a "$LOG" + echo -e "${NOTE} - Backed up quickshell to $DIRPATH_QS-backup-$BACKUP_DIR" + + cp -r "config/quickshell/" "$DIRPATH_QS" 2>&1 | tee -a "$LOG" + if [ $? -eq 0 ]; then + echo "${OK} - ${YELLOW}quickshell${RESET} overwritten successfully." + else + echo "${ERROR} - Failed to copy ${YELLOW}quickshell${RESET} config." + exit 1 + fi + ;; + *) + echo "${NOTE} - Skipping overwrite of quickshell config." + ;; esac fi fi printf "\n%.0s" {1..1} - # Restore automatically Animations and Monitor-Profiles # including monitors.conf and workspaces.conf HYPR_DIR="$HOME/.config/hypr" @@ -764,14 +773,14 @@ BACKUP_HYPR_PATH="$HYPR_DIR-backup-$BACKUP_DIR" if [ -d "$BACKUP_HYPR_PATH" ]; then echo -e "\n${NOTE} Restoring ${SKY_BLUE}Animations & Monitor Profiles${RESET} directories into ${YELLOW}$HYPR_DIR${RESET}..." - + DIR_B=("Monitor_Profiles" "animations" "wallpaper_effects") - # Restore directories automatically + # Restore directories automatically for DIR_RESTORE in "${DIR_B[@]}"; do BACKUP_SUBDIR="$BACKUP_HYPR_PATH/$DIR_RESTORE" - + if [ -d "$BACKUP_SUBDIR" ]; then - cp -r "$BACKUP_SUBDIR" "$HYPR_DIR/" + cp -r "$BACKUP_SUBDIR" "$HYPR_DIR/" echo "${OK} - Restored directory: ${MAGENTA}$DIR_RESTORE${RESET}" 2>&1 | tee -a "$LOG" fi done @@ -782,7 +791,7 @@ if [ -d "$BACKUP_HYPR_PATH" ]; then BACKUP_FILE="$BACKUP_HYPR_PATH/$FILE_RESTORE" if [ -f "$BACKUP_FILE" ]; then - cp "$BACKUP_FILE" "$HYPR_DIR/$FILE_RESTORE" + cp "$BACKUP_FILE" "$HYPR_DIR/$FILE_RESTORE" echo "${OK} - Restored file: ${MAGENTA}$FILE_RESTORE${RESET}" 2>&1 | tee -a "$LOG" fi done @@ -815,8 +824,8 @@ if [ -z "$BACKUP_DIR" ]; then fi if [ -d "$BACKUP_DIR_PATH" ]; then - echo -e "${NOTE} Restoring previous ${MAGENTA}User-Configs${RESET}... " - print_color $WARNING " + echo -e "${NOTE} Restoring previous ${MAGENTA}User-Configs${RESET}... " + print_color $WARNING " █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█ NOTES for RESTORING PREVIOUS CONFIGS █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█ @@ -824,8 +833,7 @@ if [ -d "$BACKUP_DIR_PATH" ]; then If you decide to restore your old configs, make sure to handle the updates or changes manually !!! " - echo -e "${MAGENTA}Kindly Visit and check KooL's Hyprland-Dots GitHub page for the history of commits.${RESET}" - + echo -e "${MAGENTA}Kindly Visit and check KooL's Hyprland-Dots GitHub page for the history of commits.${RESET}" for FILE_NAME in "${FILES_TO_RESTORE[@]}"; do BACKUP_FILE="$BACKUP_DIR_PATH/$FILE_NAME" @@ -870,7 +878,7 @@ if [ -d "$BACKUP_DIR_PATH_S" ]; then printf "\n${INFO} Found ${YELLOW}$SCRIPT_NAME${RESET} in hypr backup...\n" echo -n "${CAT} Do you want to restore ${YELLOW}$SCRIPT_NAME${RESET} from backup? (y/N): " read script_restore - + if [[ "$script_restore" == [Yy]* ]]; then if cp "$BACKUP_SCRIPT" "$DIRSHPATH/UserScripts/$SCRIPT_NAME"; then echo "${OK} - $SCRIPT_NAME restored!" 2>&1 | tee -a "$LOG" @@ -902,7 +910,7 @@ if [ -d "$BACKUP_DIR_PATH_F" ]; then for FILE_RESTORE in "${FILES_2_RESTORE[@]}"; do BACKUP_FILE="$BACKUP_DIR_PATH_F/$FILE_RESTORE" - + if [ -f "$BACKUP_FILE" ]; then echo -e "\n${INFO} Found ${YELLOW}$FILE_RESTORE${RESET} in hypr backup..." echo -n "${CAT} Do you want to restore ${YELLOW}$FILE_RESTORE${RESET} from backup? (y/N): " @@ -933,7 +941,7 @@ if [ ! -d "$rofi_DIR" ]; then fi if [ -d "$HOME/.config/rofi/themes" ]; then if [ -z "$(ls -A $HOME/.config/rofi/themes)" ]; then - echo '/* Dummy Rofi theme */' > "$HOME/.config/rofi/themes/dummy.rasi" + echo '/* Dummy Rofi theme */' >"$HOME/.config/rofi/themes/dummy.rasi" fi ln -snf "$HOME/.config/rofi/themes/"* "$HOME/.local/share/rofi/themes/" # Delete the dummy file if it was created @@ -951,7 +959,7 @@ if cp -r wallpapers $HOME/Pictures/; then else echo "${ERROR} Failed to copy some ${YELLOW}wallpapers${RESET}" | tee -a "$LOG" fi - + # Set some files as executable chmod +x "$HOME/.config/hypr/scripts/"* 2>&1 | tee -a "$LOG" chmod +x "$HOME/.config/hypr/UserScripts/"* 2>&1 | tee -a "$LOG" @@ -960,26 +968,25 @@ chmod +x "$HOME/.config/hypr/initial-boot.sh" 2>&1 | tee -a "$LOG" # Waybar config to symlink & retain based on machine type if hostnamectl | grep -q 'Chassis: desktop'; then - config_file="$waybar_config" - config_remove=" Laptop" + config_file="$waybar_config" + config_remove=" Laptop" else - config_file="$waybar_config_laptop" - config_remove="" + config_file="$waybar_config_laptop" + config_remove="" fi # Check if ~/.config/waybar/config does not exist or is a symlink if [ ! -e "$HOME/.config/waybar/config" ] || [ -L "$HOME/.config/waybar/config" ]; then - ln -sf "$config_file" "$HOME/.config/waybar/config" 2>&1 | tee -a "$LOG" + ln -sf "$config_file" "$HOME/.config/waybar/config" 2>&1 | tee -a "$LOG" fi - # Remove inappropriate waybar configs rm -rf "$HOME/.config/waybar/configs/[TOP] Default$config_remove" \ - "$HOME/.config/waybar/configs/[BOT] Default$config_remove" \ - "$HOME/.config/waybar/configs/[TOP] Default$config_remove (old v1)" \ - "$HOME/.config/waybar/configs/[TOP] Default$config_remove (old v2)" \ - "$HOME/.config/waybar/configs/[TOP] Default$config_remove (old v3)" \ - "$HOME/.config/waybar/configs/[TOP] Default$config_remove (old v4)" 2>&1 | tee -a "$LOG" || true + "$HOME/.config/waybar/configs/[BOT] Default$config_remove" \ + "$HOME/.config/waybar/configs/[TOP] Default$config_remove (old v1)" \ + "$HOME/.config/waybar/configs/[TOP] Default$config_remove (old v2)" \ + "$HOME/.config/waybar/configs/[TOP] Default$config_remove (old v3)" \ + "$HOME/.config/waybar/configs/[TOP] Default$config_remove (old v4)" 2>&1 | tee -a "$LOG" || true printf "\n%.0s" {1..1} @@ -989,24 +996,24 @@ if [ -d "$sddm_simple_sddm_2" ]; then while true; do echo -n "${CAT} SDDM simple_sddm_2 theme detected! Apply current wallpaper as SDDM background? (y/n): " read SDDM_WALL - + # Remove any leading/trailing whitespace or newlines from input SDDM_WALL=$(echo "$SDDM_WALL" | tr -d '\n' | tr -d ' ') case $SDDM_WALL in - [Yy]) - # Copy the wallpaper, ignore errors if the file exists or fails - sudo cp -r "config/hypr/wallpaper_effects/.wallpaper_current" "/usr/share/sddm/themes/simple_sddm_2/Backgrounds/default" || true - echo "${NOTE} Current wallpaper applied as default SDDM background" 2>&1 | tee -a "$LOG" - break - ;; - [Nn]) - echo "${NOTE} You chose not to apply the current wallpaper to SDDM." 2>&1 | tee -a "$LOG" - break - ;; - *) - echo "Please enter 'y' or 'n' to proceed." - ;; + [Yy]) + # Copy the wallpaper, ignore errors if the file exists or fails + sudo cp -r "config/hypr/wallpaper_effects/.wallpaper_current" "/usr/share/sddm/themes/simple_sddm_2/Backgrounds/default" || true + echo "${NOTE} Current wallpaper applied as default SDDM background" 2>&1 | tee -a "$LOG" + break + ;; + [Nn]) + echo "${NOTE} You chose not to apply the current wallpaper to SDDM." 2>&1 | tee -a "$LOG" + break + ;; + *) + echo "Please enter 'y' or 'n' to proceed." + ;; esac done fi @@ -1018,37 +1025,37 @@ echo "${MAGENTA}By default only a few wallpapers are copied${RESET}..." while true; do echo -n "${CAT} Would you like to download additional wallpapers? ${WARN} This is 1GB in size (y/n): " read WALL - + case $WALL in - [Yy]) - echo "${NOTE} Downloading additional wallpapers..." - if git clone "https://github.com/JaKooLit/Wallpaper-Bank.git"; then - echo "${OK} Wallpapers downloaded successfully." 2>&1 | tee -a "$LOG" + [Yy]) + echo "${NOTE} Downloading additional wallpapers..." + if git clone "https://github.com/JaKooLit/Wallpaper-Bank.git"; then + echo "${OK} Wallpapers downloaded successfully." 2>&1 | tee -a "$LOG" - # Check if wallpapers directory exists and create it if not - if [ ! -d "$HOME/Pictures/wallpapers" ]; then - mkdir -p "$HOME/Pictures/wallpapers" - echo "${OK} Created wallpapers directory." 2>&1 | tee -a "$LOG" - fi + # Check if wallpapers directory exists and create it if not + if [ ! -d "$HOME/Pictures/wallpapers" ]; then + mkdir -p "$HOME/Pictures/wallpapers" + echo "${OK} Created wallpapers directory." 2>&1 | tee -a "$LOG" + fi - if cp -R Wallpaper-Bank/wallpapers/* "$HOME/Pictures/wallpapers/" >> "$LOG" 2>&1; then - echo "${OK} Wallpapers copied successfully." 2>&1 | tee -a "$LOG" - rm -rf Wallpaper-Bank 2>&1 # Remove cloned repository after copying wallpapers - break - else - echo "${ERROR} Copying wallpapers failed" 2>&1 | tee -a "$LOG" - fi + if cp -R Wallpaper-Bank/wallpapers/* "$HOME/Pictures/wallpapers/" >>"$LOG" 2>&1; then + echo "${OK} Wallpapers copied successfully." 2>&1 | tee -a "$LOG" + rm -rf Wallpaper-Bank 2>&1 # Remove cloned repository after copying wallpapers + break else - echo "${ERROR} Downloading additional wallpapers failed" 2>&1 | tee -a "$LOG" + echo "${ERROR} Copying wallpapers failed" 2>&1 | tee -a "$LOG" fi - ;; + else + echo "${ERROR} Downloading additional wallpapers failed" 2>&1 | tee -a "$LOG" + fi + ;; [Nn]) - echo "${NOTE} You chose not to download additional wallpapers." 2>&1 | tee -a "$LOG" - break - ;; + echo "${NOTE} You chose not to download additional wallpapers." 2>&1 | tee -a "$LOG" + break + ;; *) - echo "Please enter 'y' or 'n' to proceed." - ;; + echo "Please enter 'y' or 'n' to proceed." + ;; esac done @@ -1068,10 +1075,10 @@ cleanup_backups() { BACKUP_DIRS+=("$BACKUP") fi done - + # If more than one backup found if [ ${#BACKUP_DIRS[@]} -gt 1 ]; then - printf "\n%.0s" {1..2} + printf "\n%.0s" {1..2} echo -e "${INFO} Found ${MAGENTA}multiple backups${RESET} for: ${YELLOW}${DIR##*/}${RESET}" echo "${YELLOW}Backups: ${RESET}" @@ -1109,7 +1116,7 @@ cleanup_backups # Check if ~/.config/waybar/style.css does not exist or is a symlink if [ ! -e "$HOME/.config/waybar/style.css" ] || [ -L "$HOME/.config/waybar/style.css" ]; then - ln -sf "$waybar_style" "$HOME/.config/waybar/style.css" 2>&1 | tee -a "$LOG" + ln -sf "$waybar_style" "$HOME/.config/waybar/style.css" 2>&1 | tee -a "$LOG" fi printf "\n%.0s" {1..1} @@ -1123,4 +1130,5 @@ printf "\n%.0s" {1..1} printf "${INFO} However, it is ${MAGENTA}HIGHLY SUGGESTED${RESET} to logout and re-login or better reboot to avoid any issues" printf "\n%.0s" {1..1} printf "${SKY_BLUE}Thank you${RESET} for using ${MAGENTA}KooL's Hyprland Configuration${RESET}... ${YELLOW}ENJOY!!!${RESET}" -printf "\n%.0s" {1..3}
\ No newline at end of file +printf "\n%.0s" {1..3} + @@ -18,21 +18,30 @@ BLUE="$(tput setaf 4)" SKY_BLUE="$(tput setaf 6)" RESET="$(tput sgr0)" -# Check /etc/os-release to see if this is an Ubuntu or Debian based distro -if grep -iq '^\(ID_LIKE\|ID\)=.*\(debian\|ubuntu\)' /etc/os-release >/dev/null 2>&1; then - printf "\n%.0s" {1..1} - print_color $WARNING " - █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█ - KOOL DOTS version INCOMPATIBLE - █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█ - - Debian / Ubuntu detected. Refer to Hyprland-Dots README - For instruction on how to update your KooL Hyprland Dots - - exiting .... - " - printf "\n%.0s" {1..3} - exit 1 +# Check /etc/os-release for Ubuntu or Debian and warn about Hyprland version requirement +if grep -iqE '^(ID_LIKE|ID)=.*(ubuntu|debian)' /etc/os-release >/dev/null 2>&1; then + printf "\n%.0s" {1..1} + echo "${WARNING} These Dotfiles are only supported on Hyprland 0.51.1 or greater. Do not install on older revisions.${RESET}" + while true; do + echo -n "${CAT} Do you want to continue anyway? (y/N): ${RESET}" + read _continue + _continue=$(echo "${_continue}" | tr '[:upper:]' '[:lower:]') + case "${_continue}" in + y|yes) + echo "${NOTE} Proceeding on Ubuntu/Debian by user confirmation." + break + ;; + n|no|"") + printf "\n%.0s" {1..1} + echo "${INFO} Aborting per user choice. No changes made." + printf "\n%.0s" {1..1} + exit 1 + ;; + *) + echo "${WARN} Please answer 'y' or 'n'." + ;; + esac + done fi @@ -27,6 +27,31 @@ echo -e "\e[35m \e[0m" printf "\n%.0s" {1..1} +# On Ubuntu/Debian, warn about required Hyprland version and prompt to continue +if grep -iqE '^(ID_LIKE|ID)=.*(ubuntu|debian)' /etc/os-release >/dev/null 2>&1; then + echo "${WARNING} These Dotfiles are only supported on Hyprland 0.51.1 or greater. Do not install on older revisions.${RESET}" + while true; do + echo -n "${CAT} Do you want to continue anyway? (y/N): ${RESET}" + read _continue + _continue=$(echo "${_continue}" | tr '[:upper:]' '[:lower:]') + case "${_continue}" in + y|yes) + echo "${NOTE} Proceeding on Ubuntu/Debian by user confirmation." + break + ;; + n|no|"") + printf "\n%.0s" {1..1} + echo "${INFO} Aborting per user choice. No changes made." + printf "\n%.0s" {1..1} + exit 1 + ;; + *) + echo "${WARN} Please answer 'y' or 'n'." + ;; + esac + done +fi + echo "${WARNING}A T T E N T I O N !${RESET}" echo "${SKY_BLUE}This script is meant to manually upgrade your KooL Hyprland Dots${RESET}" echo "${YELLOW}NOTE that you should edit this script and assign an Directory or Files exclusion${RESET}" |
