nixpkgs/pkgs/applications/emulators/retroarch
2024-10-06 18:03:58 +00:00
..
patches
cores.nix treewide: replace stdenv.is with stdenv.hostPlatform.is 2024-09-25 00:04:37 +03:00
default.nix Merge branch 'master' into staging-next 2024-09-25 06:05:01 +03:00
hashes.json libretro.pcsx-rearmed: unstable-2024-09-03 -> unstable-2024-10-06 (#346808) 2024-10-06 16:26:22 +01:00
kodi-advanced-launchers.nix
libretro-core-info.nix
mkLibretroCore.nix
README.md
retroarch-assets.nix retroarch-assets: 1.19.0-unstable-2024-08-08 -> 1.19.0-unstable-2024-09-22 2024-09-28 12:37:22 +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
  ];
}