Initial commit: linux-provision repo

Distribution-agnostic provisioning script that sets up a new Linux machine
(Detected via lib/distro.sh - supports Debian/Ubuntu/Pop and Fedora families).

13 stages covering:
- System packages, external repos, toolchains (nvm, uv, Python)
- Shell config (zsh, oh-my-zsh, p10k), git, SSH
- Custom uv tools from ~40 git repos
- Desktop config (keybindings, hotkeys, ghostty, fonts)
- Docker, system tweaks, browser/app installs
- Custom systemd user services (porridge, swayidle, mempi-sync, etc.)
- API keys loaded from Bitwarden at shell startup
This commit is contained in:
2026-06-05 21:21:46 +10:00
commit 180c5838ea
36 changed files with 4176 additions and 0 deletions

View File

@@ -0,0 +1,13 @@
[Unit]
Description=Load Bitwarden SSH keys into ssh-agent
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=%h/.local/bin/bw-load-ssh.sh
Restart=on-failure
RestartSec=30
[Install]
WantedBy=default.target

View File

@@ -0,0 +1,9 @@
[Unit]
Description=Empty Downloads folder on login
[Service]
Type=oneshot
ExecStart=/usr/bin/bash -c 'rm -rf %h/Downloads/* %h/Downloads/.* 2>/dev/null'
[Install]
WantedBy=default.target

View File

@@ -0,0 +1,6 @@
[Unit]
Description=Sync mempi database to Nextcloud
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'sqlite3 %h/.local/share/pi/pi.db "PRAGMA wal_checkpoint(TRUNCATE)" && cp %h/.local/share/pi/pi.db "%h/Nextcloud/2_resources/90-99 Misc/98 ocpa/mempi-pi.db"'

View File

@@ -0,0 +1,8 @@
[Unit]
Description=Sync mempi database on boot
[Timer]
OnBootSec=5min
[Install]
WantedBy=timers.target

View File

@@ -0,0 +1,12 @@
[Unit]
Description=Pi Overview — session dashboard
After=default.target
[Service]
Environment=PATH=/home/julian/.nvm/versions/node/v24.11.1/bin:/usr/local/bin:/usr/bin:/bin
ExecStart=%h/.local/bin/pi-overview --port 3000
Restart=on-failure
RestartSec=5
[Install]
WantedBy=default.target

View File

@@ -0,0 +1,13 @@
[Unit]
Description=Porridge dictate - push-to-talk transcription
After=graphical-session.target
[Service]
Type=simple
EnvironmentFile=-%h/.config/porridge/env
ExecStart=%h/.local/bin/porridge dictate
Restart=on-failure
RestartSec=3
[Install]
WantedBy=default.target

View File

@@ -0,0 +1,14 @@
[Unit]
Description=Porridge - Zoom meeting transcriber daemon
After=graphical-session.target pulseaudio.service pipewire.service
Wants=graphical-session.target
[Service]
Type=simple
EnvironmentFile=-%h/.config/porridge/env
ExecStart=%h/.local/bin/porridge daemon
Restart=on-failure
RestartSec=5
[Install]
WantedBy=graphical-session.target