#!/usr/bin/env bash set -euo pipefail PAYLOAD="/usr/share/raveos/hyprland-theme/theme-data" if [[ ! -d "$PAYLOAD" ]]; then echo "Hiba: hiányzó payload: $PAYLOAD" >&2 exit 1 fi if [[ ${EUID} -ne 0 ]]; then echo "Root jogosultság szükséges." >&2 exit 1 fi xdg_lang="" [[ -f /etc/locale.conf ]] && xdg_lang="$(awk -F'=' '/^LANG=/{print $2}' /etc/locale.conf | tr -d '"')" xdg_lang="${xdg_lang%%.*}"; xdg_lang="${xdg_lang%%_*}" case "$xdg_lang" in hu) XDG_DESKTOP="Asztal"; XDG_DOWNLOAD="Letöltések"; XDG_TEMPLATES="Sablonok" XDG_PUBLIC="Nyilvános"; XDG_DOCUMENTS="Dokumentumok"; XDG_MUSIC="Zenék" XDG_PICTURES="Képek"; XDG_VIDEOS="Videók"; XDG_PROJECTS="Projektek" BM_DOCUMENTS="Dokumentumok"; BM_MUSIC="Zen%C3%A9k"; BM_PICTURES="K%C3%A9pek" BM_VIDEOS="Vide%C3%B3k"; BM_DOWNLOAD="Let%C3%B6lt%C3%A9sek" ;; de) XDG_DESKTOP="Schreibtisch"; XDG_DOWNLOAD="Download"; XDG_TEMPLATES="Vorlagen" XDG_PUBLIC="Öffentlich"; XDG_DOCUMENTS="Dokumente"; XDG_MUSIC="Musik" XDG_PICTURES="Bilder"; XDG_VIDEOS="Videos"; XDG_PROJECTS="Projekte" BM_DOCUMENTS="Dokumente"; BM_MUSIC="Musik"; BM_PICTURES="Bilder" BM_VIDEOS="Videos"; BM_DOWNLOAD="Download" ;; *) XDG_DESKTOP="Desktop"; XDG_DOWNLOAD="Downloads"; XDG_TEMPLATES="Templates" XDG_PUBLIC="Public"; XDG_DOCUMENTS="Documents"; XDG_MUSIC="Music" XDG_PICTURES="Pictures"; XDG_VIDEOS="Videos"; XDG_PROJECTS="Projects" BM_DOCUMENTS="Documents"; BM_MUSIC="Music"; BM_PICTURES="Pictures" BM_VIDEOS="Videos"; BM_DOWNLOAD="Downloads" ;; esac setup_xdg_dirs() { local home="$1" local dirs="${home}/.config/user-dirs.dirs" mkdir -p "$(dirname "$dirs")" \ "${home}/${XDG_DESKTOP}" \ "${home}/${XDG_DOWNLOAD}" \ "${home}/${XDG_TEMPLATES}" \ "${home}/${XDG_PUBLIC}" \ "${home}/${XDG_DOCUMENTS}" \ "${home}/${XDG_MUSIC}" \ "${home}/${XDG_PICTURES}" \ "${home}/${XDG_VIDEOS}" \ "${home}/${XDG_PROJECTS}" if [[ ! -f "$dirs" ]]; then cat > "${dirs}" < "$tmp" sorted="$( for entry in \ "file://${home}/${BM_DOCUMENTS}" \ "file://${home}/${BM_MUSIC}" \ "file://${home}/${BM_PICTURES}" \ "file://${home}/${BM_VIDEOS}" \ "file://${home}/${BM_DOWNLOAD}"; do printf '%s\n' "$entry" done | LC_ALL=C sort )" while IFS= read -r entry; do grep -qxF "$entry" "$tmp" || printf '%s\n' "$entry" >> "$tmp" done <<< "$sorted" install -m644 "$tmp" "$bookmarks" rm -f "$tmp" } set_hypr_keyboard() { local hypr_lua="$1" local kb_layout="hu" local kb_variant="" local xorg_kb="/etc/X11/xorg.conf.d/00-keyboard.conf" local kb_tmp [[ -f "$hypr_lua" ]] || return 0 if [[ -f "${xorg_kb}" ]]; then kb_tmp="$(awk '/XkbLayout/ {print $3}' "${xorg_kb}" 2>/dev/null | tr -d '"' | head -1)" [[ -n "$kb_tmp" ]] && kb_layout="${kb_tmp%%,*}" kb_tmp="$(awk '/XkbVariant/ {print $3}' "${xorg_kb}" 2>/dev/null | tr -d '"' | head -1)" [[ -n "$kb_tmp" ]] && kb_variant="${kb_tmp%%,*}" elif [[ -f /etc/default/keyboard ]]; then kb_tmp="$(awk -F'"' '/^XKBLAYOUT=/{print $2; exit}' /etc/default/keyboard 2>/dev/null)" [[ -n "$kb_tmp" ]] && kb_layout="${kb_tmp%%,*}" kb_tmp="$(awk -F'"' '/^XKBVARIANT=/{print $2; exit}' /etc/default/keyboard 2>/dev/null)" [[ -n "$kb_tmp" ]] && kb_variant="${kb_tmp%%,*}" fi sed -i "s/kb_layout[[:space:]]*=[[:space:]]*\"\"/kb_layout = \"${kb_layout}\"/" "$hypr_lua" sed -i "s/kb_variant[[:space:]]*=[[:space:]]*\"\"/kb_variant = \"${kb_variant}\"/" "$hypr_lua" } ensure_bashrc_hook() { local bashrc_path="$1" local hook_line='[[ -f /etc/profile.d/raveos-fastfetch.sh ]] && source /etc/profile.d/raveos-fastfetch.sh' touch "$bashrc_path" if ! grep -Fqx "$hook_line" "$bashrc_path" 2>/dev/null; then printf '\n%s\n' "$hook_line" >> "$bashrc_path" fi } install_user_avatar() { local user="$1" local home="$2" local uid="$3" local gid="$4" mkdir -p /usr/share/sddm/faces chmod 755 /usr/share/sddm/faces if [[ -f "${PAYLOAD}/hyprland-pp.png" ]]; then install -Dm644 "${PAYLOAD}/hyprland-pp.png" "/usr/share/sddm/faces/${user}.face.icon" if [[ ! -f "${home}/.face" ]]; then install -Dm644 "${PAYLOAD}/hyprland-pp.png" "${home}/.face" chown "${uid}:${gid}" "${home}/.face" 2>/dev/null || true fi if [[ ! -f "${home}/.face.icon" ]]; then install -Dm644 "${PAYLOAD}/hyprland-pp.png" "${home}/.face.icon" chown "${uid}:${gid}" "${home}/.face.icon" 2>/dev/null || true fi fi } # skel konfiguracio uj felhasznaloknak mkdir -p \ /etc/skel/.config/hypr \ /etc/skel/.config/dms \ /etc/skel/.config/quickshell/pockets/DMS \ /etc/skel/.config/DankMaterialShell \ /etc/skel/.config/kitty \ /etc/skel/.config/fastfetch \ /etc/skel/.config/raveos \ /etc/skel/.local/share/flatpak/overrides if [[ -d "${PAYLOAD}/hypr" ]]; then cp -rf "${PAYLOAD}/hypr/." /etc/skel/.config/hypr/ [[ -f /etc/skel/.config/hypr/hyprland.lua ]] && rm -f /etc/skel/.config/hypr/hyprland.conf set_hypr_keyboard /etc/skel/.config/hypr/hyprland.lua fi if [[ -d "${PAYLOAD}/dms" ]]; then cp -r "${PAYLOAD}/dms/." /etc/skel/.config/quickshell/pockets/DMS/ cp -r "${PAYLOAD}/dms/." /etc/skel/.config/dms/ if [[ -d "${PAYLOAD}/dms/matugen/configs" ]]; then mkdir -p /etc/skel/.config/matugen cp -r "${PAYLOAD}/dms/matugen/configs/." /etc/skel/.config/matugen/ fi fi if [[ -d "${PAYLOAD}/DankMaterialShell" ]]; then cp -rf "${PAYLOAD}/DankMaterialShell/." /etc/skel/.config/DankMaterialShell/ fi if [[ -d "${PAYLOAD}/kitty" ]]; then cp -r "${PAYLOAD}/kitty/." /etc/skel/.config/kitty/ fi for f in config.jsonc config-kitty.jsonc raveos-logo.png raveos-logo.txt; do [[ -f "${PAYLOAD}/fastfetch/${f}" ]] && \ install -Dm644 "${PAYLOAD}/fastfetch/${f}" "/etc/skel/.config/fastfetch/${f}" done [[ -f "${PAYLOAD}/background.jpg" ]] && \ install -Dm644 "${PAYLOAD}/background.jpg" /etc/skel/.config/background.jpg if [[ -f "${PAYLOAD}/hyprland-pp.png" ]]; then install -Dm644 "${PAYLOAD}/hyprland-pp.png" /etc/skel/.face install -Dm644 "${PAYLOAD}/hyprland-pp.png" /etc/skel/.face.icon fi for d in gtk-3.0 gtk-4.0 nwg-look Thunar xfce4 xsettingsd Kvantum; do if [[ -d "${PAYLOAD}/${d}" ]]; then mkdir -p "/etc/skel/.config/${d}" cp -rf "${PAYLOAD}/${d}/." "/etc/skel/.config/${d}/" fi done [[ -f "${PAYLOAD}/raveswitch/config.ron" ]] && \ install -Dm644 "${PAYLOAD}/raveswitch/config.ron" /etc/skel/.config/raveswitch/config.ron if [[ -d "${PAYLOAD}/skel" ]]; then cp -r --no-preserve=ownership "${PAYLOAD}/skel/." /etc/skel/ fi setup_xdg_dirs /etc/skel install_gtk_bookmarks /etc/skel ensure_bashrc_hook /etc/skel/.bashrc echo "1" > /etc/skel/.config/raveos/hyprland-migrated # Meglevo felhasznalok beallitasa while IFS=: read -r user _ uid gid _ home shell; do [[ "$uid" -ge 1000 ]] || continue [[ -d "$home" ]] || continue [[ "$shell" != "/usr/bin/nologin" && "$shell" != "/bin/false" ]] || continue mkdir -p \ "${home}/.config/hypr" \ "${home}/.config/dms" \ "${home}/.config/quickshell/pockets/DMS" \ "${home}/.config/DankMaterialShell" \ "${home}/.config/matugen" \ "${home}/.config/kitty" \ "${home}/.config/fastfetch" \ "${home}/.config/raveos" \ "${home}/.local/state/DankMaterialShell" \ "${home}/.local/share/flatpak/overrides" # Hyprland konfig if [[ ! -f "${home}/.config/hypr/hyprland.lua" && -d "${PAYLOAD}/hypr" ]]; then cp -rf "${PAYLOAD}/hypr/." "${home}/.config/hypr/" rm -f "${home}/.config/hypr/hyprland.conf" set_hypr_keyboard "${home}/.config/hypr/hyprland.lua" fi # hyprpaper konfig if [[ ! -f "${home}/.config/hypr/hyprpaper.conf" ]]; then printf 'preload = %s/.config/background.jpg\nwallpaper = ,%s/.config/background.jpg\nsplash = false\n' \ "$home" "$home" > "${home}/.config/hypr/hyprpaper.conf" fi # DMS konfig if [[ -d "${PAYLOAD}/dms" ]]; then cp -rn "${PAYLOAD}/dms/." "${home}/.config/quickshell/pockets/DMS/" 2>/dev/null || true cp -rn "${PAYLOAD}/dms/." "${home}/.config/dms/" 2>/dev/null || true if [[ -d "${PAYLOAD}/dms/matugen/configs" ]]; then cp -rn "${PAYLOAD}/dms/matugen/configs/." "${home}/.config/matugen/" 2>/dev/null || true fi fi if [[ -d "${PAYLOAD}/DankMaterialShell" ]]; then for item in "${PAYLOAD}/DankMaterialShell"/{.[!.]*,*}; do [[ -e "$item" ]] || continue dest="${home}/.config/DankMaterialShell/$(basename "$item")" [[ -e "$dest" ]] || cp -r "$item" "$dest" done fi # DMS session.json hatterkep if [[ ! -f "${home}/.local/state/DankMaterialShell/session.json" ]]; then cat > "${home}/.local/state/DankMaterialShell/session.json" <<-SEOF { "wallpaperPath": "${home}/.config/background.jpg" } SEOF fi # Hatterkep if [[ ! -f "${home}/.config/background.jpg" && -f "${PAYLOAD}/background.jpg" ]]; then install -Dm644 "${PAYLOAD}/background.jpg" "${home}/.config/background.jpg" fi # SDDM es user avatar install_user_avatar "$user" "$home" "$uid" "$gid" # Kitty if [[ ! -f "${home}/.config/kitty/kitty.conf" && -d "${PAYLOAD}/kitty" ]]; then cp -r "${PAYLOAD}/kitty/." "${home}/.config/kitty/" fi # Fastfetch for f in config.jsonc config-kitty.jsonc raveos-logo.png raveos-logo.txt; do if [[ ! -f "${home}/.config/fastfetch/${f}" && -f "${PAYLOAD}/fastfetch/${f}" ]]; then install -Dm644 "${PAYLOAD}/fastfetch/${f}" "${home}/.config/fastfetch/${f}" fi done # GTK, Thunar, nwg-look, xsettingsd, Kvantum for d in gtk-3.0 gtk-4.0 nwg-look Thunar xfce4 xsettingsd Kvantum; do if [[ ! -d "${home}/.config/${d}" && -d "${PAYLOAD}/${d}" ]]; then mkdir -p "${home}/.config/${d}" cp -rf "${PAYLOAD}/${d}/." "${home}/.config/${d}/" fi done # RaveSwitch if [[ ! -f "${home}/.config/raveswitch/config.ron" && -f "${PAYLOAD}/raveswitch/config.ron" ]]; then install -Dm644 "${PAYLOAD}/raveswitch/config.ron" "${home}/.config/raveswitch/config.ron" fi # Flatpak global override if [[ ! -f "${home}/.local/share/flatpak/overrides/global" && -f "${PAYLOAD}/skel/.local/share/flatpak/overrides/global" ]]; then install -Dm644 "${PAYLOAD}/skel/.local/share/flatpak/overrides/global" \ "${home}/.local/share/flatpak/overrides/global" fi setup_xdg_dirs "$home" install_gtk_bookmarks "$home" ensure_bashrc_hook "${home}/.bashrc" echo "1" > "${home}/.config/raveos/hyprland-migrated" # GTK tema beallitasa gsettings-szel ( runuser -u "$user" -- dbus-launch gsettings set org.gnome.desktop.interface gtk-theme 'Yaru-olive-dark' 2>/dev/null runuser -u "$user" -- dbus-launch gsettings set org.gnome.desktop.interface icon-theme 'Adwaitaru-olive' 2>/dev/null ) || true # matugen: wallpaper-alapu szinseme generalas ha elerheto if command -v matugen &>/dev/null && [[ -f "${home}/.config/background.jpg" ]]; then runuser -u "$user" -- matugen image "${home}/.config/background.jpg" 2>/dev/null || true fi # Kizarolag az erintett konfiguraciok jogosultsagait javitjuk chown "${uid}:${gid}" "${home}/.config" "${home}/.local" "${home}/.bashrc" 2>/dev/null || true chown -R "${uid}:${gid}" \ "${home}/.config/hypr" \ "${home}/.config/dms" \ "${home}/.config/quickshell" \ "${home}/.config/DankMaterialShell" \ "${home}/.config/matugen" \ "${home}/.config/kitty" \ "${home}/.config/fastfetch" \ "${home}/.config/gtk-3.0" \ "${home}/.config/gtk-4.0" \ "${home}/.config/nwg-look" \ "${home}/.config/Thunar" \ "${home}/.config/xfce4" \ "${home}/.config/xsettingsd" \ "${home}/.config/Kvantum" \ "${home}/.config/raveswitch" \ "${home}/.config/raveos" \ "${home}/.config/background.jpg" \ "${home}/.config/user-dirs.dirs" \ "${home}/.local/share/flatpak" \ "${home}/.local/state/DankMaterialShell" 2>/dev/null || true done < /etc/passwd echo "RaveOS Hyprland beállítás sikeresen alkalmazva."