inox-canary

LOW
maintainer Rownix 0 votes scanned 2026-10-25 19:43:04.801001
View on AUR
Why flagged

Uploaded within the last 14 days with 2 or fewer community votes — little peer review so far.

Triggered rules

Low Few votes, recently uploaded zero_votes_recent

Uploaded within the last 14 days with 2 or fewer community votes — little peer review so far.

PKGBUILD

1# Maintainer: Inox contributors <https://github.com/Inox-desktop/inox>
2#
3# GENERATED FILE — the source of truth is packaging/aur/PKGBUILD.in in
4# https://github.com/Inox-desktop/inox. It is rendered by packaging/aur/publish.sh
5# and published by .github/workflows/release.yml after a GitHub Release is
6# created. Editing the published copy in the AUR repository by hand achieves
7# nothing: the next release overwrites it.
8#
9# Two AUR packages share this recipe (decision: docs/adr/0043):
10#
11# inox stable tags vX.Y.Z
12# inox-canary pre-releases vX.Y.Z-canary.N (also -alpha/-beta/-rc/-dev)
13#
14# AUR forbids hyphens in pkgver, so a pre-release tag is rendered with `_` where
15# the tag has `-` (0.1.1-canary.2 -> pkgver 0.1.1_canary.2). The tag itself is
16# still the upstream one, see the source= URL below.
17#
18# This package builds from the tagged source tree. It is deliberately NOT a
19# `-bin` package built from the release tarball: that tarball is linked against
20# the Ubuntu runner's glibc/Qt, and an Arch user needs a binary linked against
21# Arch's own system libraries.
22#
23# `check()` is load-bearing. inox-compositor has a `test-input` feature that
24# compiles a socket accepting injected keyboard and pointer events; a binary a
25# user runs must not carry it. `cargo build` below therefore uses the default
26# feature set, and check() runs the built compositor to prove it rejects the
27# option — the same assertion packaging/package.sh makes for the release tarball
28# (ADR 0042 §4). Compiling it out is not provable from the source tree alone.
29
30pkgname=inox-canary
31pkgver=0.1.1_canary.1
32pkgrel=1
33pkgdesc="Canary channel of the Inox Wayland desktop environment"
34arch=('x86_64')
35url="https://github.com/Inox-desktop/inox"
36license=('LGPL-3.0-only')
37depends=(
38 'gcc-libs'
39 'libdrm'
40 'libinput'
41 'libxkbcommon'
42 'mesa'
43 'pam'
44 'qt6-base'
45 'qt6-declarative'
46 'seatd'
47 'systemd-libs'
48 'wayland'
49 'xkeyboard-config'
50)
51makedepends=(
52 'clang'
53 'lld'
54 'rust'
55)
56provides=('inox')
57conflicts=('inox')
58optdepends=(
59 'greetd: fall back to greetd when the Inox login screen cannot start'
60 'xwayland-satellite: run X11 applications inside an Inox session'
61)
62# `lto` must stay off, and this is not a preference.
63#
64# makepkg's default OPTIONS include `lto`, which appends `-flto=auto` (LTOFLAGS)
65# to CFLAGS, CXXFLAGS *and* LDFLAGS. cxx-qt compiles the Rust<->C++ bridge with
66# that C++ compiler, so with LTO on those object files become GCC LTO bytecode:
67# `.gnu.lto_*` sections, `nm` reports "no symbols". Rust links the final binary
68# through rust-lld (qt-build-utils selects it), and rust-lld cannot read GCC's
69# LTO bytecode, so every `cxxbridge1$…` / `cxx_qt_init_*` definition in
70# libcxx-qt-lib-cxxqt-generated.a becomes an undefined symbol and the link fails
71# for inox-lock, inox-settings, inox-greet, inox-launcher and inox-qml-prototype.
72#
73# This is verified, not inferred: building the same tag with `-flto=auto` in
74# CFLAGS/CXXFLAGS/LDFLAGS reproduces the undefined-symbol link failure, and the
75# same build without it succeeds. Turning lto off for this package is the
76# supported path; an LTO-linking C++ toolchain that rust-lld understands does not
77# exist yet.
78options=('!lto')
79
80# The install hook only prints how to switch the boot chain; it enables nothing.
81install=inox.install
82source=("inox-canary-0.1.1_canary.1.tar.gz::https://github.com/Inox-desktop/inox/archive/refs/tags/v0.1.1-canary.1.tar.gz")
83sha256sums=('0a344061b71e576fa2af29dce7a24ca5146591f203e89d3aab0b4684568d1b99')
84
85# GitHub's tag archive extracts to <repository>-<tag without the leading v>.
86_srcdir_name='inox-0.1.1-canary.1'
87
88build() {
89 cd "$srcdir/$_srcdir_name"
90 # Default features, whole workspace: the same build the release tarball is made
91 # from (packaging/package.sh). Two build definitions would be two artifacts that
92 # can drift apart. `--locked` builds from the committed Cargo.lock, which is the
93 # project's compatibility record.
94 #
95 # Do not add `--all-features` here: it compiles inox-compositor/test-input,
96 # the input-injection socket, into the binary this package installs.
97 cargo build --release --locked --workspace
98}
99
100check() {
101 cd "$srcdir/$_srcdir_name"
102 local probe="$srcdir/test-input-probe.sock"
103 local log="$srcdir/test-input-probe.log"
104 local status=0
105 # The timeout is load-bearing: a compositor built WITH the feature accepts the
106 # option and starts an event loop that never returns. Without the timeout this
107 # check would hang the build instead of failing it.
108 timeout 30 ./target/release/inox-compositor --test-input "$probe" >"$log" 2>&1 || status=$?
109 if [ "$status" -eq 0 ]; then
110 error "inox-compositor accepted --test-input: this build carries the input-injection feature and must not be packaged"
111 return 1
112 fi
113 if [ "$status" -eq 124 ]; then
114 error "inox-compositor did not refuse --test-input within 30 s: it started instead"
115 return 1
116 fi
117 if ! grep -q 'test-input' "$log"; then
118 error "inox-compositor refused --test-input but did not say why; expected an error naming it"
119 cat "$log" >&2
120 return 1
121 fi
122 msg "inox-compositor rejects --test-input: this is a default-features build"
123}
124
125package() {
126 cd "$srcdir/$_srcdir_name"
127
128 # The 14 shipped binaries. inox-integration (test aggregator) and
129 # inox-qml-prototype (binding prototype) are built by --workspace but not
130 # installed: they are not part of a desktop.
131 local binary
132 local binaries=(
133 inox-auth
134 inox-host
135 inox-compositor
136 inox-greet
137 inox-session
138 inox-shell
139 inox-panel
140 inox-lock
141 inox-wallpaper
142 inox-notifications
143 inox-idle
144 inox-xwayland
145 inox-launcher
146 inox-settings
147 )
148 install -d "$pkgdir/usr/bin"
149 for binary in "${binaries[@]}"; do
150 install -m 0755 "target/release/$binary" "$pkgdir/usr/bin/$binary"
151 done
152
153 install -Dm 0644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
154
155 # Bundled wallpapers are runtime data: inox-wallpaper and inox-settings look
156 # them up under <datadir>/inox/wallpapers, so a package without them installs a
157 # desktop whose wallpaper chooser is empty.
158 install -d "$pkgdir/usr/share/inox/wallpapers"
159 install -m 0644 data/wallpapers/* "$pkgdir/usr/share/inox/wallpapers/"
160
161 # The login chain's PAM stacks, three files for three different jobs. Missing
162 # any of them turns a correct password into a session that ends immediately,
163 # which on the login screen looks exactly like a rejected password.
164 install -Dm 0644 packaging/pam.d/inox-auth "$pkgdir/etc/pam.d/inox-auth"
165 install -Dm 0644 packaging/pam.d/inox-auth-session "$pkgdir/etc/pam.d/inox-auth-session"
166 install -Dm 0644 packaging/pam.d/inox-greeter "$pkgdir/etc/pam.d/inox-greeter"
167
168 install -Dm 0644 packaging/systemd/inox-auth.service \
169 "$pkgdir/usr/lib/systemd/system/inox-auth.service"
170 install -Dm 0644 packaging/systemd/inox-greeter@.service \
171 "$pkgdir/usr/lib/systemd/system/inox-greeter@.service"
172 install -Dm 0644 packaging/systemd/inox-login-fallback.service \
173 "$pkgdir/usr/lib/systemd/system/inox-login-fallback.service"
174
175 # The greeter's system account, created by pacman's systemd-sysusers hook. It
176 # must stay identical to packaging/install.sh's useradd --system invocation: a
177 # different shell or home directory would make the two installation routes
178 # produce different accounts.
179 install -Dm 0644 packaging/sysusers/inox.conf \
180 "$pkgdir/usr/lib/sysusers.d/inox.conf"
181}
182

Scan history

Scanned at (UTC)SeverityRules
2026-10-25 19:43:04 Low 1

Report a package

Reports go to the AURWatch maintainer (one person) and are read by hand. No login required.

0 / 4000
Your suggestion