NixOS
Install the Punktfunk host on NixOS from the repo's flake — add the binary cache, import the module, enable the host.
The repo's flake.nix builds punktfunk-host, punktfunk-client, punktfunk-web and
punktfunk-scripting and ships a NixOS module. x86_64-linux only, NixOS 24.11 or newer.
1. Add the binary cache
Without it a build compiles the whole Rust workspace and gamescope from source — about an hour. With it you get prebuilt binaries:
nix.settings = {
substituters = [ "https://nix.unom.io" ];
trusted-public-keys = [ "punktfunk-cache-1:yhOJmHxzg6tzXpxSFzlYn6Pc6r0jHprsWqt8MZC654o=" ]; # curl https://nix.unom.io/punktfunk-cache.pub
};Off NixOS, put the same two values in /etc/nix/nix.conf as extra-substituters /
extra-trusted-public-keys. One trap: setting inputs.punktfunk.inputs.nixpkgs.follows = "nixpkgs"
changes every store path and misses the cache entirely —
packaging/nix.
2. Import the module and enable the host
# flake input: inputs.punktfunk.url = "git+https://git.unom.io/unom/punktfunk";# then: imports = [ punktfunk.nixosModules.default ]; services.punktfunk.host.enable = true;A typical host block:
services.punktfunk.host = {
enable = true;
users = [ "alice" ]; # added to the `input` group, for virtual gamepads
openFirewall = true;
desktopSession = true; # on a machine you log into — see below
settings = { RUST_LOG = "info"; }; # these become host.env
};The module does declaratively what the deb/RPM scriptlets do — the systemd user services, udev
rules, kernel modules, sysctl tuning, the firewall ports and input group membership — and brings
the web console in alongside the host. settings writes host.env for you.
Set desktopSession = true on any machine somebody logs into. It ties the host to
graphical-session.target, so restarting Plasma or GNOME restarts the host with it; without it the
host keeps running against a compositor that no longer exists and fails capture on every later
session. Leave it off for the headless appliance route (a pinned compositor or a gamescope box),
which may never reach that target — same reasoning as
Restart the host with your desktop.
3. Start it
The host and console user services are defined but not started (set autoStart = true for an
appliance). From your graphical session:
systemctl --user enable --now punktfunk-host punktfunk-webThe plugin runner needs no such step — the module starts it, because the game-library scanners ship
as plugins (services.punktfunk.scripting.autoStart = false; to opt out).
That's the install. Continue with the Quick Start from step 3 — open the console, pair a client, stream.
When you want more
- Run it without NixOS (other distros, wrapped in nixGL
so the GPU drivers resolve):
nix run git+https://git.unom.io/unom/punktfunk#punktfunk-host -- serve. - The full option reference — client, console and scripting options, GPU driver notes, headless appliance setup — is in packaging/nix.
- Updating:
nix flake update punktfunkin your flake directory, thensudo nixos-rebuild switch(Updating). Removing: Uninstall.