feat: add full-screen installer interface

A bare install at a terminal of 40x12 or more opens a full screen that a
keyboard or a controller mapped to keys drives: setup, plan, install in
three presses, systems, regions, cores, game data, folder browser and a
dry-run preview one press away. The installer runs itself as a child with
--events for every check and install, the file list fetched once and
handed over with --manifest. --tui asks for it, --plain, RETROBIOS_PLAIN
and ACCESSIBLE keep the line questions.
This commit is contained in:
Abdessamad Derraz committed 2026-10-23 14:23:35 +02:00
1 parent 326d3b46ee
commit c6fc0a3a61
94 files changed
+5468 -6

No files matched your search

+1 -1
View File
@@ -11,7 +11,7 @@
$ErrorActionPreference = "Stop"
$defaultInstallUrl = "https://raw.githubusercontent.com/Abdess/retrobios/main/install.py"
$defaultInstallSha256 = "851c1d9e8b2b481adf50d1af2c67d1e44d9b50504fdef3d5b6514332ac4457eb"
$defaultInstallSha256 = "532f0b8d96e0dcf62164daa16837dc21918ced45d46c01e84dd60650dcc73256"
$maximumInstallerBytes = 2MB
$installerExit = 0
$installer = if ($PSScriptRoot) { Join-Path $PSScriptRoot "install.py" } else { $null }
+2128 -1
View File
File diff suppressed because it is too large. Load diff
+1 -1
View File
@@ -18,7 +18,7 @@ esac
TEMP_INSTALLER=""
TEMP_DIRECTORY=""
DEFAULT_INSTALL_URL="https://raw.githubusercontent.com/Abdess/retrobios/main/install.py"
DEFAULT_INSTALL_SHA256="851c1d9e8b2b481adf50d1af2c67d1e44d9b50504fdef3d5b6514332ac4457eb"
DEFAULT_INSTALL_SHA256="532f0b8d96e0dcf62164daa16837dc21918ced45d46c01e84dd60650dcc73256"
MAX_INSTALLER_BYTES=2097152
cleanup() {
+40
View File
@@ -0,0 +1,40 @@
RetroBIOS: Browse for a folder
/home/user/.config/retroarch
> Use this folder
..
/media/user/SDCARD (NextUI card)
cores/
system/
A/Enter Open B/Esc Back ? Help
+12
View File
@@ -0,0 +1,12 @@
RetroBIOS: Browse for a folder
/home/user/.config/retroarch
> Use this folder
..
/media/user/SDCARD (NextUI card)
cores/
system/
A/Enter Open B/Esc Back ? Help
+15
View File
@@ -0,0 +1,15 @@
RetroBIOS: Browse for a folder
/home/user/.config/retroarch
> Use this folder
..
/media/user/SDCARD (NextUI card)
cores/
system/
A/Enter Open B/Esc Back ? Help
+24
View File
@@ -0,0 +1,24 @@
RetroBIOS: Browse for a folder
/home/user/.config/retroarch
> Use this folder
..
/media/user/SDCARD (NextUI card)
cores/
system/
A/Enter Open B/Esc Back ? Help
+40
View File
@@ -0,0 +1,40 @@
RetroBIOS: Checking
RetroArch: ~/.config/retroarch/system
File list: 5 files.
Reading the files already in the folder... 0:04
Ctrl-C Quit B/Esc Back
+12
View File
@@ -0,0 +1,12 @@
RetroBIOS: Checking
RetroArch: ~/.config/retroarch/system
File list: 5 files.
Reading the files already in the
folder... 0:04
Ctrl-C Quit B/Esc Back
+15
View File
@@ -0,0 +1,15 @@
RetroBIOS: Checking
RetroArch: ~/.config/retroarch/system
File list: 5 files.
Reading the files already in the
folder... 0:04
Ctrl-C Quit B/Esc Back
+24
View File
@@ -0,0 +1,24 @@
RetroBIOS: Checking
RetroArch: ~/.config/retroarch/system
File list: 5 files.
Reading the files already in the folder... 0:04
Ctrl-C Quit B/Esc Back
+40
View File
@@ -0,0 +1,40 @@
RetroBIOS: Command line
The same choice without questions:
python3 install.py --platform retroarch --dest /home/user/.config/retroarch/system --system
nintendo-gba
A/Enter Back
+12
View File
@@ -0,0 +1,12 @@
RetroBIOS: Command line
The same choice without questions:
python3 install.py --platform
retroarch --dest
/home/user/.config/retroarch/system
--system nintendo-gba
A/Enter Back
+15
View File
@@ -0,0 +1,15 @@
RetroBIOS: Command line
The same choice without questions:
python3 install.py --platform
retroarch --dest
/home/user/.config/retroarch/system
--system nintendo-gba
A/Enter Back
+24
View File
@@ -0,0 +1,24 @@
RetroBIOS: Command line
The same choice without questions:
python3 install.py --platform retroarch --dest
/home/user/.config/retroarch/system --system nintendo-gba
A/Enter Back
+40
View File
@@ -0,0 +1,40 @@
RetroBIOS: Confirm
1 file to download, 16.0 KB
0 in place, 1 missing, 0 wrong copies
BIOS folder: ~/.config/retroarch/system
Free space: 50.0 GB
> Install
Back
A/Enter Install B/Esc Back ? Help
+12
View File
@@ -0,0 +1,12 @@
RetroBIOS: Confirm
1 file to download, 16.0 KB
0 in place, 1 missing, 0 wrong copies
BIOS folder:
~/.config/retroarch/system
Free space: 50.0 GB
> Install
Back
A/Enter Install B/Esc Back ? Help
+15
View File
@@ -0,0 +1,15 @@
RetroBIOS: Confirm
1 file to download, 16.0 KB
0 in place, 1 missing, 0 wrong copies
BIOS folder:
~/.config/retroarch/system
Free space: 50.0 GB
> Install
Back
A/Enter Install B/Esc Back ? Help
+24
View File
@@ -0,0 +1,24 @@
RetroBIOS: Confirm
1 file to download, 16.0 KB
0 in place, 1 missing, 0 wrong copies
BIOS folder: ~/.config/retroarch/system
Free space: 50.0 GB
> Install
Back
A/Enter Install B/Esc Back ? Help
+40
View File
@@ -0,0 +1,40 @@
RetroBIOS: Cores
Tick the cores you use. With none ticked, every core's files are kept.
> Filter (/ to type)
[ ] mesen
[x] pcsx_rearmed
A/Enter Done B/Esc Back X/Space Tick ? Help
+12
View File
@@ -0,0 +1,12 @@
RetroBIOS: Cores
Tick the cores you use. With none
ticked, every core's files are kept.
> Filter (/ to type)
[ ] mesen
[x] pcsx_rearmed
A/Enter Done B/Esc Back X/Space Tick
+15
View File
@@ -0,0 +1,15 @@
RetroBIOS: Cores
Tick the cores you use. With none
ticked, every core's files are kept.
> Filter (/ to type)
[ ] mesen
[x] pcsx_rearmed
A/Enter Done B/Esc Back X/Space Tick
+24
View File
@@ -0,0 +1,24 @@
RetroBIOS: Cores
Tick the cores you use. With none ticked, every core's files are kept.
> Filter (/ to type)
[ ] mesen
[x] pcsx_rearmed
A/Enter Done B/Esc Back X/Space Tick ? Help
+40
View File
@@ -0,0 +1,40 @@
RetroBIOS: Create the folder?
/home/user/bios/new does not exist.
The nearest folder that does: /home/user
> Create it and continue
Choose another folder
A/Enter Choose B/Esc Back
+12
View File
@@ -0,0 +1,12 @@
RetroBIOS: Create the folder?
/home/user/bios/new does not exist.
The nearest folder that does:
/home/user
> Create it and continue
Choose another folder
A/Enter Choose B/Esc Back
+15
View File
@@ -0,0 +1,15 @@
RetroBIOS: Create the folder?
/home/user/bios/new does not exist.
The nearest folder that does:
/home/user
> Create it and continue
Choose another folder
A/Enter Choose B/Esc Back
+24
View File
@@ -0,0 +1,24 @@
RetroBIOS: Create the folder?
/home/user/bios/new does not exist.
The nearest folder that does: /home/user
> Create it and continue
Choose another folder
A/Enter Choose B/Esc Back
+40
View File
@@ -0,0 +1,40 @@
RetroBIOS: Something went wrong
Could not fetch the file list for retroarch after 3 attempts: [Errno -2] Name or service not
known
Address: https://raw.githubusercontent.com/Abdess/retrobios/main/install/retroarch.json
> Try again
Choose another setup or folder
Quit
A/Enter Choose B/Esc Back
+12
View File
@@ -0,0 +1,12 @@
RetroBIOS: Something went wrong
Could not fetch the file list for
retroarch after 3 attempts: [Errno
-2] Name or service not known
> Try again
Choose another setup or folder
Quit
A/Enter Choose B/Esc Back
+15
View File
@@ -0,0 +1,15 @@
RetroBIOS: Something went wrong
Could not fetch the file list for
retroarch after 3 attempts: [Errno
-2] Name or service not known
Address:
https://raw.githubusercontent.com/
Abdess/retrobios/main/install/
retroarch.json
> Try again
Choose another setup or folder
Quit
A/Enter Choose B/Esc Back
+24
View File
@@ -0,0 +1,24 @@
RetroBIOS: Something went wrong
Could not fetch the file list for retroarch after 3 attempts: [Errno -2]
Name or service not known
Address: https://raw.githubusercontent.com/Abdess/retrobios/main/install/
retroarch.json
> Try again
Choose another setup or folder
Quit
A/Enter Choose B/Esc Back
+40
View File
@@ -0,0 +1,40 @@
RetroBIOS: Which folder?
RetroArch reads its BIOS files from:
/home/user/.config/retroarch/system
> Use this folder
Browse for a folder
Type a path
A/Enter Choose B/Esc Back ? Help
+12
View File
@@ -0,0 +1,12 @@
RetroBIOS: Which folder?
RetroArch reads its BIOS files from:
/home/user/.config/retroarch/system
> Use this folder
Browse for a folder
Type a path
A/Enter Choose B/Esc Back ? Help
+15
View File
@@ -0,0 +1,15 @@
RetroBIOS: Which folder?
RetroArch reads its BIOS files from:
/home/user/.config/retroarch/system
> Use this folder
Browse for a folder
Type a path
A/Enter Choose B/Esc Back ? Help
+24
View File
@@ -0,0 +1,24 @@
RetroBIOS: Which folder?
RetroArch reads its BIOS files from:
/home/user/.config/retroarch/system
> Use this folder
Browse for a folder
Type a path
A/Enter Choose B/Esc Back ? Help
+40
View File
@@ -0,0 +1,40 @@
RetroBIOS: Where is the SD card?
NextUI keeps its BIOS files on its SD card. Choose the card's root folder, the one holding
.system.
> Browse for a folder
Type a path
A/Enter Choose B/Esc Back ? Help
+12
View File
@@ -0,0 +1,12 @@
RetroBIOS: Where is the SD card?
NextUI keeps its BIOS files on its SD
card. Choose the card's root folder,
the one holding .system.
> Browse for a folder
Type a path
A/Enter Choose B/Esc Back ? Help
+15
View File
@@ -0,0 +1,15 @@
RetroBIOS: Where is the SD card?
NextUI keeps its BIOS files on its SD
card. Choose the card's root folder,
the one holding .system.
> Browse for a folder
Type a path
A/Enter Choose B/Esc Back ? Help
+24
View File
@@ -0,0 +1,24 @@
RetroBIOS: Where is the SD card?
NextUI keeps its BIOS files on its SD card. Choose the card's root folder, the
one holding .system.
> Browse for a folder
Type a path
A/Enter Choose B/Esc Back ? Help
+40
View File
@@ -0,0 +1,40 @@
RetroBIOS: Keys
Up/Down, k/j Move
PgUp/PgDn, L1/R1 Page
Home/End, g/G First, last
A/Enter, Start Install
Y, o, Tab Options
B/Esc, Backspace Back
q, Ctrl-C Quit
?, F1 This help
BIOS folder: /home/user/.config/retroarch/system
Any key closes this help
+12
View File
@@ -0,0 +1,12 @@
RetroBIOS: Keys
Up/Down, k/j Move
PgUp/PgDn, L1/R1 Page
Home/End, g/G First, last
A/Enter, Start Install
Y, o, Tab Options
B/Esc, Backspace Back
q, Ctrl-C Quit
?, F1 This help
Any key closes this help
+15
View File
@@ -0,0 +1,15 @@
RetroBIOS: Keys
Up/Down, k/j Move
PgUp/PgDn, L1/R1 Page
Home/End, g/G First, last
A/Enter, Start Install
Y, o, Tab Options
B/Esc, Backspace Back
q, Ctrl-C Quit
?, F1 This help
BIOS folder:
/home/user/.config/retroarch/system
Any key closes this help
+24
View File
@@ -0,0 +1,24 @@
RetroBIOS: Keys
Up/Down, k/j Move
PgUp/PgDn, L1/R1 Page
Home/End, g/G First, last
A/Enter, Start Install
Y, o, Tab Options
B/Esc, Backspace Back
q, Ctrl-C Quit
?, F1 This help
BIOS folder: /home/user/.config/retroarch/system
Any key closes this help
+40
View File
@@ -0,0 +1,40 @@
RetroBIOS: Installing
[##############################################---------------------------------------------] 50%
528.0 KB of 1.0 MB
132.0 KB/s, 0:04 left
2 of 4 files
What is done stays done if you stop.
FAILED scph5500.bin (HTTP 404)
ok gba_bios.bin
Ctrl-C / Start+Select stops
+12
View File
@@ -0,0 +1,12 @@
RetroBIOS: Installing
[###############----------------] 50%
528.0 KB of 1.0 MB
132.0 KB/s, 0:04 left
2 of 4 files
What is done stays done if you stop.
FAILED scph5500.bin (HTTP 404)
ok gba_bios.bin
Ctrl-C / Start+Select stops
+15
View File
@@ -0,0 +1,15 @@
RetroBIOS: Installing
[###############----------------] 50%
528.0 KB of 1.0 MB
132.0 KB/s, 0:04 left
2 of 4 files
What is done stays done if you stop.
FAILED scph5500.bin (HTTP 404)
ok gba_bios.bin
Ctrl-C / Start+Select stops
+24
View File
@@ -0,0 +1,24 @@
RetroBIOS: Installing
[####################################-----------------------------------] 50%
528.0 KB of 1.0 MB
132.0 KB/s, 0:04 left
2 of 4 files
What is done stays done if you stop.
FAILED scph5500.bin (HTTP 404)
ok gba_bios.bin
Ctrl-C / Start+Select stops
+40
View File
@@ -0,0 +1,40 @@
RetroBIOS: Options
Each row is an option of the command line, named on the right.
> Preferred regions: north-america, japan --region
Leave out game data: no --no-game-data
Installed cores only: no (1 found) --installed-cores
Cores: all --core
Parallel downloads: 8 --jobs
BIOS folder: ~/.config/retroarch/system --dest
Preview the file list --dry-run
Show the command line
A/Enter Change B/Esc Back Left/Right Set ? Help
+12
View File
@@ -0,0 +1,12 @@
RetroBIOS: Options
> Preferred regions: north-america, ja
Leave out game data: no
Installed cores only: no (1 found)
Cores: all
Parallel downloads: 8
BIOS folder: ~/.config/retroarch/sys
Preview the file list
Show the command line
A/Enter Change B/Esc Back
+15
View File
@@ -0,0 +1,15 @@
RetroBIOS: Options
> Preferred regions: north-america, ja
Leave out game data: no
Installed cores only: no (1 found)
Cores: all
Parallel downloads: 8
BIOS folder: ~/.config/retroarch/sys
Preview the file list
Show the command line
Sets --region
A/Enter Change B/Esc Back
+24
View File
@@ -0,0 +1,24 @@
RetroBIOS: Options
Each row is an option of the command line, named on the right.
> Preferred regions: north-america, japan --region
Leave out game data: no --no-game-data
Installed cores only: no (1 found) --installed-cores
Cores: all --core
Parallel downloads: 8 --jobs
BIOS folder: ~/.config/retroarch/system --dest
Preview the file list --dry-run
Show the command line
A/Enter Change B/Esc Back Left/Right Set ? Help
+40
View File
@@ -0,0 +1,40 @@
RetroBIOS: Type a path
The folder for RetroArch:
> ~/bios_
Quotes are removed, ~ and variables are expanded.
Enter Use this folder Esc Back
+12
View File
@@ -0,0 +1,12 @@
RetroBIOS: Type a path
The folder for RetroArch:
> ~/bios_
Quotes are removed, ~ and variables
are expanded.
Enter Use this folder Esc Back
+15
View File
@@ -0,0 +1,15 @@
RetroBIOS: Type a path
The folder for RetroArch:
> ~/bios_
Quotes are removed, ~ and variables
are expanded.
Enter Use this folder Esc Back
+24
View File
@@ -0,0 +1,24 @@
RetroBIOS: Type a path
The folder for RetroArch:
> ~/bios_
Quotes are removed, ~ and variables are expanded.
Enter Use this folder Esc Back
+40
View File
@@ -0,0 +1,40 @@
RetroBIOS: RetroArch
4 files to download, 1.0 MB
1 in place, 3 missing, 1 wrong copy
BIOS folder: ~/.config/retroarch/system
Free space: 50.0 GB
They are replaced, and the old copies are kept in a backup folder.
2 files of the list are not in the collection.
> Install
Choose systems
Options
Quit
A/Enter Install B/Esc Back Y/o Options ? Help
+12
View File
@@ -0,0 +1,12 @@
RetroBIOS: RetroArch
4 files to download, 1.0 MB
1 in place, 3 missing, 1 wrong copy
BIOS folder:
~/.config/retroarch/system
Free space: 50.0 GB
> Install
Choose systems
Options
Quit
A/Enter Install B/Esc Back
+15
View File
@@ -0,0 +1,15 @@
RetroBIOS: RetroArch
4 files to download, 1.0 MB
1 in place, 3 missing, 1 wrong copy
BIOS folder:
~/.config/retroarch/system
Free space: 50.0 GB
They are replaced, and the old copies
are kept in a backup folder.
> Install
Choose systems
Options
Quit
A/Enter Install B/Esc Back
+24
View File
@@ -0,0 +1,24 @@
RetroBIOS: RetroArch
4 files to download, 1.0 MB
1 in place, 3 missing, 1 wrong copy
BIOS folder: ~/.config/retroarch/system
Free space: 50.0 GB
They are replaced, and the old copies are kept in a backup folder.
2 files of the list are not in the collection.
> Install
Choose systems
Options
Quit
A/Enter Install B/Esc Back Y/o Options ? Help
+40
View File
@@ -0,0 +1,40 @@
RetroBIOS: RetroArch
Everything is in place
5 in place, 0 missing, 0 wrong copies
BIOS folder: ~/.config/retroarch/system
Free space: 50.0 GB
> Close
Options
A/Enter Close B/Esc Back Y/o Options ? Help
+12
View File
@@ -0,0 +1,12 @@
RetroBIOS: RetroArch
Everything is in place
5 in place, 0 missing, 0 wrong copies
BIOS folder:
~/.config/retroarch/system
Free space: 50.0 GB
> Close
Options
A/Enter Close B/Esc Back Y/o Options
+15
View File
@@ -0,0 +1,15 @@
RetroBIOS: RetroArch
Everything is in place
5 in place, 0 missing, 0 wrong copies
BIOS folder:
~/.config/retroarch/system
Free space: 50.0 GB
> Close
Options
A/Enter Close B/Esc Back Y/o Options
+24
View File
@@ -0,0 +1,24 @@
RetroBIOS: RetroArch
Everything is in place
5 in place, 0 missing, 0 wrong copies
BIOS folder: ~/.config/retroarch/system
Free space: 50.0 GB
> Close
Options
A/Enter Close B/Esc Back Y/o Options ? Help
+40
View File
@@ -0,0 +1,40 @@
RetroBIOS: Which setup?
Choose the setup that will use the BIOS files.
Filter (/ to type)
> RetroArch
Batocera
Recalbox
RetroBat
EmuDeck
Lakka
RetroDECK
ROCKNIX
RomM
BizHawk
MiSTer FPGA
RetroPie
AmberELEC
EmuELEC
KNULLI
MinUI
NextUI
MyMinUI
A/Enter Choose B/Esc Back / Filter ? Help
+12
View File
@@ -0,0 +1,12 @@
RetroBIOS: Which setup?
Filter (/ to type)
> RetroArch
Batocera
Recalbox
RetroBat
EmuDeck
Lakka
RetroDECK
1-8 of 19
A/Enter Choose B/Esc Back / Filter
+15
View File
@@ -0,0 +1,15 @@
RetroBIOS: Which setup?
Filter (/ to type)
> RetroArch
Batocera
Recalbox
RetroBat
EmuDeck
Lakka
RetroDECK
ROCKNIX
RomM
BizHawk
1-11 of 19
A/Enter Choose B/Esc Back / Filter
+24
View File
@@ -0,0 +1,24 @@
RetroBIOS: Which setup?
Choose the setup that will use the BIOS files.
Filter (/ to type)
> RetroArch
Batocera
Recalbox
RetroBat
EmuDeck
Lakka
RetroDECK
ROCKNIX
RomM
BizHawk
MiSTer FPGA
RetroPie
AmberELEC
EmuELEC
KNULLI
MinUI
NextUI
MyMinUI
A/Enter Choose B/Esc Back / Filter ? Help
+40
View File
@@ -0,0 +1,40 @@
RetroBIOS: Preview
4 files to download, 1.0 MB. Nothing is written.
missing 512.0 KB scph5500.bin
wrong copy 512.0 KB scph5501.bin
missing 4 B pcsx/extra.bin
missing 16.0 KB gba_bios.bin
A/Enter Back Up/Down Scroll
+12
View File
@@ -0,0 +1,12 @@
RetroBIOS: Preview
4 files to download, 1.0 MB. Nothing
is written.
missing 512.0 KB scph5500.bin
wrong copy 512.0 KB scph5501.bin
missing 4 B pcsx/extra.bin
missing 16.0 KB gba_bios.bin
A/Enter Back Up/Down Scroll
+15
View File
@@ -0,0 +1,15 @@
RetroBIOS: Preview
4 files to download, 1.0 MB. Nothing
is written.
missing 512.0 KB scph5500.bin
wrong copy 512.0 KB scph5501.bin
missing 4 B pcsx/extra.bin
missing 16.0 KB gba_bios.bin
A/Enter Back Up/Down Scroll
+24
View File
@@ -0,0 +1,24 @@
RetroBIOS: Preview
4 files to download, 1.0 MB. Nothing is written.
missing 512.0 KB scph5500.bin
wrong copy 512.0 KB scph5501.bin
missing 4 B pcsx/extra.bin
missing 16.0 KB gba_bios.bin
A/Enter Back Up/Down Scroll
+40
View File
@@ -0,0 +1,40 @@
RetroBIOS: Quit?
Quit without installing? Nothing was written.
> Quit
Stay
A/Enter Choose B/Esc Stay
+12
View File
@@ -0,0 +1,12 @@
RetroBIOS: Quit?
Quit without installing? Nothing was
written.
> Quit
Stay
A/Enter Choose B/Esc Stay
+15
View File
@@ -0,0 +1,15 @@
RetroBIOS: Quit?
Quit without installing? Nothing was
written.
> Quit
Stay
A/Enter Choose B/Esc Stay
+24
View File
@@ -0,0 +1,24 @@
RetroBIOS: Quit?
Quit without installing? Nothing was written.
> Quit
Stay
A/Enter Choose B/Esc Stay
+40
View File
@@ -0,0 +1,40 @@
RetroBIOS: Preferred regions
Tick the regions to keep, best first. Where a system has one BIOS per region, the best one found
is installed.
> [1] north-america
[ ] japan
A/Enter Tick B/Esc Done Left/Right Order ? Help
+12
View File
@@ -0,0 +1,12 @@
RetroBIOS: Preferred regions
Tick the regions to keep, best first.
Where a system has one BIOS per
region, the best one found is
installed.
> [1] north-america
[ ] japan
A/Enter Tick B/Esc Done
+15
View File
@@ -0,0 +1,15 @@
RetroBIOS: Preferred regions
Tick the regions to keep, best first.
Where a system has one BIOS per
region, the best one found is
installed.
> [1] north-america
[ ] japan
A/Enter Tick B/Esc Done
+24
View File
@@ -0,0 +1,24 @@
RetroBIOS: Preferred regions
Tick the regions to keep, best first. Where a system has one BIOS per region,
the best one found is installed.
> [1] north-america
[ ] japan
A/Enter Tick B/Esc Done Left/Right Order ? Help
+40
View File
@@ -0,0 +1,40 @@
RetroBIOS: Finished with errors
3 installed, 1 failed.
BIOS folder: /home/user/.config/retroarch/system
failed: scph5500.bin (HTTP 404)
The files it replaced are kept in /home/user/.config/retroarch/retrobios-backup/2026-10-23_1200
To put them back: python3 install.py --restore
/home/user/.config/retroarch/retrobios-backup/2026-10-23_1200
2 files of the list are not in the collection, 1 of them needed to start an emulator.
Same choice without questions:
python3 install.py --platform retroarch --dest /home/user/.config/retroarch/system
Details: /tmp/retrobios-x/install.log
A/Enter Exit Up/Down Scroll
+12
View File
@@ -0,0 +1,12 @@
RetroBIOS: Finished with errors
3 installed, 1 failed.
BIOS folder:
/home/user/.config/retroarch/system
failed: scph5500.bin (HTTP 404)
The files it replaced are kept in
/home/user/.config/retroarch/
retrobios-backup/2026-10-23_1200
To put them back: python3 install.py
1-8 of 20
A/Enter Exit Up/Down Scroll
+15
View File
@@ -0,0 +1,15 @@
RetroBIOS: Finished with errors
3 installed, 1 failed.
BIOS folder:
/home/user/.config/retroarch/system
failed: scph5500.bin (HTTP 404)
The files it replaced are kept in
/home/user/.config/retroarch/
retrobios-backup/2026-10-23_1200
To put them back: python3 install.py
--restore
/home/user/.config/retroarch/
retrobios-backup/2026-10-23_1200
1-11 of 20
A/Enter Exit Up/Down Scroll
+24
View File
@@ -0,0 +1,24 @@
RetroBIOS: Finished with errors
3 installed, 1 failed.
BIOS folder: /home/user/.config/retroarch/system
failed: scph5500.bin (HTTP 404)
The files it replaced are kept in
/home/user/.config/retroarch/retrobios-backup/2026-10-23_1200
To put them back: python3 install.py --restore
/home/user/.config/retroarch/retrobios-backup/2026-10-23_1200
2 files of the list are not in the collection, 1 of them needed to start an
emulator.
Same choice without questions:
python3 install.py --platform retroarch --dest
/home/user/.config/retroarch/system
Details: /tmp/retrobios-x/install.log
A/Enter Exit Up/Down Scroll
+40
View File
@@ -0,0 +1,40 @@
RetroBIOS: Where do you play?
Found on this machine:
> RetroArch ~/.config/retroarch/system
KNULLI (Batocera files) /userdata/bios
Another setup or folder
BIOS folder: /home/user/.config/retroarch/system
ES-DE found: its BIOS files go to each emulator, not to ES-DE itself.
A/Enter Continue B/Esc Quit ? Help
+12
View File
@@ -0,0 +1,12 @@
RetroBIOS: Where do you play?
Found on this machine:
> RetroArch
KNULLI (Batocera files)
Another setup or folder
BIOS folder:
/home/user/.config/retroarch/system
ES-DE found: its BIOS files go to each
A/Enter Continue B/Esc Quit ? Help
+15
View File
@@ -0,0 +1,15 @@
RetroBIOS: Where do you play?
Found on this machine:
> RetroArch
KNULLI (Batocera files)
Another setup or folder
BIOS folder:
/home/user/.config/retroarch/system
ES-DE found: its BIOS files go to each
emulator, not to ES-DE itself.
A/Enter Continue B/Esc Quit ? Help
+24
View File
@@ -0,0 +1,24 @@
RetroBIOS: Where do you play?
Found on this machine:
> RetroArch ~/.config/retroarch/system
KNULLI (Batocera files) /userdata/bios
Another setup or folder
BIOS folder: /home/user/.config/retroarch/system
ES-DE found: its BIOS files go to each emulator, not to ES-DE itself.
A/Enter Continue B/Esc Quit ? Help
+40
View File
@@ -0,0 +1,40 @@
RetroBIOS: Choose systems
All
None
Filter (/ to type)
> [x] nintendo-gba (gba) 1 file, 16.0 KB
[x] sony-playstation 3 files, 1.0 MB
[ ] nintendo-famicom-disk (ファミコン) in place
2 of 3 systems: 4 files, 1.0 MB
A/Enter Continue B/Esc Back X/Space Tick ? Help
+12
View File
@@ -0,0 +1,12 @@
RetroBIOS: Choose systems
All
None
Filter (/ to type)
> [x] nintendo-gba (gba) 16.0 KB
[x] sony-playstation 1.0 MB
[ ] nintendo-famicom-disk in place
2 of 3 systems: 4 files, 1.0 MB
A/Enter Continue B/Esc Back
+15
View File
@@ -0,0 +1,15 @@
RetroBIOS: Choose systems
All
None
Filter (/ to type)
> [x] nintendo-gba (gba) 16.0 KB
[x] sony-playstation 1.0 MB
[ ] nintendo-famicom-disk in place
2 of 3 systems: 4 files, 1.0 MB
A/Enter Continue B/Esc Back
+24
View File
@@ -0,0 +1,24 @@
RetroBIOS: Choose systems
All
None
Filter (/ to type)
> [x] nintendo-gba (gba) 1 file, 16.0 KB
[x] sony-playstation 3 files, 1.0 MB
[ ] nintendo-famicom-disk (ファミコン) in place
2 of 3 systems: 4 files, 1.0 MB
A/Enter Continue B/Esc Back X/Space Tick ? Help
File diff suppressed because it is too large. Load diff
+54
View File
@@ -79,6 +79,57 @@ from the text and calling it passes the arguments through:
--platform retroarch --dest D:\bios
```
## The full-screen interface { #the-full-screen-interface }
Run at a terminal, the installer opens a full screen that a keyboard or a
controller drives. Three presses of A or Enter install everything your setup
reads: the setup found here, the plan, then the result. The plan screen says
how many files are missing, how much they weigh, how many are in place and how
much space is free, before anything is written.
The other choices sit one press away. **Choose systems** ticks the consoles you
play, with the total to download under the list. **Options** sets the
preferred regions, game data, the installed cores only, the cores, the parallel
downloads and the folder. Each row names the option it sets, and **Show the
command line** gives the same choice as one command for a script. **Preview the
file list** shows what would be downloaded and writes nothing. When a choice
changes the plan, the exact count appears before the install starts.
| Action | Keyboard | Controller |
|--------|----------|------------|
| Move | Up and Down, `k` and `j` | D-pad Up and Down |
| Page | PgUp and PgDn | L1 and R1 |
| First, last | Home and End, `g` and `G` | |
| Continue, open, choose | Enter, Space | A, Start |
| Tick, untick | Space, Right, Left | X, D-pad Right and Left |
| Back | Esc, Backspace | B, Select |
| Options | `o`, Tab | Y |
| Filter a long list | `/` then type | the Filter row |
| Keys of the screen | `?`, F1 | |
| Quit | `q`, Ctrl+C | B on the first screen |
The bottom line of each screen names its keys, with both spellings (`A/Enter`,
`B/Esc`), since A and B swap places between controller layouts. On the regions
screen, Left and Right move the region under the cursor up and down the order of
preference. During the download, Ctrl+C stops after the files in progress, and
the result says how many were installed. The result stays printed in the
terminal once the screen closes, with the command that repeats the run.
It opens only for an install, at a terminal of at least 40 columns and 12 rows
that is not `TERM=dumb`. A listing, `--check`, `--dry-run`, `--events`,
`--quiet`, `--no-input`, `--yes` and `--restore` keep the plain output. Options
given on the command line fill the screens in advance and are kept as they are.
- `--tui` asks for the full screen, and names the reason when it cannot open
(code 2).
- `--plain`, `RETROBIOS_PLAIN=1` or `ACCESSIBLE=1` keep the questions line by
line. This is the mode for a screen reader, which reads a full screen badly.
Behind the screens, the installer runs itself with `--check --events`, then
`--events --yes` and the options chosen: the same
[events](#machine-readable-events) a program driving the installer reads. The
file list is downloaded once and handed to each run.
## What the installer does
1. Detects the host OS and the platforms installed on it.
@@ -518,6 +569,8 @@ what the options name, everything by default.
| `--from-pack PATH` | Install from a pack already downloaded: its ZIP, one of its parts (the others are found in the same folder), or the folder holding them. Makes no network request and checks every file's hash. See [Without a network](#without-a-network-offline-install) |
| `--manifest FILE` | Read the file list from FILE, a copy of `install/<platform>.json`, instead of downloading it. See [Without a network](#without-a-network-offline-install) |
| `--restore FOLDER` | Put back the files a run replaced and kept in FOLDER, a dated folder inside `retrobios-backup`. Takes no other option but `--dry-run` and `--no-input`. See [Files you already had](#files-you-already-had) |
| `--tui` | Open the full-screen interface, or stop with the reason it cannot open here (code 2) instead of falling back to the questions. Wins over `RETROBIOS_PLAIN` and `ACCESSIBLE`. See [The full-screen interface](#the-full-screen-interface) |
| `--plain` | Ask the questions line by line instead of the full-screen interface, the mode for a screen reader. See [The full-screen interface](#the-full-screen-interface) |
| `--version` | Print the installer's identity, the first 12 hex digits of the SHA-256 the bootstraps pin |
| `--list-platforms` | Print the supported platforms and what was detected here |
| `--list-targets` | Print the hardware targets a platform publishes, with the core count each carries |
@@ -1069,6 +1122,7 @@ no event at all. A program reads a missing `end` as that case.
| `RETROBIOS_INSTALL_SHA256` | The SHA-256 the bootstrap requires of that installer, 64 hex characters. When either of these two is set and the fingerprint does not match, the error names the variable instead of suggesting a retry |
| `RETROBIOS_BOOTSTRAP` | Set by `install.sh` (`sh`) and `install.ps1` (`ps1`) for the temporary installer they run, so that its hints give back the one-line command rather than `python3 install.py` |
| `NO_COLOR` | Plain text, no colour, even at a terminal. `TERM=dumb` also turns the live progress line off |
| `RETROBIOS_PLAIN`, `ACCESSIBLE` | Set to anything but `0`: the questions come line by line, as with `--plain`, instead of the full-screen interface |
| `HTTPS_PROXY`, `NO_PROXY` | Honoured for every download through the standard library's default proxy handling: one names the proxy, the other the hosts to reach directly |
## When something goes wrong
+6 -3
View File
@@ -36,8 +36,11 @@ needs `pyyaml` and `jsonschema` installed for that interpreter. The
schema contract tests also need `jsonschema[format-nongpl]`, and one site test
renders a wiki line with `markdown`. The CI installs both: without them those
tests are reported as skipped, so install them before a pull request
(`pip install "jsonschema[format-nongpl]" markdown`). No test framework beyond
the standard library `unittest` module.
(`pip install "jsonschema[format-nongpl]" markdown`). The installer's
full-screen tests drive `install.py --tui` on a pseudo-terminal and read the
screen back with `pyte`, and fuzz the key decoder with `hypothesis`: both skip
without them (`pip install pyte hypothesis`). No test framework beyond the
standard library `unittest` module.
## Modules at a glance
@@ -51,7 +54,7 @@ Every module in `tests/`, by the area it guards.
| Packs and manifests | synthetic + real packs | `test_artifact_lock`, `test_atomic_artifacts`, `test_batocera_cores`, `test_deterministic_zip`, `test_emulator_pack_counts`, `test_finalize_pack_names`, `test_large_file_cache`, `test_libretro_layout`, `test_manifest_entry`, `test_minui_platform`, `test_no_game_data`, `test_pack_conformance_dirs`, `test_pack_core_extras`, `test_pack_counts`, `test_pack_destinations`, `test_pack_failures`, `test_pack_file_names`, `test_pack_grouping`, `test_pack_integrity`, `test_pack_member_identity`, `test_pack_readme`, `test_platform_inheritance`, `test_platform_keys`, `test_required_only_archives`, `test_required_only_twins`, `test_save_root`, `test_split_extras`, `test_split_names`, `test_split_pack`, `test_system_pack_extras`, `test_system_pack_parity`, `test_torrentzip`, `test_which_pack` |
| Slots and regions | synthetic + profiles | `test_region`, `test_region_agnostic_scan`, `test_region_groups`, `test_region_held`, `test_region_platform_index`, `test_region_required_only`, `test_slot`, `test_slots`, `test_slots_shipped_file` |
| Hardware targets and systems | synthetic + target files | `test_extract_targets`, `test_lakka_targets`, `test_libretro_slugs`, `test_system_ids`, `test_system_selection`, `test_target_names`, `test_target_scrapers`, `test_target_systems`, `test_target_verify` |
| Installer and downloads | loopback server | `test_check_release`, `test_download`, `test_install`, `test_install_cores`, `test_install_experience`, `test_install_offline`, `test_install_selection` |
| Installer and downloads | loopback server | `test_check_release`, `test_download`, `test_install`, `test_install_cores`, `test_install_experience`, `test_install_offline`, `test_install_selection`, `test_install_tui` |
| Handheld port | stubbed PortMaster dialogs, fake installer | `test_port` |
| Truth and native export | synthetic + cached originals | `test_export_counts`, `test_export_native_layer`, `test_export_report`, `test_exporters`, `test_truth_data_dir_readers`, `test_truth_diff`, `test_truth_layout` |
| Scrapers, upstream and provenance | inline sources, synthetic | `test_batocera_md5_list`, `test_check_freshness`, `test_contributing_text`, `test_coverage_cache`, `test_data_dir_refs`, `test_dataclass_defaults`, `test_dedup`, `test_doc_pages`, `test_doc_surfaces`, `test_elec_scrapers`, `test_fbneo_parser`, `test_find_pinned_revision`, `test_hash_merge`, `test_launchers`, `test_launchers_emudeck`, `test_launchers_recalbox`, `test_launchers_retrobat`, `test_launchers_retrodeck`, `test_launchers_retropie`, `test_launchers_rocknix`, `test_mame_devices`, `test_mame_parser`, `test_mame_ref_audit`, `test_optional_dependencies`, `test_profile_sync`, `test_prose_style`, `test_provenance`, `test_refresh_data_dirs`, `test_refresh_failures`, `test_refresh_stale`, `test_retrodeck_scraper_errors`, `test_romset_recipes`, `test_schema_semantic_gate`, `test_scraper_contract`, `test_site_availability`, `test_site_content_data`, `test_site_copy`, `test_site_cores`, `test_site_emulator_page`, `test_site_exports`, `test_site_funnel`, `test_site_images`, `test_site_picker`, `test_site_platform_hashes`, `test_site_r2_components`, `test_site_r2_css`, `test_site_r2_emulators`, `test_site_r2_entry`, `test_site_r2_gate`, `test_site_r2_nav`, `test_site_r2_p0`, `test_site_r2_reference`, `test_site_r2_systems`, `test_site_r2_wiki`, `test_site_r3_collection`, `test_site_r3_components`, `test_site_r3_css`, `test_site_r3_emulators`, `test_site_r3_entry`, `test_site_r3_nav`, `test_site_r3_p0`, `test_site_r3_reference`, `test_site_r3_systems`, `test_site_r3_wiki`, `test_site_render`, `test_site_system_links`, `test_site_validation`, `test_site_weight`, `test_site_write`, `test_upstream`, `test_upstream_index`, `test_validate_pr`, `test_validate_pr_flow`, `test_validate_pr_hashes`, `test_workflow_paths` |