nixpkgs/pkgs/applications/emulators/retroarch
2024-09-07 10:49:40 +01:00
..
patches
cores.nix
default.nix retroarch: unpin FFmpeg 4 2024-08-21 00:26:04 +01:00
hashes.json libretro.atari800: unstable-2024-07-25 -> unstable-2024-09-06 (#340216) 2024-09-07 10:49:40 +01:00
kodi-advanced-launchers.nix
libretro-core-info.nix
mkLibretroCore.nix
README.md retroarch: add README.md 2024-08-28 13:23:26 +01:00
retroarch-assets.nix retroarch-assets: 1.19.0-unstable-2024-05-30 -> 1.19.0-unstable-2024-08-08 2024-08-11 05:08:55 +00:00
retroarch-joypad-autoconfig.nix
update_cores.py
wrapper.nix

RetroArch

This directory includes RetroArch, libretro cores and related packages.

Adding new cores

The basic steps to add a new core are:

  1. Add the core repository to update_cores.py inside the CORES map.
    • The minimum required parameter is repo
    • If the repository owner is not libretro, set owner parameter
    • If the core needs submodules, set fetch_submodules parameter to True
    • To pin the core to a specific release, set rev parameter
  2. Run ./pkgs/applications/emulators/retroarch/update_cores.py <emulator> to generate hashes.json file
  3. Add your new core to cores.nix file, using mkLibretroCore function
    • In general, the attribute name should be the same as the repo name, unless there is a good reason not to
    • Check the core repo and Libretro documentation for the core you're trying to add for instructions on how to build
    • Also check the examples inside cores.nix
    • If your core is recently released, there is a good chance that you may need to update libretro-core-info for things to work inside RetroArch
  4. Try to build your core with nix-build -A libretro.<core>

Updating cores

Just run:

# From the root of your nixpkgs directory
./pkgs/applications/emulators/retroarch/update_cores.nix

Keep in mind that because of the huge amount of cores that we package here, it is recommended to set GITHUB_TOKEN to your GitHub's Personal Access Token (PAT), otherwise the update will probably fail due to GitHub's API rate limit.

Using RetroArch with cores

To create a custom RetroArch derivation with the cores you want (instead of using retroarchFull that includes all cores), you can use .override like this:

{ pkgs, ... }:

let
  retroarchWithCores = (pkgs.retroarch.override {
    cores = with pkgs.libretro; [
      bsnes
      mgba
      quicknes
    ];
  });
in
{
  environment.systemPackages = [
    retroarchWithCores
  ];
}