Compare commits
7 commits
Author | SHA1 | Date | |
---|---|---|---|
35560c76b1 | |||
01e12978bf | |||
|
3634bb8b17 | ||
|
1db317c18e | ||
|
7387d14ebd | ||
|
5fa8b11896 | ||
|
59deacbc77 |
2
Builder/.gitignore
vendored
2
Builder/.gitignore
vendored
|
@ -1,5 +1,7 @@
|
|||
config.py
|
||||
.vscode
|
||||
tmp/
|
||||
*.zip
|
||||
|
||||
# Byte-compiled / optimized / DLL files
|
||||
__pycache__/
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -26,6 +26,7 @@ icon=bootloader/res/icon_payload.bmp
|
|||
{}
|
||||
|
||||
[CFW (EMUMMC)]
|
||||
emummcforce=1
|
||||
fss0=atmosphere/fusee-secondary.bin
|
||||
atmosphere=1
|
||||
logopath=bootloader/bootlogo.bmp
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/env python
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Kosmos Builder
|
||||
# Copyright (C) 2020 Nichole Mattera
|
||||
|
@ -33,7 +33,7 @@ def parse_args():
|
|||
'-v', '--version',
|
||||
default=None,
|
||||
type=str,
|
||||
help='Overides the Kosmos Version from the config file.',
|
||||
help='Overrides the Kosmos Version from the config file.',
|
||||
metavar='KosmosVersion')
|
||||
subparsers = parser.add_subparsers()
|
||||
|
||||
|
@ -52,6 +52,11 @@ def parse_args():
|
|||
help='Perform an auto build.')
|
||||
parser_sdsetup.set_defaults(command=common.Command.SDSetup)
|
||||
|
||||
# Kosmos Minimal subcommands
|
||||
parser_kosmos = subparsers.add_parser('kosmos-mini', help='Create a release build of Kosmos Minimal.')
|
||||
parser_kosmos.add_argument('output', help='Zip file to create.')
|
||||
parser_kosmos.set_defaults(command=common.Command.KosmosMinimal)
|
||||
|
||||
# Parse arguments
|
||||
args = parser.parse_args()
|
||||
|
||||
|
@ -71,6 +76,8 @@ def init_version_messages(args, kosmos_version):
|
|||
return [ f'Kosmos {kosmos_version} built with:' ]
|
||||
elif args.command == common.Command.SDSetup and not args.auto:
|
||||
return [ 'SDSetup Modules built with:' ]
|
||||
elif args.command == common.Command.KosmosMinimal:
|
||||
return [ f'Kosmos Minimal {kosmos_version} built with:' ]
|
||||
return []
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
@ -86,21 +93,20 @@ if __name__ == '__main__':
|
|||
|
||||
version_messages = init_version_messages(args, kosmos_version)
|
||||
|
||||
is_kosmos_build = args.command == common.Command.Kosmos
|
||||
build_messages = modules.build(temp_directory, kosmos_version, is_kosmos_build, auto_build)
|
||||
build_messages = modules.build(temp_directory, kosmos_version, args.command, auto_build)
|
||||
|
||||
common.delete_path(args.output)
|
||||
|
||||
if build_messages is not None:
|
||||
version_messages += build_messages
|
||||
|
||||
if is_kosmos_build:
|
||||
if args.command == common.Command.SDSetup:
|
||||
shutil.move(temp_directory, args.output)
|
||||
else:
|
||||
shutil.make_archive(
|
||||
os.path.splitext(args.output)[0],
|
||||
'zip',
|
||||
temp_directory)
|
||||
else:
|
||||
shutil.move(temp_directory, args.output)
|
||||
|
||||
common.delete_path(os.path.join(os.getcwd(), 'tmp'))
|
||||
|
||||
|
|
|
@ -28,10 +28,12 @@ import uuid
|
|||
class Command(enum.Enum):
|
||||
Kosmos = 0
|
||||
SDSetup = 1
|
||||
KosmosMinimal = 2
|
||||
|
||||
class GitService(enum.Enum):
|
||||
GitHub = 0
|
||||
GitLab = 1
|
||||
SourceForge = 2
|
||||
|
||||
def generate_temp_path():
|
||||
return os.path.join(os.getcwd(), 'tmp', str(uuid.uuid4()))
|
||||
|
@ -63,3 +65,13 @@ def sed(pattern, replace, file_path):
|
|||
def mkdir(path):
|
||||
if not os.path.exists(path):
|
||||
os.makedirs(path)
|
||||
|
||||
def move_contents_of_folder(source, dest):
|
||||
files = os.listdir(source)
|
||||
|
||||
for f in files:
|
||||
if os.path.isdir(os.path.join(source, f)):
|
||||
mkdir(os.path.join(dest, f))
|
||||
move_contents_of_folder(os.path.join(source, f), os.path.join(dest, f))
|
||||
else:
|
||||
shutil.move(os.path.join(source, f), dest)
|
||||
|
|
33
Builder/kosmos-minimal.json
Normal file
33
Builder/kosmos-minimal.json
Normal file
|
@ -0,0 +1,33 @@
|
|||
[
|
||||
{
|
||||
"name": "Atmosphère",
|
||||
"download_function_name": "download_atmosphere",
|
||||
"git": {
|
||||
"service": 0,
|
||||
"org_name": "Atmosphere-NX",
|
||||
"repo_name": "Atmosphere",
|
||||
"asset_patterns": [
|
||||
".*atmosphere.*\\.zip",
|
||||
".*fusee.*\\.bin"
|
||||
],
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup_module_name": null
|
||||
},
|
||||
{
|
||||
"name": "Hekate",
|
||||
"download_function_name": "download_hekate",
|
||||
"git": {
|
||||
"service": 0,
|
||||
"org_name": "CTCaer",
|
||||
"repo_name": "hekate",
|
||||
"asset_patterns": [
|
||||
".*hekate.*\\.zip"
|
||||
],
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup_module_name": null
|
||||
}
|
||||
]
|
|
@ -10,12 +10,10 @@
|
|||
".*atmosphere.*\\.zip",
|
||||
".*fusee.*\\.bin"
|
||||
],
|
||||
"group": null
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup": {
|
||||
"included": true,
|
||||
"name": "must_have"
|
||||
}
|
||||
"sdsetup_module_name": null
|
||||
},
|
||||
{
|
||||
"name": "Hekate",
|
||||
|
@ -27,12 +25,25 @@
|
|||
"asset_patterns": [
|
||||
".*hekate.*\\.zip"
|
||||
],
|
||||
"group": null
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup": {
|
||||
"included": true,
|
||||
"name": "hekate"
|
||||
}
|
||||
"sdsetup_module_name": null
|
||||
},
|
||||
{
|
||||
"name": "Hekate Icons",
|
||||
"download_function_name": "download_hekate_icons",
|
||||
"git": {
|
||||
"service": 0,
|
||||
"org_name": "NicholeMattera",
|
||||
"repo_name": "Hekate-Icons",
|
||||
"asset_patterns": [
|
||||
".*\\.zip"
|
||||
],
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup_module_name": null
|
||||
},
|
||||
{
|
||||
"name": "Homebrew App Store",
|
||||
|
@ -44,12 +55,10 @@
|
|||
"asset_patterns": [
|
||||
"\\[.*\\.nro\\.zip\\]\\((.*\\.nro\\.zip)\\)"
|
||||
],
|
||||
"group": 0
|
||||
"group": 0,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup": {
|
||||
"included": false,
|
||||
"name": null
|
||||
}
|
||||
"sdsetup_module_name": null
|
||||
},
|
||||
{
|
||||
"name": "EdiZon",
|
||||
|
@ -59,14 +68,13 @@
|
|||
"org_name": "WerWolv",
|
||||
"repo_name": "EdiZon",
|
||||
"asset_patterns": [
|
||||
".*\\.nro"
|
||||
".*\\.nro",
|
||||
".*\\.ovl"
|
||||
],
|
||||
"group": null
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup": {
|
||||
"included": false,
|
||||
"name": null
|
||||
}
|
||||
"sdsetup_module_name": null
|
||||
},
|
||||
{
|
||||
"name": "Emuiibo",
|
||||
|
@ -78,12 +86,10 @@
|
|||
"asset_patterns": [
|
||||
".*emuiibo.*\\.zip"
|
||||
],
|
||||
"group": null
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup": {
|
||||
"included": true,
|
||||
"name": "emuiibo"
|
||||
}
|
||||
"sdsetup_module_name": null
|
||||
},
|
||||
{
|
||||
"name": "Goldleaf",
|
||||
|
@ -95,12 +101,25 @@
|
|||
"asset_patterns": [
|
||||
".*\\.nro"
|
||||
],
|
||||
"group": null
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup": {
|
||||
"included": false,
|
||||
"name": null
|
||||
}
|
||||
"sdsetup_module_name": null
|
||||
},
|
||||
{
|
||||
"name": "Kosmos Cleaner",
|
||||
"download_function_name": "download_kosmos_cleaner",
|
||||
"git": {
|
||||
"service": 0,
|
||||
"org_name": "AtlasNX",
|
||||
"repo_name": "Kosmos-Cleaner",
|
||||
"asset_patterns": [
|
||||
".*\\.zip"
|
||||
],
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup_module_name": null
|
||||
},
|
||||
{
|
||||
"name": "Kosmos Toolbox",
|
||||
|
@ -112,12 +131,10 @@
|
|||
"asset_patterns": [
|
||||
".*\\.nro"
|
||||
],
|
||||
"group": null
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup": {
|
||||
"included": true,
|
||||
"name": "kosmos_toolbox"
|
||||
}
|
||||
"sdsetup_module_name": null
|
||||
},
|
||||
{
|
||||
"name": "Kosmos Updater",
|
||||
|
@ -129,12 +146,10 @@
|
|||
"asset_patterns": [
|
||||
".*\\.nro"
|
||||
],
|
||||
"group": null
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup": {
|
||||
"included": true,
|
||||
"name": "kosmos_updater"
|
||||
}
|
||||
"sdsetup_module_name": null
|
||||
},
|
||||
{
|
||||
"name": "ldn_mitm",
|
||||
|
@ -146,12 +161,10 @@
|
|||
"asset_patterns": [
|
||||
".*ldn_mitm.*\\.zip"
|
||||
],
|
||||
"group": null
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup": {
|
||||
"included": true,
|
||||
"name": "ldn_mitm"
|
||||
}
|
||||
"sdsetup_module_name": null
|
||||
},
|
||||
{
|
||||
"name": "Lockpick",
|
||||
|
@ -163,12 +176,10 @@
|
|||
"asset_patterns": [
|
||||
".*\\.nro"
|
||||
],
|
||||
"group": null
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup": {
|
||||
"included": false,
|
||||
"name": null
|
||||
}
|
||||
"sdsetup_module_name": null
|
||||
},
|
||||
{
|
||||
"name": "Lockpick_RCM",
|
||||
|
@ -180,12 +191,10 @@
|
|||
"asset_patterns": [
|
||||
".*\\.bin"
|
||||
],
|
||||
"group": null
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup": {
|
||||
"included": true,
|
||||
"name": "lockpick_rcm"
|
||||
}
|
||||
"sdsetup_module_name": null
|
||||
},
|
||||
{
|
||||
"name": "nxdumptool",
|
||||
|
@ -197,12 +206,10 @@
|
|||
"asset_patterns": [
|
||||
".*nxdumptool.*\\.nro"
|
||||
],
|
||||
"group": null
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup": {
|
||||
"included": false,
|
||||
"name": null
|
||||
}
|
||||
"sdsetup_module_name": null
|
||||
},
|
||||
{
|
||||
"name": "nx-ovlloader",
|
||||
|
@ -214,12 +221,10 @@
|
|||
"asset_patterns": [
|
||||
".*\\.zip"
|
||||
],
|
||||
"group": null
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup": {
|
||||
"included": true,
|
||||
"name": "nx_ovlloader"
|
||||
}
|
||||
"sdsetup_module_name": null
|
||||
},
|
||||
{
|
||||
"name": "ovlSysModules",
|
||||
|
@ -231,12 +236,10 @@
|
|||
"asset_patterns": [
|
||||
".*\\.ovl"
|
||||
],
|
||||
"group": null
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup": {
|
||||
"included": true,
|
||||
"name": "ovl_sysmodules"
|
||||
}
|
||||
"sdsetup_module_name": null
|
||||
},
|
||||
{
|
||||
"name": "Status Monitor Overlay",
|
||||
|
@ -248,12 +251,10 @@
|
|||
"asset_patterns": [
|
||||
".*\\.ovl"
|
||||
],
|
||||
"group": null
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup": {
|
||||
"included": true,
|
||||
"name": "status_monitor_overlay"
|
||||
}
|
||||
"sdsetup_module_name": null
|
||||
},
|
||||
{
|
||||
"name": "sys-clk",
|
||||
|
@ -265,12 +266,10 @@
|
|||
"asset_patterns": [
|
||||
".*sys-clk-.*\\.zip"
|
||||
],
|
||||
"group": null
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup": {
|
||||
"included": true,
|
||||
"name": "sys_clk"
|
||||
}
|
||||
"sdsetup_module_name": null
|
||||
},
|
||||
{
|
||||
"name": "sys-con",
|
||||
|
@ -282,12 +281,10 @@
|
|||
"asset_patterns": [
|
||||
".*sys-con-.*\\.zip"
|
||||
],
|
||||
"group": null
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup": {
|
||||
"included": true,
|
||||
"name": "sys_con"
|
||||
}
|
||||
"sdsetup_module_name": null
|
||||
},
|
||||
{
|
||||
"name": "sys-ftpd-light",
|
||||
|
@ -299,12 +296,10 @@
|
|||
"asset_patterns": [
|
||||
".*sys-ftpd-light.*\\.zip"
|
||||
],
|
||||
"group": null
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup": {
|
||||
"included": true,
|
||||
"name": "sys_ftpd"
|
||||
}
|
||||
"sdsetup_module_name": null
|
||||
},
|
||||
{
|
||||
"name": "Tesla-Menu",
|
||||
|
@ -316,11 +311,9 @@
|
|||
"asset_patterns": [
|
||||
".*\\.zip"
|
||||
],
|
||||
"group": null
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup": {
|
||||
"included": true,
|
||||
"name": "tesla_menu"
|
||||
}
|
||||
"sdsetup_module_name": null
|
||||
}
|
||||
]
|
|
@ -28,13 +28,14 @@ import re
|
|||
import shutil
|
||||
import urllib.request
|
||||
import uuid
|
||||
import xmltodict
|
||||
import zipfile
|
||||
|
||||
gh = Github(config.github_username, config.github_password)
|
||||
gl = Gitlab('https://gitlab.com', private_token=config.gitlab_private_access_token)
|
||||
gl.auth()
|
||||
|
||||
def get_latest_release(module):
|
||||
def get_latest_release(module, include_prereleases = True):
|
||||
if common.GitService(module['git']['service']) == common.GitService.GitHub:
|
||||
try:
|
||||
repo = gh.get_repo(f'{module["git"]["org_name"]}/{module["git"]["repo_name"]}')
|
||||
|
@ -46,9 +47,16 @@ def get_latest_release(module):
|
|||
if releases.totalCount == 0:
|
||||
print(f'[Error] Unable to find any releases for repo: {module["git"]["org_name"]}/{module["git"]["repo_name"]}')
|
||||
return None
|
||||
|
||||
if include_prereleases:
|
||||
return releases[0]
|
||||
|
||||
for release in releases:
|
||||
if not release.prerelease:
|
||||
return release
|
||||
|
||||
return releases[0]
|
||||
else:
|
||||
return None
|
||||
elif common.GitService(module['git']['service']) == common.GitService.GitLab:
|
||||
try:
|
||||
project = gl.projects.get(f'{module["git"]["org_name"]}/{module["git"]["repo_name"]}')
|
||||
except:
|
||||
|
@ -62,6 +70,12 @@ def get_latest_release(module):
|
|||
|
||||
print(f'[Error] Unable to find any releases for repo: {module["git"]["org_name"]}/{module["git"]["repo_name"]}')
|
||||
return None
|
||||
else:
|
||||
releases = None
|
||||
with urllib.request.urlopen(f'https://sourceforge.net/projects/{module["git"]["repo_name"]}/rss?path=/') as fd:
|
||||
releases = xmltodict.parse(fd.read().decode('utf-8'))
|
||||
|
||||
return releases
|
||||
|
||||
def download_asset(module, release, index):
|
||||
pattern = module['git']['asset_patterns'][index]
|
||||
|
@ -84,7 +98,7 @@ def download_asset(module, release, index):
|
|||
urllib.request.urlretrieve(matched_asset.browser_download_url, download_path)
|
||||
|
||||
return download_path
|
||||
else:
|
||||
elif common.GitService(module['git']['service']) == common.GitService.GitLab:
|
||||
group = module['git']['group']
|
||||
|
||||
match = re.search(pattern, release.release['description'])
|
||||
|
@ -98,6 +112,21 @@ def download_asset(module, release, index):
|
|||
download_path = common.generate_temp_path()
|
||||
urllib.request.urlretrieve(f'https://gitlab.com/{module["git"]["org_name"]}/{module["git"]["repo_name"]}{groups[group]}', download_path)
|
||||
|
||||
return download_path
|
||||
else:
|
||||
matched_item = None
|
||||
for item in release['rss']['channel']['item']:
|
||||
if re.search(pattern, item['title']):
|
||||
matched_item = item
|
||||
break
|
||||
|
||||
if matched_item is None:
|
||||
print(f'[Error] Unable to find asset that match pattern: "{pattern}"')
|
||||
return None
|
||||
|
||||
download_path = common.generate_temp_path()
|
||||
urllib.request.urlretrieve(matched_item['link'], download_path)
|
||||
|
||||
return download_path
|
||||
|
||||
def find_asset(release, pattern):
|
||||
|
@ -107,6 +136,31 @@ def find_asset(release, pattern):
|
|||
|
||||
return None
|
||||
|
||||
def get_version(module, release, index):
|
||||
if common.GitService(module['git']['service']) == common.GitService.GitHub:
|
||||
return release.tag_name
|
||||
elif common.GitService(module['git']['service']) == common.GitService.GitLab:
|
||||
return release.name
|
||||
else:
|
||||
matched_item = None
|
||||
for item in release['rss']['channel']['item']:
|
||||
if re.search(module['git']['asset_patterns'][index], item['title']):
|
||||
matched_item = item
|
||||
break
|
||||
|
||||
if matched_item is None:
|
||||
return "Latest"
|
||||
|
||||
match = re.search(module['git']['version_pattern'], matched_item['title'])
|
||||
if match is None:
|
||||
return "Latest"
|
||||
|
||||
groups = match.groups()
|
||||
if len(groups) == 0:
|
||||
return "Latest"
|
||||
|
||||
return groups[0]
|
||||
|
||||
def download_atmosphere(module, temp_directory, kosmos_version, kosmos_build):
|
||||
release = get_latest_release(module)
|
||||
bundle_path = download_asset(module, release, 0)
|
||||
|
@ -118,6 +172,7 @@ def download_atmosphere(module, temp_directory, kosmos_version, kosmos_build):
|
|||
|
||||
common.delete_path(bundle_path)
|
||||
common.delete_path(os.path.join(temp_directory, 'switch', 'reboot_to_payload.nro'))
|
||||
common.delete_path(os.path.join(temp_directory, 'switch'))
|
||||
common.delete_path(os.path.join(temp_directory, 'atmosphere', 'reboot_payload.bin'))
|
||||
|
||||
payload_path = download_asset(module, release, 1)
|
||||
|
@ -128,12 +183,11 @@ def download_atmosphere(module, temp_directory, kosmos_version, kosmos_build):
|
|||
shutil.move(payload_path, os.path.join(temp_directory, 'bootloader', 'payloads', 'fusee-primary.bin'))
|
||||
|
||||
common.copy_module_file('atmosphere', 'system_settings.ini', os.path.join(temp_directory, 'atmosphere', 'config', 'system_settings.ini'))
|
||||
common.copy_module_folder('atmosphere', 'exefs_patches', os.path.join(temp_directory, 'atmosphere', 'exefs_patches'))
|
||||
|
||||
if not kosmos_build:
|
||||
common.delete_path(os.path.join(temp_directory, 'hbmenu.nro'))
|
||||
|
||||
return release.tag_name
|
||||
return get_version(module, release, 0)
|
||||
|
||||
def download_hekate(module, temp_directory, kosmos_version, kosmos_build):
|
||||
release = get_latest_release(module)
|
||||
|
@ -156,12 +210,32 @@ def download_hekate(module, temp_directory, kosmos_version, kosmos_build):
|
|||
common.mkdir(os.path.join(temp_directory, 'atmosphere'))
|
||||
shutil.copyfile(payload[0], os.path.join(temp_directory, 'atmosphere', 'reboot_payload.bin'))
|
||||
|
||||
common.delete_path(os.path.join(temp_directory, 'nyx_usb_max_rate (run once per windows pc).reg'))
|
||||
|
||||
if not kosmos_build:
|
||||
common.mkdir(os.path.join(temp_directory, '..', 'must_have'))
|
||||
shutil.move(os.path.join(temp_directory, 'bootloader'), os.path.join(temp_directory, '..', 'must_have'))
|
||||
shutil.move(os.path.join(temp_directory, 'atmosphere'), os.path.join(temp_directory, '..', 'must_have'))
|
||||
common.move_contents_of_folder(os.path.join(temp_directory, 'bootloader'), os.path.join(temp_directory, '..', 'must_have', 'bootloader'))
|
||||
shutil.move(os.path.join(temp_directory, 'atmosphere', 'reboot_payload.bin'), os.path.join(temp_directory, '..', 'must_have', 'atmosphere', 'reboot_payload.bin'))
|
||||
common.delete_path(os.path.join(temp_directory, 'atmosphere'))
|
||||
|
||||
return release.tag_name
|
||||
return get_version(module, release, 0)
|
||||
|
||||
def download_hekate_icons(module, temp_directory, kosmos_version, kosmos_build):
|
||||
release = get_latest_release(module)
|
||||
bundle_path = download_asset(module, release, 0)
|
||||
if bundle_path is None:
|
||||
return None
|
||||
|
||||
with zipfile.ZipFile(bundle_path, 'r') as zip_ref:
|
||||
zip_ref.extractall(temp_directory)
|
||||
|
||||
common.delete_path(bundle_path)
|
||||
shutil.move(os.path.join(temp_directory, 'bootloader', 'res', 'icon_payload.bmp'), os.path.join(temp_directory, 'bootloader', 'res', 'icon_payload_hue.bmp'))
|
||||
#shutil.move(os.path.join(temp_directory, 'bootloader', 'res', 'icon_payload_custom.bmp'), os.path.join(temp_directory, 'bootloader', 'res', 'icon_payload.bmp'))
|
||||
shutil.move(os.path.join(temp_directory, 'bootloader', 'res', 'icon_switch.bmp'), os.path.join(temp_directory, 'bootloader', 'res', 'icon_switch_hue.bmp'))
|
||||
#shutil.move(os.path.join(temp_directory, 'bootloader', 'res', 'icon_switch_custom.bmp'), os.path.join(temp_directory, 'bootloader', 'res', 'icon_switch.bmp'))
|
||||
|
||||
return get_version(module, release, 0)
|
||||
|
||||
def download_appstore(module, temp_directory, kosmos_version, kosmos_build):
|
||||
release = get_latest_release(module)
|
||||
|
@ -176,7 +250,7 @@ def download_appstore(module, temp_directory, kosmos_version, kosmos_build):
|
|||
common.mkdir(os.path.join(temp_directory, 'switch', 'appstore'))
|
||||
shutil.move(os.path.join(temp_directory, 'appstore.nro'), os.path.join(temp_directory, 'switch', 'appstore', 'appstore.nro'))
|
||||
|
||||
return release.name
|
||||
return get_version(module, release, 0)
|
||||
|
||||
def download_edizon(module, temp_directory, kosmos_version, kosmos_build):
|
||||
release = get_latest_release(module)
|
||||
|
@ -187,7 +261,14 @@ def download_edizon(module, temp_directory, kosmos_version, kosmos_build):
|
|||
common.mkdir(os.path.join(temp_directory, 'switch', 'EdiZon'))
|
||||
shutil.move(app_path, os.path.join(temp_directory, 'switch', 'EdiZon', 'EdiZon.nro'))
|
||||
|
||||
return release.tag_name
|
||||
overlay_path = download_asset(module, release, 1)
|
||||
if overlay_path is None:
|
||||
return None
|
||||
|
||||
common.mkdir(os.path.join(temp_directory, 'switch', '.overlays'))
|
||||
shutil.move(overlay_path, os.path.join(temp_directory, 'switch', '.overlays', 'ovlEdiZon.ovl'))
|
||||
|
||||
return get_version(module, release, 0)
|
||||
|
||||
def download_emuiibo(module, temp_directory, kosmos_version, kosmos_build):
|
||||
release = get_latest_release(module)
|
||||
|
@ -200,13 +281,15 @@ def download_emuiibo(module, temp_directory, kosmos_version, kosmos_build):
|
|||
|
||||
common.delete_path(bundle_path)
|
||||
common.mkdir(os.path.join(temp_directory, 'atmosphere', 'contents'))
|
||||
shutil.move(os.path.join(temp_directory, 'contents', '0100000000000352'), os.path.join(temp_directory, 'atmosphere', 'contents', '0100000000000352'))
|
||||
common.delete_path(os.path.join(temp_directory, 'contents'))
|
||||
shutil.move(os.path.join(temp_directory, 'SdOut', 'atmosphere', 'contents', '0100000000000352'), os.path.join(temp_directory, 'atmosphere', 'contents', '0100000000000352'))
|
||||
common.mkdir(os.path.join(temp_directory, 'switch', '.overlays'))
|
||||
shutil.move(os.path.join(temp_directory, 'SdOut', 'switch', '.overlays', 'emuiibo.ovl'), os.path.join(temp_directory, 'switch', '.overlays', 'emuiibo.ovl'))
|
||||
common.delete_path(os.path.join(temp_directory, 'SdOut'))
|
||||
if kosmos_build:
|
||||
common.delete_path(os.path.join(temp_directory, 'atmosphere', 'contents', '0100000000000352', 'flags', 'boot2.flag'))
|
||||
common.copy_module_file('emuiibo', 'toolbox.json', os.path.join(temp_directory, 'atmosphere', 'contents', '0100000000000352', 'toolbox.json'))
|
||||
|
||||
return release.tag_name
|
||||
return get_version(module, release, 0)
|
||||
|
||||
def download_goldleaf(module, temp_directory, kosmos_version, kosmos_build):
|
||||
release = get_latest_release(module)
|
||||
|
@ -217,7 +300,18 @@ def download_goldleaf(module, temp_directory, kosmos_version, kosmos_build):
|
|||
common.mkdir(os.path.join(temp_directory, 'switch', 'Goldleaf'))
|
||||
shutil.move(app_path, os.path.join(temp_directory, 'switch', 'Goldleaf', 'Goldleaf.nro'))
|
||||
|
||||
return release.tag_name
|
||||
return get_version(module, release, 0)
|
||||
|
||||
def download_kosmos_cleaner(module, temp_directory, kosmos_version, kosmos_build):
|
||||
release = get_latest_release(module)
|
||||
bundle_path = download_asset(module, release, 0)
|
||||
if bundle_path is None:
|
||||
return None
|
||||
|
||||
with zipfile.ZipFile(bundle_path, 'r') as zip_ref:
|
||||
zip_ref.extractall(temp_directory)
|
||||
|
||||
return get_version(module, release, 0)
|
||||
|
||||
def download_kosmos_toolbox(module, temp_directory, kosmos_version, kosmos_build):
|
||||
release = get_latest_release(module)
|
||||
|
@ -229,7 +323,7 @@ def download_kosmos_toolbox(module, temp_directory, kosmos_version, kosmos_build
|
|||
shutil.move(app_path, os.path.join(temp_directory, 'switch', 'KosmosToolbox', 'KosmosToolbox.nro'))
|
||||
common.copy_module_file('kosmos-toolbox', 'config.json', os.path.join(temp_directory, 'switch', 'KosmosToolbox', 'config.json'))
|
||||
|
||||
return release.tag_name
|
||||
return get_version(module, release, 0)
|
||||
|
||||
def download_kosmos_updater(module, temp_directory, kosmos_version, kosmos_build):
|
||||
release = get_latest_release(module)
|
||||
|
@ -242,7 +336,7 @@ def download_kosmos_updater(module, temp_directory, kosmos_version, kosmos_build
|
|||
common.copy_module_file('kosmos-updater', 'internal.db', os.path.join(temp_directory, 'switch', 'KosmosUpdater', 'internal.db'))
|
||||
common.sed('KOSMOS_VERSION', kosmos_version, os.path.join(temp_directory, 'switch', 'KosmosUpdater', 'internal.db'))
|
||||
|
||||
return release.tag_name
|
||||
return get_version(module, release, 0)
|
||||
|
||||
def download_ldn_mitm(module, temp_directory, kosmos_version, kosmos_build):
|
||||
release = get_latest_release(module)
|
||||
|
@ -258,7 +352,7 @@ def download_ldn_mitm(module, temp_directory, kosmos_version, kosmos_build):
|
|||
common.delete_path(os.path.join(temp_directory, 'atmosphere', 'contents', '4200000000000010', 'flags', 'boot2.flag'))
|
||||
common.copy_module_file('ldn_mitm', 'toolbox.json', os.path.join(temp_directory, 'atmosphere', 'contents', '4200000000000010', 'toolbox.json'))
|
||||
|
||||
return release.tag_name
|
||||
return get_version(module, release, 0)
|
||||
|
||||
def download_lockpick(module, temp_directory, kosmos_version, kosmos_build):
|
||||
release = get_latest_release(module)
|
||||
|
@ -269,7 +363,7 @@ def download_lockpick(module, temp_directory, kosmos_version, kosmos_build):
|
|||
common.mkdir(os.path.join(temp_directory, 'switch', 'Lockpick'))
|
||||
shutil.move(app_path, os.path.join(temp_directory, 'switch', 'Lockpick', 'Lockpick.nro'))
|
||||
|
||||
return release.tag_name
|
||||
return get_version(module, release, 0)
|
||||
|
||||
def download_lockpick_rcm(module, temp_directory, kosmos_version, kosmos_build):
|
||||
release = get_latest_release(module)
|
||||
|
@ -283,7 +377,7 @@ def download_lockpick_rcm(module, temp_directory, kosmos_version, kosmos_build):
|
|||
else:
|
||||
shutil.move(payload_path, os.path.join(temp_directory, 'Lockpick_RCM.bin'))
|
||||
|
||||
return release.tag_name
|
||||
return get_version(module, release, 0)
|
||||
|
||||
def download_nxdumptool(module, temp_directory, kosmos_version, kosmos_build):
|
||||
release = get_latest_release(module)
|
||||
|
@ -294,7 +388,7 @@ def download_nxdumptool(module, temp_directory, kosmos_version, kosmos_build):
|
|||
common.mkdir(os.path.join(temp_directory, 'switch', 'NXDumpTool'))
|
||||
shutil.move(app_path, os.path.join(temp_directory, 'switch', 'NXDumpTool', 'NXDumpTool.nro'))
|
||||
|
||||
return release.tag_name
|
||||
return get_version(module, release, 0)
|
||||
|
||||
def download_nx_ovlloader(module, temp_directory, kosmos_version, kosmos_build):
|
||||
release = get_latest_release(module)
|
||||
|
@ -307,7 +401,7 @@ def download_nx_ovlloader(module, temp_directory, kosmos_version, kosmos_build):
|
|||
|
||||
common.delete_path(bundle_path)
|
||||
|
||||
return release.tag_name
|
||||
return get_version(module, release, 0)
|
||||
|
||||
def download_ovl_sysmodules(module, temp_directory, kosmos_version, kosmos_build):
|
||||
release = get_latest_release(module)
|
||||
|
@ -318,7 +412,7 @@ def download_ovl_sysmodules(module, temp_directory, kosmos_version, kosmos_build
|
|||
common.mkdir(os.path.join(temp_directory, 'switch', '.overlays'))
|
||||
shutil.move(app_path, os.path.join(temp_directory, 'switch', '.overlays', 'ovlSysmodules.ovl'))
|
||||
|
||||
return release.tag_name
|
||||
return get_version(module, release, 0)
|
||||
|
||||
def download_status_monitor_overlay(module, temp_directory, kosmos_version, kosmos_build):
|
||||
release = get_latest_release(module)
|
||||
|
@ -329,7 +423,7 @@ def download_status_monitor_overlay(module, temp_directory, kosmos_version, kosm
|
|||
common.mkdir(os.path.join(temp_directory, 'switch', '.overlays'))
|
||||
shutil.move(app_path, os.path.join(temp_directory, 'switch', '.overlays', 'Status-Monitor-Overlay.ovl'))
|
||||
|
||||
return release.tag_name
|
||||
return get_version(module, release, 0)
|
||||
|
||||
def download_sys_clk(module, temp_directory, kosmos_version, kosmos_build):
|
||||
release = get_latest_release(module)
|
||||
|
@ -341,15 +435,12 @@ def download_sys_clk(module, temp_directory, kosmos_version, kosmos_build):
|
|||
zip_ref.extractall(temp_directory)
|
||||
|
||||
common.delete_path(bundle_path)
|
||||
common.mkdir(os.path.join(temp_directory, 'atmosphere', 'contents'))
|
||||
shutil.move(os.path.join(temp_directory, 'atmosphere', 'titles', '00FF0000636C6BFF'), os.path.join(temp_directory, 'atmosphere', 'contents', '00FF0000636C6BFF'))
|
||||
common.delete_path(os.path.join(temp_directory, 'atmosphere', 'titles'))
|
||||
if kosmos_build:
|
||||
common.delete_path(os.path.join(temp_directory, 'atmosphere', 'contents', '00FF0000636C6BFF', 'flags', 'boot2.flag'))
|
||||
common.delete_path(os.path.join(temp_directory, 'README.md'))
|
||||
common.copy_module_file('sys-clk', 'toolbox.json', os.path.join(temp_directory, 'atmosphere', 'contents', '00FF0000636C6BFF', 'toolbox.json'))
|
||||
|
||||
return release.tag_name
|
||||
return get_version(module, release, 0)
|
||||
|
||||
def download_sys_con(module, temp_directory, kosmos_version, kosmos_build):
|
||||
release = get_latest_release(module)
|
||||
|
@ -364,7 +455,7 @@ def download_sys_con(module, temp_directory, kosmos_version, kosmos_build):
|
|||
if kosmos_build:
|
||||
common.delete_path(os.path.join(temp_directory, 'atmosphere', 'contents', '690000000000000D', 'flags', 'boot2.flag'))
|
||||
|
||||
return release.tag_name
|
||||
return get_version(module, release, 0)
|
||||
|
||||
def download_sys_ftpd_light(module, temp_directory, kosmos_version, kosmos_build):
|
||||
release = get_latest_release(module)
|
||||
|
@ -379,7 +470,7 @@ def download_sys_ftpd_light(module, temp_directory, kosmos_version, kosmos_build
|
|||
if kosmos_build:
|
||||
common.delete_path(os.path.join(temp_directory, 'atmosphere', 'contents', '420000000000000E', 'flags', 'boot2.flag'))
|
||||
|
||||
return release.tag_name
|
||||
return get_version(module, release, 0)
|
||||
|
||||
def download_tesla_menu(module, temp_directory, kosmos_version, kosmos_build):
|
||||
release = get_latest_release(module)
|
||||
|
@ -392,50 +483,54 @@ def download_tesla_menu(module, temp_directory, kosmos_version, kosmos_build):
|
|||
|
||||
common.delete_path(bundle_path)
|
||||
|
||||
return release.tag_name
|
||||
return get_version(module, release, 0)
|
||||
|
||||
def build(temp_directory, kosmos_version, kosmos_build, auto_build):
|
||||
def build(temp_directory, kosmos_version, command, auto_build):
|
||||
results = []
|
||||
|
||||
modules_filename = 'kosmos.json'
|
||||
if command == common.Command.KosmosMinimal:
|
||||
modules_filename = 'kosmos-minimal.json'
|
||||
elif command == common.Command.SDSetup:
|
||||
modules_filename = 'sdsetup.json'
|
||||
|
||||
# Open up modules.json
|
||||
with open('modules.json') as json_file:
|
||||
with open(modules_filename) as json_file:
|
||||
# Parse JSON
|
||||
data = json.load(json_file)
|
||||
|
||||
# Loop through modules
|
||||
for module in data:
|
||||
sdsetup_opts = module['sdsetup']
|
||||
|
||||
# Running a Kosmos Build
|
||||
if kosmos_build:
|
||||
# Download the module.
|
||||
print(f'Downloading {module["name"]}...')
|
||||
download = globals()[module['download_function_name']]
|
||||
version = download(module, temp_directory, kosmos_version, kosmos_build)
|
||||
if version is None:
|
||||
return None
|
||||
results.append(f' {module["name"]} - {version}')
|
||||
|
||||
# Running a SDSetup Build
|
||||
elif not kosmos_build and sdsetup_opts['included']:
|
||||
if command == common.Command.SDSetup:
|
||||
# Only show prompts when it's not an auto build.
|
||||
if not auto_build:
|
||||
print(f'Downloading {module["name"]}...')
|
||||
|
||||
# Make sure module directory is created.
|
||||
module_directory = os.path.join(temp_directory, sdsetup_opts['name'])
|
||||
module_directory = os.path.join(temp_directory, module['sdsetup_module_name'])
|
||||
common.mkdir(module_directory)
|
||||
|
||||
# Download the module.
|
||||
download = globals()[module['download_function_name']]
|
||||
version = download(module, module_directory, kosmos_version, kosmos_build)
|
||||
version = download(module, module_directory, kosmos_version, False)
|
||||
if version is None:
|
||||
return None
|
||||
|
||||
# Auto builds have a different prompt at the end for parsing.
|
||||
if auto_build:
|
||||
results.append(f'{sdsetup_opts["name"]}:{version}')
|
||||
results.append(f'{module["sdsetup_module_name"]}:{version}')
|
||||
else:
|
||||
results.append(f' {module["name"]} - {version}')
|
||||
|
||||
# Running a Kosmos Build
|
||||
else:
|
||||
# Download the module.
|
||||
print(f'Downloading {module["name"]}...')
|
||||
download = globals()[module['download_function_name']]
|
||||
version = download(module, temp_directory, kosmos_version, True)
|
||||
if version is None:
|
||||
return None
|
||||
results.append(f' {module["name"]} - {version}')
|
||||
|
||||
return results
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
PyGithub
|
||||
python-gitlab
|
||||
python-gitlab
|
||||
xmltodict
|
||||
|
|
243
Builder/sdsetup.json
Normal file
243
Builder/sdsetup.json
Normal file
|
@ -0,0 +1,243 @@
|
|||
[
|
||||
{
|
||||
"name": "Atmosphère",
|
||||
"download_function_name": "download_atmosphere",
|
||||
"git": {
|
||||
"service": 0,
|
||||
"org_name": "Atmosphere-NX",
|
||||
"repo_name": "Atmosphere",
|
||||
"asset_patterns": [
|
||||
".*atmosphere.*\\.zip",
|
||||
".*fusee.*\\.bin"
|
||||
],
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup_module_name": "must_have"
|
||||
},
|
||||
{
|
||||
"name": "Hekate",
|
||||
"download_function_name": "download_hekate",
|
||||
"git": {
|
||||
"service": 0,
|
||||
"org_name": "CTCaer",
|
||||
"repo_name": "hekate",
|
||||
"asset_patterns": [
|
||||
".*hekate.*\\.zip"
|
||||
],
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup_module_name": "hekate"
|
||||
},
|
||||
{
|
||||
"name": "Hekate Icons",
|
||||
"download_function_name": "download_hekate_icons",
|
||||
"git": {
|
||||
"service": 0,
|
||||
"org_name": "NicholeMattera",
|
||||
"repo_name": "Hekate-Icons",
|
||||
"asset_patterns": [
|
||||
".*\\.zip"
|
||||
],
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup_module_name": "hekate_icons"
|
||||
},
|
||||
{
|
||||
"name": "Emuiibo",
|
||||
"download_function_name": "download_emuiibo",
|
||||
"git": {
|
||||
"service": 0,
|
||||
"org_name": "XorTroll",
|
||||
"repo_name": "emuiibo",
|
||||
"asset_patterns": [
|
||||
".*emuiibo.*\\.zip"
|
||||
],
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup_module_name": "emuiibo"
|
||||
},
|
||||
{
|
||||
"name": "Kosmos Cleaner",
|
||||
"download_function_name": "download_kosmos_cleaner",
|
||||
"git": {
|
||||
"service": 0,
|
||||
"org_name": "AtlasNX",
|
||||
"repo_name": "Kosmos-Cleaner",
|
||||
"asset_patterns": [
|
||||
".*\\.zip"
|
||||
],
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup_module_name": "kosmos_cleaner"
|
||||
},
|
||||
{
|
||||
"name": "Kosmos Toolbox",
|
||||
"download_function_name": "download_kosmos_toolbox",
|
||||
"git": {
|
||||
"service": 0,
|
||||
"org_name": "AtlasNX",
|
||||
"repo_name": "Kosmos-Toolbox",
|
||||
"asset_patterns": [
|
||||
".*\\.nro"
|
||||
],
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup_module_name": "kosmos_toolbox"
|
||||
},
|
||||
{
|
||||
"name": "Kosmos Updater",
|
||||
"download_function_name": "download_kosmos_updater",
|
||||
"git": {
|
||||
"service": 0,
|
||||
"org_name": "AtlasNX",
|
||||
"repo_name": "Kosmos-Updater",
|
||||
"asset_patterns": [
|
||||
".*\\.nro"
|
||||
],
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup_module_name": "kosmos_updater"
|
||||
},
|
||||
{
|
||||
"name": "ldn_mitm",
|
||||
"download_function_name": "download_ldn_mitm",
|
||||
"git": {
|
||||
"service": 0,
|
||||
"org_name": "spacemeowx2",
|
||||
"repo_name": "ldn_mitm",
|
||||
"asset_patterns": [
|
||||
".*ldn_mitm.*\\.zip"
|
||||
],
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup_module_name": "ldn_mitm"
|
||||
},
|
||||
{
|
||||
"name": "Lockpick_RCM",
|
||||
"download_function_name": "download_lockpick_rcm",
|
||||
"git": {
|
||||
"service": 0,
|
||||
"org_name": "shchmue",
|
||||
"repo_name": "Lockpick_RCM",
|
||||
"asset_patterns": [
|
||||
".*\\.bin"
|
||||
],
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup_module_name": "lockpick_rcm"
|
||||
},
|
||||
{
|
||||
"name": "nx-ovlloader",
|
||||
"download_function_name": "download_nx_ovlloader",
|
||||
"git": {
|
||||
"service": 0,
|
||||
"org_name": "WerWolv",
|
||||
"repo_name": "nx-ovlloader",
|
||||
"asset_patterns": [
|
||||
".*\\.zip"
|
||||
],
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup_module_name": "nx_ovlloader"
|
||||
},
|
||||
{
|
||||
"name": "ovlSysModules",
|
||||
"download_function_name": "download_ovl_sysmodules",
|
||||
"git": {
|
||||
"service": 0,
|
||||
"org_name": "WerWolv",
|
||||
"repo_name": "ovl-sysmodules",
|
||||
"asset_patterns": [
|
||||
".*\\.ovl"
|
||||
],
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup_module_name": "ovl_sysmodules"
|
||||
},
|
||||
{
|
||||
"name": "Status Monitor Overlay",
|
||||
"download_function_name": "download_status_monitor_overlay",
|
||||
"git": {
|
||||
"service": 0,
|
||||
"org_name": "masagrator",
|
||||
"repo_name": "Status-Monitor-Overlay",
|
||||
"asset_patterns": [
|
||||
".*\\.ovl"
|
||||
],
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup_module_name": "status_monitor_overlay"
|
||||
},
|
||||
{
|
||||
"name": "sys-clk",
|
||||
"download_function_name": "download_sys_clk",
|
||||
"git": {
|
||||
"service": 0,
|
||||
"org_name": "retronx-team",
|
||||
"repo_name": "sys-clk",
|
||||
"asset_patterns": [
|
||||
".*sys-clk-.*\\.zip"
|
||||
],
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup_module_name": "sys_clk"
|
||||
},
|
||||
{
|
||||
"name": "sys-con",
|
||||
"download_function_name": "download_sys_con",
|
||||
"git": {
|
||||
"service": 0,
|
||||
"org_name": "cathery",
|
||||
"repo_name": "sys-con",
|
||||
"asset_patterns": [
|
||||
".*sys-con-.*\\.zip"
|
||||
],
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup_module_name": "sys_con"
|
||||
},
|
||||
{
|
||||
"name": "sys-ftpd-light",
|
||||
"download_function_name": "download_sys_ftpd_light",
|
||||
"git": {
|
||||
"service": 0,
|
||||
"org_name": "cathery",
|
||||
"repo_name": "sys-ftpd-light",
|
||||
"asset_patterns": [
|
||||
".*sys-ftpd-light.*\\.zip"
|
||||
],
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup_module_name": "sys_ftpd"
|
||||
},
|
||||
{
|
||||
"name": "Tesla-Menu",
|
||||
"download_function_name": "download_tesla_menu",
|
||||
"git": {
|
||||
"service": 0,
|
||||
"org_name": "WerWolv",
|
||||
"repo_name": "Tesla-Menu",
|
||||
"asset_patterns": [
|
||||
".*\\.zip"
|
||||
],
|
||||
"group": null,
|
||||
"version_pattern": null
|
||||
},
|
||||
"sdsetup_module_name": "tesla_menu"
|
||||
}
|
||||
]
|
|
@ -36,6 +36,7 @@ Follow this guide: https://guide.teamatlasnx.com
|
|||
* [EdiZon](https://github.com/WerWolv/EdiZon)
|
||||
* [emuiibo](https://github.com/XorTroll/emuiibo)
|
||||
* [Goldleaf](https://github.com/XorTroll/Goldleaf)
|
||||
* [Kosmos Cleaner](https://github.com/AtlasNX/Kosmos-Cleaner)
|
||||
* [Kosmos Toolbox](https://github.com/AtlasNX/Kosmos-Toolbox)
|
||||
* [Kosmos Updater](https://github.com/AtlasNX/Kosmos-Updater)
|
||||
* [ldn_mitm](https://github.com/spacemeowx2/ldn_mitm)
|
||||
|
|
|
@ -11,5 +11,5 @@ B. Create your own one
|
|||
4. Use some online converter to convert the .png to a .bmp
|
||||
- We need to use a online converter because GIMP currently has some issues with it
|
||||
5. Call it bootlogo.bmp if you want to use it as the standard one
|
||||
- You can also choose a specific bootlogo for each launch option by writting ```logopath=LinkToBootimage.bmp``` into your hekate-ipl.ini ([Example](https://github.com/tumGER/SDFilesSwitch/blob/8653108d41096f60c43f5dab56b41024fa785c5d/Compiled/hekate_ipl.ini#L60))
|
||||
- You can also choose a specific bootlogo for each launch option by writing ```logopath=LinkToBootimage.bmp``` into your hekate-ipl.ini ([Example](https://github.com/tumGER/SDFilesSwitch/blob/8653108d41096f60c43f5dab56b41024fa785c5d/Compiled/hekate_ipl.ini#L60))
|
||||
5. Put it on the root of your SD / root of "SDFilesSwitch/Compiled"
|
||||
|
|
Reference in a new issue