diff --git a/Containerfile b/Containerfile index 91a48bf..8e93e48 100644 --- a/Containerfile +++ b/Containerfile @@ -73,6 +73,14 @@ RUN --mount=type=bind,from=build-ctx,source=/build/22-noctalia.sh,target=/tmp/22 --mount=type=tmpfs,dst=/tmp \ bash /tmp/22-noctalia.sh +# LAYER 2e: Plymouth Bootsplash (Text-Theme + Initramfs-Rebuild) +RUN --mount=type=bind,from=build-ctx,source=/build/23-plymouth.sh,target=/tmp/23-plymouth.sh \ + --mount=type=bind,from=build-ctx,source=/build/plymouth-theme,target=/tmp/plymouth-theme \ + --mount=type=cache,dst=/var/cache \ + --mount=type=cache,dst=/var/log \ + --mount=type=tmpfs,dst=/tmp \ + bash /tmp/23-plymouth.sh + # LAYER 3: Virtualisierung & Tools (Großer Download - stark gecacht) RUN --mount=type=bind,from=build-ctx,source=/build/30-virt.sh,target=/tmp/30-virt.sh \ --mount=type=cache,dst=/var/cache \ @@ -116,6 +124,9 @@ COPY configs/bootc-timer-override.conf /usr/lib/systemd/system/bootc-fetch-apply COPY configs/bootc-override.conf /usr/lib/systemd/system/bootc-fetch-apply-updates.service.d/override.conf COPY configs/remount-fs-ostree-skip.conf /usr/lib/systemd/system/systemd-remount-fs.service.d/skip-on-ostree.conf +# 2b. Kernel-Args (Bootsplash: rhgb quiet) +COPY configs/kargs-plymouth.toml /usr/lib/bootc/kargs.d/plymouth.toml + # 3. Kopiere die Session-Helfer und Desktop-Defaults COPY --chmod=755 scripts/notify-bootc-user.sh /usr/bin/ COPY --chmod=755 scripts/kanshi-autoconfig /usr/bin/kanshi-autoconfig @@ -127,6 +138,9 @@ COPY configs/skel/ /etc/skel/ # Wayland-Session fuer Display-Manager (Greeter-Auswahl) COPY configs/wayland-sessions/labwc.desktop /usr/share/wayland-sessions/labwc.desktop +# Fontconfig-Defaults (Noto statt DejaVu) +COPY configs/fontconfig/60-fluffy-noto.conf /usr/share/fontconfig/conf.d/60-fluffy-noto.conf + # greetd-Konfiguration (Noctalia-Greeter + tuigreet-Fallback dokumentiert) COPY configs/greetd/config.toml /etc/greetd/config.toml diff --git a/build/20-desktop-labwc.sh b/build/20-desktop-labwc.sh index 871703e..bcbaa74 100755 --- a/build/20-desktop-labwc.sh +++ b/build/20-desktop-labwc.sh @@ -39,13 +39,30 @@ dnf5 install -y \ accountsservice \ google-noto-sans-fonts \ google-noto-sans-mono-fonts \ + google-noto-color-emoji-fonts \ + glibc-langpack-de \ + adwaita-icon-theme \ + adwaita-cursor-theme \ + gnome-keyring \ + libsecret \ + thunar \ + thunar-volman \ + thunar-archive-plugin \ + file-roller \ + tumbler \ + gvfs \ + firewalld \ + firewall-config \ + nss-mdns \ wdisplays \ brightnessctl \ swaylock \ - thunar \ - thunar-volman \ - tumbler \ - gvfs + playerctl \ + evince \ + loupe \ + gnome-text-editor \ + seahorse \ + cups-browsed # Optionale Pakete (duerfen fehlen -> --skip-unavailable, eigener Aufruf, # damit ein fehlendes Optionales den Kern nicht zu Fall bringt) @@ -66,10 +83,19 @@ systemctl --global enable pipewire.socket pipewire-pulse.socket wireplumber.serv # Bluetooth-Daemon (System-Service, kein --global) systemctl enable bluetooth.service +# Thunderbolt-Dock-Autorisierung (ohne boltd bleibt das Dock stumm) +systemctl enable bolt.service + # Drucken per Socket-Activation (Fedora-Standard: cups.socket statt Service) systemctl enable cups.socket +# Netzwerkdrucker automatisch als Warteschlangen anlegen +systemctl enable cups-browsed.service + # mDNS-Discovery (Netzwerkdrucker finden, .local-Aufloesung) systemctl enable avahi-daemon.socket +# Firewall (Laptop!) per Default an +systemctl enable firewalld.service + dnf5 clean all diff --git a/build/21-greetd.sh b/build/21-greetd.sh index dc7ecca..c89b91e 100755 --- a/build/21-greetd.sh +++ b/build/21-greetd.sh @@ -22,10 +22,17 @@ dnf5 install -y \ dbus-daemon \ polkit \ tuigreet \ - noctalia-greeter + noctalia-greeter \ + fprintd dnf5 clean all +# Fingerprint (Framework u.a.): System-Auth per authselect erweitern, damit +# sudo/Polkit/login-Pfade Finger anbieten (nach fprintd-enroll auf Hardware). +# Greeter-PAM (/etc/pam.d/greetd) bewusst NICHT angefasst: Feinschliff erst +# auf echter Hardware mit Reader testbar, kein VM-Test moeglich. +authselect enable-feature with-fingerprint || echo "WARN: with-fingerprint nicht aktivierbar - auf Hardware pruefen" + # accounts-daemon: liefert User-Avatare auf dem Login-Screen. systemctl enable accounts-daemon.service diff --git a/build/22-noctalia.sh b/build/22-noctalia.sh index 0986c94..1542854 100755 --- a/build/22-noctalia.sh +++ b/build/22-noctalia.sh @@ -39,25 +39,21 @@ dnf5 install -y \ f${FEDORA_VERSION}-backgrounds \ fedora-workstation-backgrounds -# Standard-Wallpaper fuer ~/Pictures neuer Benutzer (Noctalias Picker zeigt -# das XDG-Bilderverzeichnis; ohne Inhalt bleibt er leer). Fedora-eigene -# Motive (Defaults aller Desktops + Supplemental-Pool, offen lizenziert), -# deterministisch umbenannt. Vollauswahl bleibt zusaetzlich unter -# /usr/share/backgrounds (Picker-Verzeichnis dorthin umstellbar). -mkdir -p /etc/skel/Pictures +# Flacher Wallpaper-Pool fuer Noctalias Picker (der ist NICHT rekursiv und +# sieht Unterordner unter /usr/share/backgrounds nicht). Symlinks statt +# Kopien: null Mehrbytes im Image. Deterministisch benannt, vollstaendig. +mkdir -p /usr/share/noctalia-wallpapers i=0 while IFS= read -r img; do i=$((i + 1)) - if [ "$i" -gt 12 ]; then - break - fi ext="${img##*.}" - cp "$img" "/etc/skel/Pictures/fluffy-wallpaper-${i}.${ext}" + ln -sf "$img" "/usr/share/noctalia-wallpapers/fluffy-pool-$(printf '%02d' "$i").${ext}" done < <(find /usr/share/backgrounds -type f \( -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' \) | sort) if [ "$i" -lt 1 ]; then echo "FEHLER: keine Wallpaper unter /usr/share/backgrounds gefunden" exit 1 fi -ls -l /etc/skel/Pictures +echo "Wallpaper-Pool: $i Motive" +ls /usr/share/noctalia-wallpapers dnf5 clean all diff --git a/build/23-plymouth.sh b/build/23-plymouth.sh new file mode 100644 index 0000000..0f76223 --- /dev/null +++ b/build/23-plymouth.sh @@ -0,0 +1,31 @@ +#!/usr/bin/bash +set -eoux pipefail + +############################################################################### +# Transaction: Plymouth Bootsplash (Text-Theme "fluffy-pancake") +############################################################################### +# - Eigenes Theme aus build/plymouth-theme/ installieren, als Default setzen. +# - Initramfs neu bauen (Plymouth-Modul muss rein, sonst kein Early-Splash). +# no-hostonly = laeuft auf jeder Hardware (VM + Laptop). +# Kernel aus dem IMAGE (/usr/lib/modules), NICHT uname -r (Host-Kernel!). +############################################################################### +echo "Installing Plymouth splash (fluffy-pancake)..." + +dnf5 install -y \ + --allowerasing \ + plymouth \ + plymouth-system-theme + +mkdir -p /usr/share/plymouth/themes/fluffy +cp /tmp/plymouth-theme/fluffy.plymouth /tmp/plymouth-theme/fluffy.script \ + /usr/share/plymouth/themes/fluffy/ +plymouth-set-default-theme fluffy + +for kdir in /usr/lib/modules/*; do + kver="$(basename "${kdir}")" + dracut --force --no-hostonly --kver "${kver}" "${kdir}/initramfs.img" +done + +systemctl enable plymouth-start.service || true + +dnf5 clean all diff --git a/build/plymouth-theme/fluffy.plymouth b/build/plymouth-theme/fluffy.plymouth new file mode 100644 index 0000000..4559e99 --- /dev/null +++ b/build/plymouth-theme/fluffy.plymouth @@ -0,0 +1,8 @@ +[Plymouth Theme] +Name=fluffy-pancake +Description=fluffy-pancake text splash +ModuleName=script + +[script] +ImageDir=/usr/share/plymouth/themes/fluffy +ScriptFile=/usr/share/plymouth/themes/fluffy/fluffy.script diff --git a/build/plymouth-theme/fluffy.script b/build/plymouth-theme/fluffy.script new file mode 100644 index 0000000..1db2450 --- /dev/null +++ b/build/plymouth-theme/fluffy.script @@ -0,0 +1,28 @@ +# fluffy-pancake Plymouth-Theme (script-Plugin). +# Dunkler Hintergrund (Noctalia-nah), zentrierter Schriftzug, Statuszeile. +# Plymouth ruft message_callback bei Boot-Meldungen und boot_progress_callback +# waehrenddessen; quit_callback beim Uebergang zum Login. + +Window.SetBackgroundTopColor (0.10, 0.11, 0.15); +Window.SetBackgroundBottomColor (0.10, 0.11, 0.15); + +title_image = Message ("fluffy-pancake"); +title_sprite = Sprite (title_image); +title_sprite.SetPosition (Window.GetX () / 2 - title_image.GetWidth () / 2, + Window.GetY () / 2 - title_image.GetHeight () / 2, 10); + +status_image = Image.Text ("", 1, 1, 1); +status_sprite = Sprite (status_image); + +fun message_callback (text) { + status_image = Image.Text (text, 1, 1, 1); + status_sprite.SetImage (status_image); + status_sprite.SetPosition (Window.GetX () / 2 - status_image.GetWidth () / 2, + Window.GetY () * 3 / 4, 10); +} + +fun boot_progress_callback (duration, progress) { +} + +fun quit_callback () { +} diff --git a/configs/flatpak-preinstall.service b/configs/flatpak-preinstall.service index e6aa4fb..53d4b83 100644 --- a/configs/flatpak-preinstall.service +++ b/configs/flatpak-preinstall.service @@ -9,7 +9,12 @@ Type=oneshot ExecStartPre=/usr/bin/flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo # Bazaar + Brave + GTK-Theme-Runtimes, damit Flatpak-GTK3-Apps dem # Noctalia-Theme (adw-gtk3/-dark) folgen koennen. Laeuft einmalig. -ExecStart=/usr/bin/flatpak install -y flathub io.github.kolunmi.Bazaar com.brave.Browser org.gtk.Gtk3theme.adw-gtk3 org.gtk.Gtk3theme.adw-gtk3-dark +ExecStart=/usr/bin/flatpak install -y flathub io.github.kolunmi.Bazaar com.brave.Browser org.gtk.Gtk3theme.adw-gtk3 org.gtk.Gtk3theme.adw-gtk3-dark org.kde.KStyle.Adwaita +# Noctalia-CSS fuer ALLE Flatpaks lesbar machen (read-only, systemweit): +# volle Palette statt nur Hell/Dunkel - gilt auch fuer spaeter per Bazaar +# installierte Apps (kein Override pro App noetig, Neustart genuegt). +# Chromium/Brave ignoriert GTK-CSS ohnehin (nur Hell/Dunkel per Portal). +ExecStart=/usr/bin/flatpak override --system --filesystem=xdg-config/gtk-3.0:ro --filesystem=xdg-config/gtk-4.0:ro ExecStartPost=/usr/bin/touch /var/lib/flatpak/.preinstall-done ExecStartPost=/usr/bin/systemctl disable flatpak-preinstall.service RemainAfterExit=yes diff --git a/configs/fontconfig/60-fluffy-noto.conf b/configs/fontconfig/60-fluffy-noto.conf new file mode 100644 index 0000000..6c4635a --- /dev/null +++ b/configs/fontconfig/60-fluffy-noto.conf @@ -0,0 +1,15 @@ + + + + + + sans-serif + Noto Sans + + + monospace + Noto Sans Mono + + diff --git a/configs/kargs-plymouth.toml b/configs/kargs-plymouth.toml new file mode 100644 index 0000000..bc586ce --- /dev/null +++ b/configs/kargs-plymouth.toml @@ -0,0 +1,4 @@ +# Bootsplash aktivieren (Plymouth-Theme "fluffy-pancake" liegt im Image). +# quiet: Boot-Log ausblenden (per Esc im Splash einblendbar). +# bootc wertet kargs.d bei Installation und Upgrade aus. +kargs = ["rhgb", "quiet"] diff --git a/configs/skel/.config/labwc/environment b/configs/skel/.config/labwc/environment index 847692c..1579792 100644 --- a/configs/skel/.config/labwc/environment +++ b/configs/skel/.config/labwc/environment @@ -1,5 +1,8 @@ # labwc-Umgebung – fluffy-pancake (Noctalia-Zweig) # Wird von labwc beim Start eingelesen (~/.config/labwc/environment). +# Sprache bewusst hier (nicht nur Installer-locale.conf): gilt +# deterministisch fuer jede Session. +LANG=de_DE.UTF-8 XKB_DEFAULT_LAYOUT=de XKB_DEFAULT_VARIANT=nodeadkeys QT_QPA_PLATFORM=wayland diff --git a/configs/skel/.config/labwc/rc.xml b/configs/skel/.config/labwc/rc.xml index 1daefca..2f959fa 100644 --- a/configs/skel/.config/labwc/rc.xml +++ b/configs/skel/.config/labwc/rc.xml @@ -38,6 +38,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/configs/skel/.config/mimeapps.list b/configs/skel/.config/mimeapps.list index 57276ea..f739d83 100644 --- a/configs/skel/.config/mimeapps.list +++ b/configs/skel/.config/mimeapps.list @@ -1,3 +1,7 @@ # Standard-Anwendungen – fluffy-pancake (Noctalia-Zweig) [Default Applications] inode/directory=thunar.desktop +text/plain=org.gnome.TextEditor.desktop +application/pdf=org.gnome.Evince.desktop +image/png=org.gnome.Loupe.desktop +image/jpeg=org.gnome.Loupe.desktop diff --git a/configs/skel/.config/noctalia/shell.toml b/configs/skel/.config/noctalia/shell.toml index bb7ca33..9232bf9 100644 --- a/configs/skel/.config/noctalia/shell.toml +++ b/configs/skel/.config/noctalia/shell.toml @@ -5,3 +5,7 @@ # GUI-Aenderung (Settings -> Security) landet in settings.toml und gewinnt. [shell] polkit_agent = true +# UI-Sprache fest auf Deutsch (Katalog de.json ist gebuendelt). +# Auto-Detect wuerde bei fehlender Session-Locale auf Englisch fallen. +# GUI-Aenderung gewinnt ueber dieser Datei. +lang = "de" diff --git a/configs/skel/.config/noctalia/templates.toml b/configs/skel/.config/noctalia/templates.toml index 4008c19..9454afa 100644 --- a/configs/skel/.config/noctalia/templates.toml +++ b/configs/skel/.config/noctalia/templates.toml @@ -13,3 +13,8 @@ [theme.templates] enable_builtin_templates = true builtin_ids = ["alacritty", "gtk3", "gtk4", "labwc"] + +# labwc nach jedem Theme-Resolve live neu laden (Deko + Root-Menue), +# sonst bleibt die alte Optik bis zum Relogin stehen. +[hooks] +colors_changed = "labwc --reconfigure" diff --git a/configs/skel/.config/noctalia/wallpaper.toml b/configs/skel/.config/noctalia/wallpaper.toml new file mode 100644 index 0000000..3367e6d --- /dev/null +++ b/configs/skel/.config/noctalia/wallpaper.toml @@ -0,0 +1,7 @@ +# Noctalia Wallpaper-Defaults – fluffy-pancake (Noctalia-Zweig) +# Picker zeigt den flachen System-Pool (alle Fedora-Motive inkl. Extras als +# Symlinks, da der Picker keine Unterordner sieht). Eigene Bilder: in der +# GUI (Wallpaper-Panel) auf ~/Bilder umstellen oder hier eintragen. +# GUI-Aenderung landet in settings.toml und gewinnt ueber dieser Datei. +[wallpaper] +directory = "/usr/share/noctalia-wallpapers" diff --git a/scripts/seed-labwc-skel.sh b/scripts/seed-labwc-skel.sh index 9182e80..f1cff17 100755 --- a/scripts/seed-labwc-skel.sh +++ b/scripts/seed-labwc-skel.sh @@ -16,6 +16,7 @@ TARGETS=( ".config/alacritty/themes/noctalia.toml" ".config/noctalia/templates.toml" ".config/noctalia/shell.toml" + ".config/noctalia/wallpaper.toml" ".config/mimeapps.list" ) @@ -36,15 +37,3 @@ if [[ ! -e "${HOME}/.config/kanshi/config" ]]; then echo "Keine kanshi-Config gefunden. Erzeugen mit:" echo " kanshi-autoconfig --apply (schreibt ~/.config/kanshi/config)" fi - -# Wallpaper-Grundstock (Dateinamen unbekannt -> Glob statt Liste) -if [[ -d "${SKEL}/Pictures" ]]; then - mkdir -p "${HOME}/Pictures" - for pic in "${SKEL}"/Pictures/*; do - [[ -e "${pic}" ]] || continue - if [[ ! -e "${HOME}/Pictures/$(basename "${pic}")" ]]; then - cp -n "${pic}" "${HOME}/Pictures/" - echo "angelegt: ${HOME}/Pictures/$(basename "${pic}")" - fi - done -fi