From 5d0e4efd3a7127f0f9843797552d6b73f0e01e0f Mon Sep 17 00:00:00 2001 From: Gil Portenseigne Date: Fri, 11 Sep 2026 09:09:34 +0200 Subject: [PATCH] script install niri --- .local/bin/build-niri-deb.sh | 175 +++++++++++++++++++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100755 .local/bin/build-niri-deb.sh diff --git a/.local/bin/build-niri-deb.sh b/.local/bin/build-niri-deb.sh new file mode 100755 index 0000000..212c716 --- /dev/null +++ b/.local/bin/build-niri-deb.sh @@ -0,0 +1,175 @@ +#!/usr/bin/env bash +# +# build-niri-deb.sh +# +# Compile Niri depuis les sources, génère un paquet .deb via cargo-deb, +# et gère son installation/désinstallation avec dpkg, sous Debian Trixie (13). +# +# Usage : +# ./build-niri-deb.sh Affiche cette description +# ./build-niri-deb.sh install Compile et installe Niri depuis la branche main +# ./build-niri-deb.sh install Compile et installe Niri depuis le tag/branche donné +# ./build-niri-deb.sh remove Désinstalle Niri et nettoie tout ce que le script a créé + +set -euo pipefail + +NIRI_REPO="https://github.com/YaLTeR/niri.git" +WORKDIR="$(pwd)/niri" +PKG_NAME="niri" +DESKTOP_FILE="/usr/share/wayland-sessions/niri.desktop" + +show_description() { + cat <<'EOF' +build-niri-deb.sh +================== + +Ce script compile Niri (compositeur Wayland) depuis les sources, génère un +paquet .deb via cargo-deb, puis l'installe avec dpkg. Il installe aussi un +fichier .desktop de session Wayland pour que Niri apparaisse dans les +gestionnaires de connexion (greetd, GDM, SDDM, ...). + +Usage : + ./build-niri-deb.sh install Compile et installe depuis la branche main + ./build-niri-deb.sh install Compile et installe depuis un tag/branche précis + (ex: ./build-niri-deb.sh install v25.08) + ./build-niri-deb.sh remove Désinstalle le paquet et nettoie tout + (paquet dpkg, fichier .desktop, sources clonées) + +Sans paramètre, ce message s'affiche et le script s'arrête sans rien faire. +EOF +} + +install_niri() { + local ref="${1:-main}" + + echo "==> Installation des dépendances de compilation" + sudo apt-get update + sudo apt-get install -y \ + build-essential \ + gcc \ + clang \ + git \ + curl \ + pkg-config \ + libudev-dev \ + libgbm-dev \ + libxkbcommon-dev \ + libegl1-mesa-dev \ + libwayland-dev \ + libinput-dev \ + libdbus-1-dev \ + libsystemd-dev \ + libseat-dev \ + libpipewire-0.3-dev \ + libpango1.0-dev \ + libdisplay-info-dev + + echo "==> Vérification de Rust" + if ! command -v cargo >/dev/null 2>&1; then + echo "Rust n'est pas installé. Installation via rustup..." + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y + # shellcheck disable=SC1090 + source "$HOME/.cargo/env" + else + echo "Rust déjà présent : $(cargo --version)" + fi + + echo "==> Installation de cargo-deb" + cargo install cargo-deb --locked + + echo "==> Récupération des sources de Niri (ref: ${ref})" + if [ -d "${WORKDIR}" ]; then + echo "Le dossier '${WORKDIR}' existe déjà, mise à jour..." + cd "${WORKDIR}" + git fetch --all + git checkout "${ref}" + git pull || true + else + git clone "${NIRI_REPO}" "${WORKDIR}" + cd "${WORKDIR}" + git checkout "${ref}" + fi + + echo "==> Compilation en mode release" + cargo build --release --locked + + echo "==> Génération du paquet .deb avec cargo-deb" + cargo deb --no-build + + local deb_file + deb_file=$(find target/debian -name "*.deb" | head -n1) + + if [ -z "${deb_file}" ]; then + echo "Erreur : aucun fichier .deb trouvé dans target/debian/" + exit 1 + fi + + echo "" + echo "==> Paquet généré : ${WORKDIR}/${deb_file}" + echo "==> Installation avec dpkg" + sudo dpkg -i "${deb_file}" + + echo "==> Installation du fichier .desktop pour la session Wayland" + sudo mkdir -p /usr/share/wayland-sessions + sudo tee "${DESKTOP_FILE}" > /dev/null < Terminé. Niri est installé et disponible comme session Wayland." +} + +remove_niri() { + echo "==> Désinstallation du paquet ${PKG_NAME} avec dpkg" + if dpkg -l "${PKG_NAME}" >/dev/null 2>&1; then + sudo dpkg -r "${PKG_NAME}" + else + echo " Le paquet ${PKG_NAME} n'est pas installé, on continue le nettoyage." + fi + + echo "==> Suppression du fichier .desktop de session" + if [ -f "${DESKTOP_FILE}" ]; then + sudo rm -f "${DESKTOP_FILE}" + echo " Supprimé : ${DESKTOP_FILE}" + else + echo " Rien à supprimer : ${DESKTOP_FILE}" + fi + + echo "==> Suppression du dossier de sources et de build (${WORKDIR})" + if [ -d "${WORKDIR}" ]; then + rm -rf "${WORKDIR}" + echo " Supprimé : ${WORKDIR}" + else + echo " Rien à supprimer : ${WORKDIR}" + fi + + echo "" + echo "==> Nettoyage terminé." +} + +# --- Point d'entrée --- + +ACTION="${1:-}" + +case "${ACTION}" in + install) + install_niri "${2:-main}" + ;; + remove) + remove_niri + ;; + "") + show_description + ;; + *) + echo "Paramètre inconnu : '${ACTION}'" + echo "" + show_description + exit 1 + ;; +esac