From 658fbb94d5f0e9c10e8753d227bb16c287065ee1 Mon Sep 17 00:00:00 2001 From: Leonardo Bishop Date: Thu, 7 Aug 2025 15:14:27 +0100 Subject: Initial commit --- .gitignore | 8 ++++ 0001-Update-directories-fig-searches.patch | 63 ++++++++++++++++++++++++++++++ PKGBUILD | 55 ++++++++++++++++++++++++++ config.yaml | 24 ++++++++++++ walrss.conf | 2 + walrss.service | 32 +++++++++++++++ walrss.sysusers | 1 + 7 files changed, 185 insertions(+) create mode 100644 .gitignore create mode 100644 0001-Update-directories-fig-searches.patch create mode 100644 PKGBUILD create mode 100644 config.yaml create mode 100644 walrss.conf create mode 100644 walrss.service create mode 100644 walrss.sysusers 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 +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 +_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 " + # 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 -- cgit v1.2.3-70-g09d2