Added theme engine support and aur publish pipeline
Publish to AUR / publish (push) Failing after 40s

This commit is contained in:
Radu Macocian
2026-06-09 11:01:37 +02:00
parent 170a320564
commit dd33c2b4d9
5 changed files with 124 additions and 17 deletions
+65
View File
@@ -0,0 +1,65 @@
name: Publish to AUR
on:
push:
branches: [master]
jobs:
publish:
runs-on: ubuntu-latest
container:
image: archlinux:latest
defaults:
run:
shell: bash
steps:
- name: Install dependencies
run: |
pacman -Syu --noconfirm --needed git openssh pacman-contrib base-devel sudo
useradd -m builder
echo "builder ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
- name: Checkout source
run: |
git clone --depth 1 --branch ${{ gitea.ref_name }} \
http://gitea-actions:${{ gitea.token }}@gitea:3030/${{ gitea.repository }}.git .
- name: Configure SSH for AUR
env:
AUR_SSH_KEY: ${{ secrets.AUR_SSH_KEY }}
run: |
install -dm700 ~/.ssh
printf '%s\n' "$AUR_SSH_KEY" > ~/.ssh/aur
chmod 600 ~/.ssh/aur
ssh-keyscan aur.archlinux.org >> ~/.ssh/known_hosts 2>/dev/null
cat > ~/.ssh/config <<EOF
Host aur.archlinux.org
User aur
IdentityFile ~/.ssh/aur
IdentitiesOnly yes
EOF
chmod 600 ~/.ssh/config
- name: Clone AUR repository
run: git clone ssh://aur@aur.archlinux.org/omni-launcher.git /tmp/aur
- name: Regenerate .SRCINFO and copy files
run: |
cp PKGBUILD /tmp/aur/PKGBUILD
chown -R builder:builder /tmp/aur
sudo -u builder bash -c 'cd /tmp/aur && makepkg --printsrcinfo > .SRCINFO'
- name: Commit and push to AUR
run: |
cd /tmp/aur
git config user.name "${{ vars.AUR_GIT_NAME || 'Radu Macocian' }}"
git config user.email "${{ vars.AUR_GIT_EMAIL || 'radu@macocian.com' }}"
if git diff --quiet && git diff --cached --quiet; then
echo "No changes to publish."
exit 0
fi
PKGVER=$(awk -F= '/^pkgver=/{print $2}' PKGBUILD)
PKGREL=$(awk -F= '/^pkgrel=/{print $2}' PKGBUILD)
git add PKGBUILD .SRCINFO
git commit -m "Update to ${PKGVER}-${PKGREL}"
git push origin master
+1 -1
View File
@@ -1,6 +1,6 @@
# Maintainer: Radu Macocian <radu@macocian.com>
pkgname=omni-launcher
pkgver=0.0.1
pkgver=0.0.2
pkgrel=1
pkgdesc="Application launcher overlay built on Quickshell, with calculator, unit/currency conversion, unicode search and Giphy search"
arch=('any')
+15 -3
View File
@@ -44,7 +44,7 @@ bind = SUPER, SPACE, exec, omni-launcher-toggle
## Configuration
`~/.config/omni-launcher/config.json` — any missing key falls back to a built-in default:
`~/.config/omni-launcher/config.json` — any missing key falls back to a built-in default, so the file can be omitted entirely:
```json
{
@@ -52,7 +52,19 @@ bind = SUPER, SPACE, exec, omni-launcher-toggle
"fontSize": 16,
"giphyApiKey": "",
"panelWidth": 720,
"panelHeight": 520
"panelHeight": 520,
"padding": 5,
"spacing": 5,
"radius": 10,
"colors": {
"background": "#101010",
"foreground": "#e6e6e6",
"idle": "#a0a0a0",
"accent": "#5e9eff",
"overlayStrong": "#2b5f96",
"overlayWeak": "#202020",
"border": "#3a3a3a"
}
}
```
@@ -60,7 +72,7 @@ Changes take effect on restart (`omni-launcher`).
### Theming
The launcher reads `org.freedesktop.appearance` from `xdg-desktop-portal` for color-scheme and accent, and falls back to Qt's `SystemPalette` (qt6ct / KDE / qgnomeplatform) for everything else. No app-side config is required for theming.
The launcher reads `org.freedesktop.appearance` from `xdg-desktop-portal` for color-scheme and accent, and falls back to Qt's `SystemPalette` (qt6ct / KDE / qgnomeplatform) for everything else. Values under `colors` are optional overrides for users or theme managers that want a fixed palette.
## Dependencies
+22
View File
@@ -13,6 +13,16 @@ QtObject {
property string giphyApiKey: ""
property int panelWidth: 720
property int panelHeight: 520
property int padding: 5
property int spacing: 5
property int radius: 10
property string backgroundColor: ""
property string foregroundColor: ""
property string idleColor: ""
property string accentColor: ""
property string overlayStrongColor: ""
property string overlayWeakColor: ""
property string borderColor: ""
property bool loaded: false
@@ -22,6 +32,18 @@ QtObject {
if (typeof obj.giphyApiKey === "string") giphyApiKey = obj.giphyApiKey;
if (typeof obj.panelWidth === "number" && obj.panelWidth > 0) panelWidth = obj.panelWidth;
if (typeof obj.panelHeight === "number" && obj.panelHeight > 0) panelHeight = obj.panelHeight;
if (typeof obj.padding === "number" && obj.padding > 0) padding = obj.padding;
if (typeof obj.spacing === "number" && obj.spacing > 0) spacing = obj.spacing;
if (typeof obj.radius === "number" && obj.radius >= 0) radius = obj.radius;
const colors = obj.colors || {};
if (typeof colors.background === "string" && colors.background.length > 0) backgroundColor = colors.background;
if (typeof colors.foreground === "string" && colors.foreground.length > 0) foregroundColor = colors.foreground;
if (typeof colors.idle === "string" && colors.idle.length > 0) idleColor = colors.idle;
if (typeof colors.accent === "string" && colors.accent.length > 0) accentColor = colors.accent;
if (typeof colors.overlayStrong === "string" && colors.overlayStrong.length > 0) overlayStrongColor = colors.overlayStrong;
if (typeof colors.overlayWeak === "string" && colors.overlayWeak.length > 0) overlayWeakColor = colors.overlayWeak;
if (typeof colors.border === "string" && colors.border.length > 0) borderColor = colors.border;
}
property Process _loader: Process {
+21 -13
View File
@@ -13,7 +13,7 @@ QtObject {
// Portal-reported state. Defaults match "prefer dark, neutral accent".
// 0 = no preference, 1 = dark, 2 = light (per xdg-desktop-portal spec).
property int colorScheme: 1
property color accent: "#5e9eff"
property color portalAccent: "#5e9eff"
property bool _portalLoaded: false
readonly property bool dark: colorScheme !== 2
@@ -22,22 +22,30 @@ QtObject {
// background — mixing portal color-scheme with SystemPalette text led to
// unreadable combinations (dark bg + dark text) when the Qt platform
// theme disagrees with the portal.
readonly property color foreground: dark ? "#e6e6e6" : "#1a1a1a"
readonly property color idle: dark ? Qt.rgba(1, 1, 1, 0.55)
: Qt.rgba(0, 0, 0, 0.55)
readonly property color opaque_background: dark
readonly property color accent: Config.accentColor.length > 0
? Config.accentColor : portalAccent
readonly property color foreground: Config.foregroundColor.length > 0
? Config.foregroundColor : (dark ? "#e6e6e6" : "#1a1a1a")
readonly property color idle: Config.idleColor.length > 0
? Config.idleColor : (dark ? Qt.rgba(1, 1, 1, 0.55)
: Qt.rgba(0, 0, 0, 0.55))
readonly property color opaque_background: Config.backgroundColor.length > 0
? Config.backgroundColor : (dark
? Qt.rgba(0, 0, 0, 0.8)
: Qt.rgba(1, 1, 1, 0.9)
readonly property color overlay_strong: dark ? Qt.rgba(1, 1, 1, 0.14) : Qt.rgba(0, 0, 0, 0.10)
readonly property color overlay_weak: dark ? Qt.rgba(1, 1, 1, 0.06) : Qt.rgba(0, 0, 0, 0.04)
readonly property color border_subtle: dark ? Qt.rgba(1, 1, 1, 0.10) : Qt.rgba(0, 0, 0, 0.10)
: Qt.rgba(1, 1, 1, 0.9))
readonly property color overlay_strong: Config.overlayStrongColor.length > 0
? Config.overlayStrongColor : (dark ? Qt.rgba(1, 1, 1, 0.14) : Qt.rgba(0, 0, 0, 0.10))
readonly property color overlay_weak: Config.overlayWeakColor.length > 0
? Config.overlayWeakColor : (dark ? Qt.rgba(1, 1, 1, 0.06) : Qt.rgba(0, 0, 0, 0.04))
readonly property color border_subtle: Config.borderColor.length > 0
? Config.borderColor : (dark ? Qt.rgba(1, 1, 1, 0.10) : Qt.rgba(0, 0, 0, 0.10))
readonly property string fontFamily: Config.fontFamily
readonly property int fontSize: Config.fontSize
readonly property int padding: 5
readonly property int spacing: 5
readonly property int radius: 10
readonly property int padding: Config.padding
readonly property int spacing: Config.spacing
readonly property int radius: Config.radius
// Read the portal once at startup. The portal also emits a SettingChanged
// signal we could subscribe to, but a one-shot read keeps us out of a
@@ -60,7 +68,7 @@ QtObject {
const ac = text.match(/'accent-color':\s*<\(([-\d.eE+]+),\s*([-\d.eE+]+),\s*([-\d.eE+]+)\)>/);
if (ac) {
const r = parseFloat(ac[1]), g = parseFloat(ac[2]), b = parseFloat(ac[3]);
if (r >= 0 && g >= 0 && b >= 0) root.accent = Qt.rgba(r, g, b, 1);
if (r >= 0 && g >= 0 && b >= 0) root.portalAccent = Qt.rgba(r, g, b, 1);
}
root._portalLoaded = true;
}