Merge remote-tracking branch 'upstream/master' into spark/nvidia-dp-detach

This commit is contained in:
Marcelo Alcantara committed 2026-09-28 11:21:39 +10:00
commit e4b00e594c
191 files changed
+20188 -702

No files matched your search

+5 -7
View File
@@ -1,6 +1,6 @@
pkgname=1password-beta
_tarver=8.12.38-25.BETA
_tarver=8.12.40-23.BETA
case "${CARCH}" in
x86_64)
_archdir="x64"
@@ -9,8 +9,8 @@ case "${CARCH}" in
_archdir="arm64"
;;
esac
pkgver=8.12.38_25.BETA
pkgrel=25.2
pkgver=8.12.40_23.BETA
pkgrel=1
conflicts=('1password' '1password-beta-bin')
pkgdesc="Password manager and secure wallet"
arch=('x86_64' 'aarch64')
@@ -22,10 +22,8 @@ source=()
sha256sums=()
source_x86_64=(https://downloads.1password.com/linux/tar/beta/x86_64/1password-${_tarver}.x64.tar.gz{,.sig})
source_aarch64=(https://downloads.1password.com/linux/tar/beta/aarch64/1password-${_tarver}.arm64.tar.gz{,.sig})
sha256sums_x86_64=('c6d302a2c7404a7ded34a3c4f1c401a43eafeed8b147d128dcb416284c2c2b71'
'cc0f00054749c32d77fba31a12a8dece812e409f4b9d81850d2f9b50fab55dca')
sha256sums_aarch64=('1fd62cd0df90098dd5e50d22e9a6c0a5221f9db6355b7c848db7af7076b395fd'
'4d273b71ab987dcadad9e4fa7cfac7e0173dc4dbe7908c9a3e76af274313dd76')
sha256sums_x86_64=('dc1e21c2a6589dacbbb6d56901fdf2bc8c294fd18766a299aca8b84d9f396dcb' 'df3042ed9e897f32888a51447cf0bc977eef130954e7e34f203d96ab036f995a')
sha256sums_aarch64=('a1153234abe0f9b7ccbf2d713be548cfd3a66e9fc487efbc42a72fd2d9e6dbbf' 'ae3c9954fcf43b08f50a4ef6429311c80b2605d321fade6643aa1a28a61c0a2a')
validpgpkeys=('3FEF9748469ADBE15DA7CA80AC2D62742012EA22')
package() {
@@ -0,0 +1,6 @@
{
"source": "local",
"channels": [
"edge"
]
}
@@ -0,0 +1,36 @@
From 375e80ec3826b54618fdd5f2db708c0f2bb936ae Mon Sep 17 00:00:00 2001
From: Marcelo Alcantara <maralc@gmail.com>
Date: Wed, 16 Sep 2026 00:39:04 +1000
Subject: [PATCH] drm: re-read possible CRTCs when rescanning connectors
A driver can change a connector's possible CRTCs at runtime. Apple's DCP
driver narrows a Type-C port's encoder to the display pipeline the fabric
routed it to and relies on the following hotplug for userspace to re-read
it. possibleCrtcs was only read when the connector was first created, so a
rerouted port kept a stale mask and was never assigned its now-free CRTC
until the compositor restarted.
---
src/backend/drm/DRM.cpp | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/src/backend/drm/DRM.cpp b/src/backend/drm/DRM.cpp
index 6618a26..b492dac 100644
--- a/src/backend/drm/DRM.cpp
+++ b/src/backend/drm/DRM.cpp
@@ -1287,6 +1287,13 @@ void Aquamarine::CDRMBackend::scanConnectors() {
} else {
backend->log(AQ_LOG_DEBUG, std::format("drm: Connector id {} already initialized", connectorID));
conn = *it;
+
+ // drivers may narrow or widen these on hotplug, e.g. when a Type-C port is rerouted to another pipeline
+ const auto possibleCrtcs = drmModeConnectorGetPossibleCrtcs(gpu->fd, drmConn);
+ if (possibleCrtcs && possibleCrtcs != conn->possibleCrtcs) {
+ backend->log(AQ_LOG_DEBUG, std::format("drm: Connector {} possible CRTCs changed {:#x} -> {:#x}", conn->szName, conn->possibleCrtcs, possibleCrtcs));
+ conn->possibleCrtcs = possibleCrtcs;
+ }
}
conn->status = drmConn->connection;
--
2.50.1 (Apple Git-155)
+63
View File
@@ -0,0 +1,63 @@
# Maintainer: Caleb Maclennan <caleb@alerque.com>
# Contributor: Aaron Blasko <blaskoazzolaaaron [at] gmail.com>
#
# Arch's aquamarine 0.15.1-1 plus one patch, carried on edge for Apple Silicon:
# re-read a connector's possible CRTCs when rescanning, so a Type-C port the
# DCP fabric reroutes to another display pipeline gets a CRTC without
# restarting the compositor. Drop the carry once hyprwm releases the fix.
pkgname=aquamarine
pkgver=0.15.1
pkgrel=1.1
pkgdesc='a very light linux rendering backend library'
arch=(aarch64)
url="https://github.com/hyprwm/$pkgname"
license=(BSD-3-Clause)
depends=(libgcc
libstdc++
glibc # libc.so libm.so
hyprutils libhyprutils.so
libdisplay-info libdisplay-info.so
libdrm # libdrm.so
libglvnd libEGL.so
libinput # libinput.so
mesa # libgbm.so
opengl-driver
pixman
seatd libseat.so
systemd-libs libudev.so
wayland libwayland-client.so
wayland-protocols)
makedepends=(cmake
hyprwayland-scanner)
provides=("lib$pkgname.so")
_archive="$pkgname-$pkgver"
source=("$url/archive/v$pkgver/$_archive.tar.gz"
0001-drm-re-read-possible-CRTCs-when-rescanning-connectors.patch)
sha256sums=('2f9de98c0bd1b7b1b09c576e390a2fef436449762fb334163c414f0c300296f2'
'50e9e38ff915b18074dc9b5dd1d07d7f24e340e99f254476d6abe578eece7864')
prepare() {
cd "$_archive"
patch -Np1 -i ../0001-drm-re-read-possible-CRTCs-when-rescanning-connectors.patch
}
build() {
cd "$_archive"
# cc1plus needs more than 8 MiB of stack for DRM.cpp. GCC raises its own
# limit natively, but under QEMU user-mode emulation (the aarch64 builder)
# the guest stack is fixed at exec and setrlimit is ignored, so the compiler
# segfaults. QEMU reads this at exec; native builds ignore it. The object
# code is identical either way.
export QEMU_STACK_SIZE=64M
cmake -B build \
-D CMAKE_INSTALL_PREFIX=/usr \
-D CMAKE_BUILD_TYPE=Release
cmake --build build
}
package() {
cd "$_archive"
DESTDIR="$pkgdir" cmake --install build
install -Dm0644 -t "$pkgdir/usr/share/licenses/$pkgname" LICENSE
}
+9
View File
@@ -0,0 +1,9 @@
{
"source": "local",
"upstream": {
"watch": {
"pattern": "v(?P<version>[0-9]+(?:\\.[0-9]+)*)",
"git_tags": "https://github.com/AsahiLinux/avd-fw.git"
}
}
}
+51
View File
@@ -0,0 +1,51 @@
# Open replacement firmware for the Apple Video Decoder.
# Built from AsahiLinux sources, without extracting proprietary firmware.
pkgname=avd-fw
pkgver=0.1
pkgrel=1
pkgdesc='Open replacement firmware for the Apple Video Decoder (AVD) on Apple Silicon'
# This recipe uses the native ARM linker and serves Apple Silicon systems.
# Restrict both builds and publication to aarch64.
arch=('aarch64')
url='https://github.com/AsahiLinux/avd-fw'
license=('MIT')
# clang cross-compiles to arm-none-eabi out of the box, so no arm-none-eabi
# toolchain is required; llvm supplies llvm-objcopy, which meson.build looks
# up by name to turn each linked ELF into a padded raw image.
makedepends=('meson' 'clang' 'llvm')
# !buildflags is load-bearing: makepkg's CFLAGS/LDFLAGS target the aarch64 host
# and would be injected into a bare-metal Cortex-M3 build. !strip keeps makepkg
# from running the host strip over raw firmware images.
options=('!strip' '!debug' '!buildflags' '!lto')
source=("$pkgname-$pkgver.tar.gz::$url/archive/refs/tags/v$pkgver.tar.gz")
sha256sums=('2e131244275cb15c94243e41eec8a2a665ec895cfe3a818181549db991e62c67')
build() {
# The cross file selects clang, pins the host machine to cortex-m3 and sets
# libdir=lib, which lands the images in /usr/lib/firmware/apple.
#
# Optimization is pinned to match upstream's Makefile (-O2). Meson's default
# buildtype is "debug" (-O0 -g), which would ship unoptimized firmware; the
# MMIO accessors in src/util.c go through a volatile typedef, so -O2 cannot
# elide register reads or writes.
meson setup \
--cross-file "$pkgname-$pkgver/llvm.ini" \
--prefix=/usr \
-Doptimization=2 \
-Ddebug=false \
"$pkgname-$pkgver" build
meson compile -C build
}
package() {
meson install -C build --destdir "$pkgdir"
# meson installs custom_target outputs 0755; these are firmware blobs, not
# programs, and every other firmware file on the system is 0644.
chmod 644 "$pkgdir"/usr/lib/firmware/apple/*.bin
install -Dm644 "$pkgname-$pkgver/LICENSE" \
"$pkgdir/usr/share/licenses/$pkgname/LICENSE"
}
+15
View File
@@ -0,0 +1,15 @@
{
"source": "local",
"release_ring": "fast",
"upstream": {
"watch": {
"debian": "https://brave-browser-apt-release.s3.brave.com/dists/stable/main/binary-amd64/Packages",
"package": "brave-browser",
"pattern": "(?P<version>[0-9]+(?:\\.[0-9]+)*)"
}
},
"origin": {
"aur": "brave-bin",
"commit": "d86e5479e163dac19d7ace3de472710e6eb06eea"
}
}
+62
View File
@@ -0,0 +1,62 @@
# Maintainer: brave <aur-release@brave.com>
# Contributor: Caleb Maclennan <caleb@alerque.com>
# Contributor: José Miguel Sarasola <jmsaraur@gmail.com>
# Contributor: Như Bảo Trương <28810481+nhubaotruong@users.noreply.github.com>
# Contributor: Andrés Rodríguez <hello@andres.codes>
# Contributor: Jacob Mischka <jacob@mischka.me>
# Contributor: Manuel Mazzuola <origin.of@gmail.com>
# Contributor: Simón Oroño <simonorono@protonmail.com>
# Contributor: now-im <now im 627 @ gmail . com>
# Contributor: Giusy Digital <kurmikon at libero dot it>
pkgname=brave-bin
pkgver=1.96.59
pkgrel=1
epoch=1
pkgdesc='Web browser that blocks ads and trackers by default (binary release)'
arch=(x86_64 aarch64)
url=https://brave.com
license=(MPL2 BSD custom:chromium)
depends=(alsa-lib
gtk3
libxss
nss
ttf-font)
optdepends=('cups: Printer support'
'libgnome-keyring: Enable GNOME keyring support'
'libnotify: Native notification support')
provides=("${pkgname%-bin}=$pkgver" 'brave-browser')
conflicts=("${pkgname%-bin}")
options=(!strip)
source=($pkgname.sh brave-browser.desktop)
source_x86_64=(${pkgname}-${pkgver}-x86_64.zip::https://github.com/brave/brave-browser/releases/download/v${pkgver}/brave-browser-${pkgver}-linux-amd64.zip)
source_aarch64=(${pkgname}-${pkgver}-aarch64.zip::https://github.com/brave/brave-browser/releases/download/v${pkgver}/brave-browser-${pkgver}-linux-arm64.zip)
noextract=(${pkgname}-${pkgver}-x86_64.zip ${pkgname}-${pkgver}-aarch64.zip)
sha256sums=('75a87dd17b42fcc6f27adfd16c82bed1c08e9251b07d2012f8d49f7412fa1d00'
'c07276b69c7304981525ecb022f92daf7ae125a4fb05ac3442157b50826e257a')
sha256sums_x86_64=('ee36d0fb939ebdf1922d47d7b4cb8879507733b2a76605a31bfe9dede3297139')
sha256sums_aarch64=('faa8a26f1e7c0c3b8632633503f82e571a798212d8e6fe9baba77f0c73509867')
prepare() {
mkdir -p brave
bsdtar -xf "$pkgname-$pkgver-$CARCH.zip" -C brave
chmod +x brave/brave
}
package() {
install -dm0755 "$pkgdir/opt"
cp -a brave "$pkgdir/opt/$pkgname"
# allow firejail users to get the suid sandbox working
chmod 4755 "$pkgdir/opt/brave-bin/chrome-sandbox"
install -Dm0755 "$pkgname.sh" "$pkgdir/usr/bin/brave"
install -Dm0644 -t "$pkgdir/usr/share/applications/" "brave-browser.desktop"
install -Dm0644 -t "$pkgdir/usr/share/licenses/$pkgname/" brave/LICENSE
pushd "$pkgdir/usr/"
for size in 16x16 24x24 32x32 48x48 64x64 128x128 256x256; do
install -Dm0644 "$pkgdir/opt/$pkgname/product_logo_${size/x*/}.png" \
"share/icons/hicolor/$size/apps/brave-desktop.png"
done
}
+25
View File
@@ -0,0 +1,25 @@
#!/usr/bin/env bash
XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-"${HOME}/.config"}"
CONF_FILE="${XDG_CONFIG_HOME}/brave-flags.conf"
if
test -f "${CONF_FILE}"
then
mapfile -t CONF_LIST < "${CONF_FILE}"
fi
for CONF_LINE in "${CONF_LIST[@]}"
do
if ! [[
"${CONF_LINE}" =~ ^[[:space:]]*(#|$)
]]
then
FLAG_LIST+=("${CONF_LINE}")
fi
done
export CHROME_VERSION_EXTRA='stable'
exec /opt/brave-bin/brave "${FLAG_LIST[@]}" "${@}"
+224
View File
@@ -0,0 +1,224 @@
[Desktop Entry]
Version=1.0
Name=Brave
# Only KDE 4 seems to use GenericName, so we reuse the KDE strings.
# From Ubuntu's language-pack-kde-XX-base packages, version 9.04-20090413.
GenericName=Web Browser
GenericName[ar]=متصفح الشبكة
GenericName[bg]=Уеб браузър
GenericName[ca]=Navegador web
GenericName[cs]=WWW prohlížeč
GenericName[da]=Browser
GenericName[de]=Web-Browser
GenericName[el]=Περιηγητής ιστού
GenericName[en_GB]=Web Browser
GenericName[es]=Navegador web
GenericName[et]=Veebibrauser
GenericName[fi]=WWW-selain
GenericName[fr]=Navigateur Web
GenericName[gu]=વેબ બ્રાઉઝર
GenericName[he]=דפדפן אינטרנט
GenericName[hi]=वेब ब्राउज़र
GenericName[hu]=Webböngésző
GenericName[it]=Browser Web
GenericName[ja]=ウェブブラウザ
GenericName[kn]=ಜಾಲ ವೀಕ್ಷಕ
GenericName[ko]=웹 브라우저
GenericName[lt]=Žiniatinklio naršyklė
GenericName[lv]=Tīmekļa pārlūks
GenericName[ml]=വെബ് ബ്രൌസര്‍
GenericName[mr]=वेब ब्राऊजर
GenericName[nb]=Nettleser
GenericName[nl]=Webbrowser
GenericName[pl]=Przeglądarka WWW
GenericName[pt]=Navegador Web
GenericName[pt_BR]=Navegador da Internet
GenericName[ro]=Navigator de Internet
GenericName[ru]=Веб-браузер
GenericName[sl]=Spletni brskalnik
GenericName[sv]=Webbläsare
GenericName[ta]=இணைய உலாவி
GenericName[th]=เว็บเบราว์เซอร์
GenericName[tr]=Web Tarayıcı
GenericName[uk]=Навігатор Тенет
GenericName[zh_CN]=网页浏览器
GenericName[zh_HK]=網頁瀏覽器
GenericName[zh_TW]=網頁瀏覽器
# Not translated in KDE, from Epiphany 2.26.1-0ubuntu1.
GenericName[bn]=ওয়েব ব্রাউজার
GenericName[fil]=Web Browser
GenericName[hr]=Web preglednik
GenericName[id]=Browser Web
GenericName[or]=ଓ୍ବେବ ବ୍ରାଉଜର
GenericName[sk]=WWW prehliadač
GenericName[sr]=Интернет прегледник
GenericName[te]=మహాతల అన్వేషి
GenericName[vi]=Bộ duyệt Web
# Gnome and KDE 3 uses Comment.
Comment=Access the Internet
Comment[ar]=الدخول إلى الإنترنت
Comment[bg]=Достъп до интернет
Comment[bn]=ইন্টারনেটটি অ্যাক্সেস করুন
Comment[ca]=Accedeix a Internet
Comment[cs]=Přístup k internetu
Comment[da]=Få adgang til internettet
Comment[de]=Internetzugriff
Comment[el]=Πρόσβαση στο Διαδίκτυο
Comment[en_GB]=Access the Internet
Comment[es]=Accede a Internet.
Comment[et]=Pääs Internetti
Comment[fi]=Käytä internetiä
Comment[fil]=I-access ang Internet
Comment[fr]=Accéder à Internet
Comment[gu]=ઇંટરનેટ ઍક્સેસ કરો
Comment[he]=גישה אל האינטרנט
Comment[hi]=इंटरनेट तक पहुंच स्थापित करें
Comment[hr]=Pristup Internetu
Comment[hu]=Internetelérés
Comment[id]=Akses Internet
Comment[it]=Accesso a Internet
Comment[ja]=インターネットにアクセス
Comment[kn]=ಇಂಟರ್ನೆಟ್ ಅನ್ನು ಪ್ರವೇಶಿಸಿ
Comment[ko]=인터넷 연결
Comment[lt]=Interneto prieiga
Comment[lv]=Piekļūt internetam
Comment[ml]=ഇന്റര്‍‌നെറ്റ് ആക്‌സസ് ചെയ്യുക
Comment[mr]=इंटरनेटमध्ये प्रवेश करा
Comment[nb]=Gå til Internett
Comment[nl]=Verbinding maken met internet
Comment[or]=ଇଣ୍ଟର୍ନେଟ୍ ପ୍ରବେଶ କରନ୍ତୁ
Comment[pl]=Skorzystaj z internetu
Comment[pt]=Aceder à Internet
Comment[pt_BR]=Acessar a internet
Comment[ro]=Accesaţi Internetul
Comment[ru]=Доступ в Интернет
Comment[sk]=Prístup do siete Internet
Comment[sl]=Dostop do interneta
Comment[sr]=Приступите Интернету
Comment[sv]=Gå ut på Internet
Comment[ta]=இணையத்தை அணுகுதல்
Comment[te]=ఇంటర్నెట్‌ను ఆక్సెస్ చెయ్యండి
Comment[th]=เข้าถึงอินเทอร์เน็ต
Comment[tr]=İnternet'e erişin
Comment[uk]=Доступ до Інтернету
Comment[vi]=Truy cập Internet
Comment[zh_CN]=访问互联网
Comment[zh_HK]=連線到網際網路
Comment[zh_TW]=連線到網際網路
StartupNotify=true
StartupWMClass=brave-browser
TryExec=brave
Exec=brave %U
Terminal=false
Icon=brave-desktop
Type=Application
Categories=Network;WebBrowser;
MimeType=application/pdf;application/rdf+xml;application/rss+xml;application/xhtml+xml;application/xhtml_xml;application/xml;image/gif;image/jpeg;image/png;image/webp;text/html;text/xml;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ipfs;x-scheme-handler/ipns;
Actions=new-window;new-private-window;
[Desktop Action new-window]
Name=New Window
Name[am]=አዲስ መስኮት
Name[ar]=نافذة جديدة
Name[bg]=Нов прозорец
Name[bn]=নতুন উইন্ডো
Name[ca]=Finestra nova
Name[cs]=Nové okno
Name[da]=Nyt vindue
Name[de]=Neues Fenster
Name[el]=Νέο Παράθυρο
Name[en_GB]=New Window
Name[es]=Nueva ventana
Name[et]=Uus aken
Name[fa]=پنجره جدید
Name[fi]=Uusi ikkuna
Name[fil]=New Window
Name[fr]=Nouvelle fenêtre
Name[gu]=નવી વિંડો
Name[hi]=नई विंडो
Name[hr]=Novi prozor
Name[hu]=Új ablak
Name[id]=Jendela Baru
Name[it]=Nuova finestra
Name[iw]=חלון חדש
Name[ja]=新規ウインドウ
Name[kn]=ಹೊಸ ವಿಂಡೊ
Name[ko]=새 창
Name[lt]=Naujas langas
Name[lv]=Jauns logs
Name[ml]=പുതിയ വിന്‍ഡോ
Name[mr]=नवीन विंडो
Name[nl]=Nieuw venster
Name[no]=Nytt vindu
Name[pl]=Nowe okno
Name[pt]=Nova janela
Name[pt_BR]=Nova janela
Name[ro]=Fereastră nouă
Name[ru]=Новое окно
Name[sk]=Nové okno
Name[sl]=Novo okno
Name[sr]=Нови прозор
Name[sv]=Nytt fönster
Name[sw]=Dirisha Jipya
Name[ta]=புதிய சாளரம்
Name[te]=క్రొత్త విండో
Name[th]=หน้าต่างใหม่
Name[tr]=Yeni Pencere
Name[uk]=Нове вікно
Name[vi]=Cửa sổ Mới
Name[zh_CN]=新建窗口
Name[zh_TW]=開新視窗
Exec=brave
[Desktop Action new-private-window]
Name=New Incognito Window
Name[ar]=نافذة جديدة للتصفح المتخفي
Name[bg]=Нов прозорец „инкогнито“
Name[bn]=নতুন ছদ্মবেশী উইন্ডো
Name[ca]=Finestra d'incògnit nova
Name[cs]=Nové anonymní okno
Name[da]=Nyt inkognitovindue
Name[de]=Neues Inkognito-Fenster
Name[el]=Νέο παράθυρο για ανώνυμη περιήγηση
Name[en_GB]=New Incognito window
Name[es]=Nueva ventana de incógnito
Name[et]=Uus inkognito aken
Name[fa]=پنجره جدید حالت ناشناس
Name[fi]=Uusi incognito-ikkuna
Name[fil]=Bagong Incognito window
Name[fr]=Nouvelle fenêtre de navigation privée
Name[gu]=નવી છુપી વિંડો
Name[hi]=नई गुप्त विंडो
Name[hr]=Novi anoniman prozor
Name[hu]=Új Inkognitóablak
Name[id]=Jendela Penyamaran baru
Name[it]=Nuova finestra di navigazione in incognito
Name[iw]=חלון חדש לגלישה בסתר
Name[ja]=新しいシークレット ウィンドウ
Name[kn]=ಹೊಸ ಅಜ್ಞಾತ ವಿಂಡೋ
Name[ko]=새 시크릿 창
Name[lt]=Naujas inkognito langas
Name[lv]=Jauns inkognito režīma logs
Name[ml]=പുതിയ വേഷ പ്രച്ഛന്ന വിന്‍ഡോ
Name[mr]=नवीन गुप्त विंडो
Name[nl]=Nieuw incognitovenster
Name[no]=Nytt inkognitovindu
Name[pl]=Nowe okno incognito
Name[pt]=Nova janela de navegação anónima
Name[pt_BR]=Nova janela anônima
Name[ro]=Fereastră nouă incognito
Name[ru]=Новое окно в режиме инкогнито
Name[sk]=Nové okno inkognito
Name[sl]=Novo okno brez beleženja zgodovine
Name[sr]=Нови прозор за прегледање без архивирања
Name[sv]=Nytt inkognitofönster
Name[ta]=புதிய மறைநிலைச் சாளரம்
Name[te]=క్రొత్త అజ్ఞాత విండో
Name[th]=หน้าต่างใหม่ที่ไม่ระบุตัวตน
Name[tr]=Yeni Gizli pencere
Name[uk]=Нове вікно в режимі анонімного перегляду
Name[vi]=Cửa sổ ẩn danh mới
Name[zh_CN]=新建隐身窗口
Name[zh_TW]=新增無痕式視窗
Exec=brave --incognito
MimeType=x-scheme-handler/unknown;x-scheme-handler/about;text/html;text/xml;application/xhtml_xml;image/webp;x-scheme-handler/http;x-scheme-handler/https;
@@ -0,0 +1,15 @@
{
"source": "local",
"release_ring": "fast",
"upstream": {
"watch": {
"debian": "https://brave-browser-apt-release.s3.brave.com/dists/stable/main/binary-amd64/Packages",
"package": "brave-origin",
"pattern": "(?P<version>[0-9]+(?:\\.[0-9]+)*)"
}
},
"origin": {
"aur": "brave-origin-bin",
"commit": "f2daecf7b7576cd445094ed09c3c783619ca0eb2"
}
}
+46
View File
@@ -0,0 +1,46 @@
# Maintainer: brave <aur-release@brave.com>
pkgname=brave-origin-bin
pkgver=1.96.59
pkgrel=1
epoch=1
pkgdesc='The minimalist browser from the makers of Brave (binary release).'
arch=(x86_64 aarch64)
url=https://brave.com/origin/download
license=('MPL2')
depends=(alsa-lib gtk3 libxss nss ttf-font)
optdepends=('cups: Printer support'
'libgnome-keyring: Enable GNOME keyring support'
'libnotify: Native notification support')
provides=("$pkgname" "${pkgname%-bin}")
conflicts=("${pkgname%-bin}")
options=(!strip)
source=($pkgname.sh "${pkgname%-bin}.desktop")
source_x86_64=("${pkgname}-${pkgver}-x86_64.zip::https://github.com/brave/brave-browser/releases/download/v${pkgver}/brave-origin-${pkgver}-linux-amd64.zip")
source_aarch64=("${pkgname}-${pkgver}-aarch64.zip::https://github.com/brave/brave-browser/releases/download/v${pkgver}/brave-origin-${pkgver}-linux-arm64.zip")
noextract=("${pkgname}-${pkgver}-x86_64.zip" "${pkgname}-${pkgver}-aarch64.zip")
sha256sums=('5ff70ee473f35c2fc7642c422c8abe20aaac0d7cc30a3292744eb9fbeafba1bd'
'c70bc71c696b6764247070375ae111bd76c8bad9c7bda4d46e03975b95571a8a')
sha256sums_x86_64=('ad71abea5326d15bbe813a1e9592bcf2383f2ecc083a432313ca80b4436d3797')
sha256sums_aarch64=('68d1fb922e0ad25099081a32a7f0611f2657345726590b697eaf6bbb820848ee')
prepare() {
mkdir -p brave
bsdtar -xf "$pkgname-$pkgver-$CARCH.zip" -C brave
chmod +x brave/brave
}
package() {
install -dm0755 "$pkgdir/opt"
cp -a brave "$pkgdir/opt/$pkgname"
chmod 4755 "$pkgdir/opt/$pkgname/chrome-sandbox"
install -Dm0755 "$pkgname.sh" "$pkgdir/usr/bin/${pkgname%-bin}"
install -Dm0644 -t "$pkgdir/usr/share/applications/" "${pkgname%-bin}.desktop"
install -Dm0644 -t "$pkgdir/usr/share/licenses/$pkgname/" brave/LICENSE
pushd "$pkgdir/usr/"
for size in 16x16 24x24 32x32 48x48 64x64 128x128 256x256; do
install -Dm0644 "$pkgdir/opt/$pkgname/product_logo_${size/x*/}.png" \
"share/icons/hicolor/$size/apps/brave-origin.png"
done
}
+25
View File
@@ -0,0 +1,25 @@
#!/usr/bin/env bash
XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-"${HOME}/.config"}"
CONF_FILE="${XDG_CONFIG_HOME}/brave-origin-flags.conf"
if
test -f "${CONF_FILE}"
then
mapfile -t CONF_LIST < "${CONF_FILE}"
fi
for CONF_LINE in "${CONF_LIST[@]}"
do
if ! [[
"${CONF_LINE}" =~ ^[[:space:]]*(#|$)
]]
then
FLAG_LIST+=("${CONF_LINE}")
fi
done
export CHROME_VERSION_EXTRA='stable'
exec /opt/brave-origin-bin/brave-origin "${FLAG_LIST[@]}" "${@}"
@@ -0,0 +1,222 @@
[Desktop Entry]
Version=1.0
Name=Brave Origin
# Only KDE 4 seems to use GenericName, so we reuse the KDE strings.
# From Ubuntu's language-pack-kde-XX-base packages, version 9.04-20090413.
GenericName=Web Browser
GenericName[ar]=متصفح الشبكة
GenericName[bg]=Уеб браузър
GenericName[ca]=Navegador web
GenericName[cs]=WWW prohlížeč
GenericName[da]=Browser
GenericName[de]=Web-Browser
GenericName[el]=Περιηγητής ιστού
GenericName[en_GB]=Web Browser
GenericName[es]=Navegador web
GenericName[et]=Veebibrauser
GenericName[fi]=WWW-selain
GenericName[fr]=Navigateur Web
GenericName[gu]=વેબ બ્રાઉઝર
GenericName[he]=דפדפן אינטרנט
GenericName[hi]=वेब ब्राउज़र
GenericName[hu]=Webböngésző
GenericName[it]=Browser Web
GenericName[ja]=ウェブブラウザ
GenericName[kn]=ಜಾಲ ವೀಕ್ಷಕ
GenericName[ko]=웹 브라우저
GenericName[lt]=Žiniatinklio naršyklė
GenericName[lv]=Tīmekļa pārlūks
GenericName[ml]=വെബ് ബ്രൌസര്‍
GenericName[mr]=वेब ब्राऊजर
GenericName[nb]=Nettleser
GenericName[nl]=Webbrowser
GenericName[pl]=Przeglądarka WWW
GenericName[pt]=Navegador Web
GenericName[pt_BR]=Navegador da Internet
GenericName[ro]=Navigator de Internet
GenericName[ru]=Веб-браузер
GenericName[sl]=Spletni brskalnik
GenericName[sv]=Webbläsare
GenericName[ta]=இணைய உலாவி
GenericName[th]=เว็บเบราว์เซอร์
GenericName[tr]=Web Tarayıcı
GenericName[uk]=Навігатор Тенет
GenericName[zh_CN]=网页浏览器
GenericName[zh_HK]=網頁瀏覽器
GenericName[zh_TW]=網頁瀏覽器
# Not translated in KDE, from Epiphany 2.26.1-0ubuntu1.
GenericName[bn]=ওয়েব ব্রাউজার
GenericName[fil]=Web Browser
GenericName[hr]=Web preglednik
GenericName[id]=Browser Web
GenericName[or]=ଓ୍ବେବ ବ୍ରାଉଜର
GenericName[sk]=WWW prehliadač
GenericName[sr]=Интернет прегледник
GenericName[te]=మహాతల అన్వేషి
GenericName[vi]=Bộ duyệt Web
# Gnome and KDE 3 uses Comment.
Comment=Access the Internet
Comment[ar]=الدخول إلى الإنترنت
Comment[bg]=Достъп до интернет
Comment[bn]=ইন্টারনেটটি অ্যাক্সেস করুন
Comment[ca]=Accedeix a Internet
Comment[cs]=Přístup k internetu
Comment[da]=Få adgang til internettet
Comment[de]=Internetzugriff
Comment[el]=Πρόσβαση στο Διαδίκτυο
Comment[en_GB]=Access the Internet
Comment[es]=Accede a Internet.
Comment[et]=Pääs Internetti
Comment[fi]=Käytä internetiä
Comment[fil]=I-access ang Internet
Comment[fr]=Accéder à Internet
Comment[gu]=ઇંટરનેટ ઍક્સેસ કરો
Comment[he]=גישה אל האינטרנט
Comment[hi]=इंटरनेट तक पहुंच स्थापित करें
Comment[hr]=Pristup Internetu
Comment[hu]=Internetelérés
Comment[id]=Akses Internet
Comment[it]=Accesso a Internet
Comment[ja]=インターネットにアクセス
Comment[kn]=ಇಂಟರ್ನೆಟ್ ಅನ್ನು ಪ್ರವೇಶಿಸಿ
Comment[ko]=인터넷 연결
Comment[lt]=Interneto prieiga
Comment[lv]=Piekļūt internetam
Comment[ml]=ഇന്റര്‍‌നെറ്റ് ആക്‌സസ് ചെയ്യുക
Comment[mr]=इंटरनेटमध्ये प्रवेश करा
Comment[nb]=Gå til Internett
Comment[nl]=Verbinding maken met internet
Comment[or]=ଇଣ୍ଟର୍ନେଟ୍ ପ୍ରବେଶ କରନ୍ତୁ
Comment[pl]=Skorzystaj z internetu
Comment[pt]=Aceder à Internet
Comment[pt_BR]=Acessar a internet
Comment[ro]=Accesaţi Internetul
Comment[ru]=Доступ в Интернет
Comment[sk]=Prístup do siete Internet
Comment[sl]=Dostop do interneta
Comment[sr]=Приступите Интернету
Comment[sv]=Gå ut på Internet
Comment[ta]=இணையத்தை அணுகுதல்
Comment[te]=ఇంటర్నెట్‌ను ఆక్సెస్ చెయ్యండి
Comment[th]=เข้าถึงอินเทอร์เน็ต
Comment[tr]=İnternet'e erişin
Comment[uk]=Доступ до Інтернету
Comment[vi]=Truy cập Internet
Comment[zh_CN]=访问互联网
Comment[zh_HK]=連線到網際網路
Comment[zh_TW]=連線到網際網路
StartupNotify=true
StartupWMClass=brave-origin
Exec=brave-origin %U
Terminal=false
Icon=brave-origin
Type=Application
Categories=Network;WebBrowser;
MimeType=application/pdf;application/rdf+xml;application/rss+xml;application/xhtml+xml;application/xhtml_xml;application/xml;image/gif;image/jpeg;image/png;image/webp;text/html;text/xml;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/chromium;
Actions=new-window;new-private-window;
[Desktop Action new-window]
Name=New Window
Name[am]=አዲስ መስኮት
Name[ar]=نافذة جديدة
Name[bg]=Нов прозорец
Name[bn]=নতুন উইন্ডো
Name[ca]=Finestra nova
Name[cs]=Nové okno
Name[da]=Nyt vindue
Name[de]=Neues Fenster
Name[el]=Νέο Παράθυρο
Name[en_GB]=New Window
Name[es]=Nueva ventana
Name[et]=Uus aken
Name[fa]=پنجره جدید
Name[fi]=Uusi ikkuna
Name[fil]=New Window
Name[fr]=Nouvelle fenêtre
Name[gu]=નવી વિંડો
Name[hi]=नई विंडो
Name[hr]=Novi prozor
Name[hu]=Új ablak
Name[id]=Jendela Baru
Name[it]=Nuova finestra
Name[iw]=חלון חדש
Name[ja]=新規ウインドウ
Name[kn]=ಹೊಸ ವಿಂಡೊ
Name[ko]=새 창
Name[lt]=Naujas langas
Name[lv]=Jauns logs
Name[ml]=പുതിയ വിന്‍ഡോ
Name[mr]=नवीन विंडो
Name[nl]=Nieuw venster
Name[no]=Nytt vindu
Name[pl]=Nowe okno
Name[pt]=Nova janela
Name[pt_BR]=Nova janela
Name[ro]=Fereastră nouă
Name[ru]=Новое окно
Name[sk]=Nové okno
Name[sl]=Novo okno
Name[sr]=Нови прозор
Name[sv]=Nytt fönster
Name[sw]=Dirisha Jipya
Name[ta]=புதிய சாளரம்
Name[te]=క్రొత్త విండో
Name[th]=หน้าต่างใหม่
Name[tr]=Yeni Pencere
Name[uk]=Нове вікно
Name[vi]=Cửa sổ Mới
Name[zh_CN]=新建窗口
Name[zh_TW]=開新視窗
Exec=brave-origin
[Desktop Action new-private-window]
Name=New Incognito Window
Name[ar]=نافذة جديدة للتصفح المتخفي
Name[bg]=Нов прозорец „инкогнито“
Name[bn]=নতুন ছদ্মবেশী উইন্ডো
Name[ca]=Finestra d'incògnit nova
Name[cs]=Nové anonymní okno
Name[da]=Nyt inkognitovindue
Name[de]=Neues Inkognito-Fenster
Name[el]=Νέο παράθυρο για ανώνυμη περιήγηση
Name[en_GB]=New Incognito window
Name[es]=Nueva ventana de incógnito
Name[et]=Uus inkognito aken
Name[fa]=پنجره جدید حالت ناشناس
Name[fi]=Uusi incognito-ikkuna
Name[fil]=Bagong Incognito window
Name[fr]=Nouvelle fenêtre de navigation privée
Name[gu]=નવી છુપી વિંડો
Name[hi]=नई गुप्त विंडो
Name[hr]=Novi anoniman prozor
Name[hu]=Új Inkognitóablak
Name[id]=Jendela Penyamaran baru
Name[it]=Nuova finestra di navigazione in incognito
Name[iw]=חלון חדש לגלישה בסתר
Name[ja]=新しいシークレット ウィンドウ
Name[kn]=ಹೊಸ ಅಜ್ಞಾತ ವಿಂಡೋ
Name[ko]=새 시크릿 창
Name[lt]=Naujas inkognito langas
Name[lv]=Jauns inkognito režīma logs
Name[ml]=പുതിയ വേഷ പ്രച്ഛന്ന വിന്‍ഡോ
Name[mr]=नवीन गुप्त विंडो
Name[nl]=Nieuw incognitovenster
Name[no]=Nytt inkognitovindu
Name[pl]=Nowe okno incognito
Name[pt]=Nova janela de navegação anónima
Name[pt_BR]=Nova janela anônima
Name[ro]=Fereastră nouă incognito
Name[ru]=Новое окно в режиме инкогнито
Name[sk]=Nové okno inkognito
Name[sl]=Novo okno brez beleženja zgodovine
Name[sr]=Нови прозор за прегледање без архивирања
Name[sv]=Nytt inkognitofönster
Name[ta]=புதிய மறைநிலைச் சாளரம்
Name[te]=క్రొత్త అజ్ఞాత విండో
Name[th]=หน้าต่างใหม่ที่ไม่ระบุตัวตน
Name[tr]=Yeni Gizli pencere
Name[uk]=Нове вікно в режимі анонімного перегляду
Name[vi]=Cửa sổ ẩn danh mới
Name[zh_CN]=新建隐身窗口
Name[zh_TW]=新增無痕式視窗
Exec=brave-origin --incognito
+3 -3
View File
@@ -4,7 +4,7 @@
# Automation repository: https://github.com/fabifont/claude-code-aur
pkgname=claude-code
pkgver=2.1.278
pkgver=2.1.283
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=('5c4735937844e84f8a93306e841a5b0e12252909b07870f789b190468da147ab')
sha256sums_aarch64=('7de6cab134e48321148e30182c98614118e8f4666819412bead45865190b34ed')
sha256sums_x86_64=('1859583ce32920595c61ef868bee52e1b1594f7486db209935e01f1e5e804ae2')
sha256sums_aarch64=('346d294f0103d6fc0de11ac953579b5c62dfa90698a4cfc486b6f927c615e697')
package() {
install -Dm755 "${srcdir}/claude-${pkgver}-${CARCH}" "${pkgdir}/opt/claude-code/bin/claude"
+3 -3
View File
@@ -6,7 +6,7 @@
# repository's package index.
pkgname=claude-desktop
pkgver=2.2553.1
pkgver=2.7032.0
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=('6700fdd84e77a6b8c93912c2f69eb5d1e40fa99bcd9d37f438f809ef2a6fe6f8')
sha256sums_aarch64=('0003a6f9605a210f03c38670d62cd59c71153c2702aa4427e4cabe2e2e5f3390')
sha256sums_x86_64=('1e7f4504bca5b2f6b2d3c4123d145d727647e77f2ee2d046850711e61e7d7b11')
sha256sums_aarch64=('6dca79fa4c8b65267780b5460c627159852e2dfa2ad011d03a0488f7bf226ec3')
package() {
cd "${srcdir}"
+5 -5
View File
@@ -3,7 +3,7 @@
# Maintainer: caarlos0 <carlos@charm.sh>
pkgname='crush-bin'
pkgver=0.96.0
pkgver=0.96.1
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=('667062a39d499506b0fe151148f8d7a1c5cb5722902080d44bb3dd2ddafbf5c1')
sha256sums_aarch64=('4bfe4a37aedeb4219d51eb7a25b837304084070378e77fd578999764b487f01f')
source_armv7h=("${pkgname}_${pkgver}_armv7h.tar.gz::https://github.com/charmbracelet/crush/releases/download/v${pkgver}/crush_${pkgver}_Linux_armv7.tar.gz")
sha256sums_armv7h=('1de4c1ccb237743e4debb8c302df612fcef5c9b3b5378f5b65c8c6f8bc15cbfa')
sha256sums_armv7h=('e2926383bdf97ab97e52e214fe810570abcff39d00cfe72eaf07eca958f1214c')
source_i686=("${pkgname}_${pkgver}_i686.tar.gz::https://github.com/charmbracelet/crush/releases/download/v${pkgver}/crush_${pkgver}_Linux_i386.tar.gz")
sha256sums_i686=('4ec66431565de5721afb7afdd99e45ff6bc9c7e667bd18d9696ea7c5622e158d')
sha256sums_i686=('bff753c454b1e9f18d5c3ab4f4395e3e6a505d1a4c033d50653e004647c166c2')
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=('5b33303a404acacf761c027e9fa9e69d4d2dd050c2690abe40877c49574b7475')
sha256sums_x86_64=('5411b0906a82162dcab4a99071d70accf1caad0eee69789416dd607943c6680d')
package() {
case "$CARCH" in
+3 -3
View File
@@ -18,7 +18,7 @@
# binary to point at pm.sh, a stand-in that declines and names pacman instead.
pkgname=cua-driver-bin
pkgver=0.28.2
pkgver=0.29.1
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=('8f3e5b669e2bcd98d0eecc64f40640aac77f358b6332a06abc6ee79991620f7d')
sha256sums_aarch64=('cadd7e6b757c3ce50f2b5f6e273c154ea48450fb5fcaff744209b382915eddf5')
sha256sums_x86_64=('61a0c0f24d6b03e31bb7a73390db875ecf0de2ce53aa435eadb03d70979d79a5')
sha256sums_aarch64=('47c1efa081057c9c1a18e45b20cb7dd0d7d2313520d18ba7d0d35f271005fe19')
case "${CARCH}" in
x86_64) _platform="linux-x86_64" ;;
+32 -12
View File
@@ -1,33 +1,53 @@
# Maintainer: Gunther Schulz <dev@guntherschulz.de>
pkgname=cursor-bin
pkgver=3.21.16
pkgrel=2
pkgver=3.22.7
pkgrel=1
pkgdesc='AI-first coding environment'
arch=('x86_64')
arch=('x86_64' 'aarch64')
url="https://www.cursor.com"
license=('LicenseRef-Cursor_EULA')
# upstream uses Electron newer than internal VSCode
_electron=electron42
depends=(xdg-utils ripgrep $_electron nodejs
'gcc-libs' 'hicolor-icon-theme' 'libxkbfile')
depends=(xdg-utils gcc-libs hicolor-icon-theme libxkbfile)
depends_x86_64=(ripgrep $_electron nodejs)
# ARM retains bundled Electron because electron42 is unavailable in ALARM.
depends_aarch64=(
alsa-lib at-spi2-core ca-certificates cairo curl dbus expat glib2 glibc gtk3
libcups libsecret libx11 libxcb libxcomposite libxdamage libxext libxfixes
libxkbcommon libxrandr mesa nspr nss pango systemd-libs which
)
options=(!strip !debug) # Don't break ext of VSCode
_commit=8ae78e8eee1e63479c7e0504b664bc0a80c6800f
source=("https://downloads.cursor.com/production/${_commit}/linux/x64/deb/amd64/deb/cursor_${pkgver}_amd64.deb"
_commit=37076c6c3f9e253c0fa2305197e45befd13a2268
source_x86_64=("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=('032c86a5d51f154ce36b1a0bf34aa06b2d117666b4372a787ea3117fc0b2b1686e952c721388f2eaf7787f2e0581378c98608048126f7470df2e85e9dbd75ca4' '937299c6cb6be2f8d25f7dbc95cf77423875c5f8353b8bd6cd7cc8e5603cbf8405b14dbf8bd615db2e3b36ed680fc8e1909410815f7f8587b7267a699e00ab37' '793f9ff6306e3992ac89802d98110cba288ea1181a901467333293b7d76182ef9792c2a39ff49d9347a18a174b1f42bc58862091dff583f4146c2704eea28033' 'e79fe7659f59d1ae02fc68816399bfd31587315df6cdb6ccf1d0ca76f7cdc692c2a42b30591c0091147bd97ef14b1c7745dc26bd7cb3ea6bba45698e5044fa2a')
noextract=(cursor_${pkgver}_amd64.deb) # avoid double tarball
sha512sums_x86_64=('f061675a7de3552feebda762d6ff5a296035e13527da9405c73e89cde9604137c52a1c8681ef29ad6aeb37b29ad6ab3733fe46e342950850241c91041c6613f8' '937299c6cb6be2f8d25f7dbc95cf77423875c5f8353b8bd6cd7cc8e5603cbf8405b14dbf8bd615db2e3b36ed680fc8e1909410815f7f8587b7267a699e00ab37' '793f9ff6306e3992ac89802d98110cba288ea1181a901467333293b7d76182ef9792c2a39ff49d9347a18a174b1f42bc58862091dff583f4146c2704eea28033' 'e79fe7659f59d1ae02fc68816399bfd31587315df6cdb6ccf1d0ca76f7cdc692c2a42b30591c0091147bd97ef14b1c7745dc26bd7cb3ea6bba45698e5044fa2a')
source_aarch64=("https://downloads.cursor.com/production/${_commit}/linux/arm64/deb/arm64/deb/cursor_${pkgver}_arm64.deb")
sha512sums_aarch64=('32d64ef0fdd9f672c374ea33a1d1d6b6b68df3f598f840b33215f5428c491deba1d587b93f4460ffe0f815126b928dd3befed8878b6fe6b3bcd375da8bed1716')
noextract=(cursor_${pkgver}_amd64.deb cursor_${pkgver}_arm64.deb) # avoid double tarball
_app=usr/share/cursor/resources/app
package() {
# Exclude electron
bsdtar -xOf ${noextract[0]} data.tar.xz | tar -xJf - -C "$pkgdir" \
--exclude 'usr/share/cursor/[^r]*' --exclude 'usr/share/cursor/*.pak'
local deb="cursor_${pkgver}_amd64.deb"
local -a excludes=(--exclude 'usr/share/cursor/[^r]*' --exclude 'usr/share/cursor/*.pak')
if [[ "$CARCH" == aarch64 ]]; then
deb="cursor_${pkgver}_arm64.deb"
# Keep bundled Electron; omit Debian's AppArmor and sysctl settings.
excludes=(--exclude './etc')
fi
bsdtar -xOf "${srcdir}/${deb}" data.tar.xz | tar -xJf - -C "$pkgdir" "${excludes[@]}"
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}
if [[ "$CARCH" == aarch64 ]]; then
install -d usr/bin
ln -s /usr/share/cursor/bin/cursor usr/bin/cursor
# Use Electron's unprivileged namespace sandbox.
chmod 0755 usr/share/cursor/chrome-sandbox
return
fi
ln -sf /usr/bin/node ${_app}/resources/helpers/node
install -Dm755 "${srcdir}/rg.sh" ${_app}/node_modules/@vscode/ripgrep/bin/rg
ln -sf /usr/bin/xdg-open ${_app}/node_modules/open/xdg-open
+3 -3
View File
@@ -1,7 +1,7 @@
# Maintainer: Ismet Togay <ismet.togay at gmail dot com>
# Contributor: Christopher Cooper <christopher@cg505.com>
pkgname=cursor-cli
pkgver=2026.09.18.1.9a7762b
pkgver=2026.09.26.1.dd393fe
# 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=('3fccee6929df1042d03461895e56c222a996d3ae9e4f9c61dcc5e6ab7b1d075d3265c21a44f48dd94de0dcde4f8012cc39bfbf323e2bb0c6106cac79885c35ae')
b2sums_aarch64=('3d3bb0a3cb7e2409acf4925f207eaa4e3f41782c3c947e2834b69664b116b972da0b67eea17147fc524ea248af9919494570adc7c48d12c44f12deca17ba2c28')
b2sums_x86_64=('799276ea8ba5dc410ff7e4ae1b9c095bcbaaa7ed6806a78ce249c10dbf9cc523a0ee5402f743e5a5a2cac87be59ffeff7a1b3dbb1ed062932dc300e2e57c9009')
b2sums_aarch64=('417bfda50e13b9848f15ace73fb828632db766b54eb05bd0944bbe14ec49c780f870ea850d67dad40e073692e683436134056e24be5b3287bf8c481d713d9840')
prepare() {
# Block cursor-agent auto-updates by making its versions directory
+4 -4
View File
@@ -2,7 +2,7 @@
_pkgname="dbxcli"
pkgname="${_pkgname}-bin"
pkgver=3.7.3
pkgver=3.7.4
pkgrel=1
pkgdesc="A command line client for Dropbox built using the Go SDK"
arch=(
@@ -33,9 +33,9 @@ source_armv7h=(
source_x86_64=(
"${url}/releases/download/v${pkgver}/${_pkgname}_${pkgver}_linux_amd64.tar.gz"
)
sha256sums_aarch64=('9d654da62a1ac10c9e32ee8f66fa6cc8d88ed29bc95555435a5ce4255eb4b96a')
sha256sums_armv7h=('8067cee274dc2f062a06ceda26200c44d9251336ec235f7d7a3826743c9a379e')
sha256sums_x86_64=('fee977ce4144174356cd7d1bae0b546aecad2570f14666bd44417e96af943484')
sha256sums_aarch64=('c2101af4149ff4104dcfac515c85dedf3a9a3fdff43aac0d650c16df17fcf1f2')
sha256sums_armv7h=('90311a7058ce706e38f6bac06461660308460f59e1c4e5ff5743e62eb3292097')
sha256sums_x86_64=('eb9624bbe2c89287caa5b02ba120bc486d9f4c5ffb5f51d884fc7c40620da730')
prepare() {
local source_array="source_${CARCH}[0]"
+4 -12
View File
@@ -15,19 +15,15 @@ pkgver=10.0.401
_runtimever=10.0.12
_sdkver=$pkgver
_short_ver=10.0
pkgrel=1
arch=('x86_64' 'armv7h' 'aarch64')
pkgrel=2
arch=('aarch64')
url='https://www.microsoft.com/net/core'
license=('MIT')
options=('staticlibs')
options=('staticlibs' '!debug')
source=('dotnet.sh')
source_armv7h=("https://builds.dotnet.microsoft.com/dotnet/Sdk/${_sdkver}/dotnet-sdk-${_sdkver}-linux-arm.tar.gz")
source_aarch64=("https://builds.dotnet.microsoft.com/dotnet/Sdk/${_sdkver}/dotnet-sdk-${_sdkver}-linux-arm64.tar.gz")
source_x86_64=("https://builds.dotnet.microsoft.com/dotnet/Sdk/${_sdkver}/dotnet-sdk-${_sdkver}-linux-x64.tar.gz")
sha512sums=('768151c7179fb6a126b3de9cae01e363e8894f6fab384b1e2c5066c2adca4578638983b1b62aea10dd18045e6d6e8f8ea13280481134de94f004a118919b2c06')
sha512sums_armv7h=('94a8a52862ca9f0de1075a468d6e4e307a1d4463098a9e8266e66939709a812b0126e212cce7e8c6feae6b078d86c8b77e088814a0e32531edb0da0a1ce90c11')
sha512sums_aarch64=('58ace73ced6b4360754689a686bdfb8a317f4da6cb8bb416dbc7d0ba9f47e43e3c09f5eb1f1a1cfaacbd10df9558da4882bf2a5e195d6ab56a02c1f9f76102ed')
sha512sums_x86_64=('51c8b999af9e8dd9998c9edc5944e19a90788862068acd38694e098889054ce8c23d4f0c5cccfa16bf187d044562359e5ee69a9f8ad0bbe913ba90311fbce25b')
# Keep each split package's notices usable when installed independently.
_install_license() {
@@ -110,12 +106,8 @@ package_dotnet-targeting-pack-bin() {
provides=(dotnet-targeting-pack=${_runtimever} dotnet-targeting-pack-${_short_ver})
conflicts=(dotnet-targeting-pack=${_runtimever} dotnet-targeting-pack-${_short_ver})
if [ $CARCH = 'x86_64' ]; then msarch=x64;
elif [ $CARCH = 'armv7h' ]; then msarch=arm;
elif [ $CARCH = 'aarch64' ]; then msarch=arm64; fi
install -dm 755 "${pkgdir}"/usr/share/{dotnet,dotnet/packs,licenses}
cp -dr --no-preserve='ownership' packs/Microsoft.NETCore.App.{Host.linux-${msarch},Ref} "${pkgdir}"/usr/share/dotnet/packs/
cp -dr --no-preserve='ownership' packs/Microsoft.NETCore.App.{Host.linux-arm64,Ref} "${pkgdir}"/usr/share/dotnet/packs/
_install_license
}
+2 -2
View File
@@ -1,7 +1,7 @@
# Maintainer: Andrej Benz <hello[at]benz[dot]dev>
pkgname=elephant-all
pkgver=2.22.0
pkgver=2.22.1
pkgrel=1
pkgdesc='elephant + all official elephant providers'
url='https://github.com/abenz1267/elephant'
@@ -12,7 +12,7 @@ makedepends=('go')
conflicts=('elephant' 'elephant-playerctl' 'elephant-wireplumber' 'elephant-bitwarden' 'elephant-dnfpackages' 'elephant-1password' 'elephant-bookmarks' 'elephant-nirisessions' 'elephant-niriactions' 'elephant-archlinuxpkgs' 'elephant-bluetooth' 'elephant-calc' 'elephant-clipboard' 'elephant-desktopapplications' 'elephant-files' 'elephant-menus' 'elephant-providerlist' 'elephant-runner' 'elephant-snippets' 'elephant-symbols' 'elephant-todo' 'elephant-unicode' 'elephant-websearch' 'elephant-windows')
provides=('elephant' 'elephant-playerctl' 'elephant-wireplumber' 'elephant-nirisessions' 'elephant-niriactions' 'elephant-archlinuxpkgs' 'elephant-bluetooth' 'elephant-calc' 'elephant-clipboard' 'elephant-desktopapplications' 'elephant-files' 'elephant-menus' 'elephant-providerlist' 'elephant-runner' 'elephant-snippets' 'elephant-symbols' 'elephant-todo' 'elephant-unicode' 'elephant-websearch' 'elephant-windows')
source=("${url}/archive/refs/tags/v${pkgver}.tar.gz")
sha256sums=('c6caa61727e4b5c3981099943b4b616c338a6e1b4e33b5e1d32078b8e4dbe120')
sha256sums=('3d1d0d4c55ae531fa3f06406b96504b5165a0d7b53523d1f8351d9d93e457f44')
build() {
# Build main elephant binary
+2 -2
View File
@@ -1,7 +1,7 @@
# Maintainer: Andrej Benz <hello[at]benz[dot]dev>
pkgname=elephant-archlinuxpkgs
pkgver=2.22.0
pkgver=2.22.1
pkgrel=1
pkgdesc='archlinuxpkgs provider for elephant'
url='https://github.com/abenz1267/elephant'
@@ -11,7 +11,7 @@ makedepends=('go')
conflicts=('elephant-archlinuxpkgs')
provides=('elephant-archlinuxpkgs')
source=("${url}/archive/refs/tags/v${pkgver}.tar.gz")
sha256sums=('c6caa61727e4b5c3981099943b4b616c338a6e1b4e33b5e1d32078b8e4dbe120')
sha256sums=('3d1d0d4c55ae531fa3f06406b96504b5165a0d7b53523d1f8351d9d93e457f44')
build() {
cd elephant-${pkgver}/internal/providers/archlinuxpkgs
+2 -2
View File
@@ -1,7 +1,7 @@
# Maintainer: Andrej Benz <hello[at]benz[dot]dev>
pkgname=elephant-bluetooth
pkgver=2.22.0
pkgver=2.22.1
pkgrel=1
pkgdesc='bluetooth provider for elephant'
url='https://github.com/abenz1267/elephant'
@@ -11,7 +11,7 @@ makedepends=('go')
conflicts=('elephant-bluetooth')
provides=('elephant-bluetooth')
source=("${url}/archive/refs/tags/v${pkgver}.tar.gz")
sha256sums=('c6caa61727e4b5c3981099943b4b616c338a6e1b4e33b5e1d32078b8e4dbe120')
sha256sums=('3d1d0d4c55ae531fa3f06406b96504b5165a0d7b53523d1f8351d9d93e457f44')
build() {
cd elephant-${pkgver}/internal/providers/bluetooth
+2 -2
View File
@@ -1,7 +1,7 @@
# Maintainer: Andrej Benz <hello[at]benz[dot]dev>
pkgname=elephant-calc
pkgver=2.22.0
pkgver=2.22.1
pkgrel=1
pkgdesc='calc provider for elephant'
url='https://github.com/abenz1267/elephant'
@@ -12,7 +12,7 @@ makedepends=('go')
conflicts=('elephant-calc')
provides=('elephant-calc')
source=("${url}/archive/refs/tags/v${pkgver}.tar.gz")
sha256sums=('c6caa61727e4b5c3981099943b4b616c338a6e1b4e33b5e1d32078b8e4dbe120')
sha256sums=('3d1d0d4c55ae531fa3f06406b96504b5165a0d7b53523d1f8351d9d93e457f44')
build() {
cd elephant-${pkgver}/internal/providers/calc
+2 -2
View File
@@ -1,7 +1,7 @@
# Maintainer: Andrej Benz <hello[at]benz[dot]dev>
pkgname=elephant-clipboard
pkgver=2.22.0
pkgver=2.22.1
pkgrel=1
pkgdesc='clipboard provider for elephant'
url='https://github.com/abenz1267/elephant'
@@ -12,7 +12,7 @@ makedepends=('go')
conflicts=('elephant-clipboard')
provides=('elephant-clipboard')
source=("${url}/archive/refs/tags/v${pkgver}.tar.gz")
sha256sums=('c6caa61727e4b5c3981099943b4b616c338a6e1b4e33b5e1d32078b8e4dbe120')
sha256sums=('3d1d0d4c55ae531fa3f06406b96504b5165a0d7b53523d1f8351d9d93e457f44')
build() {
cd elephant-${pkgver}/internal/providers/clipboard
@@ -1,7 +1,7 @@
# Maintainer: Andrej Benz <hello[at]benz[dot]dev>
pkgname=elephant-desktopapplications
pkgver=2.22.0
pkgver=2.22.1
pkgrel=1
pkgdesc='desktopapplications provider for elephant'
url='https://github.com/abenz1267/elephant'
@@ -11,7 +11,7 @@ makedepends=('go')
conflicts=('elephant-desktopapplications')
provides=('elephant-desktopapplications')
source=("${url}/archive/refs/tags/v${pkgver}.tar.gz")
sha256sums=('c6caa61727e4b5c3981099943b4b616c338a6e1b4e33b5e1d32078b8e4dbe120')
sha256sums=('3d1d0d4c55ae531fa3f06406b96504b5165a0d7b53523d1f8351d9d93e457f44')
build() {
cd elephant-${pkgver}/internal/providers/desktopapplications
+2 -2
View File
@@ -1,7 +1,7 @@
# Maintainer: Andrej Benz <hello[at]benz[dot]dev>
pkgname=elephant-files
pkgver=2.22.0
pkgver=2.22.1
pkgrel=1
pkgdesc='files provider for elephant'
url='https://github.com/abenz1267/elephant'
@@ -12,7 +12,7 @@ makedepends=('go')
conflicts=('elephant-files')
provides=('elephant-files')
source=("${url}/archive/refs/tags/v${pkgver}.tar.gz")
sha256sums=('c6caa61727e4b5c3981099943b4b616c338a6e1b4e33b5e1d32078b8e4dbe120')
sha256sums=('3d1d0d4c55ae531fa3f06406b96504b5165a0d7b53523d1f8351d9d93e457f44')
build() {
cd elephant-${pkgver}/internal/providers/files
+2 -2
View File
@@ -1,7 +1,7 @@
# Maintainer: Andrej Benz <hello[at]benz[dot]dev>
pkgname=elephant-menus
pkgver=2.22.0
pkgver=2.22.1
pkgrel=1
pkgdesc='menus provider for elephant'
url='https://github.com/abenz1267/elephant'
@@ -11,7 +11,7 @@ makedepends=('go')
conflicts=('elephant-menus')
provides=('elephant-menus')
source=("${url}/archive/refs/tags/v${pkgver}.tar.gz")
sha256sums=('c6caa61727e4b5c3981099943b4b616c338a6e1b4e33b5e1d32078b8e4dbe120')
sha256sums=('3d1d0d4c55ae531fa3f06406b96504b5165a0d7b53523d1f8351d9d93e457f44')
build() {
cd elephant-${pkgver}/internal/providers/menus
+2 -2
View File
@@ -1,7 +1,7 @@
# Maintainer: Andrej Benz <hello[at]benz[dot]dev>
pkgname=elephant-providerlist
pkgver=2.22.0
pkgver=2.22.1
pkgrel=1
pkgdesc='providerlist provider for elephant'
url='https://github.com/abenz1267/elephant'
@@ -11,7 +11,7 @@ makedepends=('go')
conflicts=('elephant-providerlist')
provides=('elephant-providerlist')
source=("${url}/archive/refs/tags/v${pkgver}.tar.gz")
sha256sums=('c6caa61727e4b5c3981099943b4b616c338a6e1b4e33b5e1d32078b8e4dbe120')
sha256sums=('3d1d0d4c55ae531fa3f06406b96504b5165a0d7b53523d1f8351d9d93e457f44')
build() {
cd elephant-${pkgver}/internal/providers/providerlist
+2 -2
View File
@@ -1,7 +1,7 @@
# Maintainer: Andrej Benz <hello[at]benz[dot]dev>
pkgname=elephant-runner
pkgver=2.22.0
pkgver=2.22.1
pkgrel=1
pkgdesc='runner provider for elephant'
url='https://github.com/abenz1267/elephant'
@@ -11,7 +11,7 @@ makedepends=('go')
conflicts=('elephant-runner')
provides=('elephant-runner')
source=("${url}/archive/refs/tags/v${pkgver}.tar.gz")
sha256sums=('c6caa61727e4b5c3981099943b4b616c338a6e1b4e33b5e1d32078b8e4dbe120')
sha256sums=('3d1d0d4c55ae531fa3f06406b96504b5165a0d7b53523d1f8351d9d93e457f44')
build() {
cd elephant-${pkgver}/internal/providers/runner
+2 -2
View File
@@ -1,7 +1,7 @@
# Maintainer: Andrej Benz <hello[at]benz[dot]dev>
pkgname=elephant-symbols
pkgver=2.22.0
pkgver=2.22.1
pkgrel=1
pkgdesc='symbols provider for elephant'
url='https://github.com/abenz1267/elephant'
@@ -11,7 +11,7 @@ makedepends=('go')
conflicts=('elephant-symbols')
provides=('elephant-symbols')
source=("${url}/archive/refs/tags/v${pkgver}.tar.gz")
sha256sums=('c6caa61727e4b5c3981099943b4b616c338a6e1b4e33b5e1d32078b8e4dbe120')
sha256sums=('3d1d0d4c55ae531fa3f06406b96504b5165a0d7b53523d1f8351d9d93e457f44')
build() {
cd elephant-${pkgver}/internal/providers/symbols
+2 -2
View File
@@ -1,7 +1,7 @@
# Maintainer: Andrej Benz <hello[at]benz[dot]dev>
pkgname=elephant-todo
pkgver=2.22.0
pkgver=2.22.1
pkgrel=1
pkgdesc='todo provider for elephant'
url='https://github.com/abenz1267/elephant'
@@ -11,7 +11,7 @@ makedepends=('go')
conflicts=('elephant-todo')
provides=('elephant-todo')
source=("${url}/archive/refs/tags/v${pkgver}.tar.gz")
sha256sums=('c6caa61727e4b5c3981099943b4b616c338a6e1b4e33b5e1d32078b8e4dbe120')
sha256sums=('3d1d0d4c55ae531fa3f06406b96504b5165a0d7b53523d1f8351d9d93e457f44')
build() {
cd elephant-${pkgver}/internal/providers/todo
+2 -2
View File
@@ -1,7 +1,7 @@
# Maintainer: Andrej Benz <hello[at]benz[dot]dev>
pkgname=elephant-unicode
pkgver=2.22.0
pkgver=2.22.1
pkgrel=1
pkgdesc='unicode provider for elephant'
url='https://github.com/abenz1267/elephant'
@@ -11,7 +11,7 @@ makedepends=('go')
conflicts=('elephant-unicode')
provides=('elephant-unicode')
source=("${url}/archive/refs/tags/v${pkgver}.tar.gz")
sha256sums=('c6caa61727e4b5c3981099943b4b616c338a6e1b4e33b5e1d32078b8e4dbe120')
sha256sums=('3d1d0d4c55ae531fa3f06406b96504b5165a0d7b53523d1f8351d9d93e457f44')
build() {
cd elephant-${pkgver}/internal/providers/unicode
+2 -2
View File
@@ -1,7 +1,7 @@
# Maintainer: Andrej Benz <hello[at]benz[dot]dev>
pkgname=elephant-websearch
pkgver=2.22.0
pkgver=2.22.1
pkgrel=1
pkgdesc='websearch provider for elephant'
url='https://github.com/abenz1267/elephant'
@@ -11,7 +11,7 @@ makedepends=('go')
conflicts=('elephant-websearch')
provides=('elephant-websearch')
source=("${url}/archive/refs/tags/v${pkgver}.tar.gz")
sha256sums=('c6caa61727e4b5c3981099943b4b616c338a6e1b4e33b5e1d32078b8e4dbe120')
sha256sums=('3d1d0d4c55ae531fa3f06406b96504b5165a0d7b53523d1f8351d9d93e457f44')
build() {
cd elephant-${pkgver}/internal/providers/websearch
+2 -2
View File
@@ -1,7 +1,7 @@
# Maintainer: Andrej Benz <hello[at]benz[dot]dev>
pkgname=elephant
pkgver=2.22.0
pkgver=2.22.1
pkgrel=1
pkgdesc='general purpose datasource and executor'
url='https://github.com/abenz1267/elephant'
@@ -11,7 +11,7 @@ makedepends=('go')
conflicts=('elephant')
provides=('elephant')
source=("${url}/archive/refs/tags/v${pkgver}.tar.gz")
sha256sums=('c6caa61727e4b5c3981099943b4b616c338a6e1b4e33b5e1d32078b8e4dbe120')
sha256sums=('3d1d0d4c55ae531fa3f06406b96504b5165a0d7b53523d1f8351d9d93e457f44')
build() {
cd ${pkgname}-${pkgver}/cmd/elephant
-17
View File
@@ -1,17 +0,0 @@
# elsewhen
Installs the Elsewhen world clock plugin from the `v{pkgver}` GitHub tag archive into `/usr/share/omarchy/shell/plugins/omacom.elsewhen/` (the directory name is the plugin id the shell scans for, not the package name), plus `LICENSE` under `/usr/share/licenses/elsewhen/` and the upstream `README.md` under `/usr/share/doc/elsewhen/`. The shell scans this directory alongside its bundled plugins.
`package()` copies an explicit allow-list (`manifest.json`, every `*.qml` and `*.js`, `cities.json`, `world.json`, `worldclock-data.py`), so `tests/`, `.github/` and `.gitignore` never ship, and it fails the build if `manifest.json` is missing, does not declare `omacom.elsewhen`, or does not name a present `Panel.qml` as the entry point. An upstream release that adds a runtime file outside those patterns needs the allow-list extended here; the sync only moves versions and checksums. Every file is 0644: `Panel.qml` runs the script as `python3 <plugin dir>/worldclock-data.py`, so it needs no execute bit. No install hook: Omarchy restarts the shell after `omarchy update`, and nothing here may write into a user home. The script's only writes go to `$XDG_CACHE_HOME/omacom-elsewhen/`, which it creates itself at runtime.
Dependencies, cited as `file: tool` in the upstream tree:
- `omarchy`: `ArcText.qml`, `Chip.qml`, `EarthRow.qml`, `Globe.qml`, `MiniGlobe.qml`, `MoonDot.qml`, `Panel.qml: import qs.Commons`; `EarthRow.qml`, `Globe.qml`, `Panel.qml: import qs.Ui`. Owns `/usr/share/omarchy` and the shell plugin directory.
- `quickshell`: `Globe.qml`, `Panel.qml: import Quickshell`; `Globe.qml`, `MiniGlobe.qml`, `Panel.qml: import Quickshell.Io` (`Process`, `FileView`, `StdioCollector`).
- `python`: `Panel.qml: python3 <plugin dir>/worldclock-data.py` (the facts process). `worldclock-data.py` imports only `json`, `os`, `sys`, `time`, `urllib`.
- Left implicit as members of `base`, per Arch convention: `bash` (`Panel.qml`, `Globe.qml: bash -c` wraps every probe), `coreutils` (`Panel.qml`, `Globe.qml: date`, one probe per refresh), `systemd` (`Panel.qml: timedatectl show`, `timedatectl list-timezones`, each with a fallback: `/etc/localtime` for the home zone and `find /usr/share/zoneinfo` for the catalog), `sed` and `grep` (`Panel.qml`: the symlink target of `/etc/localtime` and the zoneinfo catalog filter), `findutils` and `tzdata` (that fallback; `worldclock-data.py: /usr/share/zoneinfo/zone1970.tab`). `omarchy` cannot run without any of them either.
- Not a dependency: `iso-codes`. Only `tests/currency_check.py` reads `/usr/share/iso-codes/json`, to validate the currency table before a release; the runtime never touches it.
Release tracking: `bin/sync-upstream` follows `omacom/elsewhen` through the `upstream.watch.github` provider, which reads the GitHub Releases feed (drafts and prereleases excluded; a tag with no published Release is not seen) and matches exactly `vX.Y.Z`, the grammar upstream's `scripts/set-version.sh` enforces. A newer release rewrites `pkgver`, resets `pkgrel` to 1, fetches `archive/refs/tags/v{pkgver}.tar.gz` again and rewrites `sha256sums` from the download. The Release's `published_at` is what lets `min_release_age: 24h` hold a fresh release for a day; `release_ring: fast` builds it straight to rc and stable as well as edge.
The watch only moves on a version increase, so the first release's digest is filled in by hand (`curl -fsSL <archive url> | sha256sum`), which is why the recipe carries a placeholder until the `v0.1.0` tag exists. Until upstream has published at least one Release, the watch finds nothing and fails the scheduled `sync-upstream` run for every package in the batch, so this recipe stays a draft until then.
-11
View File
@@ -1,11 +0,0 @@
{
"source": "local",
"release_ring": "fast",
"min_release_age": "24h",
"upstream": {
"watch": {
"github": "omacom/elsewhen",
"pattern": "v(?P<version>[0-9]+\\.[0-9]+\\.[0-9]+)"
}
}
}
-63
View File
@@ -1,63 +0,0 @@
# 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"
}
+7 -33
View File
@@ -1,6 +1,12 @@
#!/bin/bash
# Verify Flea's published source archive against its checksum manifest when a
# newer stable release exists, then check its root and required security fixes.
# newer stable release exists, then check its root.
#
# Through 0.1.x this also grepped the source for the upstream security fixes
# Omarchy once carried as patches, so the package could not move to a release
# that lacked them. Every release since 0.1.5 has had them, and matching
# literal source lines only ever caught renames (#488, 0.3.5's
# open_if_regular_with_meta), never a regression.
set -euo pipefail
REPO='thisisgm/flea'
@@ -74,38 +80,6 @@ if [[ $served_roots != "$expected_root" ]]; then
exit 1
fi
archive_rs=$(tar -xOzf "$tarball" "$expected_root/src/backend/archive.rs")
archiveops_rs=$(tar -xOzf "$tarball" "$expected_root/src/backend/archiveops.rs")
run_rs=$(tar -xOzf "$tarball" "$expected_root/src/backend/run.rs")
archivereq_rs=$(tar -xOzf "$tarball" "$expected_root/src/backend/archivereq.rs")
archivework_rs=$(tar -xOzf "$tarball" "$expected_root/src/backend/archivework.rs")
mediaprobe_rs=$(tar -xOzf "$tarball" "$expected_root/src/backend/mediaprobe.rs")
metareq_rs=$(tar -xOzf "$tarball" "$expected_root/src/backend/metareq.rs")
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" ||
! grep -Fq 'the sandbox is unavailable: bwrap or prlimit is not on PATH' <<<"$archivework_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 -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
fi
jq -n \
--arg pkgver "$best_version" \
--arg published_at "$best_published_at" \
+20 -3
View File
@@ -1,8 +1,8 @@
# Maintainer: GM <gianmarcomorales@icloud.com>
pkgname=flea
pkgver=0.3.1
pkgrel=2
pkgver=0.3.5
pkgrel=1
pkgdesc='Fast, keyboard-first file manager for Omarchy'
arch=('x86_64' 'aarch64')
url='https://github.com/thisisgm/flea'
@@ -52,7 +52,7 @@ options=('!debug')
source=(
"$url/releases/download/v$pkgver/$pkgname-v$pkgver.tar.gz"
)
sha256sums=('b146ac3f5025da987eae623c4392c44ce69a6a7275a8df3ec1a84563920a4dd2')
sha256sums=('947bd1ad17238e6402af044f848662a4c20e9a82e5a61062ef2e10bb6c2d4cfe')
build() {
cd "$pkgname-$pkgver"
@@ -115,7 +115,12 @@ check() {
# 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.
# copymanifest's garbage-stream test opens its O_TMPFILE manifest in its
# own test dir; the module's other tests must stay off tmpfs, because
# Writer::create wants a runtime dir on a different filesystem from the
# copy and finds none when both live on /dev/shm.
local -a filesystem_tests=(
backend::copymanifest::tests::a_garbage_stream_falls_back_with_the_tree_untouched
backend::menu_actions::tests::
backend::menudelete::tests::
backend::redo::tests::
@@ -151,6 +156,18 @@ check() {
--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
)
# deep_directory_tree_fits_the_worker_stack sizes a tree 1900 folders
# deep and expects a complete answer, but the listing walk stops at its
# 2000 ms deadline (dirsize::DEADLINE_MS) and reports partial; emulated
# read_dir over paths near PATH_MAX does not finish in time.
# closing_a_query_kills_its_process_group_and_releases_the_service
# cancels an `sh -c 'sleep 600 & wait'` child the moment it is
# registered and waits 5 s for the capture to return. Unchanged since
# 0.3.1, which passed it here; under emulation it now loses that race.
test_args+=(
--skip backend::dirsizeworker::tests::deep_directory_tree_fits_the_worker_stack
--skip backend::menu_registry::tests::closing_a_query_kills_its_process_group_and_releases_the_service
)
fi
local test_tmp test_status=0 suite
+3 -3
View File
@@ -6,7 +6,7 @@ _npmmodule=@github/copilot
pkgname=github-copilot-cli
_pkgexec=copilot
pkgver=1.0.86
pkgver=1.0.88
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=(
'4c6433345f08199e96dcf8db1c3e46a337dfab96cea32132d6127ffcd63a6200'
'b94d2aab574cf3e0c8d950e72430186cdd918261a1376146de971fa90ba0a672'
'2ccb1e1d287ddd3c4d74ef02d95ee0151d2d6a3e1fc5e18a3756de211f0d8193'
'782da64fdc6608e595aa03125d4a1fd0a5430f86cdf3c79b22166a5660dc5dff'
)
# Document: https://wiki.archlinux.org/title/Node.js_package_guidelines
+7
View File
@@ -0,0 +1,7 @@
[google-chrome]
source = "apt"
mirror = "https://dl.google.com/linux/chrome/deb/"
pkg = "google-chrome-stable"
suite = "stable"
repo = "main"
strip_release = true
@@ -0,0 +1,15 @@
{
"source": "local",
"release_ring": "fast",
"upstream": {
"watch": {
"debian": "https://dl.google.com/linux/chrome/deb/dists/stable/main/binary-amd64/Packages",
"package": "google-chrome-stable",
"pattern": "(?P<version>[0-9]+(?:\\.[0-9]+)*)-1"
}
},
"origin": {
"aur": "google-chrome",
"commit": "6bd49a411277b3f9bcc9e58ce0c579292db75804"
}
}
+76
View File
@@ -0,0 +1,76 @@
# Maintainer: Christian Heusel <christian@heusel.eu>
# Contributor: Knut Ahlers <knut at ahlers dot me>
# Contributor: Det <nimetonmaili g-mail>
# Contributor: t3ddy, Lex Rivera aka x-demon, ruario, Abdullah
# Check for new Linux releases in: http://googlechromereleases.blogspot.com/search/label/Stable%20updates
# or use: $ curl -sSf https://dl.google.com/linux/chrome/deb/dists/stable/main/binary-amd64/Packages | grep -A1 "Package: google-chrome-stable" | awk '/Version/{print $2}' | cut -d '-' -f1
pkgname=google-chrome
pkgver=154.0.8037.57
pkgrel=1
pkgdesc="The popular web browser by Google (Stable Channel)"
arch=(
'x86_64'
'aarch64'
)
url="https://www.google.com/chrome"
license=('custom:chrome')
depends=(
'alsa-lib'
'gtk3'
'libcups'
'libxss'
'libxtst'
'nss'
'ttf-liberation'
'xdg-utils'
)
optdepends=(
'pipewire: WebRTC desktop sharing under Wayland'
'kdialog: for file dialogs in KDE'
'gnome-keyring: for storing passwords in GNOME keyring'
'kwallet: for storing passwords in KWallet'
)
options=('!emptydirs' '!strip')
install=$pkgname.install
_channel=stable
source=('eula_text.html'
"google-chrome-$_channel.sh")
sha512sums=('a225555c06b7c32f9f2657004558e3f996c981481dbb0d3cd79b1d59fa3f05d591af88399422d3ab29d9446c103e98d567aeafe061d9550817ab6e7eb0498396'
'de02b498a4b5b93e21622c8dba57befe795d733a04656be911cc38e28bfef0e20470450f44be523bbde8d4de28f79c10434846ca01fc2a2f4e67707b79332f94')
sha512sums_x86_64=('503bfdac8639dddeb44c339b37a295383a5a766e47204b26f4e3e11b550937a1e1c1b0c41d63c3bcbbcf26795d53a2b731385065c9245fb5509f33e59cff6864')
sha512sums_aarch64=('b409cd701801d0e1c204c4eede536d9439a481db5b5ab6e475016f8845cfc3d47ae656412fac6e0988072d05037f3a94a4059ac2b0534b6f283471b8778bf6c3')
source_x86_64=("https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-${_channel}/google-chrome-${_channel}_${pkgver}-1_amd64.deb")
source_aarch64=("https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-${_channel}/google-chrome-${_channel}_${pkgver}-1_arm64.deb")
package() {
bsdtar -xf data.tar.xz -C "$pkgdir/"
# Launcher
install -m755 google-chrome-$_channel.sh "$pkgdir"/usr/bin/google-chrome-$_channel
# Icons
for i in 16x16 24x24 32x32 48x48 64x64 128x128 256x256; do
install -Dm644 "$pkgdir"/opt/google/chrome/product_logo_${i/x*/}.png \
"$pkgdir"/usr/share/icons/hicolor/$i/apps/google-chrome.png
done
# License
install -Dm644 eula_text.html "$pkgdir"/usr/share/licenses/google-chrome/eula_text.html
install -Dm644 "$pkgdir"/opt/google/chrome/WidevineCdm/LICENSE \
"$pkgdir"/usr/share/licenses/google-chrome-$_channel/WidevineCdm-LICENSE.txt
# Fix the Chrome desktop entry
sed -i \
-e "/Exec=/i\StartupWMClass=Google-chrome" \
-e "s/x-scheme-handler\/ftp;\?//g" \
"$pkgdir"/usr/share/applications/google-chrome.desktop
# Remove the Debian Cron job, duplicate product logos and menu directory
rm -r \
"$pkgdir"/etc/cron.daily/ \
"$pkgdir"/opt/google/chrome/cron/ \
"$pkgdir"/opt/google/chrome/product_logo_*.png
}
+901
View File
@@ -0,0 +1,901 @@
<!DOCTYPE html>
<html class="no-js consumer" data-country="us" lang="en">
<head>
<script>
var a=location.href.match(/platform=(win8|win|mac|linux|cros|ios)/),b=window.navigator.userAgent;document.documentElement.id=a&&a[1]||(-1<b.indexOf("Windows NT 6.2")?"win8":-1<b.indexOf("iPad")?"ios":-1<b.indexOf("Windows")?"win":-1<b.indexOf("Mac")?"mac":-1<b.indexOf("CrOS")?"cros":"linux");
if(-1<b.indexOf("MSIE")){var c=-1<b.indexOf("MSIE 6")?" lt-ie10 lt-ie9 lt-ie8 lt-ie7 ie6":-1<b.indexOf("MSIE 7")?" lt-ie10 lt-ie9 lt-ie8 ie7":-1<b.indexOf("MSIE 8")?" lt-ie10 lt-ie9 ie8":-1<b.indexOf("MSIE 9")?" lt-ie10 ie9":-1<b.indexOf("MSIE 10")?" ie10":"";""!==c&&(document.documentElement.className+=c)}if(-1<b.indexOf("Windows NT 5.1")||-1<b.indexOf("Windows NT 5.2"))document.documentElement.className+=" winXP";
</script>
<script src="//www.gstatic.com/external_hosted/modernizr/modernizr.js">
</script>
<meta charset="utf-8">
<meta content="initial-scale=1, minimum-scale=1, width=device-width" name="viewport">
<meta content="View the full Terms of Service agreement for Google Chrome" name="description">
<title>
Google Chrome Terms of Service
</title>
<link href="https://plus.google.com/100585555255542998765" rel="publisher">
<link href="//www.google.com/images/icons/product/chrome-32.png" rel="icon" type="image/ico">
<link href="https://www.google.com/chrome/browser/privacy/eula_text.html" rel="canonical">
<style>
body {
font-family: Arial;
font-size: 13px;
}
</style>
<script src="//www.google.com/js/gweb/analytics/autotrack.js">
</script>
<script>
new gweb.analytics.AutoTrack({
profile: 'UA-26908291-1'
});
</script>
</head>
<body class="" id="grid">
<div class="browser-eula" id="main">
<div class="compact">
<h2>
Google Chrome Terms of Service
</h2>
<p>
These Terms of Service apply to the executable code version of Google Chrome. Source code
for Google Chrome is available free of charge under open source software license
agreements at http://code.google.com/chromium/terms.html.
</p>
<p>
<strong>1. Your relationship with Google</strong>
</p>
<p>
1.1 Your use of Google’s products, software, services and web sites (referred to
collectively as the “Services” in this document and excluding any services provided to
you by Google under a separate written agreement) is subject to the terms of a legal
agreement between you and Google. “Google” means Google Inc., whose principal place of
business is at 1600 Amphitheatre Parkway, Mountain View, CA 94043, United States. This
document explains how the agreement is made up, and sets out some of the terms of that
agreement.
</p>
<p>
1.2 Unless otherwise agreed in writing with Google, your agreement with Google will
always include, at a minimum, the terms and conditions set out in this document. These
are referred to below as the “Universal Terms”. Open source software licenses for Google
Chrome source code constitute separate written agreements. To the limited extent that the
open source software licenses expressly supersede these Universal Terms, the open source
licenses govern your agreement with Google for the use of Google Chrome or specific
included components of Google Chrome.
</p>
<p>
1.3 Your agreement with Google will also include the terms set forth below in the Google
Chrome Additional Terms of Service and terms of any Legal Notices applicable to the
Services, in addition to the Universal Terms. All of these are referred to below as the
“Additional Terms”. Where Additional Terms apply to a Service, these will be accessible
for you to read either within, or through your use of, that Service.
</p>
<p>
1.4 The Universal Terms, together with the Additional Terms, form a legally binding
agreement between you and Google in relation to your use of the Services. It is important
that you take the time to read them carefully. Collectively, this legal agreement is
referred to below as the “Terms”.
</p>
<p>
1.5 If there is any contradiction between what the Additional Terms say and what the
Universal Terms say, then the Additional Terms shall take precedence in relation to that
Service.
</p>
<p>
<strong>2. Accepting the Terms</strong>
</p>
<p>
2.1 In order to use the Services, you must first agree to the Terms. You may not use the
Services if you do not accept the Terms.
</p>
<p>
2.2 You can accept the Terms by:
</p>
<p>
(A) clicking to accept or agree to the Terms, where this option is made available to you
by Google in the user interface for any Service; or
</p>
<p>
(B) by actually using the Services. In this case, you understand and agree that Google
will treat your use of the Services as acceptance of the Terms from that point onwards.
</p>
<p>
<strong>3. Language of the Terms</strong>
</p>
<p>
3.1 Where Google has provided you with a translation of the English language version of
the Terms, then you agree that the translation is provided for your convenience only and
that the English language versions of the Terms will govern your relationship with
Google.
</p>
<p>
3.2 If there is any contradiction between what the English language version of the Terms
says and what a translation says, then the English language version shall take
precedence.
</p>
<p>
<strong>4. Provision of the Services by Google</strong>
</p>
<p>
4.1 Google has subsidiaries and affiliated legal entities around the world (“Subsidiaries
and Affiliates”). Sometimes, these companies will be providing the Services to you on
behalf of Google itself. You acknowledge and agree that Subsidiaries and Affiliates will
be entitled to provide the Services to you.
</p>
<p>
4.2 Google is constantly innovating in order to provide the best possible experience for
its users. You acknowledge and agree that the form and nature of the Services which
Google provides may change from time to time without prior notice to you.
</p>
<p>
4.3 As part of this continuing innovation, you acknowledge and agree that Google may stop
(permanently or temporarily) providing the Services (or any features within the Services)
to you or to users generally at Google’s sole discretion, without prior notice to you.
You may stop using the Services at any time. You do not need to specifically inform
Google when you stop using the Services.
</p>
<p>
4.4 You acknowledge and agree that if Google disables access to your account, you may be
prevented from accessing the Services, your account details or any files or other content
which is contained in your account.
</p>
<p>
<strong>5. Use of the Services by you</strong>
</p>
<p>
5.1 You agree to use the Services only for purposes that are permitted by (a) the Terms
and (b) any applicable law, regulation or generally accepted practices or guidelines in
the relevant jurisdictions (including any laws regarding the export of data or software
to and from the United States or other relevant countries).
</p>
<p>
5.2 You agree that you will not engage in any activity that interferes with or disrupts
the Services (or the servers and networks which are connected to the Services).
</p>
<p>
5.3 Unless you have been specifically permitted to do so in a separate agreement with
Google, you agree that you will not reproduce, duplicate, copy, sell, trade or resell the
Services for any purpose.
</p>
<p>
5.4 You agree that you are solely responsible for (and that Google has no responsibility
to you or to any third party for) any breach of your obligations under the Terms and for
the consequences (including any loss or damage which Google may suffer) of any such
breach.
</p>
<p>
<strong>6. Privacy and your personal information</strong>
</p>
<p>
6.1 For information about Google’s data protection practices, please read Google’s
privacy policy at http://www.google.com/privacy.html and at
http://www.google.com/chrome/intl/en/privacy.html. This policy explains how Google treats
your personal information, and protects your privacy, when you use the Services.
</p>
<p>
6.2 You agree to the use of your data in accordance with Google’s privacy policies.
</p>
<p>
<strong>7. Content in the Services</strong>
</p>
<p>
7.1 You understand that all information (such as data files, written text, computer
software, music, audio files or other sounds, photographs, videos or other images) which
you may have access to as part of, or through your use of, the Services are the sole
responsibility of the person from which such content originated. All such information is
referred to below as the “Content.”
</p>
<p>
7.2 You should be aware that Content presented to you as part of the Services, including
but not limited to advertisements in the Services and sponsored Content within the
Services may be protected by intellectual property rights which are owned by the sponsors
or advertisers who provide that Content to Google (or by other persons or companies on
their behalf). You may not modify, rent, lease, loan, sell, distribute or create
derivative works based on this Content (either in whole or in part) unless you have been
specifically told that you may do so by Google or by the owners of that Content, in a
separate agreement.
</p>
<p>
7.3 Google reserves the right (but shall have no obligation) to pre-screen, review, flag,
filter, modify, refuse or remove any or all Content from any Service. For some of the
Services, Google may provide tools to filter out explicit sexual content. These tools
include the SafeSearch preference settings (see
https://support.google.com/websearch/answer/510?hl=en). In addition, there are
commercially available services and software to limit access to material that you may
find objectionable.
</p>
<p>
7.4 You understand that by using the Services you may be exposed to Content that you may
find offensive, indecent or objectionable and that, in this respect, you use the Services
at your own risk.
</p>
<p>
7.5 You agree that you are solely responsible for (and that Google has no responsibility
to you or to any third party for) any Content that you create, transmit or display while
using the Services and for the consequences of your actions (including any loss or damage
which Google may suffer) by doing so.
</p>
<p>
<strong>8. Proprietary rights</strong>
</p>
<p>
8.1 You acknowledge and agree that Google (or Google’s licensors) own all legal right,
title and interest in and to the Services, including any intellectual property rights
which subsist in the Services (whether those rights happen to be registered or not, and
wherever in the world those rights may exist).
</p>
<p>
8.2 Unless you have agreed otherwise in writing with Google, nothing in the Terms gives
you a right to use any of Google’s trade names, trade marks, service marks, logos, domain
names, and other distinctive brand features.
</p>
<p>
8.3 If you have been given an explicit right to use any of these brand features in a
separate written agreement with Google, then you agree that your use of such features
shall be in compliance with that agreement, any applicable provisions of the Terms, and
Google's brand feature use guidelines as updated from time to time. These guidelines can
be viewed online at http://www.google.com/permissions/guidelines.html (or such other URL
as Google may provide for this purpose from time to time).
</p>
<p>
8.4 Google acknowledges and agrees that it obtains no right, title or interest from you
(or your licensors) under these Terms in or to any Content that you submit, post,
transmit or display on, or through, the Services, including any intellectual property
rights which subsist in that Content (whether those rights happen to be registered or
not, and wherever in the world those rights may exist). Unless you have agreed otherwise
in writing with Google, you agree that you are responsible for protecting and enforcing
those rights and that Google has no obligation to do so on your behalf.
</p>
<p>
8.5 You agree that you shall not remove, obscure, or alter any proprietary rights notices
(including copyright and trade mark notices) which may be affixed to or contained within
the Services.
</p>
<p>
8.6 Unless you have been expressly authorized to do so in writing by Google, you agree
that in using the Services, you will not use any trade mark, service mark, trade name,
logo of any company or organization in a way that is likely or intended to cause
confusion about the owner or authorized user of such marks, names or logos.
</p>
<p>
<strong>9. License from Google</strong>
</p>
<p>
9.1 Google gives you a personal, worldwide, royalty-free, non-assignable and
non-exclusive license to use the software provided to you by Google as part of the
Services as provided to you by Google (referred to as the “Software” below). This license
is for the sole purpose of enabling you to use and enjoy the benefit of the Services as
provided by Google, in the manner permitted by the Terms.
</p>
<p>
9.2 Subject to section 1.2, you may not (and you may not permit anyone else to) copy,
modify, create a derivative work of, reverse engineer, decompile or otherwise attempt to
extract the source code of the Software or any part thereof, unless this is expressly
permitted or required by law, or unless you have been specifically told that you may do
so by Google, in writing.
</p>
<p>
9.3 Subject to section 1.2, unless Google has given you specific written permission to do
so, you may not assign (or grant a sub-license of) your rights to use the Software, grant
a security interest in or over your rights to use the Software, or otherwise transfer any
part of your rights to use the Software.
</p>
<p>
<strong>10. Content license from you</strong>
</p>
<p>
10.1 You retain copyright and any other rights you already hold in Content which you
submit, post or display on or through, the Services.
</p>
<p>
<strong>11. Software updates</strong>
</p>
<p>
11.1 The Software which you use may automatically download and install updates from time
to time from Google. These updates are designed to improve, enhance and further develop
the Services and may take the form of bug fixes, enhanced functions, new software modules
and completely new versions. You agree to receive such updates (and permit Google to
deliver these to you) as part of your use of the Services.
</p>
<p>
<strong>12. Ending your relationship with Google</strong>
</p>
<p>
12.1 The Terms will continue to apply until terminated by either you or Google as set out
below.
</p>
<p>
12.2 Google may at any time, terminate its legal agreement with you if:
</p>
<p>
(A) you have breached any provision of the Terms (or have acted in manner which clearly
shows that you do not intend to, or are unable to comply with the provisions of the
Terms); or
</p>
<p>
(B) Google is required to do so by law (for example, where the provision of the Services
to you is, or becomes, unlawful); or
</p>
<p>
(C) the partner with whom Google offered the Services to you has terminated its
relationship with Google or ceased to offer the Services to you; or
</p>
<p>
(D) Google is transitioning to no longer providing the Services to users in the country
in which you are resident or from which you use the service; or
</p>
<p>
(E) the provision of the Services to you by Google is, in Google’s opinion, no longer
commercially viable.
</p>
<p>
12.3 Nothing in this Section shall affect Google’s rights regarding provision of Services
under Section 4 of the Terms.
</p>
<p>
12.4 When these Terms come to an end, all of the legal rights, obligations and
liabilities that you and Google have benefited from, been subject to (or which have
accrued over time whilst the Terms have been in force) or which are expressed to continue
indefinitely, shall be unaffected by this cessation, and the provisions of paragraph 19.7
shall continue to apply to such rights, obligations and liabilities indefinitely.
</p>
<p>
<strong>13. EXCLUSION OF WARRANTIES</strong>
</p>
<p>
13.1 NOTHING IN THESE TERMS, INCLUDING SECTIONS 13 AND 14, SHALL EXCLUDE OR LIMIT
GOOGLE’S WARRANTY OR LIABILITY FOR LOSSES WHICH MAY NOT BE LAWFULLY EXCLUDED OR LIMITED
BY APPLICABLE LAW. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF CERTAIN WARRANTIES OR
CONDITIONS OR THE LIMITATION OR EXCLUSION OF LIABILITY FOR LOSS OR DAMAGE CAUSED BY
NEGLIGENCE, BREACH OF CONTRACT OR BREACH OF IMPLIED TERMS, OR INCIDENTAL OR CONSEQUENTIAL
DAMAGES. ACCORDINGLY, ONLY THE LIMITATIONS WHICH ARE LAWFUL IN YOUR JURISDICTION WILL
APPLY TO YOU AND OUR LIABILITY WILL BE LIMITED TO THE MAXIMUM EXTENT PERMITTED BY LAW.
</p>
<p>
13.2 YOU EXPRESSLY UNDERSTAND AND AGREE THAT YOUR USE OF THE SERVICES IS AT YOUR SOLE
RISK AND THAT THE SERVICES ARE PROVIDED "AS IS" AND “AS AVAILABLE.”
</p>
<p>
13.3 IN PARTICULAR, GOOGLE, ITS SUBSIDIARIES AND AFFILIATES, AND ITS LICENSORS DO NOT
REPRESENT OR WARRANT TO YOU THAT:
</p>
<p>
(A) YOUR USE OF THE SERVICES WILL MEET YOUR REQUIREMENTS,
</p>
<p>
(B) YOUR USE OF THE SERVICES WILL BE UNINTERRUPTED, TIMELY, SECURE OR FREE FROM ERROR,
</p>
<p>
(C) ANY INFORMATION OBTAINED BY YOU AS A RESULT OF YOUR USE OF THE SERVICES WILL BE
ACCURATE OR RELIABLE, AND
</p>
<p>
(D) THAT DEFECTS IN THE OPERATION OR FUNCTIONALITY OF ANY SOFTWARE PROVIDED TO YOU AS
PART OF THE SERVICES WILL BE CORRECTED.
</p>
<p>
13.4 ANY MATERIAL DOWNLOADED OR OTHERWISE OBTAINED THROUGH THE USE OF THE SERVICES IS
DONE AT YOUR OWN DISCRETION AND RISK AND THAT YOU WILL BE SOLELY RESPONSIBLE FOR ANY
DAMAGE TO YOUR COMPUTER SYSTEM OR OTHER DEVICE OR LOSS OF DATA THAT RESULTS FROM THE
DOWNLOAD OF ANY SUCH MATERIAL.
</p>
<p>
13.5 NO ADVICE OR INFORMATION, WHETHER ORAL OR WRITTEN, OBTAINED BY YOU FROM GOOGLE OR
THROUGH OR FROM THE SERVICES SHALL CREATE ANY WARRANTY NOT EXPRESSLY STATED IN THE TERMS.
</p>
<p>
13.6 GOOGLE FURTHER EXPRESSLY DISCLAIMS ALL WARRANTIES AND CONDITIONS OF ANY KIND,
WHETHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES AND
CONDITIONS OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
</p>
<p>
<strong>14. LIMITATION OF LIABILITY</strong>
</p>
<p>
14.1 SUBJECT TO OVERALL PROVISION IN PARAGRAPH 13.1 ABOVE, YOU EXPRESSLY UNDERSTAND AND
AGREE THAT GOOGLE, ITS SUBSIDIARIES AND AFFILIATES, AND ITS LICENSORS SHALL NOT BE LIABLE
TO YOU FOR:
</p>
<p>
(A) ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL CONSEQUENTIAL OR EXEMPLARY DAMAGES WHICH
MAY BE INCURRED BY YOU, HOWEVER CAUSED AND UNDER ANY THEORY OF LIABILITY.. THIS SHALL
INCLUDE, BUT NOT BE LIMITED TO, ANY LOSS OF PROFIT (WHETHER INCURRED DIRECTLY OR
INDIRECTLY), ANY LOSS OF GOODWILL OR BUSINESS REPUTATION, ANY LOSS OF DATA SUFFERED, COST
OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR OTHER INTANGIBLE LOSS;
</p>
<p>
(B) ANY LOSS OR DAMAGE WHICH MAY BE INCURRED BY YOU, INCLUDING BUT NOT LIMITED TO LOSS OR
DAMAGE AS A RESULT OF:
</p>
<p>
(I) ANY RELIANCE PLACED BY YOU ON THE COMPLETENESS, ACCURACY OR EXISTENCE OF ANY
ADVERTISING, OR AS A RESULT OF ANY RELATIONSHIP OR TRANSACTION BETWEEN YOU AND ANY
ADVERTISER OR SPONSOR WHOSE ADVERTISING APPEARS ON THE SERVICES;
</p>
<p>
(II) ANY CHANGES WHICH GOOGLE MAY MAKE TO THE SERVICES, OR FOR ANY PERMANENT OR TEMPORARY
CESSATION IN THE PROVISION OF THE SERVICES (OR ANY FEATURES WITHIN THE SERVICES);
</p>
<p>
(III) THE DELETION OF, CORRUPTION OF, OR FAILURE TO STORE, ANY CONTENT AND OTHER
COMMUNICATIONS DATA MAINTAINED OR TRANSMITTED BY OR THROUGH YOUR USE OF THE SERVICES;
</p>
<p>
(IV) YOUR FAILURE TO PROVIDE GOOGLE WITH ACCURATE ACCOUNT INFORMATION;
</p>
<p>
(V) YOUR FAILURE TO KEEP YOUR PASSWORD OR ACCOUNT DETAILS SECURE AND CONFIDENTIAL;
</p>
<p>
14.2 THE LIMITATIONS ON GOOGLE’S LIABILITY TO YOU IN PARAGRAPH 14.1 ABOVE SHALL APPLY
WHETHER OR NOT GOOGLE HAS BEEN ADVISED OF OR SHOULD HAVE BEEN AWARE OF THE POSSIBILITY OF
ANY SUCH LOSSES ARISING.
</p>
<p>
<strong>15. Copyright and trade mark policies</strong>
</p>
<p>
15.1 It is Google’s policy to respond to notices of alleged copyright infringement that
comply with applicable international intellectual property law (including, in the United
States, the Digital Millennium Copyright Act) and to terminating the accounts of repeat
infringers. Details of Google’s policy can be found at http://www.google.com/dmca.html.
</p>
<p>
15.2 Google operates a trade mark complaints procedure in respect of Google’s advertising
business, details of which can be found at http://www.google.com/tm_complaint.html.
</p>
<p>
<strong>16. Advertisements</strong>
</p>
<p>
16.1 Some of the Services are supported by advertising revenue and may display
advertisements and promotions. These advertisements may be targeted to the content of
information stored on the Services, queries made through the Services or other
information.
</p>
<p>
16.2 The manner, mode and extent of advertising by Google on the Services are subject to
change without specific notice to you.
</p>
<p>
16.3 In consideration for Google granting you access to and use of the Services, you
agree that Google may place such advertising on the Services.
</p>
<p>
<strong>17. Other content</strong>
</p>
<p>
17.1 The Services may include hyperlinks to other web sites or content or resources.
Google may have no control over any web sites or resources which are provided by
companies or persons other than Google.
</p>
<p>
17.2 You acknowledge and agree that Google is not responsible for the availability of any
such external sites or resources, and does not endorse any advertising, products or other
materials on or available from such web sites or resources.
</p>
<p>
17.3 You acknowledge and agree that Google is not liable for any loss or damage which may
be incurred by you as a result of the availability of those external sites or resources,
or as a result of any reliance placed by you on the completeness, accuracy or existence
of any advertising, products or other materials on, or available from, such web sites or
resources.
</p>
<p>
<strong>18. Changes to the Terms</strong>
</p>
<p>
18.1 Google may make changes to the Universal Terms or Additional Terms from time to
time. When these changes are made, Google will make a new copy of the Universal Terms
available at http://www.google.com/chrome/intl/en/eula_text.html and any new Additional
Terms will be made available to you from within, or through, the affected Services.
</p>
<p>
18.2 You understand and agree that if you use the Services after the date on which the
Universal Terms or Additional Terms have changed, Google will treat your use as
acceptance of the updated Universal Terms or Additional Terms.
</p>
<p>
<strong>19. General legal terms</strong>
</p>
<p>
19.1 Sometimes when you use the Services, you may (as a result of, or in connection with
your use of the Services) use a service or download a piece of software, or purchase
goods, which are provided by another person or company. Your use of these other services,
software or goods may be subject to separate terms between you and the company or person
concerned. If so, the Terms do not affect your legal relationship with these other
companies or individuals.
</p>
<p>
19.2 The Terms constitute the whole legal agreement between you and Google and govern
your use of the Services (but excluding any services which Google may provide to you
under a separate written agreement), and completely replace any prior agreements between
you and Google in relation to the Services.
</p>
<p>
19.3 You agree that Google may provide you with notices, including those regarding
changes to the Terms, by email, regular mail, or postings on the Services.
</p>
<p>
19.4 You agree that if Google does not exercise or enforce any legal right or remedy
which is contained in the Terms (or which Google has the benefit of under any applicable
law), this will not be taken to be a formal waiver of Google’s rights and that those
rights or remedies will still be available to Google.
</p>
<p>
19.5 If any court of law, having the jurisdiction to decide on this matter, rules that
any provision of these Terms is invalid, then that provision will be removed from the
Terms without affecting the rest of the Terms. The remaining provisions of the Terms will
continue to be valid and enforceable.
</p>
<p>
19.6 You acknowledge and agree that each member of the group of companies of which Google
is the parent shall be third party beneficiaries to the Terms and that such other
companies shall be entitled to directly enforce, and rely upon, any provision of the
Terms which confers a benefit on (or rights in favor of) them. Other than this, no other
person or company shall be third party beneficiaries to the Terms.
</p>
<p>
19.7 The Terms, and your relationship with Google under the Terms, shall be governed by
the laws of the State of California without regard to its conflict of laws provisions.
You and Google agree to submit to the exclusive jurisdiction of the courts located within
the county of Santa Clara, California to resolve any legal matter arising from the Terms.
Notwithstanding this, you agree that Google shall still be allowed to apply for
injunctive remedies (or an equivalent type of urgent legal relief) in any jurisdiction.
</p>
<p>
<strong>20. Additional Terms for Extensions for Google Chrome</strong>
</p>
<p>
20.1 These terms in this section apply if you install extensions on your copy of Google
Chrome. Extensions are small software programs, developed by Google or third parties,
that can modify and enhance the functionality of Google Chrome. Extensions may have
greater privileges to access your browser or your computer than regular webpages,
including the ability to read and modify your private data.
</p>
<p>
20.2 From time to time, Google Chrome may check with remote servers (hosted by Google or
by third parties) for available updates to extensions, including but not limited to bug
fixes or enhanced functionality. You agree that such updates will be automatically
requested, downloaded, and installed without further notice to you.
</p>
<p>
20.3 From time to time, Google may discover an extension that violates Google developer
terms or other legal agreements, laws, regulations or policies. Google Chrome will
periodically download a list of such extensions from Google’s servers. You agree that
Google may remotely disable or remove any such extension from user systems in its sole
discretion.
</p>
<p>
<strong>21. Additional Terms for Enterprise Use</strong>
</p>
<p>
21.1 If you are a business entity, then the individual accepting on behalf of the entity
(for the avoidance of doubt, for business entities, in these Terms, "you" means the
entity) represents and warrants that he or she has the authority to act on your behalf,
that you represent that you are duly authorized to do business in the country or
countries where you operate, and that your employees, officers, representatives, and
other agents accessing the Service are duly authorized to access Google Chrome and to
legally bind you to these Terms.
</p>
<p>
21.2 Subject to the Terms, and in addition to the license grant in Section 9, Google
grants you a non-exclusive, non-transferable license to reproduce, distribute, install,
and use Google Chrome solely on machines intended for use by your employees, officers,
representatives, and agents in connection with your business entity, and provided that
their use of Google Chrome will be subject to the Terms.
</p>
<p>
August 12, 2010
</p><br>
<hr>
<br>
<h2>
Google Chrome Additional Terms of Service
</h2>
<p>
<strong>MPEGLA</strong>
</p>
<p>
THIS PRODUCT IS LICENSED UNDER THE AVC PATENT PORTFOLIO LICENSE FOR THE PERSONAL AND
NON-COMMERCIAL USE OF A CONSUMER TO (i) ENCODE VIDEO IN COMPLIANCE WITH THE AVC STANDARD
( “AVC VIDEO”) AND/OR (ii) DECODE AVC VIDEO THAT WAS ENCODED BY A CONSUMER ENGAGED IN A
PERSONAL AND NON-COMMERCIAL ACTIVITY AND/OR WAS OBTAINED FROM A VIDEO PARTNER LICENSED TO
PROVIDE AVC VIDEO. NO LICENSE IS GRANTED OR SHALL BE IMPLIED FOR ANY OTHER USE.
ADDITIONAL INFORMATION MAY BE OBTAINED FROM MPEG LA, L.L.C. SEE HTTP://WWW.MPEGLA.COM.
</p>
<p>
<strong>Adobe</strong>
</p>
<p>
Google Chrome may include one or more components provided by Adobe Systems Incorporated
and Adobe Software Ireland Limited (collectively “Adobe”). Your use of the Adobe software
as provided by Google (“Adobe Software”) is subject to the following additional terms
(the “Adobe Terms”). You, the entity receiving the Adobe Software, will be hereinafter
referred to as “Sublicensee.”
</p>
<p>
1. License Restrictions.
</p>
<p>
(a) Flash Player, Version 10.x is designed only as a browser plug-in. Sublicensee may not
modify or distribute this Adobe Software for use as anything but a browser plug-in for
playing back content on a web page. For example, Sublicensee will not modify this Adobe
Software in order to allow interoperation with applications that run outside of the
browser (e.g., standalone applications, widgets, device UI).
</p>
<p>
(b) Sublicensee will not expose any APIs of the Flash Player, Version 10.x through a
browser plug-in interface in such a way that allows such extension to be used to playback
content from a web page as a stand-alone application.
</p>
<p>
(c) The Chrome-Reader Software may not be used to render any PDF or EPUB documents that
utilize digital rights management protocols or systems other than Adobe DRM.
</p>
<p>
(d) Adobe DRM must be enabled in the Chrome-Reader Software for all Adobe DRM protected
PDF and EPUB documents.
</p>
<p>
(e) The Chrome-Reader Software may not, other than as explicitly permitted by the
technical specifications, disable any capabilities provided by Adobe in the Adobe
Software, including but not limited to, support for PDF and EPUB formats and Adobe DRM.
</p>
<p>
2. Electronic Transmission. Sublicensee may allow the download of the Adobe Software from
a web site, the Internet, an intranet, or similar technology (an, “Electronic
Transmissions”) provided that Sublicensee agrees that any distributions of the Adobe
Software by Sublicensee, including those on CD-ROM, DVD-ROM or other storage media and
Electronic Transmissions, if expressly permitted, shall be subject to reasonable security
measures to prevent unauthorized use. With relation to Electronic Transmissions approved
hereunder, Sublicensee agrees to employ any reasonable use restrictions set by Adobe,
including those related to security and/or the restriction of distribution to end users
of the Sublicensee Product.
</p>
<p>
3. EULA and Distribution Terms.
</p>
<p>
(a) Sublicensee shall ensure that the Adobe Software is distributed to end users under an
enforceable end user license agreement, in favor of Sublicensee and its suppliers
containing at least each of the following minimum terms (the “End-User License”): (i) a
prohibition against distribution and copying, (ii) a prohibition against modifications
and derivative works, (iii) a prohibition against decompiling, reverse engineering,
disassembling, and otherwise reducing the Adobe Software to a human-perceivable form,
(iv) a provision indicating ownership of Sublicensee Product (as defined in Section 8) by
Sublicensee and its licensors, (v) a disclaimer of indirect, special, incidental,
punitive, and consequential damages, and (vi) other industry standard disclaimers and
limitations, including, as applicable: a disclaimer of all applicable statutory
warranties, to the full extent allowed by law.
</p>
<p>
(b) Sublicensee shall ensure that the Adobe Software is distributed to Sublicensee’s
distributors under an enforceable distribution license agreement, in favor of Sublicensee
and its suppliers containing terms as protective of Adobe as the Adobe Terms.
</p>
<p>
4. Opensource. Sublicensee will not directly or indirectly grant, or purport to grant, to
any third party any rights or immunities under Adobe’s intellectual property or
proprietary rights that will subject such intellectual property to an open source license
or scheme in which there is or could be interpreted to be a requirement that as a
condition of use, modification and/or distribution, the Adobe Software be: (i) disclosed
or distributed in source code form; (ii) licensed for the purpose of making derivative
works; or (iii) redistributable at no charge. For clarification purposes, the foregoing
restriction does not preclude Sublicensee from distributing, and Sublicensee will
distribute the Adobe Software as bundled with the Google Software, without charge.
</p>
<p>
5. Additional Terms. With respect to any update, upgrade, new versions of the Adobe
Software (collectively “Upgrades”) provided to Sublicenses, Adobe reserves the right to
require additional terms and conditions applicable solely to the Upgrade and future
versions thereof, and solely to the extent that such restrictions are imposed by Adobe on
all licensees of such Upgrade. If Sublicensee does not agree to such additional terms or
conditions, Sublicensee will have no license rights with respect to such Upgrade, and
Sublicensee’s license rights with respect to the Adobe Software will terminate
automatically on the 90th day from the date such additional terms are made available to
Sublicensee.
</p>
<p>
6. Proprietary Rights Notices. Sublicensee shall not, and shall require its distributors
not to, delete or in any manner alter the copyright notices, trademarks, logos or related
notices, or other proprietary rights notices of Adobe (and its licensors, if any)
appearing on or within the Adobe Software or accompanying materials.
</p>
<p>
7. Technical Requirements. Sublicensee and its distributors may only distribute Adobe
Software and/or Upgrade on devices that (i) meet the technical specifications posted on
http://www.adobe.com/mobile/licensees, (or a successor web site thereto), and (ii) has
been verified by Adobe as set forth below.
</p>
<p>
8. Verification and Update. Sublicensee must submit to Adobe each Sublicensee product
(and each version thereof) containing the Adobe Software and/or Upgrade (“Sublicensee
Product”) that do not meet the Device Verification exemption criteria to be communicated
by Google, for Adobe to verify. Sublicensee shall pay for each submission made by
Sublicensee by procuring verification packages at Adobe’s then-current terms set forth at
http://flashmobile.adobe.com/. Sublicensee Product that has not passed verification may
not be distributed. Verification will be accomplished in accordance with Adobe’s
then-current process described at http://flashmobile.adobe.com/ (“Verification”).
</p>
<p>
9. Profiles and Device Central. Sublicensee will be prompted to enter certain profile
information about the Sublicensee Products either as part of the Verification process or
some other method, and Sublicensee will provide such information, to Adobe. Adobe may (i)
use such profile information as reasonably necessary to verify the Sublicensee Product
(if such product is subject to Verification), and (ii) display such profile information
in “Adobe Device Intelligence system,” located at
https://devices.adobe.com/partnerportal/, and made available through Adobe’s authoring
and development tools and services to enable developers and end users to see how content
or applications are displayed in Sublicensee Products (e.g. how video images appear in
certain phones).
</p>
<p>
10. Export. Sublicensee acknowledges that the laws and regulations of the United States
restrict the export and re-export of commodities and technical data of United States
origin, which may include the Adobe Software. Sublicensee agrees that it will not export
or re-export the Adobe Software, without the appropriate United States and foreign
governmental clearances, if any.
</p>
<p>
11. Technology Pass-through Terms.
</p>
<p>
(a) Except pursuant to applicable permissions or agreements therefor, from or with the
applicable parties, Sublicensees shall not use and shall not allow the use of, the Adobe
Software for the encoding or decoding of mp3 audio only (.mp3) data on any non-pc device
(e.g., mobile phone or set-top box), nor may the mp3 encoders or decoders contained in
the Adobe Software be used or accessed by any product other than the Adobe Software. The
Adobe Software may be used for the encoding or decoding of MP3 data contained within a
swf or flv file, which contains video, picture or other data. Sublicensee shall
acknowledge that use of the Adobe Software for non-PC devices, as described in the
prohibitions in this section, may require the payment of licensing royalties or other
amounts to third parties who may hold intellectual property rights related to the MP3
technology and that Adobe nor Sublicensee has not paid any royalties or other amounts on
account of third party intellectual property rights for such use. If Sublicensee requires
an MP3 encoder or decoder for such use, Sublicensee is responsible for obtaining the
necessary intellectual property license, including any applicable patent rights.
</p>
<p>
(b) Sublicensee will not use, copy, reproduce and modify (i) the On2 source code
(provided hereunder as a component of the Source Code) as necessary to enable the Adobe
Software to decode video in the Flash video file format (.flv or .f4v), and (ii) the
Sorenson Spark source code (provided hereunder as a component of the Source Code) for the
limited purpose of making bug fixes and performance enhancements to the Adobe Software.
All codecs provided with the Adobe Software may only be used and distributed as an
integrated part of the Adobe Software and may not be accessed by any other application,
including other Google applications.
</p>
<p>
(c) The Source Code may be provided with an AAC codec and/or HE-AAC codec (“the AAC
Codec”). Use of the AAC Codec is conditioned on Sublicensee obtaining a proper patent
license covering necessary patents as provided by VIA Licensing, for end products on or
in which the AAC Codec will be used. Sublicensee acknowledges and agrees that Adobe is
not providing a patent license for an AAC Codec under this Agreement to Sublicensee or
its sublicensees.
</p>
<p>
(d) THE SOURCE CODE MAY CONTAIN CODE LICENSED UNDER THE AVC PATENT PORTFOLIO LICENSE FOR
THE PERSONAL NON-COMMERCIAL USE OF A CONSUMER TO (i) ENCODE VIDEO IN COMPLIANCE WITH THE
AVC STANDARD ("AVC VIDEO") AND/OR (ii) DECODE AVC VIDEO THAT WAS ENCODED BY A CONSUMER
ENGAGED IN A PERSONAL NON-COMMERCIAL ACTIVITY AND/OR WAS OBTAINED FROM A VIDEO PROVIDER
LICENSED TO PROVIDE AVC VIDEO. NO LICENSE IS GRANTED OR WILL BE IMPLIED FOR ANY OTHER
USE. ADDITIONAL INFORMATION MAY BE OBTAINED FROM MPEG LA, L.L.C. See
http://www.mpegla.com
</p>
<p>
12. Update. Sublicensee will not circumvent Google’s or Adobe’s efforts to update the
Adobe Software in all Sublicensee’s products incorporating the Adobe Software as bundled
with the Google Software (“Sublicensee Products”).
</p>
<p>
13. Attribution and Proprietary Notices. Sublicensee will list the Adobe Software in
publicly available Sublicensee Product specifications and include appropriate Adobe
Software branding (specifically excluding the Adobe corporate logo) on the Sublicensee
Product packaging or marketing materials in a manner consistent with branding of other
third party products contained within the Sublicensee Product.
</p>
<p>
14. No Warranty. THE ADOBE SOFTWARE IS MADE AVAILABLE TO SUBLICENSEE FOR USE AND
REPRODUCTION “AS IS” AND ADOBE MAKES NO WARRANTY AS TO ITS USE OR PERFORMANCE. ADOBE AND
ITS SUPPLIERS DO NOT AND CANNOT WARRANT THE PERFORMANCE OR RESULTS OBTAINED BY USING THE
ADOBE SOFTWARE. EXCEPT FOR ANY WARRANTY, CONDITION, REPRESENTATION OR TERM TO THE EXTENT
TO WHICH THE SAME CANNOT OR MAY NOT BE EXCLUDED OR LIMITED BY LAW APPLICABLE TO
SUBLICENSEEIN SUBLICENSEE’S JURISDICTION, ADOBE AND ITS SUPPLIERS MAKE NO WARRANTIES,
CONDITIONS, REPRESENTATIONS, OR TERMS (EXPRESS OR IMPLIED WHETHER BY STATUTE, COMMON LAW,
CUSTOM, USAGE OR OTHERWISE) AS TO ANY MATTER INCLUDING WITHOUT LIMITATION NONINFRINGEMENT
OF THIRD PARTY RIGHTS, MERCHANTABILITY, INTEGRATION, SATISFACTORY QUALITY, OR FITNESS FOR
ANY PARTICULAR PURPOSE. SUBLICENSEE AGREES THAT SUBLICENSEE SHALL NOT MAKE ANY WARRANTY,
EXPRESS OR IMPLIED, ON BEHALF OF ADOBE.
</p>
<p>
15. Limitation of Liability. IN NO EVENT WILL ADOBE OR ITS SUPPLIERS BE LIABLE TO
SUBLICENSEE FOR ANY DAMAGES, CLAIMS OR COSTS WHATSOEVER OR ANY CONSEQUENTIAL, INDIRECT,
OR INCIDENTAL DAMAGES, OR ANY LOST PROFITS OR LOST SAVINGS, EVEN IF AN ADOBE
REPRESENTATIVE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS
OR FOR ANY CLAIM BY ANY THIRD PARTY. THE FOREGOING LIMITATIONS AND EXCLUSIONS APPLY TO
THE EXTENT PERMITTED BY APPLICABLE LAW IN SUBLICENSEE’S JURISDICTION. ADOBE’S AGGREGATE
LIABILITY AND THAT OF ITS SUPPLIERS UNDER OR IN CONNECTION WITH THIS AGREEMENT SHALL BE
LIMITED TO ONE THOUSAND DOLLARS (US$1,000). Nothing contained in this Agreement limits
Adobe’s liability to Sublicensee in the event of death or personal injury resulting from
Adobe’s negligence or for the tort of deceit (fraud). Adobe is acting on behalf of its
suppliers for the purpose of disclaiming, excluding and/or limiting obligations,
warranties and liability as provided in this Agreement, but in no other respects and for
no other purpose.
</p>
<p>
16. Content Protection Terms
</p>
<p>
(a) Definitions.
</p>
<p>
“Compliance and Robustness Rules” means the document setting forth compliance and
robustness rules for the Adobe Software located at http://www.adobe.com/mobile/licensees,
or a successor web site thereto.
</p>
<p>
“Content Protection Functions” means those aspects of the Adobe Software that are
designed to ensure compliance with the Compliance and Robustness Rules, and to prevent
playback, copying, modification, redistribution or other actions with respect to digital
content distributed for consumption by users of the Adobe Software when such actions are
not authorized by the owners of such digital content or its licensed distributors.
</p>
<p>
“Content Protection Code” means code within certain designated versions of the Adobe
Software that enables certain Content Protection Functions.
</p>
<p>
“Key” means a cryptographic value contained in the Adobe Software for use in decrypting
digital content.
</p>
<p>
(b) License Restrictions. Sublicensee’s right to exercise the licenses with respect to
the Adobe Software is subject to the following additional restrictions and obligations.
Sublicensee will ensure that Sublicensee’s customers comply with these restrictions and
obligations to the same extent imposed on Sublicensee with respect to the Adobe Software;
any failure by Sublicensee’s customers to comply with these additional restrictions and
obligations shall be treated as a material breach by Sublicensee.
</p>
<p>
b.1. Sublicensee and customers may only distribute the Adobe Software that meets the
Robustness and Compliance Rules as so confirmed by Sublicensee during the verification
process described above in the Adobe Terms.
</p>
<p>
b.2. Sublicensee shall not (i) circumvent the Content Protection Functions of either the
Adobe Software or any related Adobe Software that is used to encrypt or decrypt digital
content for authorized consumption by users of the Adobe Software, or (ii) develop or
distribute products that are designed to circumvent the Content Protection Functions of
either the Adobe Software or any Adobe Software that is used to encrypt or decrypt
digital content for authorized consumption by users of the Adobe Software.
</p>
<p>
(c) The Keys are hereby designated as Adobe’s Confidential Information, and Sublicensee
will, with respect to the Keys, adhere to Adobe’s Source Code Handling Procedure (to be
provided by Adobe upon request).
</p>
<p>
(d) Injunctive Relief. Sublicensee agrees that a breach of this Agreement may compromise
the Content Protection Functions of the Adobe Software and may cause unique and lasting
harm to the interests of Adobe and owners of digital content that rely on such Content
Protection Functions, and that monetary damages may be inadequate to compensate fully for
such harm. Therefore, Sublicensee further agrees that Adobe may be entitled to seek
injunctive relief to prevent or limit the harm caused by any such breach, in addition to
monetary damages.
</p>
<p>
17. Intended Third-party Beneficiary. Adobe Systems Incorporated and Adobe Software
Ireland Limited are the intended third-party beneficiaries of Google’s agreement with
Sublicensee with respect to the Adobe Software, including but not limited to, the Adobe
Terms. Sublicensee agrees, notwithstanding anything to the contrary in its agreement with
Google, that Google may disclose Sublicensee’s identity to Adobe and certify in writing
that Sublicensee has entered into a license agreement with Google which includes the
Adobe Terms. Sublicensee must have an agreement with each of its licensees, and if such
licensees are allowed to redistribute the Adobe Software, such agreement will include the
Adobe Terms.
</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,11 @@
#!/bin/bash
XDG_CONFIG_HOME=${XDG_CONFIG_HOME:-~/.config}
# Allow users to override command-line options
if [[ -f $XDG_CONFIG_HOME/chrome-flags.conf ]]; then
CHROME_USER_FLAGS="$(grep -v '^#' $XDG_CONFIG_HOME/chrome-flags.conf)"
fi
# Launch
exec /opt/google/chrome/google-chrome $CHROME_USER_FLAGS "$@"
@@ -0,0 +1,14 @@
# Colored makepkg-like functions
note() {
printf "${_blue}==>${_yellow} NOTE:${_bold} %s${_all_off}\n" "$1"
}
_all_off="$(tput sgr0)"
_bold="${_all_off}$(tput bold)"
_blue="${_bold}$(tput setaf 4)"
_yellow="${_bold}$(tput setaf 3)"
post_install() {
note "Custom flags should be put directly in: ~/.config/chrome-flags.conf"
note "The launcher is called: 'google-chrome-stable'"
}
+10 -1
View File
@@ -1,3 +1,12 @@
{
"source": "local"
"source": "local",
"upstream": {
"git_tags": "https://github.com/omacom/hype.git",
"tag_pattern": "v{pkgver}",
"sources": {
"any": [
"https://github.com/omacom/hype/archive/refs/tags/{tag}.tar.gz"
]
}
}
}
+2 -2
View File
@@ -1,7 +1,7 @@
# Maintainer: David Heinemeier Hansson <david@hey.com>
pkgname=hype
pkgver=0.4.1
pkgver=0.4.2
pkgrel=1
pkgdesc='Simple Markdown presentations with a visual slide editor'
arch=('x86_64' 'aarch64')
@@ -24,7 +24,7 @@ depends=(
)
makedepends=('gcc' 'make')
source=("$pkgname-$pkgver.tar.gz::$url/archive/refs/tags/v$pkgver.tar.gz")
sha256sums=('0724a9d18df7657b50dff21ffe3dec1c107e9191a9e9fd5ad40b56ed9d5d6f51')
sha256sums=('eff1a0d8ff04eca8602aeaf0284d1792c0a881f00ecddafe7578ba5ada33cd64')
build() {
cd "$srcdir/$pkgname-$pkgver"
+1
View File
@@ -1,5 +1,6 @@
{
"source": "local",
"sync": false,
"release_ring": "fast",
"upstream": {
"git_tags": "https://github.com/hyprwm/Hyprland.git",
+7 -3
View File
@@ -5,7 +5,7 @@
pkgname=(hyprland hyprpm)
pkgver=0.56.2
pkgrel=3
pkgrel=4
pkgdesc='a highly customizable dynamic tiling Wayland compositor'
arch=(aarch64)
url="https://github.com/hyprwm/${pkgname^}"
@@ -65,12 +65,16 @@ optdepends=('hyprpm: build and install plugins'
'xdg-desktop-portal-hyprland: xdg-desktop-portal backend for hyprland')
provides=(wayland-compositor)
_archive="${pkgname^}-$pkgver"
source=("$_archive.tar.gz::$url/releases/download/v$pkgver/source-v$pkgver.tar.gz")
sha256sums=('03ad3f5ef152ff44116ffd56fcf808486211ecabf4f0ba567108ee746ba5cd2e')
source=("$_archive.tar.gz::$url/releases/download/v$pkgver/source-v$pkgver.tar.gz"
software-renderer.patch)
sha256sums=('03ad3f5ef152ff44116ffd56fcf808486211ecabf4f0ba567108ee746ba5cd2e'
'380bb6d61c36d6c68bcccf242131f5b259734e8570ea39b3bc519b9ed137eddd')
prepare() {
ln -sf hyprland-source "$_archive"
cd "$_archive"
# Backport of hyprwm/Hyprland#16343; drop once the packaged release includes it
patch -Np1 --fuzz=0 -i "$srcdir/software-renderer.patch"
sed -i -e '/^release:/{n;s/-D/-DCMAKE_SKIP_RPATH=ON -D/}' Makefile
sed -i -e '/find_package.glaze/s/7...<8 //' {.,hyprpm,start}/CMakeLists.txt
}
+7
View File
@@ -0,0 +1,7 @@
# Hyprland software-rendering backport
Automatic upstream version bumps are held (`sync: false`) while the packaged release carries [Hyprland #16343](https://github.com/hyprwm/Hyprland/pull/16343) as `software-renderer.patch`. `prepare()` applies that patch with `--fuzz=0`. Hyprland's `release_ring: fast` builds edge, rc, and stable from this recipe. Aquamarine changes in the official/ALARM repositories are checked by the separate six-hour `sync-rebuilds` job through `rebuild_on`, which proposes a package release bump for rebuilding.
The hold does not require staying on v0.56.2 until #16343 lands. If a newer upstream release does not yet include the fix, update `pkgver`, rebase the patch and refresh its checksum, and test software rendering and accelerated rendering before publishing. Keep `sync: false` while the backport is needed.
Remove `sync: false` and `software-renderer.patch` in the same change once the selected upstream release includes the #16343 behavior. Set `pkgver` to that release, then test software rendering and accelerated rendering before publishing.
@@ -0,0 +1,76 @@
From: Scott Jones <scottajones@gmail.com>
Subject: [PATCH] render: detect software rendering from the GL renderer (0.56.2 backport)
Backport-of: 61d0ff60a7547d49229714a68b7ca9c0b6658727
Backport-of: c3dcabc15ba7b71bd1bcd880e9f543909dd9372d
Upstream-PR: https://github.com/hyprwm/Hyprland/pull/16343
Co-authored-by: Eryk Wieliczko <44800858+erykwieliczko@users.noreply.github.com>
Adapt constructor and logger-context differences against v0.56.2 while
preserving the GL classification behavior. v0.56.2 has no
StringUtils.hpp, so the ASCII case-insensitive matcher lives as a
file-local helper in GLRenderer.cpp. Remove this backport once the
packaged upstream version includes this behavior.
--- a/src/render/GLRenderer.cpp
+++ b/src/render/GLRenderer.cpp
@@ -22,6 +22,7 @@
#include "./gl/GLTexture.hpp"
#include <cstdint>
+#include <string_view>
#include <hyprutils/memory/SharedPtr.hpp>
#include <hyprutils/memory/UniquePtr.hpp>
#include <hyprutils/utils/ScopeGuard.hpp>
@@ -36,7 +37,30 @@ extern "C" {
#include <xf86drm.h>
}
-CHyprGLRenderer::CHyprGLRenderer() : IHyprRenderer(), m_elementRenderer(makeUnique<CGLElementRenderer>()) {}
+// Whether haystack contains needle, ignoring ASCII case only; all other bytes must match exactly.
+static bool containsCaseInsensitive(const std::string_view haystack, const std::string_view needle) {
+ const auto lower = [](const unsigned char c) { return c >= 'A' && c <= 'Z' ? c + ('a' - 'A') : c; };
+
+ for (size_t i = 0; i + needle.size() <= haystack.size(); ++i) {
+ size_t j = 0;
+ while (j < needle.size() && lower(haystack[i + j]) == lower(needle[j]))
+ ++j;
+
+ if (j == needle.size())
+ return true;
+ }
+
+ return false;
+}
+
+CHyprGLRenderer::CHyprGLRenderer() : IHyprRenderer(), m_elementRenderer(makeUnique<CGLElementRenderer>()) {
+ // KMS can be display-only; classify the active GL renderer instead of the DRM driver.
+ g_pHyprOpenGL->makeEGLCurrent();
+ if (const auto* renderer = rc<const char*>(glGetString(GL_RENDERER))) {
+ const std::string_view name{renderer};
+ m_software = containsCaseInsensitive(name, "llvmpipe") || containsCaseInsensitive(name, "softpipe") || containsCaseInsensitive(name, "Software Rasterizer");
+ }
+}
IHyprRenderer::eType CHyprGLRenderer::type() {
return RT_GL;
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -104,8 +104,6 @@ IHyprRenderer::IHyprRenderer() {
m_nvidia = true;
else if (name.contains("i915"))
m_intel = true;
- else if (name.contains("softpipe") || name.contains("Software Rasterizer") || name.contains("llvmpipe"))
- m_software = true;
Log::logger->log(Log::DEBUG, "DRM driver information: {} v{}.{}.{} from {} description {}", name, DRMV->version_major, DRMV->version_minor, DRMV->version_patchlevel,
std::string{DRMV->date, DRMV->date_len}, std::string{DRMV->desc, DRMV->desc_len});
@@ -126,8 +124,6 @@ IHyprRenderer::IHyprRenderer() {
m_nvidia = true;
else if (name.contains("i915"))
m_intel = true;
- else if (name.contains("softpipe") || name.contains("Software Rasterizer") || name.contains("llvmpipe"))
- m_software = true;
Log::logger->log(Log::DEBUG, "Primary DRM driver information: {} v{}.{}.{} from {} description {}", name, DRMV->version_major, DRMV->version_minor,
DRMV->version_patchlevel, std::string{DRMV->date, DRMV->date_len}, std::string{DRMV->desc, DRMV->desc_len});
+2 -2
View File
@@ -1,7 +1,7 @@
# Maintainer: Dan Wahlin <dwahlin@gmail.com>
pkgname=learn-omarchy
pkgver=0.2.2
pkgver=0.2.4
pkgrel=1
pkgdesc="Interactive, theme-aware courses for learning Omarchy"
arch=('any')
@@ -25,7 +25,7 @@ optdepends=(
)
options=('!strip')
source=("$pkgname-$pkgver.tar.gz::$url/releases/download/v$pkgver/$pkgname-$pkgver.tar.gz")
sha256sums=('67f14778c2b66d56c1504695b0e11cab603f1a002570abc94b4bae9b0bec6066')
sha256sums=('34e13cb452dbef9104400cfc468dcee84575e511c11f425b69fd6a9b462599e5')
package() {
cd "$srcdir/$pkgname-$pkgver"
@@ -0,0 +1,12 @@
{
"source": "local",
"upstream": {
"watch": {
"git_tags": "https://github.com/sofus13/libva-v4l2_request.git",
"pattern": "(?P<version>[0-9]+(?:\\.[0-9]+)*)"
}
},
"rebuild_on": [
"libva"
]
}
+55
View File
@@ -0,0 +1,55 @@
# VA-API driver with Apple Video Decoder fixes from the sofus13 fork.
# The asahi alias lets libva discover it on Apple Silicon.
_fork=sofus13
pkgname=libva-v4l2_request-avd
pkgver=1.3
pkgrel=1
pkgdesc='VA-API driver for V4L2 stateless decoders, with Apple Video Decoder (AVD) support'
arch=('aarch64')
url="https://github.com/$_fork/libva-v4l2_request"
license=('GPL-3.0-or-later')
# The driver is a dlopen()ed plugin: it links only libc and exports the VA
# backend entry point (__vaDriverInit_1_24), so libva is a runtime rather than
# a link-time dependency -- and that symbol is versioned, so this needs a
# rebuild whenever libva's driver ABI is bumped. libdrm is only used for
# drm_fourcc.h constants at compile time.
depends=('glibc' 'libva')
makedepends=('meson' 'libdrm')
provides=('libva-v4l2_request')
conflicts=('libva-v4l2_request')
install="$pkgname.install"
source=("$pkgname-$pkgver.tar.gz::$url/archive/refs/tags/$pkgver.tar.gz")
sha256sums=('3670a1712f9f0a5a61bd44a781eba81dd9b2e0fd8271417ca8a9fbbed9dccfe9')
build() {
# driverdir is left unset so meson takes it from libva's pkg-config
# (/usr/lib/dri); the codec set is decided by configure-time checks against
# the kernel uapi headers, so linux-api-headers governs what gets built in.
# Plain meson rather than arch-meson: the latter lives in devtools, which is
# not a safe assumption outside a clean chroot. buildtype=plain hands the
# compiler makepkg's own CFLAGS/LDFLAGS, which is what arch-meson does too.
meson setup \
--prefix=/usr \
--buildtype=plain \
--wrap-mode=nodownload \
"libva-v4l2_request-$pkgver" build
meson compile -C build
}
package() {
meson install -C build --destdir "$pkgdir"
# libva picks its driver from the DRM driver name of the render node, which
# on Apple Silicon is "asahi", so it looks for asahi_drv_video.so. Nothing
# else ships that name (mesa provides no VA driver for asahi), so aliasing it
# here makes every VA-API application find the decoder with no environment
# variable at all. If mesa ever ships its own asahi_drv_video.so this will
# collide and pacman will say so at install time.
ln -sf v4l2_request_drv_video.so "$pkgdir/usr/lib/dri/asahi_drv_video.so"
install -Dm644 "libva-v4l2_request-$pkgver/COPYING" \
"$pkgdir/usr/share/licenses/$pkgname/COPYING"
install -Dm644 "libva-v4l2_request-$pkgver/README" \
"$pkgdir/usr/share/doc/$pkgname/README"
}
@@ -0,0 +1,21 @@
post_install() {
cat <<'MSG'
==> This package installs itself as asahi_drv_video.so as well, which is the
name libva looks for on Apple Silicon, so VA-API applications should pick
the decoder up with no configuration.
If something does not, select it explicitly for the session:
LIBVA_DRIVER_NAME=v4l2_request
==> Check with: vainfo
==> mpv: mpv --hwdec=vaapi video.mp4
==> Firefox: additionally needs MOZ_DISABLE_RDD_SANDBOX=1, because the RDD
sandbox blocks the /dev/video* and /dev/media* access this
driver requires. That weakens Firefox's media sandbox.
MSG
}
post_upgrade() {
post_install
}
+62 -4
View File
@@ -2,7 +2,7 @@
_pkgname="limine-entry-tool"
pkgname="limine-mkinitcpio-hook"
_gradle_version=9.7.1
pkgver=1.39.0
pkgver=1.40.0
pkgrel=1
pkgdesc="Install kernels for the Limine bootloader."
arch=('x86_64' 'aarch64')
@@ -10,7 +10,9 @@ url="https://gitlab.com/Zesko/limine-entry-tool"
source=("${_pkgname}::git+${url}.git#tag=${pkgver}")
source_x86_64=("https://github.com/graalvm/graalvm-ce-builds/releases/download/graal-25.2.4/graalvm-community-jdk-25i2-25.0.4_linux-x64_bin.tar.gz")
source_aarch64=("https://github.com/graalvm/graalvm-ce-builds/releases/download/graal-25.2.4/graalvm-community-jdk-25i2-25.0.4_linux-aarch64_bin.tar.gz"
"https://services.gradle.org/distributions/gradle-${_gradle_version}-bin.zip")
"https://services.gradle.org/distributions/gradle-${_gradle_version}-bin.zip"
"limine-apple-gate"
"mkinitcpio-install.hook")
license=("GPL3")
provides=('limine-entry-tool')
options=(!debug !strip)
@@ -31,10 +33,12 @@ makedepends=('git')
makedepends_x86_64=('gradle')
backup=(etc/limine-entry-tool.conf)
conflicts=('limine-entry-tool')
sha256sums=('6c4affb6fb6367a1222f7d0c54957a3142781d7894bbf61b1a274bd153e5d869')
sha256sums=('267e0496d863b01903d6b99dae8c222a0ec33c4108a8a5d6e9b38eaa4a4a2edf')
sha256sums_x86_64=('3f4a89de8eaa96f2ed677f09957c7e872cd8467aad3537f8b5394c1b8c4b942e')
sha256sums_aarch64=('22286f7ecd21b9aedb3226b9bf797469e1bd3eefc491e12ef3dd49b452d230b7'
'acd53f1edaf02f1a8ff99879f8a34b302661a057d9b063ae9e35b552f804d20a')
'acd53f1edaf02f1a8ff99879f8a34b302661a057d9b063ae9e35b552f804d20a'
'199fa2122e4a20ed80e6cf5df235b4e50739593803522bfa65700b1ef242b9ce'
'9fc607e81d2f09aa0dfd313805277af92977535bd222f1e86caf5fbb28138cb4')
prepare() {
[[ -d "${_graalvm_version}" ]] && rm -rf "${_graalvm_version}"
@@ -77,4 +81,58 @@ package() {
# limine hook symlinks
ln -sf /usr/bin/limine-reset-enroll "$pkgdir/etc/boot/hooks/pre.d/10-limine-reset-enroll"
ln -sf /usr/bin/limine-enroll-config "$pkgdir/etc/boot/hooks/post.d/90-limine-enroll-config"
if [[ $CARCH == aarch64 ]]; then
_apple_silicon_hooks
fi
}
# An Apple Silicon Mac boots GRUB until Omarchy activates Limine, and keeps
# the kernel and initramfs that mkinitcpio's presets install under /boot
# after that too (GRUB, the boot check and the snapshot tools read them).
# The aarch64 hooks and mkinitcpio wrapper run through limine-apple-gate,
# which leaves every other machine as upstream ships it. On a Mac:
# - Limine's kernel and removal hooks wait until Limine is active;
# - mkinitcpio's own kernel hook, which Limine's takes over by name, runs from
# a copy of mkinitcpio 42's (mkinitcpio-install.hook: keep its triggers in
# step with mkinitcpio's), just before Limine's;
# - Limine's EFI deploy hook stays out: omarchy-mac-boot puts Limine in
# U-Boot's EFI/BOOT/BOOTAA64.EFI slot;
# - the wrapper is plain mkinitcpio: it would run limine-mkinitcpio after
# every preset build, mkinitcpio's kernel hook included.
_apple_silicon_hooks() {
local scripts=/usr/share/libalpm/scripts
local gate=$scripts/limine-apple-gate
local hooks="$pkgdir/usr/share/libalpm/hooks"
local kernel_hook="$pkgdir/etc/pacman.d/hooks/90-mkinitcpio-install.hook"
local mac_hook="$hooks/90-mkinitcpio-apple-install.hook"
local wrapper="$pkgdir/usr/local/bin/mkinitcpio"
install -Dm755 "$srcdir/limine-apple-gate" "$pkgdir$gate"
install -Dm644 "$srcdir/mkinitcpio-install.hook" "$mac_hook"
sed -i -e 's|^Description = .*|Description = Updating linux initcpios under /boot (Apple Silicon)...|' \
-e "s|^Exec = $scripts/mkinitcpio install\$|Exec = $gate --mac $scripts/mkinitcpio install|" "$mac_hook"
sed -i "s|^Exec = $scripts/limine-mkinitcpio-|Exec = $gate $scripts/limine-mkinitcpio-|" \
"$kernel_hook" "$hooks/60-limine-mkinitcpio-remove-pre.hook" "$hooks/90-limine-mkinitcpio-remove-post.hook"
sed -i "s|^Exec = /usr/bin/limine-install\$|Exec = $gate --not-mac /usr/bin/limine-install|" "$hooks/80-limine-efi-deploy.hook"
sed -i "1a $gate --mac \\&\\& exec /usr/bin/mkinitcpio \"\$@\"" "$wrapper"
local expected=(
"$mac_hook|Exec = $gate --mac $scripts/mkinitcpio install"
"$kernel_hook|Exec = $gate $scripts/limine-mkinitcpio-install"
"$hooks/60-limine-mkinitcpio-remove-pre.hook|Exec = $gate $scripts/limine-mkinitcpio-remove pre"
"$hooks/90-limine-mkinitcpio-remove-post.hook|Exec = $gate $scripts/limine-mkinitcpio-remove post"
"$hooks/80-limine-efi-deploy.hook|Exec = $gate --not-mac /usr/bin/limine-install"
)
local entry
for entry in "${expected[@]}"; do
[[ $(grep '^Exec = ' "${entry%%|*}") == "${entry#*|}" ]] || {
echo "${entry%%|*}: expected '${entry#*|}'" >&2
return 1
}
done
[[ $(sed -n 1,2p "$wrapper") == $'#!/usr/bin/env bash\n'"$gate --mac && exec /usr/bin/mkinitcpio \"\$@\"" ]] || {
echo "the mkinitcpio wrapper does not start with the Apple Silicon gate" >&2
return 1
}
}
@@ -0,0 +1,69 @@
#!/bin/bash
# The aarch64 package runs its pacman hooks and its mkinitcpio wrapper through
# this, so that only an Apple Silicon Mac behaves differently from upstream:
#
# limine-apple-gate COMMAND... COMMAND, except on a Mac that has not activated Limine
# limine-apple-gate --mac COMMAND... COMMAND on a Mac only
# limine-apple-gate --not-mac COMMAND... COMMAND everywhere but a Mac
# limine-apple-gate --mac succeeds on a Mac only
#
# A Mac boots GRUB until Omarchy activates Limine: the gate
# /var/lib/omarchy/limine.enabled and the /etc/default/limine the activation
# writes, the same test as omarchy-mac-limine-active. A command that does not
# run reads the targets pacman streams to it and succeeds quietly.
gate=/var/lib/omarchy/limine.enabled
limine_default=/etc/default/limine
compatible=(/proc/device-tree/compatible /sys/firmware/devicetree/base/compatible)
# Fixtures fake the machine for an unprivileged caller only; as root, which
# pacman hooks always are, the live system decides.
if ((EUID != 0)); then
gate=${OMARCHY_LIMINE_GATE:-$gate}
limine_default=${OMARCHY_LIMINE_DEFAULT:-$limine_default}
if [[ -n ${OMARCHY_PROC_ROOT:-}${OMARCHY_SYS_ROOT:-} ]]; then
compatible=()
[[ -z ${OMARCHY_PROC_ROOT:-} ]] || compatible+=("$OMARCHY_PROC_ROOT/device-tree/compatible")
[[ -z ${OMARCHY_SYS_ROOT:-} ]] || compatible+=("$OMARCHY_SYS_ROOT/firmware/devicetree/base/compatible")
fi
fi
# m1n1 names every Apple Silicon Mac "apple,<model>" in the root node's
# NUL-separated compatible list, as omarchy-hw-platform reads it.
is_mac() {
local source
for source in "${compatible[@]}"; do
[[ -r $source ]] && tr '\0' '\n' <"$source" | grep -q '^apple,' && return 0
done
return 1
}
# pacman writes NeedsTargets to a socket and fails the write if the hook has
# gone; hooks without NeedsTargets get no stdin at all.
pass() {
if [[ -S /dev/stdin || -p /dev/stdin ]]; then
cat >/dev/null
fi
exit 0
}
mode=limine
case ${1:-} in
--mac | --not-mac)
mode=${1#--}
shift
;;
esac
if (($# == 0)); then
[[ $mode == mac ]] && { is_mac; exit; }
echo "usage: limine-apple-gate [--mac|--not-mac] COMMAND [ARG]..." >&2
exit 2
fi
case $mode in
mac) is_mac || pass ;;
not-mac) ! is_mac || pass ;;
limine) ! is_mac || [[ -e $gate && -f $limine_default ]] || pass ;;
esac
exec "$@"
@@ -0,0 +1,38 @@
[Trigger]
Type = Path
Operation = Install
Operation = Upgrade
Operation = Remove
Target = usr/lib/initcpio/*
Target = usr/lib/firmware/*
Target = usr/lib/modules/*/extramodules/
Target = usr/src/*/dkms.conf
Target = usr/lib/systemd/systemd
Target = usr/lib/systemd/systemd-udevd
Target = usr/bin/cryptsetup
Target = usr/bin/lvm
Target = usr/bin/mdadm
Target = usr/bin/pdata_tools
Target = usr/lib/libcryptsetup.so
Target = usr/lib/libp11-kit.so
Target = usr/lib/libpcsclite.so
Target = usr/lib/modprobe.d/
[Trigger]
Type = Path
Operation = Install
Operation = Upgrade
Target = usr/lib/modules/*/vmlinuz
[Trigger]
Type = Package
Operation = Install
Operation = Upgrade
Target = mkinitcpio
Target = mkinitcpio-git
[Action]
Description = Updating linux initcpios...
When = PostTransaction
Exec = /usr/share/libalpm/scripts/mkinitcpio install
NeedsTargets
@@ -0,0 +1,5 @@
{
"source": "local",
"skip_build": true,
"channels": ["edge"]
}
+226
View File
@@ -0,0 +1,226 @@
# AArch64 Apple Silicon (Aurora Silicon)
# Based on the asahi-alarm linux-asahi package by Jos Dehaes and Matthias Kurz.
#
# Aurora Silicon maintain a fork of the Asahi kernel carrying DisplayPort
# alt-mode and USB4 support for external monitors, variable refresh rate, and
# the ISP and AOP drivers. Those changes touch device trees, the type-C stack
# and DRM, so they cannot ship as a module: this is a whole alternative kernel
# for Macs on the Omarchy edge channel. It reaches rc and stable only after
# cold-boot qualification on M1 and M2.
_auroraver=7.1.12
_aurorarel=2
pkgrel=11
# Immutable pin on aurora-silicon/linux (branch aurora-wip). Every bump is a
# PR that moves _commit and the archive checksum; the pinned commit is cold-boot
# qualified on MacBook Pro 14" M1 Pro (j314s) and 16" M2 Max (j416c) first.
_commit=2439016d2e8d3a0d8aebcd243f29604a91f201c9
_m1n1_version=1.6.1
pkgbase=linux-aurora
_srcname=linux-${_commit}
_kernelname=${pkgbase#linux}
_desc="AArch64 Apple Silicon (Aurora kernel)"
pkgver="${_auroraver}.aurora${_aurorarel}"
arch=('aarch64')
url="https://github.com/aurora-silicon/linux"
license=('GPL2')
makedepends=(
base-devel bc dtc kmod libelf pahole cpio perl rustup rust-bindgen tar xz xmlto python
)
options=('!strip')
source=(
https://github.com/aurora-silicon/linux/archive/${_commit}.tar.gz
config # the main kernel config file
rust-toolchain.toml
)
sha256sums=('6347354537148120fc5448afcb8671a558ce336f731c70690cd88062a903f84d'
'e8f3818e6bfa70166dd5caff228a0becfdd5d4f0165b589efa38150fd0b59cc9'
'2a95563bb9f5b216cc3c170a17e9471448bc63a7084bdd67df23d074939b366c')
# Kbuild takes ARCH literally and knows arm64, not aarch64.
export ARCH=arm64
export KBUILD_BUILD_HOST=archlinux
export KBUILD_BUILD_USER=$pkgbase
export KBUILD_BUILD_TIMESTAMP="$(date -Ru${SOURCE_DATE_EPOCH:+d @$SOURCE_DATE_EPOCH})"
prepare() {
cd $_srcname
echo "Setting version..."
echo "-$_aurorarel-$pkgrel" > localversion.10-pkgrel
local src
for src in "${source[@]}"; do
src="${src%%::*}"
src="${src##*/}"
[[ $src = *.patch ]] || continue
echo "Applying patch $src..."
patch -Np1 < "../$src"
done
echo "Pinning the Rust toolchain..."
cp ../rust-toolchain.toml .
echo "Creating build directories..."
mkdir -p build/base
echo "Setting config (base)..."
cp ../config build/base/.config
make olddefconfig prepare O=$PWD/build/base
diff -u ../config build/base/.config || :
make -s kernelrelease O=$PWD/build/base > build/base/version
echo "Prepared $pkgbase version $(<build/base/version)"
}
build() {
cd $_srcname
echo "Building base..."
make all O=$PWD/build/base -j $(nproc)
}
_package_kernel() {
pkgdesc="The $pkgdesc kernel and modules"
depends=(coreutils kmod initramfs $2 "m1n1>=$_m1n1_version")
optdepends=('crda: to set the correct wireless channels of your country'
'linux-firmware: firmware images needed for some devices')
# No generic linux provide: on a shared aarch64 repository it would compete
# with linux-aarch64 for any dependency on linux.
provides=(WIREGUARD-MODULE linux-asahi=${pkgver})
conflicts=(linux-asahi)
local kernver="$(<$O/version)"
local modulesdir="$pkgdir/usr/lib/modules/$kernver"
echo "Installing boot image..."
# systemd expects to find the kernel here to allow hibernation
# https://github.com/systemd/systemd/commit/edda44605f06a41fb86b7ab8128dcf99161d2344
install -Dm644 "$O"/arch/arm64/boot/Image "$modulesdir/vmlinuz"
# Used by mkinitcpio to name the kernel
echo "$1" | install -Dm644 /dev/stdin "$modulesdir/pkgbase"
echo "Installing modules..."
make O="$O" INSTALL_MOD_PATH="$pkgdir/usr" INSTALL_MOD_STRIP=1 modules_install
echo "Installing device trees..."
install -Dt "$modulesdir/dtbs" "$O"/arch/arm64/boot/dts/apple/*.dtb
# remove build and source links
rm -f "$modulesdir"/{source,build}
}
_package() {
cd $_srcname
export O="$PWD/build/base"
_package_kernel "$pkgbase"
}
_package-headers() {
pkgdesc="Headers and scripts for building modules for the $pkgdesc kernel"
depends=(pahole)
provides=(linux-asahi-headers=${pkgver})
conflicts=(linux-asahi-headers)
KARCH=arm64
cd $_srcname
O=build/base
local builddir="$pkgdir/usr/lib/modules/$(<${O}/version)/build"
echo "Installing build files..."
install -Dt "$builddir" -m644 $O/.config Makefile $O/Module.symvers $O/System.map \
localversion.* $O/version $O/vmlinux
install -Dt "$builddir/kernel" -m644 kernel/Makefile
cp -t "$builddir" -a scripts $O/scripts
# required when STACK_VALIDATION is enabled
#install -Dt "$builddir/tools/objtool" tools/objtool/objtool
# required when DEBUG_INFO_BTF_MODULES is enabled
install -Dt "$builddir/tools/bpf/resolve_btfids" $O/tools/bpf/resolve_btfids/resolve_btfids
echo "Installing headers..."
cp -t "$builddir" -a include $O/include
install -Dt "${builddir}/arch/${KARCH}" -m644 arch/${KARCH}/Makefile
install -Dt "${builddir}/arch/${KARCH}/kernel" -m644 $O/arch/${KARCH}/kernel/asm-offsets.s
cp -t "${builddir}/arch/${KARCH}" -a arch/${KARCH}/include $O/arch/${KARCH}/include
install -Dt "$builddir/drivers/md" -m644 drivers/md/*.h
install -Dt "$builddir/net/mac80211" -m644 net/mac80211/*.h
# https://bugs.archlinux.org/task/13146
install -Dt "$builddir/drivers/media/i2c" -m644 drivers/media/i2c/msp3400-driver.h
# https://bugs.archlinux.org/task/20402
install -Dt "$builddir/drivers/media/usb/dvb-usb" -m644 drivers/media/usb/dvb-usb/*.h
install -Dt "$builddir/drivers/media/dvb-frontends" -m644 drivers/media/dvb-frontends/*.h
install -Dt "$builddir/drivers/media/tuners" -m644 drivers/media/tuners/*.h
# https://bugs.archlinux.org/task/71392
install -Dt "$builddir/drivers/iio/common/hid-sensors" -m644 drivers/iio/common/hid-sensors/*.h
echo "Installing KConfig files..."
find . -name 'Kconfig*' -exec install -Dm644 {} "$builddir/{}" \;
echo "Installing unstripped VDSO..."
make O="$O" INSTALL_MOD_PATH="$pkgdir/usr" vdso_install link=
echo "Removing unneeded architectures..."
local arch
for arch in "$builddir"/arch/*/; do
[[ $arch = */${KARCH}/ ]] && continue
echo "Removing $(basename "$arch")"
rm -r "$arch"
done
echo "Removing documentation..."
rm -r "$builddir/Documentation"
echo "Removing broken symlinks..."
find -L "$builddir" -type l -printf 'Removing %P\n' -delete
echo "Removing loose objects..."
find "$builddir" -type f -name '*.o' -printf 'Removing %P\n' -delete
echo "Removing cmd files..."
find "$builddir" -type f -name '*.cmd' -printf 'Removing %P\n' -delete
echo "Stripping build tools..."
local file
while read -rd '' file; do
case "$(file --no-sandbox -bi "$file")" in
application/x-sharedlib\;*) # Libraries (.so)
strip -v $STRIP_SHARED "$file" ;;
application/x-archive\;*) # Libraries (.a)
strip -v $STRIP_STATIC "$file" ;;
application/x-executable\;*) # Binaries
strip -v $STRIP_BINARIES "$file" ;;
application/x-pie-executable\;*) # Relocatable binaries
strip -v $STRIP_SHARED "$file" ;;
esac
done < <(find "$builddir" -type f -perm -u+x ! -name vmlinux -print0)
echo "Stripping vmlinux..."
strip -v $STRIP_STATIC "$builddir/vmlinux"
echo "Adding symlink..."
mkdir -p "$pkgdir/usr/src"
ln -sr "$builddir" "$pkgdir/usr/src/$pkgbase"
}
pkgname=("$pkgbase" "$pkgbase-headers")
for _p in "${pkgname[@]}"; do
eval "package_$_p() {
$(declare -f "_package${_p#$pkgbase}")
_package${_p#$pkgbase}
}"
done
# vim:set ts=8 sts=2 sw=2 et:
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,4 @@
[toolchain]
channel = "1.93.1"
components = ["rustc", "cargo", "rust-src"]
targets = ["aarch64-unknown-linux-gnu"]
@@ -0,0 +1,5 @@
{
"source": "local",
"channels": ["edge"],
"sync": false
}
+54
View File
@@ -0,0 +1,54 @@
# m1n1 for linux-aurora. Aurora's device trees name the USB4 aliases
# usb4-N-acio, usb4-N-nhi and usb4-N-pcie-adapter; m1n1 v1.6.1 only looks up
# the usb4_N_* names, so without the alias fallback the USB4 tunables are
# never applied. The Asahi m1n1 stays with linux-asahi.
pkgname=m1n1-aurora
pkgver=1.6.1.aurora1
pkgrel=3
pkgdesc='Omarchy Aurora m1n1 with compatible USB4 tunable aliases'
arch=('aarch64')
url='https://github.com/aurora-silicon/m1n1'
license=('MIT' 'CC0-1.0' 'OFL-1.1-RFN' 'Zlib' 'BSD-2-Clause OR GPL-2.0-or-later' 'BSD-3-Clause OR GPL-2.0-or-later' 'MIT OR Apache-2.0')
provides=("m1n1=$pkgver")
conflicts=('m1n1')
makedepends=('clang' 'lld' 'llvm' 'rustup' 'make' 'patch')
options=('!strip' '!debug')
_commit=06a4601a351ebfd1abb6abba9a44c34e40d94776
source=("m1n1-${_commit}.tar.gz::https://github.com/aurora-silicon/m1n1/archive/${_commit}.tar.gz"
aurora-cio-aliases.patch
bootlogo_48.bin
bootlogo_128.bin
bootlogo_256.bin
)
sha256sums=('9d6972d3edaff856e985f2b1feb64fcf9b42fc5eecda7be64a242b49bbbe636d'
'4345a4e431642c4316595bdf023bc67d5c72e0374f3c8d59be81318710138f32'
'6668050653645711ad7523fe2abeb4cbe85a92c875f3eec754b6db23cea2191c'
'b19cb017645c7a9068ea0be9b6bb394131d7ca11b28093cf6caa1ffca74b0a4e'
'9c659b392aacfa31c62c638003d2257abfdbe17919b5c90cde4c4e62f87addab')
prepare() {
cd "m1n1-$_commit"
patch -p1 < "$srcdir/aurora-cio-aliases.patch"
for size in 48 128 256; do
cp "$srcdir/bootlogo_$size.bin" "data/bootlogo_$size.bin"
done
rustup toolchain install 1.89.0 --profile minimal --target aarch64-unknown-none-softfloat
}
build() {
cd "m1n1-$_commit"
RUSTUP_TOOLCHAIN=1.89.0 make RELEASE=1 USE_CLANG=1 ARCH=aarch64-linux-gnu \
M1N1_VERSION_TAG=v1.6.1-omarchy.aurora1
}
package() {
# asahi-scripts (update-m1n1 and its pacman hook) only exists in the
# asahi-alarm repository, which the builder does not configure. Declared
# here so makepkg does not try to install it at build time.
depends=('asahi-scripts>=20260127.1')
cd "m1n1-$_commit"
install -Dm644 build/m1n1.bin "$pkgdir/usr/lib/asahi-boot/m1n1.bin"
install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
install -m644 3rdparty_licenses/* "$pkgdir/usr/share/licenses/$pkgname/"
}
+13
View File
@@ -0,0 +1,13 @@
# m1n1-aurora
m1n1 v1.6.1 from aurora-silicon/m1n1 (06a4601a351ebfd1abb6abba9a44c34e40d94776) with RC, NHI and PCIe adapter alias fallbacks for the USB4 tunables, plus the Omarchy boot logos. Aurora's device trees name those aliases `usb4-N-acio`, `usb4-N-nhi` and `usb4-N-pcie-adapter`; stock m1n1 only looks up the `usb4_N_*` names. Latest Aurora m1n1 main is not qualified.
## Pairing with linux-aurora
- It provides `m1n1=1.6.1.aurora1`, which satisfies linux-aurora's `m1n1>=1.6.1`, and conflicts with asahi-alarm's `m1n1`. pacman prefers a package literally named `m1n1` over a provider, so an Aurora transaction names `m1n1-aurora` explicitly and accepts its conflict with `m1n1` (`--ask 4` under `--noconfirm`).
- It owns `/usr/lib/asahi-boot/m1n1.bin`. asahi-scripts' `95-m1n1-install.hook` runs `update-m1n1` when that file, `/usr/lib/modules/*/dtbs/*` or U-Boot changes. `update-m1n1` writes m1n1, the device trees and gzipped U-Boot into `m1n1/boot.bin` on the system ESP. asahi-alarm's default takes the device trees from the newest `/lib/modules/*-ARCH/dtbs`, which is where linux-aurora installs its Apple DTBs. `/etc/default/update-m1n1` overrides are left alone.
- Raising linux-aurora's `_m1n1_version` above 1.6.1 needs an m1n1-aurora whose provided version satisfies it, released first.
## Qualification
Each bump is cold-boot qualified on the M1 Pro and M2 Max: package installation, the hook rebuilding `boot.bin`, the logo, physical boot and two external displays. A successful build is not hardware acceptance.
@@ -0,0 +1,28 @@
diff --git a/src/kboot.c b/src/kboot.c
index a5bd4f1..1089666 100644
--- a/src/kboot.c
+++ b/src/kboot.c
@@ -1249,17 +1249,23 @@ static int dt_set_acio_tunables(void)
memset(fdt_alias, 0, sizeof(fdt_alias));
snprintf(fdt_alias, sizeof(fdt_alias), "usb4_%d_rc", i);
+ if (!fdt_get_alias(dt, fdt_alias))
+ snprintf(fdt_alias, sizeof(fdt_alias), "usb4-%d-acio", i);
dt_copy_acio_tunables(adt_path, fdt_alias, usb4_rc_tunables,
sizeof(usb4_rc_tunables) / sizeof(*usb4_rc_tunables));
memset(fdt_alias, 0, sizeof(fdt_alias));
snprintf(fdt_alias, sizeof(fdt_alias), "usb4_%d_pcie_adapter", i);
+ if (!fdt_get_alias(dt, fdt_alias))
+ snprintf(fdt_alias, sizeof(fdt_alias), "usb4-%d-pcie-adapter", i);
dt_copy_acio_tunables(adt_path, fdt_alias, usb4_pcie_adapter_tunables,
sizeof(usb4_pcie_adapter_tunables) /
sizeof(*usb4_pcie_adapter_tunables));
memset(fdt_alias, 0, sizeof(fdt_alias));
snprintf(fdt_alias, sizeof(fdt_alias), "usb4_%d_nhi", i);
+ if (!fdt_get_alias(dt, fdt_alias))
+ snprintf(fdt_alias, sizeof(fdt_alias), "usb4-%d-nhi", i);
dt_copy_acio_tunables(adt_path, fdt_alias, usb4_nhi_tunables,
sizeof(usb4_nhi_tunables) / sizeof(*usb4_nhi_tunables));
dt_copy_usb4_drom(adt_path, fdt_alias);
Binary file not shown.
+1
View File
@@ -0,0 +1 @@
榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻j�榻jLine truncated
Binary file not shown.
@@ -0,0 +1,4 @@
[microsoft-edge-stable-bin]
source = "regex"
url = "https://packages.microsoft.com/repos/edge/dists/stable/main/binary-amd64/Packages"
regex = "(?s)Package: microsoft-edge-stable\\n.*?Version: ([0-9.]+)-"
@@ -0,0 +1,15 @@
{
"source": "local",
"release_ring": "fast",
"upstream": {
"watch": {
"debian": "https://packages.microsoft.com/repos/edge/dists/stable/main/binary-amd64/Packages",
"package": "microsoft-edge-stable",
"pattern": "(?P<version>[0-9]+(?:\\.[0-9]+)*)-1"
}
},
"origin": {
"aur": "microsoft-edge-stable-bin",
"commit": "4f6358224df9e58ad9ef84980505d1ead732f8dc"
}
}
@@ -0,0 +1,74 @@
# Maintainer: Peter Jung <ptr1337@archlinux.org>
# Contributor: Aakash Hemadri <aakashhemadri123@gmail.com>
# Contributor: Nicolas Narvaez <nicomix1006@gmail.com>
# Contributor: Luna Jernberg <droidbittin@gmail.com>
# Contributor: EsauPR
# Contributor: nowy
pkgname=microsoft-edge-stable-bin
_pkgname=microsoft-edge
_pkgshortname=msedge
_channel=stable
pkgver=154.0.4258.37
pkgrel=2
pkgdesc="A browser that combines a minimal design with sophisticated technology to make the web faster, safer, and easier"
arch=('x86_64')
url="https://www.microsoftedgeinsider.com/en-us/download"
license=('Licenseref-custom')
provides=('microsoft-edge-stable' 'edge-stable')
conflicts=('microsoft-edge-stable' 'edge-stable' 'edge-stable-bin' 'edge')
depends=('gtk3' 'libcups' 'nss' 'alsa-lib' 'libxtst' 'libdrm' 'mesa' 'libxml2')
makedepends=('imagemagick')
optdepends=(
'libpipewire: WebRTC desktop sharing under Wayland'
'kdialog: for file dialogs in KDE'
'gnome-keyring: for storing passwords in GNOME keyring'
'kwallet: for storing passwords in KWallet'
'libunity: for download progress on KDE'
'ttf-liberation: fix fonts for some PDFs - CRBug #369991'
'xdg-utils'
)
options=(!strip !zipman !emptydirs)
source=("https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-stable/${_pkgname}-${_channel}_${pkgver}-1_amd64.deb"
"microsoft-edge-stable.sh"
"Microsoft Standard Application License Terms - Standalone (free) Use Terms.pdf")
sha256sums=('c6fa2974733991321b46c4064b785cdec5a14d8cddd182bc5fda057e37e7603d'
'dc3765d2de6520b13f105b8001aa0e40291bc9457ac508160b23eea8811e26af'
'edf2ed596eb068f168287fc76aa713ad5e0afb59f0a0a47a4f29c0c124ade15e')
package() {
bsdtar -xf data.tar.xz -C "$pkgdir/"
# suid sandbox
chmod 4755 "${pkgdir}/opt/microsoft/${_pkgshortname}/msedge-sandbox"
# 256 and 24 are proper colored icons
for res in 128 64 48 32; do
magick "${pkgdir}/opt/microsoft/${_pkgshortname}/product_logo_256.png" \
-resize ${res}x${res} \
"${pkgdir}/opt/microsoft/${_pkgshortname}/product_logo_${res}.png"
done
for res in 22 16; do
magick "${pkgdir}/opt/microsoft/${_pkgshortname}/product_logo_24.png" \
-resize ${res}x${res} \
"${pkgdir}/opt/microsoft/${_pkgshortname}/product_logo_${res}.png"
done
# install icons
for res in 16 24 32 48 64 128 256; do
install -Dm644 "${pkgdir}/opt/microsoft/${_pkgshortname}/product_logo_${res}.png" \
"${pkgdir}/usr/share/icons/hicolor/${res}x${res}/apps/${_pkgname}.png"
done
# User flag aware launcher
install -m755 microsoft-edge-stable.sh "${pkgdir}/usr/bin/microsoft-edge-stable"
# License
install -Dm644 'Microsoft Standard Application License Terms - Standalone (free) Use Terms.pdf' "${pkgdir}/usr/share/licenses/${_pkgname}/LICENSE.pdf"
rm "${pkgdir}/opt/microsoft/${_pkgshortname}"/product_logo_*.png
# Remove the Debian cron job, which installs an apt keyring pacman doesn't track
rm -r \
"${pkgdir}/etc/cron.daily/" \
"${pkgdir}/opt/microsoft/${_pkgshortname}/cron/"
}
@@ -0,0 +1,22 @@
# Colored makepkg-like functions
msg_blue() {
printf "${blue}==>${bold} $1${all_off}\n"
}
note() {
printf "${blue}==>${yellow} NOTE:${bold} $1${all_off}\n"
}
all_off="$(tput sgr0)"
bold="${all_off}$(tput bold)"
blue="${bold}$(tput setaf 4)"
yellow="${bold}$(tput setaf 3)"
post_install() {
note "Custom flags should be put directly in: ~/.config/microsoft-edge-stable-flags.conf"
note "The launcher is called: 'microsoft-edge-stable'"
}
post_upgrade() {
post_install
}
@@ -0,0 +1,15 @@
#!/usr/bin/env sh
# Launches MS Edge with flags specified in $XDG_CONFIG_HOME/microsoft-edge-beta-flags.conf
# Make script fail if `cat` fails for some reason
set -e
# Set default value if variable is unset/null
XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-${HOME}/.config}"
# Attempt to read a config file if it exists
if [ -r "${XDG_CONFIG_HOME}/microsoft-edge-stable-flags.conf" ]; then
EDGE_USER_FLAGS="$(cat "$XDG_CONFIG_HOME/microsoft-edge-stable-flags.conf")"
fi
exec /opt/microsoft/msedge/microsoft-edge $EDGE_USER_FLAGS "$@"
+3 -3
View File
@@ -1,6 +1,6 @@
# Maintainer: Jeff Dickey <releases@mise.jdx.dev>
pkgname=mise-bin
pkgver=2026.9.12
pkgver=2026.9.14
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=('30c79a0a24d8f0ad80e6c9b11ec54816be2a9b77e7eeae32c1267a5b9d34d3d7')
sha256sums_aarch64=('7bc2a5558b787a33f22e4b5955cfec58871ad3723658418ad3d2cdf5a0e693b9')
sha256sums_x86_64=('849cf8eb77d4ccf1eb9fd87cbd757e863e64bcd8623a8865a651af2a1579dace')
sha256sums_aarch64=('3405d3fe8c1491ace3bfbb76e88b5ddbbbfc2f1495dcaad6455607ec782d2a5d')
package() {
install -Dm755 "${srcdir}/mise/bin/mise" "${pkgdir}/usr/bin/mise"
+10 -1
View File
@@ -1,3 +1,12 @@
{
"source": "local"
"source": "local",
"upstream": {
"git_tags": "https://github.com/omacom/monologue.git",
"tag_pattern": "v{pkgver}",
"sources": {
"any": [
"https://github.com/omacom/monologue/archive/refs/tags/{tag}.tar.gz"
]
}
}
}
+6 -9
View File
@@ -1,8 +1,8 @@
# Maintainer: David Heinemeier Hansson <david@hey.com>
pkgname=monologue
pkgver=0.1.0
pkgrel=3
pkgver=0.2.0
pkgrel=1
pkgdesc='A simple, theme-synced webcam recorder for Omarchy'
arch=('x86_64' 'aarch64')
url='https://github.com/omacom/monologue'
@@ -19,19 +19,16 @@ depends=(
'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')
source=("$pkgname-$pkgver.tar.gz::$url/archive/refs/tags/v$pkgver.tar.gz")
sha256sums=('aef0e8d2d5f978e03d0e3a6c9685b828ff6a128d2dc136cb36e45458cdf62c69')
build() {
cd "$srcdir/$pkgname-$_commit"
cd "$srcdir/$pkgname-$pkgver"
./bin/build
}
package() {
cd "$srcdir/$pkgname-$_commit"
cd "$srcdir/$pkgname-$pkgver"
install -Dm755 build/monologue "$pkgdir/usr/bin/monologue"
install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
+3
View File
@@ -0,0 +1,3 @@
{
"source": "local"
}
+3
View File
@@ -0,0 +1,3 @@
#!/bin/bash
set -euo pipefail
python3 "$(dirname "$0")/../upstream.py"
+103
View File
@@ -0,0 +1,103 @@
# Maintainer: Shun Li <riverscn@gmail.com>
# Extracted from omacom/omarchy-pkgs PR #240, revision dcef132b2df11bb762e233ea8c6af3110f079b67.
pkgname=obsidian
pkgver=1.13.7
pkgrel=2
pkgdesc='Knowledge base on top of a local folder of plain-text Markdown files'
arch=('aarch64')
url='https://obsidian.md/'
license=('custom')
depends=(
'alsa-lib'
'at-spi2-core'
'cairo'
'dbus'
'expat'
'fontconfig'
'gcc-libs'
'glib2'
'glibc'
'gtk3'
'hicolor-icon-theme'
'libcups'
'libnotify'
'libsecret'
'libx11'
'libxcb'
'libxcomposite'
'libxdamage'
'libxext'
'libxfixes'
'libxkbcommon'
'libxrandr'
'mesa'
'nspr'
'nss'
'pango'
'systemd-libs'
'xdg-utils'
)
provides=('obsidian')
conflicts=('obsidian-appimage' 'obsidian-bin')
options=('!debug' '!strip')
checkdepends=('python')
source=('obsidian.desktop' 'upstream.py' 'test-upstream.py')
source_aarch64=(
"obsidian-${pkgver}-arm64.tar.gz::https://github.com/obsidianmd/obsidian-releases/releases/download/v${pkgver}/obsidian-${pkgver}-arm64.tar.gz"
)
sha256sums=('42ecb332c900a01b2a6db0a70b4cc8c0553e863aee72894b23ed20a6289b131c'
'd2933bdc97d9ba55986d710114512e0eb105e1cc549cef4aa7416cb333e0a9b8'
'7213e4e691c53e184b0f037478ac6758fe44adad7a984fc1daef7fd17c31d5d8')
sha256sums_aarch64=('98aac34d1f132a35cf506fc3fa196d595dcdeefdebd44b0cc5faaa7a1a210de2')
check() {
python test-upstream.py
}
package() {
local source_dir="$srcdir/obsidian-${pkgver}-arm64"
local install_dir="$pkgdir/opt/obsidian"
install -d "$install_dir"
cp -a --no-preserve=ownership "$source_dir/." "$install_dir/"
# The official ARM64 archive currently carries two x86_64-only addons.
# Remove only an unusable x86_64 payload; retain it automatically if the
# vendor starts shipping an AArch64 build in a later release.
local addon machine
for addon in \
resources/app.asar.unpacked/node_modules/btime/binding.node \
resources/app.asar.unpacked/node_modules/get-fonts/binding.node; do
[[ -f "$install_dir/$addon" ]] || continue
machine=$(readelf -h "$install_dir/$addon" |
sed -n 's/^[[:space:]]*Machine:[[:space:]]*//p')
case "$machine" in
AArch64) ;;
'Advanced Micro Devices X86-64') rm -f "$install_dir/$addon" ;;
*) error "Unexpected Obsidian addon architecture: $addon ($machine)"; return 1 ;;
esac
done
find "$install_dir" -type d -exec chmod 755 {} +
find "$install_dir" -type f -exec chmod 644 {} +
chmod 755 \
"$install_dir/chrome_crashpad_handler" \
"$install_dir/obsidian" \
"$install_dir/obsidian-cli"
# Chromium sandboxes through unprivileged user namespaces, which Arch-family
# kernels allow; a setuid-root helper is not needed.
chmod 755 "$install_dir/chrome-sandbox"
install -d "$pkgdir/usr/bin"
ln -s /opt/obsidian/obsidian "$pkgdir/usr/bin/obsidian"
ln -s /opt/obsidian/obsidian-cli "$pkgdir/usr/bin/obsidian-cli"
install -Dm644 "$srcdir/obsidian.desktop" \
"$pkgdir/usr/share/applications/obsidian.desktop"
install -Dm644 "$install_dir/resources/icon.png" \
"$pkgdir/usr/share/icons/hicolor/512x512/apps/obsidian.png"
install -Dm644 "$install_dir/LICENSE.electron.txt" \
"$pkgdir/usr/share/licenses/$pkgname/LICENSE.electron.txt"
install -Dm644 "$install_dir/LICENSES.chromium.html" \
"$pkgdir/usr/share/licenses/$pkgname/LICENSES.chromium.html"
}
+11
View File
@@ -0,0 +1,11 @@
# Obsidian on ARM
This is the canonical `obsidian` package, extracted from omacom/omarchy-pkgs #240 at `dcef132b2df11bb762e233ea8c6af3110f079b67`. It repackages the official ARM64 desktop tarball and preserves the original contributor attribution and Electron/Chromium license files.
The package owns the installed application bundle and Electron runtime. `chrome-sandbox` is installed without setuid: Chromium's sandbox uses unprivileged user namespaces, which Arch-family kernels allow. A system that disables them must re-enable them rather than launch Obsidian with `--no-sandbox`. Obsidian's user-controlled in-app updater may separately update application code; no updater-disabling patch is applied. See https://obsidian.md/help/updates.
The package-local upstream hook selects stable desktop releases containing the exact ARM64 tarball, ignoring mobile-only tags. Missing SHA256 metadata on the selected desktop release fails rather than silently selecting an older installer. The offline tests in `test-upstream.py` run in the package's `check()`; run them directly with `python pkgbuilds/obsidian/test-upstream.py`. Upstream's scheduled sync opens or updates its normal review PR; maintainers need GitHub PR notifications enabled and should monitor failed sync runs too.
This package conflicts with `obsidian-appimage` and `obsidian-bin`. It does not automatically remove them or migrate users. Adoption in Omarchy Mac requires a separate change to the existing ARM preinstall/removal mappings. Do not modify vaults or user configuration as part of the package transaction.
Before this draft is ready, validate clean ARM installation, desktop/CLI paths, native payload architecture and opening/editing a disposable vault in a disposable GUI session. Existing AppImage operation does not validate this tarball package. The two named vendor x86-only addons are removed; any newly introduced foreign executable requires review.
+10
View File
@@ -0,0 +1,10 @@
[Desktop Entry]
Name=Obsidian
Comment=Knowledge base on top of a local folder of Markdown files
Exec=obsidian %U
Terminal=false
Type=Application
Icon=obsidian
StartupWMClass=obsidian
MimeType=x-scheme-handler/obsidian;
Categories=Office;
+47
View File
@@ -0,0 +1,47 @@
#!/usr/bin/python3
import importlib.util
from pathlib import Path
import unittest
path = Path(__file__).with_name('upstream.py')
spec = importlib.util.spec_from_file_location('obsidian_upstream', path)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
def release(version, **extra):
return dict(tag_name='v' + version, draft=False, prerelease=False,
published_at='2026-09-23T00:00:00Z', assets=[{
'name': f'obsidian-{version}-arm64.tar.gz',
'digest': 'sha256:' + 'a' * 64,
'browser_download_url': f'https://github.com/obsidianmd/obsidian-releases/releases/download/v{version}/obsidian-{version}-arm64.tar.gz'
}], **extra)
class DesktopReleaseTests(unittest.TestCase):
def test_mobile_only_and_preview_ignored(self):
mobile = release('2.0.0'); mobile['assets'] = [{'name': 'Obsidian.apk'}]
preview = release('3.0.0'); preview['prerelease'] = True
draft = release('4.0.0'); draft['draft'] = True
self.assertEqual(module.select([mobile, preview, draft, release('1.13.7')])['pkgver'], '1.13.7')
def test_numeric_version_order(self):
self.assertEqual(module.select([release('1.9.0'), release('1.13.7')])['pkgver'], '1.13.7')
def test_bad_newest_digest_fails_without_falling_back(self):
newest = release('2.0.0'); newest['assets'][0]['digest'] = None
with self.assertRaises(ValueError):
module.select([release('1.13.7'), newest])
def test_changed_url_rejected(self):
row = release('1.13.7'); row['assets'][0]['browser_download_url'] = 'https://example.org/foreign'
with self.assertRaises(ValueError): module.select([row])
def test_missing_or_duplicate_installer_rejected(self):
with self.assertRaises(ValueError): module.select([])
row = release('1.13.7'); row['assets'] *= 2
with self.assertRaises(ValueError): module.select([row])
if __name__ == '__main__':
unittest.main()
+45
View File
@@ -0,0 +1,45 @@
#!/usr/bin/python3
"""Report the newest stable ARM desktop installer, ignoring mobile-only tags."""
import json
import re
import subprocess
def select(releases):
if not isinstance(releases, list):
raise ValueError('Expected a GitHub release list')
candidates = []
for release in releases:
if release.get('draft') or release.get('prerelease'):
continue
match = re.fullmatch(r'v([0-9]+(?:\.[0-9]+)*)', release.get('tag_name', ''))
if not match:
continue
version = match[1]
assets = [a for a in release.get('assets', [])
if a.get('name') == f'obsidian-{version}-arm64.tar.gz']
if not assets:
continue
if len(assets) != 1:
raise ValueError('Duplicate desktop installer')
candidates.append((tuple(map(int, version.split('.'))), version, release, assets[0]))
if not candidates:
raise ValueError('No stable ARM desktop installer found')
_, version, release, asset = max(candidates, key=lambda row: row[0])
digest = asset.get('digest') or ''
if not re.fullmatch(r'sha256:[0-9a-f]{64}', digest):
raise ValueError('Selected desktop installer lacks its SHA256 digest')
expected = f'https://github.com/obsidianmd/obsidian-releases/releases/download/v{version}/obsidian-{version}-arm64.tar.gz'
if asset.get('browser_download_url') != expected:
raise ValueError('Unexpected desktop installer URL')
return {'pkgver': version, 'published_at': release['published_at'],
'sha256sums': {'aarch64': [digest[7:]]}}
if __name__ == '__main__':
response = subprocess.check_output([
'curl', '--proto', '=https', '--proto-redir', '=https', '-fsSL',
'--retry', '3', '--max-time', '60',
'https://api.github.com/repos/obsidianmd/obsidian-releases/releases?per_page=100'
], text=True)
print(json.dumps(select(json.loads(response))))
+2 -2
View File
@@ -1,5 +1,5 @@
pkgname=omakade
pkgver=1.10.0
pkgver=1.12.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=('01a4c1aa35c51aba54f57fd0d4eab4a00a14ca2bd4d1b6163264b8ba6fed5b55')
sha256sums=('712788a432682465040fd3b384f18ce0cc60c8e699410bed63cbecadb8171729')
build() {
cmake -S "$pkgname-$pkgver" -B build -G Ninja \
+17 -1
View File
@@ -1 +1,17 @@
{ "source": "local", "channels": ["edge"] }
{
"source": "local",
"channels": ["edge"],
"auto_merge": true,
"min_release_age": "30m",
"upstream": {
"watch": {
"git_branch": "https://github.com/basecamp/omarchy.git",
"branch": "quattro",
"tag_pattern": "v(?P<version>[0-9]+\\.[0-9]+\\.[0-9]+)",
"version": "{version}.r{count}.g{commit:.7}",
"variables": {
"_commit": "{commit}"
}
}
}
}
+12 -22
View File
@@ -1,9 +1,13 @@
# Maintainer: Ryan Hughes <ryan@omarchy.org>
pkgname='omarchy-dev'
pkgver=4.0.0.r847.g4de185b
pkgver=4.0.0.r6663.g3faafba
pkgrel=1
_pkgver_base=4.0.0
_pkgver_base_tag=v3.8.2
# Pinned by the upstream watch in .omarchy/package.json (bin/sync-upstream):
# every quattro tip becomes a commit pin here, so the package is versioned,
# checksummed and built exactly like a release, just more often. The r-number
# is the branch's total commit count, not the distance from the last tag: the
# published history used the total, and pacman must never see it go down.
_commit=3faafba234e530b0986196b98dc2c38951e7dd6f
pkgdesc='Beautiful, modern, and opinionated Arch Linux by DHH (quattro branch tip)'
# The payload is architecture-independent, but the dependency set is not: the
# boot stack differs per architecture (see depends_x86_64 / depends_aarch64),
@@ -73,30 +77,16 @@ makedepends=(
'git'
)
# Source: quattro branch tip by default; set OMARCHY_SRC=/path/to/checkout
# to build from a local source tree instead (mirrors omarchy-zsh/omarchy-fish DX).
# Source: the pinned quattro commit. Set OMARCHY_SRC=/path/to/checkout to
# build from a local source tree instead (mirrors omarchy-zsh/omarchy-fish DX);
# the arrays are emptied below so nothing is downloaded in that case.
source=("omarchy::git+https://github.com/basecamp/omarchy.git#commit=${_commit}")
sha256sums=('d97e0f12d9f17bfd78872bdc12edb63184b59483f055178d8d80597ed132882f')
if [[ -n "${OMARCHY_SRC:-}" ]]; then
source=()
sha256sums=()
else
source=("omarchy::git+https://github.com/basecamp/omarchy.git#branch=quattro")
sha256sums=('SKIP')
fi
pkgver() {
cd "$srcdir/omarchy"
local commit_count commit_hash
if git rev-parse --verify "${_pkgver_base_tag}^{commit}" >/dev/null 2>&1; then
commit_count=$(git rev-list --count "${_pkgver_base_tag}..HEAD")
else
commit_count=$(git rev-list --count HEAD)
fi
commit_hash=$(git rev-parse --short=7 HEAD)
printf "%s.r%s.g%s" "$_pkgver_base" "$commit_count" "$commit_hash"
}
prepare() {
if [[ -n "${OMARCHY_SRC:-}" ]]; then
rm -rf "$srcdir/omarchy"
@@ -0,0 +1 @@
{ "source": "local", "channels": ["edge"] }
+65
View File
@@ -0,0 +1,65 @@
# Maintainer: Marcelo Alcantara <maralc@gmail.com>
# Recipe from maralcbr/omarchy-pkgs asahi-quattro pkgbuilds/omarchy-mac-boot
# (20260921-10 at 0a55baeddecf59687c32b4bd4e1dee743605c183); the payload now
# builds from packages/omarchy-mac/boot in omacom/omarchy-mac.
pkgname=omarchy-mac-boot
# pkgver is the UTC commit date of _commit, so it sorts above the fork's
# 20260921-N. Reset pkgrel to 1 when pkgver changes; bump it to re-pin or
# rebuild on the same day.
pkgver=20260927
pkgrel=1
pkgdesc='Apple Silicon boot support for Omarchy: initramfs, in-place encryption, first boot and Limine activation'
arch=('aarch64')
groups=('omarchy-platform-apple-silicon')
url='https://github.com/omacom/omarchy-mac'
license=('MIT')
makedepends=('git')
provides=('omarchy-apple-boot' 'omarchy-first-boot')
conflicts=('omarchy-apple-boot' 'omarchy-first-boot')
replaces=('omarchy-apple-boot' 'omarchy-first-boot')
install=omarchy-mac-boot.install
# An exact omarchy-mac commit, never a branch.
_commit=ff7ce0d4dfaea9e17270b3061e642ee095b7b265
source=("omarchy-mac::git+https://github.com/omacom/omarchy-mac.git#commit=${_commit}")
sha256sums=('7530c284cd323d451540205c0a677c4e187070f0b8c4081a2e85f487f2ebb985')
prepare() {
# Staging must not be able to read the surrounding desktop source.
rm -rf "$srcdir/boot"
cp -a "$srcdir/omarchy-mac/packages/omarchy-mac/boot" "$srcdir/boot"
[[ $(git -C "$srcdir/omarchy-mac" rev-parse HEAD) == "$_commit" ]]
[[ $(TZ=UTC0 git -C "$srcdir/omarchy-mac" show -s --format=%cd --date=format-local:%Y%m%d HEAD) == "$pkgver" ]]
}
# The tests run in the checkout: some compare the payload with the desktop
# source around it (the HOOKS baseline in etc/, the first-run user units and the
# default package lists, from omacom/omarchy-mac#582 and #598).
check() {
"$srcdir/omarchy-mac/packages/omarchy-mac/boot/test/all"
}
package() {
# Runtime-only, so the builder stages and tests the payload without the
# desktop or a boot chain. 1.39.0-2 is the first limine-mkinitcpio-hook that
# leaves a Mac's /boot to mkinitcpio until Limine is activated.
depends=('omarchy' 'limine' 'limine-mkinitcpio-hook>=1.39.0-2' 'limine-snapper-sync' 'asahi-scripts'
'bash' 'binutils' 'btrfs-progs' 'coreutils' 'cpio' 'cryptsetup' 'diffutils' 'gawk' 'gnupg' 'grep'
'gum' 'gzip' 'kbd' 'mkinitcpio' 'sed' 'systemd' 'util-linux')
"$srcdir/boot/install" "$pkgdir"
# Once the source drops its own Plymouth fragment (omacom/omarchy-mac#544),
# the Apple drop-ins build on omarchy-settings' HOOKS baseline
# (/etc/mkinitcpio.conf.d/00-omarchy-hooks.conf, omacom/omarchy-mac#536), and
# an older settings package leaves Plymouth out of the Mac initramfs. A
# settings version cannot say so (quattro candidates sort below stock
# releases, and omarchy pins its settings exactly), so the settings packages
# that ship the baseline provide it by name.
[[ -e $pkgdir/etc/mkinitcpio.conf.d/93-omarchy-mac-plymouth.conf ]] ||
depends+=('omarchy-mkinitcpio-hooks-baseline')
printf '%s\n' "$_commit" | install -Dm644 /dev/stdin "$pkgdir/usr/share/omarchy-mac/boot-source-revision"
# Administrator-editable: every /etc file and the initramfs helpers an image
# may rewrite.
mapfile -t backup < <(cd "$pkgdir" && find etc usr/lib/omarchy/initcpio -type f | sort)
}
+40
View File
@@ -0,0 +1,40 @@
# omarchy-mac-boot
Apple Silicon boot support for Omarchy: the Mac mkinitcpio drop-ins and initcpio hooks, in-place LUKS conversion in the initramfs, vendor firmware in early boot, first boot of a Mac image, the Limine activation gate and the boot check. The source is `packages/omarchy-mac/boot/` in omacom/omarchy-mac, with its own tests. The recipe pins an exact omarchy-mac commit, copies that directory away from the surrounding desktop tree in `prepare()` and stages the package from the copy with its `install` script. `check()` runs its `test/all` in the full checkout instead, because some tests compare the payload with the desktop source around it (omacom/omarchy-mac#582 and #598). The recipe itself holds only metadata, `backup=` and the pacman scriptlet.
It follows the fork recipe in maralcbr/omarchy-pkgs (`asahi-quattro`, `pkgbuilds/omarchy-mac-boot` at 20260921-10), which carried the payload as files in the recipe.
## Scope
The package is aarch64-only and published to edge only. It widens to rc and stable only after M1 and M2 cold-boot qualification. It carries the Apple platform tag, `groups=('omarchy-platform-apple-silicon')`, which omarchy-settings' pacman platform guard uses to keep it off other machines once that guard ships (omacom/omarchy-mac#539, `docs/platform-guard.md`). Its only provides are the retired Apple-only names, and nothing generic depends on it or on them, so nothing generic can pull it onto non-Apple aarch64 machines. Its one Apple-only dependency, `asahi-scripts`, comes from the asahi-alarm repository that only the Apple profile configures.
It requires `limine-mkinitcpio-hook` 1.39.0-2 or newer: that is the first build whose hooks leave a Mac's `/boot` to mkinitcpio until Limine is activated. With an older hook, Limine's kernel hook replaces mkinitcpio's by name, and this package's `limine-ready` gate stops it on a Mac that still boots GRUB, so a kernel update would never reach `/boot`.
## HOOKS baseline
From the source that drops the boot package's own Plymouth fragment (omacom/omarchy-mac#544), the Apple drop-ins build on omarchy-settings' HOOKS baseline, `/etc/mkinitcpio.conf.d/00-omarchy-hooks.conf` (omacom/omarchy-mac#536). With an older settings package the Mac initramfs loses Plymouth at the passphrase prompt. A settings version cannot express this: quattro candidate builds sort below stock releases, and `omarchy` pins its settings version exactly. So when the staged payload has no `93-omarchy-mac-plymouth.conf`, `package()` adds a dependency on the name `omarchy-mkinitcpio-hooks-baseline`. Every settings package that ships the baseline on aarch64 (`omarchy-settings`, `omarchy-settings-dev`, candidate builds) must `provide` that name. Until one does, such a build of this package cannot be installed: it fails outright rather than silently booting without Plymouth.
## Publish order
A new pin publishes on merge, so check what the pinned source needs first:
- **Settings baseline.** A pin that includes omacom/omarchy-mac#544 (no `93-omarchy-mac-plymouth.conf`) needs omarchy-settings with the HOOKS baseline (omacom/omarchy-mac#542) published on aarch64, and providing `omarchy-mkinitcpio-hooks-baseline`. Publish that first; otherwise this build cannot be installed.
- **Update verification.** A pin that includes omacom/omarchy-mac#543 (`/usr/lib/omarchy/mac-boot/update-verify`) must publish before any runtime that carries #543. Otherwise that runtime blocks every update on Macs whose `omarchy-mac-boot` predates it.
- **Reset and key-slot entrypoints.** A pin that includes omacom/omarchy-mac#552 (`reset-prepare`, `reset-verify`, `reset-commit`, `reset-rollback`) and #553 (`luks-slots`) must publish before any runtime that carries them. That runtime's `omarchy-lifecycle-dispatch` requires them on Apple Silicon, so otherwise factory reset, owner setup and `omarchy-drive-password` on the system disk fail on Macs whose `omarchy-mac-boot` predates them.
- **Reset first-boot markers.** A pin that includes omacom/omarchy-mac#579 (`reset-prepare` clears the factory root's first-boot state and arms `mac-first-boot/pending`) must publish before any runtime that carries #579's `omarchy-system-factory-reset`, which no longer does that inline. Otherwise a factory reset on a Mac whose `omarchy-mac-boot` predates it leaves the factory root without the Mac's first boot, and so without its package keyring, or with an older image's conversion token. A newer boot package with an older runtime is safe: the steps are idempotent.
- **Speaker safety owner.** A pin that includes omacom/omarchy-mac#567 no longer presets or enables `speakersafetyd`; `omarchy-mac` owns it from omacom/omarchy-mac#535. Re-pin `omarchy-mac` at or past #535 in the same merge as that pin, or publish it first. Edge `omarchy-mac` 0.1.0-5 (b4a79d83d) predates #535 and ships no preset for it, so with only the boot package re-pinned a `systemctl preset-all` on an edge Mac disables the speaker amps' safety daemon, and an image built from edge fails its image check.
## Transition
- It provides, conflicts with and replaces `omarchy-apple-boot` and `omarchy-first-boot`. The scriptlet moves a pending `omarchy-first-boot` marker to `omarchy-mac-first-boot`, drops the replaced unit's dangling enable link and points at a customised `90-omarchy-asahi.conf.pacsave`.
- `pkgver` is the UTC commit date of the pin, so any pin from `20260925` on upgrades the fork's `20260921-10` on mx-mac Macs. The files the fork shipped that the source no longer does (the image finalize tools, the upstream ARM repository key and the GRUB snapshot-menu hook) are removed by that upgrade.
- `backup=` covers every `/etc` file and `/usr/lib/omarchy/initcpio`. It includes `/etc/default/update-m1n1`, which pins update-m1n1's device-tree order to the C locale. On a Mac that already has its own unowned copy, pacman keeps it and installs the shipped one as `.pacnew`. The snapshot restore hooks in `/etc/boot/hooks` are symlinks to `/usr/bin/omarchy-mac-snapshot-check`, not files, so they stay out of it.
## Updates
Updates are reviewed pins, never a branch:
1. Set `_commit` to the full omarchy-mac SHA and `pkgver` to its UTC commit date (`TZ=UTC0 git show -s --format=%cd --date=format-local:%Y%m%d <sha>`); `prepare()` checks both.
2. Reset `pkgrel` to 1 when `pkgver` changes; bump it for a second pin on the same date or a rebuild.
3. Refresh `sha256sums` with `makepkg -g`.
4. Check the pin against [Publish order](#publish-order). Before the first pin that includes omacom/omarchy-mac#567 publishes, `omarchy-mac` must be published at or past #535, or re-pinned in the same pull request.
@@ -0,0 +1,48 @@
_omarchy_mac_boot_asahi_pacsave_notice() {
local pacsave=/etc/mkinitcpio.conf.d/90-omarchy-asahi.conf.pacsave
local shipped=/etc/mkinitcpio.conf.d/90-omarchy-mac.conf
[[ -f $pacsave && -f $shipped ]] || return 0
cmp -s "$pacsave" "$shipped" && return 0
cat <<EOF
==> omarchy-mac-boot: a customized 90-omarchy-asahi.conf was preserved as:
$pacsave
The active mkinitcpio drop-in is now:
$shipped
Merge any remaining local changes into the new file.
EOF
}
_omarchy_mac_boot_migrate_legacy_first_boot() {
local legacy=/var/lib/omarchy/first-boot/pending
local successor=/var/lib/omarchy/mac-first-boot/pending
[[ -e $legacy ]] || return 0
install -Dm644 /dev/null "$successor"
rm -f "$legacy"
systemctl --no-reload enable omarchy-mac-first-boot.service 2>/dev/null || {
install -d /etc/systemd/system/multi-user.target.wants
ln -sfr /usr/lib/systemd/system/omarchy-mac-first-boot.service \
/etc/systemd/system/multi-user.target.wants/omarchy-mac-first-boot.service
}
}
post_install() {
_omarchy_mac_boot_asahi_pacsave_notice
_omarchy_mac_boot_migrate_legacy_first_boot
_omarchy_mac_boot_drop_legacy_wants
}
_omarchy_mac_boot_drop_legacy_wants() {
# The replaced omarchy-first-boot left its preset-enabled link behind.
local link=/etc/systemd/system/multi-user.target.wants/omarchy-first-boot.service
[[ -L $link && ! -e $link ]] && rm -f "$link"
return 0
}
post_upgrade() {
_omarchy_mac_boot_asahi_pacsave_notice
_omarchy_mac_boot_migrate_legacy_first_boot
_omarchy_mac_boot_drop_legacy_wants
}
@@ -0,0 +1 @@
{ "source": "local", "channels": ["edge"] }
+44
View File
@@ -0,0 +1,44 @@
# Maintainer: Scott Jones <scottajones@gmail.com>
# Ported from omarchy-mac/omarchy-pkgs-aarch64 pkgbuilds/omarchy-mac at 02ed7b250f7edcf7c5f748acaf7b21ef0a764e9d.
pkgname=omarchy-mac
# pkgver matches packages/omarchy-mac/version at _commit. Bump pkgrel to re-pin
# or rebuild the same add-on version; reset it to 1 when pkgver increases.
pkgver=0.1.0
pkgrel=6
pkgdesc='Apple Silicon configuration and support services for Omarchy'
arch=('aarch64')
groups=('omarchy-platform-apple-silicon')
url='https://github.com/omacom/omarchy-mac'
license=('MIT')
makedepends=('git' 'findutils')
checkdepends=('diffutils' 'python' 'systemd')
# An exact quattro-upstream commit, never a branch.
_commit=ff7ce0d4dfaea9e17270b3061e642ee095b7b265
source=("omarchy-mac::git+https://github.com/omacom/omarchy-mac.git#commit=${_commit}")
sha256sums=('7530c284cd323d451540205c0a677c4e187070f0b8c4081a2e85f487f2ebb985')
prepare() {
# Tests and staging must not be able to read the surrounding desktop source.
rm -rf "$srcdir/addon"
cp -a "$srcdir/omarchy-mac/packages/omarchy-mac" "$srcdir/addon"
[[ $(<"$srcdir/addon/version") == "$pkgver" ]]
[[ $(git -C "$srcdir/omarchy-mac" rev-parse HEAD) == "$_commit" ]]
}
check() {
"$srcdir/addon/test/all"
}
package() {
# Runtime-only: the builder does not need the Omarchy desktop to stage or
# test the add-on.
depends=('omarchy' 'bash' 'coreutils' 'diffutils' 'grep' 'sed' 'gawk' 'systemd' 'pciutils' 'kmod'
'mkinitcpio' 'networkmanager' 'iwd' 'python' 'pipewire' 'pipewire-pulse' 'libpulse' 'wireplumber'
'asahi-audio' 'alsa-ucm-conf-asahi' 'rtkit' 'pipewire-alsa')
"$srcdir/addon/install" "$pkgdir"
install -Dm644 "$srcdir/addon/README.md" "$pkgdir/usr/share/doc/$pkgname/README.md"
install -Dm644 "$srcdir/addon/ORIGINS.md" "$pkgdir/usr/share/doc/$pkgname/ORIGINS.md"
printf '%s\n' "$_commit" >"$pkgdir/usr/share/omarchy-mac/source-revision"
}
+23
View File
@@ -0,0 +1,23 @@
# omarchy-mac
Apple Silicon runtime support for Omarchy: Wi-Fi resume recovery, the headset microphone mapping, the notch modprobe default and the NetworkManager Wi-Fi backend. The source is `packages/omarchy-mac/` in omacom/omarchy-mac, with its own version and tests. The recipe pins an exact `quattro-upstream` commit and packages only that directory; `prepare()` copies it away from the surrounding desktop tree before `check()` runs its tests.
Ported from Scott Jones's recipe in omarchy-mac/omarchy-pkgs-aarch64 (`pkgbuilds/omarchy-mac` at `02ed7b250f7edcf7c5f748acaf7b21ef0a764e9d`). It supersedes the unpublished `omarchy-settings-asahi` recipe.
## Scope
The package is aarch64-only and published to edge only. It widens to rc and stable only after M1 and M2 cold-boot qualification. It depends on the generic `omarchy` package and has no `provides`, so nothing generic can pull it onto non-Apple aarch64 machines. It ships no kernel, boot, installer or trust configuration; those belong to `omarchy-mac-boot`.
Installing the package enables no services, but its vendor configuration applies on the next service start or module load: the iwd Wi-Fi backend for NetworkManager, the `appledrm` notch option and the WirePlumber headset microphone policy. `omarchy-mac-setup-system` and `omarchy-mac-setup-user` enable the Wi-Fi resume and microphone units, and they exit unless `omarchy-hw-apple-silicon` reports Apple Silicon. Stock Omarchy does not yet ship that detector or call these entrypoints, so on a stock install the units stay disabled until the platform detector and profile work lands.
Runtime dependencies are declared in `package()`, so the builder stages and tests the add-on without installing the desktop.
## Updates
Updates are reviewed pins, never a branch. To release a change to the add-on:
1. Set `_commit` to the full `quattro-upstream` SHA and `pkgver` to `packages/omarchy-mac/version` at that commit.
2. Reset `pkgrel` to 1 when `pkgver` increases; bump it to re-pin or rebuild the same version.
3. Refresh `sha256sums` with `makepkg -g`.
Desktop-only commits on `quattro-upstream` do not need a new pin. `0.1.0-5` sorts above the `0.1.0-4.<run>` candidates the collaboration builder produced for test images.
@@ -0,0 +1,11 @@
{
"source": "local",
"min_release_age": "24h",
"upstream": {
"github": "jankeesvw/omarchy-meeting-recorder",
"digests": true,
"assets": {
"x86_64": "omarchy-meeting-recorder-{pkgver}-x86_64-linux.tar.gz"
}
}
}
Loaded 100 of 191 files, more files were not shown because too many files have changed in this diff. Show more