Compare commits

...

79 Commits

Author SHA1 Message Date
Donald Williams
7613ab90e7
Merge pull request #229 from JaKooLit/development
Development to main,  Updated HL to 0.52.2
2025-12-11 12:15:51 -05:00
Donald Williams
5a51d35ec0
Merge branch 'main' into development 2025-12-11 12:15:18 -05:00
Don Williams
cb1250ce8d Fixed package name for libdisplay-info2 failed to install
On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   CHANGELOGS.md
	modified:   install-scripts/00-dependencies.sh
2025-12-10 16:55:30 -05:00
Don Williams
9281ac4295 Updated CHANGELOG 2025-12-10 13:19:58 -05:00
Don Williams
24fb2b0dc5 Fixed pkg name qt-style-kavantum-themes not qt5
On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   install-scripts/01-hypr-pkgs.sh
2025-12-10 13:17:36 -05:00
Don Williams
b98e468d56 Updated version is the individual files
On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   install-scripts/aquamarine.sh
	modified:   install-scripts/hyprgraphics.sh
	modified:   install-scripts/hyprland-protocols.sh
	modified:   install-scripts/hyprland.sh
	modified:   install-scripts/hyprlang.sh
	modified:   install-scripts/hyprutils.sh
2025-12-10 13:08:48 -05:00
Don Williams
cb46365d8c Updated dev to match sdeglers changes
On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   hypr-tags.env
	modified:   install-scripts/00-dependencies.sh
	modified:   install-scripts/aquamarine.sh
	renamed:    install-scripts/hyprland-qtutils.sh -> install-scripts/hyprland-guiutils.sh
	new file:   install-scripts/hyprtoolkit.sh
	modified:   install.sh
	modified:   update-hyprland.sh
2025-12-10 12:47:00 -05:00
Don Williams
42cbae3c1c Pushing sdegler's changes to dev
On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   install-scripts/aquamarine.sh
	new file:   install-scripts/xkbcommon.sh
2025-12-10 12:35:43 -05:00
Don Williams
0ec2169efd Updated CHANGELOG 2025-12-10 12:24:49 -05:00
Don Williams
7707ec2c4e Updated CHANGELOG 2025-12-10 12:22:41 -05:00
Donald Williams
525ec5eb5a
Merge pull request #223 from JaKooLit/debian-ags-fix
Ported AGS fix from ubuntu to debian
2025-11-04 15:50:03 -05:00
Don Williams
df9f093dbb Ported AGS fix from ubuntu to debian
On branch debian-ags-fix
 Changes to be committed:
	modified:   install-scripts/ags.sh
2025-11-04 15:40:51 -05:00
Donald Williams
d20782004b
Merge pull request #222 from JaKooLit/ddubs-swww-upd
Upd swww_tag to v0.11.2 made tag chk use variable fixes numerous issues, like vertical monitors
2025-10-31 19:33:30 -04:00
Don Williams
de7dea585c Upd swww_tag to v0.11.2 made tag chk use variable
It was hard coded to 0.9.3 before. Now it checks again the swww_tag

 On branch ddubs-swww-upd
 Changes to be committed:
	modified:   install-scripts/swww.sh
2025-10-31 19:05:14 -04:00
Don Williams
b83b3e80ba Fixed script not pulling current Hyprland dotfiles
On branch main
 Your branch is up to date with 'origin/main'.

 Changes to be committed:
	modified:   install-scripts/dotfiles-branch.sh
2025-10-25 06:13:32 -04:00
Donald Williams
8048ec1908
Merge pull request #217 from brockar/brockar-readme
fix: improve formatting and clarity in README.md
2025-10-10 22:08:00 -04:00
brockar
84aa9ea163
fix: update debian versions on readme 2025-10-10 22:48:57 -03:00
brockar
503f31bf68
fix: improve formatting and clarity in README.md 2025-10-10 21:01:37 -03:00
Donald Williams
859ccae389
Merge pull request #216 from JaKooLit/hl-051
Update Hyprland to 0.51.1  Using tags newer versions can be  built
2025-10-10 18:13:16 -04:00
Don Williams
5928c27dca Updated README 2025-10-10 13:30:27 -04:00
Don Williams
a1a4bb4622 Updated CHANGELOG and README
Committer: Don Williams <dwilliams@explorer.homelab.net>

 On branch hl-051
 Your branch is up to date with 'origin/hl-051'

 Changes to be committed:
	modified:   CHANGELOGS.md
	modified:   README.md
2025-10-10 13:22:29 -04:00
Don Williams
307a0c641f Fixed syntax error
On branch hl-051
 Your branch is up to date with 'origin/hl-051'.

 Changes to be committed:
	modified:   install.sh
2025-10-09 21:46:02 -04:00
Don Williams
d298480443 feat: Hyprland 0.51.x upgrade tooling, central tags, docs update
Introduce focused Hyprland stack upgrade tooling and improve install
ordering for 0.51.x, with centralized version management and detailed
documentation for upgrading from 0.49/0.50.x to 0.51.1.

New scripts and modules
- update-hyprland.sh: Manage the Hyprland stack with:
  - --install / --dry-run build modes
  - --only and --skip for selective components
  - --with-deps to (re)install build deps
  - --set {KEY=TAG} and --restore tag backup support
  - --fetch-latest to pull latest GitHub release tags
  - --via-helper to delegate summary-only dry-runs
- dry-run-build.sh: Compile-only helper with summary output
- install-scripts/wayland-protocols-src.sh: Build wayland-protocols from
  source (>= 1.45) to satisfy Hyprland 0.51.x requirements

Core features
- Centralized tag management via hypr-tags.env; tags exported to all
  modules. Environment overrides remain first priority.
- Automatic dependency ordering for Hyprland 0.51.x:
  wayland-protocols-src → hyprland-protocols → hyprutils → hyprlang →
  aquamarine → hyprland
- Optional auto-fetch of latest tags on install runs that include
  hyprland (can be disabled via --no-fetch)
- Selective updates for targeted components and skip lists
- Dry-run mode to validate builds without installing

Installer integration
- install.sh reads hypr-tags.env and optionally refreshes tags.
- Ensures wayland-protocols-src is built before Hyprland.
- Maintains robust sequencing for the Hyprland stack.

Docs
- Debian-Hyprland-Install-Upgrade.md and .es.md:
  - Add explicit section: Upgrade 0.49/0.50.x → 0.51.1
  - Recommend: `./update-hyprland.sh --install --only hyprland`
  - Provide optional `--with-deps` and `--dry-run` flows
  - Add quick link anchor under Upgrade Workflows
- Clarify that full install via install.sh is not required for this
  upgrade unless optional modules need refresh or recovering from a
  partial/failed setup

Usage highlights
- Pin and upgrade to 0.51.1:
  ./update-hyprland.sh --set HYPRLAND=v0.51.1
  ./update-hyprland.sh --install --only hyprland
- Optional:
  ./update-hyprland.sh --with-deps --install --only hyprland
  ./update-hyprland.sh --dry-run --only hyprland

Notes
- Target OS remains Debian Trixie/SID; run as sudo-capable user (not
  root); ensure deb-src entries are enabled.
2025-10-09 16:51:11 -04:00
Don Williams
5a156b1b91 Adjusting compiler to use clang
On branch hl-051
 Your branch is up to date with 'origin/hl-051'.

 Changes to be committed:
	modified:   install-scripts/hyprland.sh
2025-10-09 10:54:15 -04:00
Don Williams
6f97a5c359 Still trying to fix hl build
On branch hl-051
 Your branch is up to date with 'origin/hl-051'.

 Changes to be committed:
	modified:   hypr-tags.env
	modified:   install-scripts/hyprland.sh
2025-10-08 20:40:44 -04:00
Don Williams
704d4b3c28 Fixing rc/sc errors building hyprland
On branch hl-051
 Your branch is up to date with 'origin/hl-051'.

 Changes to be committed:
	modified:   install-scripts/hyprlang.sh
	modified:   install-scripts/hyprutils.sh
2025-10-08 20:07:01 -04:00
Don Williams
64754089d4 Enabling subprojects to get hyprland to compile
On branch hl-051
 Your branch is up to date with 'origin/hl-051'.

 Changes to be committed:
	modified:   install-scripts/hyprland.sh
2025-10-08 19:51:07 -04:00
Don Williams
f776563d3e Setting tags to properly install hyprlang/utils
On branch hl-051
 Your branch is up to date with 'origin/hl-051'.

 Changes to be committed:
	modified:   hypr-tags.env
	modified:   install.sh
2025-10-08 19:33:25 -04:00
Don Williams
95708df841 Setting install to 0.51.1
On branch hl-051
 Your branch is up to date with 'origin/hl-051'.

 Changes to be committed:
	modified:   install.sh
	modified:   refresh-hypr-tags.sh
	modified:   update-hyprland.sh
2025-10-08 18:47:22 -04:00
Don Williams
98c7c31635 Fixing HL install script
On branch hl-051
 Your branch is up to date with 'origin/hl-051'.

 Changes to be committed:
	modified:   install-scripts/hyprland.sh
2025-10-08 15:47:40 -04:00
Don Williams
becb1af622 Fixing scripts to fetch last core and build order
On branch hl-051
 Your branch is up to date with 'origin/hl-051'.

 Changes to be committed:
	modified:   install.sh
	new file:   refresh-hypr-tags.sh
	modified:   update-hyprland.sh
2025-10-08 15:19:02 -04:00
Don Williams
82367a41ae Fixing install order
On branch hl-051
 Your branch is up to date with 'origin/hl-051'.

 Changes to be committed:
	modified:   install-scripts/aquamarine.sh
	modified:   install-scripts/hyprland.sh
	modified:   update-hyprland.sh
2025-10-08 15:08:37 -04:00
Don Williams
ce70cf5c63 [Docs] Created how install/upgrade Hyprland
On branch hl-051
 Your branch is up to date with 'origin/hl-051'.

 Changes to be committed:
	new file:   Debian-Hyprland-Install-Upgrade.es.md
	new file:   Debian-Hyprland-Install-Upgrade.md
2025-10-08 12:22:29 -04:00
Don Williams
b61d659a48 Fix "mv:" errors hyprutils,hyprlang build b4 HL
On branch hl-051
 Your branch is up to date with 'origin/hl-051'.

 Changes to be committed:
	modified:   auto-install.sh
	modified:   dry-run-build.sh
	modified:   install-scripts/aquamarine.sh
	modified:   install-scripts/hyprgraphics.sh
	modified:   install-scripts/hyprland-protocols.sh
	modified:   install-scripts/hyprland-qt-support.sh
	modified:   install-scripts/hyprland-qtutils.sh
	modified:   install-scripts/hyprland.sh
	modified:   install-scripts/hyprlang.sh
	modified:   install-scripts/hyprutils.sh
	modified:   install-scripts/hyprwayland-scanner.sh
	modified:   install.sh
    modified:   preset.sh
	modified:   update-hyprland.sh
2025-10-08 02:10:34 -04:00
Don Williams
47b260d877 wrong branch for wlr-protocols
On branch hl-051
 Your branch is up to date with 'origin/hl-051'.

 Changes to be committed:
	modified:   hypr-tags.env
	modified:   install-scripts/wayland-protocols-src.sh
	modified:   update-hyprland.sh
2025-10-08 01:45:18 -04:00
Don Williams
0d1ca1a7c8 Fixing wl protocol build error
On branch hl-051
 Your branch is up to date with 'origin/hl-051'.

 Changes to be committed:
	modified:   dry-run-build.sh
	modified:   hypr-tags.env
	new file:   install-scripts/wayland-protocols-src.sh
    modified:   update-hyprland.sh
2025-10-08 01:40:59 -04:00
Don Williams
5a34836119 upd AQ to 0.9.3 built first
On branch hl-051
 Your branch is up to date with 'origin/hl-051'.

 Changes to be committed:
	modified:   dry-run-build.sh
	modified:   hypr-tags.env
	modified:   update-hyprland.sh
2025-10-08 01:37:33 -04:00
Don Williams
0593df837e Added upgrade script, tag env variables
On branch hl-051
 Your branch is up to date with 'origin/hl-051'.

 Changes to be committed:
	new file:   hypr-tags.env
	modified:   install-scripts/aquamarine.sh
	modified:   install-scripts/hyprgraphics.sh
	modified:   install-scripts/hyprland-protocols.sh
	modified:   install-scripts/hyprland-qt-support.sh
	modified:   install-scripts/hyprland-qtutils.sh
	modified:   install-scripts/hyprland.sh
	modified:   install-scripts/hyprlang.sh
	modified:   install-scripts/hyprutils.sh
	modified:   install-scripts/hyprwayland-scanner.sh
	new file:   update-hyprland.sh
2025-10-08 01:24:01 -04:00
Don Williams
bc8b456e3b Modified script for dry-run and helper script
On branch hl-051
 Changes to be committed:
	new file:   dry-run-build.sh
	modified:   install-scripts/aquamarine.sh
	modified:   install-scripts/hyprgraphics.sh
	modified:   install-scripts/hyprland-protocols.sh
	modified:   install-scripts/hyprland-qt-support.sh
	modified:   install-scripts/hyprland-qtutils.sh
    modified:   install-scripts/hyprland.sh
	modified:   install-scripts/hyprlang.sh
	modified:   install-scripts/hyprutils.sh
	modified:   install-scripts/hyprwayland-scanner.sh
2025-10-08 01:08:10 -04:00
Ja.KooLit
e21452b70d
Merge pull request #214 from qianqiangliu/main
updated the version of hyprland to v0.50.1
2025-08-26 09:46:26 +09:00
Qianqiang Liu
5d47307fb8 updated the version of hyprland to v0.50.1
Signed-off-by: Qianqiang Liu <qianqiang.liu@163.com>
2025-08-25 17:06:47 +08:00
Qianqiang Liu
66d7563034 updated the version of packages
Signed-off-by: Qianqiang Liu <qianqiang.liu@163.com>
2025-08-25 16:59:21 +08:00
JaKooLit
e55dad3ad5 updated install.sh 2025-07-29 23:20:59 +09:00
JaKooLit
020750d38b updated 2025-07-26 08:54:07 +09:00
Ja.KooLit
80562b269b
Merge pull request #208 from JaKooLit/development
Merge pull request #207 from JaKooLit/main
2025-07-26 08:42:19 +09:00
Ja.KooLit
af4db05a74
Merge pull request #207 from JaKooLit/main
Main to development
2025-07-26 08:41:49 +09:00
Ja.KooLit
4d9ae2d849
Merge branch 'development' into main 2025-07-26 08:41:43 +09:00
Ja.KooLit
f8fc8edb12
Merge pull request #206 from JaKooLit/Manual-Build
Manual build to Main
2025-07-26 08:38:08 +09:00
JaKooLit
d0eb93ef01 updated Debian-Hyprland Manual, making ready for 2025-07-26 08:37:24 +09:00
JaKooLit
18b519194a updated sddm.sh 2025-07-25 17:21:17 +09:00
JaKooLit
d8e8cf053a minor sddm theme update 2025-07-25 17:13:29 +09:00
JaKooLit
4d7bd53ffb updated sddm_theme.sh 2025-07-25 01:24:30 +09:00
JaKooLit
3a045e774b updated install.sh 2025-07-22 15:42:00 +09:00
JaKooLit
7a0260da91 Preparation for the new SDDM theme simple sddm updated version 2025-07-22 13:07:26 +09:00
JaKooLit
b7eb23b768 updated some dependencies 2025-07-20 17:37:59 +09:00
JaKooLit
e4737a709e updated, clean up codes / scripts 2025-07-20 16:49:14 +09:00
JaKooLit
2a364e0730 updated install.sh 2025-07-20 01:42:19 +09:00
JaKooLit
3a3ee81726 updated xdph 2025-07-20 01:39:04 +09:00
JaKooLit
e149238243 updated dependencies 2025-07-20 01:30:32 +09:00
JaKooLit
1c2301ef9a added dependencies 2025-07-20 01:15:33 +09:00
JaKooLit
805821e85a some updates on dependencies 2025-07-20 01:03:34 +09:00
Ja.KooLit
102aefb774
Update install.sh 2025-07-20 00:28:47 +09:00
JaKooLit
6029b017b7 removal of hyprland.desktop from assets 2025-07-19 20:38:01 +09:00
JaKooLit
e789518612 fixed for hyprutils 2025-07-19 20:25:44 +09:00
JaKooLit
6d7cbb5e92 updated to download from specific dots branch 2025-07-19 17:27:59 +09:00
JaKooLit
110e2a1453 added removal cleanup for the hyprland packages installed from Debian Official. Updated rofi-wayland to latest package. updated hyprlock.sh 2025-07-19 16:51:22 +09:00
JaKooLit
1603c8be35 updated dependencies and hyprlock 2025-07-19 11:27:22 +09:00
JaKooLit
849677a93b another update 2025-07-19 11:21:18 +09:00
JaKooLit
ed40d04fc0 updated 2025-07-19 11:08:55 +09:00
JaKooLit
e1c65a06db clean up hyprland dependencies 2025-07-19 11:01:39 +09:00
JaKooLit
7a31cd755c another attempt 2025-07-19 10:57:13 +09:00
JaKooLit
aad716cbb3 forgot to add hyprwayland scanner in the install.sh 2025-07-19 01:35:53 +09:00
JaKooLit
7a5c0cb54e added hyprwayland scanner 2025-07-19 01:33:57 +09:00
JaKooLit
9e2ea0c998 added hyprcursor and hyprutils 2025-07-19 01:29:48 +09:00
JaKooLit
8d4a214fac initial pushed. Just copied from my old script 2025-07-19 01:17:36 +09:00
JaKooLit
d6ff910df5 very limited support 2025-06-22 00:57:59 +09:00
Ja.KooLit
949a18a7d5
Merge pull request #199 from JaKooLit/development
Updated for new SDDM theme
2025-06-09 08:37:06 +09:00
JaKooLit
153721005b updated for new SDDM theme 2025-06-09 08:31:10 +09:00
Ja.KooLit
0e795cfdc5
Merge pull request #198 from JaKooLit/main
main to development
2025-06-09 08:07:49 +09:00
42 changed files with 3562 additions and 412 deletions

View File

