viewport-wpe
maintainer codebam
· 0 votes
· scanned 2026-08-18 03:38:23.746777
LOW
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: Sean Behan <codebam@riseup.net>
2
#
3
# The shell drawn by WPE WebKit, inside the compositor process.
4
#
5
# One of nine recipes under packaging/aur: three engines — see
6
# docs/shell-backends.md — each as this, a `-git` form following `main`, and a
7
# `-bin` form unpacking the release. Every one of them installs a binary called
8
# `viewport` and provides that name, so they conflict with each other: a machine
9
# takes one engine in one form.
10
#
11
# This is the only variant that has an engine inside the compositor, and the
12
# only one whose engine has to exist as a package: wpewebkit is in the Arch
13
# repositories with the WPE platform API enabled, so wpe-platform-2.0.pc is
14
# there and no WebKit is compiled here.
15
16
pkgname=viewport-wpe
17
pkgver=0.1.8
18
pkgrel=1
19
pkgdesc='Wayland compositor whose entire shell is a web page — the Smithay rewrite'
20
arch=('x86_64' 'aarch64')
21
url='https://github.com/codebam/viewport'
22
license=('GPL-3.0-or-later')
23
24
# The tag this package was cut from, and the whole of what makes it
25
# reproducible: a branch would move under it, and a PKGBUILD that follows a
26
# moving branch does not describe any particular package.
27
#
28
# A tag while there is one, a commit while there is not. Between releases this
29
# carries `_commit` and a `pkgver` of the git-describe form — the last release,
30
# how many commits past it, and which one — because naming a stale tag would be
31
# a lie about what was built. At a release the two say the same thing and the
32
# tag is the one anybody can check.
33
_tag=v0.1.8
34
35
depends=(
36
'wayland'
37
'libxkbcommon'
38
'pixman'
39
'libdrm'
40
'libinput'
41
'seatd'
42
'systemd-libs'
43
'mesa'
44
'libglvnd'
45
'vulkan-icd-loader'
46
'wpewebkit'
47
'glib2'
48
'json-glib'
49
'libxcb'
50
'xcb-util-wm'
51
'pipewire'
52
# WebKit guesses the type of a file:// page from the shared MIME database,
53
# because nothing else tells it. Without this every local page is treated as
54
# an empty document: the load reports started, committed and finished, not
55
# one script runs, and the desktop comes up with no bar and nothing laid out.
56
# The bundled shell is loaded from file://, so this is a hard dependency —
57
# and its absence looks like a compositor bug, not a missing package.
58
'shared-mime-info'
59
)
60
61
optdepends=(
62
'xorg-xwayland: X11 clients'
63
'xdg-desktop-portal-gtk: the portal interfaces the compositor does not answer itself'
64
# Vulkan is the renderer wherever a Vulkan device owns the display; without
65
# one the compositor draws with OpenGL instead, so these decide which of the
66
# two a machine gets rather than whether it starts at all.
67
'vulkan-radeon: AMD hardware'
68
'vulkan-intel: Intel hardware'
69
'nvidia-utils: NVIDIA hardware, and hardware video decode with it'
70
# In a virtual machine: Venus passes Vulkan through to the host's GPU, and
71
# needs the host to offer it — QEMU wants
72
# `-device virtio-gpu-gl-pci,venus=on,blob=on,hostmem=2G`. Without it the
73
# only device that loads is lavapipe, which owns no DRM node, cannot drive a
74
# display, and turns every shell-frame copy into a copy on the CPU.
75
'vulkan-virtio: a virtual machine with 3D acceleration'
76
'vulkan-swrast: software Vulkan, for tests rather than a session'
77
# The compositor imports the multi-planar YUV a hardware decoder produces
78
# (NV12, P010 and the rest), so a player can hand over the decoder's own
79
# buffer with nothing converted in between. That only happens if the player
80
# can decode in hardware in the first place, which is what these provide.
81
# Without one, video still plays — the player converts each frame itself,
82
# which is the cost the import path exists to avoid.
83
'libva-mesa-driver: hardware video decode on AMD and Intel, for zero-copy video'
84
# The bar's icons are Material Design glyphs from a Nerd Font patch, and the
85
# family names in data/shell/shell.css are the ones fontconfig reports:
86
# "FiraCode Nerd Font" first, "Symbols Nerd Font" as the fallback that
87
# carries the glyphs without the monospace face. With neither installed the
88
# bar still lays out and every icon in it is a replacement box.
89
'ttf-firacode-nerd: the icons in the bar, and the font the shell names first'
90
'ttf-nerd-fonts-symbols: the icons in the bar, without the patched monospace family'
91
)
92
93
makedepends=(
94
# cargo comes with it: Arch has no separate cargo package, and naming
95
# one fails dependency resolution before a line is compiled.
96
'rust'
97
'git'
98
'pkgconf'
99
'clang'
100
'vulkan-headers'
101
'wayland-protocols'
102
)
103
104
provides=("viewport=$pkgver")
105
conflicts=('viewport' 'viewport-webkitgtk' 'viewport-chromium')
106
options=('!lto')
107
108
source=("git+https://github.com/codebam/viewport.git#tag=$_tag")
109
sha256sums=('SKIP')
110
111
prepare() {
112
cd "$srcdir/viewport"
113
# A git dependency (the smithay fork, for the tearing-control patch) has to
114
# be fetched here rather than during build(), so that build() is the only
115
# step that has to work offline.
116
export RUSTUP_TOOLCHAIN=stable
117
cargo fetch --locked --target "$(rustc -vV | sed -n 's/host: //p')"
118
}
119
120
build() {
121
cd "$srcdir/viewport"
122
export RUSTUP_TOOLCHAIN=stable
123
export CARGO_TARGET_DIR=target
124
# --features wpe is not the default, and without it there is no shell at all:
125
# grey where the wallpaper and the bar should be, and nothing in the log to
126
# say why.
127
cargo build --frozen --release -p viewport --features wpe
128
}
129
130
package() {
131
cd "$srcdir/viewport"
132
133
install -Dm755 target/release/viewport "$pkgdir/usr/bin/viewport"
134
135
# The shell itself, and the page it falls back to. Without them an installed
136
# compositor has nothing to load: the default URL resolves beside the binary,
137
# and a session started from a login shell has no source tree under it.
138
install -dm755 "$pkgdir/usr/share/viewport"
139
cp -r data/shell "$pkgdir/usr/share/viewport/shell"
140
install -Dm644 data/fallback.html "$pkgdir/usr/share/viewport/fallback.html"
141
install -Dm644 data/config.example.json \
142
"$pkgdir/usr/share/viewport/config.example.json"
143
144
# How xdg-desktop-portal learns this backend exists. Without the file the
145
# frontend does not know the name "viewport" refers to anything, so a config
146
# naming it matches nothing and the request goes elsewhere.
147
install -Dm644 data/portal-share/xdg-desktop-portal/portals/viewport.portal \
148
"$pkgdir/usr/share/xdg-desktop-portal/portals/viewport.portal"
149
150
# The session target the compositor starts on launch. Without it
151
# graphical-session.target stays inactive, and xdg-desktop-portal — which
152
# holds Requisite=graphical-session.target — refuses to start at all, taking
153
# the Settings interface and every application's dark theme with it.
154
install -Dm644 data/systemd/user/viewport-session.target \
155
"$pkgdir/usr/lib/systemd/user/viewport-session.target"
156
157
install -Dm644 docs/viewport.1 "$pkgdir/usr/share/man/man1/viewport.1"
158
159
install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" 2>/dev/null || true
160
161
install -Dm644 /dev/stdin "$pkgdir/usr/share/wayland-sessions/viewport.desktop" <<'EOF'
162
[Desktop Entry]
163
Name=Viewport
164
Comment=Wayland compositor with a WPE WebKit shell
165
Exec=viewport
166
Type=Application
167
EOF
168
}
169
Changes since previous scan
--- PKGBUILD @ 2026-08-17 00:18+++ PKGBUILD @ 2026-08-18 03:38@@ -14,7 +14,7 @@ # there and no WebKit is compiled here. pkgname=viewport-wpe-pkgver=0.1.7+pkgver=0.1.8 pkgrel=1 pkgdesc='Wayland compositor whose entire shell is a web page — the Smithay rewrite' arch=('x86_64' 'aarch64')@@ -30,7 +30,7 @@ # how many commits past it, and which one — because naming a stale tag would be # a lie about what was built. At a release the two say the same thing and the # tag is the one anybody can check.-_tag=v0.1.7+_tag=v0.1.8 depends=( 'wayland'Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-08-18 03:38:23 | LOW | 1 |
| 2026-08-17 00:18:29 | CLEAN | 2 |
| 2026-08-16 01:31:50 | LOW | 1 |