fixed initial problems
This commit is contained in:
@@ -114,6 +114,7 @@ RUN chmod 0644 /etc/containers/policy.json /etc/pki/containers/cosign.pub && \
|
|||||||
# 2. Kopiere die Systemd-Overrides als Vendor-Drop-ins (kein /etc/-Override im Image)
|
# 2. Kopiere die Systemd-Overrides als Vendor-Drop-ins (kein /etc/-Override im Image)
|
||||||
COPY configs/bootc-timer-override.conf /usr/lib/systemd/system/bootc-fetch-apply-updates.timer.d/override.conf
|
COPY configs/bootc-timer-override.conf /usr/lib/systemd/system/bootc-fetch-apply-updates.timer.d/override.conf
|
||||||
COPY configs/bootc-override.conf /usr/lib/systemd/system/bootc-fetch-apply-updates.service.d/override.conf
|
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
|
||||||
|
|
||||||
# 3. Kopiere die Session-Helfer und Desktop-Defaults
|
# 3. Kopiere die Session-Helfer und Desktop-Defaults
|
||||||
COPY --chmod=755 scripts/notify-bootc-user.sh /usr/bin/
|
COPY --chmod=755 scripts/notify-bootc-user.sh /usr/bin/
|
||||||
@@ -140,6 +141,8 @@ COPY configs/tmpfiles/noctalia-greeter-seed.conf /usr/lib/tmpfiles.d/noctalia-gr
|
|||||||
# Fehlt Wrapper, D-Bus, polkit oder Session -> Build-Abbruch statt
|
# Fehlt Wrapper, D-Bus, polkit oder Session -> Build-Abbruch statt
|
||||||
# defektem Login-Screen.
|
# defektem Login-Screen.
|
||||||
RUN set -u; \
|
RUN set -u; \
|
||||||
|
id greeter >/dev/null || { echo "FEHLER: Service-User greeter fehlt (21-greetd.sh pruefen)"; exit 1; }; \
|
||||||
|
grep -q 'pam_gnome_keyring\.so' /etc/pam.d/greetd || { echo "FEHLER: Keyring-PAM in /etc/pam.d/greetd fehlt"; exit 1; }; \
|
||||||
wrapper="$(command -v noctalia-greeter-session || true)"; \
|
wrapper="$(command -v noctalia-greeter-session || true)"; \
|
||||||
echo "Gefundener Wrapper: ${wrapper}"; \
|
echo "Gefundener Wrapper: ${wrapper}"; \
|
||||||
test -n "${wrapper}" || { echo "FEHLER: noctalia-greeter-session nicht installiert (Terra-Repo/includepkgs pruefen)"; exit 1; }; \
|
test -n "${wrapper}" || { echo "FEHLER: noctalia-greeter-session nicht installiert (Terra-Repo/includepkgs pruefen)"; exit 1; }; \
|
||||||
|
|||||||
@@ -18,25 +18,34 @@ dnf5 install -y \
|
|||||||
swaybg \
|
swaybg \
|
||||||
swayidle \
|
swayidle \
|
||||||
wlopm \
|
wlopm \
|
||||||
|
xdg-desktop-portal \
|
||||||
xdg-desktop-portal-wlr \
|
xdg-desktop-portal-wlr \
|
||||||
xdg-desktop-portal-gtk \
|
xdg-desktop-portal-gtk \
|
||||||
pipewire \
|
pipewire \
|
||||||
pipewire-pulseaudio \
|
pipewire-pulseaudio \
|
||||||
wireplumber \
|
wireplumber \
|
||||||
NetworkManager \
|
NetworkManager \
|
||||||
foot \
|
alacritty \
|
||||||
wl-clipboard \
|
wl-clipboard \
|
||||||
xdg-user-dirs \
|
xdg-user-dirs \
|
||||||
upower \
|
upower \
|
||||||
power-profiles-daemon \
|
power-profiles-daemon \
|
||||||
bolt \
|
bolt \
|
||||||
lxqt-policykit \
|
bluez \
|
||||||
|
cups \
|
||||||
|
ipp-usb \
|
||||||
|
system-config-printer \
|
||||||
|
avahi \
|
||||||
accountsservice \
|
accountsservice \
|
||||||
google-noto-sans-fonts \
|
google-noto-sans-fonts \
|
||||||
google-noto-sans-mono-fonts \
|
google-noto-sans-mono-fonts \
|
||||||
wdisplays \
|
wdisplays \
|
||||||
brightnessctl \
|
brightnessctl \
|
||||||
swaylock
|
swaylock \
|
||||||
|
thunar \
|
||||||
|
thunar-volman \
|
||||||
|
tumbler \
|
||||||
|
gvfs
|
||||||
|
|
||||||
# Optionale Pakete (duerfen fehlen -> --skip-unavailable, eigener Aufruf,
|
# Optionale Pakete (duerfen fehlen -> --skip-unavailable, eigener Aufruf,
|
||||||
# damit ein fehlendes Optionales den Kern nicht zu Fall bringt)
|
# damit ein fehlendes Optionales den Kern nicht zu Fall bringt)
|
||||||
@@ -47,10 +56,20 @@ dnf5 install -y \
|
|||||||
fwupd \
|
fwupd \
|
||||||
cliphist \
|
cliphist \
|
||||||
wlsunset \
|
wlsunset \
|
||||||
|
pipewire-codec-aptx \
|
||||||
|| true
|
|| true
|
||||||
|
|
||||||
# User-Services fuer Audio (Presets greifen nicht fuer nachinstallierte
|
# User-Services fuer Audio (Presets greifen nicht fuer nachinstallierte
|
||||||
# Pakete auf bootc-Basis -> explizit global enablen, Fehler tolerieren)
|
# Pakete auf bootc-Basis -> explizit global enablen, Fehler tolerieren)
|
||||||
systemctl --global enable pipewire.socket pipewire-pulse.socket wireplumber.service || true
|
systemctl --global enable pipewire.socket pipewire-pulse.socket wireplumber.service || true
|
||||||
|
|
||||||
|
# Bluetooth-Daemon (System-Service, kein --global)
|
||||||
|
systemctl enable bluetooth.service
|
||||||
|
|
||||||
|
# Drucken per Socket-Activation (Fedora-Standard: cups.socket statt Service)
|
||||||
|
systemctl enable cups.socket
|
||||||
|
|
||||||
|
# mDNS-Discovery (Netzwerkdrucker finden, .local-Aufloesung)
|
||||||
|
systemctl enable avahi-daemon.socket
|
||||||
|
|
||||||
dnf5 clean all
|
dnf5 clean all
|
||||||
|
|||||||
@@ -29,6 +29,22 @@ dnf5 clean all
|
|||||||
# accounts-daemon: liefert User-Avatare auf dem Login-Screen.
|
# accounts-daemon: liefert User-Avatare auf dem Login-Screen.
|
||||||
systemctl enable accounts-daemon.service
|
systemctl enable accounts-daemon.service
|
||||||
|
|
||||||
|
# Service-Account fuer die Greeter-Session. Weder greetd- noch Greeter-Paket
|
||||||
|
# legen ihn verlaesslich an - ohne ihn stirbt greetd ("user not found").
|
||||||
|
# WICHTIG (bootc/altfiles): video/render existieren nur in /usr/lib/group
|
||||||
|
# (read-only Image-Default). useradd -G scheitert daran ("group does not
|
||||||
|
# exist"), weil es die Mitgliedschaft nicht nach /etc mergen kann.
|
||||||
|
# systemd-sysusers ist das einzige Werkzeug, das den Split korrekt schreibt.
|
||||||
|
# Build-Zeit (statt Erst-Boot): Eintrag ab Boot 1 vorhanden, kein Race.
|
||||||
|
mkdir -p /usr/lib/sysusers.d
|
||||||
|
cat > /usr/lib/sysusers.d/noctalia-greeter.conf <<'EOF'
|
||||||
|
u greeter - "Greeter" - /usr/sbin/nologin
|
||||||
|
m greeter video
|
||||||
|
m greeter render
|
||||||
|
EOF
|
||||||
|
systemd-sysusers /usr/lib/sysusers.d/noctalia-greeter.conf
|
||||||
|
id greeter
|
||||||
|
|
||||||
# System-Setup des Greeters: richtet u.a. /etc/pam.d/greetd ein.
|
# System-Setup des Greeters: richtet u.a. /etc/pam.d/greetd ein.
|
||||||
# Pfad laut PACKAGING.md: share/noctalia-greeter/setup_greeter_system.sh
|
# Pfad laut PACKAGING.md: share/noctalia-greeter/setup_greeter_system.sh
|
||||||
if [[ -x /usr/share/noctalia-greeter/setup_greeter_system.sh ]]; then
|
if [[ -x /usr/share/noctalia-greeter/setup_greeter_system.sh ]]; then
|
||||||
@@ -37,6 +53,18 @@ else
|
|||||||
echo "WARN: setup_greeter_system.sh nicht gefunden - Greeter-State wird erst beim Boot angelegt"
|
echo "WARN: setup_greeter_system.sh nicht gefunden - Greeter-State wird erst beim Boot angelegt"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# GNOME-Keyring beim Login still mit entsperren (wie GDM/SDDM). greetd
|
||||||
|
# authentifiziert via PAM, daher kann pam_gnome_keyring das Login-Passwort
|
||||||
|
# abgreifen und den "login"-Keyring oeffnen - ohne den Dialog
|
||||||
|
# "Choose password for new keyring" bei der ersten Secrets-Anfrage.
|
||||||
|
# Nach dem Greeter-Setup anhaengen (dessen PAM-Anpassungen bleiben vorn).
|
||||||
|
if ! grep -q 'pam_gnome_keyring\.so' /etc/pam.d/greetd 2>/dev/null; then
|
||||||
|
cat >> /etc/pam.d/greetd <<'EOF'
|
||||||
|
auth optional pam_gnome_keyring.so
|
||||||
|
session optional pam_gnome_keyring.so auto_start
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
# bootc-Hygiene: /var-Inhalte aus dem Build werden beim Deployment verworfen
|
# bootc-Hygiene: /var-Inhalte aus dem Build werden beim Deployment verworfen
|
||||||
# und wuerden nur den var-tmpfiles-Lint triggern. Die /etc-Anteile des Setups
|
# und wuerden nur den var-tmpfiles-Lint triggern. Die /etc-Anteile des Setups
|
||||||
# (PAM) bleiben erhalten; /var/lib/noctalia-greeter wird zur Laufzeit via
|
# (PAM) bleiben erhalten; /var/lib/noctalia-greeter wird zur Laufzeit via
|
||||||
|
|||||||
+43
-1
@@ -10,12 +10,54 @@ set -eoux pipefail
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
echo "Installing Noctalia Shell v5..."
|
echo "Installing Noctalia Shell v5..."
|
||||||
|
|
||||||
|
# Versionsdynamik: Wallpaper-Pakete heissen f<VER>-backgrounds*.
|
||||||
|
# Bei Basis-Wechsel (z.B. F44 -> F45 im Containerfile) kommen automatisch
|
||||||
|
# die neuen Motive mit. Bricht das Schema je, knallt der Build laut
|
||||||
|
# (kein stiller leerer Picker).
|
||||||
|
FEDORA_VERSION="$(rpm -E %fedora)"
|
||||||
|
|
||||||
# Nur das Paket selbst: v5 ist nativ (C++/OpenGL ES), Bildformate und
|
# Nur das Paket selbst: v5 ist nativ (C++/OpenGL ES), Bildformate und
|
||||||
# Theming sind einkompiliert bzw. kommen als RPM-Abhaengigkeiten mit.
|
# Theming sind einkompiliert bzw. kommen als RPM-Abhaengigkeiten mit.
|
||||||
# ImageMagick/Python/git waren v4-Bedarf und entfallen.
|
# ImageMagick/Python/git waren v4-Bedarf und entfallen.
|
||||||
|
#
|
||||||
|
# Theming-Unterbau fuer die aktivierten Templates (siehe
|
||||||
|
# configs/skel/.config/noctalia/templates.toml):
|
||||||
|
# - flatpak: fehlt in der fedora-bootc-Basis, wird aber vom
|
||||||
|
# Flatpak-Preinstall-Layer/Service (50-xxx, Bazaar/Brave) benoetigt
|
||||||
|
# - adw-gtk3-theme: GTK-Theme, das Noctalias gtk-Hook umfaerbt (inkl. -dark).
|
||||||
|
# HINWEIS: Paket heisst -theme, nicht -gtk3!
|
||||||
|
# - dconf + Schemas: damit der Hook gtk-theme/color-scheme setzen kann.
|
||||||
|
# (nwg-look gibt es nicht in Fedora (nur COPR) und wird nicht gebraucht -
|
||||||
|
# der Hook setzt das Theme selbst.)
|
||||||
dnf5 install -y \
|
dnf5 install -y \
|
||||||
--allowerasing \
|
--allowerasing \
|
||||||
noctalia \
|
noctalia \
|
||||||
flatpak
|
flatpak \
|
||||||
|
adw-gtk3-theme \
|
||||||
|
dconf \
|
||||||
|
gsettings-desktop-schemas \
|
||||||
|
f${FEDORA_VERSION}-backgrounds \
|
||||||
|
f${FEDORA_VERSION}-backgrounds-extras-gnome
|
||||||
|
|
||||||
|
# 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
|
||||||
|
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}"
|
||||||
|
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
|
||||||
|
|
||||||
dnf5 clean all
|
dnf5 clean all
|
||||||
|
|||||||
@@ -7,7 +7,9 @@ ConditionPathExists=!/var/lib/flatpak/.preinstall-done
|
|||||||
[Service]
|
[Service]
|
||||||
Type=oneshot
|
Type=oneshot
|
||||||
ExecStartPre=/usr/bin/flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
|
ExecStartPre=/usr/bin/flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
|
||||||
ExecStart=/usr/bin/flatpak install -y flathub io.github.kolunmi.Bazaar com.brave.Browser
|
# 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
|
||||||
ExecStartPost=/usr/bin/touch /var/lib/flatpak/.preinstall-done
|
ExecStartPost=/usr/bin/touch /var/lib/flatpak/.preinstall-done
|
||||||
ExecStartPost=/usr/bin/systemctl disable flatpak-preinstall.service
|
ExecStartPost=/usr/bin/systemctl disable flatpak-preinstall.service
|
||||||
RemainAfterExit=yes
|
RemainAfterExit=yes
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
# systemd-remount-fs scheitert auf bootc/composefs deterministisch
|
||||||
|
# (Overlay-Root laesst sich nicht remounten: "No changes allowed").
|
||||||
|
# Die Mounts kommen bereits mit fstab-Optionen hoch - der Remount ist
|
||||||
|
# hier redundant. Auf klassischen Systemen (ohne ostree) laeuft der
|
||||||
|
# Service durch diese Bedingung unveraendert weiter.
|
||||||
|
[Unit]
|
||||||
|
ConditionPathExists=!/run/ostree-booted
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
# Alacritty – fluffy-pancake (Noctalia-Zweig)
|
||||||
|
# Das Noctalia-Template "alacritty" schreibt themes/noctalia.toml
|
||||||
|
# (Platzhalter liegt bei, Import zeigt fest darauf).
|
||||||
|
[general]
|
||||||
|
import = [
|
||||||
|
"~/.config/alacritty/themes/noctalia.toml",
|
||||||
|
]
|
||||||
|
|
||||||
|
[font]
|
||||||
|
normal = { family = "Noto Sans Mono", style = "Regular" }
|
||||||
|
size = 10.0
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
# Platzhalter, verwaltet vom Noctalia-Template "alacritty".
|
||||||
|
# Wird beim ersten Theme-Resolve mit der Palette befuellt.
|
||||||
@@ -10,8 +10,10 @@ kanshi >/dev/null 2>&1 &
|
|||||||
# 2. Hintergrund-Fallback (Noctalia setzt das Wallpaper selbst)
|
# 2. Hintergrund-Fallback (Noctalia setzt das Wallpaper selbst)
|
||||||
swaybg -c '#1a1b26' >/dev/null 2>&1 &
|
swaybg -c '#1a1b26' >/dev/null 2>&1 &
|
||||||
|
|
||||||
# 3. PolicyKit-Agent (labwc startet kein XDG-Autostart von selbst)
|
# 3. PolicyKit: kein externer Agent noetig - Noctalia bringt einen nativen
|
||||||
lxqt-policykit-agent >/dev/null 2>&1 &
|
# mit (per Default aktiv, siehe ~/.config/noctalia/shell.toml ->
|
||||||
|
# [shell] polkit_agent). Genau EIN Agent pro Session!
|
||||||
|
# (Historie: lxqt-policykit-agent unter /usr/libexec/ - ausgebaut.)
|
||||||
|
|
||||||
# 4. Desktop-Shell: Bar, Dock, Launcher, Control-Center, Lock, OSDs
|
# 4. Desktop-Shell: Bar, Dock, Launcher, Control-Center, Lock, OSDs
|
||||||
noctalia >/dev/null 2>&1 &
|
noctalia >/dev/null 2>&1 &
|
||||||
|
|||||||
@@ -7,3 +7,4 @@ GDK_BACKEND=wayland
|
|||||||
XDG_CURRENT_DESKTOP=labwc
|
XDG_CURRENT_DESKTOP=labwc
|
||||||
XDG_SESSION_TYPE=wayland
|
XDG_SESSION_TYPE=wayland
|
||||||
MOZ_ENABLE_WAYLAND=1
|
MOZ_ENABLE_WAYLAND=1
|
||||||
|
TERMINAL=alacritty
|
||||||
|
|||||||
@@ -2,8 +2,11 @@
|
|||||||
<!-- labwc Root-Menue (Rechtsklick) – fluffy-pancake (Noctalia-Zweig) -->
|
<!-- labwc Root-Menue (Rechtsklick) – fluffy-pancake (Noctalia-Zweig) -->
|
||||||
<openbox_menu>
|
<openbox_menu>
|
||||||
<menu id="root-menu" label="">
|
<menu id="root-menu" label="">
|
||||||
<item label="Terminal (foot)">
|
<item label="Terminal (Alacritty)">
|
||||||
<action name="Execute" command="foot" />
|
<action name="Execute" command="alacritty" />
|
||||||
|
</item>
|
||||||
|
<item label="Dateimanager (Thunar)">
|
||||||
|
<action name="Execute" command="thunar" />
|
||||||
</item>
|
</item>
|
||||||
<item label="Browser (Brave, Flatpak)">
|
<item label="Browser (Brave, Flatpak)">
|
||||||
<action name="Execute" command="flatpak run com.brave.Browser" />
|
<action name="Execute" command="flatpak run com.brave.Browser" />
|
||||||
|
|||||||
@@ -16,7 +16,11 @@
|
|||||||
<default />
|
<default />
|
||||||
<!-- Terminal -->
|
<!-- Terminal -->
|
||||||
<keybind key="W-Return">
|
<keybind key="W-Return">
|
||||||
<action name="Execute" command="foot" />
|
<action name="Execute" command="alacritty" />
|
||||||
|
</keybind>
|
||||||
|
<!-- Dateimanager -->
|
||||||
|
<keybind key="W-e">
|
||||||
|
<action name="Execute" command="thunar" />
|
||||||
</keybind>
|
</keybind>
|
||||||
<!-- Noctalia: App-Launcher -->
|
<!-- Noctalia: App-Launcher -->
|
||||||
<keybind key="W-d">
|
<keybind key="W-d">
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# Standard-Anwendungen – fluffy-pancake (Noctalia-Zweig)
|
||||||
|
[Default Applications]
|
||||||
|
inode/directory=thunar.desktop
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
# Noctalia Shell-Defaults – fluffy-pancake (Noctalia-Zweig)
|
||||||
|
# Nativer Polkit-Agent der Shell (statt externem lxqt-policykit-agent):
|
||||||
|
# Auth-Dialoge kommen als Noctalia-UI (floating, zentriert).
|
||||||
|
# Braucht eine logind-Session (via greetd+PAM gegeben).
|
||||||
|
# GUI-Aenderung (Settings -> Security) landet in settings.toml und gewinnt.
|
||||||
|
[shell]
|
||||||
|
polkit_agent = true
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
# Noctalia Template-Defaults – fluffy-pancake (Noctalia-Zweig)
|
||||||
|
# Schaltet App-Theming an: Terminal, GTK3/4 und labwc-Deko folgen der
|
||||||
|
# Noctalia-Palette (IDs aus dem Built-in-Katalog:
|
||||||
|
# `noctalia theme --list-templates`).
|
||||||
|
# - alacritty: schreibt ~/.config/alacritty/themes/noctalia.toml
|
||||||
|
# (braucht den import in alacritty.toml + Platzhalter, beides in /etc/skel)
|
||||||
|
# - gtk3/gtk4: schreibt noctalia.css + haengt den Import in gtk.css ein,
|
||||||
|
# setzt adw-gtk3(-dark) und color-scheme (braucht Paket adw-gtk3)
|
||||||
|
# - labwc: schreibt das openbox-Theme + setzt <name>noctalia</name> in rc.xml
|
||||||
|
# Aenderung per GUI (Settings -> Templates) landet in settings.toml und
|
||||||
|
# gewinnt ueber dieser Datei. Qt/KDE-Apps: Templates "qt"/"kcolorscheme"
|
||||||
|
# sind absichtlich aus (keine Qt-Apps installiert).
|
||||||
|
[theme.templates]
|
||||||
|
enable_builtin_templates = true
|
||||||
|
builtin_ids = ["alacritty", "gtk3", "gtk4", "labwc"]
|
||||||
@@ -1,8 +1,14 @@
|
|||||||
# ISO configuration for a bootc-based installer ISO
|
# ISO configuration for a bootc-based installer ISO
|
||||||
|
|
||||||
# --- Kickstart: post-install bootc switch ---
|
# --- Kickstart: post-install bootc switch ---
|
||||||
|
# HINWEIS: lang/keyboard laesst Anaconda u.a. /etc/vconsole.conf schreiben
|
||||||
|
# (deutsche TTYs). Die :stable-Referenz unten wird beim lokalen ISO-Build
|
||||||
|
# per Justfile auf $target_image:$tag umgeschrieben (Test-ISOs!).
|
||||||
[customizations.installer.kickstart]
|
[customizations.installer.kickstart]
|
||||||
contents = """
|
contents = """
|
||||||
|
lang de_DE.UTF-8
|
||||||
|
keyboard --vckeymap=de --xlayouts='de'
|
||||||
|
timezone Europe/Berlin --utc
|
||||||
%post
|
%post
|
||||||
# Switch to the custom bootc image after installation
|
# Switch to the custom bootc image after installation
|
||||||
bootc switch --mutate-in-place --transport registry humocs-man.duckdns.org/humocs-man/fluffy-pancake:stable
|
bootc switch --mutate-in-place --transport registry humocs-man.duckdns.org/humocs-man/fluffy-pancake:stable
|
||||||
|
|||||||
@@ -85,9 +85,11 @@ def render(outputs):
|
|||||||
lines = [
|
lines = [
|
||||||
MARKER,
|
MARKER,
|
||||||
f"# generiert am {datetime.now().isoformat(timespec='seconds')}",
|
f"# generiert am {datetime.now().isoformat(timespec='seconds')}",
|
||||||
"# Quelle: wlr-randr (live). Feintuning: wdisplays oder Hand-Edit",
|
"# Quelle: wlr-randr (live). Feintuning: wdisplays oder Modus direkt",
|
||||||
"# (Hand-Edit: Marker-Zeile loeschen, dann fasst --apply-if-managed",
|
"# in dieser Datei anpassen - bei unveraendertem Output-Set bleibt",
|
||||||
"# diese Datei nicht mehr an.)",
|
"# die Datei (inkl. deiner Modus-Tweaks) bei jedem Login erhalten.",
|
||||||
|
"# Neu generiert wird nur bei geaendertem Output-Set (Docking) oder",
|
||||||
|
"# per --apply. Marker-Zeile loeschen = ganz hand-gepflegt.",
|
||||||
"",
|
"",
|
||||||
]
|
]
|
||||||
externals = [o for o in outputs if not o["internal"]]
|
externals = [o for o in outputs if not o["internal"]]
|
||||||
@@ -146,13 +148,28 @@ def apply(text):
|
|||||||
print(f"Geschrieben: {CONFIG_PATH}")
|
print(f"Geschrieben: {CONFIG_PATH}")
|
||||||
|
|
||||||
|
|
||||||
|
def config_output_names(path: Path):
|
||||||
|
"""Output-Namen aus einer bestehenden kanshi-Config (ohne '*' Fallback)."""
|
||||||
|
names = set()
|
||||||
|
try:
|
||||||
|
for line in path.read_text().splitlines():
|
||||||
|
parts = line.strip().split()
|
||||||
|
if len(parts) >= 2 and parts[0] == "output" and parts[1] != "*":
|
||||||
|
names.add(parts[1].strip("'\""))
|
||||||
|
except OSError:
|
||||||
|
pass
|
||||||
|
return names
|
||||||
|
|
||||||
|
|
||||||
def main(argv):
|
def main(argv):
|
||||||
outputs = detect_outputs()
|
outputs = detect_outputs()
|
||||||
if not outputs:
|
if not outputs:
|
||||||
print("WARN: keine Outputs erkannt - schreibe Fallback-Config", file=sys.stderr)
|
print("WARN: keine Outputs erkannt", file=sys.stderr)
|
||||||
text = render(outputs)
|
text = render(outputs)
|
||||||
# Default ohne Schreib-Flag: nur anzeigen, nichts schreiben (sicher).
|
# Default ohne Schreib-Flag: nur anzeigen, nichts schreiben (sicher).
|
||||||
if "--print" in argv or ("--apply" not in argv and "--apply-if-managed" not in argv):
|
if "--print" in argv or ("--apply" not in argv and "--apply-if-managed" not in argv):
|
||||||
|
if not outputs:
|
||||||
|
print("# (Fallback-Anteil, da keine Outputs erkannt)", file=sys.stderr)
|
||||||
print(text)
|
print(text)
|
||||||
if outputs:
|
if outputs:
|
||||||
print(
|
print(
|
||||||
@@ -160,9 +177,25 @@ def main(argv):
|
|||||||
file=sys.stderr,
|
file=sys.stderr,
|
||||||
)
|
)
|
||||||
return 0
|
return 0
|
||||||
if "--apply-if-managed" in argv and not is_managed(CONFIG_PATH):
|
if "--apply-if-managed" in argv:
|
||||||
print(f"{CONFIG_PATH} ist hand-gepflegt - lasse sie unangetastet.")
|
if not CONFIG_PATH.exists():
|
||||||
return 0
|
apply(text) # Erst-Login: anlegen
|
||||||
|
return 0
|
||||||
|
if not is_managed(CONFIG_PATH):
|
||||||
|
print(f"{CONFIG_PATH} ist hand-gepflegt - lasse sie unangetastet.")
|
||||||
|
return 0
|
||||||
|
if not outputs:
|
||||||
|
# Erkennung fehlgeschlagen -> niemals eine gute Config clobbern.
|
||||||
|
print("WARN: Erkennung fehlgeschlagen - lasse verwaltete Config unangetastet.",
|
||||||
|
file=sys.stderr)
|
||||||
|
return 0
|
||||||
|
if {o["name"] for o in outputs} == config_output_names(CONFIG_PATH):
|
||||||
|
# Gleiches Output-Set (z.B. jeden Boot dieselbe VM-Anzeige):
|
||||||
|
# Modus-Tweaks des Users bleiben erhalten, kein Rewrite.
|
||||||
|
print(f"Outputs unveraendert ({', '.join(sorted(config_output_names(CONFIG_PATH)))})"
|
||||||
|
" - behalte Config (inkl. Modus-Tweaks) bei.")
|
||||||
|
return 0
|
||||||
|
# Output-Set geaendert (angedockt/abgedockt): neu generieren.
|
||||||
apply(text)
|
apply(text)
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# seed-labwc-skel: kopiert fehlende labwc/kanshi-Defaults aus /etc/skel.
|
# seed-labwc-skel: kopiert fehlende Desktop-Defaults aus /etc/skel.
|
||||||
# Nuetzlich nach Rebase von Kinoite auf den labwc-Zweig, weil /home
|
# Nuetzlich nach Rebase auf den labwc-Zweig, weil /home (/var/home)
|
||||||
# erhalten bleibt und /etc/skel nur bei NEU angelegten Benutzern greift.
|
# erhalten bleibt und /etc/skel nur bei NEU angelegten Benutzern greift.
|
||||||
# Bestehende Dateien werden NIEMALS ueberschrieben (cp -n).
|
# Bestehende Dateien werden NIEMALS ueberschrieben (cp -n).
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
@@ -12,6 +12,11 @@ TARGETS=(
|
|||||||
".config/labwc/rc.xml"
|
".config/labwc/rc.xml"
|
||||||
".config/labwc/menu.xml"
|
".config/labwc/menu.xml"
|
||||||
".config/kanshi/config.template"
|
".config/kanshi/config.template"
|
||||||
|
".config/alacritty/alacritty.toml"
|
||||||
|
".config/alacritty/themes/noctalia.toml"
|
||||||
|
".config/noctalia/templates.toml"
|
||||||
|
".config/noctalia/shell.toml"
|
||||||
|
".config/mimeapps.list"
|
||||||
)
|
)
|
||||||
|
|
||||||
for rel in "${TARGETS[@]}"; do
|
for rel in "${TARGETS[@]}"; do
|
||||||
@@ -31,3 +36,15 @@ if [[ ! -e "${HOME}/.config/kanshi/config" ]]; then
|
|||||||
echo "Keine kanshi-Config gefunden. Erzeugen mit:"
|
echo "Keine kanshi-Config gefunden. Erzeugen mit:"
|
||||||
echo " kanshi-autoconfig --apply (schreibt ~/.config/kanshi/config)"
|
echo " kanshi-autoconfig --apply (schreibt ~/.config/kanshi/config)"
|
||||||
fi
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user