feat: add plasma theme, SDDM theme, wallpaper, Qt color configs, start menu icon; remove memes

This commit represents a major branding push for Antergos NeXT, adding
complete Plasma theming, fixing the SDDM login screen, expanding the
wallpaper collection, and removing inappropriate content.

NEW PACKAGES:

- antergos-plasma-theme: Complete KDE Plasma desktop theme suite
  (pkgrel=1). Contains:
  * antergos-dark/colors — full color scheme with Antergos brand blue
    (#2EA3F2) accent on dark (#232629) background, ported from Artix
    dark theme and fully rebranded
  * antergos-dark/metadata.json — theme metadata
  * antergos-dark/plasmarc — configures default wallpaper
    (antergos-wallpaper), contrast effect, and adaptive transparency
  * antergos-dark/icons/start.svgz — custom start menu button icon
    using the Antergos logo (blue circle + geometric mark). KDE Plasma
    loads the start menu icon from the theme's own icons/ directory
    (the 'default' theme provides fallbacks like start.svgz for all
    themes; any theme can override by placing its own start.svgz in its
    icons/ dir). This is the canonical way to set a distro-specific
    start button icon — NOT via the Freedesktop icon theme
    (start-here-*) or plasmarc [Icons] settings, which only affect
    system tray icons and KCM previews respectively. Source SVG from
    EliverLara/candy-icons (GPL-3.0).
  * antergosdark.desktop/ — look-and-feel package with:
    - contents/defaults — presets for color scheme, widget style, icons
    - contents/layouts/org.kde.plasma.desktop-layout.js — default panel
      layout with kickoff, pager, task manager, system tray, clock
    - contents/splash/Splash.qml — text-based splash screen showing
      'Antergos' + 'NeXT' with progress bar (no external image deps)

- antergos-sddm-theme: Rebuilt SDDM login manager theme from scratch
  (pkgrel=1). Fixes critical layout bugs in the Artix-origin theme:
  * Session and layout combo boxes moved to a separate bottom bar
    (anchored to parent.bottom) so they don't overlap the login card
  * Dropdown lists open UPWARD (anchors.bottom: container.top) to
    prevent overlapping other controls and the login form
  * Arrow icons (angle-up.png) flipped to point correct direction for
    upward-opening dropdowns
  * Built-in background.png (1920x1080 dark gradient) eliminates
    dependency on external wallpaper packages at SDDM time
  * Fixed deprecated QML Connections syntax
    (onCurrentLayoutChanged -> function onCurrentLayoutChanged())
  * theme.conf references local background.png
  * metadata.desktop with Antergos NeXT branding
  * Components: custom ComboBox.qml (upward dropdown with transparent
    arrow default), LayoutBox.qml (keyboard layout selector), qmldir
    (module definition)

UPDATED PACKAGES:

- antergos-next-desktop-settings (pkgrel 1->2):
  * Added Antergos-dark-qt5.conf — Qt5ct color scheme config so Qt5
    applications inherit the dark theme colors
  * Added Antergos-dark-qt6.conf — Qt6ct color scheme config for Qt6
    application compatibility
  * Enhanced kdeglobals with complete color sections:
    - [General]: ColorScheme=AntergosDark, font=Roboto,11,-1,5,50,0,0
    - [Icons]: Theme=breeze-dark
    - [KDE]: widgetStyle=Breeze, LookAndFeelPackage=antergosdark.desktop
    - [Colors:Button], [Colors:Selection], [Colors:View],
      [Colors:Window] with full fg/bg/alt/decoration values
  * Updated plasma-override to reference antergos-dark theme

- antergos-wallpapers (pkgrel 5->6):
  * Added antergos-darkest-hour.jpg — 'Darkest Hour' wallpaper from KDE
    Plasma 5.14 collection (GPL-2+, artist Risto Saukonpaa). Dark blue
    moody landscape at 2560x1600 with ~30% average brightness, ideal
    for dark-themed desktops. Installed as a separate KDE wallpaper
    entry (antergos-darkest-hour) with its own metadata.desktop so
    users can select it alongside the original brand wallpaper.
  * Also installed to /usr/share/backgrounds/antergos/ and
    /usr/share/antergos/backgrounds/ for non-KDE wallpaper pickers.

- packages.yaml: Added entries for antergos-plasma-theme and
  antergos-sddm-theme. Sorted alphabetically.

REMOVED PACKAGES:

- antergos-next-memes: Removed entirely. Contained
  'its-raining-tacos.opus' — an audio meme file (It's Raining Tacos)
  inappropriate for a serious distribution. Antergos NeXT aims to be a
  professional-quality EndeavourOS/Artix derivative, not a joke distro.
This commit is contained in:
2026-07-04 21:04:40 +02:00
parent adfd1b4927
commit 85c8749c9c
30 changed files with 1128 additions and 36 deletions
+240
View File
@@ -0,0 +1,240 @@
import QtQuick 2.14
import SddmComponents 2.0
import 'components'
Rectangle {
id: container
width: 640
height: 480
LayoutMirroring.enabled: Qt.locale().textDirection == Qt.RightToLeft
LayoutMirroring.childrenInherit: true
TextConstants { id: textConstants }
Connections {
target: sddm
function onLoginSucceeded() {
errorMessage.color = "#2EA3F2"
errorMessage.text = textConstants.loginSucceeded
}
function onLoginFailed() {
password.text = ""
errorMessage.color = "#ed1515"
errorMessage.text = textConstants.loginFailed
}
}
Background {
anchors.fill: parent
source: config.background
fillMode: Image.PreserveAspectCrop
onStatusChanged: {
if (status == Image.Error && source != config.defaultBackground) {
source = config.defaultBackground
}
}
}
Rectangle {
anchors.fill: parent
gradient: Gradient {
GradientStop { position: 0.0; color: "#661a1c21" }
GradientStop { position: 0.5; color: "#aa1a1c21" }
GradientStop { position: 1.0; color: "#ee0d0e12" }
}
Rectangle {
id: loginCard
anchors.centerIn: parent
anchors.verticalCenterOffset: -24
width: 360
height: cardColumn.implicitHeight + 40
radius: 16
color: "#232629"
border.color: "#3f4347"
border.width: 1
Column {
id: cardColumn
anchors.horizontalCenter: parent.horizontalCenter
anchors.top: parent.top
anchors.topMargin: 28
spacing: 16
width: parent.width - 40
Text {
text: "Antergos"
color: "#2EA3F2"
font.family: "Roboto"
font.weight: Font.Light
font.pointSize: 34
horizontalAlignment: Text.AlignHCenter
anchors.horizontalCenter: parent.horizontalCenter
}
Column {
width: parent.width
spacing: 10
TextBox {
id: name
width: parent.width
height: 40
text: userModel.lastUser
font.pixelSize: 14
color: "#1d1f21"
textColor: "#eff0f1"
focusColor: "#2EA3F2"
KeyNavigation.backtab: rebootButton
KeyNavigation.tab: password
Keys.onPressed: {
if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) {
sddm.login(name.text, password.text, sessionCombo.index)
event.accepted = true
}
}
}
PasswordBox {
id: password
width: parent.width
height: 40
font.pixelSize: 14
color: "#1d1f21"
textColor: "#eff0f1"
focusColor: "#2EA3F2"
KeyNavigation.backtab: name
KeyNavigation.tab: loginButton
Keys.onPressed: {
if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) {
sddm.login(name.text, password.text, sessionCombo.index)
event.accepted = true
}
}
}
}
Text {
id: errorMessage
width: parent.width
height: errorMessage.text ? 16 : 0
font.pixelSize: 12
horizontalAlignment: Text.AlignHCenter
visible: errorMessage.text !== ""
}
Button {
id: loginButton
anchors.horizontalCenter: parent.horizontalCenter
text: textConstants.login
color: "#2EA3F2"
textColor: "#ffffff"
activeColor: "#268acc"
pressedColor: "#1a6da0"
KeyNavigation.backtab: password
KeyNavigation.tab: shutdownButton
Keys.onPressed: {
if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) {
sddm.login(name.text, password.text, sessionCombo.index)
event.accepted = true
}
}
onClicked: sddm.login(name.text, password.text, sessionCombo.index)
}
Row {
spacing: 8
anchors.horizontalCenter: parent.horizontalCenter
Button {
id: shutdownButton
text: textConstants.shutdown
color: "#3f4347"
textColor: "#eff0f1"
activeColor: "#ed1515"
KeyNavigation.backtab: loginButton
KeyNavigation.tab: rebootButton
onClicked: sddm.powerOff()
}
Button {
id: rebootButton
text: textConstants.reboot
color: "#3f4347"
textColor: "#eff0f1"
activeColor: "#2EA3F2"
KeyNavigation.backtab: shutdownButton
KeyNavigation.tab: sessionCombo
onClicked: sddm.reboot()
}
}
}
}
Rectangle {
anchors {
bottom: parent.bottom
bottomMargin: 32
horizontalCenter: parent.horizontalCenter
}
width: 360
height: 44
radius: 12
color: "#1a1c21"
border.color: "#3f4347"
border.width: 1
Row {
anchors.centerIn: parent
spacing: 16
ComboBox {
id: sessionCombo
width: 140
height: 32
model: sessionModel
index: sessionModel.lastIndex
color: "#31363b"
textColor: "#eff0f1"
menuColor: "#232629"
focusColor: "#2EA3F2"
hoverColor: "#3f4347"
borderColor: "#3f4347"
arrowIcon: "angle-up.png"
arrowColor: "#8a8f9c"
font.pixelSize: 12
KeyNavigation.backtab: rebootButton
KeyNavigation.tab: layoutCombo
}
LayoutBox {
id: layoutCombo
width: 110
height: 32
color: "#31363b"
textColor: "#eff0f1"
hoverColor: "#3f4347"
menuColor: "#232629"
borderColor: "#3f4347"
focusColor: "#2EA3F2"
arrowIcon: "angle-up.png"
arrowColor: "#8a8f9c"
font.pixelSize: 12
KeyNavigation.backtab: sessionCombo
KeyNavigation.tab: name
}
}
}
}
Component.onCompleted: {
if (name.text == "")
name.focus = true
else
password.focus = true
}
}
+34
View File
@@ -0,0 +1,34 @@
# Maintainer: Celestia Ludenberg <ash8820@proton.me>
pkgname=antergos-sddm-theme
pkgver=1
pkgrel=1
pkgdesc='Antergos NeXT SDDM theme'
arch=('any')
url="https://github.com/Antergos-NeXT/antergos-packages"
license=('GPL')
depends=('sddm' 'qt5-declarative' 'antergos-wallpapers')
source=(
"Main.qml"
"metadata.desktop"
"theme.conf"
"angle-up.png"
"background.png"
"components/ComboBox.qml"
"components/LayoutBox.qml"
"components/qmldir"
)
sha256sums=('SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP')
package() {
install -dm755 "${pkgdir}/usr/share/sddm/themes/antergos"
install -dm755 "${pkgdir}/usr/share/sddm/themes/antergos/components"
install -m644 "${srcdir}/Main.qml" "${pkgdir}/usr/share/sddm/themes/antergos/"
install -m644 "${srcdir}/metadata.desktop" "${pkgdir}/usr/share/sddm/themes/antergos/"
install -m644 "${srcdir}/theme.conf" "${pkgdir}/usr/share/sddm/themes/antergos/"
install -m644 "${srcdir}/angle-up.png" "${pkgdir}/usr/share/sddm/themes/antergos/"
install -m644 "${srcdir}/background.png" "${pkgdir}/usr/share/sddm/themes/antergos/"
install -m644 "${srcdir}/components/ComboBox.qml" "${pkgdir}/usr/share/sddm/themes/antergos/components/"
install -m644 "${srcdir}/components/LayoutBox.qml" "${pkgdir}/usr/share/sddm/themes/antergos/components/"
install -m644 "${srcdir}/components/qmldir" "${pkgdir}/usr/share/sddm/themes/antergos/components/"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

@@ -0,0 +1,259 @@
/***************************************************************************
* Copyright (c) 2013 Abdurrahman AVCI <abdurrahmanavci@gmail.com>
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without restriction,
* including without limitation the rights to use, copy, modify, merge,
* publish, distribute, sublicense, and/or sell copies of the Software,
* and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
* OR OTHER DEALINGS IN THE SOFTWARE.
*
***************************************************************************/
import QtQuick 2.0
FocusScope {
id: container
width: 80; height: 30
property color color: "white"
property color borderColor: "#ababab"
property color focusColor: "#266294"
property color hoverColor: "#5692c4"
property color menuColor: "white"
property color textColor: "black"
property int borderWidth: 1
property font font
property alias model: listView.model
property int index: 0
property alias arrowColor: arrow.color
property alias arrowIcon: arrowIcon.source
property Component rowDelegate: defaultRowDelegate
signal valueChanged(int id)
Component {
id: defaultRowDelegate
Text {
anchors.fill: parent
anchors.margins: 3 + container.borderWidth + (LayoutMirroring.enabled ? arrow.width : 0)
verticalAlignment: Text.AlignVCenter
color: container.textColor
font: container.font
text: parent.modelItem.name
}
}
onFocusChanged: if (!container.activeFocus) close(false)
Rectangle {
id: main
anchors.fill: parent
color: container.color
border.color: container.borderColor
border.width: container.borderWidth
Behavior on border.color { ColorAnimation { duration: 100 } }
states: [
State {
name: "hover"; when: mouseArea.containsMouse
PropertyChanges { target: main; border.width: container.borderWidth; border.color: container.hoverColor }
},
State {
name: "focus"; when: container.activeFocus && !mouseArea.containsMouse
PropertyChanges { target: main; border.width: container.borderWidth; border.color: container.focusColor }
}
]
}
Loader {
id: topRow
anchors.fill: parent
focus: true
clip: true
sourceComponent: rowDelegate
property variant modelItem
}
Rectangle {
id: arrow
anchors.right: parent.right
width: 20 + 2*border.width; height: parent.height
color: "transparent"
border.color: main.border.color
border.width: main.border.width
Image {
id: arrowIcon
anchors.fill: parent
anchors.leftMargin: parent.border.width
anchors.rightMargin: parent.border.width
clip: true
smooth: true
fillMode: Image.PreserveAspectFit
}
}
MouseArea {
id: mouseArea
anchors.fill: container
cursorShape: Qt.PointingHandCursor
hoverEnabled: true
onEntered: if (main.state == "") main.state = "hover";
onExited: if (main.state == "hover") main.state = "";
onClicked: { container.focus = true; toggle() }
onWheel: {
if (wheel.angleDelta.y > 0)
listView.decrementCurrentIndex()
else
listView.incrementCurrentIndex()
}
}
Keys.onPressed: {
if (event.key === Qt.Key_Up) {
listView.decrementCurrentIndex()
} else if (event.key === Qt.Key_Down) {
if (event.modifiers !== Qt.AltModifier)
listView.incrementCurrentIndex()
else
toggle()
} else if (event.key === Qt.Key_Enter || event.key === Qt.Key_Return) {
close(true)
} else if (event.key === Qt.Key_Escape) {
close(false)
}
}
Rectangle {
id: dropDown
width: container.width; height: 0
anchors.bottom: container.top
anchors.bottomMargin: 0
color: container.menuColor
clip: true
Behavior on height { NumberAnimation { duration: 100 } }
Component {
id: myDelegate
Rectangle {
width: dropDown.width; height: container.height - 2*container.borderWidth
color: "transparent"
Loader {
id: loader
anchors.fill: parent
sourceComponent: rowDelegate
property variant modelItem: model
}
property variant modelItem: model
MouseArea {
id: delegateMouseArea
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
hoverEnabled: true
onEntered: listView.currentIndex = index
onClicked: close(true)
}
}
}
ListView {
id: listView
width: container.width; height: (container.height - 2*container.borderWidth) * count + container.borderWidth
delegate: myDelegate
highlight: Rectangle {
anchors.horizontalCenter: parent ? parent.horizontalCenter : undefined;
color: container.hoverColor
}
}
Rectangle {
anchors.fill: listView
anchors.bottomMargin: -container.borderWidth
color: "transparent"
clip: false
border.color: main.border.color
border.width: main.border.width
}
states: [
State {
name: "visible";
PropertyChanges { target: dropDown; height: (container.height - 2*container.borderWidth) * listView.count + container.borderWidth}
}
]
}
function toggle() {
if (dropDown.state === "visible")
close(false)
else
open()
}
function open() {
dropDown.state = "visible"
listView.currentIndex = container.index
}
function close(update) {
dropDown.state = ""
if (update) {
container.index = listView.currentIndex
topRow.modelItem = listView.currentItem.modelItem
valueChanged(listView.currentIndex)
}
}
Component.onCompleted: {
listView.currentIndex = container.index
if (listView.currentItem)
topRow.modelItem = listView.currentItem.modelItem
}
onIndexChanged: {
listView.currentIndex = container.index
if (listView.currentItem)
topRow.modelItem = listView.currentItem.modelItem
}
onModelChanged: {
listView.currentIndex = container.index
if (listView.currentItem)
topRow.modelItem = listView.currentItem.modelItem
}
}
@@ -0,0 +1,69 @@
/***************************************************************************
* Copyright (c) 2013 Nikita Mikhaylov <nslqqq@gmail.com>
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without restriction,
* including without limitation the rights to use, copy, modify, merge,
* publish, distribute, sublicense, and/or sell copies of the Software,
* and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
* OR OTHER DEALINGS IN THE SOFTWARE.
*
***************************************************************************/
import QtQuick 2.0
ComboBox {
id: combo
model: keyboard.layouts
index: keyboard.currentLayout
onValueChanged: keyboard.currentLayout = id
Connections {
target: keyboard
function onCurrentLayoutChanged() { combo.index = keyboard.currentLayout }
}
rowDelegate: Rectangle {
color: "transparent"
Image {
id: img
source: "/usr/share/sddm/flags/%1.png".arg(modelItem ? modelItem.modelData.shortName : "zz")
anchors.margins: 4
fillMode: Image.PreserveAspectFit
anchors.left: parent.left
anchors.top: parent.top
anchors.bottom: parent.bottom
}
Text {
anchors.margins: 4
anchors.left: img.right
anchors.top: parent.top
anchors.bottom: parent.bottom
color: '#eff0f1'
verticalAlignment: Text.AlignVCenter
text: modelItem ? modelItem.modelData.shortName : "zz"
font.pixelSize: 14
}
}
}
@@ -0,0 +1,4 @@
module SddmComponents
LayoutBox 2.0 LayoutBox.qml
ComboBox 2.0 ComboBox.qml
@@ -0,0 +1,12 @@
[SddmGreeterTheme]
Name=Antergos
Description=Antergos NeXT SDDM Theme
Author=Celestia Ludenberg
Type=sddm-theme
Version=1.0
Website=https://github.com/Antergos-NeXT
Email=ash8820@proton.me
MainScript=Main.qml
ConfigFile=theme.conf
Theme-Id=antergos
Theme-API=2.0
+2
View File
@@ -0,0 +1,2 @@
[General]
background=background.png