Skip to content
lordvicky edited this page Jul 14, 2026 · 2 revisions

❄️ NixOS

NixOS is configured declaratively, so OpenDS5 never runs an imperative installer there. Instead the repo ships a flake that replaces the whole installer with one import.

📦 Flake (recommended)

{
  inputs.opends5.url = "github:LordVicky/OpenDS5";

  # in your nixosConfigurations.<host>:
  modules = [
    inputs.opends5.nixosModules.default
    {
      services.opends5 = {
        enable = true;
        users = [ "YOURNAME" ];   # members of the vds group (/dev/vds* access)
      };
    }
  ];
}

Then sudo nixos-rebuild switch. This is the declarative equivalent of everything the installer does elsewhere:

  • builds the vds_hcd kernel module from source against your configured kernel and autoloads it — no DKMS, no MOK signing; kernel bumps rebuild it automatically,
  • builds vdsd/vdsctl from source (no prebuilt-glibc binaries, no nix-ld),
  • installs the udev rules, system-wide wireplumber config, vds group, and the vdsd service,
  • enables Bluetooth and runs bluetoothd with --noplugin=input so vds can own the controller's HID channels. While active, other Bluetooth input devices (keyboards, mice) won't work — opt out with services.opends5.disableBluetoothInputPlugin = false; and connect the controller over USB instead.

Options

Option Default Meaning
services.opends5.enable false Enable the whole stack
services.opends5.users [ ] Users added to the vds group
services.opends5.package flake's vds Override the userspace package
services.opends5.disableBluetoothInputPlugin true bluetoothd --noplugin=input (required for Bluetooth play)

▶️ Running the app

NixOS can't execute AppImages natively. Enable support:

programs.appimage = {
  enable = true;
  binfmt = true;
};

then run the release AppImage from Releases. The setup wizard detects a working system and skips installation.

🔄 Updates

The AppImage updates itself normally (Updates), but the driver is pinned by your flake lock. After an app update:

nix flake update opends5
sudo nixos-rebuild switch

Until then, the running module is whatever your lock pins — which is fine unless a release actually changed the driver.

🧰 Generator fallback (non-flake configs)

./OpenDS5.AppImage --install-system on NixOS runs entirely unprivileged and writes two files to the current directory: opends5-vds.nix (a module building vds_hcd via boot.extraModulePackages) and opends5-vds-src/. Move both next to configuration.nix, add imports = [ ./opends5-vds.nix ];, and rebuild.

The fallback covers the kernel module only — for userspace you'd mirror the flake module by hand (group, udev rules, vdsd service built from the vds/ source). If you can use the flake, use the flake.

✅ Verify

lsmod | grep vds_hcd
ls /dev/vds*
systemctl status vdsd

Reboot if the rebuild switched kernels. If the app doesn't see the controller, check the Bluetooth input plugin section in Troubleshooting and FAQ.

Clone this wiki locally