hotaru

LOW
maintainer ushineko 0 votes scanned 2026-09-22 01:36:45.870812
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: NJ Verenini <nverenin@gmail.com>
2#
3# The AUR package, kept here so it is versioned with what it packages. The
4# shape and the dependency argument are in docs/packaging.md; spec 007 is why
5# each line below is the line it is.
6#
7# One PKGBUILD, two packages: `hotaru` is the CLI and the service, pure Go and
8# installable on a headless box; `hotaru-gui` is the Fyne window, which needs
9# the graphics stack. The split falls out of the architecture -- the window is
10# a client -- and it keeps OpenGL off machines that only want lighting.
11
12pkgbase=hotaru
13pkgname=(hotaru hotaru-gui)
14pkgver=0.1.1
15pkgrel=1
16pkgdesc='RGB lighting and AIO cooler control for Linux'
17arch=('x86_64')
18url='https://github.com/ushineko/hotaru'
19license=('MIT')
20makedepends=('go' 'libglvnd' 'libx11' 'libxcursor' 'libxrandr' 'libxinerama'
21 'libxi' 'libxxf86vm' 'libxkbcommon' 'wayland')
22
23# The base's dependencies, which each package narrows. namcap wants a split
24# PKGBUILD to declare at the top what its packages depend on, and it is right
25# to: this is the answer to "what does installing hotaru pull in", and reading
26# it should not mean reading two shell functions.
27depends=('glibc' 'openrgb')
28source=("$pkgbase-$pkgver.tar.gz::$url/archive/refs/tags/v$pkgver.tar.gz")
29sha256sums=('4316768b37b57410611b6c890344ed6383644aceaf528ad643b1498e086342b9')
30
31_module='github.com/ushineko/hotaru'
32
33prepare() {
34 cd "$pkgbase-$pkgver"
35 go mod download
36}
37
38build() {
39 cd "$pkgbase-$pkgver"
40
41 export CGO_CPPFLAGS="${CPPFLAGS}" CGO_CFLAGS="${CFLAGS}"
42 export CGO_CXXFLAGS="${CXXFLAGS}" CGO_LDFLAGS="${LDFLAGS}"
43 export GOFLAGS='-buildmode=pie -trimpath -mod=readonly -modcacherw'
44
45 local _ldflags="-linkmode=external -X ${_module}/internal/version.Version=${pkgver}"
46
47 go build -ldflags "$_ldflags" -o build/hotaru ./cmd/hotaru
48
49 # The window, built without Fyne's per-refresh thread check. It calls
50 # runtime.Stack on every canvas refresh to find out which goroutine it is
51 # on, which a CPU profile put at 82% of samples during a window drag. The
52 # tag is safe here because internal/gui/thread_test.go fails the build if
53 # anything inside a Perform callback touches the interface unwrapped, and
54 # check() runs it.
55 go build -tags migrated_fynedo -ldflags "$_ldflags" -o build/hotaru-gui ./cmd/hotaru-gui
56}
57
58check() {
59 cd "$pkgbase-$pkgver"
60 # No hardware, no OpenRGB, no display and no root. That is a packaging
61 # property as much as a testing one.
62 go test ./...
63}
64
65package_hotaru() {
66 # namcap reports openrgb as possibly unneeded, because nothing in the
67 # binary links against it. Nothing would: it is a daemon hotaru speaks to
68 # over a socket, and it is a hard dependency on purpose -- see
69 # docs/packaging.md, "The rule that decides everything else".
70 optdepends=('nvidia-utils: GPU temperature on the dashboard'
71 'hotaru-gui: the desktop window')
72
73 cd "$pkgbase-$pkgver"
74
75 install -Dm755 build/hotaru "$pkgdir/usr/bin/hotaru"
76
77 # Not enabled, per Arch policy. `systemctl --user enable --now hotaru`, and
78 # `loginctl enable-linger $USER` for lighting at boot rather than at login;
79 # `hotaru light health` names whichever one is missing.
80 install -Dm644 packaging/hotaru.service \
81 "$pkgdir/usr/lib/systemd/user/hotaru.service"
82
83 # Without this the service sees the cooler and cannot open it. See
84 # packaging/60-hotaru.rules.
85 install -Dm644 packaging/60-hotaru.rules \
86 "$pkgdir/usr/lib/udev/rules.d/60-hotaru.rules"
87
88 # Examples, not configuration: hotaru ships no rules at all and drives every
89 # device OpenRGB reports until it is told otherwise.
90 install -Dm644 examples/hotaru.yml \
91 "$pkgdir/usr/share/doc/$pkgname/hotaru.yml.example"
92 install -Dm644 packaging/openrgb-enumeration.conf.example \
93 "$pkgdir/usr/share/doc/$pkgname/openrgb-enumeration.conf.example"
94
95 install -Dm644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md"
96 install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
97}
98
99package_hotaru-gui() {
100 pkgdesc='RGB lighting and AIO cooler control for Linux (desktop window)'
101 # The graphics stack is dlopened by GLFW rather than linked, so namcap
102 # reports most of this as possibly unneeded. It is needed: a window that
103 # cannot open libGL at runtime does not start. hicolor-icon-theme owns the
104 # directory this package's icon goes in.
105 depends=('hotaru' 'glibc' 'hicolor-icon-theme' 'libglvnd' 'libx11'
106 'libxcursor' 'libxrandr' 'libxinerama' 'libxi' 'libxxf86vm'
107 'libxkbcommon' 'wayland')
108
109 cd "$pkgbase-$pkgver"
110
111 install -Dm755 build/hotaru-gui "$pkgdir/usr/bin/hotaru-gui"
112
113 # The entry is named for the Fyne app ID and carries StartupWMClass,
114 # because KDE on Wayland resolves the titlebar icon by matching the app_id
115 # to a desktop file of that name and the task manager matches the class.
116 # Two out of three silently yields a generic icon.
117 install -Dm644 packaging/io.github.ushineko.hotaru.desktop \
118 "$pkgdir/usr/share/applications/io.github.ushineko.hotaru.desktop"
119 install -Dm644 packaging/hotaru.svg \
120 "$pkgdir/usr/share/icons/hicolor/scalable/apps/hotaru.svg"
121
122 install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
123}
124

Scan history

Scanned at (UTC)SeverityRules
2026-09-22 01:36:45 Low 1
2026-09-22 00:15:14 Clean 2
2026-09-21 23:36:21 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