Donald Williams 886f22ede3
Development to main Pin def v0.53.2 chg build dir location fix versioning (#235)
* Testing build from debian packages

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	new file:   BUILD_METHOD_OPTIONS.md
	new file:   CHANGES_SUMMARY.md
	new file:   GIT_STATUS.md
	new file:   INSTALL_METHOD_GUIDE.md
	new file:   QUICK_START.txt
	modified:   install.sh

* Fix package installation: skip plugins and debug symbols by default, improve dependency handling

* Add comprehensive troubleshooting guide for package installation issues

* Fix package installation path handling: use full paths instead of cd to preserve working directory

* Removed files related to debian pacakge building

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	deleted:    BUILD_METHOD_OPTIONS.md
	deleted:    GIT_STATUS.md
	deleted:    INSTALL_METHOD_GUIDE.md
	deleted:    PACKAGE_INSTALL_TROUBLESHOOTING.md
	deleted:    QUICK_START.txt

* Ported ubuntu quickshell install script to debian

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	new file:   install-scripts/quickshell.sh

* Forgot to add quickshell as install option

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   install.sh

* Added missing depdendencies to debian quickshell

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   install-scripts/quickshell.sh

* Fixing QML import pathing

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   install-scripts/quickshell.sh

* Adding shim for missing QML properies

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   install-scripts/quickshell.sh

* Added check for debian trixie in quickshell install

 Trixe doesn't support overview seems like the QT libs are too old

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   install-scripts/quickshell.sh

* Fixed typo in script

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   refresh-hypr-tags.sh

* libmuparser-dev is now needed

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   install-scripts/00-dependencies.sh
	modified:   install-scripts/hyprland.sh

* Adding hyprwire depdency

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   hypr-tags.env
	new file:   install-scripts/hyprwire.sh
	modified:   install.sh
	modified:   refresh-hypr-tags.sh
	modified:   update-hyprland.sh

* Updating hyprwire build order

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   install-scripts/hyprland.sh

* Fixing script permissions

* fixing hyprwire build error

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   hyprwire.sh

* Still fixing hyprwire build errors

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   hyprwire.sh

* Fixing SED error.  (I Hate sed)

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   hyprwire.sh

* Still getting append errors trying another fix

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   hyprwire.sh

* Updated tags for 0.53.0

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   ../hypr-tags.env
	modified:   hyprland.sh

* Fixing build error on hyprland

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   hyprland.sh

* Still getting build errors with hyprland

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   install-scripts/hyprland.sh

* More build errors to fix

 On branch development
 Your branch is ahead of 'origin/development' by 1 commit.
   (use "git push" to publish your local commits)

 Changes to be committed:
	modified:   install-scripts/hyprland.sh

* Fixind SED error

* Hyprland tag set to 52.2

* Scripts has hardcoded versions vs. pulling hypr-env

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   install-scripts/aquamarine.sh
	modified:   install-scripts/hyprcursor.sh
	modified:   install-scripts/hyprgraphics.sh
	modified:   install-scripts/hyprland-guiutils.sh
	modified:   install-scripts/hyprland-protocols.sh
	modified:   install-scripts/hyprland-qt-support.sh
	modified:   install-scripts/hyprland.sh
	modified:   install-scripts/hyprlang.sh
	modified:   install-scripts/hyprtoolkit.sh
	modified:   install-scripts/hyprutils.sh
	modified:   install-scripts/hyprwayland-scanner.sh
	modified:   install-scripts/hyprwire.sh
	modified:   install-scripts/wayland-protocols-src.sh

* Fixing update-hyprland to support tags

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   install-scripts/hyprutils.sh
	modified:   update-hyprland.sh

* Fixing update-hyprland (again) to use env-tags

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   update-hyprland.sh

* Fixing update-hyprland

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   update-hyprland.sh

* Trying to get trixie to build

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   install-scripts/hyprland.sh

* Updated README re: NVIDIA drivers & HL 0.52.2+ on Trixie

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   README.md

* UPD: Before ubunmtu was out-of-date, now can run HL dots

previsously ubuntu was older HL. Now it's up to date and can
also run current dotfiles. Removed old statement saying ubuntu could not
run current dotfiles.

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   README.md

* Pinned version to 52.2 for debian stable support

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   CHANGELOGS.md
	deleted:    CHANGES_SUMMARY.md
	modified:   Debian-Hyprland-Install-Upgrade.es.md
	modified:   Debian-Hyprland-Install-Upgrade.md
	modified:   hypr-tags.env
	new file:   hypr-tags.env-v.053
	modified:   update-hyprland.sh

* Fixed update-hyprland refresh-hypr-tags --force-override

It now assumes --fetch-latest
Small formatting fixes
Now shows version to upgrade too and pause to allow review

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   CHANGELOGS.md
	modified:   Debian-Hyprland-Install-Upgrade.es.md
    modified:   Debian-Hyprland-Install-Upgrade.md
	modified:   dry-run-build.sh
	modified:   refresh-hypr-tags.sh
	modified:   update-hyprland.sh

* Fixing build scrpt to work onm debian stable

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   install-scripts/hyprland-guiutils.sh

* Added selectable shim for hyprwire to allow building on trixie

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   hyprwire.sh

* Fixed hyprland 0.53 build for trixie found bug in xdph script

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   hyprland.sh
	modified:   xdph.sh
	modified:   ../install.sh
	modified:   ../update-hyprland.sh

* Major Update Debian trixie 0.53.1 support new build flags

 Trixie needs small patches to build vs. testing+
 Script now detects that. But some debian based distros might mask name
 There is a flag `--force-trixie` to include the fixes

 Updated the Install-Upgrade documents with the specifics

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   CHANGELOGS.md
	modified:   Debian-Hyprland-Install-Upgrade.es.md
	modified:   Debian-Hyprland-Install-Upgrade.md
	modified:   README.md
	modified:   hypr-tags.env
	deleted:    hypr-tags.env-v.053
	modified:   install.sh
	modified:   refresh-hypr-tags.sh
	modified:   update-hyprland.sh

* Updated CHANGELOG with note about debian stable support

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	renamed:    CHANGELOGS.md -> CHANGELOG.md

* Sync README/CHANGELOG with main

* Updated CHANGELOG and README re: debian trixie upgrades to Forky+

You must recompile Hyprland
`update-hyprland --install --with-deps`
Otherwise hyprland won't start
You will be returned to the login manager

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   CHANGELOG.md
	modified:   README.md

* Fixed install script to pull current headers for versioning

Fastfetch was showing wrong version duo to header files from 52.2

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   install-scripts/hyprland.sh

* Improved syncing versioning

  Gets commit hash, tag, date, commit count, dirty state from hyprland --version.
  Pulls library versions from hyprland --version first, and falls back to hypr-tags.env if missing.
  Writes those values into /usr/include/hyprland/src/version.h.

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   install-scripts/hyprland.sh

* Fixed ver mismatch in FF  Pinned stable to 53.2 create build dir

Now the code will compile in build directory vs. base directory
Easier to clean up

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   CHANGELOG.md
	modified:   Debian-Hyprland-Install-Upgrade.es.md
	modified:   Debian-Hyprland-Install-Upgrade.md
	modified:   README.md
	modified:   hypr-tags.env
	modified:   install-scripts/Global_functions.sh
	modified:   install-scripts/ags.sh
	modified:   install-scripts/aquamarine.sh
	modified:   install-scripts/hyprcursor.sh
	modified:   install-scripts/hyprgraphics.sh
	modified:   install-scripts/hypridle.sh
	modified:   install-scripts/hyprland-guiutils.sh
	modified:   install-scripts/hyprland-protocols.sh
	modified:   install-scripts/hyprland-qt-support.sh
	modified:   install-scripts/hyprland.sh
	modified:   install-scripts/hyprlang.sh
	modified:   install-scripts/hyprlock.sh
	modified:   install-scripts/hyprpolkitagent.sh
	modified:   install-scripts/hyprtoolkit.sh
	modified:   install-scripts/hyprutils.sh
	modified:   install-scripts/hyprwayland-scanner.sh
	modified:   install-scripts/hyprwire.sh
	modified:   install-scripts/quickshell.sh
	modified:   install-scripts/rofi-wayland.sh
	modified:   install-scripts/wayland-protocols-src.sh
	modified:   install-scripts/xdph.sh
	modified:   install-scripts/xkbcommon.sh
	modified:   refresh-hypr-tags.sh
	modified:   update-hyprland.sh

* Moved source and builds to build dir

Cleanup is now just removing the build directory and install-logs

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   install-scripts/Global_functions.sh
	modified:   install-scripts/ags.sh
	modified:   install-scripts/aquamarine.sh
	modified:   install-scripts/dotfiles-branch.sh
	modified:   install-scripts/gtk_themes.sh
	modified:   install-scripts/hyprcursor.sh
	modified:   install-scripts/hyprgraphics.sh
	modified:   install-scripts/hypridle.sh
	modified:   install-scripts/hyprland-guiutils.sh
	modified:   install-scripts/hyprland-protocols.sh
	modified:   install-scripts/hyprland-qt-support.sh
	modified:   install-scripts/hyprland.sh
	modified:   install-scripts/hyprlang.sh
	modified:   install-scripts/hyprlock.sh
	modified:   install-scripts/hyprpolkitagent.sh
	modified:   install-scripts/hyprtoolkit.sh
	modified:   install-scripts/hyprutils.sh
	modified:   install-scripts/hyprwayland-scanner.sh
	modified:   install-scripts/hyprwire.sh
	modified:   install-scripts/quickshell.sh
	modified:   install-scripts/rofi-wayland.sh
	modified:   install-scripts/rog.sh
	modified:   install-scripts/sddm_theme.sh
	modified:   install-scripts/swww.sh
	modified:   install-scripts/wayland-protocols-src.sh
	modified:   install-scripts/xdph.sh
	modified:   install-scripts/xkbcommon.sh
	modified:   install-scripts/zsh_pokemon.sh

* Fixed build error with hyprtoolkit

* Updated docs for new build dir layout and how to clean up after

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   Debian-Hyprland-Install-Upgrade.es.md
	modified:   Debian-Hyprland-Install-Upgrade.md

* Updated CHANGELOG with build dir change and fixes

 On branch development
 Your branch is up to date with 'origin/development'.

 Changes to be committed:
	modified:   CHANGELOG.md
2026-01-23 20:40:52 -05:00

268 lines
8.7 KiB
Bash
Executable File

#!/bin/bash
# 💫 https://github.com/JaKooLit 💫 #
# Quickshell (QtQuick-based shell toolkit) - Debian builder
set -Eeuo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
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
# Prefer /usr/local for pkg-config and CMake (for locally built libs like Breakpad)
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:${PKG_CONFIG_PATH:-}"
export CMAKE_PREFIX_PATH="/usr/local:${CMAKE_PREFIX_PATH:-}"
# Ensure logs dir exists at repo root (we cd into source later)
mkdir -p "$PARENT_DIR/Install-Logs"
LOG="$PARENT_DIR/Install-Logs/install-$(date +%d-%H%M%S)_quickshell.log"
MLOG="$PARENT_DIR/Install-Logs/install-$(date +%d-%H%M%S)_quickshell_build.log"
# Debian Trixie guard: Quickshell not compatible on Trixie at this time
if grep -Eiq '\bVERSION_CODENAME=trixie\b' /etc/os-release; then
echo "[INFO] debian Trixie not compatible with quickshell. Skipping quickshell install." | tee -a "$LOG"
exit 0
fi
# Refresh sudo credentials once (install_package uses sudo internally)
if command -v sudo >/dev/null 2>&1; then
sudo -v 2>/dev/null || sudo -v
fi
note() { echo -e "${NOTE} $*" | tee -a "$LOG"; }
info() { echo -e "${INFO} $*" | tee -a "$LOG"; }
# Build-time and runtime deps per upstream BUILD.md (Qt 6.6+)
# Some may already be present from 00-dependencies.sh
DEPS=(
build-essential
git
autoconf
automake
libtool
zlib1g-dev
libcurl4-openssl-dev
cmake
ninja-build
pkg-config
spirv-tools
qt6-base-dev
qt6-declarative-dev
qt6-shadertools-dev
qt6-tools-dev
qt6-tools-dev-tools
qt6-declarative-private-dev
# Wayland + protocols
libwayland-dev
wayland-protocols
# Screencopy/GBM/DRM
libdrm-dev
libgbm-dev
# Optional integrations enabled by default
libpipewire-0.3-dev
libpam0g-dev
libglib2.0-dev
libpolkit-gobject-1-dev
libpolkit-agent-1-dev
libjemalloc-dev
# X11 (optional but harmless)
libxcb1-dev
# SVG support (package name differs across releases; try both)
qt6-svg-dev
libqt6svg6-dev
# Third-party libs used by Quickshell
libcli11-dev
# Qt Quick runtime QML modules required at runtime (RectangularShadow, etc.)
qml6-module-qtquick-effects
qml6-module-qtquick-shapes
qml6-module-qtquick-controls
qml6-module-qtquick-layouts
qml6-module-qt5compat-graphicaleffects
)
printf "\n%s - Installing ${SKY_BLUE}Quickshell build dependencies${RESET}....\n" "${NOTE}"
# Single apt transaction for speed and robustness, but filter packages with no candidate
sudo apt update 2>&1 | tee -a "$LOG"
AVAILABLE_PKGS=()
for PKG in "${DEPS[@]}"; do
CAND=$(apt-cache policy "$PKG" | awk '/Candidate:/ {print $2}')
if [ -n "$CAND" ] && [ "$CAND" != "(none)" ]; then
AVAILABLE_PKGS+=("$PKG")
else
note "Skipping $PKG (no candidate in APT)"
fi
done
if ! sudo apt install -y "${AVAILABLE_PKGS[@]}" 2>&1 | tee -a "$LOG"; then
echo "${ERROR} apt failed when installing Quickshell build dependencies." | tee -a "$LOG"
exit 1
fi
# Validate critical tools
for bin in cmake ninja pkg-config; do
if ! command -v "$bin" >/dev/null 2>&1; then
echo "${ERROR} Required tool '$bin' not found after apt install." | tee -a "$LOG"
exit 1
fi
done
# Build Google Breakpad from source if pkg-config 'breakpad' is missing
if ! pkg-config --exists breakpad; then
note "Building Google Breakpad from source..."
BP_DIR="$SRC_ROOT/breakpad"
rm -rf "$BP_DIR"
mkdir -p "$BP_DIR"
(
set -Eeuo pipefail
cd "$BP_DIR"
# Clone Breakpad into the root of BP_DIR (expected layout: ./src)
git clone --depth=1 https://chromium.googlesource.com/breakpad/breakpad . 2>&1 | tee -a "$MLOG"
# lss must live at src/third_party/lss relative to Breakpad root
git clone --depth=1 https://chromium.googlesource.com/linux-syscall-support src/third_party/lss 2>&1 | tee -a "$MLOG" || true
# Autotools bootstrap if needed (at Breakpad root)
if [ ! -x ./configure ]; then
autoreconf -fi 2>&1 | tee -a "$MLOG"
fi
./configure --prefix=/usr/local 2>&1 | tee -a "$MLOG"
make -j "$(nproc 2>/dev/null || getconf _NPROCESSORS_ONLN)" 2>&1 | tee -a "$MLOG"
sudo make install 2>&1 | tee -a "$MLOG"
) || { echo "${ERROR} Breakpad build failed." | tee -a "$LOG"; exit 1; }
# Provide pkg-config file if upstream didn't install one under the name 'breakpad'
if ! pkg-config --exists breakpad; then
if pkg-config --exists breakpad-client; then
sudo mkdir -p /usr/local/lib/pkgconfig
sudo ln -sf /usr/local/lib/pkgconfig/breakpad-client.pc /usr/local/lib/pkgconfig/breakpad.pc
elif [ -f /usr/local/lib/libbreakpad_client.a ] || [ -f /usr/local/lib/libbreakpad_client.so ]; then
TMP_PC="/tmp/breakpad.pc.$$"
cat >"$TMP_PC" <<'PCEOF'
prefix=/usr/local
exec_prefix=${prefix}
includedir=${prefix}/include
libdir=${exec_prefix}/lib
Name: breakpad
Description: Google Breakpad client library
Version: 0
Libs: -L${libdir} -lbreakpad_client
Cflags: -I${includedir}
PCEOF
sudo mkdir -p /usr/local/lib/pkgconfig
sudo mv "$TMP_PC" /usr/local/lib/pkgconfig/breakpad.pc
fi
fi
if ! pkg-config --exists breakpad; then
echo "${ERROR} breakpad pkg-config entry not found after installation." | tee -a "$LOG"
exit 1
fi
fi
# Clone source (prefer upstream forgejo; mirror available at github:quickshell-mirror/quickshell)
SRC_DIR="$SRC_ROOT/quickshell-src"
if [ -d "$SRC_DIR" ]; then
note "Removing existing $SRC_DIR"
rm -rf "$SRC_DIR"
fi
note "Cloning Quickshell source..."
if git clone --depth=1 https://git.outfoxxed.me/quickshell/quickshell "$SRC_DIR" 2>&1 | tee -a "$LOG"; then
cd "$SRC_DIR"
else
echo "${ERROR} Failed to clone Quickshell repo" | tee -a "$LOG"
exit 1
fi
# Configure with Ninja; enable RelWithDebInfo, leave features ON (deps installed above)
CMAKE_FLAGS=(
-GNinja
-DCMAKE_BUILD_TYPE=RelWithDebInfo
-DDISTRIBUTOR="Debian-Hyprland installer"
)
note "Configuring Quickshell (CMake)..."
# Use explicit source/build dirs and preserve cmake exit code with pipefail
BUILD_DIR="$BUILD_ROOT/quickshell"
mkdir -p "$BUILD_DIR"
if ! cmake -S . -B "$BUILD_DIR" "${CMAKE_FLAGS[@]}" 2>&1 | tee -a "$MLOG"; then
echo "${ERROR} CMake configure failed. See log: $MLOG" | tee -a "$LOG"
exit 1
fi
# Ensure build files exist before invoking ninja
if [ ! -f "$BUILD_DIR/build.ninja" ]; then
echo "${ERROR} build/build.ninja not generated; aborting build." | tee -a "$LOG"
exit 1
fi
note "Building Quickshell (Ninja)..."
if ! cmake --build "$BUILD_DIR" 2>&1 | tee -a "$MLOG"; then
echo "${ERROR} Build failed. See log: $MLOG" | tee -a "$LOG"
exit 1
fi
note "Installing Quickshell..."
if ! sudo cmake --install "$BUILD_DIR" 2>&1 | tee -a "$MLOG"; then
echo "${ERROR} Installation failed. See log: $MLOG" | tee -a "$LOG"
exit 1
fi
echo "${OK} Quickshell installed successfully." | tee -a "$MLOG"
# Provide a shim for missing QtQuick.Effects.RectangularShadow (wraps MultiEffect)
OVR_DIR=/usr/local/share/quickshell-overrides/QtQuick/Effects
sudo install -d -m 755 "$OVR_DIR"
sudo tee "$OVR_DIR/RectangularShadow.qml" >/dev/null <<'QML'
import QtQuick
import QtQuick.Effects
Item {
id: root
// Minimal RectangularShadow shim using MultiEffect
// Map common properties used by configs
property alias source: fx.source
property color color: "#000000"
property real opacity: 0.4
property real blur: 32
property real xOffset: 0
property real yOffset: 6
property real scale: 1.0
MultiEffect {
id: fx
anchors.fill: parent
shadowEnabled: true
shadowColor: root.color
shadowOpacity: root.opacity
shadowBlur: root.blur
shadowHorizontalOffset: root.xOffset
shadowVerticalOffset: root.yOffset
shadowScale: root.scale
}
}
QML
# Install a wrapper to run Quickshell with system QML imports (avoids Nix/Flatpak overrides)
WRAP=/usr/local/bin/qs-system
sudo tee "$WRAP" >/dev/null <<'EOSH'
#!/usr/bin/env bash
# Run Quickshell preferring system Qt6 QML modules and overrides
OVR=/usr/local/share/quickshell-overrides
export QML_IMPORT_PATH="$OVR${QML_IMPORT_PATH:+:$QML_IMPORT_PATH}"
export QML2_IMPORT_PATH="$OVR${QML2_IMPORT_PATH:+:$QML2_IMPORT_PATH}"
exec qs "$@"
EOSH
sudo chmod +x "$WRAP" || true
# Build logs already written to $PARENT_DIR/Install-Logs
# Keep source directory for reference in case user wants to rebuild later
printf "\n%.0s" {1..1}