How to install (and set up?) Retroarch

I’m trying to install Retroarch, but the description of the package is not helpful and I could not find any documentation about it either on the nor anywhere else online.

e.g. nix search retroarch shows:

warning: using cached results; pass '-u' to update the cache
Attribute name: nixpkgs.retroarch
Package name: retroarch
Version: 1.7.1
Description: Multi-platform emulator frontend for libretro cores (with cores: )

Attribute name: nixpkgs.retroarchBare
Package name: retroarch-bare
Version: 1.7.1
Description: Multi-platform emulator frontend for libretro cores

So what is one to put into configuration.nix?

From the scarce info that is presented, I would assume that:

either a) simply


would give me the whole package with all the (default?) cores.

or b)

retroarch (with: [mame, nestopia, prboom])

which I have a feeling is wrong.

If someone gives me push in the right direction, I’m happy to document at least the basic instructions here and/or the wiki.

It depends on what your intention is.
If you want retroarch to be on the path, this should do it:

{ config, pkgs, ... }:
  environment.systemPackages = with pkgs; [

That far I understand.

But if you look at the package list, you will see there are two possibilities:

  • retroarch – “Multi-platform emulator frontend for libretro cores (with cores: )”
  • retroarch-bare – “Multi-platform emulator frontend for libretro cores”

Now, if I want to have certain cores (i.e. an actually useful RetroArch), how do I get about that?

I think setting

nixpkgs.config.retroarch = {
  enableDolphin = true;
  enableMGBA = true;
  enableMAME = true;

etc. should work. You can find possible options in the nixpkgs repo in the pkgs/top-level/all-packages.nix file when you search for retroarch.

Last time I tried it I think I needed to download the cores in retroarch again, but I think they didn’t all work when I didn’t enable them via the options above. I guess you have to experiment a bit what works and what doesn’t. :confused:


Thanks, that seems to have done it (apart from MAME being broken).

I still needed to download cores from the UI and the UI seems to be missing icons. And downloading a core through the UI, that was not enabled in configuration.nix still worked.

So this seems to be that the difference between retroarch and retroarch-bare is either very odd or broken.

What is the best way to document how one should handle a package like this?

  • a new wiki page?
  • change description of the package?

Since all these options seem to have to be described in the pkgs/top-level/all-packages.nix, wouldn’t it make sense to have documentation on what options are available auto-generated?

… similar to what do – see e.g.:

I personally think it would be helpful if the package options would be documented like NixOS options and searchable via NixOS Search - Loading... or a similar site. I’m nor sure though what the correct way to approach that would be, as afaik e.g. NixOS options come with a significant performance penalty for all users when evaluating the package set.

I hope a ‘veteran’ can weigh in here. :stuck_out_tongue:

The discussion starting at and Nixpkgs manual scope · Issue #26211 · NixOS/nixpkgs · GitHub (linked from there) might interest you. :slight_smile:

Wanted to resurrect such topic since I cannot get retroarch to properly work (gui starts but cannot get to work any game).
In my configuration.nix I have retroarch in my home.packages section. Additionally, I have this code as well:

    nixpkgs.config.retroarch = {
        enableBeetleGBA = true;
        enableBeetleNGP = true;
        enableBeetlePSX = true;
        enableBeetleSaturn = true;
        enableBeetleSNES = true;
        enableDOSBox = true;
        enableScummVM = true;
        #enableDolphin = true;

When launching retroarch I can see its interface but when I try to load any type of rom, nothing happens (it says that no core is installed).

Do you know what is missing to get it working?

Today it would be more like retroarch.override { cores = with libretro; [ … ]; }

1 Like

Thanks, it worked with that.