feat: overrides, no-colors, bootargs, early-exit

- This moves globals variables to `globals.c`
- GUI updated for these new options
- cleaned up payload code
This commit is contained in:
CLARATION committed 2026-06-28 16:37:05 -07:00
1 parent 361049df62
commit 29002c60d6
20 files changed
+406 -130

No files matched your search

+106 -22
View File
@@ -12,6 +12,7 @@
#include "m8/run.h"
#include "utils.h"
#include "globals.h"
#include "paleinfo.h"
#ifdef _WIN32
# include "usb/driver.h"
@@ -42,22 +43,34 @@ void print_usage(char* argv) {
"Usage: %s [OPTIONS]\n\n"
" -h, --help Print usage information\n"
" -v, --version Print version\n\n"
"Options:\n"
" --cli Use command line interface\n"
"Options:\n\n"
" --cli [f] Use command line interface\n"
#ifdef WITH_GUI
" --gui Use graphical user interface\n"
" --gui [f] Use graphical user interface\n"
#endif
" --force-revert Force environment reversion\n"
" -l, --rootless Enable rootless mode (standard)\n"
" -f, --rootful Enable rootful mode\n"
" -c, --setup-fakefs Setup fake filesystem\n"
" -B, --setup-partial-fakefs Setup partial fake filesystem\n"
" -s, --safe-mode Enable safe mode\n"
" -T, --telnetd Enable TELNET daemon on port 46 (insecure)\n"
" -V, --verbose-boot Enable verbose booting\n"
#ifdef WITH_TUI
" --tui [f] Use terminal user interface\n"
#endif
" --dark-blockchain [f] Enable dark blockchain\n"
" --force-revert [f] Force environment reversion\n"
" -l, --rootless [f] Enable rootless mode (standard)\n"
" -f, --rootful [f] Boots fakefs\n"
" -c, --setup-fakefs [f] Setup fake filesystem\n"
" -B, --setup-partial-fakefs [f] Setup partial fake filesystem\n"
" -s, --safe-mode [f] Enable safe mode\n"
" -T, --telnetd [f] Enable TELNET daemon on port 46 (insecure)\n"
" -V, --verbose-boot [f] Enable verbose booting\n"
" -p, --early-exit [f] Exit after uploading Pongo\n"
" -e, --extra-bootargs <BOOTARGS> Set extra bootargs\n"
" -k, --override-pongo <FILE PATH> Override Pongo image\n"
" -K, --override-kpf <FILE PATH> Override kernel patchfinder\n"
" -o, --override-overlay <FILE PATH> Override overlay\n"
" -r, --override-ramdisk <FILE PATH> Override ramdisk\n"
" -n, --no-colors [f] Disable colors on the command line\n"
" -q, --quick [f] Enable Quick Mode\n"
#ifdef _WIN32
" --install-drivers <PID> Install libusbK drivers for PID\n"
" --remove-drivers <PID> Remove libusbK drivers for PID\n"
" --install-drivers <PID> Install libusbK drivers for PID\n"
" --remove-drivers <PID> Remove libusbK drivers for PID\n"
#endif
, argv
);
@@ -72,9 +85,13 @@ void parse_arguments(int argc, char* argv[]) {
{"version", no_argument, NULL, 'v'},
{"cli", no_argument, NULL, 1},
#ifdef WITH_GUI
{"gui", no_argument, NULL, 3},
{"gui", no_argument, NULL, 2},
#endif
{"force-revert", no_argument, NULL, 0},
#ifdef WITH_GUI
{"tui", no_argument, NULL, 3},
#endif
{"dark-blockchain", no_argument, NULL, 4},
{"force-revert", no_argument, NULL, 5},
{"rootless", no_argument, NULL, 'l'},
{"rootful", no_argument, NULL, 'f'},
{"setup-fakefs", no_argument, NULL, 'c'},
@@ -82,9 +99,17 @@ void parse_arguments(int argc, char* argv[]) {
{"safe-mode", no_argument, NULL, 's'},
{"telnetd", no_argument, NULL, 'T'},
{"verbose-boot", no_argument, NULL, 'V'},
{"early-exit", no_argument, NULL, 'p'},
{"extra-bootargs", required_argument, NULL, 'e'},
{"override-pongo", required_argument, NULL, 'k'},
{"override-kpf", required_argument, NULL, 'K'},
{"override-overlay", required_argument, NULL, 'o'},
{"override-ramdisk", required_argument, NULL, 'r'},
{"no-colors", no_argument, NULL, 'n'},
{"quick", no_argument, NULL, 'q'},
#ifdef _WIN32
{"install-drivers", required_argument, NULL, 2},
{"remove-drivers", required_argument, NULL, 4},
{"install-drivers", required_argument, NULL, 6},
{"remove-drivers", required_argument, NULL, 7},
#endif
{NULL, 0, NULL, 0}
};
@@ -93,8 +118,13 @@ void parse_arguments(int argc, char* argv[]) {
palerain_flags |= palerain_option_gui;
# ifndef _WIN32
if (isatty(STDIN_FILENO) && getenv("LLVM_PROFILE_FILE") == nullptr) {
#ifdef WITH_TUI
palerain_flags &= ~palerain_option_gui;
palerain_flags |= palerain_option_tui;
#else
palerain_flags &= ~palerain_option_gui;
palerain_flags |= palerain_option_cli;
#endif
} else {
palerain_flags &= ~palerain_option_cli;
palerain_flags |= palerain_option_gui;
@@ -104,7 +134,7 @@ void parse_arguments(int argc, char* argv[]) {
palerain_flags |= palerain_option_cli;
#endif
while ((options = getopt_long(argc, argv, "hvlfcB:sTV", long_options, &option_index)) != -1) {
while ((options = getopt_long(argc, argv, "hvlfcB:sTVpe:k:K:o:r:nq", long_options, &option_index)) != -1) {
switch (options) {
case 'h': // --help
print_usage(argv[0]);
@@ -117,13 +147,23 @@ void parse_arguments(int argc, char* argv[]) {
palerain_flags |= palerain_option_cli;
break;
#ifdef WITH_GUI
case 3: // --gui
case 2: // --gui
palerain_flags &= ~palerain_option_cli;
palerain_flags &= ~palerain_option_tui;
palerain_flags |= palerain_option_gui;
break;
#endif
case 0: // --force-revert
#ifdef WITH_TUI
case 3: // --tui
palerain_flags &= ~palerain_option_cli;
palerain_flags &= ~palerain_option_gui;
palerain_flags |= palerain_option_tui;
break;
#endif
case 4: // --dark-blockchain
palerain_flags |= palerain_option_flower_chain;
break;
case 5: // --force-revert
palerain_flags |= palerain_option_force_revert;
break;
case 'l': // --rootless
@@ -149,8 +189,52 @@ void parse_arguments(int argc, char* argv[]) {
case 'V': // --verbose-boot
palerain_flags |= palerain_option_verbose_boot;
break;
case 'p': // --early-exit
palerain_flags |= palerain_option_pongo_exit;
break;
case 'e': // --extra-bootargs
if (strlen(optarg) > (sizeof(boot_args) - 0x20)) {
LOG_ERROR("Boot arguments too long");
exit(1);
}
snprintf(boot_args, sizeof(boot_args), "%s", optarg);
break;
case 'k': // --override-pongo
if (!override_payload_from_file(optarg, &g_payload_pongo)) {
LOG_ERROR("Failed to load pongo payload\n");
exit(1);
}
LOG("Overriding pongo payload with %s", optarg);
break;
case 'K': // --override-kpf
if (!override_payload_from_file(optarg, &g_payload_kpf)) {
LOG_ERROR("Failed to load kpf payload\n");
exit(1);
}
LOG("Overriding kpf payload with %s", optarg);
break;
case 'o': // --override-overlay
if (!override_payload_from_file(optarg, &g_payload_overlay)) {
LOG_ERROR("Failed to load overlay payload\n");
exit(1);
}
LOG("Overriding overlay payload with %s", optarg);
break;
case 'r': // --override-ramdisk
if (!override_payload_from_file(optarg, &g_payload_ramdisk)) {
LOG_ERROR("Failed to load ramdisk payload\n");
exit(1);
}
LOG("Overriding ramdisk payload with %s", optarg);
break;
case 'n': // --no-colors
palerain_flags |= palerain_option_no_colors;
break;
case 'q': // --quick
palerain_flags |= palerain_option_quick;
break;
#ifdef _WIN32
case 2: { // --install-drivers <PID>
case 6: { // --install-drivers <PID>
unsigned short parsed_pid = (unsigned short)strtol(optarg, NULL, 16);
if (parsed_pid == 0) {
LOG_ERROR("Invalid PID value provided\n");
@@ -159,7 +243,7 @@ void parse_arguments(int argc, char* argv[]) {
install_libusbk_target(0x05AC, parsed_pid);
exit(0);
}
case 4: { // --remove-drivers <PID>
case 7: { // --remove-drivers <PID>
unsigned short parsed_pid = (unsigned short)strtol(optarg, NULL, 16);
if (parsed_pid == 0) {
LOG_ERROR("Invalid PID value provided\n");