From d3e6e7316a96dea1e7ee94303cf2f033aba0c9e3 Mon Sep 17 00:00:00 2001 From: "yuri.kuit" Date: Sat, 23 May 2026 20:44:30 +0200 Subject: [PATCH] fedora niri --- v2/fedora-niri.sh | 120 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100755 v2/fedora-niri.sh diff --git a/v2/fedora-niri.sh b/v2/fedora-niri.sh new file mode 100755 index 0000000..bbfca50 --- /dev/null +++ b/v2/fedora-niri.sh @@ -0,0 +1,120 @@ +#!/bin/bash +set -euo pipefail + +########################## +# Color helpers (printf-safe, no tput) +########################## +RED="\033[0;31m" +GREEN="\033[0;32m" +YELLOW="\033[0;33m" +CYAN="\033[0;36m" +GRAY="\033[0;37m" +BOLD="\033[1m" +RESET="\033[0m" + +# Disable colors if output is not a terminal +if [ ! -t 1 ]; then + RED="" GREEN="" YELLOW="" CYAN="" GRAY="" BOLD="" RESET="" +fi + +say_red() { printf "\n"; printf "%b%s%b\n" "$RED" "$*" "$RESET"; } +say_green() { printf "\n"; printf "%b%s%b\n" "$GREEN" "$*" "$RESET"; } +say_yellow() { printf "\n"; printf "%b%s%b\n" "$YELLOW" "$*" "$RESET"; } +say_cyan() { printf "\n"; printf "%b%s%b\n" "$CYAN" "$*" "$RESET"; } +say_gray() { printf "\n"; printf "%b%s%b\n" "$GRAY" "$*" "$RESET"; } +say_bold() { printf "\n"; printf "%b%s%b\n" "$BOLD" "$*" "$RESET"; } + +########################## +# Use exported variables from main detection script +########################## +OS="${DETECTED_OS:-fedora}" +DDE="${DETECTED_DE:-none}" +DE="${SELECTED_DE:-none}" +TWM="${SELECTED_TWM:-none}" +INSTALL_LEVEL="${INSTALL_LEVEL:-minimal}" +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +########################## +# Helper functions +########################## +install_packages() { sudo dnf install -y "$@"; } +is_package_installed() { rpm -q "$@" &>/dev/null; } + +detect_de() { + # Check if a desktop session is currently running or XFCE is available + if [ "${XDG_CURRENT_DESKTOP:-}" ]; then + echo "${XDG_CURRENT_DESKTOP,,}" # lowercase the output + elif command -v xfce4-session >/dev/null 2>&1; then + echo "xfce" + else + echo "" + fi +} + +detect_display_manager() { + # Fedora/Systemd way to check the active DM symlink + if [ -L /etc/systemd/system/display-manager.service ]; then + basename "$(readlink /etc/systemd/system/display-manager.service)" | sed 's/\.service//' + else + echo "" + fi +} + +switch_display_manager() { + local target_dm="$1" + local current_dm + current_dm=$(detect_display_manager) + + if [[ "$current_dm" != "$target_dm" ]]; then + if [[ -n "$current_dm" ]]; then + say_yellow "Disabling existing display manager: $current_dm" + sudo systemctl disable "$current_dm" + fi + say_yellow "Enabling $target_dm..." + sudo systemctl enable "$target_dm" + fi + sudo systemctl set-default graphical.target +} + +######################### +# Start installation +########################## +say_yellow "Starting Niri setup..." + +CURRENT_DE="$(detect_de)" +CURRENT_DM="$(detect_display_manager)" + +# Core components for Niri (Fedora package names) +# Note: Ensure noctalia-shell and xwayland-satellite are available in your enabled Copr/repos +NIRI_PACKAGES=(niri fuzzel swaybg swaylock) + +if [[ -z "$CURRENT_DE" || "$CURRENT_DE" == "none" ]]; then + say_cyan "No Desktop Environment detected. Installing Niri (light setup with SDDM)..." + + install_packages sddm "${NIRI_PACKAGES[@]}" + switch_display_manager "sddm" + + say_green "Niri with SDDM installed successfully. You can reboot now to start Niri." +else + say_cyan "Detected existing Desktop Environment: $CURRENT_DE" + + # Always install the window manager packages + install_packages "${NIRI_PACKAGES[@]}" + + if [[ "$CURRENT_DM" == "lightdm" ]]; then + say_yellow "LightDM is currently active. Replacing with SDDM..." + + # Fedora equivalent to purge lightdm safely + sudo dnf remove -y lightdm lightdm-gtk + + install_packages sddm + switch_display_manager "sddm" + + say_green "LightDM removed and replaced with SDDM." + else + say_cyan "Current display manager: ${CURRENT_DM:-none}. Leaving it to handle Niri login sessions." + fi +fi + +# End of script +say_green "Niri / SDDM setup completed." \ No newline at end of file