@ -1,204 +1,348 @@
## CHANGELOGS ## CHANGELOGS
## 10 December 2025
- Updated:
- Hyprland Build to v0.52.2
- Thanks entirely to @sdegler
- Fixed:
- `qt5-style-kvantum-themes` failed to install
- Wrong package name it's `qt-style-kvantume-themes`
- `libdisplay-info2` failed to install
- New package name: `libdisplay-info3`
## 10 October 2025
### Hyprland 0.51.x install support
- Hyprland builds 0.51.x from source
- Added documentation for upgrading from 0.49/0.50.x to 0.51.1.
### New scripts and modules
- update-hyprland.sh: Manage the Hyprland stack with:
- --install / --dry-run build modes
- --only and --skip for selective components
- --with-deps to (re)install build deps
- --set {KEY=TAG} and --restore tag backup support
- --fetch-latest to pull latest GitHub release tags
- --via-helper to delegate summary-only dry-runs
- dry-run-build.sh: Compile-only helper with summary output
- install-scripts/wayland-protocols-src.sh: Build wayland-protocols from
source (>= 1.45) to satisfy Hyprland 0.51.x requirements
### Core features
- Centralized tag management via hypr-tags.env; tags exported to all
modules. Environment overrides remain first priority.
- Automatic dependency ordering for Hyprland 0.51.x:
wayland-protocols-src → hyprland-protocols → hyprutils → hyprlang →
aquamarine → hyprland
- Optional auto-fetch of latest tags on install runs that include
hyprland (can be disabled via --no-fetch)
- Selective updates for targeted components and skip lists
- Dry-run mode to validate builds without installing
### Installer integration
- install.sh reads hypr-tags.env and optionally refreshes tags.
- Ensures wayland-protocols-src is built before Hyprland.
- Maintains proper sequencing for the Hyprland dependencies.
### Docs
- Debian-Hyprland-Install-Upgrade.md and .es.md:
- Add explicit section: Upgrade 0.49/0.50.x → 0.51.1
- Recommend: `./update-hyprland.sh --install --only hyprland`
- Provide optional `--with-deps` and `--dry-run` flows
- Full install via install.sh is not required for this
upgrade unless optional modules need refresh
### Usage highlights
- Pin and upgrade to 0.51.1:
./update-hyprland.sh --set HYPRLAND=v0.51.1
./update-hyprland.sh --install --only hyprland
- Optional:
./update-hyprland.sh --with-deps --install --only hyprland
./update-hyprland.sh --dry-run --only hyprland
### Notes
- Target OS remains Debian Trixie/Testing/SID
- Run as sudo-capable user (not root)
- Ensure deb-src entries are enabled.
## 22 July 2025
- Updated sddm theme and script to work with the updated simple_sddm_2 theme
- Manual building process
## 21 June 2025
- Added a warning message that support is now very limited
## 08 June 2025
- updated SDDM theme.
## 20 March 2025 ## 20 March 2025
- added findutils as dependencies - added findutils as dependencies
## 11 March 2025 ## 11 March 2025
- Added uninstall script - Added uninstall script
- forked AGS v1 into JakooLit repo. This is just incase Aylur decide to take down v1 - forked AGS v1 into JakooLit repo. This is just incase Aylur decide to take down v1
## 10 March 2025 ## 10 March 2025
- Dropped pyprland in favor of hyprland built in tool for a drop down like terminal and Desktop magnifier - Dropped pyprland in favor of hyprland built in tool for a drop down like terminal and Desktop magnifier
## 06 March 2025 ## 06 March 2025
- Switched to whiptail version for Y & N questions - Switched to whiptail version for Y & N questions
- switched eza to lsd - switched eza to lsd
## 23 Feb 2025 ## 23 Feb 2025
- added Victor Mono Font for proper hyprlock font rendering for Dots v2.3.12 - added Victor Mono Font for proper hyprlock font rendering for Dots v2.3.12
- added Fantasque Sans Mono Nerd for Kitty - added Fantasque Sans Mono Nerd for Kitty
## 22 Feb 2025 ## 22 Feb 2025
- replaced eog with loupe - replaced eog with loupe
- changed url for installing oh-my-zsh to get wider coverage. Some countries are blocking github raw url's - changed url for installing oh-my-zsh to get wider coverage. Some countries are blocking github raw url's
## 18 Feb 2025 ## 18 Feb 2025
- Change default zsh theme to adnosterzak - Change default zsh theme to adnosterzak
- pokemon coloscript integrated with fastfetch when opted with pokemon to add some bling - pokemon coloscript integrated with fastfetch when opted with pokemon to add some bling
- additional external oh-my-zsh theme - additional external oh-my-zsh theme
## 06 Feb 2025 ## 06 Feb 2025
- added semi-unattended function. - added semi-unattended function.
- move all the initial questions at the beginning - move all the initial questions at the beginning
## 04 Feb 2025 ## 04 Feb 2025
- Re-coded for better visibility - Re-coded for better visibility
- Offered a new SDDM theme. - Offered a new SDDM theme.
- script will automatically detect if you have nvidia but script still offer if you want to set up for user - script will automatically detect if you have nvidia but script still offer if you want to set up for user
## 30 Jan 2025 ## 30 Jan 2025
- AGS (aylur's GTK shell) v1 for desktop overview is now optional - AGS (aylur's GTK shell) v1 for desktop overview is now optional
## 12 Jan 2025 ## 12 Jan 2025
- switch to final version of aylurs-gtk-shell-v1 - switch to final version of aylurs-gtk-shell-v1
## 01 Jan 2025 ## 01 Jan 2025
- Switched to download dots from KooL's Hyprland dots specific branch - Switched to download dots from KooL's Hyprland dots specific branch
## 26 Dec 2024 ## 26 Dec 2024
- Removal of Bibata Ice cursor on assets since its integrated in the GTK Themes and Icons extract from a separate repo - Removal of Bibata Ice cursor on assets since its integrated in the GTK Themes and Icons extract from a separate repo
## 10 Dec 2024 ## 10 Dec 2024
- updated swww.sh to download from version v0.9.5 - updated swww.sh to download from version v0.9.5
## 24 Nov 2024 ## 24 Nov 2024
- switched to download rofi-wayland from releases instead from upstream - switched to download rofi-wayland from releases instead from upstream
## 20 Sep 2024 ## 20 Sep 2024
- User will be ask if they want to set Thunar as default file manager if they decided to install it - User will be ask if they want to set Thunar as default file manager if they decided to install it
## 19 Sep 2024 ## 19 Sep 2024
- updated xdph installation since it is now in Debian Repo - updated xdph installation since it is now in Debian Repo
- Added fastfetch on tty. However, will be disabled if user decided to install pokemon colorscripts - Added fastfetch on tty. However, will be disabled if user decided to install pokemon colorscripts
## 14 Sep 2024 ## 14 Sep 2024
- Added Essential Packages final check in lieu of errors from Install log files in Install-Logs directory - Added Essential Packages final check in lieu of errors from Install log files in Install-Logs directory
- nwg-look is now in Debian Repo - nwg-look is now in Debian Repo
## 10 Sep 2024 ## 10 Sep 2024
- added background check of known login managers if they are active if user chose to install sddm - added background check of known login managers if they are active if user chose to install sddm
## 08 Sep 2024 ## 08 Sep 2024
- Added final error checks on install-logs - Added final error checks on install-logs
## 07 Sep 2024 ## 07 Sep 2024
- Fix installation issue on hyprlock and xdph - Fix installation issue on hyprlock and xdph
- disabled imagemagick compilation from source - disabled imagemagick compilation from source
- dotfiles adjusted so it will be compatible for imagemagick v6 - dotfiles adjusted so it will be compatible for imagemagick v6
## 04 Sep 2024 ## 04 Sep 2024
- added a function to check if it is Ubuntu or Based on Ubuntu and script will exit - added a function to check if it is Ubuntu or Based on Ubuntu and script will exit
## 28 Aug 2024 ## 28 Aug 2024
- Added final check if hyprland is installed and will give an error to user - Added final check if hyprland is installed and will give an error to user
## 24 Aug 2024 ## 24 Aug 2024
- Created a newer and compatible Hyprland-Dots repo - Created a newer and compatible Hyprland-Dots repo
- -
## 23 Aug 2024 ## 23 Aug 2024
- Moved Ubuntu-Hyprland on a separate Github Repo - Moved Ubuntu-Hyprland on a separate Github Repo
## 22 Aug 2024 ## 22 Aug 2024
- refactor Debian-Hyprland script. As Hyprland is now in official repo - refactor Debian-Hyprland script. As Hyprland is now in official repo
## 07 Jul 2024 ## 07 Jul 2024
- added eza (ls replacement for tty). Note only on .zshrc - added eza (ls replacement for tty). Note only on .zshrc
## 06 July 2024 ## 06 July 2024
- Version bumps for Debian (Hyprland v0.41.2) - Version bumps for Debian (Hyprland v0.41.2)
## 11 June 2024 ## 11 June 2024
- adjusted script to install only Hyprland-Dots v2.2.14 - adjusted script to install only Hyprland-Dots v2.2.14
## 10 June 2024 ## 10 June 2024
- changed behaviour of rofi-wayland.sh. To redownload a new rofi-wayland from repo instead of pulling changes. (It proves giving issue) - changed behaviour of rofi-wayland.sh. To redownload a new rofi-wayland from repo instead of pulling changes. (It proves giving issue)
## 04 June 2024 ## 04 June 2024
- switched over to source install for imagemagick - switched over to source install for imagemagick
- removal of fzf for Debian and Ubuntu (headache) - removal of fzf for Debian and Ubuntu (headache)
## 26 May 2024 ## 26 May 2024
- Added fzf for zsh (CTRL R to invoke FZF history) - Added fzf for zsh (CTRL R to invoke FZF history)
## 23 May 2024 ## 23 May 2024
- added qalculate-gtk to work with rofi-calc. Default keybinds (SUPER ALT C) - added qalculate-gtk to work with rofi-calc. Default keybinds (SUPER ALT C)
- added power-profiles-daemon for ROG laptops. Note, I cant add to all since it conflicts with TLP, CPU-Auto-frequency etc. - added power-profiles-daemon for ROG laptops. Note, I cant add to all since it conflicts with TLP, CPU-Auto-frequency etc.
- Note: Fastfetch configs will be added from Hyprland-Dots v2.2.12. However, you need to install from Fastfetch github page - Note: Fastfetch configs will be added from Hyprland-Dots v2.2.12. However, you need to install from Fastfetch github page
## 19 May 2024 ## 19 May 2024
- Disabled the auto-login in .zprofile as it causes auto-login to Hyprland if any wayland was chosen. Can enabled if only using hyprland - Disabled the auto-login in .zprofile as it causes auto-login to Hyprland if any wayland was chosen. Can enabled if only using hyprland
## 15 May 2025 ## 15 May 2025
- Backed down hyprland version to install as v0.40.0 is failing to install - Backed down hyprland version to install as v0.40.0 is failing to install
- removed from waybar-git to install. Instead to install from official repo - removed from waybar-git to install. Instead to install from official repo
- cliphist install script is removed as it is now on Debian repo - cliphist install script is removed as it is now on Debian repo
- dependencies cleaned up and added - dependencies cleaned up and added
## 10 May 2024 ## 10 May 2024
- added wallust-git and remove python-pywal for migration to wallust on Hyprland-Dots v2.2.11 - added wallust-git and remove python-pywal for migration to wallust on Hyprland-Dots v2.2.11
## 07 May 2024 ## 07 May 2024
- added ags.sh for upcoming ags overview for next Hyprland-Dots release. Will be installed form source - added ags.sh for upcoming ags overview for next Hyprland-Dots release. Will be installed form source
- added manual installation of waybar since Debian is very slow in updating their packages - added manual installation of waybar since Debian is very slow in updating their packages
## 03 May 2024 ## 03 May 2024
- Bump swww to v0.9.5 - Bump swww to v0.9.5
- added python3-pyquery for new weather-waybar python based on Hyprland-Dots - added python3-pyquery for new weather-waybar python based on Hyprland-Dots
## 02 May 2024 ## 02 May 2024
- Added pyprland (hyprland plugin) - warning, I cant make it to properly run. Drop Down terminal not working, zoom is hit and miss - Added pyprland (hyprland plugin) - warning, I cant make it to properly run. Drop Down terminal not working, zoom is hit and miss
## 30 Apr 2024 ## 30 Apr 2024
- Updated hyprland.sh to install v0.39.1 Hyprland - Updated hyprland.sh to install v0.39.1 Hyprland
- adding hypridle and hyprlock - adding hypridle and hyprlock
- dropping swaylock-effects and swayidle - dropping swaylock-effects and swayidle
- adjusted to work with current Hyprland-Dots - adjusted to work with current Hyprland-Dots
## 22 Apr 2024 ## 22 Apr 2024
- Change dotfiles to specific version only as Debian and Ubuntu cant keep up with Hyprland development - Change dotfiles to specific version only as Debian and Ubuntu cant keep up with Hyprland development
## 20 Apr 2024 ## 20 Apr 2024
- Change default Oh-my-zsh theme to xiong-chiamiov-plus - Change default Oh-my-zsh theme to xiong-chiamiov-plus
## 11 Jan 2024 ## 11 Jan 2024
- dropped wlsunset - dropped wlsunset
- added hyprlang build and install - added hyprlang build and install
## 02 Jan 2024 ## 02 Jan 2024
- Readme updated for cliphist instruction for ubuntu 23.10 users - Readme updated for cliphist instruction for ubuntu 23.10 users
- Created cliphist.sh for ubuntu 23.10 users (disabled by default and needs to be enabled on install.sh if desired) - Created cliphist.sh for ubuntu 23.10 users (disabled by default and needs to be enabled on install.sh if desired)
## 30 December 2023 ## 30 December 2023
- Code Cleaned up. - Code Cleaned up.
- Pokemon Color Scripts now offered as optional - Pokemon Color Scripts now offered as optional
## 29 December 2023 ## 29 December 2023
- Remove dunst in favor of swaync. NOTE: Part of the script is to also uninstall mako and dunst (if installed) as on my experience, dunst is sometimes taking over the notification even if it is not set to start - Remove dunst in favor of swaync. NOTE: Part of the script is to also uninstall mako and dunst (if installed) as on my experience, dunst is sometimes taking over the notification even if it is not set to start
## 16 Dec 2023 ## 16 Dec 2023
- zsh theme switched to `agnoster` theme by default - zsh theme switched to `agnoster` theme by default
- pywal tty color change disabled by default - pywal tty color change disabled by default
## 13 Dec 2023 ## 13 Dec 2023
- Added a script / function to force install packages. Some users reported that it is not installed. - Added a script / function to force install packages. Some users reported that it is not installed.
## 11 Dec 2023 ## 11 Dec 2023
- Changing over to zsh automatically if user opted - Changing over to zsh automatically if user opted
- If chose to install zsh and have no login manager, zsh auto login will auto start Hyprland - If chose to install zsh and have no login manager, zsh auto login will auto start Hyprland
- added as optional, with zsh, pokemon colorscripts - added as optional, with zsh, pokemon colorscripts
- improved zsh install scripts, so even the existing zsh users of can still opt for zsh and oh-my-zsh installation :) - improved zsh install scripts, so even the existing zsh users of can still opt for zsh and oh-my-zsh installation :)
## 03 Dec 2023 ## 03 Dec 2023
- Added kvantum for qt apps theming - Added kvantum for qt apps theming
- return of wlogout due to theming issues of rofi-power - return of wlogout due to theming issues of rofi-power
## 1 Dec 2023 ## 1 Dec 2023
- replace the Hyprland to specific branch/version as newest needed some new libraries and debian dont have those yet - replace the Hyprland to specific branch/version as newest needed some new libraries and debian dont have those yet
## 26 Nov 2023 ## 26 Nov 2023
- nvidia - Move to normal hyprland package as nvidia patches are doing nothing see [`commit`](https://github.com/hyprwm/Hyprland/commit/cd96ceecc551c25631783499bd92c6662c5d3616) - nvidia - Move to normal hyprland package as nvidia patches are doing nothing see [`commit`](https://github.com/hyprwm/Hyprland/commit/cd96ceecc551c25631783499bd92c6662c5d3616)
## 25 Nov 2023 ## 25 Nov 2023
- drop wlogout since Hyprland-Dots v2.1.9 uses rofi-power - drop wlogout since Hyprland-Dots v2.1.9 uses rofi-power
## 23-Nov-2023 ## 23-Nov-2023
- Added Bibata cursor to install if opted for GTK Themes. However, it is not pre-applied. Use nwg-look utility to apply - Added Bibata cursor to install if opted for GTK Themes. However, it is not pre-applied. Use nwg-look utility to apply
## 19-Nov-2023 ## 19-Nov-2023
- Adjust dotfiles script to download from releases instead of from upstream - Adjust dotfiles script to download from releases instead of from upstream
## 14-Oct-2023 ## 14-Oct-2023
- initial release. Added swappy for screenshots - initial release. Added swappy for screenshots
## 12-Oct-2023 ## 12-Oct-2023
- BETA release - BETA release

View File

@ -0,0 +1,423 @@
# Guía de Instalación y Actualización de Debian-Hyprland
Esta guía cubre los flujos de instalación y actualización mejorados para el proyecto Debian-Hyprland de KooL, incluyendo nuevas funciones de automatización, gestión centralizada de versiones y capacidades de dry-run.
## Tabla de Contenidos
1. [Resumen](#resumen)
2. [Nuevas Funciones](#nuevas-funciones)
3. [Gestión Central de Versiones](#gestión-central-de-versiones)
4. [Métodos de Instalación](#métodos-de-instalación)
5. [Flujos de Actualización](#flujos-de-actualización)
6. [Pruebas con Dry-Run](#pruebas-con-dry-run)
7. [Gestión de Logs](#gestión-de-logs)
8. [Uso Avanzado](#uso-avanzado)
9. [Solución de Problemas](#solución-de-problemas)
## Resumen
El proyecto Debian-Hyprland ahora incluye herramientas de automatización y gestión mejoradas, manteniendo la compatibilidad con el script original install.sh. Las principales adiciones son:
- **Gestión centralizada de versiones** mediante `hypr-tags.env`
- **Orden automático de dependencias** para los requisitos de Hyprland 0.51.x
- **Pruebas de compilación con dry-run** sin modificar el sistema
- **Actualizaciones selectivas de componentes** con `update-hyprland.sh`
- **Obtención automática de últimas versiones** desde GitHub
## Nuevas Funciones
### install.sh mejorado
El script original ahora:
- **Unifica versiones**: Lee `hypr-tags.env` y exporta variables de versión a todos los módulos
- **wayland-protocols automático**: Instala wayland-protocols desde el código fuente (≥1.45) antes de Hyprland
- **Orden robusto de dependencias**: Garantiza la secuencia correcta de requisitos
### Nuevos Scripts
#### update-hyprland.sh
Herramienta enfocada para gestionar y compilar solo el stack de Hyprland:
```bash
chmod +x ./update-hyprland.sh
./update-hyprland.sh --help # Ver todas las opciones
```
#### dry-run-build.sh
Herramienta de pruebas que compila componentes sin instalarlos:
```bash
chmod +x ./dry-run-build.sh
./dry-run-build.sh --help # Ver todas las opciones
```
#### wayland-protocols-src.sh
Módulo que compila wayland-protocols desde el origen para satisfacer los requisitos de Hyprland 0.51.x.
## Gestión Central de Versiones
### hypr-tags.env
Archivo con etiquetas de versión para todos los componentes de Hyprland:
```bash
# Versiones actuales (ejemplo)
HYPRLAND_TAG=v0.51.1
AQUAMARINE_TAG=v0.9.3
HYPRUTILS_TAG=v0.8.2
HYPRLANG_TAG=v0.6.4
HYPRGRAPHICS_TAG=v0.1.5
HYPRWAYLAND_SCANNER_TAG=v0.4.5
HYPRLAND_PROTOCOLS_TAG=v0.6.4
HYPRLAND_QT_SUPPORT_TAG=v0.1.0
HYPRLAND_QTUTILS_TAG=v0.1.4
WAYLAND_PROTOCOLS_TAG=1.45
```
### Prioridad de Sobrescritura de Versiones
1. Variables de entorno (exportadas)
2. Valores en el archivo `hypr-tags.env`
3. Valores por defecto en cada módulo
## Métodos de Instalación
### Método 1: Instalación Completa Original
```bash
# Instalación estándar con todos los componentes
chmod +x install.sh
./install.sh
```
Ahora, este método automáticamente:
- Carga versiones desde `hypr-tags.env`
- Instala wayland-protocols desde el origen antes de Hyprland
- Mantiene el orden correcto de dependencias
### Método 2: Solo el Stack de Hyprland
```bash
# Instala solo Hyprland y componentes esenciales
./update-hyprland.sh --install
```
### Método 3: Instalación Nueva con Últimas Versiones
```bash
# Obtiene últimas versiones de GitHub e instala
./update-hyprland.sh --fetch-latest --install
```
### Método 4: Instalación con Preset
```bash
# Usa un preset para elecciones automáticas
./install.sh --preset ./preset.sh
```
## Flujos de Actualización
Enlace rápido: [Actualización 0.49/0.50.x → 0.51.1](#actualización-049050x--0511)
### Actualizar a la Última Versión de Hyprland
#### Opción A: Descubrimiento Automático
```bash
# Obtiene las últimas etiquetas e instala
./update-hyprland.sh --fetch-latest --install
```
#### Opción B: Versión Específica
```bash
# Establece una versión específica de Hyprland
./update-hyprland.sh --set HYPRLAND=v0.51.1 --install
```
#### Opción C: Probar Antes de Instalar
```bash
# Prueba la compilación primero, luego instala si es exitoso
./update-hyprland.sh --fetch-latest --dry-run
# Si es exitoso:
./update-hyprland.sh --install
```
### Actualizar Componentes Individuales
```bash
# Actualiza solo librerías núcleo (a menudo necesario para nuevas versiones de Hyprland)
./update-hyprland.sh --fetch-latest --install --only hyprutils,hyprlang
# Actualiza aquamarine específicamente
./update-hyprland.sh --set AQUAMARINE=v0.9.3 --install --only aquamarine
```
### Actualizaciones Selectivas
```bash
# Instalar todo excepto los componentes Qt
./update-hyprland.sh --install --skip hyprland-qt-support,hyprland-qtutils
# Instalar solo componentes específicos
./update-hyprland.sh --install --only hyprland,aquamarine
```
### Actualización: 0.49/0.50.x ➜ 0.51.1
Si actualmente estás en Hyprland 0.49 o 0.50.x, puedes actualizar directamente a 0.51.1 sin una reinstalación completa.
Ruta recomendada:
```bash
# Asegura que hypr-tags.env apunte a la versión objetivo (omitir si ya es v0.51.1)
./update-hyprland.sh --set HYPRLAND=v0.51.1
# Actualiza Hyprland (los prerrequisitos se incluyen y ordenan automáticamente)
./update-hyprland.sh --install --only hyprland
```
Notas:
- El comando garantiza y ejecuta, según sea necesario: wayland-protocols-src, hyprland-protocols, hyprutils, hyprlang, aquamarine y luego hyprland.
- No es necesario usar install.sh para esta actualización, a menos que también quieras instalar/actualizar módulos opcionales (p. ej., SDDM, Bluetooth, Thunar, AGS, dotfiles) o estés recuperándote de una instalación fallida/parcial.
- Opcional: agrega --with-deps para reinstalar dependencias primero:
```bash
./update-hyprland.sh --with-deps --install --only hyprland
```
- Puedes hacer un dry-run primero para validar:
```bash
./update-hyprland.sh --dry-run --only hyprland
```
## Pruebas con Dry-Run
### ¿Por qué usar Dry-Run?
- Probar compatibilidad de compilación antes de instalar
- Validar combinaciones de versiones
- Depurar problemas de compilación sin cambios en el sistema
- Integración en CI/CD
### Uso Básico de Dry-Run
```bash
# Probar la configuración actual de versiones
./update-hyprland.sh --dry-run
# Probar con últimas versiones de GitHub
./update-hyprland.sh --fetch-latest --dry-run
# Probar una versión específica
./update-hyprland.sh --set HYPRLAND=v0.51.1 --dry-run
```
### Pruebas Avanzadas con Dry-Run
```bash
# Formato alternativo de resumen
./update-hyprland.sh --via-helper
# Probar con instalación de dependencias
./dry-run-build.sh --with-deps
# Probar solo componentes específicos
./dry-run-build.sh --only hyprland,aquamarine
```
### Limitaciones de Dry-Run
- **Las dependencias se instalan**: apt se ejecuta para asegurar la compilación
- **Requisitos de pkg-config**: Algunos componentes necesitan requisitos instalados en el sistema
- **Sin cambios en el sistema**: No instala archivos en /usr/local o /usr
## Gestión de Logs
### Ubicación de Logs
Todas las actividades de construcción generan logs con sello de tiempo en:
```
Install-Logs/
├── 01-Hyprland-Install-Scripts-YYYY-MM-DD-HHMMSS.log # Log principal de instalación
├── install-DD-HHMMSS_module-name.log # Logs por módulo
├── build-dry-run-YYYY-MM-DD-HHMMSS.log # Resumen de dry-run
└── update-hypr-YYYY-MM-DD-HHMMSS.log # Resumen de actualización
```
### Análisis de Logs
```bash
# Ver el log de instalación más reciente
ls -t Install-Logs/*.log | head -1 | xargs less
# Buscar errores en un módulo específico
grep -i error Install-Logs/install-*hyprland*.log
# Ver resumen de dry-run
cat Install-Logs/build-dry-run-*.log
```
### Retención de Logs
- Los logs se acumulan con el tiempo para referencia histórica
- Se recomienda limpieza manual periódica:
```bash
# Mantener solo logs de los últimos 30 días
find Install-Logs/ -name "*.log" -mtime +30 -delete
```
## Uso Avanzado
### Gestión de Versiones
#### Copia de Seguridad y Restauración
```bash
# Las etiquetas se respaldan automáticamente cuando cambian
# Restaurar la copia más reciente
./update-hyprland.sh --restore --dry-run
```
#### Múltiples Conjuntos de Versiones
```bash
# Guardar configuración actual
cp hypr-tags.env hypr-tags-stable.env
# Probar versiones experimentales
./update-hyprland.sh --fetch-latest --dry-run
# Restaurar estable si es necesario
cp hypr-tags-stable.env hypr-tags.env
```
### Integración con el Entorno
#### PKG_CONFIG_PATH personalizado
```bash
# Asegurar que /usr/local tenga prioridad
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:${PKG_CONFIG_PATH:-}"
./update-hyprland.sh --install
```
#### Compilaciones en Paralelo
```bash
# Controlar el paralelismo (por defecto: todos los núcleos)
export MAKEFLAGS="-j4"
./update-hyprland.sh --install
```
### Flujo de Trabajo de Desarrollo
#### Probar Nuevos Lanzamientos
```bash
# 1. Crear entorno de pruebas
cp hypr-tags.env hypr-tags.backup
# 2. Probar nueva versión
./update-hyprland.sh --set HYPRLAND=v0.52.0 --dry-run
# 3. Instalar si es exitoso
./update-hyprland.sh --install
# 4. Revertir si hay problemas
./update-hyprland.sh --restore --install
```
#### Desarrollo de Componentes
```bash
# Solo instalar dependencias
./update-hyprland.sh --with-deps --dry-run
# Pruebas manuales de módulo
DRY_RUN=1 ./install-scripts/hyprland.sh
# Ver logs de un módulo específico
tail -f Install-Logs/install-*hyprland*.log
```
## Solución de Problemas
### Problemas Comunes
#### Falla de Configuración con CMake
**Síntomas**: "Package dependency requirement not satisfied"
**Soluciones**:
```bash
# Instalar requisitos faltantes
./update-hyprland.sh --install --only wayland-protocols-src,hyprutils,hyprlang
# Limpiar caché de compilación
rm -rf hyprland aquamarine hyprutils hyprlang
# Reintentar instalación
./update-hyprland.sh --install --only hyprland
```
#### Errores de Compilación
**Síntomas**: "too many errors emitted"
**Soluciones**:
```bash
# Actualizar dependencias núcleo primero
./update-hyprland.sh --fetch-latest --install --only hyprutils,hyprlang
# Revisar incompatibilidades de API en logs
grep -A5 -B5 "error:" Install-Logs/install-*hyprland*.log
```
#### Etiqueta No Encontrada
**Síntomas**: "Remote branch X not found"
**Soluciones**:
```bash
# Ver etiquetas disponibles
git ls-remote --tags https://github.com/hyprwm/Hyprland
# Usar etiqueta confirmada
./update-hyprland.sh --set HYPRLAND=v0.50.1 --install
```
### Pasos de Depuración
1. **Verificar compatibilidad del sistema**:
```bash
# Verificar versión de Debian
cat /etc/os-release
# Asegurar deb-src habilitado
grep -E "^deb-src" /etc/apt/sources.list
```
2. **Verificar entorno**:
```bash
# Ver etiquetas actuales
cat hypr-tags.env
# Probar dry-run primero
./update-hyprland.sh --dry-run --only hyprland
```
3. **Analizar logs**:
```bash
# Errores más recientes
grep -i "error\|fail" Install-Logs/*.log | tail -20
# Problemas por módulo
ls -la Install-Logs/install-*[component]*.log
```
### Obtener Ayuda
1. **Revisar logs**: Consulte siempre Install-Logs/ para detalles
2. **Probar dry-run**: Valide antes de instalar
3. **Soporte de la comunidad**: Envíe issues con extractos de logs
4. **Documentación**: Consulte README.md del proyecto para requisitos base
## Migración desde Versiones Previas
### Instalaciones Existentes
Las nuevas herramientas funcionan junto a instalaciones existentes:
```bash
# Actualizar instalación existente
./update-hyprland.sh --install
# Probar sin afectar el sistema actual
./update-hyprland.sh --dry-run
```
### Convertir a Gestión por Etiquetas
```bash
# Las versiones actuales se guardan en hypr-tags.env automáticamente
# Verificar con:
cat hypr-tags.env
# Modificar versiones según necesidad:
./update-hyprland.sh --set HYPRLAND=v0.51.1
```
El flujo mejorado ofrece mayor control, capacidad de prueba y automatización, manteniendo la compatibilidad total con el proceso de instalación original.

View File

@ -0,0 +1,423 @@
# Debian-Hyprland Install & Upgrade Guide
This guide covers the enhanced installation and upgrade workflows for KooL's Debian-Hyprland project, including new automation features, centralized version management, and dry-run capabilities.
## Table of Contents
1. [Overview](#overview)
2. [New Features](#new-features)
3. [Central Version Management](#central-version-management)
4. [Installation Methods](#installation-methods)
5. [Upgrade Workflows](#upgrade-workflows)
6. [Dry-Run Testing](#dry-run-testing)
7. [Log Management](#log-management)
8. [Advanced Usage](#advanced-usage)
9. [Troubleshooting](#troubleshooting)
## Overview
The Debian-Hyprland project now includes enhanced automation and management tools while maintaining backward compatibility with the original install.sh script. The key additions are:
- **Centralized version management** via `hypr-tags.env`
- **Automated dependency ordering** for Hyprland 0.51.x requirements
- **Dry-run compilation testing** without system modifications
- **Selective component updates** via `update-hyprland.sh`
- **GitHub latest tag fetching** for automatic version discovery
## New Features
### Enhanced install.sh
The original install.sh script now includes:
- **Tag consistency**: Reads `hypr-tags.env` and exports version variables to all modules
- **Automatic wayland-protocols**: Installs wayland-protocols from source (≥1.45) before Hyprland
- **Robust dependency ordering**: Ensures prerequisites are built in the correct sequence
### New Scripts
#### update-hyprland.sh
A focused tool for managing and building just the Hyprland stack:
```bash
chmod +x ./update-hyprland.sh
./update-hyprland.sh --help # View all options
```
#### dry-run-build.sh
A testing tool that compiles components without installing:
```bash
chmod +x ./dry-run-build.sh
./dry-run-build.sh --help # View all options
```
#### wayland-protocols-src.sh
A new module that builds wayland-protocols from source to satisfy Hyprland 0.51.x requirements.
## Central Version Management
### hypr-tags.env
This file contains version tags for all Hyprland components:
```bash
# Current versions (example)
HYPRLAND_TAG=v0.51.1
AQUAMARINE_TAG=v0.9.3
HYPRUTILS_TAG=v0.8.2
HYPRLANG_TAG=v0.6.4
HYPRGRAPHICS_TAG=v0.1.5
HYPRWAYLAND_SCANNER_TAG=v0.4.5
HYPRLAND_PROTOCOLS_TAG=v0.6.4
HYPRLAND_QT_SUPPORT_TAG=v0.1.0
HYPRLAND_QTUTILS_TAG=v0.1.4
WAYLAND_PROTOCOLS_TAG=1.45
```
### Version Override Priority
1. Environment variables (exported)
2. hypr-tags.env file values
3. Default hardcoded values in each module
## Installation Methods
### Method 1: Original Full Installation
```bash
# Standard installation with all components
chmod +x install.sh
./install.sh
```
This method now automatically:
- Loads versions from `hypr-tags.env`
- Installs wayland-protocols from source before Hyprland
- Maintains proper dependency ordering
### Method 2: Hyprland Stack Only
```bash
# Install only Hyprland and essential components
./update-hyprland.sh --install
```
### Method 3: Fresh Installation with Latest Versions
```bash
# Fetch latest GitHub releases and install
./update-hyprland.sh --fetch-latest --install
```
### Method 4: Preset-Based Installation
```bash
# Use preset file for automated choices
./install.sh --preset ./preset.sh
```
## Upgrade Workflows
Quick link: [Upgrade 0.49/0.50.x → 0.51.1](#upgrade-049050x--0511)
### Upgrading to Latest Hyprland Release
#### Option A: Automatic Discovery
```bash
# Fetch latest tags and install
./update-hyprland.sh --fetch-latest --install
```
#### Option B: Specific Version
```bash
# Set specific Hyprland version
./update-hyprland.sh --set HYPRLAND=v0.51.1 --install
```
#### Option C: Test Before Installing
```bash
# Test compilation first, then install if successful
./update-hyprland.sh --fetch-latest --dry-run
# If successful:
./update-hyprland.sh --install
```
### Upgrading Individual Components
```bash
# Update only core libraries (often needed for new Hyprland versions)
./update-hyprland.sh --fetch-latest --install --only hyprutils,hyprlang
# Update aquamarine specifically
./update-hyprland.sh --set AQUAMARINE=v0.9.3 --install --only aquamarine
```
### Selective Updates
```bash
# Install everything except Qt components
./update-hyprland.sh --install --skip hyprland-qt-support,hyprland-qtutils
# Install only specific components
./update-hyprland.sh --install --only hyprland,aquamarine
```
### Upgrade: 0.49/0.50.x ➜ 0.51.1
If youre currently on Hyprland 0.49 or 0.50.x, you can upgrade directly to 0.51.1 without a full reinstall.
Recommended path:
```bash
# Ensure hypr-tags.env pins the target version (skip if already v0.51.1)
./update-hyprland.sh --set HYPRLAND=v0.51.1
# Upgrade Hyprland (prerequisites are auto-included and ordered)
./update-hyprland.sh --install --only hyprland
```
Notes:
- The command will automatically ensure and run, as needed: wayland-protocols-src, hyprland-protocols, hyprutils, hyprlang, aquamarine, then hyprland.
- Full install via install.sh is not required for this upgrade unless you also want to install/refresh optional modules (e.g., SDDM, Bluetooth, Thunar, AGS, dotfiles) or youre recovering from a failed/partial setup.
- Optional: add --with-deps to re-run dependency installation first:
```bash
./update-hyprland.sh --with-deps --install --only hyprland
```
- You can dry-run first to validate:
```bash
./update-hyprland.sh --dry-run --only hyprland
```
## Dry-Run Testing
### Why Use Dry-Run?
- Test compilation compatibility before installing
- Validate version combinations
- Debug build issues without system changes
- CI/CD pipeline integration
### Basic Dry-Run Usage
```bash
# Test current tag configuration
./update-hyprland.sh --dry-run
# Test with latest GitHub releases
./update-hyprland.sh --fetch-latest --dry-run
# Test specific version
./update-hyprland.sh --set HYPRLAND=v0.51.1 --dry-run
```
### Advanced Dry-Run Testing
```bash
# Use alternative summary format
./update-hyprland.sh --via-helper
# Test with dependencies installation
./dry-run-build.sh --with-deps
# Test only specific components
./dry-run-build.sh --only hyprland,aquamarine
```
### Dry-Run Limitations
- **Dependencies still install**: apt operations run to ensure compilation succeeds
- **pkg-config requirements**: Some components need system-installed prerequisites
- **No system changes**: No files installed to /usr/local or /usr
## Log Management
### Log Location
All build activities generate timestamped logs in:
```
Install-Logs/
├── 01-Hyprland-Install-Scripts-YYYY-MM-DD-HHMMSS.log # Main install log
├── install-DD-HHMMSS_module-name.log # Per-module logs
├── build-dry-run-YYYY-MM-DD-HHMMSS.log # Dry-run summary
└── update-hypr-YYYY-MM-DD-HHMMSS.log # Update tool summary
```
### Log Analysis
```bash
# View most recent install log
ls -t Install-Logs/*.log | head -1 | xargs less
# Check for errors in specific module
grep -i error Install-Logs/install-*hyprland*.log
# View dry-run summary
cat Install-Logs/build-dry-run-*.log
```
### Log Retention
- Logs accumulate over time for historical reference
- Manual cleanup recommended periodically:
```bash
# Keep only logs from last 30 days
find Install-Logs/ -name "*.log" -mtime +30 -delete
```
## Advanced Usage
### Tag Management
#### Backup and Restore
```bash
# Tags are automatically backed up on changes
# Restore most recent backup
./update-hyprland.sh --restore --dry-run
```
#### Multiple Version Sets
```bash
# Save current configuration
cp hypr-tags.env hypr-tags-stable.env
# Try experimental versions
./update-hyprland.sh --fetch-latest --dry-run
# Restore stable if needed
cp hypr-tags-stable.env hypr-tags.env
```
### Environment Integration
#### Custom PKG_CONFIG_PATH
```bash
# Ensure /usr/local takes precedence
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:${PKG_CONFIG_PATH:-}"
./update-hyprland.sh --install
```
#### Parallel Builds
```bash
# Control build parallelism (default: all cores)
export MAKEFLAGS="-j4"
./update-hyprland.sh --install
```
### Development Workflow
#### Testing New Releases
```bash
# 1. Create test environment
cp hypr-tags.env hypr-tags.backup
# 2. Test new version
./update-hyprland.sh --set HYPRLAND=v0.52.0 --dry-run
# 3. Install if successful
./update-hyprland.sh --install
# 4. Rollback if issues
./update-hyprland.sh --restore --install
```
#### Component Development
```bash
# Install dependencies only
./update-hyprland.sh --with-deps --dry-run
# Manual module testing
DRY_RUN=1 ./install-scripts/hyprland.sh
# Check logs for specific module
tail -f Install-Logs/install-*hyprland*.log
```
## Troubleshooting
### Common Issues
#### CMake Configuration Fails
**Symptoms**: "Package dependency requirement not satisfied"
**Solutions**:
```bash
# Install missing prerequisites
./update-hyprland.sh --install --only wayland-protocols-src,hyprutils,hyprlang
# Clear build cache
rm -rf hyprland aquamarine hyprutils hyprlang
# Retry installation
./update-hyprland.sh --install --only hyprland
```
#### Compilation Errors
**Symptoms**: "too many errors emitted"
**Solutions**:
```bash
# Update core dependencies first
./update-hyprland.sh --fetch-latest --install --only hyprutils,hyprlang
# Check for API mismatches in logs
grep -A5 -B5 "error:" Install-Logs/install-*hyprland*.log
```
#### Tag Not Found
**Symptoms**: "Remote branch X not found"
**Solutions**:
```bash
# Check available tags
git ls-remote --tags https://github.com/hyprwm/Hyprland
# Use confirmed existing tag
./update-hyprland.sh --set HYPRLAND=v0.50.1 --install
```
### Debug Steps
1. **Check system compatibility**:
```bash
# Verify Debian version
cat /etc/os-release
# Ensure deb-src enabled
grep -E "^deb-src" /etc/apt/sources.list
```
2. **Verify environment**:
```bash
# Check current tags
cat hypr-tags.env
# Test dry-run first
./update-hyprland.sh --dry-run --only hyprland
```
3. **Analyze logs**:
```bash
# Most recent errors
grep -i "error\|fail" Install-Logs/*.log | tail -20
# Module-specific issues
ls -la Install-Logs/install-*[component]*.log
```
### Getting Help
1. **Check logs**: Always review Install-Logs/ for detailed error information
2. **Test dry-run**: Use --dry-run to validate before installing
3. **Community support**: Submit issues with relevant log excerpts
4. **Documentation**: Refer to main project README.md for base requirements
## Migration from Previous Versions
### Existing Installations
The new tools work alongside existing installations:
```bash
# Update existing installation
./update-hyprland.sh --install
# Test without affecting current system
./update-hyprland.sh --dry-run
```
### Converting to Tag Management
```bash
# Current versions are saved to hypr-tags.env automatically
# Verify with:
cat hypr-tags.env
# Modify versions as needed:
./update-hyprland.sh --set HYPRLAND=v0.51.1
```
The enhanced workflow provides better control, testing capabilities, and automation while maintaining full compatibility with the original installation process.

201
README.md
View File

@ -1,7 +1,8 @@
<div align="center"> <div align="center">
# 💌 KooL's Debian-Hyprland Install Script 💌 # 💌 KooL's Debian-Hyprland Install Script 💌
#### For Debian 13 Trixie (Testing) and SID (unstable)
#### For Debian 13 (Trixie) and above (testing, SID)
<p align="center"> <p align="center">
<img src="https://raw.githubusercontent.com/JaKooLit/Hyprland-Dots/main/assets/latte.png" width="400" /> <img src="https://raw.githubusercontent.com/JaKooLit/Hyprland-Dots/main/assets/latte.png" width="400" />
@ -13,7 +14,7 @@
</div> </div>
<div align="center"> <div align="center">
<br> <br>
<a href="#-announcement-"><kbd><br>Read this First<br></kbd></a>&ensp;&ensp; <a href="#-announcement-"><kbd><br>Read this First<br></kbd></a>&ensp;&ensp;
<a href="#-to-use-this-script"><kbd><br>Installation<br></kbd></a>&ensp;&ensp; <a href="#-to-use-this-script"><kbd><br>Installation<br></kbd></a>&ensp;&ensp;
<a href="#gallery-and-videos"><kbd><br>Gallery<br></kbd></a>&ensp;&ensp; <a href="#gallery-and-videos"><kbd><br>Gallery<br></kbd></a>&ensp;&ensp;
@ -29,7 +30,7 @@
</div> </div>
<div align="center"> <div align="center">
<br> <br>
<a href="https://github.com/JaKooLit/Hyprland-Dots/tree/Deb-Untu-Dots"><kbd><br>Hyprland-Dots Debian repo<br></kbd></a>&ensp;&ensp; <a href="https://github.com/JaKooLit/Hyprland-Dots/tree/Debian-Dots"><kbd><br>Hyprland-Dots Debian repo<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="https://www.youtube.com/playlist?list=PLDtGd5Fw5_GjXCznR0BzCJJDIQSZJRbxx"><kbd><br>Youtube<br></kbd></a>&ensp;&ensp;
<a href="https://github.com/JaKooLit/Hyprland-Dots/wiki"><kbd><br>Wiki<br></kbd></a>&ensp;&ensp; <a href="https://github.com/JaKooLit/Hyprland-Dots/wiki"><kbd><br>Wiki<br></kbd></a>&ensp;&ensp;
<a href="https://github.com/JaKooLit/Hyprland-Dots/wiki/Keybinds"><kbd><br>Keybinds<br></kbd></a>&ensp;&ensp; <a href="https://github.com/JaKooLit/Hyprland-Dots/wiki/Keybinds"><kbd><br>Keybinds<br></kbd></a>&ensp;&ensp;
@ -42,96 +43,104 @@
</p> </p>
<h3 align="center"> <h3 align="center">
<img src="https://github.com/JaKooLit/Telegram-Animated-Emojis/blob/main/Activity/Sparkles.webp" alt="Sparkles" width="38" height="38" /> <img src="https://github.com/JaKooLit/Telegram-Animated-Emojis/blob/main/Activity/Sparkles.webp" alt="Sparkles" width="38" height="38" />
KooL Hyprland-Dotfiles Showcase KooL Hyprland-Dotfiles Showcase
<img src="https://github.com/JaKooLit/Telegram-Animated-Emojis/blob/main/Activity/Sparkles.webp" alt="Sparkles" width="38" height="38" /> <img src="https://github.com/JaKooLit/Telegram-Animated-Emojis/blob/main/Activity/Sparkles.webp" alt="Sparkles" width="38" height="38" />
</h3> </h3>
<div align="center"> <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> </div>
### NOTE: Ubuntu-Hyprland install script has its own repo now
- [`Ubuntu-Hyprland LINK`](https://github.com/JaKooLit/Ubuntu-Hyprland)
### Gallery and Videos ### Gallery and Videos
#### 🎥 Feb 2025 Video explanation of installation with preset #### 🎥 Feb 2025 Video explanation of installation with preset
- [YOUTUBE-LINK](https://youtu.be/wQ70lo7P6vA?si=_QcbrNKh_Bg0L3wC) - [YOUTUBE-LINK](https://youtu.be/wQ70lo7P6vA?si=_QcbrNKh_Bg0L3wC)
- [YOUTUBE-Hyprland-Playlist](https://youtube.com/playlist?list=PLDtGd5Fw5_GjXCznR0BzCJJDIQSZJRbxx&si=iaNjLulFdsZ6AV-t) - [YOUTUBE-Hyprland-Playlist](https://youtube.com/playlist?list=PLDtGd5Fw5_GjXCznR0BzCJJDIQSZJRbxx&si=iaNjLulFdsZ6AV-t)
- [AGS overview DEMO](https://youtu.be/zY5SLNPBJTs)
> [!IMPORTANT] > [!IMPORTANT]
> install a backup tool like `snapper` or `timeshift`. and Backup your system before installing hyprland using this script (HIGHLY RECOMMENDED). > install a backup tool like `snapper` or `timeshift`. and Backup your system before installing hyprland using this script (**HIGHLY RECOMMENDED**).
> [!CAUTION] > [!CAUTION]
> Download this script on a directory where you have write permissions. ie. HOME. Or any directory within your home directory. Else script will fail > Download this script on a directory where you have write permissions. ie. HOME. Or any directory within your home directory. Else script will fail
#### ⚠️ Pre-requisites and VERY Important! ### #### ⚠️ Pre-requisites and VERY Important
- Do not run this installer as sudo or as root - Do not run this installer as sudo or as root
- This Installer requires a user with a priviledge to install packages - This Installer requires a user with a priviledge to install packages
- Needs a Debian 13 Testing (Trixie) Branch as it needs a newer wayland packages! I have tried on Stable Debian 12 Bookworm in which, Hyprland wont build. - Needs a Debian 13 Trixie or greater. As it needs a newer wayland packages!
- edit your /etc/apt/sources.list and remove # on lines with deb-src to enable source packaging else will not install properly especially Hyprland - edit your `/etc/apt/sources.list` and **remove** `#` on lines with `deb-src` to enable source packaging else will not install properly especially Hyprland
```bash ```bash
sudo nano /etc/apt/sources.list sudo nano /etc/apt/sources.list
``` ```
- delete # on the lines with 'deb-src'
- delete # on the lines with 'deb-src'
- ensure to allow to install non-free drivers especially for users with NVIDIA gpus. You can also install non-free drivers if required. Edit install-scripts/nvidia.sh and change the nvidia stuff's if required - ensure to allow to install non-free drivers especially for users with NVIDIA gpus. You can also install non-free drivers if required. Edit install-scripts/nvidia.sh and change the nvidia stuff's if required
### 🪧🪧🪧 ANNOUNCEMENT 🪧🪧🪧 ### 🪧🪧🪧 ANNOUNCEMENT 🪧🪧🪧
- This Repo does not contain Hyprland Dots or configs! Pre-configured Dotfiles are on [`Hyprland-Dots`](https://github.com/JaKooLit/Hyprland-Dots/tree/Deb-Untu-Dots) . During installation, if you opt to copy pre-configured dots, it will be downloaded from that centralized repo.
- Hyprland-Dots use are constantly evolving / improving. you can check CHANGELOGS here [`Hyprland-Dots-Changelogs`](https://github.com/JaKooLit/Hyprland-Dots/wiki/Changelogs) [Debian-Hyprland Changelogs](https://github.com/JaKooLit/Debian-Hyprland/blob/main/CHANGELOGS.md)
- Since the Hyprland-Dots are evolving, some of the screenshots maybe old
- the wallpaper offered to be downloaded towards the end is from this [`WALLPAPER-REPO`](https://github.com/JaKooLit/Wallpaper-Bank) - 10 October 2025 Update!
- Hyprland-Debian nows builds 0.51.1 from source!
- The installer now can be used to install newer releases later
- If you are currently running 0.49, or 0.50, you can upgrade to 0.51.1
- You do not have to re-install everything, but re-running `install.sh` works also
- Instructions are available in English and Spanish
#### ✨ Some notes on this installer / Prerequisites #### ✨ Some notes on this installer / Prerequisites
- This script is meant to install in Debian Testing (Trixie) and Debian Unstable (SID). This script Will NOT work with Bookworm
- If However, decided to try, recommend to install SDDM. Apart from GDM and SDDM, any other Login Manager may not work nor launch Hyprland. However, hyprland can be launched through tty by type Hyprland - Recommend to install SDDM. Apart from GDM and SDDM, any other Login Manager may not work nor launch Hyprland. However, hyprland can be launched through tty by type Hyprland
- 🕯️ network-manager-gnome (nm-applet) has been removed from the packages to install. This is because it is known to restart the networkmanager causing issues in the installation process. After you boot up, inorder to get the network-manager applet, install network-manager-gnome. `sudo apt install network-manager-gnome` See below if your network or wifi became unmanaged after installation - 🕯️ network-manager-gnome (nm-applet) *has been removed* from the packages to install. This is because it is known to restart the networkmanager causing issues in the installation process. After you boot up, inorder to get the network-manager applet, install network-manager-gnome. `sudo apt install network-manager-gnome` See below if your network or wifi became unmanaged after installation
- If you have nvidia, and wanted to use proprietary drivers, uninstall nouveau first (if installed). This script will be installing proprietary nvidia drivers and will not deal with removal of nouveau.
- NVIDIA users / owners, after installation, check [`THIS`](https://github.com/JaKooLit/Hyprland-Dots/wiki/Notes_to_remember#--for-nvidia-gpu-users)
#### ✨ Costumize the packages to be installed
- inside the install-scripts directory, you can edit 01-hypr-pkgs.sh. Do not edit 00-dependencies.sh unless you know what you are doing. Care though as the Hyprland Dots may not work properly!
### 🚩 changing login manager to SDDM ### 🚩 changing login manager to SDDM
- if you really want to change login manager, there are couple of things you need to carry out before running this install script - if you really want to change login manager, there are couple of things you need to carry out before running this install script
- first install sddm. the no-install-recommends is suggested else it will pull lots of plasma depencies. - first install sddm. the no-install-recommends is suggested else it will pull lots of plasma depencies.
```bash ```bash
sudo apt install --no-install-recommends -y sddm sudo apt install --no-install-recommends -y sddm
``` ```
- then ran `sudo dpkg-reconfigure sddm` choose sddm and then reboot. - then ran `sudo dpkg-reconfigure sddm` choose sddm and then reboot.
- once reboot done, you can ran the script and choose sddm & sddm theme - once reboot done, you can ran the script and choose sddm & sddm theme
- [LINK](https://www.simplified.guide/ubuntu/switch-to-gdm) for some guide - [LINK](https://www.simplified.guide/ubuntu/switch-to-gdm) for some guide
#### 💫 SDDM and GTK Themes offered #### 💫 SDDM and GTK Themes offered
- If you opted to install SDDM theme, here's the [`LINK`](https://codeberg.org/JaKooLit/sddm-sequoia) which is a fork of [`LINK`](https://codeberg.org/minMelody/sddm-sequoia)
- If you opted to install GTK Themes, Icons, here's the [`LINK`](https://github.com/JaKooLit/GTK-themes-icons). This also includes Bibata Modern Ice cursor.
#### 🔔 NOTICE TO NVIDIA OWNERS ### - If you opted to install SDDM theme, here's the [LINK](https://github.com/JaKooLit/simple-sddm-2) which is a modified fork of [LINK](https://github.com/Keyitdev/sddm-astronaut-theme)
- by default it is installing the latest and newest nvidia drivers. If you have an older nvidia-gpu (GTX 800 series and older), check out nvidia-debian website [`LINK`](https://wiki.debian.org/NvidiaGraphicsDrivers) and edit nvidia.sh in install-scripts directory to install proper gpu driver - If you opted to install GTK Themes, Icons, here's the [LINK](https://github.com/JaKooLit/GTK-themes-icons). This also includes Bibata Modern Ice cursor.
#### 🔔 NOTICE TO NVIDIA OWNERS ###
- By default it is installing the latest and newest nvidia drivers. If you have an older nvidia-gpu (GTX 800 series and older), check out nvidia-debian website [LINK](https://wiki.debian.org/NvidiaGraphicsDrivers) and edit nvidia.sh in install-scripts directory to install proper gpu driver
- If you have nvidia, and wanted to use proprietary drivers, uninstall nouveau first (if installed). This script will be installing proprietary nvidia drivers and will not deal with removal of nouveau.
- NVIDIA users / owners, after installation, check [`THIS`](https://github.com/JaKooLit/Hyprland-Dots/wiki/Notes_to_remember#--for-nvidia-gpu-users)
> [!IMPORTANT] > [!IMPORTANT]
> If you want to use nouveau driver, Dont select Nvidia in the options. This is because the nvidia installer part, it will blacklist nouveau. Hyprland will still be installed but it will skip blacklisting nouveau. > If you wish to use the nouveau driver (installed by default in Debian), be sure to not select "Nvidia" in the installation options.
> If you select this option, the NVIDIA installer part will attempt to blacklist nouveau; while Hyprland will still be installed, it will skip blacklisting nouveau if you don't select the NVIDIA option.
> [!IMPORTANT]
> Another important note for nvidia owners
> If you have nvidia, by default debian is installing nouveau or open-source nvidia driver. If you want to keep the default nvidia driver installed by Debian, Dont select Nvidia in the options.
## ✨ Auto clone and install ## ✨ Auto clone and install
> [!CAUTION] >
> If you are using FISH SHELL, DO NOT use this function. Clone and ran install.sh instead > [!CAUTION]
> If you are using FISH SHELL, DO NOT use this function. Clone and run install.sh instead
- you can use this command to automatically clone the installer and ran the script for you - you can use this command to automatically clone the installer and ran the script for you
- NOTE: `curl` package is required before running this command - NOTE: `curl` package is required before running this command
```bash ```bash
sh <(curl -L https://raw.githubusercontent.com/JaKooLit/Debian-Hyprland/main/auto-install.sh) sh <(curl -L https://raw.githubusercontent.com/JaKooLit/Debian-Hyprland/main/auto-install.sh)
``` ```
## ✨ to use this script ## ✨ to use this script
> clone this repo (latest commit only) by using git. Change directory, make executable and run the script clone this repo, change directory, make executable and run the script:
```bash ```bash
git clone --depth=1 https://github.com/JaKooLit/Debian-Hyprland.git ~/Debian-Hyprland git clone --depth=1 https://github.com/JaKooLit/Debian-Hyprland.git ~/Debian-Hyprland
cd ~/Debian-Hyprland cd ~/Debian-Hyprland
@ -139,30 +148,16 @@ chmod +x install.sh
./install.sh ./install.sh
``` ```
### 💥 💥 UNINSTALL SCRIPT / Removal of Config Files
- 11 March 2025, due to popular request, created a guided `uninstall.sh` script. USE this with caution as it may render your system unstable.
- I will not be responsible if your system breaks
- The best still to revert to previous state of your system is via timeshift of snapper
#### ✨ for ZSH and OH-MY-ZSH installation
> installer should auto change your default shell to zsh. However, if it does not, do this
```bash
chsh -s $(which zsh)
zsh
source ~/.zshrc
```
- reboot or logout
- by default `xiong-chiamiov-plus` theme is installed. You can find more themes from this [`OH-MY-ZSH-THEMES`](https://github.com/ohmyzsh/ohmyzsh/wiki/Themes)
- to change the theme, edit ~/.zshrc ZSH_THEME="desired theme"
#### ✨ TO DO once installation done and dotfiles copied #### ✨ TO DO once installation done and dotfiles copied
- SUPER H for HINT or click on the waybar HINT! Button
- Head over to [`FAQ`](https://github.com/JaKooLit/Hyprland-Dots/wiki/FAQ) and [`TIPS`](https://github.com/JaKooLit/Hyprland-Dots/wiki/TIPS)
- SUPER H for HINT or click on the waybar HINT! Button
- Head over to [`FAQ`](https://github.com/JaKooLit/Hyprland-Dots/wiki/FAQ) and [`TIPS`](https://github.com/JaKooLit/Hyprland-Dots/wiki/TIPS)
- Head over to [KooL Hyprland WIKI](https://github.com/JaKooLit/Hyprland-Dots/wiki)
- if you installed in your laptop and Brightness and Keyboard brightness does not work you can execute this command `sudo chmod +s $(which brightnessctl)` - if you installed in your laptop and Brightness and Keyboard brightness does not work you can execute this command `sudo chmod +s $(which brightnessctl)`
#### ✨ Packages that are manually downloaded and build. These packages will not be updated by apt and have to be manually updated #### ✨ Packages that are manually downloaded and build. These packages will not be updated by apt and have to be manually updated
- Asus ROG asusctl [`LINK`](https://gitlab.com/asus-linux/asusctl) and superfxctl [`LINK`](https://gitlab.com/asus-linux/supergfxctl) - Asus ROG asusctl [`LINK`](https://gitlab.com/asus-linux/asusctl) and superfxctl [`LINK`](https://gitlab.com/asus-linux/supergfxctl)
- swww [`LINK`](https://github.com/Horus645/swww) - swww [`LINK`](https://github.com/Horus645/swww)
- hyprlock [`LINK`](https://github.com/hyprwm/hyprlock) #22 Aug 2024 - still not on repo - hyprlock [`LINK`](https://github.com/hyprwm/hyprlock) #22 Aug 2024 - still not on repo
@ -173,59 +168,58 @@ source ~/.zshrc
> [!TIP] > [!TIP]
> To update to latest packages, re-running this script will auto update all. Script is configured to pull latest packages build for you. > To update to latest packages, re-running this script will auto update all. Script is configured to pull latest packages build for you.
### 💥 UNINSTALL SCRIPT / Removal of Config Files
- 11 March 2025, due to popular request, created a guided `uninstall.sh` script. USE this with caution as it may render your system unstable.
- I will not be responsible if your system breaks
- The best still to revert to previous state of your system is via **timeshift or snapper**
#### 🤬 FAQ #### 🤬 FAQ
#### Most common question I got is, Hey Ja, Why the heck it is taking long time to install? Other distro like Arch its only a minute or two. Why here takes like forever?!?!?!
- Well, most of the core packages are downloaded and Build and compiled from SOURCE. Unlike Other distros, they already have prepacked binary that can just download and install.
## 🛎 *** DEBIAN and UBUNTU Hyprland Dots UPDATING NOTES *** **Most common question I got is, Hey Ja, Why the heck it is taking long time to install? Other distro like Arch its only a minute or two. Why here takes like forever?!?!?**
> [!IMPORTANT]
> This is very Important for Debian and Ubuntu Dots
- Some parts of KooL's Hyprland Dots [`LINK`](https://github.com/JaKooLit/Hyprland-Dots) are not compatible on Debian and Ubuntu especially the hyprland settings.
- That is the reason the DOTS for those distro's are "fixed" and they are being pulled on different branch of KooL Dots.
- To update your KooL's Dots follow this [WIKI](https://github.com/JaKooLit/Hyprland-Dots/wiki#--debian-and-ubuntu-hyprland-dots-updating-notes-) - Well, most of the core packages are downloaded and Build and compiled from *SOURCE*. Unlike Other distros, they already have prepacked binary that can just download and install.
> [!NOTE] ## 🛎 ***DEBIAN Hyprland Dots UPDATING NOTES***
- With this new update to Debian-Hyprland the current Hyprland-Dots are now compatible with Debian. This applies only to Debian, not ubuntu.
> [!NOTE]
> This script does not setup audio. Kindly set up. If you have not, I recommend pipewire. `sudo apt install -y pipewire` > This script does not setup audio. Kindly set up. If you have not, I recommend pipewire. `sudo apt install -y pipewire`
#### 🎞️ AGS Overview DEMO
- in case you wonder, here is a short demo of AGS overview [Youtube LINK](https://youtu.be/zY5SLNPBJTs)
#### ✨ TO DO once installation done and dotfiles copied
- SUPER H for HINT or click on the waybar HINT! Button
- Head over to [KooL Hyprland WIKI](https://github.com/JaKooLit/Hyprland-Dots/wiki)
#### 🙋 Got a questions regarding the Hyprland Dots or configurations? 🙋 #### 🙋 Got a questions regarding the Hyprland Dots or configurations? 🙋
- Head over to wiki Link [`WIKI`](https://github.com/JaKooLit/Hyprland-Dots/wiki)
Head over to wiki Link [`WIKI`](https://github.com/JaKooLit/Hyprland-Dots/wiki)
#### ⌨ Keybinds #### ⌨ Keybinds
- Keybinds [`CLICK`](https://github.com/JaKooLit/Hyprland-Dots/wiki/Keybinds)
Keybinds [`CLICK`](https://github.com/JaKooLit/Hyprland-Dots/wiki/Keybinds)
> [!TIP] > [!TIP]
> KooL Hyprland has a searchable keybind function via rofi. (SUPER SHIFT K) or right click the `HINTS` waybar button > KooL Hyprland has a searchable keybind function via rofi. (SUPER SHIFT K) or right click the `HINTS` waybar button
#### 🙋 👋 Having issues or questions? #### 🙋 👋 Having issues or questions?
- for the install part, kindly open issue on this repo - for the install part, kindly open issue on this repo
- for the Pre-configured Hyprland dots / configuration, submit issue [`here`](https://github.com/JaKooLit/Hyprland-Dots/issues) - for the Pre-configured Hyprland dots / configuration, submit issue [`here`](https://github.com/JaKooLit/Hyprland-Dots/issues)
#### 🔧 Proper way to re-installing a particular script from install-scripts directory #### 🔧 Proper way to re-installing a particular script from install-scripts directory
- CD into Debian-Hyprland DIrectory and then ran the below command.
- CD into Debian-Hyprland directory and then ran the below command.
- i.e. `./install-scripts/gtk-themes.sh` - to reinstall GTK Themes or - i.e. `./install-scripts/gtk-themes.sh` - to reinstall GTK Themes or
- `./install-scripts/sddm.sh` - to reinstall sddm - `./install-scripts/sddm.sh` - to reinstall sddm
> [!IMPORTANT] > [!IMPORTANT]
> DO NOT CD into install-scripts directory as script as it will fail. Scripts are designed to ran outside install-scripts directory for installation logging purposes. > DO NOT CD into install-scripts directory as script as it will fail. Scripts are designed to ran outside install-scripts directory for installation logging purposes.
#### 🎞️ AGS Overview DEMO #### 🛣️ Roadmap
- in case you wonder, here is a short demo of AGS overview [Youtube LINK](https://youtu.be/zY5SLNPBJTs)
#### 🛣️ Roadmap:
- [ ] possibly adding gruvbox themes, cursors, icons - [ ] possibly adding gruvbox themes, cursors, icons
### ⁉️ KNOWN ISSUE
- [ ] hypridle wont build (Feb 2025)
#### ❗ some known issues for nvidia #### ❗ some known issues for nvidia
- reports from members of my discord, states that some users of nvidia are getting stuck on sddm login. credit to @Kenni Fix stated was
- reports from members of my discord, states that some users of nvidia are getting stuck on sddm login. credit to @Kenni Fix stated was
``` ```
while in sddm press ctrl+alt+F2 or F3 while in sddm press ctrl+alt+F2 or F3
log into your account log into your account
@ -234,33 +228,38 @@ log into your account
`ls -l /dev/dri/by-path` to check where the symlink points to `ls -l /dev/dri/by-path` to check where the symlink points to
) )
``` ```
- add "env = WLR_DRM_DEVICES,/dev/dri/cardX" to the ENVvariables config `~/.config/hypr/UserConfigs/ENVariables.conf` ; X being where the symlink of the gpu points to - add "env = WLR_DRM_DEVICES,/dev/dri/cardX" to the ENVvariables config `~/.config/hypr/UserConfigs/ENVariables.conf` ; X being where the symlink of the gpu points to
- more info from the hyprland wiki [`Hyprland Wiki Link`](https://wiki.hyprland.org/FAQ/#my-external-monitor-is-blank--doesnt-render--receives-no-signal-laptop) - more info from the hyprland wiki [`Hyprland Wiki Link`](https://wiki.hyprland.org/FAQ/#my-external-monitor-is-blank--doesnt-render--receives-no-signal-laptop)
- reports from a member of discord for Nvidia for additional env's - reports from a member of discord for Nvidia for additional env's
- remove # from the following env's on - remove # from the following env's on
``` ```
env = GBM_BACKEND,nvidia-drm env = GBM_BACKEND,nvidia-drm
env = WLR_RENDERER_ALLOW_SOFTWARE,1 env = WLR_RENDERER_ALLOW_SOFTWARE,1
``` ```
#### 🫥 Improving performance for Older Nvidia Cards using driver 470 #### 🫥 Improving performance for Older Nvidia Cards using driver 470
- [`SEE HERE`](https://github.com/JaKooLit/Hyprland-Dots/discussions/123#discussion-6035205)
- [`SEE HERE`](https://github.com/JaKooLit/Hyprland-Dots/discussions/123#discussion-6035205)
#### ❗ other known issues #### ❗ other known issues
> [!NOTE] > [!NOTE]
> Auto start of Hyprland after login (no SDDM or GDM or any login managers) > Auto start of Hyprland after login (no SDDM or GDM or any login managers)
- This was disabled a few days ago. (19 May 2024). This was because some users, after they used the Distro-Hyprland scripts with other DE (gnome-wayland or plasma-wayland), if they choose to login into gnome-wayland for example, Hyprland is starting.
- This was disabled a few days ago. (19 May 2024). This was because some users, after they used the Distro-Hyprland scripts with other DE (gnome-wayland or plasma-wayland), if they choose to login into gnome-wayland for example, Hyprland is starting.
- to avoid this, I disabled it. You can re-enable again by editing `~/.zprofile` . Remove all the # on the first lines - to avoid this, I disabled it. You can re-enable again by editing `~/.zprofile` . Remove all the # on the first lines
- [ ] ROFI issues (scaling, unexplained scaling etc). This is most likely to experience if you are installing on a system where rofi is currently installed. To fix it uninstall rofi and install rofi-wayland . `sudo apt autoremove rofi` . - [ ] ROFI issues (scaling, unexplained scaling etc). This is most likely to experience if you are installing on a system where rofi is currently installed. To fix it uninstall rofi and install rofi-wayland . `sudo apt autoremove rofi` .
- Install rofi-wayland with - Install rofi-wayland with
```bash ```bash
cd ~/Debian-Hyprland cd ~/Debian-Hyprland
./install-scripts/rofi-wayland.sh ./install-scripts/rofi-wayland.sh
``` ```
- [ ] Rofi-wayland is compatible with x11 so no need to worry. - [ ] Rofi-wayland is compatible with x11 so no need to worry.
- [ ] Does not work in Debian Bookworm - [ ] Does not work in Debian Bookworm
@ -268,27 +267,27 @@ cd ~/Debian-Hyprland
- [ ] Installing SDDM if or any other Login Manager installed. See [`Issue 2 - SDDM`](https://github.com/JaKooLit/Debian-Hyprland/issues/2) - [ ] Installing SDDM if or any other Login Manager installed. See [`Issue 2 - SDDM`](https://github.com/JaKooLit/Debian-Hyprland/issues/2)
- [ ] network is down or become unmanaged [`This`](https://askubuntu.com/questions/71159/network-manager-says-device-not-managed) might help - [ ] network is down or become unmanaged [`This`](https://askubuntu.com/questions/71159/network-manager-says-device-not-managed) might help
#### 📒 Final Notes #### 📒 Final Notes
- join my discord channel [`Discord`](https://discord.com/invite/kool-tech-world) - join my discord channel [`Discord`](https://discord.com/invite/kool-tech-world)
- Feel free to copy, re-distribute, and use this script however you want. Would appreciate if you give me some loves by crediting my work :) - Feel free to copy, re-distribute, and use this script however you want. Would appreciate if you give me some loves by crediting my work :)
#### ✍️ Contributing #### ✍️ Contributing
- As stated above, these script does not contain actual config files. These are only the installer of packages - As stated above, these script does not contain actual config files. These are only the installer of packages
- If you want to contribute and/or test the Hyprland-Dotfiles (development branch), [`Hyprland-Dots-Development`](https://github.com/JaKooLit/Hyprland-Dots/tree/development) - If you want to contribute and/or test the Hyprland-Dotfiles (development branch), [`Hyprland-Dots-Development`](https://github.com/JaKooLit/Hyprland-Dots/tree/development)
- Want to contribute on KooL-Hyprland-Dots Click [`HERE`](https://github.com/JaKooLit/Hyprland-Dots/blob/main/CONTRIBUTING.md) for a guide how to contribute - Want to contribute on KooL-Hyprland-Dots Click [`HERE`](https://github.com/JaKooLit/Hyprland-Dots/blob/main/CONTRIBUTING.md) for a guide how to contribute
- Want to contribute on This Installer? Click [`HERE`](https://github.com/JaKooLit/Debian-Hyprland/blob/main/CONTRIBUTING.md) for a guide how to contribute - Want to contribute on This Installer? Click [`HERE`](https://github.com/JaKooLit/Debian-Hyprland/blob/main/CONTRIBUTING.md) for a guide how to contribute
#### 👍👍👍 Thanks and Credits
#### 👍👍👍 Thanks and Credits!
- [`Hyprland`](https://hyprland.org/) Of course to Hyprland and @vaxerski for this awesome Dynamic Tiling Manager. - [`Hyprland`](https://hyprland.org/) Of course to Hyprland and @vaxerski for this awesome Dynamic Tiling Manager.
### 💖 Support ### 💖 Support
- a Star on my Github repos would be nice 🌟 - 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 😊 - you can also give support through coffee's or btc 😊
@ -303,14 +302,10 @@ Or you can donate cryto on my btc wallet :)
![Bitcoin](https://github.com/user-attachments/assets/7ed32f8f-c499-46f0-a53c-3f6fbd343699) ![Bitcoin](https://github.com/user-attachments/assets/7ed32f8f-c499-46f0-a53c-3f6fbd343699)
#### 📹 Youtube videos (Click to view and watch the playlist) 📹 #### 📹 Youtube videos (Click to view and watch the playlist) 📹
[![Youtube Playlist Thumbnail](https://raw.githubusercontent.com/JaKooLit/screenshots/main/Youtube.png)](https://youtube.com/playlist?list=PLDtGd5Fw5_GjXCznR0BzCJJDIQSZJRbxx&si=iaNjLulFdsZ6AV-t) [![Youtube Playlist Thumbnail](https://raw.githubusercontent.com/JaKooLit/screenshots/main/Youtube.png)](https://youtube.com/playlist?list=PLDtGd5Fw5_GjXCznR0BzCJJDIQSZJRbxx&si=iaNjLulFdsZ6AV-t)
## 🥰🥰 💖💖 👍👍👍 ## 🥰🥰 💖💖 👍👍👍
[![Stargazers over time](https://starchart.cc/JaKooLit/Debian-Hyprland.svg?variant=adaptive)](https://starchart.cc/JaKooLit/Debian-Hyprland)
[![Stargazers over time](https://starchart.cc/JaKooLit/Debian-Hyprland.svg?variant=adaptive)](https://starchart.cc/JaKooLit/Debian-Hyprland)

View File

@ -0,0 +1,26 @@
diff --git a/hyprctl/main.cpp b/hyprctl/main.cpp
index daf8d4a8..62ab8578 100644
--- a/hyprctl/main.cpp
+++ b/hyprctl/main.cpp
@@ -268,7 +268,7 @@ int requestIPC(std::string_view filename, std::string_view arg) {
sockaddr_un serverAddress = {0};
serverAddress.sun_family = AF_UNIX;
- std::string socketPath = getRuntimeDir() + "/" + instanceSignature + "/" + filename;
+ std::string socketPath = getRuntimeDir() + "/" + std::string(instanceSignature) + "/" + std::string(filename);
strncpy(serverAddress.sun_path, socketPath.c_str(), sizeof(serverAddress.sun_path) - 1);
diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp
index 4e5c4080..1944f22e 100644
--- a/src/helpers/Monitor.cpp
+++ b/src/helpers/Monitor.cpp
@@ -549,7 +549,7 @@ bool CMonitor::applyMonitorRule(SMonitorRule* pMonitorRule, bool force) {
std::ranges::sort(sortedModes, sortFunc);
if (sortedModes.size() > 3)
sortedModes.erase(sortedModes.begin() + 3, sortedModes.end());
- requestedModes.insert_range(requestedModes.end(), sortedModes | std::views::reverse);
+ requestedModes.insert(requestedModes.end(), sortedModes.rbegin(), sortedModes.rend());
};
// last fallback is always preferred mode

View File

@ -1,5 +0,0 @@
[Desktop Entry]
Name=Hyprland
Comment=An intelligent dynamic tiling Wayland compositor
Exec=Hyprland
Type=Application

Binary file not shown.

0
auto-install.sh Normal file → Executable file
View File

151
dry-run-build.sh Executable file
View File

@ -0,0 +1,151 @@
#!/usr/bin/env bash
# Dry-run orchestrator for Hyprland and companion modules
# - Compiles components but skips installation (uses DRY_RUN=1)
# - Summarizes PASS/FAIL per module to Install-Logs/
#
# Usage:
# chmod +x ./dry-run-build.sh
# ./dry-run-build.sh # run full stack dry-run
# ./dry-run-build.sh --with-deps # install dependencies first, then dry-run build
# ./dry-run-build.sh --only hyprland # run a subset (comma-separated allowed)
# ./dry-run-build.sh --skip qtutils # skip one or more (comma-separated)
#
# Notes:
# - Run from the repository root. Do not cd into install-scripts/.
# - You can also call modules directly, e.g., DRY_RUN=1 ./install-scripts/hyprland.sh
set -u
set -o pipefail
REPO_ROOT=$(pwd)
LOG_DIR="$REPO_ROOT/Install-Logs"
mkdir -p "$LOG_DIR"
TS=$(date +%F-%H%M%S)
SUMMARY_LOG="$LOG_DIR/build-dry-run-$TS.log"
# Default module order (core first, then Hyprland)
DEFAULT_MODULES=(
hyprutils
hyprlang
wayland-protocols-src
aquamarine
hyprgraphics
hyprwayland-scanner
hyprland-protocols
hyprland-qt-support
hyprland-qtutils
hyprland
)
WITH_DEPS=0
ONLY_LIST=""
SKIP_LIST=""
usage() {
grep '^# ' "$0" | sed 's/^# \{0,1\}//'
}
# Parse args
while [[ $# -gt 0 ]]; do
case "$1" in
-h|--help)
usage
exit 0
;;
--with-deps)
WITH_DEPS=1
shift
;;
--only)
ONLY_LIST=${2:-}
shift 2
;;
--skip)
SKIP_LIST=${2:-}
shift 2
;;
*)
echo "Unknown argument: $1" >&2
exit 2
;;
esac
done
# Build module list based on --only/--skip
MODULES=()
if [[ -n "$ONLY_LIST" ]]; then
IFS=',' read -r -a MODULES <<< "$ONLY_LIST"
else
MODULES=("${DEFAULT_MODULES[@]}")
fi
if [[ -n "$SKIP_LIST" ]]; then
IFS=',' read -r -a _SKIPS <<< "$SKIP_LIST"
FILTERED=()
for m in "${MODULES[@]}"; do
skip_it=0
for s in "${_SKIPS[@]}"; do
if [[ "$m" == "$s" ]]; then
skip_it=1
break
fi
done
if [[ $skip_it -eq 0 ]]; then
FILTERED+=("$m")
fi
done
MODULES=("${FILTERED[@]}")
fi
# Optionally install dependencies (not a dry-run)
if [[ $WITH_DEPS -eq 1 ]]; then
echo "[INFO] Installing dependencies via 00-dependencies.sh" | tee -a "$SUMMARY_LOG"
if ! "$REPO_ROOT/install-scripts/00-dependencies.sh"; then
echo "[ERROR] Dependencies installation failed. See logs under Install-Logs/." | tee -a "$SUMMARY_LOG"
exit 1
fi
fi
# Run each module with DRY_RUN=1 and capture exit codes
declare -A RESULTS
echo "[INFO] Starting dry-run build at $TS" | tee -a "$SUMMARY_LOG"
for mod in "${MODULES[@]}"; do
script_path="$REPO_ROOT/install-scripts/$mod.sh"
echo "\n=== $mod (DRY RUN) ===" | tee -a "$SUMMARY_LOG"
if [[ ! -x "$script_path" ]]; then
# Try to make executable if it exists
if [[ -f "$script_path" ]]; then
chmod +x "$script_path" || true
fi
fi
if [[ ! -f "$script_path" ]]; then
echo "[WARN] Missing script: $script_path" | tee -a "$SUMMARY_LOG"
RESULTS[$mod]="MISSING"
continue
fi
if DRY_RUN=1 "$script_path"; then
RESULTS[$mod]="PASS"
else
RESULTS[$mod]="FAIL"
fi
done
# Summary
{
echo "\nSummary (dry-run):"
for mod in "${MODULES[@]}"; do
printf "%-24s %s\n" "$mod" "${RESULTS[$mod]:-SKIPPED}"
done
echo "\nLogs: individual module logs are under Install-Logs/. This summary: $SUMMARY_LOG"
} | tee -a "$SUMMARY_LOG"
# Exit non-zero if any FAIL occurred
failed=0
for mod in "${MODULES[@]}"; do
if [[ "${RESULTS[$mod]:-}" == "FAIL" ]]; then
failed=1
fi
done
exit $failed

15
hypr-tags.env Normal file
View File

@ -0,0 +1,15 @@
# Central tag overrides for the Hyprland stack
# You can edit these values or let update-hyprland.sh manage them.
# Each module script reads its TAG from these environment variables if set.
HYPRLAND_TAG=v0.52.2
AQUAMARINE_TAG=v0.10.0
HYPRUTILS_TAG=v0.10.4
HYPRLANG_TAG=v0.6.7
HYPRGRAPHICS_TAG=v0.4.0
HYPRTOOLKIT_TAG=v0.4.1
HYPRWAYLAND_SCANNER_TAG=v0.4.5
HYPRLAND_PROTOCOLS_TAG=v0.7.0
HYPRLAND_QT_SUPPORT_TAG=v0.1.0
HYPRLAND_GUIUTILS_TAG=v0.2.0
WAYLAND_PROTOCOLS_TAG=1.46

View File

@ -3,7 +3,6 @@
# main dependencies # # main dependencies #
# 22 Aug 2024 - NOTE will trim this more down # 22 Aug 2024 - NOTE will trim this more down
# packages neeeded # packages neeeded
dependencies=( dependencies=(
build-essential build-essential
@ -13,14 +12,77 @@ dependencies=(
findutils findutils
gawk gawk
gettext gettext
gir1.2-graphene-1.0
git git
glslang-tools glslang-tools
gobject-introspection gobject-introspection
golang golang
hwdata hwdata
jq jq
libavcodec-dev
libavformat-dev
libavutil-dev
libcairo2-dev
libdeflate-dev
libdisplay-info-dev
libdrm-dev
libegl-dev libegl-dev
libegl1-mesa-dev libegl1-mesa-dev
libgbm-dev
libgdk-pixbuf-2.0-dev
libgdk-pixbuf2.0-bin
libgirepository1.0-dev
libgl1-mesa-dev
libgraphene-1.0-0
libgraphene-1.0-dev
libgtk-3-dev
libgulkan-0.15-0t64
libgulkan-dev
libinih-dev
libiniparser-dev
libinput-dev
libjbig-dev
libjpeg-dev
libjpeg62-turbo-dev
liblerc-dev
libliftoff-dev
liblzma-dev
libnotify-bin
libpam0g-dev
libpango1.0-dev
libpipewire-0.3-dev
libqt6svg6
libsdbus-c++-dev
libseat-dev
libstartup-notification0-dev
libswresample-dev
libsystemd-dev
libtiff-dev
libtiffxx6
libtomlplusplus-dev
libudev-dev
libvkfft-dev
libvulkan-dev
libvulkan-volk-dev
libwayland-dev
libwebp-dev
libxcb-composite0-dev
libxcb-cursor-dev
libxcb-dri3-dev
libxcb-ewmh-dev
libxcb-icccm4-dev
libxcb-present-dev
libxcb-render-util0-dev
libxcb-res0-dev
libxcb-util-dev
libxcb-xinerama0-dev
libxcb-xinput-dev
libxcb-xkb-dev
libxkbcommon-dev
libxkbcommon-x11-dev
libxkbregistry-dev
libxml2-dev
libxxhash-dev
meson meson
ninja-build ninja-build
openssl openssl
@ -28,13 +90,15 @@ dependencies=(
python3-mako python3-mako
python3-markdown python3-markdown
python3-markupsafe python3-markupsafe
python3-yaml
python3-pyquery python3-pyquery
python3-yaml
qt6-base-dev qt6-base-dev
scdoc
seatd
spirv-tools spirv-tools
unzip unzip
vulkan-validationlayers
vulkan-utility-libraries-dev vulkan-utility-libraries-dev
vulkan-validationlayers
wayland-protocols wayland-protocols
xdg-desktop-portal xdg-desktop-portal
xwayland xwayland
@ -45,31 +109,46 @@ hyprland_dep=(
bc bc
binutils binutils
libc6 libc6
libcairo2 libcairo2-dev
libdisplay-info2 libdisplay-info3
libdrm2 libdrm2
libhyprcursor-dev libjpeg-dev
libhyprlang-dev libjxl-dev
libhyprutils-dev libmagic-dev
libpixman-1-dev
libpugixml-dev
libre2-dev
librsvg2-dev
libspng-dev
libtomlplusplus-dev
libwebp-dev
libzip-dev
libpam0g-dev libpam0g-dev
hyprcursor-util libxcursor-dev
qt6-declarative-dev
qt6-base-private-dev
qt6-wayland-dev
qt6-wayland-private-dev
) )
build_dep=( build_dep=(
wlroots wlroots
) )
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ## ## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Change the working directory to the parent directory of the script # Change the working directory to the parent directory of the script
PARENT_DIR="$SCRIPT_DIR/.." PARENT_DIR="$SCRIPT_DIR/.."
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; } cd "$PARENT_DIR" || {
echo "${ERROR} Failed to change directory to $PARENT_DIR"
exit 1
}
# Source the global functions script # Source the global functions script
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
echo "Failed to source Global_functions.sh" echo "Failed to source Global_functions.sh"
exit 1 exit 1
fi fi
# Set the name of the log file to include the current date and time # Set the name of the log file to include the current date and time
@ -79,13 +158,13 @@ LOG="Install-Logs/install-$(date +%d-%H%M%S)_dependencies.log"
printf "\n%s - Installing ${SKY_BLUE}main dependencies....${RESET} \n" "${NOTE}" printf "\n%s - Installing ${SKY_BLUE}main dependencies....${RESET} \n" "${NOTE}"
for PKG1 in "${dependencies[@]}" "${hyprland_dep[@]}"; do for PKG1 in "${dependencies[@]}" "${hyprland_dep[@]}"; do
install_package "$PKG1" "$LOG" install_package "$PKG1" "$LOG"
done done
printf "\n%.0s" {1..1} printf "\n%.0s" {1..1}
for PKG1 in "${build_dep[@]}"; do for PKG1 in "${build_dep[@]}"; do
build_dep "$PKG1" "$LOG" build_dep "$PKG1" "$LOG"
done done
printf "\n%.0s" {1..2} printf "\n%.0s" {1..2}

View File

@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# 💫 https://github.com/JaKooLit 💫 # # 💫 https://github.com/JaKooLit 💫 #
# Hyprland-Dots Packages # # Hyprland-Dots Packages #
# edit your packages desired here. # edit your packages desired here.
# WARNING! If you remove packages here, dotfiles may not work properly. # WARNING! If you remove packages here, dotfiles may not work properly.
# and also, ensure that packages are present in Debian Official Repo # and also, ensure that packages are present in Debian Official Repo
@ -27,7 +27,7 @@ hypr_package=(
python3-pip python3-pip
qt5ct qt5ct
qt5-style-kvantum qt5-style-kvantum
qt5-style-kvantum-themes qt-style-kvantum-themes
qt6ct qt6ct
slurp slurp
swappy swappy
@ -60,10 +60,10 @@ hypr_package_2=(
qalculate-gtk qalculate-gtk
) )
# packages to force reinstall # packages to force reinstall
force=( force=(
imagemagick imagemagick
wayland-protocols wayland-protocols
) )
# List of packages to uninstall as it conflicts with swaync or causing swaync to not function properly # List of packages to uninstall as it conflicts with swaync or causing swaync to not function properly
@ -75,16 +75,19 @@ uninstall=(
) )
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ## ## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Change the working directory to the parent directory of the script # Change the working directory to the parent directory of the script
PARENT_DIR="$SCRIPT_DIR/.." PARENT_DIR="$SCRIPT_DIR/.."
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; } cd "$PARENT_DIR" || {
echo "${ERROR} Failed to change directory to $PARENT_DIR"
exit 1
}
# Source the global functions script # Source the global functions script
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
echo "Failed to source Global_functions.sh" echo "Failed to source Global_functions.sh"
exit 1 exit 1
fi fi
# Set the name of the log file to include the current date and time # Set the name of the log file to include the current date and time
@ -94,14 +97,14 @@ LOG="Install-Logs/install-$(date +%d-%H%M%S)_hypr-pkgs.log"
overall_failed=0 overall_failed=0
printf "\n%s - ${SKY_BLUE}Removing some packages${RESET} as it conflicts with KooL's Hyprland Dots \n" "${NOTE}" printf "\n%s - ${SKY_BLUE}Removing some packages${RESET} as it conflicts with KooL's Hyprland Dots \n" "${NOTE}"
for PKG in "${uninstall[@]}"; do for PKG in "${uninstall[@]}"; do
uninstall_package "$PKG" 2>&1 | tee -a "$LOG" uninstall_package "$PKG" 2>&1 | tee -a "$LOG"
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
overall_failed=1 overall_failed=1
fi fi
done done
if [ $overall_failed -ne 0 ]; then if [ $overall_failed -ne 0 ]; then
echo -e "${ERROR} Some packages failed to uninstall. Please check the log." echo -e "${ERROR} Some packages failed to uninstall. Please check the log."
fi fi
printf "\n%.0s" {1..1} printf "\n%.0s" {1..1}
@ -110,24 +113,24 @@ printf "\n%.0s" {1..1}
printf "\n%s - Installing ${SKY_BLUE}KooL's hyprland necessary packages${RESET} .... \n" "${NOTE}" printf "\n%s - Installing ${SKY_BLUE}KooL's hyprland necessary packages${RESET} .... \n" "${NOTE}"
for PKG1 in "${hypr_package[@]}" "${hypr_package_2[@]}" "${Extra[@]}"; do for PKG1 in "${hypr_package[@]}" "${hypr_package_2[@]}" "${Extra[@]}"; do
install_package "$PKG1" "$LOG" install_package "$PKG1" "$LOG"
done done
printf "\n%.0s" {1..1} printf "\n%.0s" {1..1}
for PKG2 in "${force[@]}"; do for PKG2 in "${force[@]}"; do
re_install_package "$PKG2" "$LOG" re_install_package "$PKG2" "$LOG"
done done
printf "\n%.0s" {1..1} printf "\n%.0s" {1..1}
# install YAD from assets. NOTE This is downloaded from SID repo and sometimes # install YAD from assets. NOTE This is downloaded from SID repo and sometimes
# Trixie is removing YAD for some strange reasons # Trixie is removing YAD for some strange reasons
# Check if yad is installed # Check if yad is installed
if ! command -v yad &> /dev/null; then if ! command -v yad &>/dev/null; then
echo "${INFO} Installing ${YELLOW}YAD from assets${RESET} ..." echo "${INFO} Installing ${YELLOW}YAD from assets${RESET} ..."
sudo dpkg -i assets/yad_0.40.0-1+b2_amd64.deb sudo dpkg -i assets/yad_0.40.0-1+b2_amd64.deb
sudo apt install -f -y sudo apt install -f -y
echo "${INFO} ${YELLOW}YAD from assets${RESET} succesfully installed ..." echo "${INFO} ${YELLOW}YAD from assets${RESET} succesfully installed ..."
fi fi
printf "\n%.0s" {1..2} printf "\n%.0s" {1..2}
@ -141,3 +144,4 @@ source "$HOME/.cargo/env"
sudo chmod +s $(which brightnessctl) 2>&1 | tee -a "$LOG" || true sudo chmod +s $(which brightnessctl) 2>&1 | tee -a "$LOG" || true
printf "\n%.0s" {1..2} printf "\n%.0s" {1..2}

35
install-scripts/02-pre-cleanup.sh Normal file → Executable file
View File

@ -9,10 +9,6 @@ TARGET_DIR="/usr/local/bin"
# Define packages to manually remove (was manually installed previously) # Define packages to manually remove (was manually installed previously)
PACKAGES=( PACKAGES=(
hyprctl
hyprpm
hyprland
Hyprland
cliphist cliphist
pypr pypr
swappy swappy
@ -20,6 +16,20 @@ PACKAGES=(
magick magick
) )
# List of packages installed from Debian-Hyprland repo
uninstall=(
hyprland
xdg-desktop-portal-hyprland
libhhyprland-dev
libhyprutils-dev
libhyprutils0
hyprwayland-scanner
hyprland-protocols
hyprctl
hyprpm
Hyprland
)
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ## ## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
@ -51,4 +61,19 @@ for PKG_NAME in "${PACKAGES[@]}"; do
fi fi
done done
clear
# packages removal installed from Debian-Hyprland repo
overall_failed=0
printf "\n%s - ${SKY_BLUE}Removing some packages${RESET} installed from Debian Hyprland official repo \n" "${NOTE}"
for PKG in "${uninstall[@]}"; do
uninstall_package "$PKG" 2>&1 | tee -a "$LOG"
if [ $? -ne 0 ]; then
overall_failed=1
fi
done
if [ $overall_failed -ne 0 ]; then
echo -e "${ERROR} Some packages failed to uninstall. Please check the log."
fi
printf "\n%.0s" {1..1}

2
install-scripts/03-Final-Check.sh Normal file → Executable file
View File

@ -11,11 +11,11 @@ packages=(
cliphist cliphist
wlogout wlogout
kitty kitty
hyprland
) )
# Local packages that should be in /usr/local/bin/ # Local packages that should be in /usr/local/bin/
local_pkgs_installed=( local_pkgs_installed=(
hyprland
rofi rofi
hypridle hypridle
hyprlock hyprlock

View File

@ -8,12 +8,20 @@ ags=(
meson meson
libgjs-dev libgjs-dev
gjs gjs
gobject-introspection
libgirepository1.0-dev
gir1.2-gtk-4.0
gir1.2-gtklayershell-0.1
libgtk-layer-shell-dev libgtk-layer-shell-dev
libgtk-3-dev libgtk-3-dev
libadwaita-1-dev
libpam0g-dev libpam0g-dev
libpulse-dev libpulse-dev
libdbusmenu-gtk3-dev libdbusmenu-gtk3-dev
libsoup-3.0-dev libsoup-3.0-dev
ninja-build
build-essential
pkg-config
) )
f_ags=( f_ags=(
@ -46,11 +54,20 @@ MLOG="install-$(date +%d-%H%M%S)_ags2.log"
# Check if AGS is installed # Check if AGS is installed
if command -v ags &>/dev/null; then if command -v ags &>/dev/null; then
AGS_VERSION=$(ags -v | awk '{print $NF}') AGS_VERSION=$(ags -v | awk '{print $NF}')
if [[ "$AGS_VERSION" == "1.9.0" ]]; then if [[ "$AGS_VERSION" == "1.9.0" ]]; then
printf "${INFO} ${MAGENTA}Aylur's GTK Shell v1.9.0${RESET} is already installed. Skipping installation." printf "${INFO} ${MAGENTA}Aylur's GTK Shell v1.9.0${RESET} is already installed.\n"
printf "\n%.0s" {1..2} read -r -p "Reinstall v1.9.0 anyway? [y/N]: " REPLY
exit 0 case "$REPLY" in
[yY]|[yY][eE][sS])
printf "${NOTE} Reinstalling Aylur's GTK Shell v1.9.0...\n"
;;
*)
printf "Skipping reinstallation.\n"
printf "\n%.0s" {1..2}
exit 0
;;
esac
fi fi
fi fi
@ -78,11 +95,13 @@ sudo npm install --global typescript 2>&1 | tee -a "$LOG"
# ags v1 # ags v1
printf "${NOTE} Install and Compiling ${SKY_BLUE}Aylur's GTK shell $ags_tag${RESET}..\n" printf "${NOTE} Install and Compiling ${SKY_BLUE}Aylur's GTK shell $ags_tag${RESET}..\n"
# Check if directory exists and remove it # Remove previous sources (both legacy "ags" and tagged "ags_v1.9.0")
if [ -d "ags" ]; then for SRC_DIR in "ags" "ags_v1.9.0"; do
printf "${NOTE} Removing existing ags directory...\n" if [ -d "$SRC_DIR" ]; then
rm -rf "ags" printf "${NOTE} Removing existing %s directory...\\n" "$SRC_DIR"
fi rm -rf "$SRC_DIR"
fi
done
printf "\n%.0s" {1..1} printf "\n%.0s" {1..1}
printf "${INFO} Kindly Standby...cloning and compiling ${SKY_BLUE}Aylur's GTK shell $ags_tag${RESET}...\n" printf "${INFO} Kindly Standby...cloning and compiling ${SKY_BLUE}Aylur's GTK shell $ags_tag${RESET}...\n"
@ -94,6 +113,92 @@ if git clone --depth=1 https://github.com/JaKooLit/ags_v1.9.0.git; then
meson setup build meson setup build
if sudo meson install -C build 2>&1 | tee -a "$MLOG"; then if sudo meson install -C build 2>&1 | tee -a "$MLOG"; then
printf "\n${OK} ${YELLOW}Aylur's GTK shell $ags_tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG" printf "\n${OK} ${YELLOW}Aylur's GTK shell $ags_tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
# Patch installed AGS launchers to ensure GI typelibs in /usr/local/lib are discoverable in GJS ESM
printf "${NOTE} Applying AGS launcher patch for GI typelibs search path...\n"
patch_ags_launcher() {
local target="$1"
if ! sudo test -f "$target"; then
return 1
fi
# 1) Remove deprecated GIR Repository path tweaks and GIRepository import (harmless if absent)
sudo sed -i \
-e '/Repository\.prepend_search_path/d' \
-e '/Repository\.prepend_library_path/d' \
-e '/gi:\/\/GIRepository/d' \
"$target"
# 2) Ensure GLib import exists (insert after first import line, or at top if none)
if ! sudo grep -q '^import GLib from "gi://GLib";' "$target"; then
TMPF=$(sudo mktemp)
sudo awk 'BEGIN{added=0} {
if (!added && $0 ~ /^import /) { print; print "import GLib from \"gi://GLib\";"; added=1; next }
print
} END { if (!added) print "import GLib from \"gi://GLib\";" }' "$target" | sudo tee "$TMPF" >/dev/null
sudo mv "$TMPF" "$target"
fi
# 3) Inject GI_TYPELIB_PATH export right after the GLib import (once)
if ! sudo grep -q 'GLib.setenv("GI_TYPELIB_PATH"' "$target"; then
TMPF=$(sudo mktemp)
sudo awk '{print} $0 ~ /^import GLib from "gi:\/\/GLib";$/ {print "const __old = GLib.getenv(\"GI_TYPELIB_PATH\");"; print "GLib.setenv(\"GI_TYPELIB_PATH\", \"/usr/local/lib/x86_64-linux-gnu:/usr/local/lib64:/usr/local/lib:/usr/local/lib64/girepository-1.0:/usr/local/lib/girepository-1.0:/usr/local/lib/x86_64-linux-gnu/girepository-1.0:/usr/lib/x86_64-linux-gnu/girepository-1.0:/usr/lib/girepository-1.0:/usr/lib/ags:/usr/local/lib/ags:/usr/lib64/ags\" + (__old ? \":\" + __old : \"\"), true);"; print "const __oldld = GLib.getenv(\"LD_LIBRARY_PATH\");"; print "GLib.setenv(\"LD_LIBRARY_PATH\", \"/usr/local/lib/x86_64-linux-gnu:/usr/local/lib64:/usr/local/lib\" + (__oldld ? \":\" + __oldld : \"\"), true);"}' "$target" | sudo tee "$TMPF" >/dev/null
sudo mv "$TMPF" "$target"
fi
# 4) Ensure LD_LIBRARY_PATH export exists even if GI_TYPELIB_PATH was already present
if ! sudo grep -q 'GLib.setenv("LD_LIBRARY_PATH"' "$target"; then
TMPF=$(sudo mktemp)
sudo awk '{print} $0 ~ /^import GLib from "gi:\/\/GLib";$/ {print "const __oldld = GLib.getenv(\"LD_LIBRARY_PATH\");"; print "GLib.setenv(\"LD_LIBRARY_PATH\", \"/usr/local/lib64:/usr/local/lib\" + (__oldld ? \":\" + __oldld : \"\"), true);"}' "$target" | sudo tee "$TMPF" >/dev/null
sudo mv "$TMPF" "$target"
fi
# Restore executable bit for bin wrappers (mv from mktemp resets mode to 0600)
case "$target" in
*/bin/ags)
sudo chmod 0755 "$target" || true
;;
esac
printf "${OK} Patched: %s\n" "$target"
return 0
}
# Try common locations
for CAND in \
"/usr/local/share/com.github.Aylur.ags/com.github.Aylur.ags" \
"/usr/share/com.github.Aylur.ags/com.github.Aylur.ags" \
"/usr/local/bin/ags" \
"/usr/bin/ags"; do
patch_ags_launcher "$CAND" || true
done
# Create an env-setting wrapper for AGS to ensure GI typelibs/libs are discoverable
printf "${NOTE} Creating env wrapper /usr/local/bin/ags...\n"
sudo tee /usr/local/bin/ags >/dev/null <<'WRAP'
#!/usr/bin/env bash
set -euo pipefail
cd "$HOME" 2>/dev/null || true
# Locate AGS ESM entry
MAIN_JS="/usr/local/share/com.github.Aylur.ags/com.github.Aylur.ags"
if [ ! -f "$MAIN_JS" ]; then
MAIN_JS="/usr/share/com.github.Aylur.ags/com.github.Aylur.ags"
fi
if [ ! -f "$MAIN_JS" ]; then
echo "Unable to find AGS entry script (com.github.Aylur.ags) in /usr/local/share or /usr/share" >&2
exit 1
fi
# Ensure GI typelibs and native libs are discoverable before gjs ESM loads
export GI_TYPELIB_PATH="/usr/local/lib/x86_64-linux-gnu:/usr/local/lib64:/usr/local/lib:/usr/local/lib64/girepository-1.0:/usr/local/lib/girepository-1.0:/usr/local/lib/x86_64-linux-gnu/girepository-1.0:/usr/lib/x86_64-linux-gnu/girepository-1.0:/usr/lib/girepository-1.0:/usr/lib64/girepository-1.0:/usr/lib/ags:/usr/local/lib/ags:/usr/lib64/ags:${GI_TYPELIB_PATH-}"
export LD_LIBRARY_PATH="/usr/local/lib/x86_64-linux-gnu:/usr/local/lib64:/usr/local/lib:${LD_LIBRARY_PATH-}"
exec /usr/bin/gjs -m "$MAIN_JS" "$@"
WRAP
sudo chmod 0755 /usr/local/bin/ags
# Ensure ESM entry is readable by gjs
sudo chmod 0644 /usr/local/share/com.github.Aylur.ags/com.github.Aylur.ags 2>/dev/null || true
sudo chmod 0644 /usr/share/com.github.Aylur.ags/com.github.Aylur.ags 2>/dev/null || true
printf "${OK} AGS wrapper installed at /usr/local/bin/ags\n"
else else
echo -e "\n${ERROR} ${YELLOW}Aylur's GTK shell $ags_tag${RESET} Installation failed\n " 2>&1 | tee -a "$MLOG" echo -e "\n${ERROR} ${YELLOW}Aylur's GTK shell $ags_tag${RESET} Installation failed\n " 2>&1 | tee -a "$MLOG"
fi fi
@ -106,4 +211,4 @@ else
exit 1 exit 1
fi fi
printf "\n%.0s" {1..2} printf "\n%.0s" {1..2}

66
install-scripts/aquamarine.sh Executable file
View File

@ -0,0 +1,66 @@
#!/bin/bash
# 💫 https://github.com/JaKooLit 💫 #
# Hypr Ecosystem #
# aquamarine #
#specific branch or release
tag="v0.10.0"
# Allow environment override
if [ -n "${AQUAMARINE_TAG:-}" ]; then tag="$AQUAMARINE_TAG"; fi
# Dry-run support
DO_INSTALL=1
if [ "$1" = "--dry-run" ] || [ "${DRY_RUN}" = "1" ] || [ "${DRY_RUN}" = "true" ]; then
DO_INSTALL=0
echo "${NOTE} DRY RUN: install step will be skipped."
fi
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# Change the working directory to the parent directory of the script
PARENT_DIR="$SCRIPT_DIR/.."
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
# Source the global functions script
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
echo "Failed to source Global_functions.sh"
exit 1
fi
# Set the name of the log file to include the current date and time
LOG="Install-Logs/install-$(date +%d-%H%M%S)_aquamarine.log"
MLOG="install-$(date +%d-%H%M%S)_aquamarine.log"
# Installation of dependencies
printf "\n%s - Installing ${YELLOW}aquamarine dependencies${RESET} .... \n" "${INFO}"
# Check if aquamarinedirectory exists and remove it
if [ -d "aquamarine" ]; then
rm -rf "aquamarine"
fi
# Clone and build
printf "${INFO} Installing ${YELLOW}aquamarine $tag${RESET} ...\n"
if git clone --recursive -b $tag https://github.com/hyprwm/aquamarine.git; then
cd aquamarine || exit 1
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr/local -S . -B ./build
cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
if [ $DO_INSTALL -eq 1 ]; then
if sudo cmake --install ./build 2>&1 | tee -a "$MLOG" ; then
printf "${OK} ${MAGENTA}aquamarine $tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
else
echo -e "${ERROR} Installation failed for ${YELLOW}aquamarine $tag${RESET}" 2>&1 | tee -a "$MLOG"
fi
else
echo "${NOTE} DRY RUN: Skipping installation of aquamarine $tag."
fi
#moving the addional logs to Install-Logs directory
[ -f "$MLOG" ] && mv "$MLOG" ../Install-Logs/
cd ..
else
echo -e "${ERROR} Download failed for ${YELLOW}aquamarine $tag${RESET}" 2>&1 | tee -a "$LOG"
fi
printf "\n%.0s" {1..2}

View File

@ -3,19 +3,22 @@
# Hyprland-Dots to download from main # # Hyprland-Dots to download from main #
#specific branch or release #specific branch or release
dots_tag="Deb-Untu-Dots" dots_tag="main"
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ## ## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Change the working directory to the parent directory of the script # Change the working directory to the parent directory of the script
PARENT_DIR="$SCRIPT_DIR/.." PARENT_DIR="$SCRIPT_DIR/.."
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; } cd "$PARENT_DIR" || {
echo "${ERROR} Failed to change directory to $PARENT_DIR"
exit 1
}
# Source the global functions script # Source the global functions script
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
echo "Failed to source Global_functions.sh" echo "Failed to source Global_functions.sh"
exit 1 exit 1
fi fi
# Check if Hyprland-Dots exists # Check if Hyprland-Dots exists
@ -23,18 +26,18 @@ printf "${NOTE} Cloning and Installing ${SKY_BLUE}KooL's Hyprland Dots for Debia
# Check if Hyprland-Dots exists # Check if Hyprland-Dots exists
if [ -d Hyprland-Dots-Debian ]; then if [ -d Hyprland-Dots-Debian ]; then
cd Hyprland-Dots-Debian cd Hyprland-Dots-Debian
git stash && git pull git stash && git pull
chmod +x copy.sh
./copy.sh
else
if git clone --depth=1 -b $dots_tag https://github.com/JaKooLit/Hyprland-Dots Hyprland-Dots-Debian; then
cd Hyprland-Dots-Debian || exit 1
chmod +x copy.sh chmod +x copy.sh
./copy.sh ./copy.sh
else else
echo -e "$ERROR Can't download ${YELLOW}KooL's Hyprland-Dots-Debian${RESET}" if git clone --depth=1 https://github.com/JaKooLit/Hyprland-Dots Hyprland-Dots-Debian; then
fi cd Hyprland-Dots-Debian || exit 1
chmod +x copy.sh
./copy.sh
else
echo -e "$ERROR Can't download ${YELLOW}KooL's Hyprland-Dots-Debian${RESET}"
fi
fi fi
printf "\n%.0s" {1..2} printf "\n%.0s" {1..2}

View File

@ -3,7 +3,8 @@
# Hyprland-Dots to download a specific release # # Hyprland-Dots to download a specific release #
# Define the specific release version to download # Define the specific release version to download
specific_version="v2.3.3-Deb-Untu-Hyprland-0.41.2" specific_version="v2.3.16"
#specific_version="v2.3.3-Deb-Untu-Hyprland-0.41.2"
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ## ## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
@ -13,9 +14,9 @@ printf "${NOTE} Downloading / Checking for existing Hyprland-Dots-${specific_ver
# Check if the specific release tarball exists # Check if the specific release tarball exists
if [ -f "Hyprland-Dots-${specific_version}.tar.gz" ]; then if [ -f "Hyprland-Dots-${specific_version}.tar.gz" ]; then
printf "${NOTE} Hyprland-Dots-${specific_version}.tar.gz found.\n" printf "${NOTE} Hyprland-Dots-${specific_version}.tar.gz found.\n"
echo -e "${OK} Hyprland-Dots-${specific_version}.tar.gz is already downloaded." echo -e "${OK} Hyprland-Dots-${specific_version}.tar.gz is already downloaded."
exit 0 exit 0
fi fi
printf "${NOTE} Downloading the Hyprland-Dots-${specific_version} source code release...\n" printf "${NOTE} Downloading the Hyprland-Dots-${specific_version} source code release...\n"
@ -23,8 +24,8 @@ printf "${NOTE} Downloading the Hyprland-Dots-${specific_version} source code re
# Fetch the tag name for the specific release using the GitHub API # Fetch the tag name for the specific release using the GitHub API
release_info=$(curl -s "https://api.github.com/repos/JaKooLit/Hyprland-Dots/releases/tags/${specific_version}") release_info=$(curl -s "https://api.github.com/repos/JaKooLit/Hyprland-Dots/releases/tags/${specific_version}")
if [ -z "$release_info" ]; then if [ -z "$release_info" ]; then
echo -e "${ERROR} Unable to fetch information for release ${specific_version}." 2>&1 | tee -a "../Install-Logs/install-$(date +'%d-%H%M%S')_dotfiles.log" echo -e "${ERROR} Unable to fetch information for release ${specific_version}." 2>&1 | tee -a "../Install-Logs/install-$(date +'%d-%H%M%S')_dotfiles.log"
exit 1 exit 1
fi fi
# Get the tarball URL for the specific release # Get the tarball URL for the specific release
@ -32,34 +33,34 @@ tarball_url=$(echo "$release_info" | grep "tarball_url" | cut -d '"' -f 4)
# Check if the URL is obtained successfully # Check if the URL is obtained successfully
if [ -z "$tarball_url" ]; then if [ -z "$tarball_url" ]; then
echo -e "${ERROR} Unable to fetch the tarball URL for release ${specific_version}." 2>&1 | tee -a "../Install-Logs/install-$(date +'%d-%H%M%S')_dotfiles.log" echo -e "${ERROR} Unable to fetch the tarball URL for release ${specific_version}." 2>&1 | tee -a "../Install-Logs/install-$(date +'%d-%H%M%S')_dotfiles.log"
exit 1 exit 1
fi fi
# Download the specific release source code tarball to the current directory # Download the specific release source code tarball to the current directory
if curl -L "$tarball_url" -o "Hyprland-Dots-${specific_version}.tar.gz"; then if curl -L "$tarball_url" -o "Hyprland-Dots-${specific_version}.tar.gz"; then
# Extract the contents of the tarball # Extract the contents of the tarball
tar -xzf "Hyprland-Dots-${specific_version}.tar.gz" || exit 1 tar -xzf "Hyprland-Dots-${specific_version}.tar.gz" || exit 1
# Delete existing Hyprland-Dots # Delete existing Hyprland-Dots
rm -rf JaKooLit-Hyprland-Dots rm -rf JaKooLit-Hyprland-Dots
# Identify the extracted directory # Identify the extracted directory
extracted_directory=$(tar -tf "Hyprland-Dots-${specific_version}.tar.gz" | grep -o '^[^/]\+' | uniq) extracted_directory=$(tar -tf "Hyprland-Dots-${specific_version}.tar.gz" | grep -o '^[^/]\+' | uniq)
# Rename the extracted directory to JaKooLit-Hyprland-Dots # Rename the extracted directory to JaKooLit-Hyprland-Dots
mv "$extracted_directory" JaKooLit-Hyprland-Dots || exit 1 mv "$extracted_directory" JaKooLit-Hyprland-Dots || exit 1
cd "JaKooLit-Hyprland-Dots" || exit 1 cd "JaKooLit-Hyprland-Dots" || exit 1
# Set execute permission for copy.sh and execute it # Set execute permission for copy.sh and execute it
chmod +x copy.sh chmod +x copy.sh
./copy.sh ./copy.sh
echo -e "${OK} Hyprland-Dots-${specific_version} release downloaded, extracted, and processed successfully. Check JaKooLit-Hyprland-Dots directory for more detailed install logs" 2>&1 | tee -a "../Install-Logs/install-$(date +'%d-%H%M%S')_dotfiles.log" echo -e "${OK} Hyprland-Dots-${specific_version} release downloaded, extracted, and processed successfully. Check JaKooLit-Hyprland-Dots directory for more detailed install logs" 2>&1 | tee -a "../Install-Logs/install-$(date +'%d-%H%M%S')_dotfiles.log"
else else
echo -e "${ERROR} Failed to download Hyprland-Dots-${specific_version} release." 2>&1 | tee -a "../Install-Logs/install-$(date +'%d-%H%M%S')_dotfiles.log" echo -e "${ERROR} Failed to download Hyprland-Dots-${specific_version} release." 2>&1 | tee -a "../Install-Logs/install-$(date +'%d-%H%M%S')_dotfiles.log"
exit 1 exit 1
fi fi
clear clear

68
install-scripts/hyprcursor.sh Executable file
View File

@ -0,0 +1,68 @@
#!/bin/bash
# 💫 https://github.com/JaKooLit 💫 #
# Hypr Ecosystem #
# hyprcursor #
cursor=(
libzip-dev
librsvg2-dev
)
#specific branch or release
tag="v0.1.13"
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# Change the working directory to the parent directory of the script
PARENT_DIR="$SCRIPT_DIR/.."
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
# Source the global functions script
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
echo "Failed to source Global_functions.sh"
exit 1
fi
# Set the name of the log file to include the current date and time
LOG="Install-Logs/install-$(date +%d-%H%M%S)_hyprcursor.log"
MLOG="install-$(date +%d-%H%M%S)_hyprcursor.log"
# Installation of dependencies
printf "\n%s - Installing hyprcursor dependencies.... \n" "${NOTE}"
for PKG1 in "${cursor[@]}"; do
install_package "$PKG1" 2>&1 | tee -a "$LOG"
if [ $? -ne 0 ]; then
echo -e "\e[1A\e[K${ERROR} - $PKG1 Package installation failed, Please check the installation logs"
exit 1
fi
done
# Check if hyprcursor folder exists and remove it
if [ -d "hyprcursor" ]; then
printf "${NOTE} Removing existing hyprcursor folder...\n"
rm -rf "hyprcursor"
fi
# Clone and build
printf "${NOTE} Installing hyprcursor...\n"
if git clone --recursive -b $tag https://github.com/hyprwm/hyprcursor.git; then
cd hyprcursor || exit 1
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -S . -B ./build
cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
if sudo cmake --install ./build 2>&1 | tee -a "$MLOG" ; then
printf "${OK} hyprcursor installed successfully.\n" 2>&1 | tee -a "$MLOG"
else
echo -e "${ERROR} Installation failed for hyprcursor." 2>&1 | tee -a "$MLOG"
fi
#moving the addional logs to Install-Logs directory
mv $MLOG ../Install-Logs/ || true
cd ..
else
echo -e "${ERROR} Download failed for hyprcursor." 2>&1 | tee -a "$LOG"
fi
printf "\n%.0s" {1..2}

78
install-scripts/hyprgraphics.sh Executable file
View File

@ -0,0 +1,78 @@
#!/bin/bash
# 💫 https://github.com/JaKooLit 💫 #
# Hypr Ecosystem #
# hyprgraphics #
hyprgraphics=(
libmagic
)
#specific branch or release
tag="v0.4.0"
# Allow environment override
if [ -n "${HYPRGRAPHICS_TAG:-}" ]; then tag="$HYPRGRAPHICS_TAG"; fi
# Dry-run support
DO_INSTALL=1
if [ "$1" = "--dry-run" ] || [ "${DRY_RUN}" = "1" ] || [ "${DRY_RUN}" = "true" ]; then
DO_INSTALL=0
echo "${NOTE} DRY RUN: install step will be skipped."
fi
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# Change the working directory to the parent directory of the script
PARENT_DIR="$SCRIPT_DIR/.."
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
# Source the global functions script
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
echo "Failed to source Global_functions.sh"
exit 1
fi
# Set the name of the log file to include the current date and time
LOG="Install-Logs/install-$(date +%d-%H%M%S)_hyprgraphics.log"
MLOG="install-$(date +%d-%H%M%S)_hyprgraphics2.log"
# Installation of dependencies
printf "\n%s - Installing ${YELLOW}hyprgraphics dependencies${RESET} .... \n" "${INFO}"
for PKG1 in "${hyprgraphics[@]}"; do
re_install_package "$PKG1" 2>&1 | tee -a "$LOG"
if [ $? -ne 0 ]; then
echo -e "\e[1A\e[K${ERROR} - $PKG1 Package installation failed, Please check the installation logs"
exit 1
fi
done
printf "\n%.0s" {1..1}
# Check if hyprgraphics directory exists and remove it
if [ -d "hyprgraphics" ]; then
rm -rf "hyprgraphics"
fi
# Clone and build
printf "${INFO} Installing ${YELLOW}hyprgraphics $tag${RESET} ...\n"
if git clone --recursive -b $tag https://github.com/hyprwm/hyprgraphics.git; then
cd hyprgraphics || exit 1
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -S . -B ./build
cmake --build ./build --config Release --target hyprgraphics -j`nproc 2>/dev/null || getconf _NPROCESSORS_CONF`
if [ $DO_INSTALL -eq 1 ]; then
if sudo cmake --install ./build 2>&1 | tee -a "$MLOG" ; then
printf "${OK} ${MAGENTA}hyprgraphics $tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
else
echo -e "${ERROR} Installation failed for ${YELLOW}hyprgraphics $graphics${RESET}" 2>&1 | tee -a "$MLOG"
fi
else
echo "${NOTE} DRY RUN: Skipping installation of hyprgraphics $tag."
fi
#moving the addional logs to Install-Logs directory
[ -f "$MLOG" ] && mv "$MLOG" ../Install-Logs/
cd ..
else
echo -e "${ERROR} Download failed for ${YELLOW}hyprgraphics $graphics${RESET}" 2>&1 | tee -a "$LOG"
fi
printf "\n%.0s" {1..2}

View File

@ -7,7 +7,7 @@ idle=(
) )
#specific branch or release #specific branch or release
idle_tag="v0.1.2" tag="v0.1.6"
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ## ## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
@ -43,21 +43,21 @@ if [ -d "hypridle" ]; then
fi fi
# Clone and build # Clone and build
printf "${INFO} Installing ${YELLOW}hypridle $idle_tag${RESET} ...\n" printf "${INFO} Installing ${YELLOW}hypridle $tag${RESET} ...\n"
if git clone --recursive -b $idle_tag https://github.com/hyprwm/hypridle.git; then if git clone --recursive -b $tag https://github.com/hyprwm/hypridle.git; then
cd hypridle || exit 1 cd hypridle || exit 1
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -S . -B ./build cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -S . -B ./build
cmake --build ./build --config Release --target hypridle -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF` cmake --build ./build --config Release --target hypridle -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
if sudo cmake --install ./build 2>&1 | tee -a "$MLOG" ; then if sudo cmake --install ./build 2>&1 | tee -a "$MLOG" ; then
printf "${OK} ${MAGENTA}hypridle $idle_tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG" printf "${OK} ${MAGENTA}hypridle $tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
else else
echo -e "${ERROR} Installation failed for ${YELLOW}hypridle $idle_tag${RESET}" 2>&1 | tee -a "$MLOG" echo -e "${ERROR} Installation failed for ${YELLOW}hypridle $tag${RESET}" 2>&1 | tee -a "$MLOG"
fi fi
#moving the addional logs to Install-Logs directory #moving the addional logs to Install-Logs directory
mv $MLOG ../Install-Logs/ || true mv $MLOG ../Install-Logs/ || true
cd .. cd ..
else else
echo -e "${ERROR} Download failed for ${YELLOW}hypridle $idle_tag${RESET}" 2>&1 | tee -a "$LOG" echo -e "${ERROR} Download failed for ${YELLOW}hypridle $tag${RESET}" 2>&1 | tee -a "$LOG"
fi fi
printf "\n%.0s" {1..2} printf "\n%.0s" {1..2}

View File

@ -0,0 +1,88 @@
#!/bin/bash
# 💫 https://github.com/JaKooLit 💫 #
# Hypr Ecosystem #
# hypland-guiutils #
guiutils=(
libqt6core5compat6
qt6-base-dev
qt6-wayland-dev
qt6-wayland
qt6-declarative-dev
qml6-module-qtcore
qt6-3d-dev
qt6-5compat-dev
libqt6waylandclient6
qml6-module-qtwayland-client-texturesharing
)
#specific branch or release
tag="v0.2.0"
# Allow environment override
if [ -n "${HYPRLAND_GUIUTILS_TAG:-}" ]; then tag="$HYPRLAND_GUIUTILS_TAG"; fi
# Dry-run support
DO_INSTALL=1
if [ "$1" = "--dry-run" ] || [ "${DRY_RUN}" = "1" ] || [ "${DRY_RUN}" = "true" ]; then
DO_INSTALL=0
echo "${NOTE} DRY RUN: install step will be skipped."
fi
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# Change the working directory to the parent directory of the script
PARENT_DIR="$SCRIPT_DIR/.."
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
# Source the global functions script
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
echo "Failed to source Global_functions.sh"
exit 1
fi
# Set the name of the log file to include the current date and time
LOG="Install-Logs/install-$(date +%d-%H%M%S)_hyprland-guiutils.log"
MLOG="install-$(date +%d-%H%M%S)_hyprland-guiutils2.log"
# Installation of dependencies
printf "\n%s - Installing ${YELLOW}hyprland-guiutils dependencies${RESET} .... \n" "${INFO}"
for PKG1 in "${guiutils[@]}"; do
re_install_package "$PKG1" 2>&1 | tee -a "$LOG"
if [ $? -ne 0 ]; then
echo -e "\e[1A\e[K${ERROR} - ${YELLOW}$PKG1${RESET} Package installation failed, Please check the installation logs"
exit 1
fi
done
printf "\n%.0s" {1..1}
# Check if hyprland-guiutils directory exists and remove it
if [ -d "hyprland-guiutils" ]; then
rm -rf "hyprland-guiutils"
fi
# Clone and build
printf "${INFO} Installing ${YELLOW}hyprland-guiutils $tag${RESET} ...\n"
if git clone --recursive -b $tag https://github.com/hyprwm/hyprland-guiutils.git; then
cd hyprland-guiutils || exit 1
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -S . -B ./build
cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
if [ $DO_INSTALL -eq 1 ]; then
if sudo cmake --install ./build 2>&1 | tee -a "$MLOG" ; then
printf "${OK} ${MAGENTA}hyprland-guiutils $tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
else
echo -e "${ERROR} Installation failed for ${YELLOW}hyprland-guiutils $tag${RESET}" 2>&1 | tee -a "$MLOG"
fi
else
echo "${NOTE} DRY RUN: Skipping installation of hyprland-guiutils $tag."
fi
#moving the addional logs to Install-Logs directory
[ -f "$MLOG" ] && mv "$MLOG" ../Install-Logs/
cd ..
else
echo -e "${ERROR} Download failed for ${YELLOW}hyprland-guiutils $tag${RESET}" 2>&1 | tee -a "$LOG"
fi
printf "\n%.0s" {1..2}

View File

@ -0,0 +1,65 @@
#!/bin/bash
# 💫 https://github.com/JaKooLit 💫 #
# Hypr Ecosystem #
# hypland-protocols #
#specific branch or release
tag="v0.7.0"
# Allow environment override
if [ -n "${HYPRLAND_PROTOCOLS_TAG:-}" ]; then tag="$HYPRLAND_PROTOCOLS_TAG"; fi
# Dry-run support
DO_INSTALL=1
if [ "$1" = "--dry-run" ] || [ "${DRY_RUN}" = "1" ] || [ "${DRY_RUN}" = "true" ]; then
DO_INSTALL=0
echo "${NOTE} DRY RUN: install step will be skipped."
fi
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# Change the working directory to the parent directory of the script
PARENT_DIR="$SCRIPT_DIR/.."
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
# Source the global functions script
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
echo "Failed to source Global_functions.sh"
exit 1
fi
# Set the name of the log file to include the current date and time
LOG="Install-Logs/install-$(date +%d-%H%M%S)_protocols.log"
MLOG="install-$(date +%d-%H%M%S)_protocols2.log"
# Installation of dependencies
printf "\n%s - Installing ${YELLOW}hyprland-protocols dependencies${RESET} .... \n" "${INFO}"
# Check if hyprland-protocols directory exists and remove it
if [ -d "hyprland-protocols" ]; then
rm -rf "hyprland-protocols"
fi
# Clone and build
printf "${INFO} Installing ${YELLOW}hyprland-protocols $tag${RESET} ...\n"
if git clone --recursive -b $tag https://github.com/hyprwm/hyprland-protocols.git; then
cd hyprland-protocols || exit 1
meson setup build
if [ $DO_INSTALL -eq 1 ]; then
if sudo meson install -C build 2>&1 | tee -a "$MLOG" ; then
printf "${OK} ${MAGENTA}hyprland-protocols $tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
else
echo -e "${ERROR} Installation failed for ${YELLOW}hyprland-protocols $tag${RESET}" 2>&1 | tee -a "$MLOG"
fi
else
echo "${NOTE} DRY RUN: Skipping installation of hyprland-protocols $tag."
fi
#moving the addional logs to Install-Logs directory
[ -f "$MLOG" ] && mv "$MLOG" ../Install-Logs/
cd ..
else
echo -e "${ERROR} Download failed for ${YELLOW}hyprland-protocols tag${RESET}" 2>&1 | tee -a "$LOG"
fi
printf "\n%.0s" {1..2}

View File

@ -0,0 +1,86 @@
#!/bin/bash
# 💫 https://github.com/JaKooLit 💫 #
# Hypr Ecosystem #
# hypland-qt-support #
qt_support=(
qt6-base-dev
qt6-wayland
qt6-declarative-dev
qml6-module-qtcore
qml6-module-qtquick-layouts
qt6-tools-dev
qt6-tools-dev-tools
qt6-charts-dev
)
#specific branch or release
tag="v0.1.0"
# Allow environment override
if [ -n "${HYPRLAND_QT_SUPPORT_TAG:-}" ]; then tag="$HYPRLAND_QT_SUPPORT_TAG"; fi
# Dry-run support
DO_INSTALL=1
if [ "$1" = "--dry-run" ] || [ "${DRY_RUN}" = "1" ] || [ "${DRY_RUN}" = "true" ]; then
DO_INSTALL=0
echo "${NOTE} DRY RUN: install step will be skipped."
fi
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# Change the working directory to the parent directory of the script
PARENT_DIR="$SCRIPT_DIR/.."
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
# Source the global functions script
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
echo "Failed to source Global_functions.sh"
exit 1
fi
# Set the name of the log file to include the current date and time
LOG="Install-Logs/install-$(date +%d-%H%M%S)_hyprland-qt-support.log"
MLOG="install-$(date +%d-%H%M%S)_hyprland-qt-support2.log"
# Installation of dependencies
printf "\n%s - Installing ${YELLOW}hyprland-qt-support dependencies${RESET} .... \n" "${INFO}"
for PKG1 in "${qt_support[@]}"; do
re_install_package "$PKG1" 2>&1 | tee -a "$LOG"
if [ $? -ne 0 ]; then
echo -e "\e[1A\e[K${ERROR} - ${YELLOW}$PKG1${RESET} Package installation failed, Please check the installation logs"
exit 1
fi
done
printf "\n%.0s" {1..1}
# Check if hyprland-qt-support directory exists and remove it
if [ -d "hyprland-qt-support" ]; then
rm -rf "hyprland-qt-support"
fi
# Clone and build
printf "${INFO} Installing ${YELLOW}hyprland-qt-support $tag${RESET} ...\n"
if git clone --recursive -b $tag https://github.com/hyprwm/hyprland-qt-support.git; then
cd hyprland-qt-support || exit 1
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -S . -B ./build
cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
if [ $DO_INSTALL -eq 1 ]; then
if sudo cmake --install ./build 2>&1 | tee -a "$MLOG" ; then
printf "${OK} ${MAGENTA}hyprland-qt-support $tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
else
echo -e "${ERROR} Installation failed for ${YELLOW}hyprland-qt-support $tag${RESET}" 2>&1 | tee -a "$MLOG"
fi
else
echo "${NOTE} DRY RUN: Skipping installation of hyprland-qt-support $tag."
fi
#moving the addional logs to Install-Logs directory
[ -f "$MLOG" ] && mv "$MLOG" ../Install-Logs/
cd ..
else
echo -e "${ERROR} Download failed for ${YELLOW}hyprland-qt-support $tag${RESET}" 2>&1 | tee -a "$LOG"
fi
printf "\n%.0s" {1..2}

View File

@ -1,44 +1,133 @@
#!/bin/bash #!/bin/bash
# 💫 https://github.com/JaKooLit 💫 # # 💫 https://github.com/JaKooLit 💫 #
# Main Hyprland Package # # Main Hyprland Package#
hypr=( #specific branch or release
hyprland-protocols tag="v0.52.2"
hyprwayland-scanner # Allow environment override
) if [ -n "${HYPRLAND_TAG:-}" ]; then tag="$HYPRLAND_TAG"; fi
# forcing to reinstall. Had experience it says hyprland is already installed # Dry-run support
f_hypr=( DO_INSTALL=1
hyprland if [ "$1" = "--dry-run" ] || [ "${DRY_RUN}" = "1" ] || [ "${DRY_RUN}" = "true" ]; then
DO_INSTALL=0
echo "${NOTE} DRY RUN: install step will be skipped."
fi
hyprland=(
clang
llvm
libxcb-errors-dev
libre2-dev
libglaze-dev
libudis86-dev
libinotify-ocaml-dev
) )
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ## ## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
# Determine the directory where the script is located
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# Change the working directory to the parent directory of the script # Change the working directory to the parent directory of the script
PARENT_DIR="$SCRIPT_DIR/.." PARENT_DIR="$SCRIPT_DIR/.."
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; } cd "$PARENT_DIR" || exit 1
# Source the global functions script source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
echo "Failed to source Global_functions.sh"
exit 1
fi
# Set the name of the log file to include the current date and time # Set the name of the log file to include the current date and time
LOG="Install-Logs/install-$(date +%d-%H%M%S)_hyprland.log" LOG="Install-Logs/install-$(date +%d-%H%M%S)_hyprland.log"
MLOG="install-$(date +%d-%H%M%S)_hyprland2.log"
# Installation of dependencies
printf "\n%s - Installing hyprland additional dependencies.... \n" "${NOTE}"
# Hyprland for PKG1 in "${hyprland[@]}"; do
printf "${NOTE} Installing ${SKY_BLUE}Hyprland packages${RESET} .......\n" install_package "$PKG1" 2>&1 | tee -a "$LOG"
for HYPR in "${hypr[@]}"; do if [ $? -ne 0 ]; then
install_package "$HYPR" "$LOG" echo -e "\e[1A\e[K${ERROR} - $PKG1 Package installation failed, Please check the installation logs"
exit 1
fi
done done
# force printf "\n%.0s" {1..1}
printf "${NOTE} Reinstalling ${SKY_BLUE}Hyprland packages${RESET} .......\n"
for HYPR1 in "${f_hypr[@]}"; do
re_install_package "$HYPR1" "$LOG"
done
printf "\n%.0s" {1..2} # Installation of dependencies (glaze)
printf "\n%s - Installing Hyprland additional dependencies (glaze).... \n" "${NOTE}"
# Check if /usr/include/glaze exists
if [ ! -d /usr/include/glaze ]; then
echo "${INFO} ${YELLOW}Glaze${RESET} is not installed. Installing ${YELLOW}glaze from assets${RESET} ..."
sudo dpkg -i assets/libglaze-dev_4.4.3-1_all.deb 2>&1 | tee -a "$LOG"
sudo apt-get install -f -y 2>&1 | tee -a "$LOG"
echo "${INFO} ${YELLOW}libglaze-dev from assets${RESET} installed."
fi
printf "\n%.0s" {1..1}
# Clone, build, and install Hyprland using Cmake
printf "${NOTE} Cloning and Installing ${YELLOW}Hyprland $tag${RESET} ...\n"
# Check if Hyprland folder exists and remove it
if [ -d "Hyprland" ]; then
printf "${NOTE} Removing existing Hyprland folder...\n"
rm -rf "Hyprland" 2>&1 | tee -a "$LOG"
fi
if git clone --recursive -b $tag "https://github.com/hyprwm/Hyprland"; then
cd "Hyprland" || exit 1
# Apply patch only if it applies cleanly; otherwise skip
if [ -f ../assets/0001-fix-hyprland-compile-issue.patch ]; then
if patch -p1 --dry-run < ../assets/0001-fix-hyprland-compile-issue.patch >/dev/null 2>&1; then
patch -p1 < ../assets/0001-fix-hyprland-compile-issue.patch
else
echo "${NOTE} Hyprland compile patch does not apply on $tag; skipping."
fi
fi
# By default, build Hyprland with bundled hyprutils/hyprlang to avoid version mismatches
# You can force system libs by exporting USE_SYSTEM_HYPRLIBS=1 before running this script.
USE_SYSTEM=${USE_SYSTEM_HYPRLIBS:-1}
if [ "$USE_SYSTEM" = "1" ]; then
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:${PKG_CONFIG_PATH:-}"
export CMAKE_PREFIX_PATH="/usr/local:${CMAKE_PREFIX_PATH:-}"
SYSTEM_FLAGS=("-DUSE_SYSTEM_HYPRUTILS=ON" "-DUSE_SYSTEM_HYPRLANG=ON")
else
# Ensure we do not accidentally pick up mismatched system headers
unset PKG_CONFIG_PATH || true
SYSTEM_FLAGS=("-DUSE_SYSTEM_HYPRUTILS=OFF" "-DUSE_SYSTEM_HYPRLANG=OFF")
fi
# Make sure submodules are present when building bundled deps
git submodule update --init --recursive || true
# Force Clang toolchain to support required language features and flags
export CC="${CC:-clang}"
export CXX="${CXX:-clang++}"
CONFIG_FLAGS=(
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_C_COMPILER="${CC}"
-DCMAKE_CXX_COMPILER="${CXX}"
-DCMAKE_CXX_STANDARD=26
-DCMAKE_CXX_STANDARD_REQUIRED=ON
-DCMAKE_CXX_EXTENSIONS=ON
"${SYSTEM_FLAGS[@]}"
)
cmake -S . -B build "${CONFIG_FLAGS[@]}"
cmake --build build -j "$(nproc 2>/dev/null || getconf _NPROCESSORS_CONF)"
if [ $DO_INSTALL -eq 1 ]; then
if sudo cmake --install build 2>&1 | tee -a "$MLOG"; then
printf "${OK} ${MAGENTA}Hyprland tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
else
echo -e "${ERROR} Installation failed for ${YELLOW}Hyprland $tag${RESET}" 2>&1 | tee -a "$MLOG"
fi
else
echo "${NOTE} DRY RUN: Skipping installation of Hyprland $tag."
fi
[ -f "$MLOG" ] && mv "$MLOG" ../Install-Logs/
cd ..
else
echo -e "${ERROR} Download failed for ${YELLOW}Hyprland $tag${RESET}" 2>&1 | tee -a "$LOG"
fi
printf "\n%.0s" {1..2}

View File

@ -1,10 +1,20 @@
#!/bin/bash #!/bin/bash
# 💫 https://github.com/JaKooLit 💫 # # 💫 https://github.com/JaKooLit 💫 #
# Hypr Ecosystem #
# hyplang # # hyplang #
#specific branch or release #specific branch or release
lang_tag="v0.5.2" tag="v0.6.7"
# Allow environment override
if [ -n "${HYPRLANG_TAG:-}" ]; then tag="$HYPRLANG_TAG"; fi
# Dry-run support
DO_INSTALL=1
if [ "$1" = "--dry-run" ] || [ "${DRY_RUN}" = "1" ] || [ "${DRY_RUN}" = "true" ]; then
DO_INSTALL=0
echo "${NOTE} DRY RUN: install step will be skipped."
fi
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ## ## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
@ -32,21 +42,25 @@ if [ -d "hyprlang" ]; then
fi fi
# Clone and build # Clone and build
printf "${INFO} Installing ${YELLOW}hyprlang $lang_tag${RESET} ...\n" printf "${INFO} Installing ${YELLOW}hyprlang $tag${RESET} ...\n"
if git clone --recursive -b $lang_tag https://github.com/hyprwm/hyprlang.git; then if git clone --recursive -b $tag https://github.com/hyprwm/hyprlang.git; then
cd hyprlang || exit 1 cd hyprlang || exit 1
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -S . -B ./build cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr/local -S . -B ./build
cmake --build ./build --config Release --target hyprlang -j`nproc 2>/dev/null || getconf _NPROCESSORS_CONF` cmake --build ./build --config Release --target hyprlang -j`nproc 2>/dev/null || getconf _NPROCESSORS_CONF`
if sudo cmake --install ./build 2>&1 | tee -a "$MLOG" ; then if [ $DO_INSTALL -eq 1 ]; then
printf "${OK} ${MAGENTA}hyprlang $lang_tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG" if sudo cmake --install ./build 2>&1 | tee -a "$MLOG" ; then
printf "${OK} ${MAGENTA}hyprlang tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
else
echo -e "${ERROR} Installation failed for ${YELLOW}hyprlang $tag${RESET}" 2>&1 | tee -a "$MLOG"
fi
else else
echo -e "${ERROR} Installation failed for ${YELLOW}hyprlang $lang_tag${RESET}" 2>&1 | tee -a "$MLOG" echo "${NOTE} DRY RUN: Skipping installation of hyprlang $tag."
fi fi
#moving the addional logs to Install-Logs directory #moving the addional logs to Install-Logs directory
mv $MLOG ../Install-Logs/ || true [ -f "$MLOG" ] && mv "$MLOG" ../Install-Logs/
cd .. cd ..
else else
echo -e "${ERROR} Download failed for ${YELLOW}hyprlang $lang_tag${RESET}" 2>&1 | tee -a "$LOG" echo -e "${ERROR} Download failed for ${YELLOW}hyprlang $tag${RESET}" 2>&1 | tee -a "$LOG"
fi fi
printf "\n%.0s" {1..2} printf "\n%.0s" {1..2}

View File

@ -7,12 +7,16 @@ lock=(
libgbm-dev libgbm-dev
libdrm-dev libdrm-dev
libmagic-dev libmagic-dev
libhyprlang-dev libaudit-dev
libhyprutils-dev libsdbus-c++-dev
)
build_dep=(
pam
) )
#specific branch or release #specific branch or release
lock_tag="v0.4.0" tag="v0.9.1"
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ## ## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
@ -38,27 +42,31 @@ for PKG1 in "${lock[@]}"; do
re_install_package "$PKG1" "$LOG" re_install_package "$PKG1" "$LOG"
done done
for PKG1 in "${build_dep[@]}"; do
build_dep "$PKG1" "$LOG"
done
# Check if hyprlock directory exists and remove it # Check if hyprlock directory exists and remove it
if [ -d "hyprlock" ]; then if [ -d "hyprlock" ]; then
rm -rf "hyprlock" rm -rf "hyprlock"
fi fi
# Clone and build hyprlock # Clone and build hyprlock
printf "${INFO} Installing ${YELLOW}hyprlock $lock_tag${RESET} ...\n" printf "${INFO} Installing ${YELLOW}hyprlock $tag${RESET} ...\n"
if git clone --recursive -b $lock_tag https://github.com/hyprwm/hyprlock.git; then if git clone --recursive -b $tag https://github.com/hyprwm/hyprlock.git; then
cd hyprlock || exit 1 cd hyprlock || exit 1
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -S . -B ./build cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -S . -B ./build
cmake --build ./build --config Release --target hyprlock -j`nproc 2>/dev/null || getconf _NPROCESSORS_CONF` cmake --build ./build --config Release --target hyprlock -j`nproc 2>/dev/null || getconf _NPROCESSORS_CONF`
if sudo cmake --install build 2>&1 | tee -a "$MLOG" ; then if sudo cmake --install build 2>&1 | tee -a "$MLOG" ; then
printf "${OK} ${YELLOW}hyprlock $lock_tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG" printf "${OK} ${YELLOW}hyprlock $tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
else else
echo -e "${ERROR} Installation failed for ${YELLOW}hyprlock $lock_tag${RESET}" 2>&1 | tee -a "$MLOG" echo -e "${ERROR} Installation failed for ${YELLOW}hyprlock $tag${RESET}" 2>&1 | tee -a "$MLOG"
fi fi
#moving the addional logs to Install-Logs directory #moving the addional logs to Install-Logs directory
mv $MLOG ../Install-Logs/ || true mv $MLOG ../Install-Logs/ || true
cd .. cd ..
else else
echo -e "${ERROR} Download failed for ${YELLOW}hyprlock $lock_tag${RESET}" 2>&1 | tee -a "$LOG" echo -e "${ERROR} Download failed for ${YELLOW}hyprlock $tag${RESET}" 2>&1 | tee -a "$LOG"
fi fi
printf "\n%.0s" {1..2} printf "\n%.0s" {1..2}

View File

@ -0,0 +1,72 @@
#!/bin/bash
# 💫 https://github.com/JaKooLit 💫 #
# Hypr Ecosystem #
# hyprpolkitagent #
polkitagent=(
libpolkit-agent-1-dev
libpolkit-qt6-1-dev
qml6-module-qtquick-layouts
qt6-tools-dev
qt6-tools-dev-tools
qt6-charts-dev
)
#specific branch or release
tag="v0.1.3"
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# Change the working directory to the parent directory of the script
PARENT_DIR="$SCRIPT_DIR/.."
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
# Source the global functions script
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
echo "Failed to source Global_functions.sh"
exit 1
fi
# Set the name of the log file to include the current date and time
LOG="Install-Logs/install-$(date +%d-%H%M%S)_hyprpolkitagent.log"
MLOG="install-$(date +%d-%H%M%S)_hyprpolkitagent.log"
# Installation of dependencies
printf "\n%s - Installing hyprpolkitagent dependencies.... \n" "${NOTE}"
for PKG1 in "${polkitagent[@]}"; do
re_install_package "$PKG1" 2>&1 | tee -a "$LOG"
if [ $? -ne 0 ]; then
echo -e "\e[1A\e[K${ERROR} - $PKG1 Package installation failed, Please check the installation logs"
exit 1
fi
done
# Check if hyprpolkitagent folder exists and remove it
if [ -d "hyprpolkitagent" ]; then
printf "${NOTE} Removing existing hyprpolkitagent folder...\n"
rm -rf "hyprpolkitagent"
fi
# Clone and build
printf "${NOTE} Installing hyprpolkitagent...\n"
if git clone --recursive -b $tag https://github.com/hyprwm/hyprpolkitagent.git; then
cd hyprpolkitagent || exit 1
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -S . -B ./build
cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
if sudo cmake --install ./build 2>&1 | tee -a "$MLOG" ; then
printf "${OK} hyprpolkitagent installed successfully.\n" 2>&1 | tee -a "$MLOG"
else
echo -e "${ERROR} Installation failed for hyprpolkitagent." 2>&1 | tee -a "$MLOG"
fi
#moving the addional logs to Install-Logs directory
mv $MLOG ../Install-Logs/ || true
cd ..
else
echo -e "${ERROR} Download failed for hyprpolkitagent." 2>&1 | tee -a "$LOG"
fi
printf "\n%.0s" {1..2}

65
install-scripts/hyprtoolkit.sh Executable file
View File

@ -0,0 +1,65 @@
#!/bin/bash
# 💫 https://github.com/JaKooLit 💫 #
# Hypr Ecosystem #
# hyprtoolkit #
#specific branch or release
tag="v0.4.1"
# Allow environment override
if [ -n "${HYPRTOOLKIT_TAG:-}" ]; then tag="$HYPRTOOLKIT_TAG"; fi
# Dry-run support
DO_INSTALL=1
if [ "$1" = "--dry-run" ] || [ "${DRY_RUN}" = "1" ] || [ "${DRY_RUN}" = "true" ]; then
DO_INSTALL=0
echo "${NOTE} DRY RUN: install step will be skipped."
fi
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# Change the working directory to the parent directory of the script
PARENT_DIR="$SCRIPT_DIR/.."
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
# Source the global functions script
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
echo "Failed to source Global_functions.sh"
exit 1
fi
# Set the name of the log file to include the current date and time
LOG="Install-Logs/install-$(date +%d-%H%M%S)_hyprtoolkit.log"
MLOG="install-$(date +%d-%H%M%S)_hyprtoolkit2.log"
# Clone, build, and install using Cmake
printf "${NOTE} Cloning hyprtoolkit...\n"
# Check if hyprtoolkit folder exists and remove it
if [ -d "hyprtoolkit" ]; then
printf "${NOTE} Removing existing hyprtoolkit folder...\n"
rm -rf "hyprtoolkit" 2>&1 | tee -a "$LOG"
fi
if git clone -b $tag "https://github.com/hyprwm/hyprtoolkit.git"; then
cd "hyprtoolkit" || exit 1
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr/local -S . -B ./build
cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf _NPROCESSORS_CONF`
if [ $DO_INSTALL -eq 1 ]; then
if sudo cmake --install build 2>&1 | tee -a "$MLOG"; then
printf "${OK} hyprtoolkit installed successfully.\n" 2>&1 | tee -a "$MLOG"
else
echo -e "${ERROR} Installation failed for hyprtoolkit." 2>&1 | tee -a "$MLOG"
fi
else
echo "${NOTE} DRY RUN: Skipping installation of hyprtoolkit $tag."
fi
[ -f "$MLOG" ] && mv "$MLOG" ../Install-Logs/
cd ..
else
echo -e "${ERROR} Download failed for hyprtoolkit" 2>&1 | tee -a "$LOG"
fi
printf "\n%.0s" {1..2}

65
install-scripts/hyprutils.sh Executable file
View File

@ -0,0 +1,65 @@
#!/bin/bash
# 💫 https://github.com/JaKooLit 💫 #
# Hypr Ecosystem #
# hyprutils #
#specific branch or release
tag="v0.10.4"
# Allow environment override
if [ -n "${HYPRUTILS_TAG:-}" ]; then tag="$HYPRUTILS_TAG"; fi
# Dry-run support
DO_INSTALL=1
if [ "$1" = "--dry-run" ] || [ "${DRY_RUN}" = "1" ] || [ "${DRY_RUN}" = "true" ]; then
DO_INSTALL=0
echo "${NOTE} DRY RUN: install step will be skipped."
fi
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# Change the working directory to the parent directory of the script
PARENT_DIR="$SCRIPT_DIR/.."
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
# Source the global functions script
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
echo "Failed to source Global_functions.sh"
exit 1
fi
# Set the name of the log file to include the current date and time
LOG="Install-Logs/install-$(date +%d-%H%M%S)_hyprutils.log"
MLOG="install-$(date +%d-%H%M%S)_hyprutils2.log"
# Clone, build, and install using Cmake
printf "${NOTE} Cloning hyprutils...\n"
# Check if hyprutils folder exists and remove it
if [ -d "hyprutils" ]; then
printf "${NOTE} Removing existing hyprutils folder...\n"
rm -rf "hyprutils" 2>&1 | tee -a "$LOG"
fi
if git clone -b $tag "https://github.com/hyprwm/hyprutils.git"; then
cd "hyprutils" || exit 1
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr/local -S . -B ./build
cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf _NPROCESSORS_CONF`
if [ $DO_INSTALL -eq 1 ]; then
if sudo cmake --install build 2>&1 | tee -a "$MLOG"; then
printf "${OK} hyprutils installed successfully.\n" 2>&1 | tee -a "$MLOG"
else
echo -e "${ERROR} Installation failed for hyprutils." 2>&1 | tee -a "$MLOG"
fi
else
echo "${NOTE} DRY RUN: Skipping installation of hyprutils $tag."
fi
[ -f "$MLOG" ] && mv "$MLOG" ../Install-Logs/
cd ..
else
echo -e "${ERROR} Download failed for hyprutils" 2>&1 | tee -a "$LOG"
fi
printf "\n%.0s" {1..2}

View File

@ -0,0 +1,82 @@
#!/bin/bash
# 💫 https://github.com/JaKooLit 💫 #
# Hypr Ecosystem #
# hyprwayland-scanner #
scan_depend=(
libpugixml-dev
)
#specific branch or release
tag="v0.4.5"
# Allow environment override
if [ -n "${HYPRWAYLAND_SCANNER_TAG:-}" ]; then tag="$HYPRWAYLAND_SCANNER_TAG"; fi
# Dry-run support
DO_INSTALL=1
if [ "$1" = "--dry-run" ] || [ "${DRY_RUN}" = "1" ] || [ "${DRY_RUN}" = "true" ]; then
DO_INSTALL=0
echo "${NOTE} DRY RUN: install step will be skipped."
fi
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# Change the working directory to the parent directory of the script
PARENT_DIR="$SCRIPT_DIR/.."
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
# Source the global functions script
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
echo "Failed to source Global_functions.sh"
exit 1
fi
# Set the name of the log file to include the current date and time
LOG="Install-Logs/install-$(date +%d-%H%M%S)_hyprwayland-scanner.log"
MLOG="install-$(date +%d-%H%M%S)_hyprwayland-scanner2.log"
##
# Installation of dependencies
printf "\n%s - Installing hyprwayland-scanner dependencies.... \n" "${NOTE}"
for PKG1 in "${scan_depend[@]}"; do
install_package "$PKG1" 2>&1 | tee -a "$LOG"
if [ $? -ne 0 ]; then
echo -e "\e[1A\e[K${ERROR} - $PKG1 Package installation failed, Please check the installation logs"
exit 1
fi
done
printf "${NOTE} Installing hyprwayland-scanner...\n"
# Check if hyprwayland-scanner folder exists and remove it
if [ -d "hyprwayland-scanner" ]; then
printf "${NOTE} Removing existing hyprwayland-scanner folder...\n"
rm -rf "hyprwayland-scanner"
fi
# Clone and build hyprlang
printf "${NOTE} Installing hyprwayland-scanner...\n"
if git clone --recursive -b $tag https://github.com/hyprwm/hyprwayland-scanner.git; then
cd hyprwayland-scanner || exit 1
cmake -DCMAKE_INSTALL_PREFIX=/usr -B build
cmake --build build -j `nproc`
if [ $DO_INSTALL -eq 1 ]; then
if sudo cmake --install build 2>&1 | tee -a "$MLOG" ; then
printf "${OK} hyprwayland-scanner installed successfully.\n" 2>&1 | tee -a "$MLOG"
else
echo -e "${ERROR} Installation failed for hyprwayland-scanner." 2>&1 | tee -a "$MLOG"
fi
else
echo "${NOTE} DRY RUN: Skipping installation of hyprwayland-scanner $tag."
fi
#moving the addional logs to Install-Logs directory
[ -f "$MLOG" ] && mv "$MLOG" ../Install-Logs/
cd ..
else
echo -e "${ERROR} Download failed for hyprwayland-scanner. Please check log." 2>&1 | tee -a "$LOG"
fi
printf "\n%.0s" {1..2}

View File

@ -35,7 +35,11 @@ rofi=(
wget wget
) )
rofi_tag="1.7.8+wayland1" # variables
rofi_tag="1.7.9+wayland1"
release_url="https://github.com/lbonn/rofi/releases/download/1.7.9%2Bwayland1/rofi-1.7.9+wayland1.tar.gz"
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ## ## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
@ -62,7 +66,7 @@ printf "\n%s - Re-installing ${SKY_BLUE}rofi-wayland dependencies${RESET}.... \n
printf "\n%.0s" {1..2} printf "\n%.0s" {1..2}
# Clone and build rofi - wayland # Clone and build rofi - wayland
printf "${NOTE} Installing ${SKY_BLUE}rofi-wayland${RESET}...\n" printf "${NOTE} Building and Installing ${SKY_BLUE}rofi-wayland${RESET} $rofi_tag ...\n"
# Check if rofi directory exists # Check if rofi directory exists
if [ -d "rofi-$rofi_tag" ]; then if [ -d "rofi-$rofi_tag" ]; then
@ -71,7 +75,7 @@ fi
# cloning rofi-wayland # cloning rofi-wayland
printf "${NOTE} Downloading ${YELLOW}rofi-wayland $rofi_tag${RESET} from releases...\n" printf "${NOTE} Downloading ${YELLOW}rofi-wayland $rofi_tag${RESET} from releases...\n"
wget https://github.com/lbonn/rofi/releases/download/1.7.8%2Bwayland1/rofi-1.7.8+wayland1.tar.gz wget $release_url
if [ -f "rofi-$rofi_tag.tar.gz" ]; then if [ -f "rofi-$rofi_tag.tar.gz" ]; then
printf "${OK} ${YELLOW}rofi-wayland $rofi_tag${RESET} downloaded successfully.\n" 2>&1 | tee -a "$LOG" printf "${OK} ${YELLOW}rofi-wayland $rofi_tag${RESET} downloaded successfully.\n" 2>&1 | tee -a "$LOG"

View File

@ -8,10 +8,13 @@ sddm1=(
) )
sddm2=( sddm2=(
qt6-5compat-dev libqt6svg6
qml6-module-qt5compat-graphicaleffects
qt6-declarative-dev qt6-declarative-dev
qt6-svg-dev qt6-svg-dev
qt6-virtualkeyboard-plugin
libqt6multimedia6
qml6-module-qtquick-controls
qml6-module-qtquick-effects
) )
# login managers to attempt to disable # login managers to attempt to disable
@ -77,6 +80,5 @@ sudo systemctl enable sddm.service 2>&1 | tee -a "$LOG"
wayland_sessions_dir=/usr/share/wayland-sessions wayland_sessions_dir=/usr/share/wayland-sessions
[ ! -d "$wayland_sessions_dir" ] && { printf "$CAT - $wayland_sessions_dir not found, creating...\n"; sudo mkdir -p "$wayland_sessions_dir" 2>&1 | tee -a "$LOG"; } [ ! -d "$wayland_sessions_dir" ] && { printf "$CAT - $wayland_sessions_dir not found, creating...\n"; sudo mkdir -p "$wayland_sessions_dir" 2>&1 | tee -a "$LOG"; }
sudo cp assets/hyprland.desktop "$wayland_sessions_dir/" 2>&1 | tee -a "$LOG"
printf "\n%.0s" {1..2} printf "\n%.0s" {1..2}

View File

@ -2,8 +2,8 @@
# 💫 https://github.com/JaKooLit 💫 # # 💫 https://github.com/JaKooLit 💫 #
# SDDM themes # # SDDM themes #
source_theme="https://codeberg.org/JaKooLit/sddm-sequoia" source_theme="https://github.com/JaKooLit/simple-sddm-2.git"
theme_name="sequoia_2" theme_name="simple_sddm_2"
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ## ## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
@ -18,6 +18,7 @@ if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
exit 1 exit 1
fi fi
# Set the name of the log file to include the current date and time # Set the name of the log file to include the current date and time
LOG="Install-Logs/install-$(date +%d-%H%M%S)_sddm_theme.log" LOG="Install-Logs/install-$(date +%d-%H%M%S)_sddm_theme.log"
@ -52,51 +53,57 @@ if git clone --depth=1 "$source_theme" "$theme_name"; then
sudo mv "$theme_name" "/usr/share/sddm/themes/$theme_name" 2>&1 | tee -a "$LOG" sudo mv "$theme_name" "/usr/share/sddm/themes/$theme_name" 2>&1 | tee -a "$LOG"
# setting up SDDM theme # setting up SDDM theme
sddm_conf_dir="/etc/sddm.conf.d" sddm_conf="/etc/sddm.conf"
BACKUP_SUFFIX=".bak" BACKUP_SUFFIX=".bak"
echo -e "${NOTE} Setting up the login screen." | tee -a "$LOG" echo -e "${NOTE} Setting up the login screen." | tee -a "$LOG"
if [ -d "$sddm_conf_dir" ]; then # Backup the sddm.conf file if it exists
echo "Backing up files in $sddm_conf_dir" | tee -a "$LOG" if [ -f "$sddm_conf" ]; then
for file in "$sddm_conf_dir"/*; do echo "Backing up $sddm_conf" | tee -a "$LOG"
if [ -f "$file" ]; then sudo cp "$sddm_conf" "$sddm_conf$BACKUP_SUFFIX" 2>&1 | tee -a "$LOG"
if [[ "$file" == *$BACKUP_SUFFIX ]]; then
echo "Skipping backup file: $file" | tee -a "$LOG"
continue
fi
# Backup each original file
sudo cp "$file" "$file$BACKUP_SUFFIX" 2>&1 | tee -a "$LOG"
echo "Backup created for $file" | tee -a "$LOG"
# Edit existing "Current="
if grep -q '^[[:space:]]*Current=' "$file"; then
sudo sed -i "s/^[[:space:]]*Current=.*/Current=$theme_name/" "$file" 2>&1 | tee -a "$LOG"
echo "Updated theme in $file" | tee -a "$LOG"
fi
fi
done
else else
echo "$CAT - $sddm_conf_dir not found, creating..." | tee -a "$LOG" echo "$sddm_conf does not exist, creating a new one." | tee -a "$LOG"
sudo mkdir -p "$sddm_conf_dir" 2>&1 | tee -a "$LOG" sudo touch "$sddm_conf" 2>&1 | tee -a "$LOG"
fi fi
if [ ! -f "$sddm_conf_dir/theme.conf.user" ]; then # Check if the [Theme] section exists
echo -e "[Theme]\nCurrent = $theme_name" | sudo tee "$sddm_conf_dir/theme.conf.user" > /dev/null if grep -q '^\[Theme\]' "$sddm_conf"; then
# Update the Current= line under [Theme]
sudo sed -i "/^\[Theme\]/,/^\[/{s/^\s*Current=.*/Current=$theme_name/}" "$sddm_conf" 2>&1 | tee -a "$LOG"
if [ -f "$sddm_conf_dir/theme.conf.user" ]; then # If no Current= line was found and replaced, append it after the [Theme] section
echo "Created and configured $sddm_conf_dir/theme.conf.user with theme $theme_name" | tee -a "$LOG" if ! grep -q '^\s*Current=' "$sddm_conf"; then
sudo sed -i "/^\[Theme\]/a Current=$theme_name" "$sddm_conf" 2>&1 | tee -a "$LOG"
echo "Appended Current=$theme_name under [Theme] in $sddm_conf" | tee -a "$LOG"
else else
echo "Failed to create $sddm_conf_dir/theme.conf.user" | tee -a "$LOG" echo "Updated Current=$theme_name in $sddm_conf" | tee -a "$LOG"
fi fi
else else
echo "$sddm_conf_dir/theme.conf.user already exists, skipping creation." | tee -a "$LOG" # Append the [Theme] section at the end if it doesn't exist
echo -e "\n[Theme]\nCurrent=$theme_name" | sudo tee -a "$sddm_conf" > /dev/null
echo "Added [Theme] section with Current=$theme_name in $sddm_conf" | tee -a "$LOG"
fi
# Add [General] section with InputMethod=qtvirtualkeyboard if it doesn't exist
if ! grep -q '^\[General\]' "$sddm_conf"; then
echo -e "\n[General]\nInputMethod=qtvirtualkeyboard" | sudo tee -a "$sddm_conf" > /dev/null
echo "Added [General] section with InputMethod=qtvirtualkeyboard in $sddm_conf" | tee -a "$LOG"
else
# Update InputMethod line if section exists
if grep -q '^\s*InputMethod=' "$sddm_conf"; then
sudo sed -i '/^\[General\]/,/^\[/{s/^\s*InputMethod=.*/InputMethod=qtvirtualkeyboard/}' "$sddm_conf" 2>&1 | tee -a "$LOG"
echo "Updated InputMethod to qtvirtualkeyboard in $sddm_conf" | tee -a "$LOG"
else
sudo sed -i '/^\[General\]/a InputMethod=qtvirtualkeyboard' "$sddm_conf" 2>&1 | tee -a "$LOG"
echo "Appended InputMethod=qtvirtualkeyboard under [General] in $sddm_conf" | tee -a "$LOG"
fi
fi fi
# Replace current background from assets # Replace current background from assets
sudo cp -r assets/sddm.png "/usr/share/sddm/themes/$theme_name/backgrounds/default" 2>&1 | tee -a "$LOG" sudo cp -r assets/sddm.png "/usr/share/sddm/themes/$theme_name/Backgrounds/default" 2>&1 | tee -a "$LOG"
sudo sed -i 's|^wallpaper=".*"|wallpaper="backgrounds/default"|' "/usr/share/sddm/themes/$theme_name/theme.conf" 2>&1 | tee -a "$LOG" sudo sed -i 's|^wallpaper=".*"|wallpaper="Backgrounds/default"|' "/usr/share/sddm/themes/$theme_name/theme.conf" 2>&1 | tee -a "$LOG"
printf "\n%.0s" {1..1} printf "\n%.0s" {1..1}
printf "${NOTE} copying ${YELLOW}JetBrains Mono Nerd Font${RESET} to ${YELLOW}/usr/local/share/fonts${RESET} .......\n" printf "${NOTE} copying ${YELLOW}JetBrains Mono Nerd Font${RESET} to ${YELLOW}/usr/local/share/fonts${RESET} .......\n"
printf "${NOTE} necessary for the new SDDM theme to work properly........\n" printf "${NOTE} necessary for the new SDDM theme to work properly........\n"
@ -110,16 +117,16 @@ if git clone --depth=1 "$source_theme" "$theme_name"; then
echo "Failed to copy fonts." echo "Failed to copy fonts."
fi fi
fc-cache -fv 2>&1 | tee -a "$LOG" # Update font cache and log the output
fc-cache -v -f 2>&1 | tee -a "$LOG"
printf "\n%.0s" {1..1} printf "\n%.0s" {1..1}
echo "${OK} - ${MAGENTA}Additional SDDM Theme${RESET} successfully installed." | tee -a "$LOG" echo "${OK} - ${MAGENTA}Additional ${YELLOW}$theme_name SDDM Theme${RESET} successfully installed." | tee -a "$LOG"
else else
echo "${ERROR} - Failed to clone the sddm theme repository. Please check your internet connection." | tee -a "$LOG" >&2 echo "${ERROR} - Failed to clone the sddm theme repository. Please check your internet connection." | tee -a "$LOG" >&2
fi fi
printf "\n%.0s" {1..2} printf "\n%.0s" {1..2}

View File

@ -2,36 +2,38 @@
# 💫 https://github.com/JaKooLit 💫 # # 💫 https://github.com/JaKooLit 💫 #
# SWWW - Wallpaper Utility # # SWWW - Wallpaper Utility #
# specific branch or release
swww_tag="v0.11.2"
# Check if 'swww' is installed # Check if 'swww' is installed
if command -v swww &>/dev/null; then if command -v swww &>/dev/null; then
SWWW_VERSION=$(swww -V | awk '{print $NF}') SWWW_VERSION=$(swww -V | awk '{print $NF}')
if [[ "$SWWW_VERSION" == "0.9.5" ]]; then if [[ "$SWWW_VERSION" == "$swww_tag" ]]; then
echo -e "${OK} ${MAGENTA}swww v0.9.5${RESET} is already installed. Skipping installation." echo -e "${OK} ${MAGENTA}swww ${swww_tag}${RESET} is already installed. Skipping installation."
exit 0 exit 0
fi fi
else else
echo -e "${NOTE} ${MAGENTA}swww${RESET} is not installed. Proceeding with installation." echo -e "${NOTE} ${MAGENTA}swww${RESET} is not installed. Proceeding with installation."
fi fi
swww=( swww=(
liblz4-dev liblz4-dev
) )
# specific branch or release
swww_tag="v0.9.5"
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ## ## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Change the working directory to the parent directory of the script # Change the working directory to the parent directory of the script
PARENT_DIR="$SCRIPT_DIR/.." PARENT_DIR="$SCRIPT_DIR/.."
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; } cd "$PARENT_DIR" || {
echo "${ERROR} Failed to change directory to $PARENT_DIR"
exit 1
}
# Source the global functions script # Source the global functions script
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
echo "Failed to source Global_functions.sh" echo "Failed to source Global_functions.sh"
exit 1 exit 1
fi fi
# Set the name of the log file to include the current date and time # Set the name of the log file to include the current date and time
@ -80,19 +82,19 @@ if [ -f "$file2" ]; then
fi fi
# Copy binaries to /usr/bin/ # Copy binaries to /usr/bin/
sudo cp -r target/release/swww /usr/bin/ 2>&1 | tee -a "$MLOG" sudo cp -r target/release/swww /usr/bin/ 2>&1 | tee -a "$MLOG"
sudo cp -r target/release/swww-daemon /usr/bin/ 2>&1 | tee -a "$MLOG" sudo cp -r target/release/swww-daemon /usr/bin/ 2>&1 | tee -a "$MLOG"
# Copy bash completions # Copy bash completions
sudo mkdir -p /usr/share/bash-completion/completions 2>&1 | tee -a "$MLOG" sudo mkdir -p /usr/share/bash-completion/completions 2>&1 | tee -a "$MLOG"
sudo cp -r completions/swww.bash /usr/share/bash-completion/completions/swww 2>&1 | tee -a "$MLOG" sudo cp -r completions/swww.bash /usr/share/bash-completion/completions/swww 2>&1 | tee -a "$MLOG"
# Copy zsh completions # Copy zsh completions
sudo mkdir -p /usr/share/zsh/site-functions 2>&1 | tee -a "$MLOG" sudo mkdir -p /usr/share/zsh/site-functions 2>&1 | tee -a "$MLOG"
sudo cp -r completions/_swww /usr/share/zsh/site-functions/_swww 2>&1 | tee -a "$MLOG" sudo cp -r completions/_swww /usr/share/zsh/site-functions/_swww 2>&1 | tee -a "$MLOG"
# Moving logs into main Install-Logs # Moving logs into main Install-Logs
mv "$MLOG" ../Install-Logs/ || true mv "$MLOG" ../Install-Logs/ || true
cd - || exit 1 cd - || exit 1
printf "\n%.0s" {1..2} printf "\n%.0s" {1..2}

View File

@ -0,0 +1,83 @@
#!/bin/bash
# 💫 https://github.com/JaKooLit 💫 #
# Build and install wayland-protocols from source
# Provides a newer wayland-protocols.pc for pkg-config when distro version is too old
#specific tag or release (e.g., 1.45, 1.46)
tag="1.45"
# Allow environment override
if [ -n "${WAYLAND_PROTOCOLS_TAG:-}" ]; then tag="$WAYLAND_PROTOCOLS_TAG"; fi
# Dry-run support
DO_INSTALL=1
if [ "$1" = "--dry-run" ] || [ "${DRY_RUN}" = "1" ] || [ "${DRY_RUN}" = "true" ]; then
DO_INSTALL=0
echo "${NOTE} DRY RUN: install step will be skipped."
fi
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# Change the working directory to the parent directory of the script
PARENT_DIR="$SCRIPT_DIR/.."
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
# Source the global functions script
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
echo "Failed to source Global_functions.sh"
exit 1
fi
# Set the name of the log file to include the current date and time
LOG="Install-Logs/install-$(date +%d-%H%M%S)_wayland-protocols.log"
MLOG="install-$(date +%d-%H%M%S)_wayland-protocols2.log"
printf "\n%s - Installing ${YELLOW}wayland-protocols (from source)${RESET} .... \n" "${INFO}"
# Clean previous clone
if [ -d "wayland-protocols" ]; then
rm -rf "wayland-protocols"
fi
# Clone and build (meson)
# Upstream: https://gitlab.freedesktop.org/wayland/wayland-protocols.git
printf "${INFO} Installing ${YELLOW}wayland-protocols $tag${RESET} ...\n"
repo_url="https://gitlab.freedesktop.org/wayland/wayland-protocols.git"
if git clone --depth=1 --filter=blob:none "$repo_url" wayland-protocols; then
cd wayland-protocols || exit 1
# Fetch tags and attempt to checkout the requested tag, trying both raw and v-prefixed
git fetch --tags --depth=1 >/dev/null 2>&1 || true
checked_out=0
for candidate in "$tag" "v$tag"; do
if git rev-parse -q --verify "refs/tags/$candidate" >/dev/null; then
git checkout -q "refs/tags/$candidate"
checked_out=1
break
fi
done
if [ "$checked_out" -ne 1 ]; then
echo "${ERROR} Tag $tag not found in $repo_url" | tee -a "$LOG"
echo "${NOTE} Available tags (truncated):" | tee -a "$LOG"
git tag --list | tail -n 20 | tee -a "$LOG" || true
exit 1
fi
# Install to /usr/local so pkg-config can prefer it over distro /usr
meson setup build --prefix=/usr/local
meson compile -C build -j"$(nproc 2>/dev/null || getconf _NPROCESSORS_CONF)"
if [ $DO_INSTALL -eq 1 ]; then
if sudo meson install -C build 2>&1 | tee -a "$MLOG" ; then
printf "${OK} ${MAGENTA}wayland-protocols $tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
else
echo -e "${ERROR} Installation failed for ${YELLOW}wayland-protocols $tag${RESET}" 2>&1 | tee -a "$MLOG"
fi
else
echo "${NOTE} DRY RUN: Skipping installation of wayland-protocols $tag."
fi
# Move additional logs to Install-Logs directory if they exist
[ -f "$MLOG" ] && mv "$MLOG" ../Install-Logs/ || true
cd ..
else
echo -e "${ERROR} Download failed for ${YELLOW}wayland-protocols $tag${RESET}" 2>&1 | tee -a "$LOG"
fi
printf "\n%.0s" {1..2}

View File

@ -3,10 +3,18 @@
# XDG-Desktop-Portals for hyprland # # XDG-Desktop-Portals for hyprland #
xdg=( xdg=(
xdg-desktop-portal-gtk libdrm-dev
xdg-desktop-portal-hyprland libpipewire-0.3-dev
libspa-0.2-dev
libsdbus-c++-dev
libwayland-client0
wayland-protocols
xdg-desktop-portal-gtk
) )
#specific branch or release
tag="v1.3.10"
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ## ## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
@ -26,9 +34,38 @@ LOG="Install-Logs/install-$(date +%d-%H%M%S)_xdph.log"
[[ -f "/usr/lib/xdg-desktop-portal-hyprland" ]] && sudo rm "/usr/lib/xdg-desktop-portal-hyprland" [[ -f "/usr/lib/xdg-desktop-portal-hyprland" ]] && sudo rm "/usr/lib/xdg-desktop-portal-hyprland"
# XDG-DESKTOP-PORTAL-HYPRLAND # XDG-DESKTOP-PORTAL-HYPRLAND
printf "${NOTE} Installing ${SKY_BLUE}xdg-desktop-portal-hyprland${RESET}\n\n" printf "${NOTE} Installing ${SKY_BLUE}xdg-desktop-portal-hyprland dependencies${RESET}\n\n"
for xdgs in "${xdg[@]}"; do
install_package "$xdgs" "$LOG" for PKG1 in "${xdg[@]}"; do
re_install_package "$PKG1" 2>&1 | tee -a "$LOG"
if [ $? -ne 0 ]; then
echo -e "\e[1A\e[K${ERROR} - $PKG1 Package installation failed, Please check the installation logs"
exit 1
fi
done done
# Clone, build, and install XDPH
printf "${NOTE} Cloning and Installing ${YELLOW}XDG Desktop Portal Hyprland $tag${RESET} ...\n"
# Check if xdg-desktop-portal-hyprland folder exists and remove it
if [ -d "xdg-desktop-portal-hyprland" ]; then
printf "${NOTE} Removing existing xdg-desktop-portal-hyprland folder...\n"
rm -rf "xdg-desktop-portal-hyprland" 2>&1 | tee -a "$LOG"
fi
if git clone --recursive -b $tag "https://github.com/hyprwm/xdg-desktop-portal-hyprland.git"; then
cd "xdg-desktop-portal-hyprland" || exit 1
cmake -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DCMAKE_INSTALL_PREFIX=/usr -B build
cmake --build build
if sudo cmake --install build 2>&1 | tee -a "$MLOG"; then
printf "${OK} ${MAGENTA}xdph $tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
else
echo -e "${ERROR} Installation failed for ${YELLOW}xdph $tag${RESET}" 2>&1 | tee -a "$MLOG"
fi
mv $MLOG ../Install-Logs/ || true
cd ..
else
echo -e "${ERROR} Download failed for ${YELLOW}xdph $tag${RESET}" 2>&1 | tee -a "$LOG"
fi
printf "\n%.0s" {1..2} printf "\n%.0s" {1..2}

69
install-scripts/xkbcommon.sh Executable file
View File

@ -0,0 +1,69 @@
#!/bin/bash
# 💫 https://github.com/JaKooLit 💫 #
# Hypr Ecosystem #
# xkbcommon #
xkbcommon=(
bison
libzip-dev
librsvg2-dev
)
#specific branch or release
tag="xkbcommon-1.13.1"
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# Change the working directory to the parent directory of the script
PARENT_DIR="$SCRIPT_DIR/.."
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
# Source the global functions script
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
echo "Failed to source Global_functions.sh"
exit 1
fi
# Set the name of the log file to include the current date and time
LOG="Install-Logs/install-$(date +%d-%H%M%S)_xkbcommon.log"
MLOG="install-$(date +%d-%H%M%S)_xkbcommon.log"
# Installation of dependencies
printf "\n%s - Installing xkbcommon dependencies.... \n" "${NOTE}"
for PKG1 in "${xkbcommon[@]}"; do
install_package "$PKG1" 2>&1 | tee -a "$LOG"
if [ $? -ne 0 ]; then
echo -e "\e[1A\e[K${ERROR} - $PKG1 Package installation failed, Please check the installation logs"
exit 1
fi
done
# Check if xkbcommon folder exists and remove it
if [ -d "libxkbcommon" ]; then
printf "${NOTE} Removing existing libxkbcommon folder...\n"
rm -rf "libxkbcommon"
fi
# Clone and build
printf "${NOTE} Installing xkbcommon...\n"
if git clone --recursive -b $tag https://github.com/xkbcommon/libxkbcommon.git; then
cd libxkbcommon || exit 1
meson setup build --libdir=/usr/local/lib
meson compile -C build
if sudo meson install -C build 2>&1 | tee -a "$MLOG" ; then
printf "${OK} xkbcommon installed successfully.\n" 2>&1 | tee -a "$MLOG"
else
echo -e "${ERROR} Installation failed for xkbcommon." 2>&1 | tee -a "$MLOG"
fi
#moving the addional logs to Install-Logs directory
mv $MLOG ../Install-Logs/ || true
cd ..
else
echo -e "${ERROR} Download failed for xkbcommon." 2>&1 | tee -a "$LOG"
fi
printf "\n%.0s" {1..2}

View File

@ -19,6 +19,57 @@ BLUE="$(tput setaf 4)"
SKY_BLUE="$(tput setaf 6)" SKY_BLUE="$(tput setaf 6)"
RESET="$(tput sgr0)" RESET="$(tput sgr0)"
# Function to print colorful text
print_color() {
printf "%b%s%b\n" "$1" "$2" "$RESET"
}
# Warning: End of Life Support
printf "\n%.0s" {1..2}
print_color $YELLOW "
█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
KooL's Debian - Hyprland October 2025 Update
Most Hyprland packages are built from Source
NOTICE
█▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█
All Hyprland and associated packages set to install using this script are downloaded and built from source (github)
However, do note that it is downloaded from each individual releases. You can set versions by editing the scripts
located install-scripts directory.
These packages are NOT updated automatically.
See the HOWTO documentation on how to get next release of Hyprland installed
BE WARNED!!!!! Installation will take longer!!
█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
NOTE:
Hyprland and Dependencies versions
█▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█
Thank you!
"
printf "\n%.0s" {1..2}
# Prompt user to continue or exit
read -rp "Do you want to continue with the installation? [y/N]: " confirm
case "$confirm" in
[yY][eE][sS] | [yY])
echo -e "${OK} Continuing with installation..."
;;
*)
echo -e "${NOTE} You chose not to continue. Exiting..."
exit 1
;;
esac
# Create Directory for Install Logs # Create Directory for Install Logs
if [ ! -d Install-Logs ]; then if [ ! -d Install-Logs ]; then
@ -31,7 +82,7 @@ LOG="Install-Logs/01-Hyprland-Install-Scripts-$(date +%d-%H%M%S).log"
# Check if running as root. If root, script will exit # Check if running as root. If root, script will exit
if [[ $EUID -eq 0 ]]; then if [[ $EUID -eq 0 ]]; then
echo "${ERROR} This script should ${WARNING}NOT${RESET} be executed as root!! Exiting......." | tee -a "$LOG" echo "${ERROR} This script should ${WARNING}NOT${RESET} be executed as root!! Exiting......." | tee -a "$LOG"
printf "\n%.0s" {1..2} printf "\n%.0s" {1..2}
exit 1 exit 1
fi fi
@ -57,20 +108,19 @@ if ! command -v whiptail >/dev/null; then
printf "\n%.0s" {1..1} printf "\n%.0s" {1..1}
fi fi
printf "\n%.0s" {1..2}
printf "\n%.0s" {1..2}
echo -e "\e[35m echo -e "\e[35m
╦╔═┌─┐┌─┐╦ ╦ ╦┬ ┬┌─┐┬─┐┬ ┌─┐┌┐┌┌┬┐ ╦╔═┌─┐┌─┐╦ ╦ ╦┬ ┬┌─┐┬─┐┬ ┌─┐┌┐┌┌┬┐
╠╩╗│ ││ │║ ╠═╣└┬┘├─┘├┬┘│ ├─┤│││ ││ 2025 ╠╩╗│ ││ │║ ╠═╣└┬┘├─┘├┬┘│ ├─┤│││ ││ July 2025
╩ ╩└─┘└─┘╩═╝ ╩ ╩ ┴ ┴ ┴└─┴─┘┴ ┴┘└┘─┴┘ Debian Trixie / SiD ╩ ╩└─┘└─┘╩═╝ ╩ ╩ ┴ ┴ ┴└─┴─┘┴ ┴┘└┘─┴┘ Debian Trixie / SiD
\e[0m" \e[0m"
printf "\n%.0s" {1..1} printf "\n%.0s" {1..1}
# Welcome message using whiptail (for displaying information) # Welcome message using whiptail (for displaying information)
whiptail --title "KooL Debian-Hyprland Trixie-SID (2025) Install Script" \ whiptail --title "KooL Debian-Hyprland Trixie+ (2025) Install Script" \
--msgbox "Welcome to KooL Debian-Hyprland Trixie-SID (2025) Install Script!!!\n\n\ --msgbox "Welcome to KooL Debian-Hyprland Trixie+ (2025) Install Script!!!\n\n\
ATTENTION: Run a full system update and Reboot first !!! (Highly Recommended)\n\n\ ATTENTION: Run a full system update and Reboot first !!! (Highly Recommended)\n\n\
NOTE: If you are installing on a VM, ensure to enable 3D acceleration else Hyprland may NOT start!" \ NOTE: If you are installing on a VM, ensure to enable 3D acceleration otherwise Hyprland may NOT start!" \
15 80 15 80
# Ask if the user wants to proceed # Ask if the user wants to proceed
@ -88,13 +138,12 @@ sleep 1
printf "\n%.0s" {1..1} printf "\n%.0s" {1..1}
# install pciutils if detected not installed. Necessary for detecting GPU # install pciutils if detected not installed. Necessary for detecting GPU
if ! dpkg -l | grep -w pciutils > /dev/null; then if ! dpkg -l | grep -w pciutils >/dev/null; then
echo "pciutils is not installed. Installing..." | tee -a "$LOG" echo "pciutils is not installed. Installing..." | tee -a "$LOG"
sudo apt install -y pciutils sudo apt install -y pciutils
printf "\n%.0s" {1..1} printf "\n%.0s" {1..1}
fi fi
# Path to the install-scripts directory # Path to the install-scripts directory
script_directory=install-scripts script_directory=install-scripts
@ -114,6 +163,24 @@ execute_script() {
fi fi
} }
# Load centralized Hyprland stack tags if present and export for child scripts
if [ -f "./hypr-tags.env" ]; then
# shellcheck disable=SC1091
source "./hypr-tags.env"
# If core tags are set to auto/latest, refresh to resolve concrete versions
if [ "${HYPRUTILS_TAG:-}" = "auto" ] || [ "${HYPRUTILS_TAG:-}" = "latest" ] || [ -z "${HYPRUTILS_TAG:-}" ] ||
[ "${HYPRLANG_TAG:-}" = "auto" ] || [ "${HYPRLANG_TAG:-}" = "latest" ] || [ -z "${HYPRLANG_TAG:-}" ]; then
if [ -f ./refresh-hypr-tags.sh ]; then
chmod +x ./refresh-hypr-tags.sh || true
./refresh-hypr-tags.sh
# reload after refresh
# shellcheck disable=SC1091
source "./hypr-tags.env"
fi
fi
export HYPRLAND_TAG AQUAMARINE_TAG HYPRUTILS_TAG HYPRLANG_TAG HYPRGRAPHICS_TAG HYPRWAYLAND_SCANNER_TAG HYPRLAND_PROTOCOLS_TAG HYPRLAND_QT_SUPPORT_TAG HYPRLAND_QTUTILS_TAG WAYLAND_PROTOCOLS_TAG
fi
################# #################
## Default values for the options (will be overwritten by preset file if available) ## Default values for the options (will be overwritten by preset file if available)
gtk_themes="OFF" gtk_themes="OFF"
@ -150,17 +217,17 @@ services=("gdm.service" "gdm3.service" "lightdm.service" "lxdm.service")
# Function to check if any login services are active # Function to check if any login services are active
check_services_running() { check_services_running() {
active_services=() # Array to store active services active_services=() # Array to store active services
for svc in "${services[@]}"; do for svc in "${services[@]}"; do
if systemctl is-active --quiet "$svc"; then if systemctl is-active --quiet "$svc"; then
active_services+=("$svc") active_services+=("$svc")
fi fi
done done
if [ ${#active_services[@]} -gt 0 ]; then if [ ${#active_services[@]} -gt 0 ]; then
return 0 return 0
else else
return 1 return 1
fi fi
} }
@ -174,7 +241,7 @@ fi
# Check if NVIDIA GPU is detected # Check if NVIDIA GPU is detected
nvidia_detected=false nvidia_detected=false
if lspci | grep -i "nvidia" &> /dev/null; then if lspci | grep -i "nvidia" &>/dev/null; then
nvidia_detected=true nvidia_detected=true
whiptail --title "NVIDIA GPU Detected" --msgbox "NVIDIA GPU detected in your system.\n\nNOTE: The script will install nvidia-dkms, nvidia-utils, and nvidia-settings if you choose to configure." 12 60 whiptail --title "NVIDIA GPU Detected" --msgbox "NVIDIA GPU detected in your system.\n\nNOTE: The script will install nvidia-dkms, nvidia-utils, and nvidia-settings if you choose to configure." 12 60
fi fi
@ -234,20 +301,20 @@ while true; do
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
echo -e "\n" echo -e "\n"
echo "${INFO} You 🫵 cancelled the selection. ${YELLOW}Goodbye!${RESET}" | tee -a "$LOG" echo "${INFO} You 🫵 cancelled the selection. ${YELLOW}Goodbye!${RESET}" | tee -a "$LOG"
exit 0 # Exit the script if Cancel is pressed exit 0 # Exit the script if Cancel is pressed
fi fi
# If no option was selected, notify and restart the selection # If no option was selected, notify and restart the selection
if [ -z "$selected_options" ]; then if [ -z "$selected_options" ]; then
whiptail --title "Warning" --msgbox "No options were selected. Please select at least one option." 10 60 whiptail --title "Warning" --msgbox "No options were selected. Please select at least one option." 10 60
continue # Return to selection if no options selected continue # Return to selection if no options selected
fi fi
# Strip the quotes and trim spaces if necessary (sanitize the input) # Strip the quotes and trim spaces if necessary (sanitize the input)
selected_options=$(echo "$selected_options" | tr -d '"' | tr -s ' ') selected_options=$(echo "$selected_options" | tr -d '"' | tr -s ' ')
# Convert selected options into an array (preserving spaces in values) # Convert selected options into an array (preserving spaces in values)
IFS=' ' read -r -a options <<< "$selected_options" IFS=' ' read -r -a options <<<"$selected_options"
# Check if the "dots" option was selected # Check if the "dots" option was selected
dots_selected="OFF" dots_selected="OFF"
@ -262,14 +329,14 @@ while true; do
if [[ "$dots_selected" == "OFF" ]]; then if [[ "$dots_selected" == "OFF" ]]; then
# Show a note about not selecting the "dots" option # Show a note about not selecting the "dots" option
if ! whiptail --title "KooL Hyprland Dot Files" --yesno \ if ! whiptail --title "KooL Hyprland Dot Files" --yesno \
"You have not selected to install the pre-configured KooL Hyprland dotfiles.\n\nKindly NOTE that if you proceed without Dots, Hyprland will start with default vanilla Hyprland configuration and I won't be able to give you support.\n\nWould you like to continue install without KooL Hyprland Dots or return to choices/options?" \ "You have not selected to install the pre-configured KooL Hyprland dotfiles.\n\nKindly NOTE that if you proceed without Dots, Hyprland will start with default vanilla Hyprland configuration and I won't be able to give you support.\n\nWould you like to continue install without KooL Hyprland Dots or return to choices/options?" \
--yes-button "Continue" --no-button "Return" 15 90; then --yes-button "Continue" --no-button "Return" 15 90; then
echo "🔙 Returning to options..." | tee -a "$LOG" echo "🔙 Returning to options..." | tee -a "$LOG"
continue continue
else else
# User chose to continue # User chose to continue
echo "${INFO} ⚠️ Continuing WITHOUT the dotfiles installation..." | tee -a "$LOG" echo "${INFO} ⚠️ Continuing WITHOUT the dotfiles installation..." | tee -a "$LOG"
printf "\n%.0s" {1..1} printf "\n%.0s" {1..1}
fi fi
fi fi
@ -284,11 +351,11 @@ while true; do
if ! whiptail --title "Confirm Your Choices" --yesno "$(printf "%s" "$confirm_message")" 25 80; then if ! whiptail --title "Confirm Your Choices" --yesno "$(printf "%s" "$confirm_message")" 25 80; then
echo -e "\n" echo -e "\n"
echo "${SKY_BLUE}You're not 🫵 happy${RESET}. ${YELLOW}Returning to options...${RESET}" | tee -a "$LOG" echo "${SKY_BLUE}You're not 🫵 happy${RESET}. ${YELLOW}Returning to options...${RESET}" | tee -a "$LOG"
continue continue
fi fi
echo "👌 ${OK} You confirmed your choices. Proceeding with ${SKY_BLUE}KooL 🇵🇭 Hyprland Installation...${RESET}" | tee -a "$LOG" echo "👌 ${OK} You confirmed your choices. Proceeding with ${SKY_BLUE}KooL 🇵🇭 Hyprland Installation...${RESET}" | tee -a "$LOG"
break break
done done
printf "\n%.0s" {1..1} printf "\n%.0s" {1..1}
@ -308,12 +375,46 @@ echo "${INFO} Installing ${SKY_BLUE}necessary fonts...${RESET}" | tee -a "$LOG"
sleep 1 sleep 1
execute_script "fonts.sh" execute_script "fonts.sh"
# Optional: refresh tags before building the Hyprland stack
# Set FETCH_LATEST=1 to opt-in (default is no-refresh to honor pinned tags)
if [ "${FETCH_LATEST:-0}" = "1" ] && [ -f ./refresh-hypr-tags.sh ]; then
chmod +x ./refresh-hypr-tags.sh || true
./refresh-hypr-tags.sh
fi
echo "${INFO} Installing ${SKY_BLUE}KooL Hyprland packages...${RESET}" | tee -a "$LOG" echo "${INFO} Installing ${SKY_BLUE}KooL Hyprland packages...${RESET}" | tee -a "$LOG"
sleep 1 sleep 1
execute_script "01-hypr-pkgs.sh" execute_script "01-hypr-pkgs.sh"
sleep 1 sleep 1
execute_script "hyprutils.sh"
sleep 1
execute_script "hyprlang.sh"
sleep 1
execute_script "hyprcursor.sh"
sleep 1
execute_script "hyprwayland-scanner.sh"
sleep 1
execute_script "hyprgraphics.sh"
sleep 1
execute_script "aquamarine.sh"
sleep 1
execute_script "hyprland-qt-support.sh"
sleep 1
execute_script "hyprtoolkit.sh"
sleep 1
execute_script "hyprland-guiutils.sh"
sleep 1
execute_script "hyprland-protocols.sh"
sleep 1
# Ensure wayland-protocols (from source) is installed to satisfy Hyprland's >= 1.45 requirement
execute_script "wayland-protocols-src.sh"
sleep 1
execute_script "xkbcommon.sh"
sleep 1
execute_script "hyprland.sh" execute_script "hyprland.sh"
sleep 1 sleep 1
execute_script "hyprpolkitagent.sh"
sleep 1
execute_script "wallust.sh" execute_script "wallust.sh"
sleep 1 sleep 1
execute_script "swww.sh" execute_script "swww.sh"
@ -322,8 +423,6 @@ execute_script "rofi-wayland.sh"
sleep 1 sleep 1
execute_script "hyprlock.sh" execute_script "hyprlock.sh"
sleep 1 sleep 1
execute_script "hyprlang.sh"
sleep 1
execute_script "hypridle.sh" execute_script "hypridle.sh"
#execute_script "imagemagick.sh" #this is for compiling from source. 07 Sep 2024 #execute_script "imagemagick.sh" #this is for compiling from source. 07 Sep 2024
@ -334,73 +433,73 @@ sleep 1
selected_options=$(echo "$selected_options" | tr -d '"' | tr -s ' ') selected_options=$(echo "$selected_options" | tr -d '"' | tr -s ' ')
# Convert selected options into an array (splitting by spaces) # Convert selected options into an array (splitting by spaces)
IFS=' ' read -r -a options <<< "$selected_options" IFS=' ' read -r -a options <<<"$selected_options"
# Loop through selected options # Loop through selected options
for option in "${options[@]}"; do for option in "${options[@]}"; do
case "$option" in case "$option" in
sddm) sddm)
if check_services_running; then if check_services_running; then
active_list=$(printf "%s\n" "${active_services[@]}") active_list=$(printf "%s\n" "${active_services[@]}")
whiptail --title "Error" --msgbox "One of the following login services is running:\n$active_list\n\nPlease stop & disable it or DO not choose SDDM." 12 60 whiptail --title "Error" --msgbox "One of the following login services is running:\n$active_list\n\nPlease stop & disable it or DO not choose SDDM." 12 60
exec "$0" exec "$0"
else else
echo "${INFO} Installing and configuring ${SKY_BLUE}SDDM...${RESET}" | tee -a "$LOG" echo "${INFO} Installing and configuring ${SKY_BLUE}SDDM...${RESET}" | tee -a "$LOG"
execute_script "sddm.sh" execute_script "sddm.sh"
fi fi
;; ;;
nvidia) nvidia)
echo "${INFO} Configuring ${SKY_BLUE}nvidia stuff${RESET}" | tee -a "$LOG" echo "${INFO} Configuring ${SKY_BLUE}nvidia stuff${RESET}" | tee -a "$LOG"
execute_script "nvidia.sh" execute_script "nvidia.sh"
;; ;;
gtk_themes) gtk_themes)
echo "${INFO} Installing ${SKY_BLUE}GTK themes...${RESET}" | tee -a "$LOG" echo "${INFO} Installing ${SKY_BLUE}GTK themes...${RESET}" | tee -a "$LOG"
execute_script "gtk_themes.sh" execute_script "gtk_themes.sh"
;; ;;
input_group) input_group)
echo "${INFO} Adding user into ${SKY_BLUE}input group...${RESET}" | tee -a "$LOG" echo "${INFO} Adding user into ${SKY_BLUE}input group...${RESET}" | tee -a "$LOG"
execute_script "InputGroup.sh" execute_script "InputGroup.sh"
;; ;;
ags) ags)
echo "${INFO} Installing ${SKY_BLUE}AGS v1 for Desktop Overview...${RESET}" | tee -a "$LOG" echo "${INFO} Installing ${SKY_BLUE}AGS v1 for Desktop Overview...${RESET}" | tee -a "$LOG"
execute_script "ags.sh" execute_script "ags.sh"
;; ;;
xdph) xdph)
echo "${INFO} Installing ${SKY_BLUE}xdg-desktop-portal-hyprland...${RESET}" | tee -a "$LOG" echo "${INFO} Installing ${SKY_BLUE}xdg-desktop-portal-hyprland...${RESET}" | tee -a "$LOG"
execute_script "xdph.sh" execute_script "xdph.sh"
;; ;;
bluetooth) bluetooth)
echo "${INFO} Configuring ${SKY_BLUE}Bluetooth...${RESET}" | tee -a "$LOG" echo "${INFO} Configuring ${SKY_BLUE}Bluetooth...${RESET}" | tee -a "$LOG"
execute_script "bluetooth.sh" execute_script "bluetooth.sh"
;; ;;
thunar) thunar)
echo "${INFO} Installing ${SKY_BLUE}Thunar file manager...${RESET}" | tee -a "$LOG" echo "${INFO} Installing ${SKY_BLUE}Thunar file manager...${RESET}" | tee -a "$LOG"
execute_script "thunar.sh" execute_script "thunar.sh"
execute_script "thunar_default.sh" execute_script "thunar_default.sh"
;; ;;
sddm_theme) sddm_theme)
echo "${INFO} Downloading & Installing ${SKY_BLUE}Additional SDDM theme...${RESET}" | tee -a "$LOG" echo "${INFO} Downloading & Installing ${SKY_BLUE}Additional SDDM theme...${RESET}" | tee -a "$LOG"
execute_script "sddm_theme.sh" execute_script "sddm_theme.sh"
;; ;;
zsh) zsh)
echo "${INFO} Installing ${SKY_BLUE}zsh with Oh-My-Zsh...${RESET}" | tee -a "$LOG" echo "${INFO} Installing ${SKY_BLUE}zsh with Oh-My-Zsh...${RESET}" | tee -a "$LOG"
execute_script "zsh.sh" execute_script "zsh.sh"
;; ;;
pokemon) pokemon)
echo "${INFO} Adding ${SKY_BLUE}Pokemon color scripts to terminal...${RESET}" | tee -a "$LOG" echo "${INFO} Adding ${SKY_BLUE}Pokemon color scripts to terminal...${RESET}" | tee -a "$LOG"
execute_script "zsh_pokemon.sh" execute_script "zsh_pokemon.sh"
;; ;;
rog) rog)
echo "${INFO} Installing ${SKY_BLUE}ROG laptop packages...${RESET}" | tee -a "$LOG" echo "${INFO} Installing ${SKY_BLUE}ROG laptop packages...${RESET}" | tee -a "$LOG"
execute_script "rog.sh" execute_script "rog.sh"
;; ;;
dots) dots)
echo "${INFO} Installing pre-configured ${SKY_BLUE}KooL Hyprland dotfiles...${RESET}" | tee -a "$LOG" echo "${INFO} Installing pre-configured ${SKY_BLUE}KooL Hyprland dotfiles...${RESET}" | tee -a "$LOG"
execute_script "dotfiles-branch.sh" execute_script "dotfiles-branch.sh"
;; ;;
*) *)
echo "Unknown option: $option" | tee -a "$LOG" echo "Unknown option: $option" | tee -a "$LOG"
;; ;;
esac esac
done done
@ -415,7 +514,6 @@ for file in "${files_to_delete[@]}"; do
fi fi
done done
clear clear
# copy fastfetch config if debian is not present # copy fastfetch config if debian is not present
@ -429,8 +527,8 @@ execute_script "03-Final-Check.sh"
printf "\n%.0s" {1..1} printf "\n%.0s" {1..1}
# Check if either hyprland or hyprland-git is installed # Check if either hyprland or Hyprland files exist in /usr/local/bin/
if dpkg -l | grep -qw hyprland; then if [ -e /usr/local/bin/hyprland ] || [ -f /usr/local/bin/Hyprland ]; then
printf "\n ${OK} 👌 Hyprland is installed. However, some essential packages may not be installed. Please see above!" printf "\n ${OK} 👌 Hyprland is installed. However, some essential packages may not be installed. Please see above!"
printf "\n${CAT} Ignore this message if it states ${YELLOW}All essential packages${RESET} are installed as per above\n" printf "\n${CAT} Ignore this message if it states ${YELLOW}All essential packages${RESET} are installed as per above\n"
sleep 2 sleep 2
@ -449,13 +547,13 @@ if dpkg -l | grep -qw hyprland; then
if [[ "$HYP" == "y" || "$HYP" == "yes" ]]; then if [[ "$HYP" == "y" || "$HYP" == "yes" ]]; then
echo "${INFO} Rebooting now..." echo "${INFO} Rebooting now..."
systemctl reboot systemctl reboot
break break
elif [[ "$HYP" == "n" || "$HYP" == "no" ]]; then elif [[ "$HYP" == "n" || "$HYP" == "no" ]]; then
echo "👌 ${OK} You chose NOT to reboot" echo "👌 ${OK} You chose NOT to reboot"
printf "\n%.0s" {1..1} printf "\n%.0s" {1..1}
# Check if NVIDIA GPU is present # Check if NVIDIA GPU is present
if lspci | grep -i "nvidia" &> /dev/null; then if lspci | grep -i "nvidia" &>/dev/null; then
echo "${INFO} HOWEVER ${YELLOW}NVIDIA GPU${RESET} detected. Reminder that you must REBOOT your SYSTEM..." echo "${INFO} HOWEVER ${YELLOW}NVIDIA GPU${RESET} detected. Reminder that you must REBOOT your SYSTEM..."
printf "\n%.0s" {1..1} printf "\n%.0s" {1..1}
fi fi
@ -472,4 +570,3 @@ else
fi fi
printf "\n%.0s" {1..2} printf "\n%.0s" {1..2}

0
preset.sh Normal file → Executable file
View File

92
refresh-hypr-tags.sh Normal file
View File

@ -0,0 +1,92 @@
#!/usr/bin/env bash
# Refresh hypr-tags.env with latest release tags from upstream
# Safe to run multiple times; creates timestamped backups
set -euo pipefail
REPO_ROOT=$(pwd)
TAGS_FILE="$REPO_ROOT/hypr-tags.env"
LOG_DIR="$REPO_ROOT/Install-Logs"
mkdir -p "$LOG_DIR"
TS=$(date +%F-%H%M%S)
SUMMARY_LOG="$LOG_DIR/refresh-tags-$TS.log"
# Ensure tags file exists
if [[ ! -f "$TAGS_FILE" ]]; then
cat > "$TAGS_FILE" <<'EOF'
HYPRLAND_TAG=v0.51.1
AQUAMARINE_TAG=v0.9.3
HYPRUTILS_TAG=v0.8.2
HYPRLANG_TAG=v0.6.4
HYPRGRAPHICS_TAG=v0.1.5
HYPRWAYLAND_SCANNER_TAG=v0.4.5
HYPRLAND_PROTOCOLS_TAG=v0.6.4
HYPRLAND_QT_SUPPORT_TAG=v0.1.0
HYPRLAND_QTUTILS_TAG=v0.1.4
WAYLAND_PROTOCOLS_TAG=1.45
EOF
fi
# Backup
cp "$TAGS_FILE" "$TAGS_FILE.bak-$TS"
echo "[INFO] Backed up $TAGS_FILE to $TAGS_FILE.bak-$TS" | tee -a "$SUMMARY_LOG"
if ! command -v curl >/dev/null 2>&1; then
echo "[ERROR] curl is required to refresh tags" | tee -a "$SUMMARY_LOG"
exit 1
fi
# Map of env var -> repo
declare -A repos=(
[HYPRLAND_TAG]="hyprwm/Hyprland"
[AQUAMARINE_TAG]="hyprwm/aquamarine"
[HYPRUTILS_TAG]="hyprwm/hyprutils"
[HYPRLANG_TAG]="hyprwm/hyprlang"
[HYPRGRAPHICS_TAG]="hyprwm/hyprgraphics"
[HYPRWAYLAND_SCANNER_TAG]="hyprwm/hyprwayland-scanner"
[HYPRLAND_PROTOCOLS_TAG]="hyprwm/hyprland-protocols"
[HYPRLAND_QT_SUPPORT_TAG]="hyprwm/hyprland-qt-support"
[HYPRLAND_QTUTILS_TAG]="hyprwm/hyprland-qtutils"
)
# Read existing
declare -A cur
while IFS='=' read -r k v; do
[[ -z "${k:-}" || "$k" =~ ^# ]] && continue
cur[$k]="$v"
edone < "$TAGS_FILE"
# Fetch latest, but only update keys set to 'auto' or 'latest' unless forced
FORCE=${FORCE:-0}
for key in "${!repos[@]}"; do
repo="${repos[$key]}"
url="https://api.github.com/repos/$repo/releases/latest"
echo "[INFO] Checking latest tag for $repo" | tee -a "$SUMMARY_LOG"
body=$(curl -fsSL "$url" || true)
[[ -z "$body" ]] && { echo "[WARN] Empty response for $repo" | tee -a "$SUMMARY_LOG"; continue; }
if command -v jq >/dev/null 2>&1; then
tag=$(printf '%s' "$body" | jq -r '.tag_name // empty')
else
tag=$(printf '%s' "$body" | grep -m1 '"tag_name"' | sed -E 's/.*"tag_name"\s*:\s*"([^"]+)".*/\1/')
fi
if [[ -z "$tag" ]]; then
echo "[WARN] Could not parse tag for $repo" | tee -a "$SUMMARY_LOG"
continue
fi
existing="${cur[$key]:-}"
if [[ $FORCE -eq 1 ]] || [[ "$existing" =~ ^(auto|latest)$ ]] || [[ -z "$existing" ]]; then
cur[$key]="$tag"
echo "[OK] $key := $tag" | tee -a "$SUMMARY_LOG"
else
echo "[SKIP] $key pinned ($existing), not overriding" | tee -a "$SUMMARY_LOG"
fi
done
# Write back
{
for k in "${!cur[@]}"; do
echo "$k=${cur[$k]}"
done | sort
} > "$TAGS_FILE"
echo "[OK] Refreshed tags written to $TAGS_FILE" | tee -a "$SUMMARY_LOG"

522
update-hyprland.sh Executable file
View File

@ -0,0 +1,522 @@
#!/usr/bin/env bash
# update-hyprland.sh
# Manage and build just the Hyprland stack (Hyprland + companion apps/libs)
# - Maintains a central tag file (hypr-tags.env) with versions
# - Can fetch latest release tags from GitHub and update hypr-tags.env
# - Can restore tags from a backup
# - Can run a dry-run build (compile only) or install build of the stack
#
# Usage examples:
# chmod +x ./update-hyprland.sh
# ./update-hyprland.sh --dry-run # compile-only using current tags
# ./update-hyprland.sh --install # compile + install using current tags
# ./update-hyprland.sh --fetch-latest --dry-run # refresh tags to latest, then dry-run
# ./update-hyprland.sh --set HYPRLAND=v0.51.1 --dry-run # set one or more tags
# ./update-hyprland.sh --restore --dry-run # restore most recent backup of tags and dry-run
# ./update-hyprland.sh --only hyprland,hyprutils --dry-run
# ./update-hyprland.sh --skip aquamarine --install
# ./update-hyprland.sh --with-deps --dry-run
# ./update-hyprland.sh --fetch-latest --via-helper # use dry-run-build.sh for a summary-only run
#
# Notes:
# - Requires curl; for --fetch-latest, jq is recommended (installed by 00-dependencies.sh)
# - Works from repo root; do not cd into install-scripts/
set -euo pipefail
REPO_ROOT=$(pwd)
TAGS_FILE="$REPO_ROOT/hypr-tags.env"
LOG_DIR="$REPO_ROOT/Install-Logs"
mkdir -p "$LOG_DIR"
TS=$(date +%F-%H%M%S)
SUMMARY_LOG="$LOG_DIR/update-hypr-$TS.log"
# Default module order (core first, then Hyprland)
DEFAULT_MODULES=(
xkbcommon
hyprutils
hyprlang
hyprtoolkit
wayland-protocols-src
aquamarine
hyprgraphics
hyprwayland-scanner
hyprland-protocols
hyprland-qt-support
hyprland-guiutils
hyprland
)
WITH_DEPS=0
DO_INSTALL=0
DO_DRY_RUN=0
FETCH_LATEST=0
RESTORE=0
VIA_HELPER=0
NO_FETCH=0
ONLY_LIST=""
SKIP_LIST=""
SET_ARGS=()
usage() {
sed -n '2,120p' "$0" | sed -n '/^# /p' | sed 's/^# \{0,1\}//'
}
ensure_tags_file() {
if [[ ! -f "$TAGS_FILE" ]]; then
echo "[INFO] Creating default tags file: $TAGS_FILE" | tee -a "$SUMMARY_LOG"
cat >"$TAGS_FILE" <<'EOF'
HYPRLAND_TAG=v0.50.1
AQUAMARINE_TAG=v0.9.2
HYPRUTILS_TAG=v0.8.2
HYPRLANG_TAG=v0.6.4
HYPRGRAPHICS_TAG=v0.1.5
HYPRWAYLAND_SCANNER_TAG=v0.4.5
HYPRLAND_PROTOCOLS_TAG=v0.6.4
HYPRLAND_QT_SUPPORT_TAG=v0.1.0
HYPRLAND_QTUTILS_TAG=v0.1.4
EOF
fi
}
backup_tags() {
ensure_tags_file
cp "$TAGS_FILE" "$TAGS_FILE.bak-$TS"
echo "[INFO] Backed up $TAGS_FILE to $TAGS_FILE.bak-$TS" | tee -a "$SUMMARY_LOG"
}
restore_tags() {
latest_bak=$(ls -1t "$TAGS_FILE".bak-* 2>/dev/null | head -n1 || true)
if [[ -z "$latest_bak" ]]; then
echo "[ERROR] No backup tags file found." | tee -a "$SUMMARY_LOG"
exit 1
fi
cp "$latest_bak" "$TAGS_FILE"
echo "[INFO] Restored tags from $latest_bak" | tee -a "$SUMMARY_LOG"
}
set_tags_from_args() {
ensure_tags_file
backup_tags
# load existing into assoc map
declare -A map
while IFS='=' read -r k v; do
[[ -z "$k" || "$k" =~ ^# ]] && continue
map[$k]="$v"
done <"$TAGS_FILE"
for kv in "${SET_ARGS[@]}"; do
key="${kv%%=*}"
val="${kv#*=}"
case "$key" in
HYPRLAND | hyprland) key=HYPRLAND_TAG ;;
AQUAMARINE | aquamarine) key=AQUAMARINE_TAG ;;
HYPRUTILS | hyprutils) key=HYPRUTILS_TAG ;;
HYPRLANG | hyprlang) key=HYPRLANG_TAG ;;
HYPRGRAPHICS | hyprgraphics) key=HYPRGRAPHICS_TAG ;;
HYPRWAYLAND_SCANNER | hyprwayland-scanner | hyprwayland_scanner) key=HYPRWAYLAND_SCANNER_TAG ;;
HYPRLAND_PROTOCOLS | hyprland-protocols | hyprland_protocols) key=HYPRLAND_PROTOCOLS_TAG ;;
HYPRLAND_QT_SUPPORT | hyprland-qt-support | hyprland_qt_support) key=HYPRLAND_QT_SUPPORT_TAG ;;
HYPRLAND_QTUTILS | hyprland-qtutils | hyprland_qtutils) key=HYPRLAND_QTUTILS_TAG ;;
esac
map[$key]="$val"
done
{
for k in "${!map[@]}"; do
echo "$k=${map[$k]}"
done | sort
} >"$TAGS_FILE"
echo "[INFO] Updated $TAGS_FILE with provided tags" | tee -a "$SUMMARY_LOG"
}
# Fetch latest release tags from GitHub for the stack
fetch_latest_tags() {
ensure_tags_file
backup_tags
# Require curl; jq is preferred. Fallback to grep/sed if jq is missing.
if ! command -v curl >/dev/null 2>&1; then
echo "[ERROR] curl is required." | tee -a "$SUMMARY_LOG"
exit 1
fi
# Read existing to respect pinned values (only update keys set to 'auto' or 'latest')
declare -A existing
while IFS='=' read -r k v; do
[[ -z "$k" || "$k" =~ ^# ]] && continue
existing[$k]="$v"
done <"$TAGS_FILE"
declare -A repos=(
[HYPRLAND_TAG]="hyprwm/Hyprland"
[AQUAMARINE_TAG]="hyprwm/aquamarine"
[HYPRUTILS_TAG]="hyprwm/hyprutils"
[HYPRLANG_TAG]="hyprwm/hyprlang"
[HYPRGRAPHICS_TAG]="hyprwm/hyprgraphics"
[HYPRWAYLAND_SCANNER_TAG]="hyprwm/hyprwayland-scanner"
[HYPRLAND_PROTOCOLS_TAG]="hyprwm/hyprland-protocols"
[HYPRLAND_QT_SUPPORT_TAG]="hyprwm/hyprland-qt-support"
[HYPRLAND_QTUTILS_TAG]="hyprwm/hyprland-qtutils"
)
declare -A tags
for key in "${!repos[@]}"; do
repo="${repos[$key]}"
url="https://api.github.com/repos/$repo/releases/latest"
echo "[INFO] Fetching latest tag for $repo" | tee -a "$SUMMARY_LOG"
body=$(curl -fsSL "$url" || true)
if [[ -z "$body" ]]; then
echo "[WARN] Empty response for $repo; leaving $key unchanged" | tee -a "$SUMMARY_LOG"
continue
fi
if command -v jq >/dev/null 2>&1; then
tag=$(printf '%s' "$body" | jq -r '.tag_name // empty')
else
tag=$(printf '%s' "$body" | grep -m1 '"tag_name"' | sed -E 's/.*"tag_name"\s*:\s*"([^"]+)".*/\1/')
fi
if [[ -n "$tag" ]]; then
tags[$key]="$tag"
else
echo "[WARN] Could not parse tag for $repo; leaving $key unchanged" | tee -a "$SUMMARY_LOG"
fi
done
# Merge into existing file
declare -A map
while IFS='=' read -r k v; do
[[ -z "$k" || "$k" =~ ^# ]] && continue
map[$k]="$v"
done <"$TAGS_FILE"
for k in "${!tags[@]}"; do
# Only override if pinned value is 'auto' or 'latest'
if [[ "${existing[$k]:-}" =~ ^(auto|latest)$ ]] || [[ -z "${existing[$k]:-}" ]]; then
map[$k]="${tags[$k]}"
fi
done
{
for k in "${!map[@]}"; do
echo "$k=${map[$k]}"
done | sort
} >"$TAGS_FILE"
echo "[INFO] Refreshed tags written to $TAGS_FILE" | tee -a "$SUMMARY_LOG"
}
# Build runner using module scripts. Uses env vars from TAGS_FILE.
run_stack() {
# shellcheck disable=SC1090
source "$TAGS_FILE"
# Export tags so child scripts inherit them
export HYPRLAND_TAG AQUAMARINE_TAG HYPRUTILS_TAG HYPRLANG_TAG HYPRGRAPHICS_TAG HYPRWAYLAND_SCANNER_TAG HYPRLAND_PROTOCOLS_TAG HYPRLAND_QT_SUPPORT_TAG HYPRLAND_QTUTILS_TAG WAYLAND_PROTOCOLS_TAG
# Optionally install dependencies (not dry-run)
if [[ $WITH_DEPS -eq 1 ]]; then
echo "[INFO] Installing dependencies via 00-dependencies.sh" | tee -a "$SUMMARY_LOG"
if ! "$REPO_ROOT/install-scripts/00-dependencies.sh"; then
echo "[ERROR] Dependencies installation failed." | tee -a "$SUMMARY_LOG"
exit 1
fi
fi
# Build module list based on --only/--skip
local modules
if [[ -n "$ONLY_LIST" ]]; then
IFS=',' read -r -a modules <<<"$ONLY_LIST"
else
modules=("${DEFAULT_MODULES[@]}")
fi
if [[ -n "$SKIP_LIST" ]]; then
IFS=',' read -r -a _skips <<<"$SKIP_LIST"
local filtered=()
for m in "${modules[@]}"; do
local skip_it=0
for s in "${_skips[@]}"; do
[[ "$m" == "$s" ]] && {
skip_it=1
break
}
done
[[ $skip_it -eq 0 ]] && filtered+=("$m")
done
modules=("${filtered[@]}")
fi
# Ensure core prerequisites are installed before hyprland on install runs
# Order: wayland-protocols-src, hyprland-protocols, hyprutils, hyprlang, aquamarine, hyprland
if [[ $DO_INSTALL -eq 1 ]]; then
# Auto-fetch latest tags for Hyprland stack unless disabled
if [[ $NO_FETCH -eq 0 ]]; then
# Detect whether hyprland is part of the run
need_fetch=0
for m in "${modules[@]}"; do
[[ "$m" == "hyprland" ]] && need_fetch=1
done
if [[ $need_fetch -eq 1 ]]; then
echo "[INFO] Auto-fetching latest tags for Hyprland stack" | tee -a "$SUMMARY_LOG"
fetch_latest_tags
fi
fi
local has_hl=0 has_aqua=0 has_wp=0 has_utils=0 has_lang=0 has_hlprot=0
for m in "${modules[@]}"; do
[[ "$m" == "hyprland" ]] && has_hl=1
[[ "$m" == "aquamarine" ]] && has_aqua=1
[[ "$m" == "wayland-protocols-src" ]] && has_wp=1
[[ "$m" == "hyprland-protocols" ]] && has_hlprot=1
[[ "$m" == "hyprutils" ]] && has_utils=1
[[ "$m" == "hyprlang" ]] && has_lang=1
done
if [[ $has_hl -eq 1 ]]; then
# ensure each prerequisite is present
[[ $has_wp -eq 0 ]] && modules=("wayland-protocols-src" "${modules[@]}")
[[ $has_hlprot -eq 0 ]] && modules=("hyprland-protocols" "${modules[@]}")
[[ $has_utils -eq 0 ]] && modules=("hyprutils" "${modules[@]}")
[[ $has_lang -eq 0 ]] && modules=("hyprlang" "${modules[@]}")
[[ $has_aqua -eq 0 ]] && modules=("aquamarine" "${modules[@]}")
# Reorder to exact sequence before hyprland
# Remove existing occurrences and rebuild in correct order
local tmp=()
local inserted_wp=0 inserted_hlprot=0 inserted_utils=0 inserted_lang=0 inserted_aqua=0
for m in "${modules[@]}"; do
if [[ "$m" == "wayland-protocols-src" ]]; then
if [[ $inserted_wp -eq 0 ]]; then
tmp+=("wayland-protocols-src")
inserted_wp=1
fi
elif [[ "$m" == "hyprland-protocols" ]]; then
if [[ $inserted_hlprot -eq 0 ]]; then
# ensure wayland-protocols-src before hyprland-protocols
if [[ $inserted_wp -eq 0 ]]; then
tmp+=("wayland-protocols-src")
inserted_wp=1
fi
tmp+=("hyprland-protocols")
inserted_hlprot=1
fi
elif [[ "$m" == "hyprutils" ]]; then
if [[ $inserted_utils -eq 0 ]]; then
# ensure protocols before utils
if [[ $inserted_wp -eq 0 ]]; then
tmp+=("wayland-protocols-src")
inserted_wp=1
fi
if [[ $inserted_hlprot -eq 0 ]]; then
tmp+=("hyprland-protocols")
inserted_hlprot=1
fi
tmp+=("hyprutils")
inserted_utils=1
fi
elif [[ "$m" == "hyprlang" ]]; then
if [[ $inserted_lang -eq 0 ]]; then
# ensure utils before lang
if [[ $inserted_utils -eq 0 ]]; then
if [[ $inserted_wp -eq 0 ]]; then
tmp+=("wayland-protocols-src")
inserted_wp=1
fi
if [[ $inserted_hlprot -eq 0 ]]; then
tmp+=("hyprland-protocols")
inserted_hlprot=1
fi
tmp+=("hyprutils")
inserted_utils=1
fi
tmp+=("hyprlang")
inserted_lang=1
fi
elif [[ "$m" == "aquamarine" ]]; then
if [[ $inserted_aqua -eq 0 ]]; then
# ensure lang before aquamarine
if [[ $inserted_lang -eq 0 ]]; then
if [[ $inserted_utils -eq 0 ]]; then
if [[ $inserted_wp -eq 0 ]]; then
tmp+=("wayland-protocols-src")
inserted_wp=1
fi
if [[ $inserted_hlprot -eq 0 ]]; then
tmp+=("hyprland-protocols")
inserted_hlprot=1
fi
tmp+=("hyprutils")
inserted_utils=1
fi
tmp+=("hyprlang")
inserted_lang=1
fi
tmp+=("aquamarine")
inserted_aqua=1
fi
elif [[ "$m" == "hyprland" ]]; then
# ensure all prerequisites already present
if [[ $inserted_wp -eq 0 ]]; then
tmp+=("wayland-protocols-src")
inserted_wp=1
fi
if [[ $inserted_hlprot -eq 0 ]]; then
tmp+=("hyprland-protocols")
inserted_hlprot=1
fi
if [[ $inserted_utils -eq 0 ]]; then
tmp+=("hyprutils")
inserted_utils=1
fi
if [[ $inserted_lang -eq 0 ]]; then
tmp+=("hyprlang")
inserted_lang=1
fi
if [[ $inserted_aqua -eq 0 ]]; then
tmp+=("aquamarine")
inserted_aqua=1
fi
tmp+=("hyprland")
else
tmp+=("$m")
fi
done
modules=("${tmp[@]}")
fi
fi
declare -A results
for mod in "${modules[@]}"; do
local script="$REPO_ROOT/install-scripts/$mod.sh"
echo "\n=== $mod ===" | tee -a "$SUMMARY_LOG"
[[ -f "$script" ]] || {
echo "[WARN] Missing $script" | tee -a "$SUMMARY_LOG"
results[$mod]="MISSING"
continue
}
chmod +x "$script" || true
if [[ $DO_DRY_RUN -eq 1 ]]; then
if DRY_RUN=1 "$script"; then results[$mod]="PASS"; else results[$mod]="FAIL"; fi
else
if "$script"; then results[$mod]="INSTALLED"; else results[$mod]="FAIL"; fi
fi
done
{
echo "\nSummary:"
for mod in "${modules[@]}"; do
printf "%-24s %s\n" "$mod" "${results[$mod]:-SKIPPED}"
done
echo "\nLogs under: $LOG_DIR. This run: $SUMMARY_LOG"
} | tee -a "$SUMMARY_LOG"
# Non-zero on any FAILs
local failed=0
for mod in "${modules[@]}"; do
[[ "${results[$mod]:-}" == FAIL ]] && failed=1
done
return $failed
}
# Parse args
while [[ $# -gt 0 ]]; do
case "$1" in
-h | --help)
usage
exit 0
;;
--with-deps)
WITH_DEPS=1
shift
;;
--dry-run)
DO_DRY_RUN=1
shift
;;
--install)
DO_INSTALL=1
shift
;;
--fetch-latest)
FETCH_LATEST=1
shift
;;
--restore)
RESTORE=1
shift
;;
--via-helper)
VIA_HELPER=1
shift
;;
--no-fetch)
NO_FETCH=1
shift
;;
--only)
ONLY_LIST=${2:-}
shift 2
;;
--skip)
SKIP_LIST=${2:-}
shift 2
;;
--set)
shift
while [[ $# -gt 0 && "$1" != --* ]]; do
SET_ARGS+=("$1")
shift
done
;;
*)
echo "Unknown argument: $1"
exit 2
;;
esac
done
# Validate options
if [[ $DO_INSTALL -eq 1 && $DO_DRY_RUN -eq 1 ]]; then
echo "[ERROR] Use either --dry-run or --install, not both." | tee -a "$SUMMARY_LOG"
exit 2
fi
ensure_tags_file
# Apply tag operations
if [[ $RESTORE -eq 1 ]]; then
restore_tags
fi
if [[ ${#SET_ARGS[@]} -gt 0 ]]; then
set_tags_from_args
fi
if [[ $FETCH_LATEST -eq 1 ]]; then
fetch_latest_tags
fi
# Run the stack
if [[ $DO_DRY_RUN -eq 0 && $DO_INSTALL -eq 0 ]]; then
echo "[INFO] No build option specified. Defaulting to --dry-run." | tee -a "$SUMMARY_LOG"
DO_DRY_RUN=1
fi
# If using helper, delegate to dry-run-build.sh for summary-only output
if [[ $VIA_HELPER -eq 1 ]]; then
if [[ $DO_INSTALL -eq 1 ]]; then
echo "[ERROR] --via-helper cannot be combined with --install (helper is dry-run only)." | tee -a "$SUMMARY_LOG"
exit 2
fi
# shellcheck disable=SC1090
source "$TAGS_FILE"
export HYPRLAND_TAG AQUAMARINE_TAG HYPRUTILS_TAG HYPRLANG_TAG HYPRGRAPHICS_TAG HYPRWAYLAND_SCANNER_TAG HYPRLAND_PROTOCOLS_TAG HYPRLAND_QT_SUPPORT_TAG HYPRLAND_QTUTILS_TAG WAYLAND_PROTOCOLS_TAG
helper="$REPO_ROOT/dry-run-build.sh"
if [[ ! -x "$helper" ]]; then
echo "[ERROR] dry-run-build.sh not found or not executable at $helper" | tee -a "$SUMMARY_LOG"
exit 1
fi
args=()
[[ $WITH_DEPS -eq 1 ]] && args+=("--with-deps")
[[ -n "$ONLY_LIST" ]] && args+=("--only" "$ONLY_LIST")
[[ -n "$SKIP_LIST" ]] && args+=("--skip" "$SKIP_LIST")
echo "[INFO] Delegating to dry-run-build.sh ${args[*]}" | tee -a "$SUMMARY_LOG"
"$helper" "${args[@]}"
exit $?
fi
run_stack