From 65efc3741042f31ad62331d6ccd236032e79fa71 Mon Sep 17 00:00:00 2001 From: Marco Allegretti Date: Tue, 19 May 2026 09:18:32 +0200 Subject: [PATCH] Unify Shift theme identity --- .reuse/dep5 | 12 +- CMakeLists.txt | 9 + bin/startplasmamobile.in | 1 + color-schemes/CMakeLists.txt | 4 +- color-schemes/ShiftDark.colors | 2 +- color-schemes/ShiftLight.colors | 2 +- cursors/CMakeLists.txt | 7 + cursors/shift-cursors/index.theme | 4 + desktoptheme/CMakeLists.txt | 19 +++ desktoptheme/shift-dark/metadata.json | 17 ++ desktoptheme/shift-dark/plasmarc | 8 + desktoptheme/shift-light/metadata.json | 17 ++ desktoptheme/shift-light/plasmarc | 14 ++ fonts/CMakeLists.txt | 4 +- fonts/README.md | 4 +- icons/org.shift.icons/index.theme | 4 +- icons/sc-places-start-here-shift.svg | 4 +- initialstart/main.cpp | 4 +- .../org.shift.decoration/metadata.json | 8 +- lookandfeel/contents/defaults | 9 +- lookandfeel/contents/logout/Logout.qml | 8 +- lookandfeel/contents/splash/Splash.qml | 98 +++++++++++ lookandfeel/metadata.json | 6 +- org.shift.mobile.metainfo.xml | 2 +- shell/metadata.json | 2 +- tests/CMakeLists.txt | 5 + tests/check-shift-theme-identity.sh | 158 ++++++++++++++++++ wallpapers/CMakeLists.txt | 2 +- wallpapers/SHIFT/metadata.json | 2 +- 29 files changed, 400 insertions(+), 36 deletions(-) create mode 100644 cursors/CMakeLists.txt create mode 100644 cursors/shift-cursors/index.theme create mode 100644 desktoptheme/CMakeLists.txt create mode 100644 desktoptheme/shift-dark/metadata.json create mode 100644 desktoptheme/shift-dark/plasmarc create mode 100644 desktoptheme/shift-light/metadata.json create mode 100644 desktoptheme/shift-light/plasmarc create mode 100644 lookandfeel/contents/splash/Splash.qml create mode 100644 tests/check-shift-theme-identity.sh diff --git a/.reuse/dep5 b/.reuse/dep5 index d25f6c32..45ddb46a 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -13,7 +13,7 @@ License: CC-BY-SA-4.0 Files: icons/org.shift.icons/**/*.svg Copyright: 2023 Phosphor Icons - 2026 Shift contributors + 2026 Marco Allegretti License: MIT Comment: SVG glyphs are adapted from Phosphor Icons regular 256px paths for the Shift icon theme. @@ -22,3 +22,13 @@ Files: icons/org.shift.icons/index.theme Copyright: 2026 Marco Allegretti License: EUPL-1.2 +Files: cursors/shift-cursors/index.theme +Copyright: 2026 Marco Allegretti +License: EUPL-1.2 + +Files: desktoptheme/shift-dark/metadata.json + desktoptheme/shift-light/metadata.json + kwin/decorations/org.shift.decoration/metadata.json +Copyright: 2026 Marco Allegretti +License: EUPL-1.2 + diff --git a/CMakeLists.txt b/CMakeLists.txt index 8268aee9..c1ab3190 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -149,6 +149,8 @@ plasma_install_package(${SHIFT_SHELL_PACKAGE_DIR} org.kde.plasma.mobileshell she add_subdirectory(bin) add_subdirectory(color-schemes) +add_subdirectory(cursors) +add_subdirectory(desktoptheme) add_subdirectory(fonts) add_subdirectory(icons) add_subdirectory(wallpapers) @@ -185,6 +187,13 @@ kde_configure_git_pre_commit_hook(CHECKS CLANG_FORMAT) ki18n_install(po) +install(CODE " +file(GLOB _stale_shift_lookandfeel_catalogs \"\$ENV{DESTDIR}${CMAKE_INSTALL_FULL_DATADIR}/locale/*/LC_MESSAGES/plasma_lookandfeel_org.kde.breeze.mobile.mo\") +foreach(_catalog IN LISTS _stale_shift_lookandfeel_catalogs) + file(REMOVE \"\${_catalog}\") +endforeach() +") + if (INSTALL_SYSTEMD_SERVICE) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/plasma-mobile.service diff --git a/bin/startplasmamobile.in b/bin/startplasmamobile.in index 9c4c994d..33f0d09a 100755 --- a/bin/startplasmamobile.in +++ b/bin/startplasmamobile.in @@ -10,6 +10,7 @@ export QT_QPA_PLATFORMTHEME=KDE export EGL_PLATFORM=wayland +# Shift does not ship a QQC2 style plugin yet, so this remains an explicit runtime dependency. export QT_QUICK_CONTROLS_STYLE=org.kde.breeze export QT_ENABLE_GLYPH_CACHE_WORKAROUND=1 export QT_QUICK_CONTROLS_MOBILE=true diff --git a/color-schemes/CMakeLists.txt b/color-schemes/CMakeLists.txt index 4cc41347..1354a20a 100644 --- a/color-schemes/CMakeLists.txt +++ b/color-schemes/CMakeLists.txt @@ -1,5 +1,5 @@ -# SPDX-FileCopyrightText: 2026 Shift contributors -# SPDX-License-Identifier: GPL-2.0-or-later +# SPDX-FileCopyrightText: 2026 Marco Allegretti +# SPDX-License-Identifier: EUPL-1.2 install(FILES ShiftDark.colors diff --git a/color-schemes/ShiftDark.colors b/color-schemes/ShiftDark.colors index 41edc653..3e4f2964 100644 --- a/color-schemes/ShiftDark.colors +++ b/color-schemes/ShiftDark.colors @@ -141,7 +141,7 @@ ForegroundVisited=155,89,182 [General] ColorScheme=ShiftDark -Name=Shift Dark +Name=SHIFT Dark shadeSortColumn=true [KDE] diff --git a/color-schemes/ShiftLight.colors b/color-schemes/ShiftLight.colors index e25f698e..8843baa8 100644 --- a/color-schemes/ShiftLight.colors +++ b/color-schemes/ShiftLight.colors @@ -140,7 +140,7 @@ ForegroundVisited=155,89,182 [General] ColorScheme=ShiftLight -Name=Shift Light +Name=SHIFT Light shadeSortColumn=true [KDE] diff --git a/cursors/CMakeLists.txt b/cursors/CMakeLists.txt new file mode 100644 index 00000000..9ab6c177 --- /dev/null +++ b/cursors/CMakeLists.txt @@ -0,0 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Marco Allegretti +# SPDX-License-Identifier: EUPL-1.2 + +install( + DIRECTORY shift-cursors + DESTINATION ${KDE_INSTALL_ICONDIR} +) \ No newline at end of file diff --git a/cursors/shift-cursors/index.theme b/cursors/shift-cursors/index.theme new file mode 100644 index 00000000..2728e44d --- /dev/null +++ b/cursors/shift-cursors/index.theme @@ -0,0 +1,4 @@ +[Icon Theme] +Name=SHIFT +Comment=SHIFT cursor theme +Inherits=breeze_cursors \ No newline at end of file diff --git a/desktoptheme/CMakeLists.txt b/desktoptheme/CMakeLists.txt new file mode 100644 index 00000000..284bb33c --- /dev/null +++ b/desktoptheme/CMakeLists.txt @@ -0,0 +1,19 @@ +# SPDX-FileCopyrightText: 2026 Marco Allegretti +# SPDX-License-Identifier: EUPL-1.2 + +install( + DIRECTORY shift-dark shift-light + DESTINATION ${KDE_INSTALL_DATADIR}/plasma/desktoptheme +) + +install( + FILES ${CMAKE_SOURCE_DIR}/color-schemes/ShiftDark.colors + DESTINATION ${KDE_INSTALL_DATADIR}/plasma/desktoptheme/shift-dark + RENAME colors +) + +install( + FILES ${CMAKE_SOURCE_DIR}/color-schemes/ShiftLight.colors + DESTINATION ${KDE_INSTALL_DATADIR}/plasma/desktoptheme/shift-light + RENAME colors +) \ No newline at end of file diff --git a/desktoptheme/shift-dark/metadata.json b/desktoptheme/shift-dark/metadata.json new file mode 100644 index 00000000..46e1bba1 --- /dev/null +++ b/desktoptheme/shift-dark/metadata.json @@ -0,0 +1,17 @@ +{ + "KPlugin": { + "Authors": [ + { + "Name": "Marco Allegretti" + } + ], + "Category": "", + "Description": "SHIFT dark workspace theme", + "EnabledByDefault": true, + "Id": "shift-dark", + "License": "EUPL-1.2", + "Name": "SHIFT Dark", + "Website": "https://invent.kde.org/marcoa/shift-shell" + }, + "X-Plasma-API": "5.0" +} \ No newline at end of file diff --git a/desktoptheme/shift-dark/plasmarc b/desktoptheme/shift-dark/plasmarc new file mode 100644 index 00000000..e8a2afed --- /dev/null +++ b/desktoptheme/shift-dark/plasmarc @@ -0,0 +1,8 @@ +# SPDX-FileCopyrightText: 2026 Marco Allegretti +# SPDX-License-Identifier: EUPL-1.2 + +[Settings] +FallbackTheme=breeze-dark + +[AdaptiveTransparency] +enabled=true \ No newline at end of file diff --git a/desktoptheme/shift-light/metadata.json b/desktoptheme/shift-light/metadata.json new file mode 100644 index 00000000..c19c15c1 --- /dev/null +++ b/desktoptheme/shift-light/metadata.json @@ -0,0 +1,17 @@ +{ + "KPlugin": { + "Authors": [ + { + "Name": "Marco Allegretti" + } + ], + "Category": "", + "Description": "SHIFT light workspace theme", + "EnabledByDefault": true, + "Id": "shift-light", + "License": "EUPL-1.2", + "Name": "SHIFT Light", + "Website": "https://invent.kde.org/marcoa/shift-shell" + }, + "X-Plasma-API": "5.0" +} \ No newline at end of file diff --git a/desktoptheme/shift-light/plasmarc b/desktoptheme/shift-light/plasmarc new file mode 100644 index 00000000..cd8ae34d --- /dev/null +++ b/desktoptheme/shift-light/plasmarc @@ -0,0 +1,14 @@ +# SPDX-FileCopyrightText: 2026 Marco Allegretti +# SPDX-License-Identifier: EUPL-1.2 + +[Settings] +FallbackTheme=breeze-light + +[ContrastEffect] +enabled=true +contrast=0.2 +intensity=2.0 +saturation=1.7 + +[AdaptiveTransparency] +enabled=true \ No newline at end of file diff --git a/fonts/CMakeLists.txt b/fonts/CMakeLists.txt index 706a3993..bec0464b 100644 --- a/fonts/CMakeLists.txt +++ b/fonts/CMakeLists.txt @@ -1,5 +1,5 @@ -# SPDX-FileCopyrightText: 2026 SHIFT Contributors -# SPDX-License-Identifier: GPL-2.0-or-later +# SPDX-FileCopyrightText: 2026 Marco Allegretti +# SPDX-License-Identifier: EUPL-1.2 # Install bundled font files (if any are present) into the system font dir # so the shell session can render the configured default font even on diff --git a/fonts/README.md b/fonts/README.md index b9685338..2e0b3d47 100644 --- a/fonts/README.md +++ b/fonts/README.md @@ -1,6 +1,6 @@ # Shift bundled fonts diff --git a/icons/org.shift.icons/index.theme b/icons/org.shift.icons/index.theme index 24be3563..d59365cc 100644 --- a/icons/org.shift.icons/index.theme +++ b/icons/org.shift.icons/index.theme @@ -1,6 +1,6 @@ [Icon Theme] -Name=Shift -Comment=Shift icon theme +Name=SHIFT +Comment=SHIFT icon theme Inherits=hicolor Example=folder DisplayDepth=32 diff --git a/icons/sc-places-start-here-shift.svg b/icons/sc-places-start-here-shift.svg index d850ae0a..2939be7b 100644 --- a/icons/sc-places-start-here-shift.svg +++ b/icons/sc-places-start-here-shift.svg @@ -1,5 +1,5 @@ - - + + diff --git a/initialstart/main.cpp b/initialstart/main.cpp index cd6e09cf..3b9c16b6 100644 --- a/initialstart/main.cpp +++ b/initialstart/main.cpp @@ -40,9 +40,9 @@ int main(int argc, char *argv[]) QStringLiteral(PLASMA_MOBILE_VERSION_STRING), QStringLiteral(""), KAboutLicense::GPL, - i18n("© 2023-2026 Plasma Mobile and SHIFT contributors")); + i18n("© 2023-2026 Plasma Mobile contributors and Marco Allegretti")); aboutData.addAuthor(i18n("Devin Lin"), QString(), QStringLiteral("devin@kde.org")); - aboutData.addAuthor(i18n("SHIFT Contributors")); + aboutData.addAuthor(i18n("Marco Allegretti")); aboutData.setBugAddress("https://invent.kde.org/marcoa/shift-shell/-/issues"); KAboutData::setApplicationData(aboutData); diff --git a/kwin/decorations/org.shift.decoration/metadata.json b/kwin/decorations/org.shift.decoration/metadata.json index 42ac81a6..911ef00a 100644 --- a/kwin/decorations/org.shift.decoration/metadata.json +++ b/kwin/decorations/org.shift.decoration/metadata.json @@ -3,12 +3,12 @@ "KPlugin": { "Authors": [ { - "Name": "SHIFT Contributors" + "Name": "Marco Allegretti" } ], - "Description": "Shift window decoration", + "Description": "SHIFT window decoration", "Id": "org.shift.decoration", - "License": "GPL-2.0-or-later", - "Name": "Shift" + "License": "EUPL-1.2", + "Name": "SHIFT" } } diff --git a/lookandfeel/contents/defaults b/lookandfeel/contents/defaults index 1716df34..f5d54087 100644 --- a/lookandfeel/contents/defaults +++ b/lookandfeel/contents/defaults @@ -9,7 +9,7 @@ widgetStyle=Breeze [kdeglobals][General] ColorScheme=ShiftDark -Name=Shift Dark +Name=SHIFT Dark font=Atkinson Hyperlegible Next,11,-1,5,400,0,0,0,0,0,0,0,0,0,0,1 fixed=Atkinson Hyperlegible Mono,11,-1,5,400,0,0,0,0,0,0,0,0,0,0,1 smallestReadableFont=Atkinson Hyperlegible Next,9,-1,5,400,0,0,0,0,0,0,0,0,0,0,1 @@ -24,14 +24,11 @@ Image=SHIFT # Set default cursor theme [kcminputrc][Mouse] -cursorTheme=breeze_cursors +cursorTheme=shift-cursors [plasmarc][Theme] -name=breeze-dark +name=shift-dark [kwinrc][org.kde.kdecoration2] library=org.kde.kwin.aurorae theme=org.shift.decoration - -[KSplash] -Theme=org.kde.Breeze diff --git a/lookandfeel/contents/logout/Logout.qml b/lookandfeel/contents/logout/Logout.qml index 090b44a1..e4a6dfc5 100644 --- a/lookandfeel/contents/logout/Logout.qml +++ b/lookandfeel/contents/logout/Logout.qml @@ -138,7 +138,7 @@ Item { ActionButton { iconSource: "system-reboot" - text: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Restart") + text: i18nd("plasma_lookandfeel_org.shift.mobile", "Restart") onClicked: { closeAnim.closeToBlack = true; closeAnim.execute(root.rebootRequested); @@ -147,7 +147,7 @@ Item { ActionButton { iconSource: "system-shutdown" - text: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Shut Down") + text: i18nd("plasma_lookandfeel_org.shift.mobile", "Shut Down") onClicked: { closeAnim.closeToBlack = true; closeAnim.execute(root.haltRequested); @@ -156,7 +156,7 @@ Item { ActionButton { iconSource: "system-log-out" - text: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Log Out") + text: i18nd("plasma_lookandfeel_org.shift.mobile", "Log Out") visible: ShellSettings.Settings.allowLogout onClicked: { closeAnim.closeToBlack = true; @@ -172,7 +172,7 @@ Item { horizontalCenter: parent.horizontalCenter } iconSource: "dialog-cancel" - text: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Cancel") + text: i18nd("plasma_lookandfeel_org.shift.mobile", "Cancel") onClicked: { closeAnim.closeToBlack = false; closeAnim.execute(root.cancelRequested); diff --git a/lookandfeel/contents/splash/Splash.qml b/lookandfeel/contents/splash/Splash.qml new file mode 100644 index 00000000..c3394f1e --- /dev/null +++ b/lookandfeel/contents/splash/Splash.qml @@ -0,0 +1,98 @@ +/* + SPDX-FileCopyrightText: 2026 Marco Allegretti + + SPDX-License-Identifier: EUPL-1.2 +*/ + +import QtQuick +import org.kde.kirigami as Kirigami + +Rectangle { + id: root + + color: "#0e0f16" + + property int stage + + readonly property bool busy: stage > 1 && stage < 6 + + Item { + id: content + anchors.centerIn: parent + width: Math.min(parent.width, Kirigami.Units.gridUnit * 24) + height: Kirigami.Units.gridUnit * 12 + opacity: root.stage > 1 ? 1 : 0 + + Behavior on opacity { + OpacityAnimator { + duration: Kirigami.Units.veryLongDuration + easing.type: Easing.InOutQuad + } + } + + Text { + id: wordmark + anchors.centerIn: parent + text: "SHIFT" + color: "#fcfcfc" + font.family: "Atkinson Hyperlegible Next" + font.pixelSize: Math.round(Kirigami.Units.gridUnit * 3.2) + font.weight: Font.DemiBold + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + + Rectangle { + width: Math.round(Kirigami.Units.gridUnit * 5) + height: Math.max(2, Math.round(Kirigami.Units.devicePixelRatio * 2)) + radius: height / 2 + color: "#2eb8a8" + anchors.top: wordmark.bottom + anchors.topMargin: Kirigami.Units.largeSpacing + anchors.horizontalCenter: parent.horizontalCenter + } + + Item { + id: busyIndicator + width: Kirigami.Units.gridUnit * 1.6 + height: width + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: wordmark.bottom + anchors.topMargin: Kirigami.Units.gridUnit * 2.2 + opacity: root.busy ? 1 : 0 + + Behavior on opacity { + OpacityAnimator { + duration: Kirigami.Units.longDuration + easing.type: Easing.InOutQuad + } + } + + Rectangle { + anchors.fill: parent + radius: width / 2 + color: "transparent" + border.width: Math.max(2, Math.round(Kirigami.Units.devicePixelRatio * 2)) + border.color: "#2eb8a8" + opacity: 0.28 + } + + Rectangle { + width: parent.width + height: Math.max(2, Math.round(Kirigami.Units.devicePixelRatio * 2)) + radius: height / 2 + color: "#2eb8a8" + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: parent.top + } + + RotationAnimator on rotation { + from: 0 + to: 360 + duration: 1400 + loops: Animation.Infinite + running: root.busy && Kirigami.Units.longDuration > 1 + } + } + } +} \ No newline at end of file diff --git a/lookandfeel/metadata.json b/lookandfeel/metadata.json index 95323994..a2df4f96 100644 --- a/lookandfeel/metadata.json +++ b/lookandfeel/metadata.json @@ -3,14 +3,14 @@ "KPlugin": { "Authors": [ { - "Name": "SHIFT Contributors" + "Name": "Marco Allegretti" } ], "Category": "", - "Description": "SHIFT for mobile and convergent devices", + "Description": "SHIFT shell appearance for mobile and convergent devices", "Id": "org.shift.mobile", "License": "GPLv2+", - "Name": "SHIFT Mobile" + "Name": "SHIFT" }, "Keywords": "Phone;Mobile;Desktop;Workspace;Appearance;Look and Feel;Logout;Lock;Suspend;Shutdown;Hibernate;", "X-Plasma-APIVersion": "2" diff --git a/org.shift.mobile.metainfo.xml b/org.shift.mobile.metainfo.xml index 0417ad5c..f6afb1c4 100644 --- a/org.shift.mobile.metainfo.xml +++ b/org.shift.mobile.metainfo.xml @@ -6,7 +6,7 @@ org.shift.mobile - SHIFT Contributors + Marco Allegretti CC0-1.0 GPL-2.0-or-later diff --git a/shell/metadata.json b/shell/metadata.json index 03e4ba20..aa19ff5e 100644 --- a/shell/metadata.json +++ b/shell/metadata.json @@ -7,7 +7,7 @@ "Name": "Devin Lin" }, { - "Name": "SHIFT Contributors" + "Name": "Marco Allegretti" } ], "Category": "", diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 28a7da0d..dda35922 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -20,6 +20,11 @@ if(BASH_EXECUTABLE) COMMAND ${BASH_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/check-shift-product-metadata.sh ) + add_test( + NAME shift-theme-identity + COMMAND ${BASH_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/check-shift-theme-identity.sh + ) + add_test( NAME shift-initialstart-metadata COMMAND ${BASH_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/check-shift-initialstart-metadata.sh diff --git a/tests/check-shift-theme-identity.sh b/tests/check-shift-theme-identity.sh new file mode 100644 index 00000000..ed82bc76 --- /dev/null +++ b/tests/check-shift-theme-identity.sh @@ -0,0 +1,158 @@ +#!/usr/bin/env bash +# SPDX-FileCopyrightText: 2026 Marco Allegretti +# SPDX-License-Identifier: EUPL-1.2 + +set -euo pipefail + +repo_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +cd "$repo_dir" + +fail() { + printf '%s\n' "$1" >&2 + exit 1 +} + +require_line() { + local file="$1" + local pattern="$2" + local message="$3" + + grep -Eq "$pattern" "$file" || fail "$message" +} + +reject_line() { + local file="$1" + local pattern="$2" + local message="$3" + + ! grep -Eq "$pattern" "$file" || fail "$message" +} + +require_line CMakeLists.txt '^add_subdirectory\(cursors\)$' \ + "top-level build must install the Shift cursor theme" +require_line CMakeLists.txt '^add_subdirectory\(desktoptheme\)$' \ + "top-level build must install the Shift Plasma desktop themes" + +require_line lookandfeel/metadata.json '"Id": "org\.shift\.mobile"' \ + "look-and-feel id must remain org.shift.mobile" +require_line lookandfeel/metadata.json '"Name": "SHIFT"' \ + "look-and-feel visible name must be SHIFT" + +require_line color-schemes/ShiftDark.colors '^ColorScheme=ShiftDark$' \ + "dark color scheme id must remain ShiftDark" +require_line color-schemes/ShiftDark.colors '^Name=SHIFT Dark$' \ + "dark color scheme visible name must be SHIFT Dark" +require_line color-schemes/ShiftLight.colors '^ColorScheme=ShiftLight$' \ + "light color scheme id must remain ShiftLight" +require_line color-schemes/ShiftLight.colors '^Name=SHIFT Light$' \ + "light color scheme visible name must be SHIFT Light" + +require_line icons/org.shift.icons/index.theme '^Name=SHIFT$' \ + "icon theme visible name must be SHIFT" +require_line kwin/decorations/org.shift.decoration/metadata.json '"Name": "SHIFT"' \ + "window decoration visible name must be SHIFT" +require_line wallpapers/SHIFT/metadata.json '"Name": "SHIFT"' \ + "wallpaper visible name must be SHIFT" + +require_line desktoptheme/shift-dark/metadata.json '"Id": "shift-dark"' \ + "dark Plasma desktop theme id must be shift-dark" +require_line desktoptheme/shift-dark/metadata.json '"Name": "SHIFT Dark"' \ + "dark Plasma desktop theme visible name must be SHIFT Dark" +require_line desktoptheme/shift-light/metadata.json '"Id": "shift-light"' \ + "light Plasma desktop theme id must be shift-light" +require_line desktoptheme/shift-light/metadata.json '"Name": "SHIFT Light"' \ + "light Plasma desktop theme visible name must be SHIFT Light" +require_line cursors/shift-cursors/index.theme '^Name=SHIFT$' \ + "cursor theme visible name must be SHIFT" + +require_line lookandfeel/contents/defaults '^ColorScheme=ShiftDark$' \ + "look-and-feel defaults must select ShiftDark" +require_line lookandfeel/contents/defaults '^Theme=org\.shift\.icons$' \ + "look-and-feel defaults must select org.shift.icons" +require_line lookandfeel/contents/defaults '^cursorTheme=shift-cursors$' \ + "look-and-feel defaults must select shift-cursors" +require_line lookandfeel/contents/defaults '^name=shift-dark$' \ + "look-and-feel defaults must select the Shift dark Plasma desktop theme" +require_line lookandfeel/contents/defaults '^theme=org\.shift\.decoration$' \ + "look-and-feel defaults must select org.shift.decoration" +reject_line lookandfeel/contents/defaults 'breeze-dark|breeze-light|breeze_cursors|org\.kde\.Breeze' \ + "look-and-feel defaults must not select Breeze desktop, cursor, or splash themes" + +[[ -f lookandfeel/contents/splash/Splash.qml ]] || fail "look-and-feel must provide a Shift splash implementation" +reject_line lookandfeel/contents/logout/Logout.qml 'plasma_lookandfeel_org\.kde\.lookandfeel' \ + "look-and-feel QML must use the Shift translation domain" +require_line lookandfeel/contents/logout/Logout.qml 'plasma_lookandfeel_org\.shift\.mobile' \ + "look-and-feel logout QML must use plasma_lookandfeel_org.shift.mobile" +require_line lookandfeel/Messages.sh 'plasma_lookandfeel_org\.shift\.mobile\.pot' \ + "look-and-feel Messages.sh must generate the Shift translation domain" + +while IFS= read -r po_file; do + [[ "$po_file" == *'/plasma_lookandfeel_org.shift.mobile.po' ]] \ + || fail "look-and-feel translation file must use the Shift domain: $po_file" + require_line "$po_file" 'Project-Id-Version: plasma_lookandfeel_org\.shift\.mobile' \ + "$po_file header must use the Shift translation domain" +done < <(find po -path '*/plasma_lookandfeel_*.po' -print | sort) + +require_line preview.sh 'PLASMA_THEME=shift-light' \ + "preview light mode must select the Shift light Plasma desktop theme" +require_line preview.sh 'PLASMA_THEME=shift-dark' \ + "preview dark mode must select the Shift dark Plasma desktop theme" +reject_line preview.sh 'PLASMA_THEME=breeze-' \ + "preview must not select Breeze Plasma desktop themes" + +generic_attribution_pattern='Shift contributor[s]|SHIFT Contributor[s]' + +if grep -RInE "$generic_attribution_pattern" \ + .reuse \ + color-schemes/CMakeLists.txt \ + cursors \ + desktoptheme \ + fonts/CMakeLists.txt \ + fonts/README.md \ + icons/sc-places-start-here-shift.svg \ + kwin/decorations/org.shift.decoration/metadata.json \ + lookandfeel/contents/splash \ + lookandfeel/metadata.json \ + org.shift.mobile.metainfo.xml \ + shell/metadata.json \ + tests/check-shift-theme-identity.sh >/dev/null; then + fail "Shift-owned theme identity files must not use generic Shift contributor attribution" +fi + +for license_file in \ + color-schemes/CMakeLists.txt \ + cursors/CMakeLists.txt \ + desktoptheme/CMakeLists.txt \ + desktoptheme/shift-dark/plasmarc \ + desktoptheme/shift-light/plasmarc \ + fonts/CMakeLists.txt \ + fonts/README.md \ + icons/sc-places-start-here-shift.svg \ + lookandfeel/contents/splash/Splash.qml \ + tests/check-shift-theme-identity.sh; do + require_line "$license_file" 'SPDX-FileCopyrightText: 2026 Marco Allegretti' \ + "$license_file must attribute Shift-owned work to Marco Allegretti" + require_line "$license_file" 'SPDX-License-Identifier: EUPL-1\.2' \ + "$license_file must use EUPL-1.2" +done + +for metadata_file in \ + desktoptheme/shift-dark/metadata.json \ + desktoptheme/shift-light/metadata.json \ + kwin/decorations/org.shift.decoration/metadata.json; do + require_line "$metadata_file" '"Name": "Marco Allegretti"' \ + "$metadata_file must attribute Shift-owned metadata to Marco Allegretti" + require_line "$metadata_file" '"License": "EUPL-1\.2"' \ + "$metadata_file must use EUPL-1.2" +done + +for author_file in \ + lookandfeel/metadata.json \ + shell/metadata.json \ + org.shift.mobile.metainfo.xml; do + require_line "$author_file" 'Marco Allegretti' \ + "$author_file must not use generic Shift contributor attribution" +done + +result='shift-theme-identity-ok' +printf '%s\n' "$result" diff --git a/wallpapers/CMakeLists.txt b/wallpapers/CMakeLists.txt index c2fed146..95513ded 100644 --- a/wallpapers/CMakeLists.txt +++ b/wallpapers/CMakeLists.txt @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2026 SHIFT Contributors +# SPDX-FileCopyrightText: 2026 Marco Allegretti # SPDX-License-Identifier: EUPL-1.2 install(DIRECTORY SHIFT diff --git a/wallpapers/SHIFT/metadata.json b/wallpapers/SHIFT/metadata.json index 665b975b..2bfc033b 100644 --- a/wallpapers/SHIFT/metadata.json +++ b/wallpapers/SHIFT/metadata.json @@ -7,6 +7,6 @@ ], "Id": "SHIFT", "License": "EUPL-1.2", - "Name": "SHIFT Light / SHIFT Dark" + "Name": "SHIFT" } } \ No newline at end of file