Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,32 @@
.vscode/
data/
.venv/
aur-bin/src/
aur-bin/pkg/
aur-bin/*.tar.*
aur-bin/*.zstaur/pkg/
aur/src/
aur/rowboat/
aur/*.pkg.tar.zst
aur/*.deb
aur-bin/*.deb
aur-bin/*.deb
aur/*.deb
aur/*.pkg.tar.zst
aur/rowboat/
aur-bin/rowboat-linux_0.1.56_amd64.deb
aur/pkg
aur/rowboat
aur/rowboat-git-r1357.bbed2f79-1-x86_64.pkg.tar.zst
aur/srcaur/pkg/
aur/src/
aur/rowboat/
aur/*.pkg.tar.zst
aur/*.deb
aur-bin/*.deb
aur/pkg/
aur/src/
aur/rowboat/
aur/*.pkg.tar.zst
aur/*.deb
aur-bin/*.deb
14 changes: 9 additions & 5 deletions apps/x/apps/main/src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,17 @@ const __dirname = dirname(__filename);
// run this as early in the main process as possible
if (started) app.quit();

// Path resolution differs between development and production:
const preloadPath = app.isPackaged
// Path resolution differs between development and production.
// app.isPackaged is false when launched via electron (e.g. AUR packages),
// so I also check ROWBOAT_PACKAGED to use to correct production paths.
const isPackaged = app.isPackaged || process.env.ROWBOAT_PACKAGED === "1";

const preloadPath = isPackaged
? path.join(__dirname, "../preload/dist/preload.js")
: path.join(__dirname, "../../../preload/dist/preload.js");
console.log("preloadPath", preloadPath);

const rendererPath = app.isPackaged
const rendererPath = isPackaged
? path.join(__dirname, "../renderer/dist") // Production
: path.join(__dirname, "../../../renderer/dist"); // Development
console.log("rendererPath", rendererPath);
Expand Down Expand Up @@ -112,7 +116,7 @@ function createWindow() {
}
});

if (app.isPackaged) {
if (isPackaged) {
win.loadURL("app://-/index.html");
} else {
win.loadURL("http://localhost:5173");
Expand All @@ -121,7 +125,7 @@ function createWindow() {

app.whenReady().then(async () => {
// Register custom protocol before creating window (for production builds)
if (app.isPackaged) {
if (isPackaged) {
registerAppProtocol();
}

Expand Down
26 changes: 26 additions & 0 deletions aur-bin/.SRCINFO
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
pkgbase = rowboat-bin
pkgdesc = AI coworker with memory
pkgver = 0.1.56
pkgrel = 1
url = https://github.com/rowboatlabs/rowboat
arch = x86_64
license = Apache-2.0
depends = gtk3
depends = nss
depends = libxss
depends = libxtst
depends = alsa-lib
depends = libnotify
depends = libxrandr
depends = mesa
depends = at-spi2-atk
depends = libcups
depends = libdrm
depends = xdg-utils
provides = rowboat
conflicts = rowboat
conflicts = rowboat-git
source_x86_64 = https://github.com/rowboatlabs/rowboat/releases/download/v0.1.56/rowboat-linux_0.1.56_amd64.deb
sha256sums_x86_64 = SKIP

pkgname = rowboat-bin
52 changes: 52 additions & 0 deletions aur-bin/PKGBUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# Maintainer: rowboatlabs <https://rowboatlabs.com>
pkgname=rowboat-bin
pkgver=0.1.56
pkgrel=2
pkgdesc="AI coworker with memory"
arch=('x86_64')
url="https://github.com/rowboatlabs/rowboat"
license=('Apache-2.0')
depends=(
'electron39'
'gtk3'
'nss'
'libxss'
'libxtst'
'alsa-lib'
'libnotify'
'libxrandr'
'mesa'
'at-spi2-atk'
'libcups'
'libdrm'
'xdg-utils'
)
provides=('rowboat')
conflicts=('rowboat' 'rowboat-git')
options=('!strip')
source_x86_64=("https://github.com/rowboatlabs/rowboat/releases/download/v${pkgver}/rowboat-linux_${pkgver}_amd64.deb")
sha256sums_x86_64=('SKIP')

package() {
# Extract the .deb (data.tar contains the actual files)
bsdtar -xf data.tar.* -C "$pkgdir/"

# Replace the DEB's bundled-Electron launcher with one that uses the
# system electron39 package. The bundled Electron binary is compiled
# against Debian/Ubuntu libraries and segfaults on Arch Linux due to
# library ABI mismatches. The app bundle (resources/app/) is reusable
# as-is with any compatible Electron binary.
#
# --ozone-platform=x11 forces XWayland instead of native Wayland, which
# is required on Arch + NVIDIA where the Wayland GPU path segfaults.
# ROWBOAT_PACKAGED=1 tells main.ts it is running as a packaged release
# even though app.isPackaged is false under a system electron.
install -Dm755 /dev/stdin "$pkgdir/usr/bin/rowboat" << 'EOF'
#!/bin/bash
exec env ROWBOAT_PACKAGED=1 electron39 \
--no-sandbox \
--ozone-platform=x11 \
/usr/lib/rowboat-linux/resources/app \
"$@"
EOF
}
34 changes: 34 additions & 0 deletions aur/.SRCINFO
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
pkgbase = rowboat-git
pkgdesc = AI coworker with memory
pkgver = r1.0000000
pkgrel = 1
url = https://github.com/rowboatlabs/rowboat
arch = x86_64
license = Apache-2.0
makedepends = nodejs
makedepends = pnpm
makedepends = git
makedepends = python
depends = electron39
depends = gtk3
depends = nss
depends = libxss
depends = libxtst
depends = alsa-lib
depends = libnotify
depends = libxrandr
depends = mesa
depends = at-spi2-atk
depends = libcups
depends = libdrm
depends = xdg-utils
provides = rowboat
conflicts = rowboat
conflicts = rowboat-bin
source = git+https://github.com/rowboatlabs/rowboat.git
source = rowboat.desktop
sha256sums = SKIP
sha256sums = SKIP


pkgname = rowboat-git
88 changes: 88 additions & 0 deletions aur/PKGBUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
# Maintainer: rowboatlabs <https://rowboatlabs.com>
pkgname=rowboat-git
pkgver=r1357.bbed2f79
pkgrel=1
pkgdesc="AI coworker with memory"
arch=('x86_64')
url="https://github.com/rowboatlabs/rowboat"
license=('Apache-2.0')
depends=(
'electron39'
'gtk3'
'nss'
'libxss'
'libxtst'
'alsa-lib'
'libnotify'
'libxrandr'
'mesa'
'at-spi2-atk'
'libcups'
'libdrm'
'xdg-utils'
)
makedepends=('nodejs' 'pnpm' 'git' 'python')
provides=('rowboat')
conflicts=('rowboat' 'rowboat-bin')
source=("git+https://github.com/rowboatlabs/rowboat.git"
"rowboat.desktop")
sha256sums=('SKIP'
'SKIP')


pkgver() {
cd rowboat
printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
}

prepare() {
cd rowboat/apps/x
pnpm install --frozen-lockfile
}

build() {
cd "$srcdir/rowboat/apps/x"

# Build workspace packages in dependency order: shared → core → preload
npm run deps

# Build renderer (Vite)
(cd apps/renderer && pnpm run build)

# Build and bundle main process (tsc + esbuild → .package/dist/main.cjs)
(cd apps/main && pnpm run build)

# Stage preload and renderer into .package/
cd apps/main
mkdir -p .package/preload .package/renderer
cp -r ../preload/dist .package/preload/
cp -r ../renderer/dist .package/renderer/
}

package() {
local _maindir="$srcdir/rowboat/apps/x/apps/main"

install -dm755 "$pkgdir/usr/lib/rowboat"
cp -r "$_maindir/.package" "$pkgdir/usr/lib/rowboat/"

printf '{"name":"rowboat","version":"%s","main":".package/dist/main.cjs"}\n' \
"$pkgver" > "$pkgdir/usr/lib/rowboat/package.json"

# ROWBOAT_PACKAGED=1 tells main.ts it's production mode under system electron
install -Dm755 /dev/stdin "$pkgdir/usr/bin/rowboat" << 'EOF'
#!/bin/bash
exec env ROWBOAT_PACKAGED=1 electron39 \
--no-sandbox \
--ozone-platform=x11 \
/usr/lib/rowboat "$@"
EOF

install -Dm644 "$srcdir/rowboat.desktop" \
"$pkgdir/usr/share/applications/rowboat.desktop"

install -Dm644 "$_maindir/icons/icon.png" \
"$pkgdir/usr/share/icons/hicolor/512x512/apps/rowboat.png"

install -Dm644 "$srcdir/rowboat/LICENSE" \
"$pkgdir/usr/share/licenses/$pkgname/LICENSE"
}
10 changes: 10 additions & 0 deletions aur/rowboat.desktop
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[Desktop Entry]
Name=Rowboat
Comment=AI coworker with memory
Exec=rowboat %U
Icon=rowboat
Terminal=false
Type=Application
Categories=Office;Productivity;
StartupWMClass=rowboat
MimeType=x-scheme-handler/rowboat;