wispr-flow-hyprland
maintainer kukapu
· 0 votes
· scanned 2026-08-18 00:03:42.021799
LOW
View on AUR ↗
Why flagged
The package builds from verifiable sources including GitHub and the official Electron releases; the download from dl.wisprflow.com is a signed client artifact, checksummed and used as data, with no evidence of code execution or supply-chain redirection.
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.
LOW
AI review downgraded a static finding
llm_review
The static rules flagged this MEDIUM, but an AI model (qwen/qwen3-235b-a22b-2507) reviewed the full PKGBUILD and judged it LOW (confidence 95%): The package builds from verifiable sources including GitHub and the official Electron releases; the download from dl.wisprflow.com is a signed client artifact, checksummed and used as data, with no evidence of code execution or supply-chain redirection.
1 higher static finding superseded - not the current verdict (shown for transparency)
MEDIUM
source=() URL on a non-standard host
source_untrusted_domain
One or more source=() URLs point to a host outside the trusted allowlist (github.com, gitlab.com, codeberg.org, pypi.org, …).
-
PKGBUILD:69
"${_nupkg}::https://dl.wisprflow.com/wispr-flow/win32/x64/${_nupkg}"
PKGBUILD
1 offending line(s) highlighted
1
# Maintainer: Albert Alvarez Estelles <114157589+kukapu@users.noreply.github.com>
2
3
pkgname=wispr-flow-hyprland
4
pkgver=1.6.447
5
pkgrel=1
6
pkgdesc='Unofficial Wispr Flow desktop client adapted for Arch Linux and Hyprland'
7
arch=('x86_64')
8
url='https://github.com/kukapu/whsprflow-arch'
9
license=('0BSD AND BSD-3-Clause AND LicenseRef-Proprietary AND MIT AND Unlicense')
10
depends=(
11
'alsa-lib'
12
'at-spi2-core'
13
'bash'
14
'cairo'
15
'coreutils'
16
'dbus'
17
'expat'
18
'gawk'
19
'glib2'
20
'glibc'
21
'grep'
22
'gtk3'
23
'hicolor-icon-theme'
24
'hyprland'
25
'jq'
26
'less'
27
'libcups'
28
'libgcc'
29
'libpulse'
30
'libsecret'
31
'libstdc++'
32
'libx11'
33
'libxcb'
34
'libxcomposite'
35
'libxdamage'
36
'libxext'
37
'libxfixes'
38
'libxkbcommon'
39
'libxrandr'
40
'mesa'
41
'nodejs'
42
'nspr'
43
'nss'
44
'pango'
45
'systemd'
46
'systemd-libs'
47
'util-linux'
48
'wl-clipboard'
49
'xdg-utils'
50
'xorg-xwayland'
51
)
52
makedepends=('asar' 'perl' 'python' 'unzip')
53
optdepends=('uwsm: managed Hyprland autostart with wispr-flow --autostart')
54
provides=("wispr-flow=${pkgver}")
55
conflicts=('wispr-flow')
56
options=('!strip' '!debug')
57
install=wispr-flow-hyprland.install
58
59
_support_commit='091bcb9dcac2221be3d007d56eb98704e2407d61'
60
_port_commit='6fb43cd809f8319a9e05da4b4e7a2d3264c126ab'
61
_electron_version='42.3.0'
62
_nupkg="WisprFlow-${pkgver}-full.nupkg"
63
_electron_zip="electron-v${_electron_version}-linux-x64.zip"
64
_sqlite="node_sqlite3-${CARCH}.node"
65
66
source=(
67
"${pkgname}-support-${_support_commit}.tar.gz::https://codeload.github.com/kukapu/whsprflow-arch/tar.gz/${_support_commit}"
68
"${pkgname}-port-${_port_commit}.tar.gz::https://codeload.github.com/wispr-flow-linux/wispr-flow-linux/tar.gz/${_port_commit}"
69
"${_nupkg}::https://dl.wisprflow.com/wispr-flow/win32/x64/${_nupkg}"
70
"${_electron_zip}::https://github.com/electron/electron/releases/download/v${_electron_version}/${_electron_zip}"
71
"${_sqlite}::https://github.com/wispr-flow-linux/native-modules/releases/download/native-v1/${_sqlite}"
72
'wispr-flow.desktop'
73
'70-wispr-flow-input.rules'
74
)
75
noextract=("${_nupkg}" "${_electron_zip}")
76
sha256sums=(
77
'a26c0b35682176888dbd9229b997e7aa69f05c7301d167612bd4a1d777714884'
78
'365c68a8b3915a643a51634c298ac178cd0e441bd112707878f318cdef8dcac2'
79
'c5a6175c74028c30b11c9a96a295df1b47780929ceaf3753a96ffa855b591f03'
80
'487a667ca6a734b958c16cff1df74d9d44d2c18a6cccdb4dd51f6301a356c420'
81
'c9bd0419f77efb3b5d3a691fda04e265f740ad8dc195f0b56003cdeac92e9a34'
82
'3b65d10698a9c944c5494cfd9a5fa3f04dd7b5a02f8fce0ace9333b6f1646ba5'
83
'3d7d9cab9b2af22cfd60b0dd965ff1b0f6e315e03c203add9f9646ae320bb97d'
84
)
85
86
build() {
87
local support_dir="$srcdir/whsprflow-arch-${_support_commit}"
88
local port_dir="$srcdir/wispr-flow-linux-${_port_commit}"
89
90
rm -rf -- "$srcdir/runtime"
91
"$support_dir/scripts/assemble-app.sh" \
92
--version "$pkgver" \
93
--nupkg "$srcdir/${_nupkg}" \
94
--electron-zip "$srcdir/${_electron_zip}" \
95
--sqlite "$srcdir/${_sqlite}" \
96
--helper "$support_dir/assets/wispr-flow-linux-helper-${CARCH}" \
97
--port-dir "$port_dir" \
98
--output-dir "$srcdir/runtime" \
99
--asar-bin /usr/bin/asar
100
}
101
102
check() {
103
local support_dir="$srcdir/whsprflow-arch-${_support_commit}"
104
local app_asar="$srcdir/runtime/resources/app.asar"
105
local sqlite="$srcdir/runtime/resources/app.asar.unpacked/.webpack/main/native_modules/build/Release/node_sqlite3.node"
106
local helper="$srcdir/runtime/resources/Release/wispr-flow-linux-helper"
107
local check_app="$srcdir/check-app"
108
local asar_files="$srcdir/asar-files.txt"
109
local smoke_root="$srcdir/wrapper-smoke"
110
local smoke_output
111
112
[[ $(< "$srcdir/runtime/app-version") == "$pkgver" ]]
113
printf '%s %s\n' \
114
'5f069506ccf51964f05ba6b06b7a1bfbb42cd2a5d64437c965abba628c4b45b0' \
115
"$helper" | sha256sum -c -
116
printf '%s %s\n' \
117
'c9bd0419f77efb3b5d3a691fda04e265f740ad8dc195f0b56003cdeac92e9a34' \
118
"$sqlite" | sha256sum -c -
119
120
/usr/bin/asar list "$app_asar" > "$asar_files"
121
! grep -qE 'crypt32-|[.]orig$' "$asar_files"
122
rm -rf -- "$check_app"
123
/usr/bin/asar extract "$app_asar" "$check_app"
124
[[ $(node -e 'process.stdout.write(require(process.argv[1]).version)' \
125
"$check_app/package.json") == "$pkgver" ]]
126
local main_bundle="$check_app/.webpack/main/index.js"
127
local marker
128
for marker in \
129
WISPR_LINUX_HIDE_STATUS_WINDOW_SHOW \
130
WISPR_LINUX_HIDE_STATUS_WINDOW_DICTATION \
131
WISPR_LINUX_LOCAL_START_SOUND \
132
WISPR_LINUX_LOCAL_STOP_SOUND \
133
WISPR_LINUX_COMPACT_STATUS_WINDOW \
134
WISPR_LINUX_TRANSIENT_STATUS_HIDE
135
do
136
grep -qF "$marker" "$main_bundle"
137
done
138
139
rm -rf -- "$smoke_root"
140
mkdir -p "$smoke_root/usr/lib" "$srcdir/check-home" "$srcdir/check-config"
141
ln -s "$srcdir/runtime" "$smoke_root/usr/lib/wispr-flow"
142
smoke_output="$(
143
HOME="$srcdir/check-home" \
144
XDG_CONFIG_HOME="$srcdir/check-config" \
145
WISPR_FLOW_INSTALL_ROOT="$smoke_root" \
146
"$support_dir/bin/wispr-flow" --status
147
)"
148
grep -qF 'Electron principal: 0' <<< "$smoke_output"
149
grep -qF 'Helper: 0' <<< "$smoke_output"
150
}
151
152
package() {
153
local support_dir="$srcdir/whsprflow-arch-${_support_commit}"
154
local port_dir="$srcdir/wispr-flow-linux-${_port_commit}"
155
local app_dir="$pkgdir/opt/wispr-flow-hyprland/usr/lib/wispr-flow"
156
local license_dir="$pkgdir/usr/share/licenses/$pkgname"
157
158
install -d "$pkgdir/opt/wispr-flow-hyprland/usr/lib"
159
cp -a "$srcdir/runtime" "$app_dir"
160
chmod 4755 "$app_dir/chrome-sandbox"
161
162
install -Dm755 "$support_dir/bin/wispr-flow" \
163
"$support_dir/bin/wispr-flow-configure" -t "$pkgdir/usr/bin"
164
install -Dm644 "$srcdir/wispr-flow.desktop" \
165
"$pkgdir/usr/share/applications/wispr-flow.desktop"
166
install -Dm644 "$srcdir/70-wispr-flow-input.rules" \
167
"$pkgdir/usr/lib/udev/rules.d/70-wispr-flow-input.rules"
168
install -Dm644 "$app_dir/resources/assets/logos/flow-symbol.svg" \
169
"$pkgdir/usr/share/icons/hicolor/scalable/apps/wispr-flow.svg"
170
171
install -Dm644 "$support_dir/LICENSE" "$license_dir/SUPPORT-0BSD"
172
install -Dm644 "$support_dir/assets/UNLICENSE" "$license_dir/HELPER-UNLICENSE"
173
install -Dm644 "$port_dir/UNLICENSE" "$license_dir/PORT-UNLICENSE"
174
install -Dm644 "$app_dir/LICENSE" "$license_dir/ELECTRON-MIT"
175
install -Dm644 "$app_dir/LICENSES.chromium.html" \
176
"$license_dir/ELECTRON-THIRD-PARTY.html"
177
cat > "$license_dir/WISPR-FLOW-PROPRIETARY-NOTICE" <<'EOF'
178
The Wispr Flow client is proprietary software and remains subject to Wispr's
179
terms and policies. This community package and its support code grant no
180
license to the client. See https://wisprflow.ai/terms-of-service/ before use.
181
EOF
182
}
183
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-08-18 00:03:42 | LOW | 3 |
| 2026-08-17 00:18:29 | LOW | 3 |
| 2026-08-16 00:03:42 | LOW | 3 |
| 2026-08-15 13:30:33 | MEDIUM | 2 |
| 2026-08-15 00:26:13 | MEDIUM | 3 |
| 2026-08-14 00:03:41 | MEDIUM | 3 |
| 2026-08-13 00:17:07 | MEDIUM | 3 |
| 2026-08-12 00:27:08 | MEDIUM | 3 |
| 2026-08-11 21:26:06 | MEDIUM | 3 |
| 2026-08-11 21:21:47 | MEDIUM | 2 |