ihaveahax 4ef0fdaf55 flake.lock: Update
Flake lock file updates:

• Updated input 'finalize':
    'path:finalize?lastModified=1&narHash=sha256-BZgu7%2B/RV9Gy1xo/icz5kd2fKCa3Zow%2BZz6MJWzpgMM%3D' (1970-01-01)
  → 'path:finalize?lastModified=1&narHash=sha256-l/kWyaSg45ceXjU/Loho6iO5T6qffLqPr7gkjkowP3o%3D' (1970-01-01)
• Updated input 'hax-nur':
    'github:ihaveamac/nur-packages/8ebcd637fd5cd8e673c8e01ed408bf206f9d4f9b' (2026-01-11)
  → 'github:ihaveamac/nur-packages/33fffc0a25a42a280b5b0f65434f3c8b3c9d4d27' (2026-06-04)
• Updated input 'hax-nur/treefmt-nix':
    'github:numtide/treefmt-nix/0c445aa21b01fd1d4bb58927f7b268568af87b20' (2026-01-10)
  → 'github:numtide/treefmt-nix/db947814a175b7ca6ded66e21383d938df01c227' (2026-05-31)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/3146c6aa9995e7351a398e17470e15305e6e18ff' (2026-01-10)
  → 'github:NixOS/nixpkgs/ffa10e26ae11d676b2db836259889f1f571cb14f' (2026-06-02)
• Updated input 'pyctr':
    'github:ihaveamac/pyctr/eb8d4d06ce7339727d3f72b40f45ec3260336058' (2025-11-19)
  → 'github:ihaveamac/pyctr/956cd894b61534a8160fc496afa137e957606c90' (2026-01-12)
• Added input 'pyctr/treefmt-nix':
    'github:numtide/treefmt-nix/e96d59dff5c0d7fddb9d113ba108f03c3ef99eca' (2026-01-11)
• Added input 'pyctr/treefmt-nix/nixpkgs':
    follows 'pyctr/nixpkgs'
2026-06-05 00:20:27 -05:00
2026-01-11 16:27:24 -06:00
2026-01-07 22:38:29 -06:00
2026-06-05 00:20:27 -05:00
2026-01-11 17:09:49 -06:00
2026-06-05 00:17:09 -05:00

custom-install

Installs a title directly to an SD card for the Nintendo 3DS. Originally created late June 2019.

Summary

Windows standalone

  1. Dump boot9.bin and movable.sed from a 3DS system.
  2. Download the latest releases.
  3. Extract and run ci-gui. Read windows-quickstart.txt.

With installed Python

Note

Windows users: Enabling "Add Python 3.X to PATH" is NOT required! Python is installed with the py launcher by default.

  1. Dump boot9.bin and movable.sed from a 3DS system.
  2. Install the packages:
  • Windows: py -3 -m pip install --user --upgrade https://github.com/ihaveamac/custom-install/archive/refs/heads/python-package.zip
  • macOS/Linux: python3 -m pip install --user --upgrade https://github.com/ihaveamac/custom-install/archive/refs/heads/python-package.zip

To run the GUI:

  • Windows: py -3 -m custominstall.gui
  • macOS/Linux: python3 -m custominstall.gui

To run the command line version:

  • Windows: py -3 -m custominstall
  • macOS/Linux: python3 -m custominstall

Setup

Linux users must build wwylele/save3ds and place save3ds_fuse in one of these places:

  • A directory in PATH
  • In custominstall/bin/linux
  • Set the environment variable CUSTOM_INSTALL_SAVE3DS_PATH to the save3ds_fuse binary

movable.sed is required and can be provided with -m or --movable.

boot9 is needed:

  • -b or --boot9 argument (if set)
  • BOOT9_PATH environment variable (if set)
  • %APPDATA%\3ds\boot9.bin (Windows-specific)
  • ~/Library/Application Support/3ds/boot9.bin (macOS-specific)
  • ~/.3ds/boot9.bin
  • ~/3ds/boot9.bin

A SeedDB is needed for newer games (2015+) that use seeds.
SeedDB is checked in order of:

  • -s or --seeddb argument (if set)
  • SEEDDB_PATH environment variable (if set)
  • %APPDATA%\3ds\seeddb.bin (Windows-specific)
  • ~/Library/Application Support/3ds/seeddb.bin (macOS-specific)
  • ~/.3ds/seeddb.bin
  • ~/3ds/seeddb.bin

custom-install-finalize

custom-install-finalize installs a ticket, plus a seed if required. This is required for the title to appear and function.

This can be built as most 3DS homebrew projects with devkitARM.

Usage

Use -h to view arguments.

Examples:

py -3 -m custominstall -b boot9.bin -m movable.sed --sd E:\ file.cia file2.cia
python3 -m custominstall -b boot9.bin -m movable.sed --sd /Volumes/GM9SD file.cia file2.cia
python3 -m custominstall -b boot9.bin -m movable.sed --sd /media/GM9SD file.cia file2.cia

GUI

A GUI is provided to make the process easier.

GUI Setup

Linux users may need to install a Tk package:

  • Ubuntu/Debian: sudo apt install python3-tk
  • Arch: sudo pacman -S tk
  • Fedora: sudo dnf install python3-tkinter

Development

Building Windows standalone

Warning

This section is OUTDATED and currently does not work with the Python package setup.

License/Credits

save3ds by wwylele is used to interact with the Title Database (details in bin/README).

Thanks to @nek0bit for redesigning custominstall.py to work as a module, and for implementing an earlier GUI.

Thanks to @LyfeOnEdge from the brewtools Discord for designing the second version of the GUI. Special thanks to CrafterPika and archbox for testing.

Thanks to @BpyH64 for researching how to generate the cmacs.

Description
Installs a title directly to an SD card for the Nintendo 3DS
Readme 6.3 MiB
Languages
Python 77.4%
Makefile 12.3%
C 9.5%
Batchfile 0.8%