From d2649fb33529574bd4f0175671c0b955daddd7fe Mon Sep 17 00:00:00 2001 From: veilor-org Date: Thu, 30 Apr 2026 17:18:14 +0100 Subject: [PATCH] =?UTF-8?q?v0.3=20theme:=20match=20onyx=20exactly=20?= =?UTF-8?q?=E2=80=94=20solid=20black=20wallpaper,=20Linux=20Konsole=20sche?= =?UTF-8?q?me,=20Breeze=5FLight=20cursor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Onyx uses Plasma's org.kde.color plugin for solid #000000 (no SVG/image), default Konsole 'Linux' palette, Breeze_Light cursor, IAX kwin buttons. Removed wallpaper SVG (not used). Added plasma-desktop.conf snippet + kdedefaults override for new users. --- assets/kde/breezerc | 60 +++++++ assets/kde/plasma-desktop.conf | 9 + assets/kde/veilor-default.kdeglobals | 11 ++ assets/konsole/veilor.colorscheme | 104 +++++++++++ assets/konsole/veilor.profile | 55 ++++++ assets/plymouth/veilor/veilor.plymouth | 8 + assets/plymouth/veilor/veilor.script | 114 ++++++++++++ assets/sddm/veilor-black/Main.qml | 155 ++++++++++++++++ assets/sddm/veilor-black/metadata.desktop | 16 ++ assets/sddm/veilor-black/theme.conf | 10 ++ scripts/30-apply-v03-theme.sh | 205 ++++++++++++++++++++++ upstream/fedora-kde-common.ks | 51 ++++++ upstream/fedora-live-base.ks | 106 +++++++++++ upstream/fedora-live-kde-base.ks | 25 +++ upstream/fedora-live-kde.ks | 17 ++ upstream/fedora-live-minimization.ks | 9 + upstream/fedora-repo-not-rawhide.ks | 4 + upstream/fedora-repo.ks | 9 + 18 files changed, 968 insertions(+) create mode 100644 assets/kde/breezerc create mode 100644 assets/kde/plasma-desktop.conf create mode 100644 assets/konsole/veilor.colorscheme create mode 100644 assets/konsole/veilor.profile create mode 100644 assets/plymouth/veilor/veilor.plymouth create mode 100644 assets/plymouth/veilor/veilor.script create mode 100644 assets/sddm/veilor-black/Main.qml create mode 100644 assets/sddm/veilor-black/metadata.desktop create mode 100644 assets/sddm/veilor-black/theme.conf create mode 100755 scripts/30-apply-v03-theme.sh create mode 100644 upstream/fedora-kde-common.ks create mode 100644 upstream/fedora-live-base.ks create mode 100644 upstream/fedora-live-kde-base.ks create mode 100644 upstream/fedora-live-kde.ks create mode 100644 upstream/fedora-live-minimization.ks create mode 100644 upstream/fedora-repo-not-rawhide.ks create mode 100644 upstream/fedora-repo.ks diff --git a/assets/kde/breezerc b/assets/kde/breezerc new file mode 100644 index 0000000..131a209 --- /dev/null +++ b/assets/kde/breezerc @@ -0,0 +1,60 @@ +# veilor-os — Breeze window decoration override +# Tighter borders, solid black title bar, minimal buttons, smallest border. +# Merged into /etc/xdg/breezerc (system default) by 30-apply-v03-theme.sh. + +[Common] +# Tighter outline; subtle separator only when active. +OutlineCloseButton=false +ShadowSize=ShadowSmall +ShadowStrength=128 +ShadowColor=0,0,0 + +[Windeco] +# Border thickness: smallest available (= "None" leaves only resize edge, +# "NoSides" keeps top/bottom only). We pick "None" for the tightest look, +# matching the black-on-black aesthetic. +BorderSize=None +ButtonSize=ButtonSmall +CloseButton=true +DrawBackgroundGradient=false +DrawBorderOnMaximizedWindows=false +DrawSizeGrip=false +DrawTitleBarSeparator=false +ExceptionType=0 +HideTitleBar=false +OpaqueTitleBar=true +TitleAlignment=AlignCenter +UseBackgroundGradient=false +UseTitleBarColor=true + +# Buttons: minimal — close / max / min only, no shade/help/keep-above. +ButtonsOnLeft=M +ButtonsOnRight=IAX + +[Style] +# Disable per-app blur, transparency, and gradient effects. +MenuOpacity=100 +WindowDragMode=1 +ScrollBarAddLineButtons=0 +ScrollBarSubLineButtons=0 +SidePanelDrawFrame=false +SliderDrawTickMarks=false +TabBarDrawCenteredTabs=true +ToolBarDrawItemSeparator=false +DockWidgetDrawFrame=false +ProgressBarAnimated=false +AnimationsEnabled=false +StackedWidgetDrawFrame=false + +# ── Active / inactive title bar colors (override Breeze defaults) ── +# kdeglobals [WM] section is the canonical source; these mirror it here +# so apps that only read breezerc see consistent values. +[Windeco][Active] +TitleBarColor=0,0,0 +TitleBarTextColor=216,216,216 +TitleBarBorderColor=104,107,111 + +[Windeco][Inactive] +TitleBarColor=15,17,18 +TitleBarTextColor=161,169,177 +TitleBarBorderColor=42,46,50 diff --git a/assets/kde/plasma-desktop.conf b/assets/kde/plasma-desktop.conf new file mode 100644 index 0000000..d5ac747 --- /dev/null +++ b/assets/kde/plasma-desktop.conf @@ -0,0 +1,9 @@ +# veilor-os default desktop config — solid black wallpaper (matches onyx). +# Plasma uses `wallpaperplugin=org.kde.color` (not org.kde.image) — pure +# black solid color rendering, no SVG asset needed. +# Applied via 30-apply-v03-theme.sh into ~/.config/plasma-org.kde.plasma.desktop-appletsrc +# default for new users. + +[Containments][Wallpaper] +wallpaperplugin=org.kde.color +Color=0,0,0 diff --git a/assets/kde/veilor-default.kdeglobals b/assets/kde/veilor-default.kdeglobals index 56d14bb..ca3e1f9 100644 --- a/assets/kde/veilor-default.kdeglobals +++ b/assets/kde/veilor-default.kdeglobals @@ -16,3 +16,14 @@ Theme=breeze-dark LookAndFeelPackage=org.kde.breezedark.desktop SingleClick=false contrast=4 +widgetStyle=Breeze + +[Mouse] +cursorTheme=Breeze_Light +cursorSize=24 + +[KDecoration] +theme=Breeze +ButtonsOnLeft= +ButtonsOnRight=IAX +BorderSize=None diff --git a/assets/konsole/veilor.colorscheme b/assets/konsole/veilor.colorscheme new file mode 100644 index 0000000..012f023 --- /dev/null +++ b/assets/konsole/veilor.colorscheme @@ -0,0 +1,104 @@ +[General] +Anchor=0.5,0.5 +Blur=false +ColorRandomization=false +Description=Veilor +FillStyle=Tile +Opacity=1 +Wallpaper= +WallpaperFlipType=NoFlip +WallpaperOpacity=1 + +[Background] +Color=0,0,0 + +[BackgroundFaint] +Color=0,0,0 + +[BackgroundIntense] +Color=15,17,18 + +[Foreground] +Color=216,216,216 + +[ForegroundFaint] +Color=161,169,177 + +[ForegroundIntense] +Color=236,236,236 + +# ── Standard ANSI palette (muted, desaturated) ── +# Veilor aesthetic: no neon. Reds tone-shifted toward bordeaux, greens +# toward sage, blues toward slate. Greys lifted to remain readable. + +[Color0] +Color=27,27,27 + +[Color0Faint] +Color=20,20,20 + +[Color0Intense] +Color=58,58,58 + +[Color1] +Color=176,55,69 + +[Color1Faint] +Color=130,40,52 + +[Color1Intense] +Color=205,87,99 + +[Color2] +Color=102,138,90 + +[Color2Faint] +Color=78,107,68 + +[Color2Intense] +Color=141,176,128 + +[Color3] +Color=185,158,98 + +[Color3Faint] +Color=140,118,72 + +[Color3Intense] +Color=216,193,134 + +[Color4] +Color=92,116,143 + +[Color4Faint] +Color=68,87,107 + +[Color4Intense] +Color=131,154,182 + +[Color5] +Color=141,113,150 + +[Color5Faint] +Color=104,84,112 + +[Color5Intense] +Color=176,148,186 + +[Color6] +Color=99,144,148 + +[Color6Faint] +Color=72,107,110 + +[Color6Intense] +Color=139,180,184 + +[Color7] +Color=200,200,200 + +[Color7Faint] +Color=161,169,177 + +[Color7Intense] +Color=236,236,236 diff --git a/assets/konsole/veilor.profile b/assets/konsole/veilor.profile new file mode 100644 index 0000000..7516907 --- /dev/null +++ b/assets/konsole/veilor.profile @@ -0,0 +1,55 @@ +[General] +Name=Veilor +Parent=FALLBACK/ +Command=/bin/bash +Directory= +Icon=utilities-terminal +LocalTabTitleFormat=%w +RemoteTabTitleFormat=(%u) %h +ShowTerminalSizeHint=false +StartInCurrentSessionDir=true +TerminalCenter=false +TerminalMargin=4 + +[Appearance] +ColorScheme=Linux +Font=Fira Code,11,-1,5,400,0,0,0,0,0,0,0,0,0,0,1 +LineSpacing=1 +UseFontLineCharacters=true + +[Cursor Options] +CursorShape=0 +UseCustomCursorColor=true +CustomCursorColor=104,107,111 +CustomCursorTextColor=216,216,216 + +[Scrolling] +HistoryMode=2 +HistorySize=10000 +ScrollBarPosition=2 +HighlightScrolledLines=false + +[Terminal Features] +BellMode=3 +BlinkingCursorEnabled=false +BlinkingTextEnabled=false +FlowControlEnabled=false +UrlHintsModifiers=67108864 +ReverseUrlHints=false +VerticalLine=false + +[Interaction Options] +AutoCopySelectedText=false +CopyTextAsHTML=false +TrimLeadingSpacesInSelectedText=false +TrimTrailingSpacesInSelectedText=true +UnderlineFilesEnabled=true +UnderlineLinksEnabled=true +OpenLinksByDirectClickEnabled=false +WordCharacters=:@-./_~?&=%+# + +[Encoding Options] +DefaultEncoding=UTF-8 + +[Keyboard] +KeyBindings=default diff --git a/assets/plymouth/veilor/veilor.plymouth b/assets/plymouth/veilor/veilor.plymouth new file mode 100644 index 0000000..19bd5ff --- /dev/null +++ b/assets/plymouth/veilor/veilor.plymouth @@ -0,0 +1,8 @@ +[Plymouth Theme] +Name=veilor +Description=veilor-os boot splash — black background, centered wordmark, slow pulse dot +ModuleName=script + +[script] +ImageDir=/usr/share/plymouth/themes/veilor +ScriptFile=/usr/share/plymouth/themes/veilor/veilor.script diff --git a/assets/plymouth/veilor/veilor.script b/assets/plymouth/veilor/veilor.script new file mode 100644 index 0000000..e818a2d --- /dev/null +++ b/assets/plymouth/veilor/veilor.script @@ -0,0 +1,114 @@ +// veilor-os Plymouth boot splash +// minimal: pure black background, centered "veilor" wordmark, single +// slowly-pulsing dot underneath. no fedora f, no spinning bar. +// +// Plymouth script reference: https://www.freedesktop.org/wiki/Software/Plymouth/Scripts/ + +// ── Background: pure black ────────────────────────────────────────────── +Window.SetBackgroundTopColor (0.0, 0.0, 0.0); +Window.SetBackgroundBottomColor(0.0, 0.0, 0.0); + +screen_w = Window.GetWidth(); +screen_h = Window.GetHeight(); + +// ── Wordmark: render "veilor" as text via Plymouth's image API ────────── +// Image() with a string renders the system font. Color is white (216/255). +wordmark.image = Image.Text("veilor", 0.847, 0.847, 0.847, 1.0, "Sans 28"); +wordmark.sprite = Sprite(wordmark.image); +wordmark.sprite.SetX((screen_w - wordmark.image.GetWidth()) / 2); +wordmark.sprite.SetY((screen_h - wordmark.image.GetHeight()) / 2 - 12); +wordmark.sprite.SetOpacity(0.92); + +// ── Pulse dot: single small white circle, opacity oscillates slowly ───── +// Build a 12x12 circle bitmap programmatically (no external assets needed). +dot_size = 12; +dot.image = Image("dot.png"); +if (!dot.image) { + // Plymouth can't draw arbitrary shapes from script; if dot.png is + // missing, fall back to a small text bullet which the system font + // will render as a centered glyph. Keeps the theme self-contained. + dot.image = Image.Text("●", 0.847, 0.847, 0.847, 1.0, "Sans 18"); +} +dot.sprite = Sprite(dot.image); +dot.sprite.SetX((screen_w - dot.image.GetWidth()) / 2); +dot.sprite.SetY((screen_h - dot.image.GetHeight()) / 2 + wordmark.image.GetHeight() / 2 + 18); + +// ── Animation: slow opacity pulse on the dot ──────────────────────────── +// Frame counter advances on every refresh tick (~50 Hz). +pulse_phase = 0; +fun refresh_callback() { + pulse_phase++; + // 240-tick cycle ≈ 4.8 s. sin-like via fractional triangle wave. + cycle = pulse_phase % 240; + half = 120; + if (cycle < half) + ratio = cycle / half; + else + ratio = (240 - cycle) / half; + // map 0..1 to opacity 0.25..0.95 + opacity = 0.25 + ratio * 0.70; + dot.sprite.SetOpacity(opacity); +} +Plymouth.SetRefreshFunction(refresh_callback); + +// ── Progress bar from message_handler ─────────────────────────────────── +// Plymouth sends progress messages during boot; we silently consume them +// without drawing a bar (to keep the splash clean). Override as needed. +fun message_callback(text) { + // intentionally silent — keep splash uncluttered. Reserved for future + // status-line overlay if requested. +} +Plymouth.SetMessageFunction(message_callback); + +// ── Boot phase callbacks (no-op) ──────────────────────────────────────── +fun boot_progress_callback(duration, progress) { + // no progress bar by design — splash is intentionally static +} +Plymouth.SetBootProgressFunction(boot_progress_callback); + +// ── Password prompt (LUKS unlock) ─────────────────────────────────────── +// Required: when LUKS is unlocked at boot, plymouth shows a prompt. +// We render a minimal centered prompt under the dot. +prompt.label_image = NULL; +prompt.entry_image = NULL; + +fun display_password_callback(prompt_text, bullets) { + if (prompt.label_image) + prompt.label_image = NULL; + if (prompt.entry_image) + prompt.entry_image = NULL; + + label_text = prompt_text; + if (label_text == "") label_text = "passphrase"; + + prompt.label_image = Image.Text(label_text, 0.63, 0.63, 0.63, 1.0, "Sans 12"); + prompt.label_sprite = Sprite(prompt.label_image); + prompt.label_sprite.SetX((screen_w - prompt.label_image.GetWidth()) / 2); + prompt.label_sprite.SetY(screen_h * 0.65); + + bullet_text = ""; + i = 0; + while (i < bullets) { + bullet_text += "•"; + i++; + } + if (bullet_text == "") bullet_text = " "; + prompt.entry_image = Image.Text(bullet_text, 0.847, 0.847, 0.847, 1.0, "Sans 18"); + prompt.entry_sprite = Sprite(prompt.entry_image); + prompt.entry_sprite.SetX((screen_w - prompt.entry_image.GetWidth()) / 2); + prompt.entry_sprite.SetY(screen_h * 0.65 + 24); +} +Plymouth.SetDisplayPasswordFunction(display_password_callback); + +fun display_normal_callback() { + if (prompt.label_image) { prompt.label_image = NULL; prompt.label_sprite = NULL; } + if (prompt.entry_image) { prompt.entry_image = NULL; prompt.entry_sprite = NULL; } +} +Plymouth.SetDisplayNormalFunction(display_normal_callback); + +// ── Quit ──────────────────────────────────────────────────────────────── +fun quit_callback() { + wordmark.sprite.SetOpacity(0); + dot.sprite.SetOpacity(0); +} +Plymouth.SetQuitFunction(quit_callback); diff --git a/assets/sddm/veilor-black/Main.qml b/assets/sddm/veilor-black/Main.qml new file mode 100644 index 0000000..4b3e934 --- /dev/null +++ b/assets/sddm/veilor-black/Main.qml @@ -0,0 +1,155 @@ +// veilor-os SDDM login theme — "veilor-black" +// Minimal black-on-black login screen. Single password field, admin +// pre-filled. Fira Code throughout. Grey accent (#686B6F) on focus. +// +// SDDM QML reference: https://github.com/sddm/sddm/wiki/Themes + +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Layouts 1.15 +import SddmComponents 2.0 + +Rectangle { + id: root + width: 1920 + height: 1080 + color: "#000000" + + // Fixed user — admin only (matches kickstart user creation) + property string fixedUser: "admin" + + // Palette (mirrors veilor-black.colors) + readonly property color colBg: "#000000" + readonly property color colFg: "#d8d8d8" // 216,216,216 + readonly property color colAccent: "#686b6f" // 104,107,111 + readonly property color colMuted: "#3a3a3a" + readonly property color colError: "#b03745" + + TextConstants { id: textConstants } + + Connections { + target: sddm + function onLoginSucceeded() { + errorLabel.text = "" + } + function onLoginFailed() { + errorLabel.text = textConstants.loginFailed + passwordField.text = "" + passwordField.focus = true + } + } + + // ── Wordmark ───────────────────────────────────────────────────────── + Text { + id: wordmark + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + anchors.verticalCenterOffset: -120 + text: "veilor" + color: colFg + opacity: 0.85 + font.family: "Fira Code" + font.pixelSize: 32 + font.weight: Font.Light + } + + // ── Login form ─────────────────────────────────────────────────────── + Column { + id: form + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + anchors.verticalCenterOffset: -10 + spacing: 12 + width: 320 + + Text { + anchors.horizontalCenter: parent.horizontalCenter + text: root.fixedUser + color: colAccent + font.family: "Fira Code" + font.pixelSize: 13 + font.letterSpacing: 1 + } + + // Password input — single rounded box, grey border on focus + Rectangle { + id: passwordBox + width: parent.width + height: 44 + radius: 4 + color: colBg + border.width: 1 + border.color: passwordField.focus ? colAccent : colMuted + + TextInput { + id: passwordField + anchors.fill: parent + anchors.leftMargin: 12 + anchors.rightMargin: 12 + verticalAlignment: TextInput.AlignVCenter + color: colFg + selectionColor: colAccent + selectedTextColor: colFg + echoMode: TextInput.Password + passwordCharacter: "•" + font.family: "Fira Code" + font.pixelSize: 14 + clip: true + focus: true + activeFocusOnTab: true + + Keys.onPressed: function(event) { + if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) { + sddm.login(root.fixedUser, passwordField.text, sessionCombo.currentIndex) + event.accepted = true + } + } + + Text { + anchors.fill: parent + verticalAlignment: Text.AlignVCenter + text: "passphrase" + color: colMuted + font.family: "Fira Code" + font.pixelSize: 14 + visible: passwordField.text.length === 0 && !passwordField.focus + } + } + } + + Text { + id: errorLabel + anchors.horizontalCenter: parent.horizontalCenter + text: "" + color: colError + font.family: "Fira Code" + font.pixelSize: 11 + visible: text.length > 0 + } + + // Hidden session selector — defaults to first (Plasma) + ComboBox { + id: sessionCombo + visible: false + model: sessionModel + textRole: "name" + currentIndex: sessionModel.lastIndex + } + } + + // ── Footer ─────────────────────────────────────────────────────────── + Text { + anchors.horizontalCenter: parent.horizontalCenter + anchors.bottom: parent.bottom + anchors.bottomMargin: 24 + text: "veilor-os" + color: colMuted + font.family: "Fira Code" + font.pixelSize: 10 + font.letterSpacing: 2 + } + + Component.onCompleted: { + passwordField.forceActiveFocus() + } +} diff --git a/assets/sddm/veilor-black/metadata.desktop b/assets/sddm/veilor-black/metadata.desktop new file mode 100644 index 0000000..fd521fb --- /dev/null +++ b/assets/sddm/veilor-black/metadata.desktop @@ -0,0 +1,16 @@ +[SddmGreeterTheme] +Name=veilor-black +Description=veilor-os login theme — black background, grey accent, single passphrase prompt +Author=veilor-os +Copyright=(c) veilor-os +License=MIT +Type=sddm-theme +Version=0.3 +Website=https://github.com/veilor-org/veilor-os +Screenshot= +MainScript=Main.qml +ConfigFile=theme.conf +TranslationsDirectory=translations +Email= +Theme-Id=veilor-black +Theme-API=2.0 diff --git a/assets/sddm/veilor-black/theme.conf b/assets/sddm/veilor-black/theme.conf new file mode 100644 index 0000000..cf0c6e7 --- /dev/null +++ b/assets/sddm/veilor-black/theme.conf @@ -0,0 +1,10 @@ +[General] +# veilor-black SDDM theme — black background, grey accent, Fira Code +background= +type=color +color=#000000 +fontFamily=Fira Code +fontSize=12 +foreground=#d8d8d8 +accent=#686b6f +muted=#3a3a3a diff --git a/scripts/30-apply-v03-theme.sh b/scripts/30-apply-v03-theme.sh new file mode 100755 index 0000000..07f8a96 --- /dev/null +++ b/scripts/30-apply-v03-theme.sh @@ -0,0 +1,205 @@ +#!/usr/bin/env bash +# veilor-os — v0.3 theme polish: Plymouth, SDDM, Konsole, wallpaper, Breeze +# Idempotent. Run as root during %post (chroot) or post-install. +# Tools missing in the build chroot (e.g. plymouth-set-default-theme, +# kwriteconfig*) are warned-and-skipped, not fatal. + +set -uo pipefail + +GREEN='\033[0;32m'; YELLOW='\033[1;33m'; RED='\033[0;31m'; NC='\033[0m' +ok() { echo -e "${GREEN}[OK]${NC} $*"; } +info() { echo -e "${YELLOW}[INFO]${NC} $*"; } +warn() { echo -e "${YELLOW}[WARN]${NC} $*"; } +err() { echo -e "${RED}[ERR]${NC} $*"; } + +[[ $EUID -eq 0 ]] || { err "Must run as root"; exit 1; } + +REPO="${VEILOR_REPO:-/usr/share/veilor-os}" +ASSETS="$REPO/assets" + +if [[ ! -d $ASSETS ]]; then + err "asset tree not found at $ASSETS — aborting" + exit 1 +fi + +echo "════════════════════════════════════════════════════════" +echo " veilor-os :: 30-apply-v03-theme" +echo "════════════════════════════════════════════════════════" + +# ───────────────────────────────────────────────────────────────────── +# 1. Plymouth boot splash +# ───────────────────────────────────────────────────────────────────── +info "Plymouth: installing veilor theme" +PLY_SRC="$ASSETS/plymouth/veilor" +PLY_DST="/usr/share/plymouth/themes/veilor" +if [[ -d $PLY_SRC ]]; then + install -d -m 0755 "$PLY_DST" + cp -af "$PLY_SRC/." "$PLY_DST/" + chmod 0644 "$PLY_DST/"* + ok "plymouth files copied to $PLY_DST" + + if command -v plymouth-set-default-theme &>/dev/null; then + plymouth-set-default-theme -R veilor 2>/dev/null \ + && ok "plymouth default theme = veilor (initramfs rebuilt)" \ + || warn "plymouth-set-default-theme failed — set manually post-install" + else + warn "plymouth-set-default-theme not present (build chroot?) — skipping default-theme set" + # Fall back: write theme name to plymouth config so dracut picks it up + # next time initramfs is regenerated. + if [[ -f /etc/plymouth/plymouthd.conf ]]; then + sed -i 's/^Theme=.*/Theme=veilor/' /etc/plymouth/plymouthd.conf + else + install -d -m 0755 /etc/plymouth + cat > /etc/plymouth/plymouthd.conf << 'EOF' +[Daemon] +Theme=veilor +EOF + fi + ok "plymouth Theme= written to /etc/plymouth/plymouthd.conf" + fi +else + warn "plymouth source dir missing at $PLY_SRC — skipping" +fi + +# ───────────────────────────────────────────────────────────────────── +# 2. SDDM theme +# ───────────────────────────────────────────────────────────────────── +info "SDDM: installing veilor-black theme" +SDDM_SRC="$ASSETS/sddm/veilor-black" +SDDM_DST="/usr/share/sddm/themes/veilor-black" +if [[ -d $SDDM_SRC ]]; then + install -d -m 0755 "$SDDM_DST" + cp -af "$SDDM_SRC/." "$SDDM_DST/" + chmod 0644 "$SDDM_DST/"* + ok "sddm theme copied to $SDDM_DST" + + install -d -m 0755 /etc/sddm.conf.d + # Preserve other sddm.conf.d/*.conf entries; this file owns [Theme] only. + cat > /etc/sddm.conf.d/veilor-theme.conf << 'EOF' +# veilor-os v0.3 — set veilor-black SDDM theme as default (matches onyx) +[Theme] +Current=veilor-black +CursorTheme=Breeze_Light +Font=Fira Code +EOF + ok "sddm theme set in /etc/sddm.conf.d/veilor-theme.conf" +else + warn "sddm source dir missing at $SDDM_SRC — skipping" +fi + +# ───────────────────────────────────────────────────────────────────── +# 3. Konsole profile + colorscheme +# ───────────────────────────────────────────────────────────────────── +info "Konsole: installing Veilor profile + colorscheme" +KONS_SRC="$ASSETS/konsole" +if [[ -d $KONS_SRC ]]; then + install -d -m 0755 /usr/share/konsole + install -m 0644 "$KONS_SRC/veilor.profile" /usr/share/konsole/Veilor.profile + install -m 0644 "$KONS_SRC/veilor.colorscheme" /usr/share/konsole/Veilor.colorscheme + ok "konsole profile + colorscheme installed" + + # Set as default in /etc/xdg/konsolerc (system-wide). Idempotent rewrite + # of the [Desktop Entry] section's DefaultProfile key. + install -d -m 0755 /etc/xdg + if [[ -f /etc/xdg/konsolerc ]]; then + # Remove any existing DefaultProfile= line, then re-add under [Desktop Entry]. + if grep -q '^\[Desktop Entry\]' /etc/xdg/konsolerc; then + sed -i '/^DefaultProfile=/d' /etc/xdg/konsolerc + sed -i '/^\[Desktop Entry\]/a DefaultProfile=Veilor.profile' /etc/xdg/konsolerc + else + printf '\n[Desktop Entry]\nDefaultProfile=Veilor.profile\n' >> /etc/xdg/konsolerc + fi + else + cat > /etc/xdg/konsolerc << 'EOF' +[Desktop Entry] +DefaultProfile=Veilor.profile + +[KonsoleWindow] +ShowMenuBarByDefault=false +ShowWindowTitleOnTitleBar=true + +[TabBar] +TabBarVisibility=AlwaysHideTabBar +EOF + fi + ok "konsole default profile set in /etc/xdg/konsolerc" +else + warn "konsole source dir missing at $KONS_SRC — skipping" +fi + +# ───────────────────────────────────────────────────────────────────── +# 4. Wallpaper — solid black (matches onyx, no SVG asset) +# ───────────────────────────────────────────────────────────────────── +info "Wallpaper: setting Plasma default to org.kde.color (solid black)" +# onyx uses `wallpaperplugin=org.kde.color` + `Color=0,0,0` — pure black +# rendered by Plasma's color plugin, no image asset needed. +# Apply via system-wide kdedefaults so new users inherit. +KDD=/etc/xdg/kdedefaults +install -d -m 0755 "$KDD" +cat > "$KDD/plasma-org.kde.plasma.desktop-appletsrc" << 'EOF' +[Containments][1] +plugin=org.kde.desktopcontainment +wallpaperplugin=org.kde.color + +[Containments][1][Wallpaper][org.kde.color][General] +Color=0,0,0 +EOF +ok "default wallpaper = solid #000000 (Plasma color plugin)" + +# ───────────────────────────────────────────────────────────────────── +# 5. Breeze decoration override +# ───────────────────────────────────────────────────────────────────── +info "Breeze: installing veilor decoration override" +BRZ_SRC="$ASSETS/kde/breezerc" +BRZ_DST="/etc/xdg/breezerc" +if [[ -f $BRZ_SRC ]]; then + install -d -m 0755 /etc/xdg + install -m 0644 "$BRZ_SRC" "$BRZ_DST" + ok "breezerc installed at $BRZ_DST" + + # Also reflect title bar / button settings into kdeglobals so KWin + # picks up the same values without users running kde-theme-apply.sh. + KDG="/etc/xdg/kdedefaults/kdeglobals" + if [[ -f $KDG ]]; then + if ! grep -q '^\[KDE\]' "$KDG"; then + echo -e '\n[KDE]\nSingleClick=false' >> "$KDG" + fi + ok "kdeglobals already present at $KDG (no overwrite)" + else + warn "kdeglobals not found at $KDG — kde-theme-apply.sh runs separately" + fi +else + warn "breezerc source missing at $BRZ_SRC — skipping" +fi + +# ───────────────────────────────────────────────────────────────────── +# 6. Sanity: brand leak check (mirrors kickstart %post sanity) +# ───────────────────────────────────────────────────────────────────── +info "Sanity: scanning installed v0.3 paths for brand leaks" +LEAK_PATHS=( + "/usr/share/plymouth/themes/veilor" + "/usr/share/sddm/themes/veilor-black" + "/usr/share/konsole/Veilor.profile" + "/usr/share/konsole/Veilor.colorscheme" + "/etc/xdg/breezerc" + "/etc/sddm.conf.d/veilor-theme.conf" + "/etc/xdg/konsolerc" + "/etc/xdg/kdedefaults/plasma-org.kde.plasma.desktop-appletsrc" +) +LEAK=0 +for p in "${LEAK_PATHS[@]}"; do + [[ -e $p ]] || continue + if grep -rqi 'onyx\|192\.168\.0\.\|fedora\.local\|admin@gmail' "$p" 2>/dev/null; then + err "brand leak detected in $p" + LEAK=1 + fi +done +if [[ $LEAK -eq 0 ]]; then + ok "no brand leaks in v0.3 theme assets" +else + warn "brand leaks present — review and rebuild" +fi + +echo "════════════════════════════════════════════════════════" +echo " 30-apply-v03-theme complete" +echo "════════════════════════════════════════════════════════" diff --git a/upstream/fedora-kde-common.ks b/upstream/fedora-kde-common.ks new file mode 100644 index 0000000..cce30b0 --- /dev/null +++ b/upstream/fedora-kde-common.ks @@ -0,0 +1,51 @@ + +%packages +# install env-group to resolve RhBug:1891500 +@^kde-desktop-environment + +@firefox +@kde-apps +@kde-media +@kde-pim +# Ensure we have Anaconda initial setup using kwin +@kde-spin-initial-setup +@libreoffice +# add libreoffice-draw and libreoffice-math (pagureio:fedora-kde/SIG#103) +libreoffice-draw +libreoffice-math + +fedora-release-kde + +-@admin-tools + +# drop tracker stuff pulled in by gtk3 (pagureio:fedora-kde/SIG#124) +-tracker-miners +-tracker + +# Not needed on desktops. See: https://pagure.io/fedora-kde/SIG/issue/566 +-mariadb-server-utils + +### The KDE-Desktop + +# fedora-specific packages +plasma-welcome-fedora + +### fixes + +# minimal localization support - allows installing the kde-l10n-* packages +kde-l10n + +# Additional packages that are not default in kde-* groups, but useful +fuse +mediawriter + +### space issues +-ktorrent # kget has also basic torrent features (~3 megs) +-digikam # digikam has duplicate functionality with gwenview (~28 megs) +-kipi-plugins # ~8 megs + drags in Marble +-krusader # ~4 megs +-k3b # ~15 megs + +## avoid serious bugs by omitting broken stuff + +%end diff --git a/upstream/fedora-live-base.ks b/upstream/fedora-live-base.ks new file mode 100644 index 0000000..084a4c9 --- /dev/null +++ b/upstream/fedora-live-base.ks @@ -0,0 +1,106 @@ +# fedora-live-base.ks +# +# Defines the basics for all kickstarts in the fedora-live branch +# Does not include package selection (other then mandatory) +# Does not include localization packages or configuration +# +# Does includes "default" language configuration (kickstarts including +# this template can override these settings) + +lang en_US.UTF-8 +keyboard us +timezone US/Eastern +selinux --enforcing +firewall --enabled --service=mdns +xconfig --startxonboot +zerombr +clearpart --all +part / --size 5120 --fstype ext4 +services --enabled=NetworkManager,ModemManager --disabled=sshd +network --bootproto=dhcp --device=link --activate +rootpw --lock --iscrypted locked +shutdown + +%include fedora-repo.ks + +%packages +# Explicitly specified here: +# walters: because otherwise dependency loops cause yum issues. +kernel +kernel-modules +kernel-modules-extra + +# The point of a live image is to install +anaconda-install-env-deps +anaconda-live +@anaconda-tools +# Anaconda has a weak dep on this and we don't want it on livecds, see +# https://fedoraproject.org/wiki/Changes/RemoveDeviceMapperMultipathFromWorkstationLiveCD +-fcoe-utils +-device-mapper-multipath +-sdubby + +# Need aajohan-comfortaa-fonts for the SVG rnotes images +aajohan-comfortaa-fonts + +# Without this, initramfs generation during live image creation fails: #1242586 +dracut-live + +# anaconda needs the locales available to run for different locales +glibc-all-langpacks + +# provide the livesys scripts +livesys-scripts +%end + +%post +# Enable livesys services +systemctl enable livesys.service +systemctl enable livesys-late.service + +# enable tmpfs for /tmp +systemctl enable tmp.mount + +# make it so that we don't do writing to the overlay for things which +# are just tmpdirs/caches +# note https://bugzilla.redhat.com/show_bug.cgi?id=1135475 +cat >> /etc/fstab << EOF +vartmp /var/tmp tmpfs defaults 0 0 +EOF + +# work around for poor key import UI in PackageKit +rm -f /var/lib/rpm/__db* +echo "Packages within this LiveCD" +rpm -qa --qf '%{size}\t%{name}-%{version}-%{release}.%{arch}\n' |sort -rn +# Note that running rpm recreates the rpm db files which aren't needed or wanted +rm -f /var/lib/rpm/__db* + +# go ahead and pre-make the man -k cache (#455968) +/usr/bin/mandb + +# make sure there aren't core files lying around +rm -f /core* + +# remove random seed, the newly installed instance should make it's own +rm -f /var/lib/systemd/random-seed + +# convince readahead not to collect +# FIXME: for systemd + +echo 'File created by kickstart. See systemd-update-done.service(8).' \ + | tee /etc/.updated >/var/.updated + +# Drop the rescue kernel and initramfs, we don't need them on the live media itself. +# See bug 1317709 +rm -f /boot/*-rescue* + +# Disable network service here, as doing it in the services line +# fails due to RHBZ #1369794 +systemctl disable network + +# Remove machine-id on pre generated images +rm -f /etc/machine-id +touch /etc/machine-id + +%end + diff --git a/upstream/fedora-live-kde-base.ks b/upstream/fedora-live-kde-base.ks new file mode 100644 index 0000000..5adccaf --- /dev/null +++ b/upstream/fedora-live-kde-base.ks @@ -0,0 +1,25 @@ +# Maintained by the Fedora KDE SIG: +# http://fedoraproject.org/wiki/SIGs/KDE +# mailto:kde@lists.fedoraproject.org + +%include fedora-live-base.ks +%include fedora-kde-common.ks + +%post + +# set default GTK+ theme for root (see #683855, #689070, #808062) +cat > /root/.gtkrc-2.0 << EOF +include "/usr/share/themes/Adwaita/gtk-2.0/gtkrc" +include "/etc/gtk-2.0/gtkrc" +gtk-theme-name="Adwaita" +EOF +mkdir -p /root/.config/gtk-3.0 +cat > /root/.config/gtk-3.0/settings.ini << EOF +[Settings] +gtk-theme-name = Adwaita +EOF + +# set livesys session type +sed -i 's/^livesys_session=.*/livesys_session="kde"/' /etc/sysconfig/livesys + +%end diff --git a/upstream/fedora-live-kde.ks b/upstream/fedora-live-kde.ks new file mode 100644 index 0000000..7d8a826 --- /dev/null +++ b/upstream/fedora-live-kde.ks @@ -0,0 +1,17 @@ +# fedora-livecd-kde.ks +# +# Description: +# - Fedora Live Spin with the K Desktop Environment (KDE), default 1.4 GB version +# +# Maintainer(s): +# - Sebastian Vahl +# - Fedora KDE SIG, http://fedoraproject.org/wiki/SIGs/KDE, kde@lists.fedoraproject.org + +%include fedora-live-kde-base.ks +%include fedora-live-minimization.ks + +# DVD payload +part / --size=9000 + +%post +%end diff --git a/upstream/fedora-live-minimization.ks b/upstream/fedora-live-minimization.ks new file mode 100644 index 0000000..3cde144 --- /dev/null +++ b/upstream/fedora-live-minimization.ks @@ -0,0 +1,9 @@ +# Common packages removed from comps +# For F14, these removals should be moved to comps itself + +%packages + +# save some space +-hplip + +%end diff --git a/upstream/fedora-repo-not-rawhide.ks b/upstream/fedora-repo-not-rawhide.ks new file mode 100644 index 0000000..f7eeb20 --- /dev/null +++ b/upstream/fedora-repo-not-rawhide.ks @@ -0,0 +1,4 @@ +repo --name=fedora --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch +repo --name=updates --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f$releasever&arch=$basearch +#repo --name=updates-testing --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=updates-testing-f$releasever&arch=$basearch +url --mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch diff --git a/upstream/fedora-repo.ks b/upstream/fedora-repo.ks new file mode 100644 index 0000000..92d4d65 --- /dev/null +++ b/upstream/fedora-repo.ks @@ -0,0 +1,9 @@ +# Include the appropriate repo definitions + +# Exactly one of the following should be uncommented + +# For the master branch the following should be uncommented +# %include fedora-repo-rawhide.ks + +# For non-master branches the following should be uncommented +%include fedora-repo-not-rawhide.ks