Debian-Hyprland/CLAUDE.md
Erick Santana 8b3cde5948 Add manual stack installer for building Hyprland from source
This commit adds a comprehensive manual stack installer that builds
the entire Hyprland ecosystem from source code, following the official
Hyprland wiki recommendations for manual compilation.

Features:
- Main installer script (install-manual-stack.sh) with user prompts
- Base dependencies installer (00-manual-stack-dependencies.sh)
- Wayland stack builder (01-manual-wayland-stack.sh)
- Hypr dependencies builder (02-manual-hypr-dependencies.sh)
- Hyprland core builder (03-manual-hyprland.sh)
- Updated CLAUDE.md with comprehensive project documentation

The manual stack approach ensures maximum compatibility with bleeding-edge
Hyprland features and addresses issues with outdated packaged versions
in Debian/Ubuntu repositories.
2025-07-07 20:39:31 -03:00

260 lines
7.8 KiB
Markdown

# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
This is the **KooL Debian-Hyprland** project - an automated installer for the Hyprland window manager on Debian Testing (Trixie) and SID (unstable). The project provides a comprehensive installation script that sets up Hyprland with a complete desktop environment, themes, and customizations.
**Important Context:**
- Hyprland is a **bleeding-edge** dynamic tiling Wayland compositor
- This installer addresses the fact that Debian/Ubuntu's packaged Hyprland versions are extremely outdated
- The project builds most components from source to ensure compatibility and latest features
- Hyprland requires C++26 standard support (gcc>=15 or clang>=19)
**Key Features:**
- Automated Hyprland installation with dependencies
- Pre-configured dotfiles and themes
- Support for NVIDIA GPUs
- Modular installation system
- Interactive user selection interface
- Comprehensive logging and error handling
## Architecture
### Core Components
**Main Scripts:**
- `install.sh` - Main installation orchestrator with whiptail UI
- `auto-install.sh` - One-line installer for remote execution
- `preset.sh` - Preset configuration file for automated installations
- `uninstall.sh` - Guided removal script
**Install Scripts Directory (`install-scripts/`):**
- `Global_functions.sh` - Shared utility functions library
- `00-dependencies.sh` - System dependencies and build tools
- `01-hypr-pkgs.sh` - Hyprland ecosystem packages
- `02-pre-cleanup.sh` - Pre-installation cleanup
- `03-Final-Check.sh` - Post-installation validation
- Component-specific scripts: `hyprland.sh`, `waybar.sh`, `rofi-wayland.sh`, etc.
### Script Architecture Pattern
All install scripts follow this standardized structure:
```bash
#!/bin/bash
# Package arrays definition
packages=( package1 package2 package3 )
# Navigate to parent directory
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
PARENT_DIR="$SCRIPT_DIR/.."
cd "$PARENT_DIR"
# Source shared functions
source Global_functions.sh
# Unique timestamped log file
LOG="Install-Logs/install-$(date +%d-%H%M%S)_component.log"
# Installation with progress tracking
for PKG in "${packages[@]}"; do
install_package "$PKG" "$LOG"
done
```
## Common Development Tasks
### Running the Installation
**Standard Installation:**
```bash
chmod +x install.sh
./install.sh
```
**With Preset Configuration:**
```bash
./install.sh --preset preset.sh
```
**Auto-installation (remote):**
```bash
sh <(curl -L https://raw.githubusercontent.com/JaKooLit/Debian-Hyprland/main/auto-install.sh)
```
### Testing Individual Components
**Run specific install scripts:**
```bash
# Must be run from repository root, not inside install-scripts/
./install-scripts/component.sh
```
**Example component installations:**
```bash
./install-scripts/gtk_themes.sh # Install GTK themes
./install-scripts/sddm.sh # Install SDDM login manager
./install-scripts/fonts.sh # Install fonts
./install-scripts/dotfiles.sh # Install dotfiles
```
### Validation and Debugging
**Check installation logs:**
```bash
# Logs are created in Install-Logs/ directory
ls -la Install-Logs/
tail -f Install-Logs/install-$(date +%d-%H%M%S)_component.log
```
**Validate essential packages:**
```bash
./install-scripts/03-Final-Check.sh
```
**Test prerequisite checks:**
```bash
# Check if user can install from source
grep -E "^deb-src" /etc/apt/sources.list
```
## Key Functions (Global_functions.sh)
**Package Management:**
- `install_package "$PKG" "$LOG"` - Install APT package with progress bar
- `build_dep "$PKG"` - Install build dependencies
- `cargo_install "$PKG"` - Install Rust package via Cargo
- `re_install_package "$PKG"` - Force reinstall package
- `uninstall_package "$PKG"` - Remove package with validation
**Progress and Logging:**
- `show_progress $PID "$package_name"` - Animated progress indicator
- All functions log to timestamped files in `Install-Logs/`
- Color-coded output: OK, ERROR, NOTE, INFO, WARN
## Source Building Patterns
Many components are built from source. Common patterns:
**Rust/Cargo Projects:**
```bash
git clone --recursive -b $tag https://github.com/repo.git
cd repo
source "$HOME/.cargo/env"
cargo build --release
sudo cp target/release/binary /usr/bin/
```
**Meson/Ninja Projects:**
```bash
meson setup build
ninja -C build
sudo ninja -C build install
```
## System Requirements
**Operating System:**
- Debian Testing (Trixie) or SID (unstable)
- **NOT compatible with Debian Stable (Bookworm)**
- Rolling release distros (Fedora, OpenSUSE) likely work well
- Ubuntu/Pop!_OS may have major compatibility issues due to outdated packages
**Prerequisites:**
- Non-root user with sudo privileges
- Uncommented `deb-src` lines in `/etc/apt/sources.list`
- C++26 compiler support (gcc>=15 or clang>=19)
- For NVIDIA users: nouveau driver uninstalled (if using proprietary drivers)
**Hardware Support:**
- NVIDIA GPU support via `nvidia.sh` script (requires special configuration)
- ASUS ROG laptop support via `rog.sh` script
- Bluetooth configuration via `bluetooth.sh` script
**Hyprland Core Dependencies:**
- aquamarine
- hyprlang
- hyprcursor
- hyprutils
- hyprgraphics
- hyprwayland-scanner (build-only)
## Important Notes
**Installation Behavior:**
- Scripts check for existing packages before installation
- Logs are timestamped and stored in `Install-Logs/`
- Failed installations continue with warnings
- Source-built packages install to `/usr/local/bin/` or `/usr/bin/`
**Common Issues:**
- Scripts must be run from repository root directory
- SDDM installation requires stopping other login managers first
- Network issues during source builds (swww, hyprlock, etc.)
- NVIDIA configuration requires system reboot
- GDM may have compatibility issues with Hyprland
- VM installations require special graphics configuration (virgl, mesa)
**File Locations:**
- Install logs: `Install-Logs/`
- Configuration backups: Created automatically
- Dotfiles: Downloaded from separate repository branch
- Themes: Installed to `/usr/share/themes/`
## Customization
**Package Selection:**
- Edit `install-scripts/01-hypr-pkgs.sh` to modify package lists
- Use `preset.sh` for automated installations
- Individual component scripts can be run separately
**Preset Configuration:**
```bash
# Example preset.sh entries
gtk_themes="ON"
bluetooth="ON"
thunar="ON"
dots="ON"
nvidia="OFF"
```
## Uninstallation
**Guided Removal:**
```bash
chmod +x uninstall.sh
./uninstall.sh
```
The uninstall script provides:
- Interactive package selection
- Configuration directory removal
- Locally-built package cleanup
- System stability warnings
## Hyprland Ecosystem Context
**About Hyprland:**
- Dynamic tiling Wayland compositor written in C++
- Extremely bleeding-edge with rapid development
- Requires latest dependencies and compiler support
- Not meant to be a full Desktop Environment - users must configure their own ecosystem
**Why This Installer Exists:**
- Official Debian/Ubuntu packages are extremely outdated and unusable
- Building from source requires complex dependency management
- This project automates the entire stack compilation and configuration
- Provides a complete, working Hyprland setup with dotfiles and themes
**Related Projects:**
- [Hyprland-Dots](https://github.com/JaKooLit/Hyprland-Dots) - Centralized dotfiles repository
- [Ubuntu-Hyprland](https://github.com/JaKooLit/Ubuntu-Hyprland) - Ubuntu-specific installer
- [Wallpaper-Bank](https://github.com/JaKooLit/Wallpaper-Bank) - Wallpaper collection
**Support Resources:**
- [Hyprland Wiki](https://wiki.hyprland.org/) - Official documentation
- [FAQ](https://github.com/JaKooLit/Hyprland-Dots/wiki/FAQ) - Common questions
- [Keybinds](https://github.com/JaKooLit/Hyprland-Dots/wiki/Keybinds) - Default shortcuts
- [Discord](https://discord.gg/kool-tech-world) - Community support