Skip to content

Instantly share code, notes, and snippets.

@sonicjhon1
Created July 10, 2025 07:46
Show Gist options
  • Select an option

  • Save sonicjhon1/a0fd0edad9f5e00e5d394ad61d65595e to your computer and use it in GitHub Desktop.

Select an option

Save sonicjhon1/a0fd0edad9f5e00e5d394ad61d65595e to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
import sys
import os
import re
import argparse
# changelog
# 2022-04-05 Initial
# 2022-04-06 Support AppData/Local installation, make program interactive so it can be run by double-clicking on Windows
# 2022-04-18 Make match independent of variable names
# 2022-05-23 Unlock the advanced options on linux, which are locked by default.
# This is mainly for unlocking dark mode and friends, so other features might not work.
# 2022-05-24 Add option to disable the unlocking
# 2023-12-06 Update to support FontBase 2.20.1
# 2023-12-14 Update to support FontBase 2.20.7
# 2025-07-10 Update to support Fontbase 2.22.48
FILENAME = "app/dist/app.js"
# Essentially replace the function that has `base64").toString("ascii` into a stub that returns `true`
TARGET = re.compile(r',\w+=\w+\(\[iH\],\(\w+\(\w+\)\{(.*?\"base64\"\)\.toString\(\"ascii\"\).*?)}\)\),', re.DOTALL)
REPLACEMENT = r'return true;'
OPTTARGET = ",\"showAwsm\",\"linux\"!==process.platform"
OPTREPLACEMENT = ",\"showAwsm\",true"
WINPATH = "C:/Program Files/FontBase/resources"
WINPATH_LOCAL = f"C:/Users/{os.getlogin()}/AppData/Local/Programs/FontBase/resources"
LINPATH = "/usr/share/fontbase"
parser = argparse.ArgumentParser()
parser.add_argument("dir", type=str, nargs="?", help="FontBase install directory")
parser.add_argument("--no-wait", action="store_true", help="Don't wait after finishing")
args = parser.parse_args()
def check_installdir(d):
return os.path.isfile(os.path.join(d, FILENAME))
def quit(*qargs):
if not args.no_wait:
input("Press Return to continue...")
exit(*qargs)
def mismatch_error():
print("Couldn't find patching target! Version might be incompatible.")
quit(-1)
def perm_error():
print("Insufficient permissions - please run with root privileges.")
quit(-1)
fbpath = None
if args.dir != None:
fbpath = args.dir
elif os.name == "nt" and check_installdir(WINPATH):
fbpath = WINPATH
elif os.name == "nt" and check_installdir(WINPATH_LOCAL):
fbpath = WINPATH_LOCAL
elif os.name == "posix" and check_installdir(LINPATH):
fbpath = LINPATH
if fbpath == None:
print("Please specify the path to your FontBase installation's resources folder as an argument, or enter it here! It should contain a folder called \"app\".")
print(f"Example for Windows: {WINPATH}")
print(f"Example for Linux: {LINPATH}")
try:
while True:
dir = input("Enter Path: ")
if check_installdir(dir):
fbpath = dir
break
else:
print("Invalid path - app.js not found.")
except KeyboardInterrupt:
exit()
fname = os.path.join(fbpath, FILENAME)
print(f"FNAME: {fname}")
try:
with open(fname, encoding="utf-8") as f:
content = f.read()
except FileNotFoundError:
mismatch_error()
except PermissionError:
perm_error()
ms = list(TARGET.finditer(content))
print(f"MS: {ms}")
if not ms:
print("Regex source not found")
mismatch_error()
m = ms[0]
if REPLACEMENT in content:
print("Couldn't find patching target! Application might already have been patched.")
quit()
content = content.replace(m.group(1), REPLACEMENT)
try:
with open(fname, "w", encoding="utf-8") as f:
f.write(content)
except PermissionError:
perm_error()
print("Success! Restart FontBase if necessary.")
quit()
@dimtodim
Copy link

dimtodim commented Aug 2, 2025

can u make for new version 2.22.67

@Ringomaro
Copy link

can u make for new version 2.25.1 ^_^

@sonicjhon1
Copy link
Author

I haven't got the time to update this, I also don't use this app anymore...
Try and change the TARGET variable based on the app's code and it would probably work for newer versions.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment