Merge remote-tracking branch 'upstream/master' into spark/aarch64-settings-boot-dropins

# Conflicts:
#	.github/workflows/test.yml
This commit is contained in:
Jim Martin committed 2026-09-22 18:35:30 -05:00
commit 19976635bc
145 files changed
+5560 -158

No files matched your search

+4 -4
View File
@@ -1,6 +1,6 @@
# Maintainer: Bjarne Øverli <bjarne@oever.li>
pkgname=aether
pkgver=4.29.8
pkgver=4.30.0
pkgrel=1
pkgdesc='Desktop theming application - extract colors from wallpapers and apply cohesive themes'
arch=('x86_64' 'aarch64')
@@ -10,9 +10,9 @@ depends=('webkit2gtk-4.1' 'gtk3')
source=("aether-${pkgver}.tar.gz::https://github.com/omacom/aether/archive/refs/tags/v${pkgver}.tar.gz")
source_x86_64=("aether-linux-amd64-${pkgver}::https://github.com/omacom/aether/releases/download/v${pkgver}/aether-linux-amd64")
source_aarch64=("aether-linux-arm64-${pkgver}::https://github.com/omacom/aether/releases/download/v${pkgver}/aether-linux-arm64")
sha256sums=('b83e0eeb1332b4ed655389a051d5b9b14a3e109968b7f278005e52c5e69a1e9c')
sha256sums_x86_64=('d3d2d07b32da7a495221ed271ee66f4a1e344c91dcec9b267ec0a74ab6e36462')
sha256sums_aarch64=('ffcfd23d0375a3f0c0ce014821cc5e1670f2e061c35e991340e75352dac9b731')
sha256sums=('f67c8d2c6f27f67a755bc279ece5ddb194f1bb165648280b9a7be86904d36ff5')
sha256sums_x86_64=('75bda600ddd3ecab3338de5c0c5d5e2c9f08cfc0c465b63f8e6cb9c5cb60d68e')
sha256sums_aarch64=('a91d800736def74d86e19d8acbecc4bda3d7c3e64fb95273f809707104c3a5bc')
noextract=("aether-linux-amd64-${pkgver}" "aether-linux-arm64-${pkgver}")
package() {
@@ -0,0 +1,17 @@
{
"source": "local",
"release_ring": "fast",
"origin": {
"aur": "bambustudio-bin",
"commit": "b962c12d14873f94669e0e256a444f957b1843cd"
},
"upstream": {
"watch": {
"regex": "https://api.github.com/repos/bambulab/BambuStudio/releases/latest",
"pattern": "\"name\"\\s*:\\s*\"BambuStudio_ubuntu24\\.04-v(?P<version>[0-9]+(?:\\.[0-9]+)*)-(?P<build>[0-9]+)\\.AppImage\"",
"variables": {
"_build": "{build}"
}
}
}
}
@@ -0,0 +1,12 @@
[Desktop Entry]
Name=Bambu Studio
GenericName=3D Printing Software
Comment=Slicer for Bambu Lab and other 3D printers
Exec=/usr/bin/bambu-studio %U
Icon=BambuStudio
Terminal=false
Type=Application
Categories=Graphics;3DGraphics;Engineering;
MimeType=x-scheme-handler/bambustudio;x-scheme-handler/bambustudioopen;model/stl;model/3mf;application/vnd.ms-3mfdocument;application/prs.wavefront-obj;application/x-amf;
Keywords=3D;Printing;Slicer;gcode;stl;3mf;
StartupWMClass=bambu-studio
+48
View File
@@ -0,0 +1,48 @@
# Maintainer: goll <adrian.goll+aur[at]gmail>
# Contributor: George Woodall <georgewoodall82@gmail.com>
pkgname=bambustudio-bin
pkgver=02.08.02.61
pkgrel=1
pkgdesc="PC Software for BambuLab's 3D printers"
arch=("x86_64")
url="https://github.com/bambulab/BambuStudio"
license=('AGPL-3.0-only')
conflicts=('bambustudio' 'bambustudio-git')
depends=('cairo' 'dbus' 'fontconfig' 'gcc-libs' 'glib2' 'glibc'
'gst-libav' 'gst-plugins-base-libs' 'gstreamer' 'gtk3' 'libglvnd'
'libx11' 'mesa' 'pango' 'wayland' 'webkit2gtk-4.1')
makedepends=('7zip')
options=('!strip' '!debug')
# The upstream watch updates the timestamp together with pkgver.
_build=20260820225108
source=("bambustudio-${pkgver}.AppImage::https://github.com/bambulab/BambuStudio/releases/download/v${pkgver}/BambuStudio_ubuntu24.04-v${pkgver}-${_build}.AppImage"
"BambuStudio.desktop"
"bambu-studio")
noextract=("bambustudio-${pkgver}.AppImage")
sha256sums=(
'd501b103fac5424513ec0e8d6bc145fb30719de2c7d94d7320d723740c81a7fd'
'f10718a8b201cad64800746fe8167ccc032c545d05f7ad8caa99eb5fb975f2a1'
'a3a5c8f6a8b287e42b93957e9602621923c766e0b6a3f10c14eca10b023b15f2'
)
prepare() {
# Read the embedded SquashFS without executing or modifying the AppImage.
rm -rf "$srcdir/squashfs-root"
7z x "$srcdir/bambustudio-${pkgver}.AppImage" -o"$srcdir/squashfs-root" >/dev/null
}
package() {
cd "$srcdir/squashfs-root"
install -Dm755 AppRun "$pkgdir/opt/$pkgname/AppRun"
cp -a bin resources "$pkgdir/opt/$pkgname/"
local icon size
for icon in usr/share/icons/hicolor/*/apps/BambuStudio.png; do
size="${icon#usr/share/icons/hicolor/}"
install -Dm644 "$icon" "$pkgdir/usr/share/icons/hicolor/$size"
done
install -Dm755 "$srcdir/bambu-studio" "$pkgdir/usr/bin/bambu-studio"
install -Dm644 "$srcdir/BambuStudio.desktop" \
"$pkgdir/usr/share/applications/BambuStudio.desktop"
}
+2
View File
@@ -0,0 +1,2 @@
#!/bin/bash
exec "/opt/bambustudio-bin/AppRun" "$@"
+3 -3
View File
@@ -4,7 +4,7 @@
# Automation repository: https://github.com/fabifont/claude-code-aur
pkgname=claude-code
pkgver=2.1.273
pkgver=2.1.278
pkgrel=1
pkgdesc="An agentic coding tool that lives in your terminal"
arch=('x86_64' 'aarch64')
@@ -29,8 +29,8 @@ source_x86_64=("claude-${pkgver}-x86_64::https://downloads.claude.ai/claude-code
source_aarch64=("claude-${pkgver}-aarch64::https://downloads.claude.ai/claude-code-releases/${pkgver}/linux-arm64/claude")
sha256sums=('SKIP')
sha256sums_x86_64=('6c752e2cc7c110c9df15f26d8d134d438c5ae95dbd610efc1a308bf7f9c5f6c1')
sha256sums_aarch64=('103cfab4d6ae898b6af692336fb662ffcc607075cc6408892bd350b3f549ebee')
sha256sums_x86_64=('5c4735937844e84f8a93306e841a5b0e12252909b07870f789b190468da147ab')
sha256sums_aarch64=('7de6cab134e48321148e30182c98614118e8f4666819412bead45865190b34ed')
package() {
install -Dm755 "${srcdir}/claude-${pkgver}-${CARCH}" "${pkgdir}/opt/claude-code/bin/claude"
+3 -3
View File
@@ -6,7 +6,7 @@
# repository's package index.
pkgname=claude-desktop
pkgver=2.110.0
pkgver=2.2553.1
pkgrel=1
pkgdesc="Official Claude desktop app with Claude Code"
arch=('x86_64' 'aarch64')
@@ -63,8 +63,8 @@ source_x86_64=("${_deb_x86_64}::${_pool}/${_deb_x86_64}")
source_aarch64=("${_deb_aarch64}::${_pool}/${_deb_aarch64}")
noextract=("${_deb_x86_64}" "${_deb_aarch64}")
sha256sums=('edfdbc63b65891ef7c481b07086c7e630fc102c042b6ed65331a52fcaf72b14a')
sha256sums_x86_64=('f44cb8b52f6e9171ac2e67cbcc8070c4974a2f0a9b9f141b430b32b4ff541109')
sha256sums_aarch64=('de9f24034f33dcadc53bedee92da6604e2c9268497ebff5447fedc092c884e71')
sha256sums_x86_64=('6700fdd84e77a6b8c93912c2f69eb5d1e40fa99bcd9d37f438f809ef2a6fe6f8')
sha256sums_aarch64=('0003a6f9605a210f03c38670d62cd59c71153c2702aa4427e4cabe2e2e5f3390')
package() {
cd "${srcdir}"
+5 -5
View File
@@ -3,7 +3,7 @@
# Maintainer: caarlos0 <carlos@charm.sh>
pkgname='crush-bin'
pkgver=0.95.0
pkgver=0.96.0
pkgrel=1
pkgdesc='A powerful terminal-based AI assistant for developers, providing intelligent coding assistance directly in your terminal.'
url='https://charm.sh/crush'
@@ -13,16 +13,16 @@ provides=('crush')
conflicts=('crush')
source_aarch64=("${pkgname}_${pkgver}_aarch64.tar.gz::https://github.com/charmbracelet/crush/releases/download/v${pkgver}/crush_${pkgver}_Linux_arm64.tar.gz")
sha256sums_aarch64=('b42291307abe5572afb972fba9b8780f63a2058f37fb0dc61ab4c7b435314a8a')
sha256sums_aarch64=('667062a39d499506b0fe151148f8d7a1c5cb5722902080d44bb3dd2ddafbf5c1')
source_armv7h=("${pkgname}_${pkgver}_armv7h.tar.gz::https://github.com/charmbracelet/crush/releases/download/v${pkgver}/crush_${pkgver}_Linux_armv7.tar.gz")
sha256sums_armv7h=('756363804b6475ab6bf811f175a93766f47372beddb6e4a7b6e365ecba3f90ae')
sha256sums_armv7h=('1de4c1ccb237743e4debb8c302df612fcef5c9b3b5378f5b65c8c6f8bc15cbfa')
source_i686=("${pkgname}_${pkgver}_i686.tar.gz::https://github.com/charmbracelet/crush/releases/download/v${pkgver}/crush_${pkgver}_Linux_i386.tar.gz")
sha256sums_i686=('ce7b0dec1f1d9aa5a6e339f04e835bc6b3a335caf816dcb6c83a2f808d9fcd3b')
sha256sums_i686=('4ec66431565de5721afb7afdd99e45ff6bc9c7e667bd18d9696ea7c5622e158d')
source_x86_64=("${pkgname}_${pkgver}_x86_64.tar.gz::https://github.com/charmbracelet/crush/releases/download/v${pkgver}/crush_${pkgver}_Linux_x86_64.tar.gz")
sha256sums_x86_64=('edef832ff1fc03e420a0410b9653547feb816bda7e0458589434ea4164210f5e')
sha256sums_x86_64=('5b33303a404acacf761c027e9fa9e69d4d2dd050c2690abe40877c49574b7475')
package() {
case "$CARCH" in
+3 -3
View File
@@ -18,7 +18,7 @@
# binary to point at pm.sh, a stand-in that declines and names pacman instead.
pkgname=cua-driver-bin
pkgver=0.28.1
pkgver=0.28.2
pkgrel=1
pkgdesc="Computer-use driver for native GUI apps: accessibility-tree snapshots and input injection"
arch=('x86_64' 'aarch64')
@@ -46,8 +46,8 @@ source_x86_64=("https://github.com/trycua/cua/releases/download/cua-driver-rs-v$
source_aarch64=("https://github.com/trycua/cua/releases/download/cua-driver-rs-v${pkgver}/cua-driver-rs-${pkgver}-linux-arm64.tar.gz")
sha256sums=('c0779290c1d4783169aa3dbfb55feb505e563ef8a004bbf55298ceffcfbda8d9'
'c76e251c3ed424200eac52bec35ba534336307fabd83a175ab0b47e2084ab0d8')
sha256sums_x86_64=('a068b6e477893b77ced74bceccf7db7483cf140e8d54150ce5849b6252b90bcf')
sha256sums_aarch64=('a863951ef0699fd25091adb87bd114d69709b887fdfc059e795aca49ef8ac19c')
sha256sums_x86_64=('8f3e5b669e2bcd98d0eecc64f40640aac77f358b6332a06abc6ee79991620f7d')
sha256sums_aarch64=('cadd7e6b757c3ce50f2b5f6e273c154ea48450fb5fcaff744209b382915eddf5')
case "${CARCH}" in
x86_64) _platform="linux-x86_64" ;;
+18 -17
View File
@@ -4,18 +4,18 @@
# shellcheck shell=bash disable=SC2034,SC2154
pkgname=cua-hyprland-plugin
pkgver=0.26.1
pkgrel=5
pkgdesc='Cua input candidate for reviewed profile omarchy-hyprland-0562r3-remaps'
pkgrel=6
pkgdesc='Cua input candidate for reviewed profile omarchy-hypr0562r3-aq0151-remaps'
arch=('x86_64')
url='https://github.com/trycua/cua'
license=('MIT')
depends=('hyprland=0.56.2-3' 'aquamarine=0.15.0-2' 'glibc=2.44+r24+g16be1518495f-1' 'hyprcursor=0.1.13-7' 'hyprgraphics=0.5.1-4' 'hyprlang=0.6.8-5' 'hyprutils=0.14.2-1' 'libgcc=16.2.1+r23+gd564253eb6c8-1' 'libstdc++=16.2.1+r23+gd564253eb6c8-1' 'libxkbcommon=1.13.2-1' 'wayland=1.26.0-1' 'python>=3.11' 'binutils')
depends=('hyprland=0.56.2-3' 'aquamarine=0.15.1-1' 'glibc=2.44+r24+g16be1518495f-1' 'hyprcursor=0.1.13-7' 'hyprgraphics=0.5.1-4' 'hyprlang=0.6.8-5' 'hyprutils=0.14.2-1' 'libgcc=16.2.1+r23+gd564253eb6c8-1' 'libstdc++=16.2.1+r23+gd564253eb6c8-1' 'libxkbcommon=1.13.2-1' 'wayland=1.26.0-1' 'python>=3.11' 'binutils')
makedepends=('cmake>=3.30' 'ninja' 'pkgconf' 'gcc' 'patch')
options=('!strip' '!debug' '!lto')
_stem='cua-hyprland-plugin-0.26.1-cc54254464c0c9aebfd6547fe7e4a0ceaf0456d7'
_archive_sha256='47bca9e018f32f4fcfe683f91c7475c60368f3b65d318cc35c1f2de88a4ee9ab'
_kit_sha256='089f447e11cacd8c2d3d6cd56528776417c51d353b9677c47c42bba1ef79c9f9'
_profile_sha256='fc3034649af98f7f81178ef575660143c249664b9ff5d0e1ccaf79d7580df17b'
_kit_sha256='819779b93655d603d9ebb0d33ea052326c3374674a1d473886106af25e0fffdd'
_profile_sha256='a2eade8b8195036be2c666788a1d28ac722403285a35987d92b3344e095f9a5e'
_verifier_sha256='480f649cbd35a0ddc7f49dc0a3a44785402c9e0ec9653b0f8ea4965d52d7f900'
_cxx="${CUA_RELEASE_CXX:-/usr/bin/g++}"
_download_name='cua-hyprland-plugin-0.26.1-cc54254464c0c9aebfd6547fe7e4a0ceaf0456d7-profile-omarchy-stable-20260910-kit-1.1.0-5dacea79a6a5927e59fca7b51e6c04e94fa45133ac1b8fb7f4e1f442d113eb9a-67f89ceb47edd973aa748820eadd02ddbfb3d3e4.tar.gz'
@@ -24,7 +24,7 @@ source=('https://github.com/trycua/cua/releases/download/cua-hyprland-kit-v1.1.0
'PROFILE.json')
noextract=("$_download_name")
sha256sums=('a89bfa7f6490f598719dfabdd2a5badc137e27b0764fd25e6a05e1f969433520'
'fc3034649af98f7f81178ef575660143c249664b9ff5d0e1ccaf79d7580df17b')
'a2eade8b8195036be2c666788a1d28ac722403285a35987d92b3344e095f9a5e')
# Downstream inputs are also checked explicitly when makepkg integrity is skipped.
declare -gA _downstream_sha256=(
@@ -71,33 +71,34 @@ with tarfile.open(fileobj=io.BytesIO(data), mode='r:gz') as contents:
require(digest(content) == expected[member.name], 'outer kit member checksum mismatch')
payload[member.name] = content
require(payload.keys() == expected.keys(), 'outer kit inventory mismatch')
# Arch's -3 package has the same compositor and all 498 headers/pkg-config
# files as -2. Derive a version-only profile with the original source/tooling
# and byte checks intact; record its own profile and kit provenance digests.
# Derive the reviewed Hyprland -3/Aquamarine 0.15.1 profile while preserving
# upstream source/tooling and compiler, compositor, header and runtime hashes.
profile_data = Path(profile_path).read_bytes()
require(digest(profile_data) == 'fc3034649af98f7f81178ef575660143c249664b9ff5d0e1ccaf79d7580df17b',
require(digest(profile_data) == 'a2eade8b8195036be2c666788a1d28ac722403285a35987d92b3344e095f9a5e',
'local profile checksum mismatch')
profile = json.loads(payload['PROFILE.json'])
profile.update(profile_id='omarchy-hyprland-0562r3-remaps', package_release=5)
profile.update(profile_id='omarchy-hypr0562r3-aq0151-remaps', package_release=6)
profile['hyprland']['package_version'] = '0.56.2-3'
require(json.loads(profile_data) == profile, 'local profile changes more than the reviewed package revision')
profile['runtime']['packages']['aquamarine'] = '0.15.1-1'
require(json.loads(profile_data) == profile, 'local profile changes more than the reviewed package versions')
payload['PROFILE.json'] = profile_data
provenance = json.loads(payload['KIT-PROVENANCE.json'])
provenance['profile_sha256'] = digest(profile_data)
payload['KIT-PROVENANCE.json'] = (json.dumps(provenance, sort_keys=True, indent=2) + '\n').encode()
recipe = payload['PKGBUILD'].decode()
for old, new in [('pkgrel=2\n', 'pkgrel=5\n'), ('omarchy-stable-20260910', profile['profile_id']),
for old, new in [('pkgrel=2\n', 'pkgrel=6\n'), ('omarchy-stable-20260910', profile['profile_id']),
('hyprland=0.56.2-2', 'hyprland=0.56.2-3'),
('aquamarine=0.15.0-2', 'aquamarine=0.15.1-1'),
('5dacea79a6a5927e59fca7b51e6c04e94fa45133ac1b8fb7f4e1f442d113eb9a', digest(profile_data)),
('7beb736adfd334eed52e84070177634269e3a09f8bb25971b38606933ff4c997', digest(payload['KIT-PROVENANCE.json']))]:
recipe = recipe.replace(old, new)
payload['PKGBUILD'] = recipe.encode()
payload['SHA256SUMS'] = ''.join(f'{digest(body)} {name}\n' for name, body in sorted(payload.items())
if name != 'SHA256SUMS').encode()
expected.update({'PROFILE.json': 'fc3034649af98f7f81178ef575660143c249664b9ff5d0e1ccaf79d7580df17b',
'KIT-PROVENANCE.json': '089f447e11cacd8c2d3d6cd56528776417c51d353b9677c47c42bba1ef79c9f9',
'PKGBUILD': '0cbf2cd34c3c5038a5ed51e6bf84acd81844e4c2bb08ad7203959201bba61da9',
'SHA256SUMS': 'd01b9e0be4c5bcf84cc2ecef9f11f44cedfc1ca5b31afbfcf52aa2efbd636a09'})
expected.update({'PROFILE.json': 'a2eade8b8195036be2c666788a1d28ac722403285a35987d92b3344e095f9a5e',
'KIT-PROVENANCE.json': '819779b93655d603d9ebb0d33ea052326c3374674a1d473886106af25e0fffdd',
'PKGBUILD': 'c3e4149eba3f7def10ef700b30b9d0abcea994e3dd32fb169014874a0b75687c',
'SHA256SUMS': 'd9057a9534f7a820ee04cbf5d60db567c5072fa96d1f71030a6a85b4bb7ce881'})
for name, content in payload.items():
require(digest(content) == expected[name], 'derived kit checksum mismatch: ' + name)
require(srcdir.is_dir() and not srcdir.is_symlink(), 'srcdir must be a real directory')
+3 -3
View File
@@ -12,12 +12,12 @@
"sha256": "da8fcacf347bcbed83edc40108c6e2298da095e22246bd764e9bb382786cebb2"
},
"kit_version": "1.1.0",
"package_release": 5,
"profile_id": "omarchy-hyprland-0562r3-remaps",
"package_release": 6,
"profile_id": "omarchy-hypr0562r3-aq0151-remaps",
"runtime": {
"basename": "libstdc++.so.6.0.36",
"packages": {
"aquamarine": "0.15.0-2",
"aquamarine": "0.15.1-1",
"glibc": "2.44+r24+g16be1518495f-1",
"hyprcursor": "0.1.13-7",
"hyprgraphics": "0.5.1-4",
+13 -10
View File
@@ -1,8 +1,8 @@
# Optional Cua Hyprland plugin
This package targets **Omarchy stable x86_64**, with Inkscape `1.4.4-6` and two independent background-input lanes. Package release `5` includes the Omarchy patch for independent agent keymaps, operation-specific foreground checks, and compatible Num Lock state; the upstream native qualification below covers the unpatched source, not this change. Cua's native qualification is recorded in [the kit's qualification record](https://github.com/trycua/cua/releases/download/cua-hyprland-kit-v1.1.0-omarchy-stable-20260910/QUALIFICATION.md) and [Cua #3698](https://github.com/trycua/cua/pull/3698). Omabot replay and Omarchy's merge decision are recorded in [omarchy-pkgs #346](https://github.com/omacom/omarchy-pkgs/pull/346). Scheduling the recipe does not expand the qualified stable target.
This package targets **Omarchy x86_64**, with Inkscape `1.4.4-6` and two independent background-input lanes. Release `6` is an edge candidate for Aquamarine `0.15.1-1`; it retains the keyboard-remap patch introduced in release `5`, which includes the Omarchy patch for independent agent keymaps, operation-specific foreground checks, and compatible Num Lock state; the upstream native qualification below covers the unpatched source, not this change. Cua's native qualification is recorded in [the kit's qualification record](https://github.com/trycua/cua/releases/download/cua-hyprland-kit-v1.1.0-omarchy-stable-20260910/QUALIFICATION.md) and [Cua #3698](https://github.com/trycua/cua/pull/3698). Omabot replay and Omarchy's merge decision are recorded in [omarchy-pkgs #346](https://github.com/omacom/omarchy-pkgs/pull/346). Scheduling the recipe does not expand the qualified stable target.
The plugin is optional. Cua Driver works independently, and installation does not load the plugin or enable input. The package follows the normal edge-to-RC-to-stable promotion path instead of the fast release ring. Its PKGBUILD limits builds to x86_64; only stable x86_64 is a qualified target.
The plugin is optional. Cua Driver works independently, and installation does not load the plugin or enable input. The package follows the normal edge-to-RC-to-stable promotion path instead of the fast release ring. Its PKGBUILD limits builds to x86_64. The upstream qualification covers the original stable profile; the updated Aquamarine profile needs its own Omabot validation before promotion.
## Source and build profile
@@ -12,26 +12,23 @@ It is not a repackaging of the unmodified 0.24.0 plugin.
The qualified upstream Driver pairing is `cua-driver-bin 0.27.0-1`, with input protocol v3. Driver 0.27.0 contains the bounded stale-geometry retry validated with the upstream module; its production plugin source is the base for the downstream patch used here. Discovery protocol v2 is separate. A newer Driver release is a changed pairing and requires affected replay before promotion.
Profile `omarchy-hyprland-0562r3-remaps`, kit tooling `1.1.0`, and package release `5` pin:
Profile `omarchy-hypr0562r3-aq0151-remaps`, kit tooling `1.1.0`, and package release `6` pin:
- Hyprland `0.56.2-3`, headers `0.56.2`, and measured executable/header hashes.
- GCC `16.2.1 20260810`, including compiler bytes and emitted ELF identity.
- Shared runtime `libstdc++.so.6.0.36`, its bytes, and exact ABI package versions.
- Shared runtime `libstdc++.so.6.0.36`, its bytes, and exact ABI package versions, including Aquamarine `0.15.1-1`.
This profile derives from Cua's `omarchy-stable-20260910` profile. Arch's
Hyprland `-3` package splits out `hyprpm` and changes package dependencies;
its compositor executable and all 498 header/pkg-config files are byte-identical
to `-2`. Both executables have SHA-256
`da8fcacf347bcbed83edc40108c6e2298da095e22246bd764e9bb382786cebb2`.
The checked-in `PROFILE.json` changes only the profile name, package release,
and exact Hyprland package version. Compiler, runtime, upstream source, executable,
and header identities remain unchanged; the separately recorded patch changes the build source. The download wrapper verifies the
The checked-in `PROFILE.json` changes only the profile name, package release, and exact Hyprland and Aquamarine package versions. Compiler, libstdc++ runtime, upstream source, compositor executable, and header identities remain unchanged; the separately recorded patch changes the build source. The download wrapper verifies the
original kit before deriving the updated profile, recipe, and provenance,
then verifies every derived member against its recorded digest.
The native qualification below was recorded with package release `2` and
Hyprland `-2`. The downstream keymap change needs its own application and Driver replay before promotion. The `-3` dependency must reach a destination channel before
this artifact can be installed there; publication still follows edge → RC → stable.
Hyprland `-2`. The downstream keymap change and Aquamarine update need their own application and Driver replay before promotion. Hyprland `0.56.2-3` and Aquamarine `0.15.1-1` must both reach a destination channel before this artifact can be installed there; publication still follows edge → RC → stable.
The generated `PKGBUILD` identifies the immutable kit download, outer checksum,
and member checksums. The kit records the full source and tooling revisions,
@@ -48,6 +45,12 @@ Production input is built in; experimental signed input and tracing are off.
The pristine upstream archive, manifest, and verifier remain unchanged. `independent-keymaps.patch` is applied to a separate source tree, and `DOWNSTREAM-PROVENANCE.json` pins the patch and every resulting source file. Build, check, and package revalidate both trees, including when makepkg integrity checks are skipped. `BUILD-PROVENANCE.json` records the upstream base under `source`, the applied change under `downstream`, and the final module digest; the downstream manifest and patch are installed beside it. This preserves the existing compiler, headers, runtime, and consumer checks without representing the modified module as an unmodified upstream build.
## Aquamarine dependency refresh
Release `5` required Aquamarine `0.15.0-2`. When the edge mirror moved to `0.15.1-1`, pacman could no longer resolve that dependency, even after a full database refresh. Release `6` derives a new profile from the same verified upstream kit and pins `0.15.1-1` in both the package dependencies and the installed compatibility verifier. Source, patch, compiler, compositor, headers, and libstdc++ hashes remain pinned; the original upstream qualification does not establish compatibility with the changed Aquamarine package.
A package release bump alone cannot repair future dependency drift: the checked-in profile and derived kit checksums must agree with the new environment, and affected native checks must pass before publication. Do not remove exact dependencies or selectively downgrade a library to bypass a mismatch.
## Keyboard behavior
Each background lane owns a canonical US keymap and independent modifier state. The physical keyboard keeps its layout, Compose key, and remaps. No installation or activation step edits `input:kb_*`. Existing Driver keycodes are interpreted by the agent keyboard, so this does not add Unicode, IME, or new Driver text routes.
@@ -142,7 +145,7 @@ kit-provenance digest:
```sh
python3 /usr/share/cua-hyprland-plugin/profile_verify.py \
--kit /usr/share/cua-hyprland-plugin \
--kit-sha256 089f447e11cacd8c2d3d6cd56528776417c51d353b9677c47c42bba1ef79c9f9 \
--kit-sha256 819779b93655d603d9ebb0d33ea052326c3374674a1d473886106af25e0fffdd \
--consumer /usr/lib/cua/hyprland/cua-hyprland-plugin.so
```
+6 -3
View File
@@ -1,7 +1,7 @@
# Maintainer: Gunther Schulz <dev@guntherschulz.de>
pkgname=cursor-bin
pkgver=3.20.21
pkgver=3.21.16
pkgrel=2
pkgdesc='AI-first coding environment'
arch=('x86_64')
@@ -12,11 +12,11 @@ _electron=electron42
depends=(xdg-utils ripgrep $_electron nodejs
'gcc-libs' 'hicolor-icon-theme' 'libxkbfile')
options=(!strip !debug) # Don't break ext of VSCode
_commit=f09fca384ceca23f7bf21f9c23655b162641d747
_commit=8ae78e8eee1e63479c7e0504b664bc0a80c6800f
source=("https://downloads.cursor.com/production/${_commit}/linux/x64/deb/amd64/deb/cursor_${pkgver}_amd64.deb"
"https://gitlab.archlinux.org/archlinux/packaging/packages/code/-/raw/main/code."{sh,mjs}
rg.sh)
sha512sums=('8329138d207309d16410f1cb58da18eea1a034a35f2bdd022ef9b373bb8f1b3d80e489e65256b7283c40e10da77962d158bfa3a64e742337a942633810d80dbe' '937299c6cb6be2f8d25f7dbc95cf77423875c5f8353b8bd6cd7cc8e5603cbf8405b14dbf8bd615db2e3b36ed680fc8e1909410815f7f8587b7267a699e00ab37' '793f9ff6306e3992ac89802d98110cba288ea1181a901467333293b7d76182ef9792c2a39ff49d9347a18a174b1f42bc58862091dff583f4146c2704eea28033' 'e79fe7659f59d1ae02fc68816399bfd31587315df6cdb6ccf1d0ca76f7cdc692c2a42b30591c0091147bd97ef14b1c7745dc26bd7cb3ea6bba45698e5044fa2a')
sha512sums=('032c86a5d51f154ce36b1a0bf34aa06b2d117666b4372a787ea3117fc0b2b1686e952c721388f2eaf7787f2e0581378c98608048126f7470df2e85e9dbd75ca4' '937299c6cb6be2f8d25f7dbc95cf77423875c5f8353b8bd6cd7cc8e5603cbf8405b14dbf8bd615db2e3b36ed680fc8e1909410815f7f8587b7267a699e00ab37' '793f9ff6306e3992ac89802d98110cba288ea1181a901467333293b7d76182ef9792c2a39ff49d9347a18a174b1f42bc58862091dff583f4146c2704eea28033' 'e79fe7659f59d1ae02fc68816399bfd31587315df6cdb6ccf1d0ca76f7cdc692c2a42b30591c0091147bd97ef14b1c7745dc26bd7cb3ea6bba45698e5044fa2a')
noextract=(cursor_${pkgver}_amd64.deb) # avoid double tarball
_app=usr/share/cursor/resources/app
package() {
@@ -24,6 +24,9 @@ package() {
bsdtar -xOf ${noextract[0]} data.tar.xz | tar -xJf - -C "$pkgdir" \
--exclude 'usr/share/cursor/[^r]*' --exclude 'usr/share/cursor/*.pak'
cd "$pkgdir"
# Disable Cursor's bundled updater; Omarchy manages updates via pacman (#238).
sed -i '/^[[:space:]]*"\(backupUpdateUrl\|updateUrl\)":/d' \
"${_app}/product.json"
mv usr/share/zsh/{vendor-completions,site-functions}
ln -sf /usr/bin/node ${_app}/resources/helpers/node
install -Dm755 "${srcdir}/rg.sh" ${_app}/node_modules/@vscode/ripgrep/bin/rg
+3 -3
View File
@@ -1,7 +1,7 @@
# Maintainer: Ismet Togay <ismet.togay at gmail dot com>
# Contributor: Christopher Cooper <christopher@cg505.com>
pkgname=cursor-cli
pkgver=2026.09.10.1.fd3934a
pkgver=2026.09.18.1.9a7762b
# Upstream is YYYY.MM.DD-<hash>. pkgver cannot contain hyphens, and hashes are
# not monotonically ordered, so pkgver is YYYY.MM.DD.<n>.<hash>: n resets to 1
# on a new date and increments when the same date gets a new hash.
@@ -25,8 +25,8 @@ source_x86_64=("cursor-cli-${_upstream_ver}-x86_64.tar.gz::https://downloads.cur
source_aarch64=("cursor-cli-${_upstream_ver}-aarch64.tar.gz::https://downloads.cursor.com/lab/${_upstream_ver}/linux/arm64/agent-cli-package.tar.gz")
b2sums=('d241ee9895bdb1c17514438fde8528222a8f2326568bd7a033d7a1b11432ce6b4575ff1a50625764bfe6bc6f8a9dc060f7439c3be7e95f8fd02912cdd37a011d'
'1928e04c713e13911ea607f84c3e4a2fed1f76af9795503811078f43d2b53c753e28b2233e553fc17e766831800fb0dbc272aad2a80b387f95ba6071d7d4116a')
b2sums_x86_64=('121c0128fd630565c7000b86ae53bf76e73fd72c1ab8ba2509fae7739b1c7f4bed0587a82137340303ac4704f3344cf63a10eab0e8bea262c8e48bbb21bcb742')
b2sums_aarch64=('bfc0f540190214396df3cbb93c411ab8055677bc1dd0b0e76d1b914d6c6d90af12519434227ba8b38a38249f1bfe0a8848f47e16dc048b4fa005d366815307be')
b2sums_x86_64=('3fccee6929df1042d03461895e56c222a996d3ae9e4f9c61dcc5e6ab7b1d075d3265c21a44f48dd94de0dcde4f8012cc39bfbf323e2bb0c6106cac79885c35ae')
b2sums_aarch64=('3d3bb0a3cb7e2409acf4925f207eaa4e3f41782c3c947e2834b69664b116b972da0b67eea17147fc524ea248af9919494570adc7c48d12c44f12deca17ba2c28')
prepare() {
# Block cursor-agent auto-updates by making its versions directory
+1 -1
View File
@@ -2,7 +2,7 @@
pkgname=dell-xps-touchpad-haptics
pkgver=1.0.0
pkgrel=3
pkgrel=4
pkgdesc="Synaptics haptic touchpad presets for Dell XPS on Omarchy"
arch=('x86_64')
url="https://github.com/omacom-io/omarchy-pkgs"
@@ -3,6 +3,7 @@ _default_level="high"
_env_path="/etc/dell-xps-touchpad-haptics.env"
_legacy_env_path="/etc/omarchy-dell-haptic-touchpad.env"
_legacy_override_dir="/etc/systemd/system/dell-xps-haptic-touchpad.service.d"
_runuser_path="/usr/bin/runuser"
_existing_home() {
local line value
@@ -124,18 +125,13 @@ _ensure_user_config() {
local config_dir="$home/.config/omarchy"
local config_path="$config_dir/dell-haptic.conf"
if [[ ! -f $config_path ]] && ! env HOME="$home" USER="$user" LOGNAME="$user" \
if [[ ! -f $config_path ]] && ! "$_runuser_path" --user "$user" -- \
/usr/bin/env HOME="$home" USER="$user" LOGNAME="$user" \
/usr/bin/dell-xps-touchpad-haptics set "$_default_level"; then
echo ":: Failed to create ${config_path} for user '$user'." >&2
return 1
fi
if [[ -f $config_path ]]; then
chown "$user:$user" "$home/.config" 2>/dev/null || true
chown "$user:$user" "$config_dir" 2>/dev/null || true
chown "$user:$user" "$config_path" 2>/dev/null || true
fi
return 0
}
+17
View File
@@ -0,0 +1,17 @@
# elsewhen
Installs the Elsewhen world clock plugin from the `v{pkgver}` GitHub tag archive into `/usr/share/omarchy/shell/plugins/omacom.elsewhen/` (the directory name is the plugin id the shell scans for, not the package name), plus `LICENSE` under `/usr/share/licenses/elsewhen/` and the upstream `README.md` under `/usr/share/doc/elsewhen/`. The shell scans this directory alongside its bundled plugins.
`package()` copies an explicit allow-list (`manifest.json`, every `*.qml` and `*.js`, `cities.json`, `world.json`, `worldclock-data.py`), so `tests/`, `.github/` and `.gitignore` never ship, and it fails the build if `manifest.json` is missing, does not declare `omacom.elsewhen`, or does not name a present `Panel.qml` as the entry point. An upstream release that adds a runtime file outside those patterns needs the allow-list extended here; the sync only moves versions and checksums. Every file is 0644: `Panel.qml` runs the script as `python3 <plugin dir>/worldclock-data.py`, so it needs no execute bit. No install hook: Omarchy restarts the shell after `omarchy update`, and nothing here may write into a user home. The script's only writes go to `$XDG_CACHE_HOME/omacom-elsewhen/`, which it creates itself at runtime.
Dependencies, cited as `file: tool` in the upstream tree:
- `omarchy`: `ArcText.qml`, `Chip.qml`, `EarthRow.qml`, `Globe.qml`, `MiniGlobe.qml`, `MoonDot.qml`, `Panel.qml: import qs.Commons`; `EarthRow.qml`, `Globe.qml`, `Panel.qml: import qs.Ui`. Owns `/usr/share/omarchy` and the shell plugin directory.
- `quickshell`: `Globe.qml`, `Panel.qml: import Quickshell`; `Globe.qml`, `MiniGlobe.qml`, `Panel.qml: import Quickshell.Io` (`Process`, `FileView`, `StdioCollector`).
- `python`: `Panel.qml: python3 <plugin dir>/worldclock-data.py` (the facts process). `worldclock-data.py` imports only `json`, `os`, `sys`, `time`, `urllib`.
- Left implicit as members of `base`, per Arch convention: `bash` (`Panel.qml`, `Globe.qml: bash -c` wraps every probe), `coreutils` (`Panel.qml`, `Globe.qml: date`, one probe per refresh), `systemd` (`Panel.qml: timedatectl show`, `timedatectl list-timezones`, each with a fallback: `/etc/localtime` for the home zone and `find /usr/share/zoneinfo` for the catalog), `sed` and `grep` (`Panel.qml`: the symlink target of `/etc/localtime` and the zoneinfo catalog filter), `findutils` and `tzdata` (that fallback; `worldclock-data.py: /usr/share/zoneinfo/zone1970.tab`). `omarchy` cannot run without any of them either.
- Not a dependency: `iso-codes`. Only `tests/currency_check.py` reads `/usr/share/iso-codes/json`, to validate the currency table before a release; the runtime never touches it.
Release tracking: `bin/sync-upstream` follows `omacom/elsewhen` through the `upstream.watch.github` provider, which reads the GitHub Releases feed (drafts and prereleases excluded; a tag with no published Release is not seen) and matches exactly `vX.Y.Z`, the grammar upstream's `scripts/set-version.sh` enforces. A newer release rewrites `pkgver`, resets `pkgrel` to 1, fetches `archive/refs/tags/v{pkgver}.tar.gz` again and rewrites `sha256sums` from the download. The Release's `published_at` is what lets `min_release_age: 24h` hold a fresh release for a day; `release_ring: fast` builds it straight to rc and stable as well as edge.
The watch only moves on a version increase, so the first release's digest is filled in by hand (`curl -fsSL <archive url> | sha256sum`), which is why the recipe carries a placeholder until the `v0.1.0` tag exists. Until upstream has published at least one Release, the watch finds nothing and fails the scheduled `sync-upstream` run for every package in the batch, so this recipe stays a draft until then.
+11
View File
@@ -0,0 +1,11 @@
{
"source": "local",
"release_ring": "fast",
"min_release_age": "24h",
"upstream": {
"watch": {
"github": "omacom/elsewhen",
"pattern": "v(?P<version>[0-9]+\\.[0-9]+\\.[0-9]+)"
}
}
}
+63
View File
@@ -0,0 +1,63 @@
# Maintainer: Spencer Bull <spencer.bull@hey.com>
pkgname=elsewhen
pkgver=1.0.0
pkgrel=2
pkgdesc='World clock plugin for the Omarchy shell'
arch=('any')
url='https://github.com/omacom/elsewhen'
license=('MIT')
# What the plugin needs to load and run. It also shells out to bash, date
# (coreutils) and timedatectl (systemd) and reads /usr/share/zoneinfo
# (tzdata); those are members of the base group and stay implicit, per Arch
# convention. The citations for each entry are in .omarchy/README.md.
depends=(
'omarchy'
'python'
'quickshell'
)
options=('!debug')
source=("$pkgname-$pkgver.tar.gz::$url/archive/refs/tags/v$pkgver.tar.gz")
sha256sums=('3124f0c0a19ebc1b158bcf04151cddd6c733ceeead88052186b6a54c46bee263')
package() {
# Install alongside the bundled plugins in the shell's plugin directory.
local plugin="$pkgdir/usr/share/omarchy/shell/plugins/omacom.elsewhen"
cd "$srcdir/$pkgname-$pkgver" || return 1
# The shell loads the entry point each manifest declares. A tree without
# either would install cleanly and never load, so fail the build instead of
# shipping it.
[[ -f manifest.json ]] || {
echo "release tree is missing manifest.json" >&2
return 1
}
grep -Eq '"id"[[:space:]]*:[[:space:]]*"omacom\.elsewhen"' manifest.json || {
echo "manifest.json does not declare the plugin id omacom.elsewhen" >&2
return 1
}
grep -Eq '"barWidget"[[:space:]]*:[[:space:]]*"Panel\.qml"' manifest.json || {
echo "manifest.json does not name Panel.qml as the bar widget entry point" >&2
return 1
}
[[ -f Panel.qml ]] || {
echo "release tree is missing the entry point Panel.qml" >&2
return 1
}
# An explicit allow-list of runtime files, so tests/, .github/ and the rest
# of the repository never reach the package. Directories end up 0755 and
# every file 0644: worldclock-data.py runs as `python3 <path>` and needs no
# execute bit. An unmatched glob is left literal and fails install, which
# is the right outcome for a release tree missing its QML or JS.
local file
for file in manifest.json cities.json world.json worldclock-data.py *.qml *.js; do
install -Dm644 "$file" "$plugin/$file"
done
install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
install -Dm644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md"
}
+9 -1
View File
@@ -85,6 +85,14 @@ sharelink_qml=$(tar -xOzf "$tarball" "$expected_root/ui/ShareLink.qml")
copyfile_rs=$(tar -xOzf "$tarball" "$expected_root/src/backend/copyfile.rs")
regfile_rs=$(tar -xOzf "$tarball" "$expected_root/src/backend/regfile.rs")
# Every check below pins a literal line except the O_NOFOLLOW one. That check
# guards a property -- the copy opens its source with O_NOFOLLOW, so a symlink
# swapped in cannot redirect the read -- and pinning the exact call expression
# made it assert the spelling instead. v0.3.0 moved the first argument from
# `src` to `src.at` when directory-relative opens landed, kept O_NOFOLLOW, and
# hardened symlink handling further; the literal still refused it. Match the
# call and the flag together so a rename cannot read as a removed fix, while
# dropping O_NOFOLLOW still fails.
if ! grep -Fq 'a.push("--".to_string());' <<<"$archive_rs" ||
! grep -Fq 'let input = std::fs::canonicalize(input)' <<<"$archiveops_rs" ||
! grep -Fq 'if op != "compress" && op != "extract"' <<<"$run_rs$archivereq_rs" ||
@@ -92,7 +100,7 @@ if ! grep -Fq 'a.push("--".to_string());' <<<"$archive_rs" ||
! grep -Fq 'if !sandbox::available()' <<<"$mediaprobe_rs" ||
! grep -Fq 'if !sandbox::available()' <<<"$metareq_rs" ||
! grep -Fq 'copyToClipboard.command = ["wl-copy", url]' <<<"$sharelink_qml" ||
! grep -Fq 'regfile::open_if_regular(src, O_NOFOLLOW)' <<<"$copyfile_rs" ||
! grep -Eq 'open_if_regular\(.*O_NOFOLLOW' <<<"$copyfile_rs" ||
! grep -Fq '.custom_flags(O_NONBLOCK | extra_flags)' <<<"$regfile_rs"; then
printf 'Release %s does not contain every required upstream security fix\n' "$best_tag" >&2
exit 1
+37 -4
View File
@@ -1,8 +1,8 @@
# Maintainer: GM <gianmarcomorales@icloud.com>
pkgname=flea
pkgver=0.2.1
pkgrel=3
pkgver=0.3.1
pkgrel=2
pkgdesc='Fast, keyboard-first file manager for Omarchy'
arch=('x86_64' 'aarch64')
url='https://github.com/thisisgm/flea'
@@ -15,7 +15,10 @@ depends=(
'glib2'
'glibc'
'gvfs'
'gvfs-afc'
'gvfs-dnssd'
'gvfs-gphoto2'
'gvfs-mtp'
'gvfs-nfs'
'gvfs-smb'
'hicolor-icon-theme'
@@ -28,6 +31,7 @@ depends=(
'qt6-multimedia'
'qt6-webengine'
'shared-mime-info'
'usbmuxd'
'util-linux'
'wl-clipboard'
'xdg-terminal-exec'
@@ -48,7 +52,7 @@ options=('!debug')
source=(
"$url/releases/download/v$pkgver/$pkgname-v$pkgver.tar.gz"
)
sha256sums=('75f9ac0274a09a0d55cf7d9187943983c1b78a9e443465738b3ac8af8f2a77e9')
sha256sums=('b146ac3f5025da987eae623c4392c44ce69a6a7275a8df3ec1a84563920a4dd2')
build() {
cd "$pkgname-$pkgver"
@@ -60,7 +64,13 @@ build() {
check() {
cd "$pkgname-$pkgver"
export CARGO_TARGET_DIR=target
# Upstream's release profile uses fat LTO, whose final link runs on one
# thread. build() keeps it for the shipped binary; the test harness is a
# throwaway second compile, so build it in parallel in its own target
# directory.
export CARGO_TARGET_DIR=target-check
export CARGO_PROFILE_RELEASE_LTO=thin
export CARGO_PROFILE_RELEASE_CODEGEN_UNITS=16
local -a test_args=()
if ! /usr/bin/prlimit --cpu=30 --as=1073741824 \
@@ -99,6 +109,12 @@ check() {
# not provide. Keep executable fixtures in the remaining suites on the normal
# temp root (/dev/shm is noexec). Note that /dev/shm does NOT buy finer
# timestamps -- see the skip below.
# shelfundo::tests::undo_refuses_to_walk_a_stranger_back deletes a file,
# creates another under the same name, and expects undo to tell them
# apart by (dev, ino, kind). ext4 hands the freed inode number straight
# back to the next create, so on the builder's /tmp the stranger is
# identical and undo walks it back. tmpfs allocates inode numbers from a
# counter and never reuses one, which is what the test assumes.
local -a filesystem_tests=(
backend::menu_actions::tests::
backend::menudelete::tests::
@@ -106,6 +122,7 @@ check() {
backend::trashbrowse::tests::
backend::trashdelete::
backend::trashmanifest::tests::
shelfundo::tests::
)
# redo_refuses_changed_sources_and_destination_collisions writes a file and
# then immediately asks redo to notice the edit. flea decides "changed" from
@@ -123,6 +140,19 @@ check() {
--skip backend::redo::tests::redo_refuses_changed_sources_and_destination_collisions
)
# These three expect spawning a missing or failing program to be reported
# as such. aarch64 builds run under QEMU user-mode emulation, where
# glibc's posix_spawn cannot see the child's failed execve: the spawn
# "succeeds" with exit 127, and the timing test's child never sleeps.
# Passes natively.
if [[ $CARCH == aarch64 ]]; then
test_args+=(
--skip backend::child::tests::a_child_is_noticed_when_it_exits_rather_than_at_the_next_poll_boundary
--skip backend::child::tests::a_child_that_never_started_is_told_apart_from_one_that_ran_and_failed
--skip backend::menu_registry::tests::unavailable_failed_and_oversized_queries_are_named_errors
)
fi
local test_tmp test_status=0 suite
test_tmp=$(mktemp -d /dev/shm/flea-tests.XXXXXXXX) || return 1
TMPDIR="$test_tmp" cargo test --frozen --release -- \
@@ -158,6 +188,9 @@ package() {
install -Dm644 ui/qmldir ui/*.qml -t "$pkgdir/usr/share/flea/ui"
install -Dm644 ui/js/*.js -t "$pkgdir/usr/share/flea/ui/js"
# Flea's Shelf setting installs this plugin into the user's plugin directory.
install -Dm644 shelf/manifest.json shelf/README.md shelf/*.qml shelf/*.js \
-t "$pkgdir/usr/share/flea/shelf"
ln -s /usr/share/omarchy/shell/Commons "$pkgdir/usr/share/flea/ui/Commons"
ln -s /usr/share/omarchy/shell/Ui "$pkgdir/usr/share/flea/ui/Ui"
}
+3 -3
View File
@@ -6,7 +6,7 @@ _npmmodule=@github/copilot
pkgname=github-copilot-cli
_pkgexec=copilot
pkgver=1.0.85
pkgver=1.0.86
pkgrel=1
pkgdesc="GitHub Copilot CLI brings the power of Copilot coding agent directly to your terminal."
@@ -31,8 +31,8 @@ source=("https://registry.npmjs.org/${_npmmodule}/-/copilot-${pkgver}.tgz"
noextract=("copilot-${pkgver}.tgz")
sha256sums=(
'd26e3c15310bdcdcc910ed223285bed8d68aaebce0d344f97224b5cfdaeeee36'
'1b1a8fbd5562df73684b6e94865837ceffd6609d61822c39e6c8fcbd32d8ac41'
'4c6433345f08199e96dcf8db1c3e46a337dfab96cea32132d6127ffcd63a6200'
'b94d2aab574cf3e0c8d950e72430186cdd918261a1376146de971fa90ba0a672'
)
# Document: https://wiki.archlinux.org/title/Node.js_package_guidelines
+3
View File
@@ -0,0 +1,3 @@
{
"source": "local"
}
+53
View File
@@ -0,0 +1,53 @@
# Maintainer: David Heinemeier Hansson <david@hey.com>
pkgname=gliff
pkgver=0.1.0
pkgrel=1
pkgdesc="Hyprland remote desktop over SSH (Vulkan Video, 4:4:4)"
arch=('x86_64')
url="https://github.com/kevinmcconnell/gliff"
license=('MIT')
depends=('gcc-libs' 'glibc' 'wayland' 'libxkbcommon' 'libdrm' 'mesa'
'gtk4>=4.14' 'libadwaita>=1.5' 'vulkan-icd-loader' 'openssh')
makedepends=('cargo' 'pkgconf')
optdepends=('vulkan-radeon: Vulkan Video on AMD'
'vulkan-intel: Vulkan Video on Intel'
'vulkan-tools: vulkaninfo for debugging'
'vulkan-validation-layers: driver call validation for development')
options=('!debug')
# Upstream only publishes a rolling prerelease; pin its source for reproducible builds.
_commit=2edbfba52780c7ace15dbb05ca92177f493d4bc9
source=("$pkgname-$_commit.tar.gz::$url/archive/$_commit.tar.gz")
sha256sums=('2d75961085a72fb8e34149de63e312a7336daa70fd6e157e30c2cd08c14eb1c7')
prepare() {
cd "$pkgname-$_commit"
cargo fetch --locked --target "$CARCH-unknown-linux-gnu"
}
build() {
cd "$pkgname-$_commit"
export CARGO_TARGET_DIR=target
cargo build --frozen --release
}
check() {
cd "$pkgname-$_commit"
export CARGO_TARGET_DIR=target
cargo test --frozen --release --workspace
}
package() {
cd "$pkgname-$_commit"
install -Dm755 target/release/gliff "$pkgdir/usr/bin/gliff"
install -Dm755 target/release/gliff-server "$pkgdir/usr/bin/gliff-server"
install -Dm755 target/release/gliff-probe "$pkgdir/usr/bin/gliff-probe"
install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
install -Dm644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md"
install -Dm644 docs/hardware-quirks.md "$pkgdir/usr/share/doc/$pkgname/hardware-quirks.md"
}
+5 -5
View File
@@ -1,7 +1,7 @@
# Maintainer: David Heinemeier Hansson <david@hey.com>
pkgname=herdr
pkgver=0.9.0
pkgver=0.9.1
pkgrel=1
pkgdesc="Herdr terminal workspace manager for AI coding agents"
arch=('x86_64' 'aarch64')
@@ -13,13 +13,13 @@ replaces=('omarchy-herdr')
conflicts=('omarchy-herdr')
options=('!debug' '!lto')
_zigver=0.15.2
_zigver=0.16.0
source=("herdr-$pkgver.tar.gz::$url/archive/refs/tags/v$pkgver.tar.gz")
source_x86_64=("zig-x86_64-linux-$_zigver.tar.xz::https://ziglang.org/download/$_zigver/zig-x86_64-linux-$_zigver.tar.xz")
source_aarch64=("zig-aarch64-linux-$_zigver.tar.xz::https://ziglang.org/download/$_zigver/zig-aarch64-linux-$_zigver.tar.xz")
sha256sums=('1e83bff4b05834ed8281e16f1680e8f3e58375a94b2e3f2b3d021e28e293ef9a')
sha256sums_x86_64=('02aa270f183da276e5b5920b1dac44a63f1a49e55050ebde3aecc9eb82f93239')
sha256sums_aarch64=('958ed7d1e00d0ea76590d27666efbf7a932281b3d7ba0c6b01b0ff26498f667f')
sha256sums=('03403d3ef80dcf2b954dd5d27eb636e6c4f5279d240b48de272b7f53e4b73093')
sha256sums_x86_64=('70e49664a74374b48b51e6f3fdfbf437f6395d42509050588bd49abe52ba3d00')
sha256sums_aarch64=('ea4b09bfb22ec6f6c6ceac57ab63efb6b46e17ab08d21f69f3a48b38e1534f17')
prepare() {
cd "herdr-$pkgver"
+2 -2
View File
@@ -2,7 +2,7 @@
# Maintainer: CommandMC <kate@commandmc.de>
pkgname=heroic-games-launcher-bin
pkgver=2.22.2
pkgver=2.22.3
pkgrel=1
pkgdesc="An Open source Launcher for Epic, Amazon and GOG Games"
arch=('x86_64')
@@ -11,7 +11,7 @@ license=('GPL-3.0-only')
_filename=Heroic-${pkgver}-linux-x64.pacman
source=("https://github.com/Heroic-Games-Launcher/HeroicGamesLauncher/releases/download/v${pkgver}/${_filename}")
noextract=("${_filename}")
sha256sums=('4e4033ac70b8c407eaf70ce072e4e4d017200f07a3e88f7cfd4d3a597f3c09b8')
sha256sums=('ed17ce083a71dd7e49a89218052ab475edd5a654cedf443853f6baacbb0a00e9')
options=(!strip)
depends=(
which
+3
View File
@@ -0,0 +1,3 @@
{
"source": "local"
}
+42
View File
@@ -0,0 +1,42 @@
# Maintainer: David Heinemeier Hansson <david@hey.com>
pkgname=hype
pkgver=0.4.1
pkgrel=1
pkgdesc='Simple Markdown presentations with a visual slide editor'
arch=('x86_64' 'aarch64')
url='https://github.com/omacom/hype'
license=('MIT')
install='hype.install'
options=('!debug')
depends=(
'ffmpeg'
'hicolor-icon-theme'
'qt6-base>=6.9'
'qt6-declarative>=6.9'
'qt6-multimedia>=6.9'
'qt6-imageformats'
'qt6-svg'
'source-highlight'
'zlib'
'libwebp'
'xdg-desktop-portal'
)
makedepends=('gcc' 'make')
source=("$pkgname-$pkgver.tar.gz::$url/archive/refs/tags/v$pkgver.tar.gz")
sha256sums=('0724a9d18df7657b50dff21ffe3dec1c107e9191a9e9fd5ad40b56ed9d5d6f51')
build() {
cd "$srcdir/$pkgname-$pkgver"
./bin/build
}
package() {
cd "$srcdir/$pkgname-$pkgver"
install -Dm755 build/hype "$pkgdir/usr/bin/hype"
install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
install -Dm644 pkgbuild/hype.svg "$pkgdir/usr/share/icons/hicolor/scalable/apps/hype.svg"
install -Dm644 pkgbuild/hype.desktop "$pkgdir/usr/share/applications/hype.desktop"
install -Dm644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md"
}
+12
View File
@@ -0,0 +1,12 @@
post_install() {
command -v update-desktop-database >/dev/null 2>&1 && update-desktop-database -q
command -v gtk-update-icon-cache >/dev/null 2>&1 && gtk-update-icon-cache -q -t -f usr/share/icons/hicolor
}
post_upgrade() {
post_install
}
post_remove() {
post_install
}
@@ -2,7 +2,7 @@
pkgname="hyprland-preview-share-picker"
pkgver=0.2.1
pkgrel=1
pkgrel=2
pkgdesc="An alternative share picker for hyprland with window and monitor previews"
arch=(x86_64 aarch64)
url="https://github.com/WhySoBad/hyprland-preview-share-picker"
@@ -32,14 +32,14 @@ fn main() {
}
EOF
export RUSTUP_TOOLCHAIN=nightly
export RUSTUP_TOOLCHAIN=stable
cargo fetch --locked --target "$(rustc -vV | sed -n 's/host: //p')"
}
build() {
cd "$pkgname-$pkgver"
export RUSTUP_TOOLCHAIN=nightly
export RUSTUP_TOOLCHAIN=stable
export CARGO_TARGET_DIR=target
cargo build --frozen --release
@@ -0,0 +1,12 @@
{
"source": "local",
"release_ring": "fast",
"min_release_age": "24h",
"upstream": {
"github": "DanWahlin/learn-omarchy",
"checksums": "SHA256SUMS",
"assets": {
"any": "learn-omarchy-{pkgver}.tar.gz"
}
}
}
+34
View File
@@ -0,0 +1,34 @@
# Maintainer: Dan Wahlin <dwahlin@gmail.com>
pkgname=learn-omarchy
pkgver=0.2.2
pkgrel=1
pkgdesc="Interactive, theme-aware courses for learning Omarchy"
arch=('any')
url="https://github.com/DanWahlin/learn-omarchy"
license=('MIT' 'CC-BY-4.0' 'CC0-1.0')
depends=(
'bash' 'coreutils' 'sudo' 'hyprland' 'mpv' 'nodejs>=22.6' 'omarchy'
'quickshell>=0.3' 'qt6-declarative' 'qt6-multimedia' 'qt6-multimedia-ffmpeg' 'xdg-utils'
'xdg-terminal-exec' 'nautilus'
'ttf-liberation' 'noto-fonts-emoji'
'grim' 'slurp' 'gpu-screen-recorder' 'util-linux' 'ffmpeg'
)
makedepends=('make')
optdepends=(
'btop: activity-monitor practice'
'tesseract: OCR practice'
'tesseract-data-eng: English OCR sample recognition'
'zbar: QR recognition (zbarimg)'
'qrencode: QR sample creation'
'voxtype: optional dictation practice'
)
options=('!strip')
source=("$pkgname-$pkgver.tar.gz::$url/releases/download/v$pkgver/$pkgname-$pkgver.tar.gz")
sha256sums=('67f14778c2b66d56c1504695b0e11cab603f1a002570abc94b4bae9b0bec6066')
package() {
cd "$srcdir/$pkgname-$pkgver"
node tools/prepare-release.mjs --check .
make DESTDIR="$pkgdir" PREFIX=/usr install
}
+3 -3
View File
@@ -1,7 +1,7 @@
# Maintainer: Zesko
pkgname="limine-snapper-sync"
pkgver=1.31.0
pkgrel=1.1
pkgver=1.32.0
pkgrel=1
_gradle_version=9.7.1
pkgdesc="Integrates Limine boot entries with Snapper snapshots."
arch=('x86_64' 'aarch64')
@@ -31,7 +31,7 @@ makedepends=('git')
makedepends_x86_64=('gradle')
backup=(etc/limine-snapper-sync.conf)
conflicts=('limine-snapper-cli' 'limine-snapper-sync-git')
sha256sums=('ed236f1bbab966950bf11ba5a7958e97a76e66db7fd647b7737bab4b48c9fc40')
sha256sums=('6bcc1d3ace58030204260a9a4d40d500c4822416be1b1c6edd153d1df0796b3d')
sha256sums_x86_64=('e0be791c8fda4d03b6b0a0cb824fef3149736170057b3a515252b44419606af0')
sha256sums_aarch64=('b4580d9f223d0a4b3a1757e58b18ff4c1db950e67e105fc5cb741457d2384a71'
'acd53f1edaf02f1a8ff99879f8a34b302661a057d9b063ae9e35b552f804d20a')
@@ -0,0 +1,5 @@
{
"source": "local",
"release_ring": "fast",
"sync": false
}
+63
View File
@@ -0,0 +1,63 @@
# Maintainer: Spencer Bull <spencerbull2554@gmail.com>
#
# Self-retiring shim: ships Arch's linux-firmware-cirrus 20260910-2 payload to
# the stable channel while stable's pinned Arch snapshot is still on
# linux-firmware 20260810-2 (which lacks the Dell XPS 13 DX13260 / 1028:0e54
# CS35L56 amplifier firmware aliases, leaving that machine's speakers silent).
#
# Nothing is rebuilt. The signed Arch package is verified against the Arch
# packager key and its payload reinstalled as-is, minus the files that Arch
# moved out of linux-firmware-other in 20260910 (the cs42l45 SDCA tree): on
# the stable snapshot those are still owned by linux-firmware-other 20260810-2
# and would conflict, so they are left to that package.
#
# Versioning is deliberate: 20260810-3 orders above the snapshot's 20260810-2
# and BELOW Arch's real 20260910-2, so as soon as the stable snapshot advances
# pacman replaces this shim with the genuine package in the same transaction
# that upgrades linux-firmware-other, and nothing is lost. Delete this recipe
# once stable's snapshot is at linux-firmware >= 20260910.
pkgname=linux-firmware-cirrus
pkgver=20260810
pkgrel=3
_fwver=20260910
_fwrel=2
_basever=20260810
_baserel=2
pkgdesc="Firmware files for Linux - Firmware for Cirrus Logic audio devices (Arch - payload, stable-snapshot shim)"
arch=('any')
url="https://gitlab.com/kernel-firmware/linux-firmware"
license=('LicenseRef-WHENCE' 'LicenseRef-cirrus')
depends=('linux-firmware-whence')
options=('!strip' '!debug')
_cirrus="linux-firmware-cirrus-${_fwver}-${_fwrel}-any.pkg.tar.zst"
_other="linux-firmware-other-${_basever}-${_baserel}-any.pkg.tar.zst"
source=(
"https://archive.archlinux.org/packages/l/linux-firmware-cirrus/${_cirrus}"
"https://archive.archlinux.org/packages/l/linux-firmware-cirrus/${_cirrus}.sig"
"https://archive.archlinux.org/packages/l/linux-firmware-other/${_other}"
"https://archive.archlinux.org/packages/l/linux-firmware-other/${_other}.sig"
)
noextract=("${_cirrus}" "${_other}")
sha256sums=('70100c551b079bd8abec3d9c96a16defd04766b2a4afc6d7be9128d37e9840f7'
'SKIP'
'b0f016ee0d0532b977211b0cbb630bca75184f68a9ace82675eb3cf9acce4f6c'
'SKIP')
# Jan Alexander Steffens (heftig) <heftig@archlinux.org>, Arch Linux packager
validpgpkeys=('83BC8889351B5DEBBB68416EB8AC08600F108CDF')
package() {
# Payload only; makepkg regenerates .PKGINFO/.MTREE/.BUILDINFO.
bsdtar -xf "${srcdir}/${_cirrus}" -C "${pkgdir}" \
--exclude='.PKGINFO' --exclude='.MTREE' --exclude='.BUILDINFO' \
--exclude='.INSTALL' --exclude='.CHANGELOG'
# Drop every file the snapshot's linux-firmware-other still owns.
local f
while IFS= read -r f; do
[[ -e "${pkgdir}/${f}" || -L "${pkgdir}/${f}" ]] && rm -f "${pkgdir}/${f}"
done < <(bsdtar -tf "${srcdir}/${_other}" | grep -v '^\.' | grep -v '/$')
# Remove directories emptied by the step above.
find "${pkgdir}/usr/lib/firmware" -depth -type d -empty -delete
}
@@ -0,0 +1,60 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEZXeS9hYJKwYBBAHaRw8BAQdAT04Na8ee0UltkhyNi2RGHYdjZDgg+X/K8Jix
dSSQ+Ni0NkphbiBBbGV4YW5kZXIgU3RlZmZlbnMgKGhlZnRpZykgPGhlZnRpZ0Bh
cmNobGludXgub3JnPoiQBBMWCgA4AhsDAheAFiEEg7yIiTUbXeu7aEFuuKwIYA8Q
jN8FAmWq/kcFCwkIBwMFFQoJCAsFFgIDAQACHgUACgkQuKwIYA8QjN+2qAEAh/RL
Zq7Hmqv/z09yq0m6IEb0kbXaW50POi/V+2VcJ9wBAN5Ik/fFgnGMlvZF7Rugu37o
2fk7jnUVsWJca9QmytgGiHUEEBYKAB0WIQSZtmGEcqOzuBQYW67X09gjuIvbmwUC
aYWy0QAKCRDX09gjuIvbm7vJAP9xqmmI8jNGEUQNidh9yZCmVOr3vT5/sUcHGo0J
08o/TgD/Wix2/4DHfnk6fu+onERrK5uF9BAacERnCsG5lMWQ2wSJAjMEEAEKAB0W
IQSR/+BwDoBhnOtzI1yojiPjd1FOAAUCZa0cywAKCRCojiPjd1FOAIKbEACipPSS
sA2G7ntHRGEHSWKgqEKseGGr7kflVdsmJn1tjKI8/VGKa77NkCRgqIJRwmE9m9+F
Cx+a3ILmMOxsjj5RCVFce9NJuscVGHaphZcp7Z0MVoR9hhtnsyjWk/CYOAv+JLKq
NTYhdmat+ixY4fwPzjdV6sxCDL/s6Fci0zPLUam7QVr9LIS4U3UH7smkKj6jM+G/
sEn0QM02EKy2iJLlbPNN3pppYWqZ5p9xXeB6EJ89JvZMI3k92xy456JjkCgLN860
NPmdmnLLtlrGWJRgNK6+iaFjLt/BL9gU8aGe+K3ONXES2k7iZnh+oLAEV8Z07dgv
Gd0o+OFEPrC8kETbQK45r1yAjZVO+tp4dSxvV/BD+7KhUXAZnOKWLaOMomfsG17E
KKa894cBLJG7LWN/d/Uk9fjfjd4ZYbSpIALJiEoKrm1ytj2KgnxKveTtY69i63/N
0BpNVrkYIJffWR6zSosC8geAWfqm7pR6JARUAZrw0YtJbluDrRgOO0XFn8hDqRUm
FPWgXuvqNdR2JyD4aB87LKGhzVFzQvbHa+S4sG7+w5nWQB0Eca+hiVpJDpMYjoU+
f+L3yUb6POwvUJe7VT/2PYOwidnV3guTevnn9a4erKoW/6wKAr13cW+KTKTR0bdC
S0UTOWbJnbi2Hfhyr7NZgs4T4OcpH3kj+R4WPIkCMwQQAQoAHRYhBNiv3aB6W27f
p9jM2tbQVfknhD8cBQJlg4C5AAoJENbQVfknhD8cpPQP/19uAVMaG1lQNaAK9XWT
Z1/lAr6sxYT6B2+MqnRtbkr4Gh3ts7Ey5BI39HxNWRIUGUt7pq4FjCQxWeJC9mfp
/hqj9rl1s32lbBzevbkjESro+cHPfrv0vsVlwJA2W3rURQlQzbEq3fvDzc/wz4sN
vgQDiUlxH5JYXZ5OexsDATLyfHNpJh+4NxqB24axjDe/1ZK8hoYl+eX46dP9JKWB
F8GA3Ebwst3de/81oNngBjDgNPju6cvgykoT2jCBn4asp1xKekZh5ZbRG40jAeoQ
QAvEgTxIbwNf4HBVhvGjQ6G5lCNO6gQonq1X4UbHgH8tRGSSgnz2yDAdcxtaj1eC
e5BMhjuoHuxS4DCtR97Dtn7YjrYoVus5eMkhEZGuWKK4hkggsLbyUx5llxZxLXPD
mBAYLkqgZsHgiqLeHAdrEmAFaRfskVg0MzfCcEE9StWnWf0ixk3thuwQAaPI4GCB
nNLnmqCcOyCN1Qa3iXjdOzp5bU0qwFi/qFQagq0nu8sJim7q0g0Bk7J+iGRht3no
L5iT9d+8CQaN1it+L+elSYfrr/LamghRvh9epOtGUVH3GQYS4Bgo2rgktGXKtcX+
P/jR/aM034g8VPlbV+Kas/c6mIk9JzKOvJJ4+Lpvr0ZzRG32ez9dAlDogE3xASi6
sMWbY+t4unGs+nY3SqIOyHLTiHUEEBYKAB0WIQRp5kceOuBlKXUpgy5roPWiA39P
QQUCZX7ZYAAKCRBroPWiA39PQadvAQD7F/N3xuyWogrJV7TMZk2PFteviEW2Dv9d
dSUGasK3dQEAxf3HxRDvrv3yJLhgNKa+ksr4bBBmruvilpWS+X4InwKIdQQQFgoA
HRYhBDVy+iobBn8ixYrxVfi4IbQqb9zXBQJlfKbrAAoJEPi4IbQqb9zXe7MBAIzF
QqdV8CJXYIcZJtUUIQ7a/AN2enHBpoa/qXEre5bAAP4uNEUMKiDZRpHAh/KmqarM
vF+c1BOpEJbQsPqv0L5hDIh1BBAWCgAdFiEEKsCkLvsLXLx6BALtTclbbXvpiS4F
AmV8nsgACgkQTclbbXvpiS6bpwD/W0sMOH4lmR4t9Sc8hJB+uBLGYxzoNIgaNa5x
vbdm5hwBAIPYr1SVl0+yghsxg5k75jStRL2S5MZW2iSV3ynNLTkFiHkEEBYKACEW
IQSi/zo2qqVmVBCQZKsZgC+LDXD8MAUCZXe6yAMFAngACgkQGYAviw1w/DCmCAD8
Cfvn8O+N/AJTOKY8lZzk+OSX3tSTQTOUiLHKRl+RX6IA/1Bku44c1YJVZ+RhWkGQ
n0C8ZN/DYzHh9JInl3blLcIMtDhKYW4gQWxleGFuZGVyIFN0ZWZmZW5zIChoZWZ0
aWcpIDxqYW4uc3RlZmZlbnNAZ21haWwuY29tPoiTBBMWCgA7AhsDAheAAhkBFiEE
g7yIiTUbXeu7aEFuuKwIYA8QjN8FAmWq/kIFCwkIBwMFFQoJCAsFFgIDAQACHgUA
CgkQuKwIYA8QjN+ySAD+PI99JJsFWz2CaS3enxjUMCWJZJvSV9G1FqmeTKtH95oA
/ismVRjBbwbCrDDEsZVIK3NeRyRyhiWIVFXWix/KnH4CiHkEEBYKACEWIQSi/zo2
qqVmVBCQZKsZgC+LDXD8MAUCZXe6xQMFAngACgkQGYAviw1w/DDnzAD6AwROKYI8
7DZ6a1onZeR5wOV50bt2LCB4XxNiupHcpLMA/i4dmwa4Bkzyh/h+v0kN2PSssueX
7kFPNcnyhe3KbUUDuDMEZXeUSxYJKwYBBAHaRw8BAQdAkvIbYwde3OFqoAy6QOO9
BPwFNCll8tgQ6iAmQMkOjtWIeAQYFgoAIBYhBIO8iIk1G13ru2hBbrisCGAPEIzf
BQJld5RLAhsgAAoJELisCGAPEIzfhU8A/3NZzIEk3dmCAL0XLtylcFp/HExnN+5Q
RGmT0+SzzuGaAP9ozoMlSjtcGLAZMglLk8/mYzKveR89RJlB0cZtUU6UArg4BGV3
kvYSCisGAQQBl1UBBQEBB0Dh/7CubQh/MabODq3IcoqeGUzEGUPU8GXCVrDmPHih
WQMBCAeIeAQYFgoAIBYhBIO8iIk1G13ru2hBbrisCGAPEIzfBQJld5L2AhsMAAoJ
ELisCGAPEIzfao0A/AiJPB4igiyHjPgR8OpKh4Nz+pwmFrD/j5l2YC0Xi2dOAP4j
LDEa1VCNNhq7vWA8SqUjareBzHpwlG2ObUwYxORjBQ==
=OXp6
-----END PGP PUBLIC KEY BLOCK-----
@@ -0,0 +1,31 @@
diff --git a/Makefile b/Makefile
--- a/Makefile
+++ b/Makefile
@@ -935,6 +935,9 @@ KBUILD_RUSTFLAGS += -Copt-level=2
else ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
KBUILD_CFLAGS += -Os
KBUILD_RUSTFLAGS += -Copt-level=s
+else ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3
+KBUILD_CFLAGS += -O3
+KBUILD_RUSTFLAGS += -Copt-level=3
endif
# Always set `debug-assertions` and `overflow-checks` because their default
diff --git a/init/Kconfig b/init/Kconfig
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -1622,6 +1622,14 @@ config CC_OPTIMIZE_FOR_SIZE
Choosing this option will pass "-Os" to your compiler resulting
in a smaller kernel.
+config CC_OPTIMIZE_FOR_PERFORMANCE_O3
+ bool "Optimize harder for performance (-O3)"
+ help
+ Build with the "-O3" compiler flag: more inlining, loop
+ unrolling and vectorization than -O2, at the cost of a larger
+ kernel image and larger modules. Rust code is built at
+ opt-level 3.
+
endchoice
config HAVE_LD_DEAD_CODE_DATA_ELIMINATION
@@ -0,0 +1,95 @@
diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h
--- a/arch/x86/include/asm/cpufeatures.h
+++ b/arch/x86/include/asm/cpufeatures.h
@@ -471,6 +471,8 @@
#define X86_FEATURE_AUTOIBRS (20*32+ 8) /* Automatic IBRS */
#define X86_FEATURE_NO_SMM_CTL_MSR (20*32+ 9) /* SMM_CTL MSR is not present */
+#define X86_FEATURE_L2_TLB_SIZE_X32 (20*32+14) /* L2 TLB sizes are encoded as multiples of 32 */
+
#define X86_FEATURE_GP_ON_USER_CPUID (20*32+17) /* User CPUID faulting */
#define X86_FEATURE_PREFETCHI (20*32+20) /* Prefetch Data/Instruction to Cache Level */
diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
--- a/arch/x86/kernel/cpu/amd.c
+++ b/arch/x86/kernel/cpu/amd.c
@@ -1190,7 +1190,7 @@ static unsigned int amd_size_cache(struct cpuinfo_x86 *c, unsigned int size)
static void cpu_detect_tlb_amd(struct cpuinfo_x86 *c)
{
- u32 ebx, eax, ecx, edx;
+ u32 ebx, eax, ecx, edx, shift, tmp;
u16 mask = 0xfff;
if (c->x86 < 0xf)
@@ -1199,10 +1199,12 @@ static void cpu_detect_tlb_amd(struct cpuinfo_x86 *c)
if (c->extended_cpuid_level < 0x80000006)
return;
+ shift = !!cpu_has(c, X86_FEATURE_L2_TLB_SIZE_X32) * 5;
+
cpuid(0x80000006, &eax, &ebx, &ecx, &edx);
- tlb_lld_4k = (ebx >> 16) & mask;
- tlb_lli_4k = ebx & mask;
+ tlb_lld_4k = ((ebx >> 16) & mask) << shift;
+ tlb_lli_4k = (ebx & mask) << shift;
/*
* K8 doesn't have 2M/4M entries in the L2 TLB so read out the L1 TLB
@@ -1214,16 +1216,18 @@ static void cpu_detect_tlb_amd(struct cpuinfo_x86 *c)
}
/* Handle DTLB 2M and 4M sizes, fall back to L1 if L2 is disabled */
- if (!((eax >> 16) & mask))
+ tmp = ((eax >> 16) & mask) << shift;
+ if (!tmp)
tlb_lld_2m = (cpuid_eax(0x80000005) >> 16) & 0xff;
else
- tlb_lld_2m = (eax >> 16) & mask;
+ tlb_lld_2m = tmp;
/* a 4M entry uses two 2M entries */
tlb_lld_4m = tlb_lld_2m >> 1;
/* Handle ITLB 2M and 4M sizes, fall back to L1 if L2 is disabled */
- if (!(eax & mask)) {
+ tmp = (eax & mask) << shift;
+ if (!tmp) {
/* Erratum 658 */
if (c->x86 == 0x15 && c->x86_model <= 0x1f) {
tlb_lli_2m = 1024;
@@ -1231,8 +1235,9 @@ static void cpu_detect_tlb_amd(struct cpuinfo_x86 *c)
cpuid(0x80000005, &eax, &ebx, &ecx, &edx);
tlb_lli_2m = eax & 0xff;
}
- } else
- tlb_lli_2m = eax & mask;
+ } else {
+ tlb_lli_2m = tmp;
+ }
tlb_lli_4m = tlb_lli_2m >> 1;
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -857,7 +857,7 @@ static void get_model_name(struct cpuinfo_x86 *c)
void cpu_detect_cache_sizes(struct cpuinfo_x86 *c)
{
- unsigned int n, dummy, ebx, ecx, edx, l2size;
+ unsigned int n, dummy, ebx, ecx, edx, l2size, shift __maybe_unused;
n = c->extended_cpuid_level;
@@ -877,7 +877,9 @@ void cpu_detect_cache_sizes(struct cpuinfo_x86 *c)
l2size = ecx >> 16;
#ifdef CONFIG_X86_64
+ shift = !!cpu_has(c, X86_FEATURE_L2_TLB_SIZE_X32) * 5;
c->x86_tlbsize += ((ebx >> 16) & 0xfff) + (ebx & 0xfff);
+ c->x86_tlbsize <<= shift;
#else
/* do processor-specific cache resizing */
if (this_cpu->legacy_cache_size)
@@ -0,0 +1,12 @@
diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
--- a/drivers/gpu/drm/ttm/ttm_bo.c
+++ b/drivers/gpu/drm/ttm/ttm_bo.c
@@ -1343,7 +1343,7 @@ ttm_bo_swapout_cb(struct ttm_lru_walk *walk, struct ttm_buffer_object *bo)
if (ttm_tt_is_populated(tt)) {
ret = ttm_tt_swapout(bdev, tt, swapout_walk->gfp_flags);
- if (!ret) {
+ if (ret > 0) {
spin_lock(&bdev->lru_lock);
ttm_resource_del_bulk_move_unevictable(bo->resource, bo);
ttm_resource_move_to_lru_tail(bo->resource);
+17 -2
View File
@@ -3,7 +3,7 @@
pkgbase=linux-omarchy-bore
pkgver=7.2.5
pkgrel=4
pkgrel=6
pkgdesc='Omarchy Linux (BORE CPU scheduler, ADIOS I/O scheduler)'
url='https://omarchy.org'
arch=(
@@ -49,6 +49,7 @@ source=(
${_rcpatch:+https://cdn.kernel.org/pub/linux/kernel/v${_major}.x/stable-review/${_rcpatch}.xz}
${_rcpatch:+https://cdn.kernel.org/pub/linux/kernel/v${_major}.x/stable-review/${_rcpatch}.sign}
0010-archlinux-base.patch{,.sig}
0011-kbuild-optimize-for-performance-o3.patch{,.sig}
0110-bore-6.8.0.patch{,.sig}
0120-tlbpull.patch{,.sig}
0121-smp-preempt.patch{,.sig}
@@ -64,6 +65,7 @@ source=(
0210-pstate.patch{,.sig}
0211-amd-pstate-fixes.patch{,.sig}
0212-amd-pstate-epp-cache.patch{,.sig}
0220-x86-amd-zen5-tlb-sizes.patch{,.sig}
0250-zsmalloc.patch{,.sig}
0260-mglru-exec-protect.patch{,.sig}
0270-ksm-rmap-walk.patch{,.sig}
@@ -83,6 +85,7 @@ source=(
0313-fuse-background-wakeup.patch{,.sig}
0350-drm-edid-populate-monitor-range-from-displayid-adaptive-sync.patch{,.sig}
0360-gpu-mem-cgroup.patch{,.sig}
0361-drm-ttm-swapped-out-resource-leaves-bulk-move.patch{,.sig}
0400-drm-i915-alpm-limit-pr-alpm-to-panel-replay.patch{,.sig}
0401-drm-i915-psr-exit-panel-replay-for-alpm-lag.patch{,.sig}
0402-psr2-early-transport-panels.patch{,.sig}
@@ -151,6 +154,8 @@ b2sums=('48551bee71cd02815136fb8abe7da4464c2e17c89ef35cb0c0530c8b969fe12127ca97a
'SKIP'
'6d92fb81077232b8cd1ae500b3aabc71434792e750ea6126dc095e50d4278d3e42b3cfdc3c8bc693ea14b109f6adfa3a1ed095187fc5501962fbe8f049f867bc'
'SKIP'
'cc2a66a097b5567e80c59b7d6c492fef5e667fc71a0390908712c69512c4136dbaf3d150b62d04eff960c796f7a94e6d0915d3b92cb336318b49f5f516a3bba6'
'SKIP'
'a32edb39b4ee9c0378239f4998f477fe5371e6931c188d660874b360ca6d3bdcfff71cf088bed071365627d87458eca0be625e154ca3d1e8150e5e0bdf64175c'
'SKIP'
'f6c00ac2400580dffe3605d2693809396e18185f0c59b21b86f1f22a1f8d6529c51e8cc2474bc40f74a96631f415da51521a8b35d5b096e9b9d164c2755fb091'
@@ -181,6 +186,8 @@ b2sums=('48551bee71cd02815136fb8abe7da4464c2e17c89ef35cb0c0530c8b969fe12127ca97a
'SKIP'
'2f24f88d8f960148046c36222fdaaadfed2ca88c60240fa1d111430898192ca45aeaa93a3afa24ad02b11c4dc8c3904a92f17c0284396f2f43352ad934a35056'
'SKIP'
'e59c4da548b2ea4fd6144886e3e2e765b3e73972121e9e73dbc05c066834b2b35e6ef4c17617e77efc90260566bf7c0910d2138d8d5c1c3b6094eeac9de64cfe'
'SKIP'
'9809e258eb684b80d508fa2f2fa270683b62bd1412ed05a970114aaa7d84c37c0beaea51f9ff8c6ee1bc7318c4aee3725e9a1131fefb51ba700801de6ac414c5'
'SKIP'
'f115e8c80d723f7c24e6b1638b801cd664bef20acb1d2f6e6f5612744b916278693011782228cd3f4d0518654b8d53309bc5b06bbe8ed722fab9995f369bf548'
@@ -219,6 +226,8 @@ b2sums=('48551bee71cd02815136fb8abe7da4464c2e17c89ef35cb0c0530c8b969fe12127ca97a
'SKIP'
'1124c5c3fd5104c886c841ead1ae9afb42683388b640b1a86523dad9919c6bd59a1f78b07ee5a213e0dca77c636a29676af0592d4ed1735ea35f282f6f23e46f'
'SKIP'
'15855e9c28cb0abaab7ab606904dfc84d426ccab44edae59f0e1f092202b80525929f8d394d04ca1513d1d5dfc2cfc108a66a9c1cb42b9966c6417562ef20689'
'SKIP'
'505bf01a9d6b0926b557b673bb686d1a4ff73ee70539991e52272fbf58aad3ea25cf5ffc5c2d094a2d5e78b18a1a134f2ab530f595073a2d3eba9ff2c1418e1e'
'SKIP'
'b33b46c37f12f7650a67c3731b87ff84add1ac8623cc96b52223a1ef9946bcaa990ed7c7036674e228335f57ec9ed421ea4d6c1dd72d19b516215d9ac2c7c3ee'
@@ -333,13 +342,15 @@ b2sums=('48551bee71cd02815136fb8abe7da4464c2e17c89ef35cb0c0530c8b969fe12127ca97a
'SKIP'
'b69cf36cc5633e507866e67f59557646dda7d6ea436b145f3f3356c4b12e1300c94977a7d1214835f2476c94a30dd672076241b920d96d744fbc199539df506f'
'SKIP')
b2sums_x86_64=('54148fc55a2b611f84f62d0b1c19caf911e029cd29bda6f032b15cc2f3484a1cc648af63e101eb293b048b54df4a0efacdb39cbbaa5b13d8ea1dfc22b981ec6b')
b2sums_x86_64=('f69a306213a769710e3429817239746406e115af29f34f37514119eb49f973c86953379b68d3df89700bef7f86e3ec43eb91d5f5821f2a8eae7f28dba589d265')
# https://www.kernel.org/pub/linux/kernel/v7.x/sha256sums.asc
sha256sums=('55ddf0df8325d9dad96fcff7bd93977d22e3f50af06527572af59b77c7632b78'
'SKIP'
'95f3e9209629044028373af987dc0e270a5a15acb8c8e49c5f05057220c75fe2'
'SKIP'
'6cf74fc3f28a751354187b6cf610c3e43cf9088b5f730b68dbb575828c3a7478'
'SKIP'
'daf0aaebff3cf4679d0bb8137ace6c9a2de62f75aa4655a0a02ddf759f3c7f26'
'SKIP'
'a9171e731d08a454a50174889af8936fab962b33c37c67169b0cdf21b0b80821'
@@ -370,6 +381,8 @@ sha256sums=('55ddf0df8325d9dad96fcff7bd93977d22e3f50af06527572af59b77c7632b78'
'SKIP'
'66eb2c49dbf708cc781d411d0e44ed613480f0ef66d522272929d9cb7bb21e93'
'SKIP'
'718b40e15350049e03c0ed281b9257fca5432b8dec2e0e145e8b26507ee8892d'
'SKIP'
'b7ba949eea77e169aceb2c401d4eb83a7413aab6f15ee2a7ab1a96352f0aa12d'
'SKIP'
'341424b925d506869793686e22ea8f095a34048595ebebec409c0a7bbd346ca2'
@@ -408,6 +421,8 @@ sha256sums=('55ddf0df8325d9dad96fcff7bd93977d22e3f50af06527572af59b77c7632b78'
'SKIP'
'e303da14a3c8a15fd1cb45394138f03dd16e66d2ac0d1ebcd933977df937d771'
'SKIP'
'503eba8d7a80b978fccdaac798f57cbb6cd2b2b04fd04c46399daa004b6646dc'
'SKIP'
'1f0c958b64ba48b8dc8b5548e1ad1934b8d4903fc16fec15014759e3681ea275'
'SKIP'
'47994d576008a377de612ed77e6b2e7bc6b24ad3a30a6d157646d380ae323142'
+3 -2
View File
@@ -278,8 +278,9 @@ CONFIG_BOOT_CONFIG=y
# CONFIG_BOOT_CONFIG_EMBED is not set
CONFIG_CMDLINE_LOG_WRAP_IDEAL_LEN=1021
CONFIG_INITRAMFS_PRESERVE_MTIME=y
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y
# CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE is not set
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3=y
CONFIG_LD_ORPHAN_WARN=y
CONFIG_LD_ORPHAN_WARN_LEVEL="warn"
CONFIG_SYSCTL=y
@@ -11872,7 +11873,7 @@ CONFIG_INIT_STACK_ALL_ZERO=y
CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y
# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y
CONFIG_ZERO_CALL_USED_REGS=y
# CONFIG_ZERO_CALL_USED_REGS is not set
# end of Memory initialization
#
@@ -0,0 +1,31 @@
diff --git a/Makefile b/Makefile
--- a/Makefile
+++ b/Makefile
@@ -935,6 +935,9 @@ KBUILD_RUSTFLAGS += -Copt-level=2
else ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
KBUILD_CFLAGS += -Os
KBUILD_RUSTFLAGS += -Copt-level=s
+else ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3
+KBUILD_CFLAGS += -O3
+KBUILD_RUSTFLAGS += -Copt-level=3
endif
# Always set `debug-assertions` and `overflow-checks` because their default
diff --git a/init/Kconfig b/init/Kconfig
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -1622,6 +1622,14 @@ config CC_OPTIMIZE_FOR_SIZE
Choosing this option will pass "-Os" to your compiler resulting
in a smaller kernel.
+config CC_OPTIMIZE_FOR_PERFORMANCE_O3
+ bool "Optimize harder for performance (-O3)"
+ help
+ Build with the "-O3" compiler flag: more inlining, loop
+ unrolling and vectorization than -O2, at the cost of a larger
+ kernel image and larger modules. Rust code is built at
+ opt-level 3.
+
endchoice
config HAVE_LD_DEAD_CODE_DATA_ELIMINATION
@@ -0,0 +1,95 @@
diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h
--- a/arch/x86/include/asm/cpufeatures.h
+++ b/arch/x86/include/asm/cpufeatures.h
@@ -471,6 +471,8 @@
#define X86_FEATURE_AUTOIBRS (20*32+ 8) /* Automatic IBRS */
#define X86_FEATURE_NO_SMM_CTL_MSR (20*32+ 9) /* SMM_CTL MSR is not present */
+#define X86_FEATURE_L2_TLB_SIZE_X32 (20*32+14) /* L2 TLB sizes are encoded as multiples of 32 */
+
#define X86_FEATURE_GP_ON_USER_CPUID (20*32+17) /* User CPUID faulting */
#define X86_FEATURE_PREFETCHI (20*32+20) /* Prefetch Data/Instruction to Cache Level */
diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
--- a/arch/x86/kernel/cpu/amd.c
+++ b/arch/x86/kernel/cpu/amd.c
@@ -1190,7 +1190,7 @@ static unsigned int amd_size_cache(struct cpuinfo_x86 *c, unsigned int size)
static void cpu_detect_tlb_amd(struct cpuinfo_x86 *c)
{
- u32 ebx, eax, ecx, edx;
+ u32 ebx, eax, ecx, edx, shift, tmp;
u16 mask = 0xfff;
if (c->x86 < 0xf)
@@ -1199,10 +1199,12 @@ static void cpu_detect_tlb_amd(struct cpuinfo_x86 *c)
if (c->extended_cpuid_level < 0x80000006)
return;
+ shift = !!cpu_has(c, X86_FEATURE_L2_TLB_SIZE_X32) * 5;
+
cpuid(0x80000006, &eax, &ebx, &ecx, &edx);
- tlb_lld_4k = (ebx >> 16) & mask;
- tlb_lli_4k = ebx & mask;
+ tlb_lld_4k = ((ebx >> 16) & mask) << shift;
+ tlb_lli_4k = (ebx & mask) << shift;
/*
* K8 doesn't have 2M/4M entries in the L2 TLB so read out the L1 TLB
@@ -1214,16 +1216,18 @@ static void cpu_detect_tlb_amd(struct cpuinfo_x86 *c)
}
/* Handle DTLB 2M and 4M sizes, fall back to L1 if L2 is disabled */
- if (!((eax >> 16) & mask))
+ tmp = ((eax >> 16) & mask) << shift;
+ if (!tmp)
tlb_lld_2m = (cpuid_eax(0x80000005) >> 16) & 0xff;
else
- tlb_lld_2m = (eax >> 16) & mask;
+ tlb_lld_2m = tmp;
/* a 4M entry uses two 2M entries */
tlb_lld_4m = tlb_lld_2m >> 1;
/* Handle ITLB 2M and 4M sizes, fall back to L1 if L2 is disabled */
- if (!(eax & mask)) {
+ tmp = (eax & mask) << shift;
+ if (!tmp) {
/* Erratum 658 */
if (c->x86 == 0x15 && c->x86_model <= 0x1f) {
tlb_lli_2m = 1024;
@@ -1231,8 +1235,9 @@ static void cpu_detect_tlb_amd(struct cpuinfo_x86 *c)
cpuid(0x80000005, &eax, &ebx, &ecx, &edx);
tlb_lli_2m = eax & 0xff;
}
- } else
- tlb_lli_2m = eax & mask;
+ } else {
+ tlb_lli_2m = tmp;
+ }
tlb_lli_4m = tlb_lli_2m >> 1;
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -857,7 +857,7 @@ static void get_model_name(struct cpuinfo_x86 *c)
void cpu_detect_cache_sizes(struct cpuinfo_x86 *c)
{
- unsigned int n, dummy, ebx, ecx, edx, l2size;
+ unsigned int n, dummy, ebx, ecx, edx, l2size, shift __maybe_unused;
n = c->extended_cpuid_level;
@@ -877,7 +877,9 @@ void cpu_detect_cache_sizes(struct cpuinfo_x86 *c)
l2size = ecx >> 16;
#ifdef CONFIG_X86_64
+ shift = !!cpu_has(c, X86_FEATURE_L2_TLB_SIZE_X32) * 5;
c->x86_tlbsize += ((ebx >> 16) & 0xfff) + (ebx & 0xfff);
+ c->x86_tlbsize <<= shift;
#else
/* do processor-specific cache resizing */
if (this_cpu->legacy_cache_size)
@@ -0,0 +1,12 @@
diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
--- a/drivers/gpu/drm/ttm/ttm_bo.c
+++ b/drivers/gpu/drm/ttm/ttm_bo.c
@@ -1343,7 +1343,7 @@ ttm_bo_swapout_cb(struct ttm_lru_walk *walk, struct ttm_buffer_object *bo)
if (ttm_tt_is_populated(tt)) {
ret = ttm_tt_swapout(bdev, tt, swapout_walk->gfp_flags);
- if (!ret) {
+ if (ret > 0) {
spin_lock(&bdev->lru_lock);
ttm_resource_del_bulk_move_unevictable(bo->resource, bo);
ttm_resource_move_to_lru_tail(bo->resource);
+17 -2
View File
@@ -3,7 +3,7 @@
pkgbase=linux-omarchy
pkgver=7.2.5
pkgrel=4
pkgrel=6
pkgdesc='Omarchy Linux'
url='https://omarchy.org'
arch=(
@@ -49,6 +49,7 @@ source=(
${_rcpatch:+https://cdn.kernel.org/pub/linux/kernel/v${_major}.x/stable-review/${_rcpatch}.xz}
${_rcpatch:+https://cdn.kernel.org/pub/linux/kernel/v${_major}.x/stable-review/${_rcpatch}.sign}
0010-archlinux-base.patch{,.sig}
0011-kbuild-optimize-for-performance-o3.patch{,.sig}
0120-tlbpull.patch{,.sig}
0121-smp-preempt.patch{,.sig}
0130-sched-detach-tasks.patch{,.sig}
@@ -63,6 +64,7 @@ source=(
0210-pstate.patch{,.sig}
0211-amd-pstate-fixes.patch{,.sig}
0212-amd-pstate-epp-cache.patch{,.sig}
0220-x86-amd-zen5-tlb-sizes.patch{,.sig}
0250-zsmalloc.patch{,.sig}
0260-mglru-exec-protect.patch{,.sig}
0270-ksm-rmap-walk.patch{,.sig}
@@ -82,6 +84,7 @@ source=(
0313-fuse-background-wakeup.patch{,.sig}
0350-drm-edid-populate-monitor-range-from-displayid-adaptive-sync.patch{,.sig}
0360-gpu-mem-cgroup.patch{,.sig}
0361-drm-ttm-swapped-out-resource-leaves-bulk-move.patch{,.sig}
0400-drm-i915-alpm-limit-pr-alpm-to-panel-replay.patch{,.sig}
0401-drm-i915-psr-exit-panel-replay-for-alpm-lag.patch{,.sig}
0402-psr2-early-transport-panels.patch{,.sig}
@@ -150,6 +153,8 @@ b2sums=('48551bee71cd02815136fb8abe7da4464c2e17c89ef35cb0c0530c8b969fe12127ca97a
'SKIP'
'6d92fb81077232b8cd1ae500b3aabc71434792e750ea6126dc095e50d4278d3e42b3cfdc3c8bc693ea14b109f6adfa3a1ed095187fc5501962fbe8f049f867bc'
'SKIP'
'cc2a66a097b5567e80c59b7d6c492fef5e667fc71a0390908712c69512c4136dbaf3d150b62d04eff960c796f7a94e6d0915d3b92cb336318b49f5f516a3bba6'
'SKIP'
'f6c00ac2400580dffe3605d2693809396e18185f0c59b21b86f1f22a1f8d6529c51e8cc2474bc40f74a96631f415da51521a8b35d5b096e9b9d164c2755fb091'
'SKIP'
'6aa6ea3690f3e4e145818650537cd110d33720d662af0b3660d95e15a3f91e48c993e31117c0a2fde852f55a77a83e3a50a1a95c0df78a33ae75d43d46a9fe15'
@@ -178,6 +183,8 @@ b2sums=('48551bee71cd02815136fb8abe7da4464c2e17c89ef35cb0c0530c8b969fe12127ca97a
'SKIP'
'2f24f88d8f960148046c36222fdaaadfed2ca88c60240fa1d111430898192ca45aeaa93a3afa24ad02b11c4dc8c3904a92f17c0284396f2f43352ad934a35056'
'SKIP'
'e59c4da548b2ea4fd6144886e3e2e765b3e73972121e9e73dbc05c066834b2b35e6ef4c17617e77efc90260566bf7c0910d2138d8d5c1c3b6094eeac9de64cfe'
'SKIP'
'9809e258eb684b80d508fa2f2fa270683b62bd1412ed05a970114aaa7d84c37c0beaea51f9ff8c6ee1bc7318c4aee3725e9a1131fefb51ba700801de6ac414c5'
'SKIP'
'f115e8c80d723f7c24e6b1638b801cd664bef20acb1d2f6e6f5612744b916278693011782228cd3f4d0518654b8d53309bc5b06bbe8ed722fab9995f369bf548'
@@ -216,6 +223,8 @@ b2sums=('48551bee71cd02815136fb8abe7da4464c2e17c89ef35cb0c0530c8b969fe12127ca97a
'SKIP'
'1124c5c3fd5104c886c841ead1ae9afb42683388b640b1a86523dad9919c6bd59a1f78b07ee5a213e0dca77c636a29676af0592d4ed1735ea35f282f6f23e46f'
'SKIP'
'15855e9c28cb0abaab7ab606904dfc84d426ccab44edae59f0e1f092202b80525929f8d394d04ca1513d1d5dfc2cfc108a66a9c1cb42b9966c6417562ef20689'
'SKIP'
'505bf01a9d6b0926b557b673bb686d1a4ff73ee70539991e52272fbf58aad3ea25cf5ffc5c2d094a2d5e78b18a1a134f2ab530f595073a2d3eba9ff2c1418e1e'
'SKIP'
'b33b46c37f12f7650a67c3731b87ff84add1ac8623cc96b52223a1ef9946bcaa990ed7c7036674e228335f57ec9ed421ea4d6c1dd72d19b516215d9ac2c7c3ee'
@@ -330,13 +339,15 @@ b2sums=('48551bee71cd02815136fb8abe7da4464c2e17c89ef35cb0c0530c8b969fe12127ca97a
'SKIP'
'b69cf36cc5633e507866e67f59557646dda7d6ea436b145f3f3356c4b12e1300c94977a7d1214835f2476c94a30dd672076241b920d96d744fbc199539df506f'
'SKIP')
b2sums_x86_64=('11bfedf70dc9366a42b42573a3677e348fcd7b253ce13118036a75190e6c9372f9549589ff2dbfac5b976fc15d11a1b193baaee2135d331ca90f8a9a9a6e1462')
b2sums_x86_64=('5cbc3cba5e3abe4c77a54aeb2015b04e39dc80351accaa7c268da3e67577c0ad47109b8693bf2dee8d5366d0a0df3e6439c32d18fcf5ea07345bfcf517e5036d')
# https://www.kernel.org/pub/linux/kernel/v7.x/sha256sums.asc
sha256sums=('55ddf0df8325d9dad96fcff7bd93977d22e3f50af06527572af59b77c7632b78'
'SKIP'
'95f3e9209629044028373af987dc0e270a5a15acb8c8e49c5f05057220c75fe2'
'SKIP'
'6cf74fc3f28a751354187b6cf610c3e43cf9088b5f730b68dbb575828c3a7478'
'SKIP'
'a9171e731d08a454a50174889af8936fab962b33c37c67169b0cdf21b0b80821'
'SKIP'
'6a27e1b363f1bb133b9905f84b00e4d01885cac84858db46bdbf764849c9984b'
@@ -365,6 +376,8 @@ sha256sums=('55ddf0df8325d9dad96fcff7bd93977d22e3f50af06527572af59b77c7632b78'
'SKIP'
'66eb2c49dbf708cc781d411d0e44ed613480f0ef66d522272929d9cb7bb21e93'
'SKIP'
'718b40e15350049e03c0ed281b9257fca5432b8dec2e0e145e8b26507ee8892d'
'SKIP'
'b7ba949eea77e169aceb2c401d4eb83a7413aab6f15ee2a7ab1a96352f0aa12d'
'SKIP'
'341424b925d506869793686e22ea8f095a34048595ebebec409c0a7bbd346ca2'
@@ -403,6 +416,8 @@ sha256sums=('55ddf0df8325d9dad96fcff7bd93977d22e3f50af06527572af59b77c7632b78'
'SKIP'
'e303da14a3c8a15fd1cb45394138f03dd16e66d2ac0d1ebcd933977df937d771'
'SKIP'
'503eba8d7a80b978fccdaac798f57cbb6cd2b2b04fd04c46399daa004b6646dc'
'SKIP'
'1f0c958b64ba48b8dc8b5548e1ad1934b8d4903fc16fec15014759e3681ea275'
'SKIP'
'47994d576008a377de612ed77e6b2e7bc6b24ad3a30a6d157646d380ae323142'
+3 -2
View File
@@ -277,8 +277,9 @@ CONFIG_BOOT_CONFIG=y
# CONFIG_BOOT_CONFIG_EMBED is not set
CONFIG_CMDLINE_LOG_WRAP_IDEAL_LEN=1021
CONFIG_INITRAMFS_PRESERVE_MTIME=y
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y
# CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE is not set
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3=y
CONFIG_LD_ORPHAN_WARN=y
CONFIG_LD_ORPHAN_WARN_LEVEL="warn"
CONFIG_SYSCTL=y
@@ -11869,7 +11870,7 @@ CONFIG_INIT_STACK_ALL_ZERO=y
CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y
# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y
CONFIG_ZERO_CALL_USED_REGS=y
# CONFIG_ZERO_CALL_USED_REGS is not set
# end of Memory initialization
#
+3 -5
View File
@@ -1,7 +1,7 @@
# Maintainer: noureddinex
pkgname=lmstudio-bin
pkgver=0.4.24
pkgrel=2
pkgver=0.4.25
pkgrel=1
_build=1
_pkgver=${pkgver}-${_build}
pkgdesc="LM Studio - A desktop app for exploring and running large language models locally"
@@ -16,9 +16,7 @@ conflicts=(lmstudio)
source=("https://installers.lmstudio.ai/linux/x64/${_pkgver}/LM-Studio-${_pkgver}-x64.AppImage"
"lmstudio.png"
"lmstudio.desktop")
sha256sums=('17cb8ac6374f9182fc127efae20680265e3c4c17d96eadf147eb5fe6111a9353'
'9f791789c959a11316328692807737a5f1bc1c170ae99ec04c56bfd8ee8263e5'
'635dec12f3e3a57136b9e6fd7c2839ed6da7287fa55b482d64debf6eacf36baa')
sha256sums=('eca467446c833824697e8befab300fe5269fdf984e3ee4385fcbad8502f07c53' '9f791789c959a11316328692807737a5f1bc1c170ae99ec04c56bfd8ee8263e5' '635dec12f3e3a57136b9e6fd7c2839ed6da7287fa55b482d64debf6eacf36baa')
prepare() {
chmod +x "${srcdir}/${source[0]##*/}"
+3 -3
View File
@@ -1,6 +1,6 @@
# Maintainer: Jeff Dickey <releases@mise.jdx.dev>
pkgname=mise-bin
pkgver=2026.9.9
pkgver=2026.9.12
pkgrel=1
pkgdesc="dev tools, env vars, task runner"
arch=('x86_64' 'aarch64')
@@ -14,8 +14,8 @@ provides=('mise')
conflicts=('mise')
source_x86_64=("https://github.com/jdx/mise/releases/download/v${pkgver}/mise-v${pkgver}-linux-x64.tar.xz")
source_aarch64=("https://github.com/jdx/mise/releases/download/v${pkgver}/mise-v${pkgver}-linux-arm64.tar.xz")
sha256sums_x86_64=('ed3ee9b7331182e57f77230cf6af64d90e6e1a01e2c3e4749568ea335837c0fb')
sha256sums_aarch64=('09d0489db27c173d1427b4248e3e1fbf18b00ccc1d887d8746f1d8b311903a50')
sha256sums_x86_64=('30c79a0a24d8f0ad80e6c9b11ec54816be2a9b77e7eeae32c1267a5b9d34d3d7')
sha256sums_aarch64=('7bc2a5558b787a33f22e4b5955cfec58871ad3723658418ad3d2cdf5a0e693b9')
package() {
install -Dm755 "${srcdir}/mise/bin/mise" "${pkgdir}/usr/bin/mise"
@@ -0,0 +1,3 @@
{
"source": "local"
}
+40
View File
@@ -0,0 +1,40 @@
# Maintainer: David Heinemeier Hansson <david@hey.com>
pkgname=monologue
pkgver=0.1.0
pkgrel=3
pkgdesc='A simple, theme-synced webcam recorder for Omarchy'
arch=('x86_64' 'aarch64')
url='https://github.com/omacom/monologue'
license=('MIT')
install='monologue.install'
options=('!debug')
depends=(
'ffmpeg'
'hicolor-icon-theme'
'libpulse'
'qt6-base'
'qt6-declarative'
'qt6-multimedia>=6.8'
'xdg-desktop-portal'
)
makedepends=('gcc' 'make' 'pkgconf')
optdepends=('omacut: trim recordings directly from Monologue')
# Pin the published source until a tagged release is available.
_commit=23e0844f60feef2f9d2cf2c9d89f13eb0bf5adef
source=("$pkgname-$_commit.tar.gz::$url/archive/$_commit.tar.gz")
sha256sums=('1a04b9e47b29846e9135d110978f7f35c0274f7361729f0b6ac03796499c0ad6')
build() {
cd "$srcdir/$pkgname-$_commit"
./bin/build
}
package() {
cd "$srcdir/$pkgname-$_commit"
install -Dm755 build/monologue "$pkgdir/usr/bin/monologue"
install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
install -Dm644 pkgbuild/monologue.svg "$pkgdir/usr/share/icons/hicolor/scalable/apps/monologue.svg"
install -Dm644 pkgbuild/monologue.desktop "$pkgdir/usr/share/applications/monologue.desktop"
}
+12
View File
@@ -0,0 +1,12 @@
post_install() {
command -v update-desktop-database >/dev/null 2>&1 && update-desktop-database -q
command -v gtk-update-icon-cache >/dev/null 2>&1 && gtk-update-icon-cache -q -t -f usr/share/icons/hicolor
}
post_upgrade() {
post_install
}
post_remove() {
post_install
}
@@ -0,0 +1,6 @@
{
"source": "local",
"channels": [
"edge"
]
}
+12
View File
@@ -0,0 +1,12 @@
Copyright Arch Linux Contributors
Permission to use, copy, modify, and/or distribute this software for
any purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL
WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE
FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY
DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+240
View File
@@ -0,0 +1,240 @@
# Maintainer: Sven-Hendrik Haase <svenstaro@archlinux.org>
# Maintainer: Peter Jung <ptr1337@archlinux.org>
# Contributor: James Rayner <iphitus@gmail.com>
# Contributor: Vasiliy Stelmachenok <ventureo@yandex.ru>
# Contributor: Thomas Baechler <thomas@archlinux.org>
pkgbase=nvidia-utils
pkgname=('nvidia-utils')
pkgver=615.71.09
pkgrel=1.1
arch=('aarch64')
url="https://www.nvidia.com/"
license=('LicenseRef-NVIDIA-Driver-License-Agreement')
options=('!strip')
source_aarch64=("https://download.nvidia.com/XFree86/Linux-aarch64/${pkgver}/NVIDIA-Linux-aarch64-${pkgver}.run")
source=('nvidia-drm-outputclass.conf'
'nvidia-utils.sysusers'
'nvidia.rules'
'systemd-homed-override.conf'
'systemd-suspend-override.conf'
'nvidia-utils.conf')
sha512sums=('de7116c09f282a27920a1382df84aa86f559e537664bb30689605177ce37dc5067748acf9afd66a3269a6e323461356592fdfc624c86523bf105ff8fe47d3770'
'1bcf2c6ee71686c0d32625e746ec8c0f7cf42fc63c76c3076ff2526b2661e8b9e9f76eaa2c4b213c7cc437a6f06006cc07672c4974d7f4515b2de2fd7c47a891'
'7f1457dc454144fdece5abf795744c4c948a13feb8d49c20e2a1b8b8973e86f980233b521485d73eb039c396688f287a3a5b3de8cb1fb20ed70cc62e4ba91250'
'a0183adce78e40853edf7e6b73867e7a8ea5dabac8e8164e42781f64d5232fbe869f850ab0697c3718ebced5cde760d0e807c05da50a982071dfe1157c31d6b8'
'55def6319f6abb1a4ccd28a89cd60f1933d155c10ba775b8dfa60a2dc5696b4b472c14b252dc0891f956e70264be87c3d5d4271e929a4fc4b1a68a6902814cee'
'a380e5faeb19293c90f613cd92bcd1cef7597ee52f79f03ffdffe5d37d2badc05b6bdb4c26a9d610868ae4c16eafd56e7d16f769e849dc0335d0d248c6235fe9')
sha512sums_aarch64=('316f90d5e0ba74db3a79a91464955240aa2c14e986653067fe902c132c771898d2866afc4e6498069b33665596e17b1b5282980936e1e6e31cabb53787e70196')
_pkg=NVIDIA-Linux-${CARCH}-${pkgver}
create_links() {
# create soname links
find "$pkgdir" -type f -name '*.so*' ! -path '*xorg/*' -print0 | while read -d $'\0' _lib; do
_soname=$(dirname "${_lib}")/$(readelf -d "${_lib}" | grep -Po 'SONAME.*: \[\K[^]]*' || true)
_base=$(echo ${_soname} | sed -r 's/(.*)\.so.*/\1.so/')
[[ -e "${_soname}" ]] || ln -s $(basename "${_lib}") "${_soname}"
[[ -e "${_base}" ]] || ln -s $(basename "${_soname}") "${_base}"
done
}
prepare() {
sh ${_pkg}.run --extract-only
cd ${_pkg}
bsdtar -xf nvidia-persistenced-init.tar.bz2
}
package_nvidia-utils() {
pkgdesc="NVIDIA drivers utilities"
depends=('libglvnd' 'egl-wayland' 'egl-wayland2' 'egl-gbm' 'egl-x11')
optdepends=('nvidia-settings: configuration tool'
'xorg-server: Xorg support'
'xorg-server-devel: nvidia-xconfig'
'opencl-nvidia: OpenCL support')
conflicts=('nvidia-libgl')
provides=('vulkan-driver' 'opengl-driver' 'nvidia-libgl')
replaces=('nvidia-libgl')
install="${pkgname}.install"
cd "${_pkg}"
# Check http://us.download.nvidia.com/XFree86/Linux-x86_64/${pkgver}/README/installedcomponents.html
# for hints on what needs to be installed where.
# X driver
install -Dm755 nvidia_drv.so "${pkgdir}/usr/lib/xorg/modules/drivers/nvidia_drv.so"
# Wayland/GBM
mkdir -p "${pkgdir}/usr/lib/gbm"
ln -sr "${pkgdir}/usr/lib/libnvidia-allocator.so.${pkgver}" "${pkgdir}/usr/lib/gbm/nvidia-drm_gbm.so"
# firmware
install -Dm644 -t "${pkgdir}/usr/lib/firmware/nvidia/${pkgver}/" firmware/*.bin
# GLX extension module for X
install -Dm755 "libglxserver_nvidia.so.${pkgver}" "${pkgdir}/usr/lib/nvidia/xorg/libglxserver_nvidia.so.${pkgver}"
# Ensure that X finds glx
ln -s "libglxserver_nvidia.so.${pkgver}" "${pkgdir}/usr/lib/nvidia/xorg/libglxserver_nvidia.so.1"
ln -s "libglxserver_nvidia.so.${pkgver}" "${pkgdir}/usr/lib/nvidia/xorg/libglxserver_nvidia.so"
install -Dm755 "libGLX_nvidia.so.${pkgver}" "${pkgdir}/usr/lib/libGLX_nvidia.so.${pkgver}"
# OpenGL libraries
install -Dm755 "libEGL_nvidia.so.${pkgver}" "${pkgdir}/usr/lib/libEGL_nvidia.so.${pkgver}"
install -Dm755 "libGLESv1_CM_nvidia.so.${pkgver}" "${pkgdir}/usr/lib/libGLESv1_CM_nvidia.so.${pkgver}"
install -Dm755 "libGLESv2_nvidia.so.${pkgver}" "${pkgdir}/usr/lib/libGLESv2_nvidia.so.${pkgver}"
install -Dm644 "10_nvidia.json" "${pkgdir}/usr/share/glvnd/egl_vendor.d/10_nvidia.json"
# OpenGL core library
install -Dm755 "libnvidia-glcore.so.${pkgver}" "${pkgdir}/usr/lib/libnvidia-glcore.so.${pkgver}"
install -Dm755 "libnvidia-eglcore.so.${pkgver}" "${pkgdir}/usr/lib/libnvidia-eglcore.so.${pkgver}"
install -Dm755 "libnvidia-glsi.so.${pkgver}" "${pkgdir}/usr/lib/libnvidia-glsi.so.${pkgver}"
if [[ $CARCH == aarch64 ]]; then
# Required by the ARM EGL/GLX libraries.
install -Dm755 "libnvidia-rmapi-tegra.so.${pkgver}" "${pkgdir}/usr/lib/libnvidia-rmapi-tegra.so.${pkgver}"
fi
# misc
install -Dm755 "libnvidia-api.so.1" "${pkgdir}/usr/lib/libnvidia-api.so.1"
install -Dm755 "libnvidia-fbc.so.${pkgver}" "${pkgdir}/usr/lib/libnvidia-fbc.so.${pkgver}"
install -Dm755 "libnvidia-encode.so.${pkgver}" "${pkgdir}/usr/lib/libnvidia-encode.so.${pkgver}"
install -Dm755 "libnvidia-cfg.so.${pkgver}" "${pkgdir}/usr/lib/libnvidia-cfg.so.${pkgver}"
install -Dm755 "libnvidia-ml.so.${pkgver}" "${pkgdir}/usr/lib/libnvidia-ml.so.${pkgver}"
install -Dm755 "libnvidia-fmdrv.so.${pkgver}" "${pkgdir}/usr/lib/libnvidia-fmdrv.so.${pkgver}"
install -Dm755 "libnvidia-imex.so.${pkgver}" "${pkgdir}/usr/lib/libnvidia-imex.so.${pkgver}"
install -Dm755 "libnvidia-glvkspirv.so.${pkgver}" "${pkgdir}/usr/lib/libnvidia-glvkspirv.so.${pkgver}"
install -Dm755 "libnvidia-allocator.so.${pkgver}" "${pkgdir}/usr/lib/libnvidia-allocator.so.${pkgver}"
install -Dm755 "libnvidia-gpucomp.so.${pkgver}" "${pkgdir}/usr/lib/libnvidia-gpucomp.so.${pkgver}"
# Vulkan ICD
install -Dm644 "nvidia_icd.json" "${pkgdir}/usr/share/vulkan/icd.d/nvidia_icd.json"
install -Dm644 "nvidia_layers.json" "${pkgdir}/usr/share/vulkan/implicit_layer.d/nvidia_layers.json"
if [[ $CARCH = x86_64 ]]; then
# VulkanSC
install -D -m755 nvidia-pcc -t "${pkgdir}/usr/bin"
install -D -m755 "libnvidia-vksc-core.so.${pkgver}" -t "${pkgdir}/usr/lib"
install -D -m644 nvidia_icd_vksc.json -t "${pkgdir}/usr/share/vulkansc/icd.d"
fi
# VDPAU
install -Dm755 "libvdpau_nvidia.so.${pkgver}" "${pkgdir}/usr/lib/vdpau/libvdpau_nvidia.so.${pkgver}"
# nvidia-tls library
install -Dm755 "libnvidia-tls.so.${pkgver}" "${pkgdir}/usr/lib/libnvidia-tls.so.${pkgver}"
# CUDA
install -Dm755 "libcuda.so.${pkgver}" "${pkgdir}/usr/lib/libcuda.so.${pkgver}"
install -Dm755 "libnvcuvid.so.${pkgver}" "${pkgdir}/usr/lib/libnvcuvid.so.${pkgver}"
install -Dm755 "libcudadebugger.so.${pkgver}" "${pkgdir}/usr/lib/libcudadebugger.so.${pkgver}"
# NVVM Compiler library loaded by the CUDA driver to do JIT link-time-optimization
install -Dm644 "libnvidia-nvvm.so.${pkgver}" "${pkgdir}/usr/lib/libnvidia-nvvm.so.${pkgver}"
install -Dm755 "libnvidia-nvvm70.so.4" "${pkgdir}/usr/lib/libnvidia-nvvm70.so.4"
# PTX JIT Compiler (Parallel Thread Execution (PTX) is a pseudo-assembly language for CUDA)
install -Dm755 "libnvidia-ptxjitcompiler.so.${pkgver}" "${pkgdir}/usr/lib/libnvidia-ptxjitcompiler.so.${pkgver}"
# raytracing
install -Dm755 "nvoptix.bin" "${pkgdir}/usr/share/nvidia/nvoptix.bin"
install -Dm755 "libnvoptix.so.${pkgver}" "${pkgdir}/usr/lib/libnvoptix.so.${pkgver}"
install -Dm755 "libnvidia-rtcore.so.${pkgver}" "${pkgdir}/usr/lib/libnvidia-rtcore.so.${pkgver}"
# NGX
install -Dm755 nvidia-ngx-updater "${pkgdir}/usr/bin/nvidia-ngx-updater"
install -Dm755 "libnvidia-ngx.so.${pkgver}" "${pkgdir}/usr/lib/libnvidia-ngx.so.${pkgver}"
if [[ $CARCH = x86_64 ]]; then
install -Dm755 _nvngx.dll "${pkgdir}/usr/lib/nvidia/wine/_nvngx.dll"
install -Dm755 nvngx.dll "${pkgdir}/usr/lib/nvidia/wine/nvngx.dll"
install -Dm755 nvngx_dlssg.dll "${pkgdir}/usr/lib/nvidia/wine/nvngx_dlssg.dll"
fi
# Optical flow
install -Dm755 "libnvidia-opticalflow.so.${pkgver}" "${pkgdir}/usr/lib/libnvidia-opticalflow.so.${pkgver}"
if [[ $CARCH = x86_64 ]]; then
# Cryptography library wrapper
install -Dm755 "libnvidia-pkcs11.so.${pkgver}" "${pkgdir}/usr/lib/libnvidia-pkcs11.so.${pkgver}"
install -Dm755 "libnvidia-pkcs11-openssl3.so.${pkgver}" "${pkgdir}/usr/lib/libnvidia-pkcs11-openssl3.so.${pkgver}"
fi
# Sandboxhelper
install -Dm755 "libnvidia-sandboxutils.so.${pkgver}" "${pkgdir}/usr/lib/libnvidia-sandboxutils.so.${pkgver}"
# Present Helper
install -Dm755 "libnvidia-present.so.${pkgver}" "${pkgdir}/usr/lib/libnvidia-present.so.${pkgver}"
# https://github.com/microsoft/TileIR
install -Dm755 "libnvidia-tileiras.so.${pkgver}" "${pkgdir}/usr/lib/libnvidia-tileiras.so.${pkgver}"
# Debug
install -Dm755 nvidia-debugdump "${pkgdir}/usr/bin/nvidia-debugdump"
# nvidia-xconfig
install -Dm755 nvidia-xconfig "${pkgdir}/usr/bin/nvidia-xconfig"
install -Dm644 nvidia-xconfig.1.gz "${pkgdir}/usr/share/man/man1/nvidia-xconfig.1.gz"
# nvidia-bug-report
install -Dm755 nvidia-bug-report.sh "${pkgdir}/usr/bin/nvidia-bug-report.sh"
# nvidia-smi
install -Dm755 nvidia-smi "${pkgdir}/usr/bin/nvidia-smi"
install -Dm644 nvidia-smi.1.gz "${pkgdir}/usr/share/man/man1/nvidia-smi.1.gz"
# nvidia-cuda-mps
install -Dm755 nvidia-cuda-mps-server "${pkgdir}/usr/bin/nvidia-cuda-mps-server"
install -Dm755 nvidia-cuda-mps-control "${pkgdir}/usr/bin/nvidia-cuda-mps-control"
install -Dm644 nvidia-cuda-mps-control.1.gz "${pkgdir}/usr/share/man/man1/nvidia-cuda-mps-control.1.gz"
# nvidia-modprobe
# This should be removed if nvidia fixed their uvm module!
install -Dm4755 nvidia-modprobe "${pkgdir}/usr/bin/nvidia-modprobe"
install -Dm644 nvidia-modprobe.1.gz "${pkgdir}/usr/share/man/man1/nvidia-modprobe.1.gz"
# nvidia-persistenced
install -Dm755 nvidia-persistenced "${pkgdir}/usr/bin/nvidia-persistenced"
install -Dm644 nvidia-persistenced.1.gz "${pkgdir}/usr/share/man/man1/nvidia-persistenced.1.gz"
install -Dm644 nvidia-persistenced-init/systemd/nvidia-persistenced.service.template "${pkgdir}/usr/lib/systemd/system/nvidia-persistenced.service"
sed -i 's/__USER__/nvidia-persistenced/' "${pkgdir}/usr/lib/systemd/system/nvidia-persistenced.service"
# application profiles
install -Dm644 "nvidia-application-profiles-${pkgver}-rc" "${pkgdir}/usr/share/nvidia/nvidia-application-profiles-${pkgver}-rc"
install -Dm644 "nvidia-application-profiles-${pkgver}-key-documentation" "${pkgdir}/usr/share/nvidia/nvidia-application-profiles-${pkgver}-key-documentation"
install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/nvidia-utils/LICENSE"
install -Dm644 README.txt "${pkgdir}/usr/share/doc/nvidia/README"
install -Dm644 NVIDIA_Changelog "${pkgdir}/usr/share/doc/nvidia/NVIDIA_Changelog"
cp -r html "${pkgdir}/usr/share/doc/nvidia/"
ln -s nvidia "${pkgdir}/usr/share/doc/nvidia-utils"
# new power management support
install -Dm644 systemd/system/*.service -t "${pkgdir}/usr/lib/systemd/system"
install -Dm755 systemd/system-sleep/nvidia "${pkgdir}/usr/lib/systemd/system-sleep/nvidia"
install -Dm755 systemd/nvidia-sleep.sh "${pkgdir}/usr/bin/nvidia-sleep.sh"
install -Dm755 nvidia-powerd "${pkgdir}/usr/bin/nvidia-powerd"
install -Dm644 dlsnetparams.csv "${pkgdir}/usr/share/nvidia/nvidia-powerd/dlsnetparams.csv"
install -Dm644 nvidia-dbus.conf "${pkgdir}/usr/share/dbus-1/system.d/nvidia-dbus.conf"
install -Dm644 "${srcdir}/systemd-homed-override.conf" "${pkgdir}/usr/lib/systemd/system/systemd-homed.service.d/10-nvidia-no-freeze-session.conf"
install -Dm644 "${srcdir}/systemd-suspend-override.conf" "${pkgdir}/usr/lib/systemd/system/systemd-suspend.service.d/10-nvidia-no-freeze-session.conf"
install -Dm644 "${srcdir}/systemd-suspend-override.conf" "${pkgdir}/usr/lib/systemd/system/systemd-suspend-then-hibernate.service.d/10-nvidia-no-freeze-session.conf"
install -Dm644 "${srcdir}/systemd-suspend-override.conf" "${pkgdir}/usr/lib/systemd/system/systemd-hibernate.service.d/10-nvidia-no-freeze-session.conf"
install -Dm644 "${srcdir}/systemd-suspend-override.conf" "${pkgdir}/usr/lib/systemd/system/systemd-hybrid-sleep.service.d/10-nvidia-no-freeze-session.conf"
# distro specific files must be installed in /usr/share/X11/xorg.conf.d
install -Dm644 "${srcdir}/nvidia-drm-outputclass.conf" "${pkgdir}/usr/share/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf"
install -Dm644 "${srcdir}/nvidia-utils.sysusers" "${pkgdir}/usr/lib/sysusers.d/$pkgname.conf"
install -Dm644 "${srcdir}/nvidia.rules" "$pkgdir"/usr/lib/udev/rules.d/60-nvidia.rules
# Enable kernel suspend notifiers for open modules and override TemporaryFilePath
# from default /tmp to /var/tmp
install -Dm644 "${srcdir}/nvidia-utils.conf" "${pkgdir}/usr/lib/modprobe.d/nvidia-utils.conf"
# Lists NVIDIA driver files for container runtimes like nvidia-container-toolkit
install -Dm644 sandboxutils-filelist.json "${pkgdir}/usr/share/nvidia/files.d/sandboxutils-filelist.json"
create_links
}
+36
View File
@@ -0,0 +1,36 @@
# Temporary NVIDIA ARM packaging correction
Carries Arch Linux's `nvidia-utils` recipe at
[f9ae10b379f8b1d0832ec92bca1c12072aa123e9](https://gitlab.archlinux.org/archlinux/packaging/packages/nvidia-utils/-/commit/f9ae10b379f8b1d0832ec92bca1c12072aa123e9),
restricted to aarch64 and the nvidia-utils output. Upstream contributor credits,
packaging license and support files are retained. The OpenCL/DKMS split outputs
and their unused kernel source preparation are omitted.
NVIDIA 615.71.09's ARM EGL/GLX libraries require
`libnvidia-rmapi-tegra.so.615.71.09`. NVIDIA includes it in its archive, but the
Arch recipe omits it. Adding that library and its generated symlink fixes
Hyprland's EGL initialization failure on DGX Spark. No rendering overrides are
installed. The correction passed package installation, normal desktop login
and reboot on a Spark running kernel 7.2.6 with NVIDIA 615.71.09.
This recipe builds only for edge, using release 1.1 to sit above Arch's broken
release 1 and below a prospective fixed release 2. There is deliberately no
automatic NVIDIA version watcher: driver userspace must remain compatible with
the kernel package supplied by Arch Linux ARM. Check both packages before each
release; a stale overlay must not hold back a driver transition.
## Delivery and removal
Publishing requires an aarch64 edge build. Consumers must put `[omarchy]`
before `[extra]` in pacman.conf for unqualified installation and updates to
select this package. A higher pkgrel alone does not overcome repository order.
The tested Spark has that ordering; this PR does not change shared runtime or
installer configuration. Deployment must verify that ordering on the intended
ARM installation/update paths. This is not a claim of fresh-ISO validation.
The upstream Arch submission is pending account approval. Once Arch Linux ARM
ships the missing library, validate that package on the Spark, remove this
recipe AND the published overlay package/database entry, and verify that normal
updates select the fixed Arch package. A higher Arch version alone does not
bypass an earlier repository's stale package. Do not use an epoch or rename the
package to prevent that transition.
@@ -0,0 +1,8 @@
Section "OutputClass"
Identifier "nvidia"
MatchDriver "nvidia-drm"
Driver "nvidia"
Option "AllowEmptyInitialConfiguration"
ModulePath "/usr/lib/nvidia/xorg"
ModulePath "/usr/lib/xorg/modules"
EndSection
+15
View File
@@ -0,0 +1,15 @@
# Blacklist nouveau and nova
blacklist nouveau
blacklist nova_core
blacklist nova_drm
# Make sure that all modules are loaded after the main one.
softdep nvidia post: nvidia-uvm nvidia-drm
# https://download.nvidia.com/XFree86/Linux-x86_64/595.45.04/README/powermanagement.html
# Enable Suspend Notifiers for faster and more modern suspend
options nvidia NVreg_UseKernelSuspendNotifiers=1
#
# The destination should not be using tmpfs, so we prefer
# /var/tmp instead of /tmp
options nvidia NVreg_TemporaryFilePath=/var/tmp
@@ -0,0 +1,21 @@
post_upgrade() {
# With 595+ open kernel modules, video memory preservation is handled by
# kernel suspend notifiers, making the nvidia suspend/hibernate services unnecessary.
# Disable them for users upgrading from older versions.
if (( $(vercmp $2 595.58.03-1) < 0)); then
for service in nvidia-resume nvidia-hibernate nvidia-suspend nvidia-suspend-then-hibernate; do
if systemctl is-enabled --quiet $service 2>/dev/null; then
echo "Disabling $service (no longer needed with open kernel modules)..."
systemctl disable $service
fi
done
fi
}
pre_remove() {
for service in nvidia-resume nvidia-hibernate nvidia-suspend nvidia-suspend-then-hibernate; do
if systemctl is-enabled --quiet $service 2>/dev/null; then
systemctl disable $service
fi
done
}
@@ -0,0 +1 @@
u! nvidia-persistenced 143 'NVIDIA Persistence Daemon'
+7
View File
@@ -0,0 +1,7 @@
# Device nodes are created by nvidia-modprobe, which is called by the nvidia DDX.
# In case the DDX is not started, the device nodes are never created, so call
# nvidia-modprobe in the udev rules to cover the Wayland/EGLStream and compute
# case without a started display. In the case where vfio-pci is used
# nvidia-modprobe should not be invoked.
ACTION=="add", SUBSYSTEM=="module", KERNEL=="nvidia_drm", TEST!="/dev/nvidia-uvm", \
RUN+="/usr/bin/nvidia-modprobe -c0 -u"
@@ -0,0 +1,2 @@
[Service]
Environment="SYSTEMD_HOME_LOCK_FREEZE_SESSION=false"
@@ -0,0 +1,2 @@
[Service]
Environment="SYSTEMD_SLEEP_FREEZE_USER_SESSIONS=false"
+2 -2
View File
@@ -1,5 +1,5 @@
pkgname=omakade
pkgver=1.9.2
pkgver=1.10.0
pkgrel=1
pkgdesc='A beautiful, local-first game library for Omarchy'
arch=('x86_64' 'aarch64')
@@ -11,7 +11,7 @@ depends=('glib2' 'hicolor-icon-theme' 'libsecret' 'libzip' 'openssl' 'qt6-base'
makedepends=('cmake' 'ninja' 'pkgconf' 'wayland-protocols')
options=('!debug')
source=("$pkgname-$pkgver.tar.gz::https://github.com/btsouth/omakade/releases/download/v$pkgver/$pkgname-$pkgver.tar.gz")
sha256sums=('4c0ba7eecc036b959b34a8068f5923e8927e59b8ee2f0398d470cd933343c4fc')
sha256sums=('01a4c1aa35c51aba54f57fd0d4eab4a00a14ca2bd4d1b6163264b8ba6fed5b55')
build() {
cmake -S "$pkgname-$pkgver" -B build -G Ninja \
@@ -0,0 +1,12 @@
{
"source": "local",
"release_ring": "fast",
"min_release_age": "24h",
"upstream": {
"github": "llstrk/omarchy-billboard-generator",
"checksums": "SHA256SUMS",
"assets": {
"any": "omarchy-billboard-generator.tar.gz"
}
}
}
@@ -0,0 +1,82 @@
# Maintainer: David Heinemeier Hansson <david@hey.com>
# Upstream ships a release archive plus a SHA256SUMS manifest, which is what
# the upstream feed in .omarchy/package.json follows. Chromium and ffmpeg are
# runtime dependencies found on PATH, never downloaded.
pkgname=omarchy-billboard-generator
pkgver=0.2.0
pkgrel=1
pkgdesc='Desktop app and CLI that renders animated OMARCHY domain videos'
arch=('any')
url='https://github.com/llstrk/omarchy-billboard-generator'
# MIT covers the project's own code and Apache-2.0 and 0BSD the vendored npm
# dependencies. The Omarchy wordmark, website palettes, taglines and the ttfx
# animation runtime are Omarchy's own material carried over from omarchy-site,
# and PROVENANCE.md says which file is which.
license=('MIT' 'Apache-2.0' '0BSD' 'OFL-1.1' 'LicenseRef-Omarchy')
depends=('nodejs>=22' 'chromium' 'ffmpeg' 'xdg-utils')
makedepends=('npm')
source=("${pkgname}-${pkgver}.tar.gz::${url}/releases/download/v${pkgver}/${pkgname}.tar.gz")
sha256sums=('f499dfc1201ed3d6b8fba271496fcd4c8fc6301427f4f2fc53aab8d9c3f64f67')
# Pure JavaScript and WebAssembly; nothing here is an ELF to strip.
options=('!strip' '!debug')
_appdir="/usr/lib/${pkgname}"
build() {
cd "${srcdir}/${pkgname}"
# The same install the upstream release installer performs: locked production
# dependencies, no lifecycle scripts.
npm ci --omit=dev --ignore-scripts --cache "${srcdir}/npm-cache"
}
check() {
cd "${srcdir}/${pkgname}"
# The catalogs prefer a synced snapshot in the user data directory, so point
# them at an empty one: the build must read the bundled data, not whatever
# the builder's home happens to hold.
export BILLBOARD_DATA_DIR="${srcdir}/data-home" BILLBOARD_CACHE_DIR="${srcdir}/cache-home"
# Upstream's own startup check, plus the catalogs that load the bundled data.
node bin/omarchy-billboard --help >/dev/null
node bin/omarchy-billboard --list-themes >/dev/null
node bin/omarchy-billboard --list-languages >/dev/null
node bin/omarchy-billboard --list-animations >/dev/null
node bin/omarchy-billboard-app --help >/dev/null
}
package() {
cd "${srcdir}/${pkgname}"
install -dm755 "${pkgdir}${_appdir}"
# Only what runs: no tests, release scripts, CI, or the curl|bash installer.
cp -a bin src app web assets data examples node_modules package.json "${pkgdir}${_appdir}/"
# The entry points resolve their sources through the real path of the
# script, so a symlink is enough and keeps the launcher's node on PATH.
install -dm755 "${pkgdir}/usr/bin"
ln -s "${_appdir}/bin/omarchy-billboard" "${pkgdir}/usr/bin/omarchy-billboard"
ln -s "${_appdir}/bin/omarchy-billboard-app" "${pkgdir}/usr/bin/omarchy-billboard-app"
# Written here rather than shipped as a second source: sync-upstream rewrites
# sha256sums wholesale from the release manifest, so a local file's checksum
# would not survive the first version bump. The WM class is what Chromium
# derives for this app-mode window, so the launcher's icon follows it.
install -dm755 "${pkgdir}/usr/share/applications"
cat > "${pkgdir}/usr/share/applications/${pkgname}.desktop" <<'DESKTOP'
[Desktop Entry]
Version=1.0
Type=Application
Name=Omarchy Billboard Generator
Comment=Create animated Omarchy domain videos locally
Exec=omarchy-billboard-app
Icon=omarchy-billboard-generator
Terminal=false
Categories=AudioVideo;Video;
StartupWMClass=chrome-127.0.0.1__omarchy-billboard-Default
DESKTOP
install -Dm644 app/icon.svg "${pkgdir}/usr/share/icons/hicolor/scalable/apps/${pkgname}.svg"
install -Dm644 -t "${pkgdir}/usr/share/doc/${pkgname}" README.md THEMES.md PROVENANCE.md
install -Dm644 -t "${pkgdir}/usr/share/licenses/${pkgname}" LICENSE PROVENANCE.md assets/fonts/*-OFL.txt
}
+1 -1
View File
@@ -1,6 +1,6 @@
# Maintainer: Ryan Hughes <ryan@omarchy.org>
pkgname=omarchy-nvim
pkgver=2026.8.13
pkgver=2026.9.21
pkgrel=1
pkgdesc="Pre-built LazyVim configuration with cached plugins"
arch=('any')
@@ -77,7 +77,7 @@ return {
priority = 1000,
},
{
"gthelding/monokai-pro.nvim",
"loctvl842/monokai-pro.nvim",
lazy = true,
priority = 1000,
},
@@ -0,0 +1,3 @@
{
"source": "local"
}
+20
View File
@@ -0,0 +1,20 @@
Copyright (c) David Heinemeier Hansson
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.
+25
View File
@@ -0,0 +1,25 @@
pkgname=omarchy-steam-fex
pkgver=1.0.0
pkgrel=2
pkgdesc='Steam launcher with login workarounds for Apple Silicon using muvm and FEX'
arch=('aarch64')
url='https://github.com/omacom/omarchy-pkgs/tree/master/pkgbuilds/omarchy-steam-fex'
license=('MIT')
checkdepends=('python')
source=('omarchy-launch-steam' 'LICENSE' 'test-launcher.py')
sha256sums=('d89559ef88b3589e7d972b44a4a29e418605542f44f2756afd24ed3ce3227609'
'717ba1949502290f8e47688ae2e323acd06c8ca47aec9f7596b15f678c1af4a2'
'1d31b9ed09292b79dc86d9d4b3fff01d19e8210fdc5e3b13e78b846671808ed5')
check() {
python test-launcher.py
}
package() {
# These are runtime-only dependencies; the Asahi stack is not needed to
# assemble or test the scripts in a standard Arch Linux ARM builder.
depends=('bash' 'coreutils' 'python' 'steam' 'muvm' 'FEX-Emu')
install -Dm755 omarchy-launch-steam "$pkgdir/usr/bin/omarchy-launch-steam"
install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
}
+17
View File
@@ -0,0 +1,17 @@
# Steam launcher for Apple Silicon
`omarchy-steam-fex` provides `omarchy-launch-steam` for the Asahi Linux `steam`, `muvm`, and `FEX-Emu` stack. Those runtime packages come from `asahi-alarm`; `FEX-Emu` provides `FEXBash`. The package is restricted to aarch64 and assumes that stack's `~/.local/share/fex-steam/steam-launcher/bin_steam.sh` layout.
The launcher runs Steam through `muvm` and `FEXBash` with the CEF occlusion workaround. Once Steam's client files are present, it also disables bootstrap verification and repair and patches the Steam UI network initialization block that can leave login waiting indefinitely. Initial bootstrap keeps the normal bootstrap flags. If the FEX launcher is unavailable, it falls back to `steam`.
`omarchy-launch-steam --prepare` writes the current user's desktop override with `Exec=omarchy-launch-steam %U` and applies the same UI patch. Each matching chunk is backed up as `.omarchy-bak` before its first patch; existing backups are preserved, and already-patched and unrecognized chunks are left unchanged. The regex depends on Valve's client code and may need updating when that code changes.
Only the launcher and license are installed. Steam's system desktop entry and downloaded client files remain outside this package's ownership; preparation runs as the desktop user, never in a package installation hook. A downstream Omarchy package that already owns the launcher must release that path before this package is installed, or in the same upgrade transaction.
Runtime dependencies are declared in `package()` so assembling the scripts does not require the Asahi stack in the build container. They remain required dependencies in the resulting package. `check()` runs the offline launcher tests using temporary homes and mocked Steam/muvm commands. To run them directly:
```sh
python pkgbuilds/omarchy-steam-fex/test-launcher.py
```
The launcher was extracted from [omarchy-mx-mac commit 5e8e1188](https://github.com/scottjones/omarchy-mx-mac/commit/5e8e1188e39fae70cf4f7bda1a1d85d66eccae51), credited to Scott Jones, dl-alexandre, and Santeri Hernejärvi. The extraction replaces `omarchy-cmd-present` with `command -v`, removing the dependency on Omarchy itself. The launcher matches the version published in [omarchy-pkgs-aarch64](https://github.com/omarchy-mac/omarchy-pkgs-aarch64/tree/main/pkgbuilds/omarchy-steam-fex).
+110
View File
@@ -0,0 +1,110 @@
#!/bin/bash
# omarchy:summary=Launch Steam, applying Asahi muvm login workarounds on Apple Silicon
# omarchy:group=launch
# omarchy:args=[--prepare|steam-args...]
set -euo pipefail
steam_root="$HOME/.local/share/Steam"
write_steam_desktop() {
local app_dir="$HOME/.local/share/applications"
mkdir -p "$app_dir"
cat >"$app_dir/steam.desktop" <<'EOF'
[Desktop Entry]
Name=Steam
Comment=Application for managing and playing games on Steam
Exec=omarchy-launch-steam %U
Icon=steam
Terminal=false
Type=Application
Categories=Network;FileTransfer;Game;
MimeType=x-scheme-handler/steam;x-scheme-handler/steamlink;
EOF
}
steam_client_ready() {
[[ -d $steam_root/steamui ]] && compgen -G "$steam_root/*/steamui.so" >/dev/null
}
launch_fex_steam() {
local launcher="$1"
shift
exec muvm -- FEXBash -c 'exec "$@"' omarchy-steam "$launcher" "$@"
}
patch_steam_ui() {
local steamui="$steam_root/steamui"
[[ -d $steamui ]] || return 0
python3 - "$steamui" <<'PY'
import pathlib
import re
import sys
steamui = pathlib.Path(sys.argv[1])
pattern = re.compile(
r"const t=\(0,(\w+)\.(\w+)\)\(\"System\.Network\.RegisterForDeviceChanges\"\);"
r"t&&SteamClient\.System\.Network\.RegisterForDeviceChanges\(this\.OnNetworkDevicesChanged\),"
r"\(0,\1\.\2\)\(\"System\.Network\.GetProxyInfo\"\)&&SteamClient\.System\.Network\.GetProxyInfo\(\)\.then\(e=>this\.m_proxyInfo=e\),"
r"\(0,\1\.\2\)\(\"System\.Network\.RegisterForConnectivityTestChanges\"\)&&SteamClient\.System\.Network\.RegisterForConnectivityTestChanges\(this\.OnConnectivityTestStateChanged\),"
r"t\|\|\(this\.m_bIsAwaitingInitialNetworkState=!1\)"
)
replacement = (
r'const t=(0,\1.\2)("System.Network.RegisterForDeviceChanges")'
r'&&!!(SteamClient.System&&SteamClient.System.Network&&"function"==typeof SteamClient.System.Network.RegisterForDeviceChanges);'
r'try{t&&SteamClient.System.Network.RegisterForDeviceChanges(this.OnNetworkDevicesChanged)}catch(e){}'
r'try{(0,\1.\2)("System.Network.GetProxyInfo")&&SteamClient.System.Network.GetProxyInfo().then(e=>this.m_proxyInfo=e)}catch(e){}'
r'try{(0,\1.\2)("System.Network.RegisterForConnectivityTestChanges")&&SteamClient.System.Network.RegisterForConnectivityTestChanges(this.OnConnectivityTestStateChanged)}catch(e){}'
r'this.m_bIsAwaitingInitialNetworkState=!1,this.m_bIsConnectedToANetwork=!0'
)
for path in sorted(steamui.glob("chunk~*.js")):
text = path.read_text(errors="replace")
if "m_bIsConnectedToANetwork=!0" in text and "RegisterForDeviceChanges" in text:
continue
updated, count = pattern.subn(replacement, text, count=1)
if count != 1:
continue
backup = path.with_suffix(path.suffix + ".omarchy-bak")
if not backup.exists():
backup.write_text(text)
path.write_text(updated)
PY
}
prepare_asahi() {
[[ $(uname -m) == aarch64 ]] || return 0
write_steam_desktop
patch_steam_ui
}
if [[ ${1:-} == --prepare ]]; then
prepare_asahi
exit 0
fi
if [[ $(uname -m) == aarch64 ]] && command -v muvm >/dev/null && command -v FEXBash >/dev/null; then
launcher="$HOME/.local/share/fex-steam/steam-launcher/bin_steam.sh"
if [[ -f $launcher ]]; then
steam_args=(-cef-force-occlusion)
if steam_client_ready; then
prepare_asahi
steam_args+=(
-noverifyfiles
-nobootstrapupdate
-skipinitialbootstrap
-norepairfiles
)
else
write_steam_desktop
fi
launch_fex_steam "$launcher" "${steam_args[@]}" "$@"
fi
fi
exec steam "$@"
@@ -0,0 +1,196 @@
#!/usr/bin/env python3
"""Offline launcher tests: fake Steam/muvm/FEX, real Bash and Python, temporary HOME."""
import json
import os
from pathlib import Path
import shutil
import subprocess
import sys
import tempfile
import unittest
LAUNCHER = Path(os.environ.get(
'STEAM_LAUNCHER_TEST_SCRIPT',
Path(__file__).with_name('omarchy-launch-steam'),
))
# A representative minified Steam network initialization block, including
# surrounding code that must survive the patch. Deliberately not a regex.
ORIGINAL = (
'before();const t=(0,Ab.cd)("System.Network.RegisterForDeviceChanges");'
't&&SteamClient.System.Network.RegisterForDeviceChanges(this.OnNetworkDevicesChanged),'
'(0,Ab.cd)("System.Network.GetProxyInfo")&&SteamClient.System.Network.GetProxyInfo().then(e=>this.m_proxyInfo=e),'
'(0,Ab.cd)("System.Network.RegisterForConnectivityTestChanges")&&SteamClient.System.Network.RegisterForConnectivityTestChanges(this.OnConnectivityTestStateChanged),'
't||(this.m_bIsAwaitingInitialNetworkState=!1);after();'
)
SKIP_BOOTSTRAP = ['-noverifyfiles', '-nobootstrapupdate', '-skipinitialbootstrap', '-norepairfiles']
MOCK = '''
import json, os
from pathlib import Path
import shutil, sys
name = Path(sys.argv[0]).name
if name == 'uname':
print(os.environ.get('TEST_ARCH', 'aarch64'))
sys.exit(0)
with open(os.environ['TEST_CALLS'], 'a') as log:
log.write(json.dumps([name, *sys.argv[1:]]) + '\\n')
if name == 'muvm':
assert sys.argv[1:3] == ['--', 'FEXBash']
os.execv(shutil.which('FEXBash'), sys.argv[2:])
if name == 'FEXBash':
os.execv('/bin/bash', ['/bin/bash', *sys.argv[1:]])
sys.exit(int(os.environ.get('TEST_EXIT', '0')))
'''
class SteamLauncherTests(unittest.TestCase):
def setUp(self):
self.temp = tempfile.TemporaryDirectory(prefix='steam-fex-test-')
self.addCleanup(self.temp.cleanup)
self.root = Path(self.temp.name)
self.user_home = self.root / 'home with spaces'
self.user_home.mkdir()
self.tools = self.root / 'tools'
self.tools.mkdir()
self.calls_path = self.root / 'calls.jsonl'
self.env = dict(os.environ, HOME=str(self.user_home), PATH=str(self.tools),
TEST_CALLS=str(self.calls_path), TEST_ARCH='aarch64', TEST_EXIT='0')
for name in ['mkdir', 'cat', 'python3']:
(self.tools / name).symlink_to(shutil.which(name))
for name in ['uname', 'muvm', 'FEXBash', 'steam']:
self.mock(self.tools / name)
self.fex_launcher = self.user_home / '.local/share/fex-steam/steam-launcher/bin_steam.sh'
self.mock(self.fex_launcher)
self.steam_root = self.user_home / '.local/share/Steam'
self.ui = self.steam_root / 'steamui'
self.desktop = self.user_home / '.local/share/applications/steam.desktop'
def mock(self, path):
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text(f'#!{sys.executable}\n' + MOCK)
path.chmod(0o755)
def run_launcher(self, *args, expected=0):
result = subprocess.run(['/bin/bash', str(LAUNCHER), *args], env=self.env,
capture_output=True, text=True, timeout=10)
self.assertEqual(result.returncode, expected, result.stderr)
return [json.loads(line) for line in self.calls_path.read_text().splitlines()] if self.calls_path.exists() else []
def chunk(self, content=ORIGINAL, name='chunk~network.js'):
self.ui.mkdir(parents=True, exist_ok=True)
path = self.ui / name
path.write_text(content)
return path
def client_ready(self):
self.ui.mkdir(parents=True, exist_ok=True)
binary = self.steam_root / 'ubuntu12_64/steamui.so'
binary.parent.mkdir(parents=True, exist_ok=True)
binary.touch()
def assert_desktop(self):
text = self.desktop.read_text()
self.assertIn('\nExec=omarchy-launch-steam %U\n', text)
self.assertIn('x-scheme-handler/steam;x-scheme-handler/steamlink;', text)
def assert_fex(self, calls, flags, user_args):
args = [str(self.fex_launcher), *flags, *user_args]
self.assertEqual(calls, [
['muvm', '--', 'FEXBash', '-c', 'exec "$@"', 'omarchy-steam', *args],
['FEXBash', '-c', 'exec "$@"', 'omarchy-steam', *args],
['bin_steam.sh', *flags, *user_args],
])
def test_prepare_without_client_only_writes_user_desktop(self):
self.assertEqual(self.run_launcher('--prepare'), [])
self.assert_desktop()
self.assertFalse(self.steam_root.exists())
def test_prepare_patches_matching_chunks_and_preserves_original(self):
for identifier in ['Ab.cd', '_A2.x9']:
with self.subTest(identifier=identifier):
original = ORIGINAL.replace('Ab.cd', identifier)
path = self.chunk(original, f'chunk~{identifier}.js')
self.assertEqual(self.run_launcher('--prepare'), [])
patched = path.read_text()
self.assertTrue(patched.startswith('before();'))
self.assertTrue(patched.endswith(';after();'))
self.assertIn(f'const t=(0,{identifier})("System.Network.RegisterForDeviceChanges")&&!!', patched)
self.assertEqual(patched.count('catch(e){}'), 3)
self.assertIn('this.m_bIsAwaitingInitialNetworkState=!1,this.m_bIsConnectedToANetwork=!0', patched)
self.assertEqual(path.with_suffix('.js.omarchy-bak').read_text(), original)
self.assert_desktop()
def test_repeated_prepare_is_idempotent_and_keeps_first_backup(self):
path = self.chunk()
self.run_launcher('--prepare')
patched, modified = path.read_bytes(), path.stat().st_mtime_ns
self.run_launcher('--prepare')
self.assertEqual(path.read_bytes(), patched)
self.assertEqual(path.stat().st_mtime_ns, modified)
path.write_text(ORIGINAL.replace('Ab.cd', 'New.api'))
self.run_launcher('--prepare')
self.assertIn('(0,New.api)', path.read_text())
self.assertEqual(path.with_suffix('.js.omarchy-bak').read_text(), ORIGINAL)
def test_unmatched_code_and_other_filenames_are_untouched(self):
for name, content in [('chunk~changed.js', 'otherNetworkCode();'), ('other.js', ORIGINAL)]:
path = self.chunk(content, name)
self.run_launcher('--prepare')
self.assertEqual(path.read_text(), content)
self.assertFalse(path.with_suffix('.js.omarchy-bak').exists())
def test_only_first_matching_block_is_patched(self):
path = self.chunk(ORIGINAL + ORIGINAL)
self.run_launcher('--prepare')
self.assertEqual(path.read_text().count('m_bIsConnectedToANetwork=!0'), 1)
self.assertIn(ORIGINAL, path.read_text())
def test_initial_launch_keeps_bootstrap_enabled_and_preserves_arguments(self):
args = ['steam://rungameid/123', 'argument with spaces', '$(touch unwanted)', '']
calls = self.run_launcher(*args)
self.assert_fex(calls, ['-cef-force-occlusion'], args)
self.assert_desktop()
self.assertFalse(self.steam_root.exists())
def test_ui_directory_alone_does_not_disable_bootstrap(self):
path = self.chunk()
self.assert_fex(self.run_launcher(), ['-cef-force-occlusion'], [])
self.assertEqual(path.read_text(), ORIGINAL)
def test_ready_launch_patches_and_disables_bootstrap(self):
path = self.chunk()
self.client_ready()
args = ['steam://open/main']
self.assert_fex(self.run_launcher(*args), ['-cef-force-occlusion', *SKIP_BOOTSTRAP], args)
self.assertIn('m_bIsConnectedToANetwork=!0', path.read_text())
self.assert_desktop()
def test_missing_fex_components_fall_back_without_modifying_user_files(self):
for missing in [self.tools / 'muvm', self.tools / 'FEXBash', self.fex_launcher]:
with self.subTest(missing=missing.name):
missing.unlink()
self.env['TEST_EXIT'] = '23'
self.assertEqual(self.run_launcher('arg with spaces', expected=23), [['steam', 'arg with spaces']])
self.assertFalse(self.desktop.exists())
self.calls_path.unlink()
self.mock(missing)
def test_x86_prepare_is_noop_and_launch_falls_back(self):
self.env['TEST_ARCH'] = 'x86_64'
path = self.chunk()
self.assertEqual(self.run_launcher('--prepare'), [])
self.assertFalse(self.desktop.exists())
self.assertEqual(path.read_text(), ORIGINAL)
self.assertEqual(self.run_launcher('steam://open/main'), [['steam', 'steam://open/main']])
def test_fex_exit_status_is_preserved(self):
self.env['TEST_EXIT'] = '29'
self.assert_fex(self.run_launcher(expected=29), ['-cef-force-occlusion'], [])
if __name__ == '__main__':
unittest.main()
@@ -0,0 +1,11 @@
{
"source": "local",
"channels": ["edge"],
"upstream": {
"watch": {
"github": "tcballard/omarchy-task-manager",
"pattern": "v(?P<version>[0-9]+\\.[0-9]+\\.[0-9]+)",
"allow_prerelease": true
}
}
}
+44
View File
@@ -0,0 +1,44 @@
# Canonical recipe. scripts/package-source.sh fills the release source checksum.
# Maintainer: Tom Ballard (tcballard)
pkgname=omarchy-task-manager
pkgver=0.0.3
pkgrel=3
url='https://github.com/tcballard/omarchy-task-manager'
pkgdesc='Floating native task manager for Omarchy (preview)'
arch=('x86_64')
license=('MIT')
depends=('qt6-base' 'qt6-declarative' 'qt6-wayland' 'qt6-svg' 'hicolor-icon-theme' 'gcc-libs' 'glibc' 'glib2' 'systemd' 'coreutils')
optdepends=('gdb: live process core dumps' 'nvidia-utils: NVIDIA device telemetry')
makedepends=('cmake' 'ninja' 'rust' 'cargo')
checkdepends=('python' 'desktop-file-utils')
source=("$url/releases/download/v$pkgver/$pkgname-$pkgver.tar.gz"
"pause-resume-test.patch"
"worker-shutdown.patch")
sha256sums=('cc3e24a0bb8fad2b7ce0d4fb780aa774d32b53b8de924b488b55674bdb936c85'
'ce191fc8dc7e4f7018193aa4982d58fd463f66b37e3129b3acce46b7a1c9a89e'
'1142aaedf8739bf2ed1cb823a03ed7e406d7ff59d7dfb72748815cc81cfda96b')
# Backport upstream PR #11 (sample observation) and PR #12 (worker shutdown).
prepare() {
cd "$srcdir/$pkgname-$pkgver"
patch -Np1 -i "$srcdir/pause-resume-test.patch"
patch -Np1 -i "$srcdir/worker-shutdown.patch"
}
build() {
cmake -S "$srcdir/$pkgname-$pkgver" -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=lib
cmake --build build
}
check() {
cd "$srcdir/$pkgname-$pkgver"
cargo test --locked
ctest --test-dir "$srcdir/build" --output-on-failure
desktop-file-validate packaging/io.github.tcballard.TaskManager.desktop
python tests/protocol.py "$srcdir/build/omarchy-task-manager-core"
}
package() {
DESTDIR="$pkgdir" cmake --install build
}
@@ -0,0 +1,63 @@
diff --git a/tests/bridge_test.cpp b/tests/bridge_test.cpp
index bab79f2..9bed7be 100644
--- a/tests/bridge_test.cpp
+++ b/tests/bridge_test.cpp
@@ -79,37 +79,53 @@ private slots:
const auto before = bridge.history().size();
QTest::qWait(1100);
QCOMPARE(bridge.history().size(), before);
- QSignalSpy samples(&bridge, &Bridge::snapshotChanged);
+ // Capture at emission: QTRY processes events, so another timer sample can
+ // replace bridge.snapshot() before the waiting assertion runs.
+ QVariantList samples;
+ QList<int> historySizes;
+ QObject sampleObserver; // Disconnect before the captured lists are destroyed.
+ connect(&bridge, &Bridge::snapshotChanged, &sampleObserver, [&] {
+ samples.append(bridge.snapshot());
+ historySizes.append(bridge.history().size());
+ });
bridge.setPaused(false);
QTRY_VERIFY_WITH_TIMEOUT(samples.count() > 0, 8000);
- QVERIFY(!bridge.snapshot()
+ QVERIFY(!samples.first().toMap()
.value("system")
.toMap()
.value("continuous")
.toBool());
- QCOMPARE(bridge.history().size(), 1);
+ QCOMPARE(historySizes.first(), 1);
bridge.active(false);
QTest::qWait(600);
samples.clear();
+ historySizes.clear();
bridge.active(true);
QTRY_VERIFY_WITH_TIMEOUT(samples.count() > 0, 8000);
- QVERIFY(!bridge.snapshot()
+ QVERIFY(!samples.first().toMap()
.value("system")
.toMap()
.value("continuous")
.toBool());
QTRY_VERIFY_WITH_TIMEOUT(!bridge.busy(), 8000);
samples.clear();
+ historySizes.clear();
bridge.refresh();
QVERIFY(bridge.busy());
bridge.setPaused(true);
bridge.setPaused(false);
QTRY_VERIFY_WITH_TIMEOUT(samples.count() > 0, 8000);
- QVERIFY(!bridge.snapshot()
+ QVERIFY(!samples.first().toMap()
.value("system")
.toMap()
.value("continuous")
.toBool());
+ QCOMPARE(historySizes.first(), 1);
+ // Keep automatic refresh enabled. The baseline must be followed by a
+ // continuous sample; inspecting only the latest snapshot misses this order.
+ QTRY_VERIFY_WITH_TIMEOUT(samples.count() >= 2, 8000);
+ QVERIFY(samples.at(1).toMap().value("system").toMap()
+ .value("continuous").toBool());
QTRY_VERIFY_WITH_TIMEOUT(!bridge.busy(), 8000);
QVERIFY(bridge.prepareManagement({{"category", "startup"}}).isEmpty());
QVERIFY(
@@ -0,0 +1,90 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c940e5e..d1cd40f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -29,7 +29,8 @@ if(BUILD_TESTING)
target_include_directories(bridge-test PRIVATE ui)
target_link_libraries(bridge-test PRIVATE Qt6::Core Qt6::Gui Qt6::Test)
add_dependencies(bridge-test core)
- add_test(NAME bridge COMMAND bridge-test)
+ add_test(NAME bridge COMMAND bridge-test -nocrashhandler)
+ set_tests_properties(bridge PROPERTIES TIMEOUT 60)
endif()
if(BUILD_TESTING)
qt_add_executable(ui-test tests/ui_test.cpp ui/bridge.cpp ui/bridge.h)
@@ -37,5 +38,6 @@ if(BUILD_TESTING)
qt_add_resources(ui-test test_qml PREFIX "/" FILES ${TASK_MANAGER_QML})
target_link_libraries(ui-test PRIVATE Qt6::Core Qt6::Gui Qt6::Quick Qt6::Qml Qt6::QuickControls2 Qt6::Test)
add_dependencies(ui-test core)
- add_test(NAME ui COMMAND ui-test)
+ add_test(NAME ui COMMAND ui-test -nocrashhandler)
+ set_tests_properties(ui PROPERTIES TIMEOUT 60)
endif()
diff --git a/tests/bridge_test.cpp b/tests/bridge_test.cpp
index 9bed7be..d6737a4 100644
--- a/tests/bridge_test.cpp
+++ b/tests/bridge_test.cpp
@@ -3,9 +3,46 @@
#include <QSignalSpy>
#include <QTemporaryDir>
#include <QTest>
+#include <memory>
+#include <signal.h>
class BridgeTest : public QObject {
Q_OBJECT
private slots:
+ void shutdownDoesNotPublish_data() {
+ QTest::addColumn<bool>("inFlight");
+ QTest::addColumn<bool>("stopped");
+ QTest::newRow("idle") << false << false;
+ QTest::newRow("sample-in-flight") << true << false;
+ QTest::newRow("stopped-worker") << true << true;
+ }
+ void shutdownDoesNotPublish() {
+ QFETCH(bool, inFlight);
+ QFETCH(bool, stopped);
+ auto bridge = std::make_unique<Bridge>();
+ QTRY_VERIFY_WITH_TIMEOUT(!bridge->snapshot().isEmpty(), 8000);
+ bridge->m_timer.stop();
+ QTRY_VERIFY_WITH_TIMEOUT(!bridge->busy(), 8000);
+ // Stop only the disposable worker owned by this bridge, forcing shutdown
+ // through terminate/kill rather than the normal stdin-EOF exit.
+ if (stopped) {
+ const auto workerPid = bridge->m_worker.processId();
+ QVERIFY(workerPid > 0);
+ QCOMPARE(::kill(workerPid, SIGSTOP), 0);
+ }
+ if (inFlight) {
+ bridge->refresh();
+ QVERIFY(bridge->busy());
+ }
+ QSignalSpy snapshots(bridge.get(), &Bridge::snapshotChanged);
+ QSignalSpy statuses(bridge.get(), &Bridge::statusChanged);
+ QSignalSpy busy(bridge.get(), &Bridge::busyChanged);
+ // Closing the app must not publish late samples or worker-exit errors while
+ // its bridge and UI are being destroyed. Spies outlive the bridge on purpose.
+ bridge.reset();
+ QCOMPARE(snapshots.count(), 0);
+ QCOMPARE(statuses.count(), 0);
+ QCOMPARE(busy.count(), 0);
+ }
void inspectionErrorsAndDismissal() {
Bridge bridge;
QTRY_VERIFY_WITH_TIMEOUT(!bridge.snapshot().isEmpty(), 8000);
diff --git a/ui/bridge.cpp b/ui/bridge.cpp
index 86b5b47..b1fb303 100644
--- a/ui/bridge.cpp
+++ b/ui/bridge.cpp
@@ -82,7 +82,12 @@ Bridge::Bridge(QObject *p) : QObject(p), m_rows(this) {
m_clock.start();
}
Bridge::~Bridge() {
+ // waitForFinished() can emit readyRead/error/finished synchronously. Quiesce
+ // callbacks before waiting, including if QProcess outlives our final wait and
+ // emits from its destructor after the other Bridge members are gone.
m_timer.stop();
+ m_timeout.stop();
+ m_worker.disconnect(this);
m_worker.closeWriteChannel();
if (!m_worker.waitForFinished(600)) {
m_worker.terminate();
+21 -5
View File
@@ -1,11 +1,11 @@
# Maintainer: Tobi Lütke <tobi@lutke.com>
pkgname=omasnap
pkgver=1.20.1
pkgver=1.21.0
pkgrel=1
pkgdesc="Native Wayland screenshot and annotation overlay for Hyprland"
arch=('x86_64' 'aarch64')
url="https://github.com/tobi/omasnap"
url="https://github.com/omacom/omasnap"
license=('MIT' 'OFL-1.1')
depends=(
'hyprland'
@@ -25,7 +25,7 @@ makedepends=(
options=('!debug')
source=("$pkgname-$pkgver.tar.gz::$url/archive/refs/tags/v$pkgver.tar.gz")
sha256sums=('daf8fd17a81890661eebab791e6e78216c331e040043a1a6b72e638d3626b431')
sha256sums=('2f842edf67631825fa1e102876020040ea3e21341221a428b6aeee5580a9d928')
build() {
cmake -S "$pkgname-$pkgver" -B build -G Ninja \
@@ -35,8 +35,24 @@ build() {
}
check() {
QT_QPA_PLATFORM=offscreen \
./build/omasnap-smoke "$srcdir/omasnap-smoke-output"
# The smoke suite fsyncs its working documents under /tmp. On the CI
# droplets the build leaves about a gigabyte of dirty pages, and the
# flush that starts a few seconds into the suite makes those fsyncs stall
# long enough to overrun the suite's 5-second settle windows. Flush first.
local runtime_dir status started
started=$(date +%s%N); sync
echo "flushed dirty pages in $(( ($(date +%s%N) - started) / 1000000 )) ms"
runtime_dir=$(mktemp -d /dev/shm/omasnap-runtime.XXXXXX)
if QT_QPA_PLATFORM=offscreen QT_FORCE_STDERR_LOGGING=1 \
XDG_RUNTIME_DIR="$runtime_dir" \
./build/omasnap-smoke "$srcdir/omasnap-smoke-output"; then
status=0
else
status=$?
echo "omasnap-smoke exited with status $status" >&2
fi
rm -r -- "$runtime_dir"
return "$status"
}
package() {
@@ -0,0 +1,4 @@
{
"source": "local",
"release_ring": "fast"
}
+84
View File
@@ -0,0 +1,84 @@
# Maintainer: Jacob Vincent Mink
pkgname=omaspeak-bin
_pkgname=${pkgname%-bin}
pkgver=0.0.3
_upstream_ver=0.0.3
pkgrel=4
pkgdesc='Local-first text-to-speech application and daemon (pre-built binary)'
arch=('x86_64' 'aarch64')
url='https://github.com/jacob-vincent-mink/omaspeak'
license=('MIT' 'Apache-2.0' 'BSD-3-Clause')
depends=(
'alsa-utils'
'gcc-libs'
'glibc'
)
optdepends=(
'pipewire-audio: audio playback through pw-play'
'openvino: Intel CPU acceleration runtime'
'openvino-intel-gpu-plugin: Intel GPU device support for OpenVINO'
'openvino-intel-npu-plugin: Intel NPU device support for OpenVINO'
'cuda: NVIDIA CUDA libraries for an external CUDA runtime bundle'
'cudnn: NVIDIA neural-network libraries for an external CUDA runtime bundle'
)
provides=("${_pkgname}=${pkgver}")
conflicts=("${_pkgname}")
install="${pkgname}.install"
options=('!strip' '!debug')
source=('package-remove' 'remove-user-services.hook')
sha256sums=('f1b527448529b45fee2f96b4c0a19b11087377c0ac9f43842bab0d04fcfd3b9f'
'9f1a0c2f5031fcd5905de77643a8727b792e07c582c09c2ba179f0714f118b20')
source_x86_64=("${_pkgname}-${_upstream_ver}-linux-x86_64.tar.xz::${url}/releases/download/v${_upstream_ver}/${_pkgname}-${_upstream_ver}-linux-x86_64.tar.xz")
source_aarch64=("${_pkgname}-${_upstream_ver}-linux-aarch64.tar.xz::${url}/releases/download/v${_upstream_ver}/${_pkgname}-${_upstream_ver}-linux-aarch64.tar.xz")
sha256sums_x86_64=('c72428bf6989582b5aa802f39e9390e4cacf26f7fbfacf76645118286c7d1ab2')
sha256sums_aarch64=('88fc4ea8c275b9d5b9d41602d32dbca77ee30de0fc7dcbc06ad0e819fd41545a')
package() {
install -Dm755 "${srcdir}/package-remove" "${pkgdir}/usr/lib/${_pkgname}/package-remove"
install -Dm644 "${srcdir}/remove-user-services.hook" \
"${pkgdir}/usr/share/libalpm/hooks/30-${_pkgname}-remove-user-services.hook"
local release_root="${srcdir}/${_pkgname}-${_upstream_ver}-linux-${CARCH}"
install -Dm755 "${release_root}/${_pkgname}" "${pkgdir}/usr/bin/${_pkgname}"
install -Dm755 \
"${release_root}/lib/libaudiocpp.so.0.1.0" \
"${pkgdir}/usr/lib/${_pkgname}/libaudiocpp.so.0.1.0"
ln -s libaudiocpp.so.0.1.0 \
"${pkgdir}/usr/lib/${_pkgname}/libaudiocpp.so.0"
ln -s libaudiocpp.so.0 \
"${pkgdir}/usr/lib/${_pkgname}/libaudiocpp.so"
install -Dm644 \
"${release_root}/packaging/systemd/${_pkgname}.service" \
"${pkgdir}/usr/lib/systemd/user/${_pkgname}.service"
local document
for document in \
README.md \
INSTALL.md \
ACCELERATOR_SETUP.md \
CHANGELOG.md \
RELEASE_NOTES.md \
DEMO.md \
RUNTIME.md \
config.example.toml; do
install -Dm644 \
"${release_root}/${document}" \
"${pkgdir}/usr/share/doc/${pkgname}/${document}"
done
cp -r \
"${release_root}/assets" \
"${release_root}/benchmarks" \
"${pkgdir}/usr/share/doc/${pkgname}/"
install -dm755 "${pkgdir}/usr/share/licenses/${pkgname}"
cp -r \
"${release_root}/licenses/." \
"${pkgdir}/usr/share/licenses/${pkgname}/"
}
@@ -0,0 +1,11 @@
# shellcheck shell=sh
post_install() {
echo ':: Run omaspeak setup to configure a model and runtime.'
echo ':: The optional user service remains disabled; on-demand speech works without it.'
echo ':: Accelerator instructions: /usr/share/doc/omaspeak-bin/ACCELERATOR_SETUP.md'
}
post_upgrade() {
echo ':: Run omaspeak setup check to verify the current configuration.'
}
+150
View File
@@ -0,0 +1,150 @@
#!/bin/bash
# Invoked only by the package's Remove/PreTransaction ALPM hook.
set -eu
# systemd's configuration parser throws the whitespace around an assignment away
# (parse_line() runs both halves through strstrip()), so a drop-in written as
# ExecStart = /home/alice/build/omawake daemon
# picks the executable just as surely as the unspaced form does.
readonly execstart_assignment='^[[:space:]]*ExecStart[[:space:]]*='
owned_unit() {
local commands
[[ -f $1 && ! -L $1 ]] || return 1
# Only a unit in the very shape the application generates is ever deleted;
# anything else, however it is spaced, stays somebody's own file.
commands=$(grep '^ExecStart=' "$1") || return 1
[[ $commands != *$'\n'* ]] || return 1
grep -Eq "^ExecStart=\"?/usr/bin/$2\"?([[:space:]]|$)" <<< "$commands"
}
# Decode systemd's shell_maybe_quote() output, including cescape_char() escapes.
# Never evaluate manager-controlled values as shell syntax.
unquote_manager_value() {
local text=$1 decoded= character octal
if [[ $text != '$'* ]]; then
unquoted_value=$text
return 0
fi
[[ $text == \$\'*\' ]] || return 1
text=${text:2:${#text}-3}
while [[ -n $text ]]; do
if [[ ${text:0:1} != \\ ]]; then
decoded+=${text:0:1}
text=${text:1}
continue
fi
case ${text:1:1} in
\\ | "'") decoded+=${text:1:1} ;;
a | b | f | n | r | t | v)
printf -v character '%b' "\\${text:1:1}"
decoded+=$character
;;
[0-3])
octal=${text:1:3}
[[ $octal =~ ^[0-3][0-7]{2}$ && $octal != 000 ]] || return 1
printf -v character '%b' "\\0$octal"
decoded+=$character
text=${text:4}
continue
;;
*) return 1 ;;
esac
text=${text:2}
done
unquoted_value=$decoded
}
remove_for_user() {
local app=$1 user_home=$2 runtime=$3 config="$2/.config" unit="$1.service"
local online=false effective path target manager_environment load_state
if [[ -S $runtime/bus || -S $runtime/systemd/private ]]; then
online=true
# Do not evaluate shell syntax from a user manager's environment.
manager_environment=$(systemctl --user show-environment) || return 1
while IFS= read -r line; do
case $line in
XDG_CONFIG_HOME=*)
if ! unquote_manager_value "${line#XDG_CONFIG_HOME=}"; then
echo ":: Cannot tell which directory $user_home's manager reads $unit from; removal aborted." >&2
return 1
fi
# An XDG_CONFIG_HOME that is not an absolute path is no setting at all:
# the manager itself falls back to the home's .config directory then.
if [[ $unquoted_value == /* ]]; then config=$unquoted_value; fi
;;
esac
done <<< "$manager_environment"
effective=$(systemctl --user show "$unit" --property=ExecStart --value) || return 1
if [[ -n $effective && $effective != *"path=/usr/bin/$app ;"* ]]; then
echo ":: Preserving $unit for $user_home: it uses another executable."
return 0
fi
fi
path="$config/systemd/user/$unit"
if ! $online && grep -qs "$execstart_assignment" "$path.d/"*.conf; then
echo ":: Preserving offline service with an executable override: $path."
return 0
fi
if [[ -e $path || -L $path ]]; then
if ! owned_unit "$path" "$app"; then
echo ":: Preserving custom or masked unit $path."
return 0
fi
fi
if $online; then
# Stop first, and fail the package transaction if stopping fails.
load_state=$(systemctl --user show "$unit" --property=LoadState --value) || return 1
if [[ $load_state != not-found ]]; then
systemctl --user stop "$unit" || return 1
# A unit that had failed stays failed once it is stopped, which is the one
# state systemd will reset. For every other state it answers that the unit
# is not loaded and exits non-zero, so the reset is asked for only where it
# applies: a healthy unit leaving the transaction never aborts a removal.
if [[ $(systemctl --user show "$unit" --property=ActiveState --value) == failed ]]; then
systemctl --user reset-failed "$unit" || return 1
fi
# Disabling also removes enablement links outside the normal target.
systemctl --user disable "$unit" || return 1
fi
fi
# Offline users have no bus. Remove only exact enablement links for this unit.
# All filesystem operations run as the owning user, never as pacman's root.
for target in "$config/systemd/user/"*.wants/"$unit" "$config/systemd/user/"*.requires/"$unit"; do
[[ -L $target ]] || continue
case $(realpath -m -- "$target") in
"$path"|"/usr/lib/systemd/user/$unit") rm -- "$target" ;;
esac
done
if owned_unit "$path" "$app"; then rm -- "$path"; fi
if $online; then systemctl --user daemon-reload || return 1; fi
}
if [[ ${1-} == --user ]]; then
shift
case ${1-} in omawake|omaspeak) ;; *) exit 2 ;; esac
[[ $# == 3 ]] || exit 2
remove_for_user "$@"
exit
fi
[[ $# == 1 ]] || exit 2
case $1 in omawake|omaspeak) ;; *) exit 2 ;; esac
app=$1
result=0
# Include logged-out users as well as active/lingering user managers.
accounts=$(getent passwd) || exit 1
while IFS=: read -r account _ user_id _ _ user_home _; do
[[ $user_home == /* ]] || continue
runtime="/run/user/$user_id"
if [[ ! -d $user_home/.config/systemd/user && ! -S $runtime/bus && ! -S $runtime/systemd/private ]]; then
continue
fi
if ! runuser -u "$account" -- env -u XDG_CONFIG_HOME \
XDG_RUNTIME_DIR="$runtime" DBUS_SESSION_BUS_ADDRESS="unix:path=$runtime/bus" \
"$0" --user "$app" "$user_home" "$runtime"; then
echo ":: Could not clean up $app for $account; removal aborted. Stop/remove the user service and retry." >&2
result=1
fi
done <<< "$accounts"
exit "$result"
@@ -0,0 +1,10 @@
[Trigger]
Operation = Remove
Type = Package
Target = omaspeak-bin
[Action]
Description = Stop and remove omaspeak user services before package removal
When = PreTransaction
Exec = /usr/lib/omaspeak/package-remove omaspeak
AbortOnFail
@@ -0,0 +1,4 @@
{
"source": "local",
"release_ring": "fast"
}
+84
View File
@@ -0,0 +1,84 @@
# Maintainer: Jacob Vincent Mink
pkgname=omawake-bin
_pkgname=${pkgname%-bin}
pkgver=0.0.3
_upstream_ver=0.0.3
pkgrel=4
pkgdesc='Configurable local wake-word daemon (pre-built binary)'
arch=('x86_64' 'aarch64')
url='https://github.com/jacob-vincent-mink/omawake'
license=('MIT' 'Apache-2.0' 'BSD-3-Clause')
depends=(
'alsa-lib'
'gcc-libs'
'glibc'
)
optdepends=(
'pipewire-audio: PipeWire audio support'
'openvino: Intel runtime for an externally supplied OpenVINO provider bundle'
'openvino-intel-gpu-plugin: Intel GPU device support for OpenVINO'
'openvino-intel-npu-plugin: Intel NPU device support for OpenVINO'
'cuda: NVIDIA CUDA libraries for an external CUDA runtime bundle'
'cudnn: NVIDIA neural-network libraries for an external CUDA runtime bundle'
)
provides=("${_pkgname}=${pkgver}")
conflicts=("${_pkgname}")
install="${pkgname}.install"
options=('!strip' '!debug')
source=('package-remove' 'remove-user-services.hook')
sha256sums=('f1b527448529b45fee2f96b4c0a19b11087377c0ac9f43842bab0d04fcfd3b9f'
'a0bb2e9de807bdb2cc8d0076eac3c21555c910eb8baa06acfba18fea716b9014')
source_x86_64=("${_pkgname}-${_upstream_ver}-linux-x86_64.tar.xz::${url}/releases/download/v${_upstream_ver}/${_pkgname}-${_upstream_ver}-linux-x86_64.tar.xz")
source_aarch64=("${_pkgname}-${_upstream_ver}-linux-aarch64.tar.xz::${url}/releases/download/v${_upstream_ver}/${_pkgname}-${_upstream_ver}-linux-aarch64.tar.xz")
sha256sums_x86_64=('fa374341f60760b04c9a97d76f7ad2679463f5b2b673ee6d9c1ceee97d3f0669')
sha256sums_aarch64=('384eb11872c873a33332acf51f567dc4d4e327e57563b61056e4d0aa7fe470eb')
package() {
install -Dm755 "${srcdir}/package-remove" "${pkgdir}/usr/lib/${_pkgname}/package-remove"
install -Dm644 "${srcdir}/remove-user-services.hook" \
"${pkgdir}/usr/share/libalpm/hooks/30-${_pkgname}-remove-user-services.hook"
local release_root="${srcdir}/${_pkgname}-${_upstream_ver}-linux-${CARCH}"
install -Dm755 "${release_root}/${_pkgname}" "${pkgdir}/usr/bin/${_pkgname}"
install -Dm755 \
"${release_root}/lib/libaudiocpp.so.0.1.0" \
"${pkgdir}/usr/lib/${_pkgname}/libaudiocpp.so.0.1.0"
ln -s libaudiocpp.so.0.1.0 \
"${pkgdir}/usr/lib/${_pkgname}/libaudiocpp.so.0"
ln -s libaudiocpp.so.0 \
"${pkgdir}/usr/lib/${_pkgname}/libaudiocpp.so"
install -Dm644 \
"${release_root}/packaging/systemd/${_pkgname}.service" \
"${pkgdir}/usr/lib/systemd/user/${_pkgname}.service"
local document
for document in \
README.md \
INSTALL.md \
ACCELERATOR_SETUP.md \
CHANGELOG.md \
RELEASE_NOTES.md \
DEMO.md \
RUNTIME.md \
config.example.toml; do
install -Dm644 \
"${release_root}/${document}" \
"${pkgdir}/usr/share/doc/${pkgname}/${document}"
done
cp -r \
"${release_root}/assets" \
"${release_root}/benchmarks" \
"${pkgdir}/usr/share/doc/${pkgname}/"
install -dm755 "${pkgdir}/usr/share/licenses/${pkgname}"
cp -r \
"${release_root}/licenses/." \
"${pkgdir}/usr/share/licenses/${pkgname}/"
}
+11
View File
@@ -0,0 +1,11 @@
# shellcheck shell=sh
post_install() {
echo ':: Run omawake setup to configure a model and runtime.'
echo ':: The optional user service remains disabled; enable it only when desired.'
echo ':: Accelerator instructions: /usr/share/doc/omawake-bin/ACCELERATOR_SETUP.md'
}
post_upgrade() {
echo ':: Run omawake setup check to verify the current configuration.'
}
+150
View File
@@ -0,0 +1,150 @@
#!/bin/bash
# Invoked only by the package's Remove/PreTransaction ALPM hook.
set -eu
# systemd's configuration parser throws the whitespace around an assignment away
# (parse_line() runs both halves through strstrip()), so a drop-in written as
# ExecStart = /home/alice/build/omawake daemon
# picks the executable just as surely as the unspaced form does.
readonly execstart_assignment='^[[:space:]]*ExecStart[[:space:]]*='
owned_unit() {
local commands
[[ -f $1 && ! -L $1 ]] || return 1
# Only a unit in the very shape the application generates is ever deleted;
# anything else, however it is spaced, stays somebody's own file.
commands=$(grep '^ExecStart=' "$1") || return 1
[[ $commands != *$'\n'* ]] || return 1
grep -Eq "^ExecStart=\"?/usr/bin/$2\"?([[:space:]]|$)" <<< "$commands"
}
# Decode systemd's shell_maybe_quote() output, including cescape_char() escapes.
# Never evaluate manager-controlled values as shell syntax.
unquote_manager_value() {
local text=$1 decoded= character octal
if [[ $text != '$'* ]]; then
unquoted_value=$text
return 0
fi
[[ $text == \$\'*\' ]] || return 1
text=${text:2:${#text}-3}
while [[ -n $text ]]; do
if [[ ${text:0:1} != \\ ]]; then
decoded+=${text:0:1}
text=${text:1}
continue
fi
case ${text:1:1} in
\\ | "'") decoded+=${text:1:1} ;;
a | b | f | n | r | t | v)
printf -v character '%b' "\\${text:1:1}"
decoded+=$character
;;
[0-3])
octal=${text:1:3}
[[ $octal =~ ^[0-3][0-7]{2}$ && $octal != 000 ]] || return 1
printf -v character '%b' "\\0$octal"
decoded+=$character
text=${text:4}
continue
;;
*) return 1 ;;
esac
text=${text:2}
done
unquoted_value=$decoded
}
remove_for_user() {
local app=$1 user_home=$2 runtime=$3 config="$2/.config" unit="$1.service"
local online=false effective path target manager_environment load_state
if [[ -S $runtime/bus || -S $runtime/systemd/private ]]; then
online=true
# Do not evaluate shell syntax from a user manager's environment.
manager_environment=$(systemctl --user show-environment) || return 1
while IFS= read -r line; do
case $line in
XDG_CONFIG_HOME=*)
if ! unquote_manager_value "${line#XDG_CONFIG_HOME=}"; then
echo ":: Cannot tell which directory $user_home's manager reads $unit from; removal aborted." >&2
return 1
fi
# An XDG_CONFIG_HOME that is not an absolute path is no setting at all:
# the manager itself falls back to the home's .config directory then.
if [[ $unquoted_value == /* ]]; then config=$unquoted_value; fi
;;
esac
done <<< "$manager_environment"
effective=$(systemctl --user show "$unit" --property=ExecStart --value) || return 1
if [[ -n $effective && $effective != *"path=/usr/bin/$app ;"* ]]; then
echo ":: Preserving $unit for $user_home: it uses another executable."
return 0
fi
fi
path="$config/systemd/user/$unit"
if ! $online && grep -qs "$execstart_assignment" "$path.d/"*.conf; then
echo ":: Preserving offline service with an executable override: $path."
return 0
fi
if [[ -e $path || -L $path ]]; then
if ! owned_unit "$path" "$app"; then
echo ":: Preserving custom or masked unit $path."
return 0
fi
fi
if $online; then
# Stop first, and fail the package transaction if stopping fails.
load_state=$(systemctl --user show "$unit" --property=LoadState --value) || return 1
if [[ $load_state != not-found ]]; then
systemctl --user stop "$unit" || return 1
# A unit that had failed stays failed once it is stopped, which is the one
# state systemd will reset. For every other state it answers that the unit
# is not loaded and exits non-zero, so the reset is asked for only where it
# applies: a healthy unit leaving the transaction never aborts a removal.
if [[ $(systemctl --user show "$unit" --property=ActiveState --value) == failed ]]; then
systemctl --user reset-failed "$unit" || return 1
fi
# Disabling also removes enablement links outside the normal target.
systemctl --user disable "$unit" || return 1
fi
fi
# Offline users have no bus. Remove only exact enablement links for this unit.
# All filesystem operations run as the owning user, never as pacman's root.
for target in "$config/systemd/user/"*.wants/"$unit" "$config/systemd/user/"*.requires/"$unit"; do
[[ -L $target ]] || continue
case $(realpath -m -- "$target") in
"$path"|"/usr/lib/systemd/user/$unit") rm -- "$target" ;;
esac
done
if owned_unit "$path" "$app"; then rm -- "$path"; fi
if $online; then systemctl --user daemon-reload || return 1; fi
}
if [[ ${1-} == --user ]]; then
shift
case ${1-} in omawake|omaspeak) ;; *) exit 2 ;; esac
[[ $# == 3 ]] || exit 2
remove_for_user "$@"
exit
fi
[[ $# == 1 ]] || exit 2
case $1 in omawake|omaspeak) ;; *) exit 2 ;; esac
app=$1
result=0
# Include logged-out users as well as active/lingering user managers.
accounts=$(getent passwd) || exit 1
while IFS=: read -r account _ user_id _ _ user_home _; do
[[ $user_home == /* ]] || continue
runtime="/run/user/$user_id"
if [[ ! -d $user_home/.config/systemd/user && ! -S $runtime/bus && ! -S $runtime/systemd/private ]]; then
continue
fi
if ! runuser -u "$account" -- env -u XDG_CONFIG_HOME \
XDG_RUNTIME_DIR="$runtime" DBUS_SESSION_BUS_ADDRESS="unix:path=$runtime/bus" \
"$0" --user "$app" "$user_home" "$runtime"; then
echo ":: Could not clean up $app for $account; removal aborted. Stop/remove the user service and retry." >&2
result=1
fi
done <<< "$accounts"
exit "$result"
@@ -0,0 +1,10 @@
[Trigger]
Operation = Remove
Type = Package
Target = omawake-bin
[Action]
Description = Stop and remove omawake user services before package removal
When = PreTransaction
Exec = /usr/lib/omawake/package-remove omawake
AbortOnFail
+3 -3
View File
@@ -1,6 +1,6 @@
# Maintainer: Kevin McConnell
pkgname=once-bin
pkgver=0.3.2
pkgver=0.3.3
pkgrel=1
pkgdesc='CLI/TUI for installing and managing self-hosted web applications'
arch=('x86_64' 'aarch64')
@@ -22,8 +22,8 @@ source=("MIT-LICENSE-${pkgver}::https://raw.githubusercontent.com/basecamp/once/
sha256sums=('fa0d1454375cbc7701bc13d916c3ae71e613b8ae718321641e678e09409393c4'
'aa314fe79677eb5f120fcc3d4c42007a93ff7b1ef917382c0c1fdca5633ad46a')
sha256sums_x86_64=('e1da40a0952879580e43623d6fd6002a391ee469b642c98ecddbe00374facbb6')
sha256sums_aarch64=('9bd644e1557521b0b8cab93ba3841747cbee0390aa3aa020bd91bfa66ac51dec')
sha256sums_x86_64=('aef855da263721c6c1072ff5ebc4c17a52af8c8e80c46c5a9dd458e7ca3a7f35')
sha256sums_aarch64=('97e32ba0fdac0ad5e6010851b306e3cb2616285a9eeb2e869ff7e71f4b442bbb')
package() {
install -Dm755 "once-${pkgver}-${CARCH}" "${pkgdir}/usr/bin/once"
+3 -5
View File
@@ -2,7 +2,7 @@
# shellcheck disable=SC2034
# Maintainer: Chmouel Boudjnah <chmouel@chmouel.com>
pkgname=openai-codex-bin
pkgver=0.154.0
pkgver=0.155.1
pkgrel=1
pkgdesc="Arch Linux package for OpenAI's Codex CLI - Auto Updated"
arch=('x86_64' 'aarch64')
@@ -21,10 +21,8 @@ source_x86_64=(
"codex-${pkgver}-x86_64.tar.gz::https://github.com/openai/codex/releases/download/rust-v${pkgver}/codex-x86_64-unknown-linux-musl.tar.gz"
"codex-code-mode-host-${pkgver}-x86_64.tar.gz::https://github.com/openai/codex/releases/download/rust-v${pkgver}/codex-code-mode-host-x86_64-unknown-linux-musl.tar.gz"
)
sha256sums_x86_64=('d7e18b2597ae8f242f5f31ee9e90deef48dbc9edd634d9868fb6435d08c07f02'
'a68df7cca23c6da7cde175677df7de61c73a234add1333a1254b86d641af01f7')
sha256sums_aarch64=('583b48df32804213bdcd338c2e5adb06b34340821fa757a726cc0a524fa33c27'
'20aefa302c2022b496e32911bf954a5f76c7fd749c6bdb9fbd711e32b66dcbfa')
sha256sums_x86_64=('a0ef8b2debc3bf747e07b1a039354de31300ac0dcc2276498ba281470b5d9115' '9fd083743af55be818aceb351d371fb5136f5b6aa3938f167087373d27067b2d')
sha256sums_aarch64=('d6c7e62fbd688d52ee04f3929d0613705d32a920a42db7a139e366eaf1f4a2d7' '516f2ed76d4ae96c2074d3c08f4576ed1bdc5c3a97e26734d7319de8b6861683')
source_aarch64=(
"codex-${pkgver}-aarch64.tar.gz::https://github.com/openai/codex/releases/download/rust-v${pkgver}/codex-aarch64-unknown-linux-musl.tar.gz"
+3 -3
View File
@@ -5,7 +5,7 @@
# the version and checksums below from that repository's package index.
pkgname=openai-codex-desktop
pkgver=26.908.70816
pkgver=26.915.31945
pkgrel=1
pkgdesc="Official ChatGPT desktop app with Codex"
arch=('x86_64' 'aarch64')
@@ -71,8 +71,8 @@ source_x86_64=("${_deb_x86_64}::${_pool}/${_deb_x86_64}")
source_aarch64=("${_deb_aarch64}::${_pool}/${_deb_aarch64}")
noextract=("${_deb_x86_64}" "${_deb_aarch64}")
sha256sums=('b3a4503b5931f102444bc7015c3cf4e40266cf034e0d682bd2a407dc5b3ee58c')
sha256sums_x86_64=('10ed0c1a880b9975d1f185bf7911a7f514e06b9863cd4ed9561d40063617c854')
sha256sums_aarch64=('d3ec8f1d73b92f203715c26dbf2e0e64375192d00ddaf26f7fbade7777124de8')
sha256sums_x86_64=('d27a9c02919cfe484dcc5f34584b9ea9fd0d7a65c69dcc872b5bdcfa0efb5983')
sha256sums_aarch64=('b94c494b5f0fd7c720fa6fccd5ef609879affc62332ca930ed29b907d537bc6d')
package() {
cd "${srcdir}"
+2 -2
View File
@@ -7,7 +7,7 @@
# upstream's release cadence outruns the AUR.
pkgname=openclaw
pkgver=2026.9.4
pkgver=2026.9.5
pkgrel=1
pkgdesc='Multi-channel AI gateway with extensible messaging integrations'
arch=(x86_64 aarch64)
@@ -29,7 +29,7 @@ optdepends=(
'go: for installing skill tools not packaged for Arch'
)
source=($pkgname-$pkgver.tgz::https://registry.npmjs.org/$pkgname/-/$pkgname-$pkgver.tgz)
sha256sums=('4f1f656770461d4677dea755b1899cba12b912b06798c89a59e2f0c18688b761')
sha256sums=('1fb6ef4fae447af14f1e3b1028334f39146d181a66a4cce2848d4f741c636340')
options=(!debug !strip)
install=$pkgname.install
noextract=($pkgname-$pkgver.tgz)
@@ -0,0 +1,3 @@
{
"source": "local"
}
+95
View File
@@ -0,0 +1,95 @@
# Maintainer: Spencer Bull <spencer@omarchy.org>
pkgname=openvino-genai
pkgver=2026.3.1.0
pkgrel=3
pkgdesc="OpenVINO GenAI C and C++ runtime libraries"
arch=('x86_64')
url="https://github.com/openvinotoolkit/openvino.genai"
license=('Apache-2.0')
options=('!debug' '!lto')
depends=(
'gcc-libs'
'glibc'
'onetbb'
'openvino=2026.3.1' # Includes libopenvino_c.so.
)
makedepends=(
'cmake'
'git'
'ninja'
'python'
)
optdepends=(
'openvino-intel-gpu-plugin: inference on Intel GPUs'
'openvino-intel-npu-plugin: inference on Intel NPUs'
)
_commit=56d9685302da2fc5cc7c9689cfab500fd0660a02
source=(
"openvino.genai::git+$url.git#commit=$_commit"
'gcc-16-char8_t.patch'
'format-template-linkage.patch::https://github.com/openvinotoolkit/openvino.genai/commit/398fbc1450f7485368edf52dd82f45eba215d6c9.patch'
)
sha256sums=(
'SKIP'
'6e685c1e45d4b2314fd55e2f791846cc9086413ba62a6bb5e31be5a5878a243c'
'8c2a3e4bf1d33e00b780da7bec2d5e40b6fd26a4e518359d6ff7c59ca7f649e3'
)
prepare() {
cd openvino.genai
patch -Np1 -i "$srcdir/gcc-16-char8_t.patch"
# Backport upstream 398fbc14: GCC -O3 can otherwise leave format<int>
# unresolved in libopenvino_genai.so.
patch -Np1 -i "$srcdir/format-template-linkage.patch"
git submodule update --init --recursive
}
build() {
CFLAGS+=" -ffile-prefix-map=$srcdir=/usr/src/$pkgname"
CXXFLAGS+=" -ffile-prefix-map=$srcdir=/usr/src/$pkgname"
cmake -S openvino.genai -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_SKIP_RPATH=ON \
-DENABLE_JS=OFF \
-DENABLE_MISAKI_CPP=OFF \
-DENABLE_PYTHON=OFF \
-DENABLE_SAMPLES=OFF \
-DENABLE_TESTS=OFF \
-DENABLE_TOOLS=OFF \
-DENABLE_XGRAMMAR=OFF
cmake --build build
}
check() {
LD_LIBRARY_PATH="$srcdir/build/openvino_genai:$srcdir/build/src/c${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" \
python -c 'import ctypes; ctypes.CDLL("libopenvino_c.so"); ctypes.CDLL("libopenvino_genai_c.so")'
}
package() {
install -d "$pkgdir/usr/lib" "$pkgdir/usr/share/licenses/$pkgname"
cp -a build/openvino_genai/libopenvino_genai.so* "$pkgdir/usr/lib/"
cp -a build/openvino_genai/libopenvino_tokenizers.so* "$pkgdir/usr/lib/"
cp -a build/src/c/libopenvino_genai_c.so* "$pkgdir/usr/lib/"
# Consumers such as omawake load the unversioned name dynamically.
# Reject a missing/empty library or a broken symlink before publishing.
if [[ ! -s "$pkgdir/usr/lib/libopenvino_genai_c.so" ]]; then
error 'Required C binding is missing or empty: libopenvino_genai_c.so'
return 1
fi
install -Dm644 openvino.genai/LICENSE \
"$pkgdir/usr/share/licenses/$pkgname/LICENSE"
install -Dm644 openvino.genai/third-party-programs.txt \
"$pkgdir/usr/share/licenses/$pkgname/third-party-programs.txt"
install -Dm644 openvino.genai/thirdparty/openvino_tokenizers/LICENSE \
"$pkgdir/usr/share/licenses/$pkgname/openvino-tokenizers-LICENSE"
install -Dm644 openvino.genai/thirdparty/openvino_tokenizers/third-party-programs.txt \
"$pkgdir/usr/share/licenses/$pkgname/openvino-tokenizers-third-party-programs.txt"
}
Loaded 100 of 145 files, more files were not shown because too many files have changed in this diff. Show more