mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-06-11 00:47:22 +00:00
Unify Shift theme identity
This commit is contained in:
parent
e54696b5c6
commit
65efc37410
29 changed files with 400 additions and 36 deletions
12
.reuse/dep5
12
.reuse/dep5
|
|
@ -13,7 +13,7 @@ License: CC-BY-SA-4.0
|
||||||
|
|
||||||
Files: icons/org.shift.icons/**/*.svg
|
Files: icons/org.shift.icons/**/*.svg
|
||||||
Copyright: 2023 Phosphor Icons
|
Copyright: 2023 Phosphor Icons
|
||||||
2026 Shift contributors
|
2026 Marco Allegretti
|
||||||
License: MIT
|
License: MIT
|
||||||
Comment: SVG glyphs are adapted from Phosphor Icons regular 256px paths for the Shift icon theme.
|
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
|
Copyright: 2026 Marco Allegretti
|
||||||
License: EUPL-1.2
|
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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -149,6 +149,8 @@ plasma_install_package(${SHIFT_SHELL_PACKAGE_DIR} org.kde.plasma.mobileshell she
|
||||||
|
|
||||||
add_subdirectory(bin)
|
add_subdirectory(bin)
|
||||||
add_subdirectory(color-schemes)
|
add_subdirectory(color-schemes)
|
||||||
|
add_subdirectory(cursors)
|
||||||
|
add_subdirectory(desktoptheme)
|
||||||
add_subdirectory(fonts)
|
add_subdirectory(fonts)
|
||||||
add_subdirectory(icons)
|
add_subdirectory(icons)
|
||||||
add_subdirectory(wallpapers)
|
add_subdirectory(wallpapers)
|
||||||
|
|
@ -185,6 +187,13 @@ kde_configure_git_pre_commit_hook(CHECKS CLANG_FORMAT)
|
||||||
|
|
||||||
ki18n_install(po)
|
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)
|
if (INSTALL_SYSTEMD_SERVICE)
|
||||||
install(FILES
|
install(FILES
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/plasma-mobile.service
|
${CMAKE_CURRENT_SOURCE_DIR}/plasma-mobile.service
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@
|
||||||
export QT_QPA_PLATFORMTHEME=KDE
|
export QT_QPA_PLATFORMTHEME=KDE
|
||||||
export EGL_PLATFORM=wayland
|
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_QUICK_CONTROLS_STYLE=org.kde.breeze
|
||||||
export QT_ENABLE_GLYPH_CACHE_WORKAROUND=1
|
export QT_ENABLE_GLYPH_CACHE_WORKAROUND=1
|
||||||
export QT_QUICK_CONTROLS_MOBILE=true
|
export QT_QUICK_CONTROLS_MOBILE=true
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
# SPDX-FileCopyrightText: 2026 Shift contributors
|
# SPDX-FileCopyrightText: 2026 Marco Allegretti
|
||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
# SPDX-License-Identifier: EUPL-1.2
|
||||||
|
|
||||||
install(FILES
|
install(FILES
|
||||||
ShiftDark.colors
|
ShiftDark.colors
|
||||||
|
|
|
||||||
|
|
@ -141,7 +141,7 @@ ForegroundVisited=155,89,182
|
||||||
|
|
||||||
[General]
|
[General]
|
||||||
ColorScheme=ShiftDark
|
ColorScheme=ShiftDark
|
||||||
Name=Shift Dark
|
Name=SHIFT Dark
|
||||||
shadeSortColumn=true
|
shadeSortColumn=true
|
||||||
|
|
||||||
[KDE]
|
[KDE]
|
||||||
|
|
|
||||||
|
|
@ -140,7 +140,7 @@ ForegroundVisited=155,89,182
|
||||||
|
|
||||||
[General]
|
[General]
|
||||||
ColorScheme=ShiftLight
|
ColorScheme=ShiftLight
|
||||||
Name=Shift Light
|
Name=SHIFT Light
|
||||||
shadeSortColumn=true
|
shadeSortColumn=true
|
||||||
|
|
||||||
[KDE]
|
[KDE]
|
||||||
|
|
|
||||||
7
cursors/CMakeLists.txt
Normal file
7
cursors/CMakeLists.txt
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
# SPDX-FileCopyrightText: 2026 Marco Allegretti
|
||||||
|
# SPDX-License-Identifier: EUPL-1.2
|
||||||
|
|
||||||
|
install(
|
||||||
|
DIRECTORY shift-cursors
|
||||||
|
DESTINATION ${KDE_INSTALL_ICONDIR}
|
||||||
|
)
|
||||||
4
cursors/shift-cursors/index.theme
Normal file
4
cursors/shift-cursors/index.theme
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
[Icon Theme]
|
||||||
|
Name=SHIFT
|
||||||
|
Comment=SHIFT cursor theme
|
||||||
|
Inherits=breeze_cursors
|
||||||
19
desktoptheme/CMakeLists.txt
Normal file
19
desktoptheme/CMakeLists.txt
Normal file
|
|
@ -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
|
||||||
|
)
|
||||||
17
desktoptheme/shift-dark/metadata.json
Normal file
17
desktoptheme/shift-dark/metadata.json
Normal file
|
|
@ -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"
|
||||||
|
}
|
||||||
8
desktoptheme/shift-dark/plasmarc
Normal file
8
desktoptheme/shift-dark/plasmarc
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
# SPDX-FileCopyrightText: 2026 Marco Allegretti
|
||||||
|
# SPDX-License-Identifier: EUPL-1.2
|
||||||
|
|
||||||
|
[Settings]
|
||||||
|
FallbackTheme=breeze-dark
|
||||||
|
|
||||||
|
[AdaptiveTransparency]
|
||||||
|
enabled=true
|
||||||
17
desktoptheme/shift-light/metadata.json
Normal file
17
desktoptheme/shift-light/metadata.json
Normal file
|
|
@ -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"
|
||||||
|
}
|
||||||
14
desktoptheme/shift-light/plasmarc
Normal file
14
desktoptheme/shift-light/plasmarc
Normal file
|
|
@ -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
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
# SPDX-FileCopyrightText: 2026 SHIFT Contributors
|
# SPDX-FileCopyrightText: 2026 Marco Allegretti
|
||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
# SPDX-License-Identifier: EUPL-1.2
|
||||||
|
|
||||||
# Install bundled font files (if any are present) into the system font dir
|
# 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
|
# so the shell session can render the configured default font even on
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<!--
|
<!--
|
||||||
SPDX-FileCopyrightText: 2026 SHIFT Contributors
|
SPDX-FileCopyrightText: 2026 Marco Allegretti
|
||||||
SPDX-License-Identifier: GPL-2.0-or-later
|
SPDX-License-Identifier: EUPL-1.2
|
||||||
-->
|
-->
|
||||||
|
|
||||||
# Shift bundled fonts
|
# Shift bundled fonts
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[Icon Theme]
|
[Icon Theme]
|
||||||
Name=Shift
|
Name=SHIFT
|
||||||
Comment=Shift icon theme
|
Comment=SHIFT icon theme
|
||||||
Inherits=hicolor
|
Inherits=hicolor
|
||||||
Example=folder
|
Example=folder
|
||||||
DisplayDepth=32
|
DisplayDepth=32
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<!-- SPDX-FileCopyrightText: 2026 Shift contributors -->
|
<!-- SPDX-FileCopyrightText: 2026 Marco Allegretti -->
|
||||||
<!-- SPDX-License-Identifier: GPL-2.0-or-later -->
|
<!-- SPDX-License-Identifier: EUPL-1.2 -->
|
||||||
<svg viewBox="0 0 96 96" xmlns="http://www.w3.org/2000/svg">
|
<svg viewBox="0 0 96 96" xmlns="http://www.w3.org/2000/svg">
|
||||||
<!-- top-left circle -->
|
<!-- top-left circle -->
|
||||||
<circle cx="16" cy="16" r="16" fill="#FBFBFB"/>
|
<circle cx="16" cy="16" r="16" fill="#FBFBFB"/>
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 509 B After Width: | Height: | Size: 499 B |
|
|
@ -40,9 +40,9 @@ int main(int argc, char *argv[])
|
||||||
QStringLiteral(PLASMA_MOBILE_VERSION_STRING),
|
QStringLiteral(PLASMA_MOBILE_VERSION_STRING),
|
||||||
QStringLiteral(""),
|
QStringLiteral(""),
|
||||||
KAboutLicense::GPL,
|
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("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");
|
aboutData.setBugAddress("https://invent.kde.org/marcoa/shift-shell/-/issues");
|
||||||
KAboutData::setApplicationData(aboutData);
|
KAboutData::setApplicationData(aboutData);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,12 +3,12 @@
|
||||||
"KPlugin": {
|
"KPlugin": {
|
||||||
"Authors": [
|
"Authors": [
|
||||||
{
|
{
|
||||||
"Name": "SHIFT Contributors"
|
"Name": "Marco Allegretti"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"Description": "Shift window decoration",
|
"Description": "SHIFT window decoration",
|
||||||
"Id": "org.shift.decoration",
|
"Id": "org.shift.decoration",
|
||||||
"License": "GPL-2.0-or-later",
|
"License": "EUPL-1.2",
|
||||||
"Name": "Shift"
|
"Name": "SHIFT"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ widgetStyle=Breeze
|
||||||
|
|
||||||
[kdeglobals][General]
|
[kdeglobals][General]
|
||||||
ColorScheme=ShiftDark
|
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
|
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
|
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
|
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
|
# Set default cursor theme
|
||||||
[kcminputrc][Mouse]
|
[kcminputrc][Mouse]
|
||||||
cursorTheme=breeze_cursors
|
cursorTheme=shift-cursors
|
||||||
|
|
||||||
[plasmarc][Theme]
|
[plasmarc][Theme]
|
||||||
name=breeze-dark
|
name=shift-dark
|
||||||
|
|
||||||
[kwinrc][org.kde.kdecoration2]
|
[kwinrc][org.kde.kdecoration2]
|
||||||
library=org.kde.kwin.aurorae
|
library=org.kde.kwin.aurorae
|
||||||
theme=org.shift.decoration
|
theme=org.shift.decoration
|
||||||
|
|
||||||
[KSplash]
|
|
||||||
Theme=org.kde.Breeze
|
|
||||||
|
|
|
||||||
|
|
@ -138,7 +138,7 @@ Item {
|
||||||
|
|
||||||
ActionButton {
|
ActionButton {
|
||||||
iconSource: "system-reboot"
|
iconSource: "system-reboot"
|
||||||
text: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Restart")
|
text: i18nd("plasma_lookandfeel_org.shift.mobile", "Restart")
|
||||||
onClicked: {
|
onClicked: {
|
||||||
closeAnim.closeToBlack = true;
|
closeAnim.closeToBlack = true;
|
||||||
closeAnim.execute(root.rebootRequested);
|
closeAnim.execute(root.rebootRequested);
|
||||||
|
|
@ -147,7 +147,7 @@ Item {
|
||||||
|
|
||||||
ActionButton {
|
ActionButton {
|
||||||
iconSource: "system-shutdown"
|
iconSource: "system-shutdown"
|
||||||
text: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Shut Down")
|
text: i18nd("plasma_lookandfeel_org.shift.mobile", "Shut Down")
|
||||||
onClicked: {
|
onClicked: {
|
||||||
closeAnim.closeToBlack = true;
|
closeAnim.closeToBlack = true;
|
||||||
closeAnim.execute(root.haltRequested);
|
closeAnim.execute(root.haltRequested);
|
||||||
|
|
@ -156,7 +156,7 @@ Item {
|
||||||
|
|
||||||
ActionButton {
|
ActionButton {
|
||||||
iconSource: "system-log-out"
|
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
|
visible: ShellSettings.Settings.allowLogout
|
||||||
onClicked: {
|
onClicked: {
|
||||||
closeAnim.closeToBlack = true;
|
closeAnim.closeToBlack = true;
|
||||||
|
|
@ -172,7 +172,7 @@ Item {
|
||||||
horizontalCenter: parent.horizontalCenter
|
horizontalCenter: parent.horizontalCenter
|
||||||
}
|
}
|
||||||
iconSource: "dialog-cancel"
|
iconSource: "dialog-cancel"
|
||||||
text: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Cancel")
|
text: i18nd("plasma_lookandfeel_org.shift.mobile", "Cancel")
|
||||||
onClicked: {
|
onClicked: {
|
||||||
closeAnim.closeToBlack = false;
|
closeAnim.closeToBlack = false;
|
||||||
closeAnim.execute(root.cancelRequested);
|
closeAnim.execute(root.cancelRequested);
|
||||||
|
|
|
||||||
98
lookandfeel/contents/splash/Splash.qml
Normal file
98
lookandfeel/contents/splash/Splash.qml
Normal file
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -3,14 +3,14 @@
|
||||||
"KPlugin": {
|
"KPlugin": {
|
||||||
"Authors": [
|
"Authors": [
|
||||||
{
|
{
|
||||||
"Name": "SHIFT Contributors"
|
"Name": "Marco Allegretti"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"Category": "",
|
"Category": "",
|
||||||
"Description": "SHIFT for mobile and convergent devices",
|
"Description": "SHIFT shell appearance for mobile and convergent devices",
|
||||||
"Id": "org.shift.mobile",
|
"Id": "org.shift.mobile",
|
||||||
"License": "GPLv2+",
|
"License": "GPLv2+",
|
||||||
"Name": "SHIFT Mobile"
|
"Name": "SHIFT"
|
||||||
},
|
},
|
||||||
"Keywords": "Phone;Mobile;Desktop;Workspace;Appearance;Look and Feel;Logout;Lock;Suspend;Shutdown;Hibernate;",
|
"Keywords": "Phone;Mobile;Desktop;Workspace;Appearance;Look and Feel;Logout;Lock;Suspend;Shutdown;Hibernate;",
|
||||||
"X-Plasma-APIVersion": "2"
|
"X-Plasma-APIVersion": "2"
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
<component>
|
<component>
|
||||||
<id>org.shift.mobile</id>
|
<id>org.shift.mobile</id>
|
||||||
<developer id="org.shift">
|
<developer id="org.shift">
|
||||||
<name translate="no">SHIFT Contributors</name>
|
<name translate="no">Marco Allegretti</name>
|
||||||
</developer>
|
</developer>
|
||||||
<metadata_license>CC0-1.0</metadata_license>
|
<metadata_license>CC0-1.0</metadata_license>
|
||||||
<project_license>GPL-2.0-or-later</project_license>
|
<project_license>GPL-2.0-or-later</project_license>
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
"Name": "Devin Lin"
|
"Name": "Devin Lin"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Name": "SHIFT Contributors"
|
"Name": "Marco Allegretti"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"Category": "",
|
"Category": "",
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,11 @@ if(BASH_EXECUTABLE)
|
||||||
COMMAND ${BASH_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/check-shift-product-metadata.sh
|
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(
|
add_test(
|
||||||
NAME shift-initialstart-metadata
|
NAME shift-initialstart-metadata
|
||||||
COMMAND ${BASH_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/check-shift-initialstart-metadata.sh
|
COMMAND ${BASH_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/check-shift-initialstart-metadata.sh
|
||||||
|
|
|
||||||
158
tests/check-shift-theme-identity.sh
Normal file
158
tests/check-shift-theme-identity.sh
Normal file
|
|
@ -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"
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# SPDX-FileCopyrightText: 2026 SHIFT Contributors
|
# SPDX-FileCopyrightText: 2026 Marco Allegretti
|
||||||
# SPDX-License-Identifier: EUPL-1.2
|
# SPDX-License-Identifier: EUPL-1.2
|
||||||
|
|
||||||
install(DIRECTORY SHIFT
|
install(DIRECTORY SHIFT
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,6 @@
|
||||||
],
|
],
|
||||||
"Id": "SHIFT",
|
"Id": "SHIFT",
|
||||||
"License": "EUPL-1.2",
|
"License": "EUPL-1.2",
|
||||||
"Name": "SHIFT Light / SHIFT Dark"
|
"Name": "SHIFT"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in a new issue