PinePods Nix Package
A Nix/NixOS package for PinePods, a self-hosted podcast manager. This packages the PinePods desktop client (Tauri v2) for NixOS.
Note: PinePods is a client/server application. You will need a running PinePods server instance to use this package. See the PinePods documentation for server setup instructions.
Requirements
- NixOS
- A running PinePods server (self-hosted)
Installation
Option 1: NixOS Module via Flake (recommended)
Add PinePods as a flake input in your system flake.nix:
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
pinepods.url = "git+https://git.briannelson.dev/brian/PinePods-nix";
pinepods.inputs.nixpkgs.follows = "nixpkgs";
};
outputs = { self, nixpkgs, pinepods, ... }: {
nixosConfigurations.mymachine = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
pinepods.nixosModules.pinepods
{
services.pinepods = {
enable = true;
# Your server address
server = "https://pinepods.example.com";
};
}
];
};
};
}
Then rebuild your system:
sudo nixos-rebuild switch
Option 2: NixOS Module without Flakes
Clone this repository:
git clone https://git.briannelson.dev/brian/PinePods-nix.git
Add the module to your /etc/nixos/configuration.nix:
{ config, pkgs, ... }:
{
imports = [
/path/to/pinepods-nix/pinepods-module.nix
];
services.pinepods = {
enable = true;
# Your server address
server = "https://pinepods.example.com";
};
}
Then rebuild your system:
sudo nixos-rebuild switch
Option 3: Install to user profile with nix-env
Clone this repository:
git clone https://git.briannelson.dev/brian/PinePods-nix.git
cd pinepods-nix
Install to your user profile:
nix-env -f default.nix -iA pinepods
This is persistent across reboots. To uninstall:
nix-env -e pinepods
Note: With this option the
serverURL cannot be pre-configured. You will need to enter it manually in the app on first launch.
Configuration
Module Options
| Option | Type | Default | Description |
|---|---|---|---|
services.pinepods.enable |
bool | false |
Enable the PinePods desktop client |
services.pinepods.server |
string | "" |
URL of your PinePods server (e.g. https://pinepods.example.com) |
When server is set, the app will navigate directly to your server on launch. If left empty, the app will open to a blank page and you will need to navigate to your server manually in the address bar.
Project Structure
pinepods-nix/
├── flake.nix # Nix flake definition
├── default.nix # Package definition entry point (non-flake)
├── pinepods.nix # Main package derivation
├── pinepods-module.nix # NixOS module definition
├── patch-lib.py # Build-time patch for server URL support
├── example-usage-flake.nix # Example flake for users
├── Cargo.lock # Cargo lockfile for src-tauri (Tauri binary)
└── Cargo.frontend.lock # Cargo lockfile for web/ (Yew/WASM frontend)
How It Works
PinePods is a multi-component application. This package builds two components from source:
Frontend (pinepods-frontend): The Yew/WASM web frontend is compiled using trunk targeting wasm32-unknown-unknown. The output is a static dist/ directory containing HTML, WASM, and CSS assets.
Desktop client (pinepods): The Tauri v2 desktop binary is compiled with cargo, with the pre-built frontend assets embedded directly into the binary via the custom-protocol feature. At build time, tauri.conf.json is patched to remove the devUrl so Tauri serves the embedded assets instead of connecting to a development server. The Rust source is also patched to read the PINEPODS_SERVER environment variable and navigate the app window to that URL on launch.
Runtime dependencies are provided via wrapProgram:
- WebKit2GTK 4.1 (Tauri v2 requirement)
- GStreamer + plugins (audio playback)
- libayatana-appindicator (system tray icon)
- GLib/GTK3/Cairo stack
Building from Source
To build manually without installing:
git clone https://git.briannelson.dev/brian/PinePods-nix.git
cd pinepods-nix
nix-build -A pinepods
./result/bin/pinepods
To use the dev shell with all build tools available:
nix develop
Updating to a New Version of PinePods
This project is still a WIP so I have not been able to test these step until a new version of PinePods gets released
To update to a new PinePods release:
-
Update the
versionandsha256inpinepods.nix:version = "0.8.3"; # new version sha256 = "..."; # run nix-build and paste the correct hash from the error -
Replace the Cargo lockfiles with the new versions:
curl -L https://github.com/madeofpendletonwool/PinePods/archive/refs/tags/0.8.3.tar.gz | tar xz cp PinePods-0.8.3/web/Cargo.lock ./Cargo.frontend.lock cp PinePods-0.8.3/web/src-tauri/Cargo.lock ./Cargo.lock -
Check if the
wasm-bindgenversion changed:grep "wasm-bindgen" PinePods-0.8.3/web/Cargo.tomlIf it changed, update
wasm-bindgen-cliindefault.nixandTRUNK_TOOLS_WASM_BINDGENinpinepods.nixaccordingly. -
Rebuild and test:
nix-build -A pinepods ./result/bin/pinepods
Troubleshooting
White screen on launch
Make sure WEBKIT_DISABLE_SANDBOX_THIS_IS_DANGEROUS=1 is set. This is handled automatically by the package wrapper.
No audio playback GStreamer plugins are included but if audio still doesn't work, check that your system has the required codec support:
gst-inspect-1.0 autoaudiosink
gst-inspect-1.0 appsink
Login doesn't persist between sessions
This is a known limitation of the WebKit localStorage implementation. As a workaround, set services.pinepods.server in your NixOS configuration so the app always navigates to your server on launch.
Tray icon shows generic icon
The icon is installed under the app's reverse-DNS identifier com.gooseberrydevelopment.pinepods. Make sure your icon theme cache is up to date:
gtk-update-icon-cache
License
This Nix packaging is provided as-is. PinePods itself is licensed under GPL-3.0. See the PinePods repository for details.