Automated installation script for setting up Niri compositor, Quickshell, and Noctalia shell on Debian 13.
This script provides a complete installation workflow for:
- Niri: A scrollable-tiling Wayland compositor
- Quickshell: A QtQuick-based Wayland shell toolkit
- Noctalia: A desktop shell for Quickshell
- Debian 13 (Trixie)
- Root/sudo access
- Internet connection
Run the script to install all core components automatically:
chmod +x install.sh
./install.shUse the --menu flag to select which components to install:
./install.sh --menu
```a
This shows an interactive menu where you can choose:
- Core components (1-5): System dependencies, Pacstall, Niri, Quickshell, Noctalia
- Upgrade options (U1-UA): Upgrade individual components or all at once
- Optional components (6-12): VS Code, Oh My Zsh, document viewers, office tools, network fixes, GNOME removal, wallpaper changer
### Interactive Mode
Use the `--ask-step` flag to get prompted before each installation step:
```bash
./install.sh --ask-stepThis allows you to skip specific components if already installed or not needed.
Install specific optional components directly:
# Upgrade components
./install.sh --upgrade niri # Upgrade only Niri
./install.sh --upgrade quickshell # Upgrade only Quickshell
./install.sh --upgrade noctalia # Upgrade only Noctalia configuration
./install.sh --upgrade all # Upgrade all components
# Install VS Code with Wayland support
./install.sh --install-vscode
# Install Oh My Zsh
./install.sh --install-omz
# Install document viewers (zathura, loupe)
./install.sh --install-docs
# Install office tools (patat, gnumeric, abiword)
./install.sh --install-office
# Apply network & hardware fixes
./install.sh --apply-fixes
# Install random wallpaper changer (systemd timer)
./install.sh --install-wallpaper
# Remove GNOME/GDM3 (WARNING: removes desktop environment)
./install.sh --remove-gnome
# Combine multiple options
./install.sh --install-vscode --install-omz --apply-fixesFor a full list of options, run:
./install.sh --helpThe script performs the following steps:
Installs all required build tools and libraries:
- Build essentials (cmake, ninja-build, gcc, etc.)
- Qt6 development packages (base, declarative, wayland with private headers)
- Wayland libraries (protocols, client, scanner)
- Graphics libraries (libdrm, libgbm, EGL)
- Additional dependencies (PAM, polkit, jemalloc, CLI11)
- GitHub CLI (gh)
Post-install actions:
- Prompts for system reboot (due to systemd-resolved)
- Checks GitHub authentication status and offers login
Installs Pacstall, a community-driven package manager for Debian.
Installs the Niri Wayland compositor via Pacstall.
Builds and installs Quickshell from source:
- Clones from official repository
- Builds with CMake/Ninja
- Crash handler disabled (no google-breakpad dependency)
- Verifies installation
Clones the Noctalia shell configuration to ~/.config/quickshell/noctalia-shell.
If a config.kdl file exists in the same directory as the script, you'll be prompted to apply it as the Niri configuration.
- Adds Microsoft apt repository
- Installs VS Code
- Configures Wayland support via desktop file modification
- Adds shell alias for Wayland flag
- Installs zsh package
- Offers to change default shell to zsh
- Installs Oh My Zsh framework
- Installs zathura (PDF viewer)
- Installs zathura-pdf-poppler (PDF backend)
- Installs loupe (image viewer)
- Installs patat (terminal-based presentation tool)
- Installs gnumeric (spreadsheet application)
- Installs abiword (word processor)
- Installs NetworkManager, bluez, brightnessctl, upower
- Installs pipewire audio libraries
- Installs firmware packages (iwlwifi, realtek, etc.)
- Installs wlsunset (screen color temperature)
- Installs nwg-look (GTK theme switcher)
- Adds user to netdev, bluetooth, and video groups
- Updates NetworkManager configuration to managed mode
- Comments out wlan0 entries in
/etc/network/interfaces - Backs up configuration files before modifying
- Creates a script at
~/.local/bin/noctalia-random-wallpaper.sh - Sets up systemd service and timer files
- Automatically rotates wallpaper every 30 minutes
- Uses Noctalia IPC to change wallpaper
- Timer starts on boot and runs continuously
- WARNING: This removes your desktop environment
- Stops GDM3 service
- Purges GNOME packages (gnome-core, gnome-shell, gdm3, etc.)
- Runs autoremove to clean up dependencies
- Sets system to boot to multi-user target (console mode)
- Requires typing "yes" to confirm
The script includes an upgrade mode to update already-installed components:
# Upgrade individual components
./install.sh --upgrade niri # Updates Niri via Pacstall
./install.sh --upgrade quickshell # Rebuilds Quickshell from latest source
./install.sh --upgrade noctalia # Pulls latest Noctalia configuration
# Upgrade everything at once
./install.sh --upgrade all # Updates all three componentsNote: When using --upgrade, only the specified components are updated. Other installation options are ignored.
Place a config.kdl file next to the install script to have it automatically copied to ~/.config/niri/config.kdl during installation.
The script checks if GitHub CLI is authenticated. This is useful for:
- Cloning private repositories
- Avoiding rate limits
- Contributing to projects
If not authenticated, you'll be prompted to run gh auth login.
After installation completes, you can start Niri with:
niriOr add it as a session option in your display manager.
- cmake, ninja-build, build-essential
- pkg-config, spirv-tools
- qt6-base-dev, qt6-base-private-dev
- qt6-declarative-dev, qt6-declarative-private-dev
- qt6-wayland-dev, qt6-wayland-private-dev
- qt6-shadertools-dev
- libwayland-dev, wayland-protocols
- libdrm-dev, libgbm-dev, libegl1-mesa-dev
- libpolkit-agent-1-dev
- libpam0g-dev
- libjemalloc-dev
- libcli11-dev
- gh (GitHub CLI)
- systemd-resolved
If you experience DNS resolution issues after installation, reboot your system to properly initialize systemd-resolved.
If you skip GitHub authentication and later need it:
gh auth loginIf Quickshell build fails due to missing dependencies, ensure all Qt6 private development packages are installed:
sudo apt install qt6-base-private-dev qt6-declarative-private-dev qt6-wayland-private-devAfter installation, if quickshell is not found, ensure the installation directory is in your PATH, or log out and back in.
.
├── install.sh # Main installation script
├── config.kdl # Optional Niri configuration
└── README.md # This file
This installation script is provided as-is. Individual components (Niri, Quickshell, Noctalia) have their own licenses.
- Niri: YaLTeR/niri
- Quickshell: outfoxxed/quickshell
- Noctalia: outfoxxed/noctalia-shell