PlayStation 2 development environment with Nix flakes, PS2Dev toolchain, and controller support. https://ps2dev.github.io/ps2sdk/index.html
First time setup - run once to download the PS2 toolchain (~250MB):
nix develop
# Toolchain will auto-download to $HOME/.ps2dev
# Exit shell when done: exitBuild your PS2 project:
nix run .#build-elf -- pad
# Output: bin/pad.elfAvailable commands:
nix run .#clean Clean build artifacts
nix run .#clean-all Clean all (current/, src/, bin/)
nix run .#build-elf -- NAME Build NAME.elf from main.c
nix run .#build-iso -- NAME Build NAME.iso from NAME.elf
nix run .#run -- NAME Build and run in PCSX2
nix run .#test-controller Test USB controller input.
├── main.c # Your PS2 source code
├── Makefile # Makefile for building
├── flake.nix # Nix flake configuration
├── README.md # This file
├── docs/
│ └── CONTROLLER_SETUP.md # USB controller setup guide
├── tools/
│ ├── controller_test.c # Linux controller test program
│ ├── test_controller.sh # Controller diagnostic script
│ ├── test_buttons.sh # Quick button test
│ ├── test_controller.py # SDL2-based controller test
│ └── setup_controller_ubuntu.sh # Global Ubuntu setup script
├── src/ # Copied source files (auto-generated)
├── bin/ # Compiled ELF files
└── external/ # External dependencies
# Build and run
nix run .#run -- pad
# Or load ELF manually in PCSX2 GUI
# File → Boot ELF → select bin/pad.elfTest your controller directly:
nix run .#test-controllerInstall controller support system-wide:
sudo bash tools/setup_controller_ubuntu.shThis installs:
evtest- Event testingjoystick/jstest- Controller testinglinuxconsoletools- Input utilitiessdl2-compat- SDL2 library
See docs/CONTROLLER_SETUP.md for detailed guide.
The PS2Dev toolchain is installed at:
- $HOME/.ps2dev/ - Toolchain directory (auto-downloaded)
mkdir -p $HOME/.ps2dev
cd $HOME/.ps2dev
curl -o ps2dev-latest.tar.gz -LC - https://github.com/ps2dev/ps2dev/releases/download/latest/ps2dev-latest.tar.gz
tar -xf ps2dev-latest.tar.gz --strip-components 1
rm ps2dev-latest.tar.gzBuild your project:
nix run .#build-elf -- exam
# Output: bin/exam.elfAvailable commands:
nix run .#clean Clean build artifacts
nix run .#clean-all Clean all (current/, src/, bin/)
nix run .#build-elf -- NAME Build NAME.elf from main.c
nix run .#build-iso -- NAME Build NAME.iso from NAME.elfpcsx2-emulator bin/exam.elfOr via GUI: File → Boot ELF → select bin/exam.elf
The PS2Dev toolchain is installed at:
- $HOME/.ps2dev/ - Toolchain directory (auto-downloaded)
mkdir -p $HOME/.ps2dev
cd $HOME/.ps2dev
curl -o ps2dev-latest.tar.gz -LC - https://github.com/ps2dev/ps2dev/releases/download/latest/ps2dev-ubuntu-latest.tar.gz
tar -xf ps2dev-latest.tar.gz --strip-components 1
rm ps2dev-latest.tar.gzsudo snap connect pcsx2-emulator:joystick