inox-canary
LOW
maintainer Rownix
0 votes
scanned 2026-10-25 19:43:04.801001
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
30
pkgname=inox-canary
31
pkgver=0.1.1_canary.1
32
pkgrel=1
33
pkgdesc="Canary channel of the Inox Wayland desktop environment"
34
arch=('x86_64')
35
url="https://github.com/Inox-desktop/inox"
36
license=('LGPL-3.0-only')
37
depends=(
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
)
51
makedepends=(
52
'clang'
53
'lld'
54
'rust'
55
)
56
provides=('inox')
57
conflicts=('inox')
58
optdepends=(
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.
78
options=('!lto')
79
80
# The install hook only prints how to switch the boot chain; it enables nothing.
81
install=inox.install
82
source=("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")
83
sha256sums=('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
88
build() {
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
100
check() {
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
125
package() {
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) | Severity | Rules |
|---|---|---|
| 2026-10-25 19:43:04 | Low | 1 |