refactor: restructure to standard Go project layout (cmd/ + internal/)

- Move entry point to cmd/streamdeck-lets-go/
- Split package main into internal packages:
  - internal/deck: hardware control (Deck, events, brightness)
  - internal/render: key rendering, icons, fonts, PageManager
  - internal/web: HTTP API + embedded SPA
  - internal/daemon: event loop, autoswitch, screensaver, actions
- Add ConfigDir() to internal/config
- Export cross-package API (Deck, PageManager, WebServer, etc.)
- Move dist/arch/ → packaging/ with updated PKGBUILD/.SRCINFO
- Add Makefile (build, test, vet, fmt, install)
- Update README with new build commands and project structure
- Delete unused media.go stub
This commit is contained in:
Maksim Totmin
2026-08-26 10:35:20 +07:00
parent 598bbe9ff1
commit 41856e6aaa
45 changed files with 2506 additions and 2598 deletions
+23
View File
@@ -0,0 +1,23 @@
pkgbase = streamdeck-lets-go-git
pkgdesc = Lightweight daemon for controlling Elgato Stream Deck devices with a built-in web UI
pkgver = r0.unknown
pkgrel = 1
url = https://github.com/totmin/streamdeck-lets-go
arch = x86_64
arch = aarch64
license = MIT
makedepends = go>=1.26
makedepends = git
depends = libusb
optdepends = librsvg: SVG icon rendering
optdepends = fontconfig: system font detection
provides = streamdeck-lets-go
conflicts = streamdeck-lets-go
source = streamdeck-lets-go-git::git+https://github.com/totmin/streamdeck-lets-go.git
source = packaging/streamdeck-lets-go.service
source = packaging/90-streamdeck.rules
b2sums = SKIP
b2sums = SKIP
b2sums = SKIP
pkgname = streamdeck-lets-go-git
+7
View File
@@ -0,0 +1,7 @@
# Elgato Stream Deck — allow access for locally logged-in users
# Vendor 0fd9
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0060", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0063", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="006c", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="006d", TAG+="uaccess"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0080", TAG+="uaccess"
+48
View File
@@ -0,0 +1,48 @@
# Maintainer: totmin <totmin@users.noreply.github.com>
pkgname=streamdeck-lets-go-git
_giturl=https://github.com/totmin/streamdeck-lets-go.git
pkgver=0.1.0
pkgrel=1
pkgdesc="Lightweight daemon for controlling Elgato Stream Deck devices with a built-in web UI"
arch=('x86_64' 'aarch64')
url="https://github.com/totmin/streamdeck-lets-go"
license=('MIT')
depends=('libusb')
optdepends=('librsvg: SVG icon rendering'
'fontconfig: system font detection')
makedepends=('go>=1.26' 'git')
provides=('streamdeck-lets-go')
conflicts=('streamdeck-lets-go')
source=("${pkgname}::git+${_giturl}"
"packaging/streamdeck-lets-go.service"
"packaging/90-streamdeck.rules")
b2sums=('SKIP'
'SKIP'
'SKIP')
pkgver() {
cd "${srcdir}/${pkgname}"
git describe --always --tags 2>/dev/null || echo "r0.$(git rev-parse --short HEAD)"
}
build() {
cd "${srcdir}/${pkgname}"
export CGO_ENABLED=1
go build \
-ldflags "-s -w" \
-o streamdeck-lets-go ./cmd/streamdeck-lets-go
}
package() {
cd "${srcdir}/${pkgname}"
install -Dm755 streamdeck-lets-go "${pkgdir}/usr/bin/streamdeck-lets-go"
install -Dm644 "${srcdir}/packaging/streamdeck-lets-go.service" \
"${pkgdir}/usr/lib/systemd/user/streamdeck-lets-go.service"
install -Dm644 "${srcdir}/packaging/90-streamdeck.rules" \
"${pkgdir}/usr/lib/udev/rules.d/90-streamdeck.rules"
}
+14
View File
@@ -0,0 +1,14 @@
[Unit]
Description=Stream Deck Lets Go daemon
Documentation=https://github.com/Wakatron/streamdeck-lets-go
After=graphical-session.target
Wants=graphical-session.target
[Service]
Type=simple
ExecStart=/usr/bin/streamdeck-lets-go daemon
Restart=on-failure
RestartSec=3
[Install]
WantedBy=default.target