summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore8
-rw-r--r--0001-Update-directories-fig-searches.patch63
-rw-r--r--PKGBUILD55
-rw-r--r--config.yaml24
-rw-r--r--walrss.conf2
-rw-r--r--walrss.service32
-rw-r--r--walrss.sysusers1
7 files changed, 185 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..011f2fb
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,8 @@
+*
+!.gitignore
+!PKGBUILD
+!config.yaml
+!walrss.sysusers
+!walrss.service
+!walrss.conf
+!*.patch \ No newline at end of file
diff --git a/0001-Update-directories-fig-searches.patch b/0001-Update-directories-fig-searches.patch
new file mode 100644
index 0000000..b45990e
--- /dev/null
+++ b/0001-Update-directories-fig-searches.patch
@@ -0,0 +1,63 @@
+From 0d47544d12656be9eb853f8323f0da19eec2316c Mon Sep 17 00:00:00 2001
+From: Leonardo Bishop <me@leonardobishop.net>
+Date: Thu, 7 Aug 2025 12:00:20 +0100
+Subject: [PATCH] Update directories fig searches
+
+---
+ walrss/internal/state/state.go | 23 ++++++++++-------------
+ 1 file changed, 10 insertions(+), 13 deletions(-)
+
+diff --git a/walrss/internal/state/state.go b/walrss/internal/state/state.go
+index 522e1bf..1fe33ee 100644
+--- a/walrss/internal/state/state.go
++++ b/walrss/internal/state/state.go
+@@ -3,12 +3,13 @@ package state
+ import (
+ "errors"
+ "fmt"
++ "os"
++ "strings"
++
+ "github.com/kkyr/fig"
+ "github.com/rs/zerolog"
+ "github.com/rs/zerolog/log"
+ "github.com/uptrace/bun"
+- "os"
+- "strings"
+ )
+
+ type State struct {
+@@ -48,23 +49,19 @@ type Config struct {
+ Debug bool `fig:"debug"`
+ }
+
++const walrssConfigDirEnv = "WALRSS_CONFIG_DIR"
+ const configFilename = "config.yaml"
+
+ func LoadConfig() (*Config, error) {
+- // If the file doesn't exist, Fig will throw a hissy fit, so we should create a blank one if it doesn't exist
+- if _, err := os.Stat(configFilename); err != nil {
+- if errors.Is(err, os.ErrNotExist) {
+- // If the file doesn't have contents, Fig will throw an EOF, despite `touch config.yaml` working fine. idk lol
+- if err := os.WriteFile(configFilename, []byte("{}"), 0777); err != nil {
+- return nil, err
+- }
+- } else {
+- return nil, err
+- }
++ var configDirs []string
++
++ if config := os.Getenv(walrssConfigDirEnv); config != "" {
++ configDirs = append(configDirs, config)
+ }
++ configDirs = append(configDirs, ".")
+
+ cfg := new(Config)
+- if err := fig.Load(cfg); err != nil {
++ if err := fig.Load(cfg, fig.Dirs(configDirs...), fig.File(configFilename)); err != nil {
+ return nil, err
+ }
+
+--
+2.50.1
+
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 0000000..ee041f4
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,55 @@
+# Maintainer: Leonardo Bishop <me@leonardobishop.net>
+_pkgname=walrss
+pkgname="${_pkgname}-git"
+pkgdesc="Email-based RSS digest generator"
+pkgver=0.4.4.r1.g1c542bd
+pkgrel=1
+makedepends=('go' 'make' 'git')
+arch=('x86_64')
+url="https://github.com/codemicro/walrss"
+license=('AGPL-3.0-only')
+conflicts=("${_pkgname}")
+provides=("${_pkgname}=${pkgver}")
+source=(walrss::git+https://github.com/codemicro/walrss
+ walrss.service
+ walrss.sysusers
+ walrss.conf
+ 0001-Update-directories-fig-searches.patch
+ config.yaml)
+sha256sums=('SKIP'
+ '8b87e2f23d06e0a81fb747dccbd5d11b971ac298803d3aadfdf2623b4efc269e'
+ '662f0df2e8025034d395e15726883bb009af89ec02aa3a198fd40d792a5c4ace'
+ 'd3fdc459dd3c712da5ec62213ef15d8d5d7ad2335bffbb277fc8eac66fd2cd79'
+ '9943f9c4eafa25647f38c20ae5e929f1bbc0d6771cb7f24f135e34bf4fdb52e0'
+ '2eeefbed0bb7a4936c020e85ad3fed21cf598fab14900c8149ca9bb87f4516b3')
+
+pkgver() {
+ cd "walrss"
+ git describe --long --tags --abbrev=7 | sed 's/^v//;s/\([^-]*-g\)/r\1/;s/-/./g'
+}
+
+prepare() {
+ export GOPATH="$srcdir/build"
+
+ cd "walrss"
+ git apply "$srcdir/0001-Update-directories-fig-searches.patch"
+ go mod download
+ go install github.com/valyala/quicktemplate/qtc@latest
+}
+
+build() {
+ export GOPATH="$srcdir/build"
+ export PATH="$PATH:$srcdir/build/bin"
+
+ cd "walrss"
+ make
+}
+
+package() {
+ install -Dm755 "$srcdir/walrss/bin/walrss" "$pkgdir/usr/bin/walrss"
+ install -Dm644 "$srcdir/walrss.service" "$pkgdir/usr/lib/systemd/system/walrss.service"
+ install -Dm644 "$srcdir/walrss.sysusers" "$pkgdir/usr/lib/sysusers.d/walrss.conf"
+ install -Dm644 "$srcdir/walrss.conf" "$pkgdir/etc/conf.d/walrss"
+ install -Dm755 -d "${pkgdir}/etc/walrss"
+ install -Dm644 "$srcdir/config.yaml" "$pkgdir/etc/walrss/config.yaml"
+}
diff --git a/config.yaml b/config.yaml
new file mode 100644
index 0000000..42ab435
--- /dev/null
+++ b/config.yaml
@@ -0,0 +1,24 @@
+server:
+ host: 127.0.0.1
+ port: 8080
+ # externalURL is the URL that your instance of Walrss is accessible at
+ # This is a required field
+ externalURL: "http://127.0.0.1:8080"
+email:
+ # These are required fields
+ host: "smtp.sendgrid.net"
+ port: 587
+ from: "Walrss <walrss@yourdomain.com>"
+ # These fields are not required
+ tls: "" # valid values are: starttls, tls, no - default: starttls
+ password: "yourapikey"
+ username: "apikey"
+platform:
+ disableRegistration: false
+ disableSecureCookies: false
+ contactInformation: "https://example.com" # optional. will be included in the user agent if set.
+oidc:
+ enable: false
+ clientID: "yourclientid"
+ clientSecret: "yourclientsecret"
+ issuer: "https://sso.example.com/"
diff --git a/walrss.conf b/walrss.conf
new file mode 100644
index 0000000..63fb5d3
--- /dev/null
+++ b/walrss.conf
@@ -0,0 +1,2 @@
+WALRSS_DIR="/var/lib/walrss"
+WALRSS_CONFIG_DIR="/etc/walrss"
diff --git a/walrss.service b/walrss.service
new file mode 100644
index 0000000..ae8f2d9
--- /dev/null
+++ b/walrss.service
@@ -0,0 +1,32 @@
+[Unit]
+Description=Email-based RSS digest generator
+
+[Service]
+User=walrss
+Restart=always
+ExecStart=/usr/bin/walrss
+StateDirectory=walrss
+EnvironmentFile=/etc/conf.d/walrss
+
+CapabilityBoundingSet=CAP_NET_BIND_SERVICE
+AmbientCapabilities=CAP_NET_BIND_SERVICE
+NoNewPrivileges=true
+SystemCallFilter=@system-service
+SystemCallErrorNumber=EPERM
+
+ProtectSystem=strict
+ProtectHome=true
+PrivateTmp=true
+PrivateDevices=true
+ExecPaths=/usr/bin/walrss
+
+ProtectKernelTunables=true
+ProtectKernelModules=true
+ProtectKernelLogs=true
+ProtectControlGroups=true
+ProtectClock=true
+RestrictRealtime=true
+RestrictSUIDSGID=true
+
+[Install]
+WantedBy=multi-user.target
diff --git a/walrss.sysusers b/walrss.sysusers
new file mode 100644
index 0000000..03c2112
--- /dev/null
+++ b/walrss.sysusers
@@ -0,0 +1 @@
+u walrss - "Email-based RSS digest generator" /var/lib/walrss