Files
fladder-nix/README.md
2026-04-27 18:40:39 -04:00

160 lines
4.6 KiB
Markdown

# fladder — NixOS package
Unofficial NixOS package for [Fladder](https://github.com/DonutWare/Fladder),
a cross-platform [Jellyfin](https://jellyfin.org/) client built on Flutter.
## Files
| File | Purpose |
|---|---|
| `package.nix` | The derivation (import this into your config or flake) |
| `default.nix` | Convenience wrapper for `nix-build` local testing |
## Quick start
```bash
# Build and test locally
nix-build # produces ./result/bin/fladder
./result/bin/fladder
```
## Adding to your NixOS configuration
### Standalone (no flake)
Copy this repo somewhere (e.g. `~/nixpkgs-overlays/fladder/`) then in
`/etc/nixos/configuration.nix`:
```nix
{ pkgs, ... }:
let
fladder = pkgs.callPackage /path/to/this/repo/package.nix { };
in
{
environment.systemPackages = [ fladder ];
}
```
### As an overlay
```nix
# In configuration.nix or a separate overlay file:
nixpkgs.overlays = [
(final: prev: {
fladder = final.callPackage /path/to/this/repo/package.nix { };
})
];
environment.systemPackages = [ pkgs.fladder ];
```
### With flakes
```nix
# flake.nix
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
fladder-pkg.url = "path:/path/to/this/repo"; # or a github: URL
};
outputs = { nixpkgs, fladder-pkg, ... }: {
nixosConfigurations.mymachine = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
({ pkgs, ... }: {
environment.systemPackages = [
fladder-pkg.packages.x86_64-linux.fladder
];
})
];
};
};
}
```
## Package notes
### AppImage type
Fladder distributes a **Type 2 (SquashFS)** AppImage built with
[appimage-builder](https://appimage-builder.readthedocs.io/). The derivation
uses `appimageTools.wrapType2`, which:
1. Extracts the SquashFS filesystem.
2. Patches the ELF interpreter and `RPATH` to point at the Nix store.
3. Wraps the binary in a minimal FHS environment that provides the expected
shared libraries.
### Runtime dependencies
The main external shared libraries are:
| Library | Why needed |
|---|---|
| `libmpv` | Media playback (video/audio streaming) |
| `gtk3` | Flutter Linux window embedder |
| `libGL` / `mesa` | Flutter Impeller / OpenGL compositor |
| `libxkbcommon` | Keyboard input |
| `wayland` | Native Wayland support (Flutter ≥ 3.13) |
| `libpulseaudio` | Audio (mpv PulseAudio / PipeWire-pulse back-end) |
| `python3` | `libmpv` in nixpkgs pulls in `vapoursynth` which `dlopen`s `libpython` |
The `python3` dependency is subtle but important: without it the app exits
immediately with `libpython3.x.so.1.0: cannot open shared object file`
([upstream issue #724](https://github.com/DonutWare/Fladder/issues/724)).
### AMD GPU (RX 580)
The RX 580 uses the open-source `amdgpu` / `radeonsi` Mesa driver stack,
which is included via `pkgs.mesa` in `extraPkgs`. No additional configuration
should be required. If you encounter rendering artefacts, try:
```nix
# In configuration.nix
hardware.opengl.enable = true; # (or hardware.graphics.enable on 25.05+)
hardware.opengl.driSupport = true;
```
### X11 / Wayland
Fladder runs on both. Flutter will prefer Wayland when `WAYLAND_DISPLAY` is
set; it falls back to X11/XWayland otherwise. No special flags are needed.
### Updating to a new version
1. Update `version` in `package.nix`.
2. Update the `hash` field — get the new hash with:
```bash
nix-prefetch-url --type sha256 \
https://github.com/DonutWare/Fladder/releases/download/vNEW/Fladder-Linux-NEW.AppImage
# Convert to SRI format:
nix hash to-sri --type sha256 <raw-hash>
```
3. Run `nix-build` and test.
## Troubleshooting
**`libmpv.so: cannot open shared object file`**
: Ensure `pkgs.mpv` is in `extraPkgs`. If you build mpv yourself with custom
options, the `.so` name or version may differ — check with
`nix run nixpkgs#patchelf -- --print-needed result/bin/.fladder-wrapped`.
**`libpython3.x.so.1.0: cannot open shared object file`**
: The `python3` package in `extraPkgs` should fix this. If it persists, pin
the python version to match the one nixpkgs' mpv was linked against.
**App window is black / no video**
: Make sure Mesa / OpenGL is enabled in your NixOS config (see AMD GPU section
above). Also try setting `LIBGL_ALWAYS_SOFTWARE=0` to rule out Mesa's
software rasterizer being selected.
**Wayland: window appears but is blank**
: Try forcing X11 as a workaround: `WAYLAND_DISPLAY="" ./result/bin/fladder`.
This is a known Flutter/Wayland edge case on some compositor versions.
## License
The Nix packaging files in this repo are released under the MIT license.
Fladder itself is [GPL-3.0](https://github.com/DonutWare/Fladder/blob/develop/LICENSE).