Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/megatonhammer/linkle

The legendary hero that can create various Nintendo Switch formats from her rusty crossbows
https://github.com/megatonhammer/linkle

homebrew nintendo nintendo-switch rust switch tool

Last synced: 3 days ago
JSON representation

The legendary hero that can create various Nintendo Switch formats from her rusty crossbows

Awesome Lists containing this project

README

        

[![MIT license](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/MegatonHammer/linkle/master/LICENSE-MIT)
[![Apache 2 license](https://img.shields.io/badge/license-Apache-blue.svg)](https://raw.githubusercontent.com/MegatonHammer/linkle/master/LICENSE-APACHE)
[![Discord](https://img.shields.io/discord/439418034130780182.svg)]( https://discord.gg/MZJbNZY)

# Introduction

This program permits to convert or create various formats used on the Nintendo Switch.
For now, it only supports the creation of PFS0/NSP and 64 bits NRO/NSO. It can also
be used with cargo through `cargo nro` to simplify the build process of Megaton-Hammer
homebrew.

# Installation

## Source Installation

Assuming you have `cargo` installed, `cargo install --features=binaries linkle`
will install `linkle` and the `cargo nro` subcommand.

## Binary Installation

Alternatively, you can download the `linkle` binary for Windows, MacOS and Linux
ARM64 in the [Github Releases](https://github.com/MegatonHammer/linkle/releases).

# Usage

Creating a NRO file:

linkle nro input.elf output.nro

Creating a NSO file:

linkle nso input.elf output.nso

Creating a PFS0/NSP file:

linkle pfs0 input_directory output.pfs0

Creating a NACP file:

linkle ncap input.json output.nacp

Creating a RomFs file:

linkle romfs input_directory output.romfs

Compiling and creating an NRO file (requires xargo, use `cargo install xargo` to install):

cargo nro

# Cargo.toml metadata format

When compiling a project with `cargo nro`, a special `[package.metadata.linkle.BINARY_NAME]` key is
used to allow customizing the build. This is an example Cargo.toml:

```
[package]
name = "link"
version = "0.1.0"
authors = ["linkle"]

[package.metadata.linkle.megaton-example]
romfs = "res/"
icon = "icon.jpeg"
titleid = "0100000000819"

[package.metadata.linkle.megaton-example.nacp]
name = "Link"

[package.metadata.linkle.megaton-example.nacp.lang.ja]
"name": "リンク",
"author": "リンクル"
```

All paths are relative to the project root (where the Cargo.toml file is located).

Every field has a sane default:

| Field | Description | Default value |
| ----------------- |:------------------------------------------------:| -------------------:|
| romfs | The application romfs directory. | res/ |
| icon | The application icon. | icon.jpg |
| title_id | The application title id. | 0000000000000000 |

The `[package.metadata.linkle.BINARY_NAME.nacp]` key follows the [NACP input format](#nacp-input-format)

# NACP input format

This is an example of a compatible JSON:

```json
{
"name": "Link",
"author": "Linkle",
"version": "1.0.0",
"title_id": "0400000000020000",
"lang": {
"ja": {
"name": "リンク",
"author": "リンクル"
}
}
}
```

## Fields

NOTE: Every fields are optional

| Field | Description | Default value |
| ----------------- |:------------------------------------------------:| -------------------:|
| name | The application name. | Unknown Application |
| author | The application author. | Unknown Author |
| version | The application version. | 1.0.0 |
| title_id | The application title id. | 0000000000000000 |
| dlc_base_title_id | The base id of all the title DLC. | title_id + 0x1000 |
| lang (object) | Different name/author depending of the language | use name and author |

| Supported Languages|
|:------------------:|
| en-US |
| en-GB |
| ja |
| fr |
| de |
| es-419 |
| es |
| it |
| nl |
| fr-CA |
| pt |
| ru |
| ko |
| zh-TW |
| zh-CN |