Merge remote-tracking branch 'upstream/master' into spark/aarch64-settings-boot-dropins
# Conflicts: # .github/workflows/test.yml
This commit is contained in:
commit
19976635bc
145 files changed
+5560
-158
No files matched your search
@@ -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
|
||||
@@ -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"
|
||||
}
|
||||
Executable
+2
@@ -0,0 +1,2 @@
|
||||
#!/bin/bash
|
||||
exec "/opt/bambustudio-bin/AppRun" "$@"
|
||||
@@ -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"
|
||||
|
||||
@@ -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}"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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" ;;
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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.
|
||||
@@ -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]+)"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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
@@ -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"
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"source": "local"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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,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
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"source": "local"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
Binary file not shown.
@@ -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)
|
||||
Binary file not shown.
@@ -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);
|
||||
BIN
Binary file not shown.
@@ -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'
|
||||
|
||||
@@ -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
|
||||
Binary file not shown.
@@ -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)
|
||||
Binary file not shown.
@@ -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);
|
||||
Binary file not shown.
@@ -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'
|
||||
|
||||
@@ -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
|
||||
|
||||
#
|
||||
|
||||
@@ -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]##*/}"
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
]
|
||||
}
|
||||
@@ -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.
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
@@ -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'
|
||||
@@ -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"
|
||||
@@ -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,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"
|
||||
}
|
||||
@@ -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.
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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.'
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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}/"
|
||||
}
|
||||
@@ -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.'
|
||||
}
|
||||
@@ -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
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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}"
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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
Reference in new issue
Block a user