Compare commits

...

12 Commits

Author SHA1 Message Date
Mykola Grymalyuk
92c02996ae Fix bug 2021-03-11 15:16:30 -07:00
Mykola Grymalyuk
92d7349ec0 Sync changelog 2021-03-11 15:10:26 -07:00
Mykola Grymalyuk
1e8c00071d “Fix” builds detection breaking 2021-03-11 15:09:26 -07:00
Mykola Grymalyuk
1bf4cf7dce Clean up README 2021-03-11 12:34:20 -07:00
Dhinak G
79559943ad Update config.js 2021-03-11 14:19:48 -05:00
Dhinak G
f5dc3d7939 Update config.js 2021-03-11 14:16:17 -05:00
Dhinak G
4ed36074e6 Fix typo 2021-03-11 14:12:06 -05:00
Dhinak G
608053b8e1 Update build_test_deploy.yml 2021-03-11 14:09:24 -05:00
Dhinak G
928d7ed759 Update build_test_deploy.yml 2021-03-11 14:09:10 -05:00
Mykola Grymalyuk
f68cfbcb69 Forward build to docs 2021-03-11 12:00:15 -07:00
Mykola Grymalyuk
0ad2fb53d2 Add VuePress site 2021-03-11 11:55:16 -07:00
Mykola Grymalyuk
13d1110b7a Increment build 2021-03-11 10:43:09 -07:00
27 changed files with 13262 additions and 68 deletions

35
.github/workflows/build_test_deploy.yml vendored Normal file
View File

@@ -0,0 +1,35 @@
name: Build/Test/Deploy
on:
push:
branches-ignore:
- gh-pages
workflow_dispatch:
pull_request:
jobs:
build:
name: Build Site and Deploy
runs-on: ubuntu-latest
steps:
- uses: actions/setup-node@v2-beta
with:
node-version: '12'
- name: Checkout Repository
uses: actions/checkout@v2
with:
fetch-depth: '0'
persist-credentials: false
submodules: 'recursive'
- name: Install
run: npm install
working-directory: 'docs'
- name: Build
run: npm run build
working-directory: 'docs'
- name: Deploy
uses: JamesIves/github-pages-deploy-action@3.7.1
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main'}}
with:
ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
BRANCH: gh-pages
FOLDER: docs/.vuepress/dist/
CLEAN: true

View File

@@ -9,7 +9,7 @@ on:
jobs:
build:
name: Build
name: Build App
runs-on: macos-latest
steps:
- uses: actions/checkout@v2

5
.gitignore vendored
View File

@@ -7,3 +7,8 @@
__pycache__/
*.py[cod]
*$py.class
/docs/.vuepress/dist
/docs/.vuepress/.config.js.swp
/docs/yarn.lock
/docs/yarn-error.log
/docs/node_modules/

View File

@@ -1,5 +1,8 @@
# OpenCore Legacy Patcher changelog
## 0.0.17
- Fix build detection breaking on older OS
## 0.0.16
- Move Serial selection to Patcher Settings
- Add new SMBIOS patching options:

View File

@@ -317,7 +317,8 @@ running, however this will enforce iMac Nvidia Build Patches.
menu = utilities.TUIMenu(title, "Please select an option: ", in_between=in_between, auto_number=True, top_level=True)
options = (
[["Build OpenCore", self.build_opencore]] if ((self.constants.custom_model or self.current_model) in ModelArray.SupportedSMBIOS) else []) + ([["Install OpenCore to USB/internal drive", self.install_opencore]] if (self.constants.detected_os > 10.12) else []) + [
[["Build OpenCore", self.build_opencore]] if ((self.constants.custom_model or self.current_model) in ModelArray.SupportedSMBIOS) else []) + [
["Install OpenCore to USB/internal drive", self.install_opencore],
["Change Model", self.change_model],
["Patcher Settings", self.patcher_settings],
["Credits", self.credits]

View File

@@ -2,7 +2,7 @@
<img src="images/OC-Patcher.png" width="256">
A python program for building and booting OpenCore on legacy Macs, see [Supported SMBIOS](/docs/MODELS.md) on whether your model is supported.
A python program for building and booting OpenCore on legacy Macs, see [Supported SMBIOS](https://dortania.github.io/OpenCore-Legacy-Patcher/MODELS.html) on whether your model is supported.
Supported features:
@@ -19,64 +19,17 @@ Note: Only clean-installs and upgrades are supported, installs already patched w
Note 2: Currently OpenCore Legacy Patcher only supports macOS 11, Big Sur installs. For older OSes, please use [Dosdude1's patchers](http://dosdude1.com)
## How to use
See the online guide on how:
To use, simply:
1. Ensure your hardware is compatible(See [Supported SMBIOS](/docs/MODELS.md))
2. [Download and build macOS Installer](./docs/INSTALLER.md)
3. Download the latest release: [OpenCore Legacy Patcher Releases](https://github.com/dortania/Opencore-Legacy-Patcher/releases)
4. Run the `OpenCore-Patcher.app`
5. Run `Build OpenCore`(if building for another machine, please select `Change Model`)
| First Run | Build EFI |
| :--- | :--- |
| ![](images/first-run.png) | ![](images/build-efi.png) |
* Note: When the patcher ask you to if you want to use original serials, we recommend doing so. To determine yourself if you want:
* Original: Mac is nearly identical to pre-patcher, with only minor changes in SMBIOS. Ideal configuration for iServices to work correctly
* Custom: Rebuilds SMBIOS table to Mac you're spoofing, generally recommended when troubleshooting such as APFS support missing in the installer
6. Run `Install OpenCore to USB/internal drive`
| Select Drive | Select EFI/FAT32 Partition |
| :--- | :--- |
| ![](images/disk-start.png) | ![](images/disk-efi.png) |
* Ensure you install OpenCore onto a FAT32 partition to ensure your Mac is able to boot it, you may need to format your drive as GUID/GPT in Disk Utility
7. Reboot machine while holding `Option` to select OpenCore, then boot the macOS Installer
| Mac Boot Picker | OpenCore Picker |
| :--- | :--- |
| ![](images/efi-boot.png) | ![](images/oc-boot.png) |
For nightly builds, you can either run `OpenCore-Patcher.command` from [main](https://github.com/dortania/Opencore-Legacy-Patcher/archive/main.zip) or grab the binary from [Github Actions](https://github.com/dortania/Opencore-Legacy-Patcher/actions). Note the latter does not require a py3 install.
## Post-Installation
Once finished, see below for common post-installation steps:
* [Post-Installation](./docs/POST-INSTALL.md)
## How to uninstall OpenCore?
To remove OpenCore is actually quite simply:
1. Remove OpenCore either from the USB or internal drive
* You'll need to mount the drive's EFI partition, and delete the EFI folder
* [See here for example how to mount](https://dortania.github.io/OpenCore-Post-Install/universal/oc2hdd.html)
2. Reset NVRAM
* [Reset NVRAM or PRAM on your Mac](https://support.apple.com/HT204063)
Know that if you are on Big Sur when you remove the EFI folder, your Mac will no longer boot and show the prohibited symbol. Be ready to install an older version of macOS before you uninstall OpenCore.
* [OpenCore Legacy Patcher Guide](https://dortania.github.io/OpenCore-Legacy-Patcher/)
## Patcher Warnings
Since this patcher tricks macOS into thinking you're running a newer Mac, certain functionality may be broken:
* Boot Camp Assistant.app
* We recommend running the assistant on a natively supported OS
* We recommend running the assistant on a natively supported OS, running via the patcher may result in unforeseen issues
* Legacy Windows Booting
* Currently OpenCore cannot boot MBR-based installs, so Ivy Bridge and older Machines may not be able to see Windows in OpenCore's Boot Picker
## [Troubleshooting](/docs/TROUBLESHOOTING.md)
* Boot Buddy support
* Due to how OpenCore overwrites NVRAM , the usage of Boot Buddy and such tools are **highly** in-advised

View File

@@ -8,7 +8,7 @@ from pathlib import Path
class Constants:
def __init__(self):
self.patcher_version = "0.0.16"
self.patcher_version = "0.0.17"
self.opencore_commit = "7bb41aa - 2021-03-06"
self.opencore_version = "0.6.8"
self.lilu_version = "1.5.1"

View File

@@ -95,12 +95,8 @@ class BuildOpenCore:
# WiFi patches
# TODO: -a is not supported in Lion and older, need to add proper fix
if self.constants.detected_os < 10.8:
print(f"- Unable to run Wifi detection on {self.constants.detected_os}")
wifi_devices = ["NULL", "NULL"]
else:
wifi_devices = plistlib.loads(subprocess.run("ioreg -c IOPCIDevice -r -d2 -a".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode())
wifi_devices = [i for i in wifi_devices if i["vendor-id"] == binascii.unhexlify("E4140000") and i["class-code"] == binascii.unhexlify("00800200")]
wifi_devices = plistlib.loads(subprocess.run("ioreg -c IOPCIDevice -r -d2 -a".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode())
wifi_devices = [i for i in wifi_devices if i["vendor-id"] == binascii.unhexlify("E4140000") and i["class-code"] == binascii.unhexlify("00800200")]
if self.constants.wifi_build is True:
print("- Skipping Wifi patches on request")
elif not self.constants.custom_model and wifi_devices and self.hexswap(binascii.hexlify(wifi_devices[0]["device-id"]).decode()[:4]) in ModelArray.nativeWifi:

14
docs/.markdownlint.json Normal file
View File

@@ -0,0 +1,14 @@
{
"default": true,
"line_length": false,
"no-alt-text": false,
"no-inline-html": false,
"header-increment": false,
"no-duplicate-header": false,
"fenced-code-language": false,
"no-emphasis-as-heading": false,
"single-title": false,
"ul-style": {
"style": "asterisk"
}
}

10
docs/.markdownlintignore Normal file
View File

@@ -0,0 +1,10 @@
/node_modules/
/_book/
*.json
/extra-files/
/.git/
/icons/
/images/
/styles/
/.github/
/.vuepress/

116
docs/.vuepress/config.js Executable file
View File

@@ -0,0 +1,116 @@
const {
description
} = require('../package')
module.exports = {
title: 'OpenCore Legacy Patcher',
head: [
['meta', {
name: 'theme-color',
content: '#3eaf7c'
}],
['meta', {
name: 'apple-mobile-web-app-capable',
content: 'yes'
}],
['meta', {
name: 'apple-mobile-web-app-status-bar-style',
content: 'black'
}],
["link", {
rel: "'stylesheet",
href: "/styles/website.css"
},]
],
base: '/OpenCore-Legacy-Patcher/',
watch: {
$page(newPage, oldPage) {
if (newPage.key !== oldPage.key) {
requestAnimationFrame(() => {
if (this.$route.hash) {
const element = document.getElementById(this.$route.hash.slice(1));
if (element && element.scrollIntoView) {
element.scrollIntoView();
}
}
});
}
}
},
markdown: {
extendMarkdown: md => {
md.use(require('markdown-it-multimd-table'), {
rowspan: true,
});
}
},
theme: 'vuepress-theme-succinct',
globalUIComponents: [
'ThemeManager'
],
themeConfig: {
lastUpdated: true,
repo: 'https://github.com/dortania/OpenCore-Legacy-Patcher',
editLinks: true,
editLinkText: 'Help us improve this page!',
logo: 'homepage.png',
sidebar: [{
title: 'Introduction',
collapsable: false,
sidebarDepth: 1,
children: [
'START',
'MODELS',
]
},
{
title: 'Setting up',
collapsable: false,
sidebarDepth: 1,
children: [
'INSTALLER',
'BUILD',
]
},
{
title: 'Installation',
collapsable: false,
sidebarDepth: 1,
children: [
'BOOT',
'POST-INSTALL',
]
},
{
title: 'Misc',
collapsable: false,
sidebarDepth: 1,
children: [
'TROUBLESHOOTING',
'UNINSTALL',
]
},
],
},
plugins: [
'@vuepress/plugin-back-to-top',
'vuepress-plugin-smooth-scroll',
['vuepress-plugin-medium-zoom',
{
selector: "img",
options: {
background: 'var(--bodyBgColor)'
}
}],
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 270 KiB

View File

@@ -0,0 +1,49 @@
/**
* Custom Styles here.
*
* refhttps://v1.vuepress.vuejs.org/config/#index-styl
*/
[data-theme='light']
--sideBgColor $sideBgColor
[data-theme='dark']
--sideBgColor $sideBgColorDark
--dropShadowColor $dropShadowColor
.home .hero img
max-width 450px!important
.navbar
filter drop-shadow(0px 1px 1px var(--dropShadowColor))
.sidebar
background-color var(--sideBgColor)
div[class*="language-"]
pre, pre[class*="language-"]
margin-top 0
html {
overflow-y: scroll;
overflow-x: hidden;
background-color: unset;
}
::-webkit-scrollbar {
width 0px
background transparent /* make scrollbar transparent */
}
tr
&:nth-child(1n)
background-color var(--bodyBgColor)
&:nth-child(2n)
background-color var(--sideBgColor)
.dropdown-wrapper .nav-dropdown
border 1px solid var(--sideBgColor)!important
background-color var(--sideBgColor)!important
box-shadow 0px 0px 2px var(--bodyBgColor)
right -12%!important

View File

@@ -0,0 +1,23 @@
/**
* Custom palette here.
*
* refhttps://v1.vuepress.vuejs.org/zh/config/#palette-styl
*/
$bodyFontSize = 16px
$fallbackTheme = 'dark'
$dropShadowColor = #111112
// Light Theme
$accentColor = #19b3e7
$textColor = #2c3e50
$bodyBgColor = #fff
$sideBgColor = #fff
$badgeTipColor = #caf2ff
// Dark Theme
$accentColorDark = #30BCD5
$textColorDark = #ccc
$bodyBgColorDark = #2d3033
$sideBgColorDark = #363b40
$badgeTipColorDark = #023e52

20
docs/BOOT.md Normal file
View File

@@ -0,0 +1,20 @@
# Booting OpenCore and macOS
Now we finally get to boot OpenCore!
Reboot machine while holding `Option` to select the EFI Boot entry with the OpenCore icon:
* This will be the Mac Boot Picker
![](../images/efi-boot.png)
Now that you've loaded OpenCore, now select Install macOS!:
* This will be the OpenCore Picker
![](../images/oc-boot.png)
After plenty of verbose booting, you will reach the installer screen! From there it's just like any normal macOS install.
# Once installed and booting, head to [Post-Installation](./POST-INSTALL.md)

37
docs/BUILD.md Normal file
View File

@@ -0,0 +1,37 @@
# Building and installing OpenCore
Now that we have a macOS installer, lets now build our OpenCore configuration!
First Download the latest release:
* [OpenCore Legacy Patcher Releases](https://github.com/dortania/Opencore-Legacy-Patcher/releases)
Next, run the `OpenCore-Patcher.app`:
![](../images/first-run.png)
From here you have a couple important options:
* Build OpenCore
* Install OpenCore to USB/internal drive
* Change Model
* Patcher Settings
If you're patching for a different machine than you're running, please select "Change Model" and enter the updated SMBIOS. For more advanced users, you may also tweak the patcher's build settings via "Patcher Settings"
Now lets enter "Build OpenCore":
![](../images/build-efi.png)
The process should be quite quick to build, once finished you'll be plopped back to the main menu.
Next lets run `Install OpenCore to USB/internal drive`:
| Select Drive | Select EFI/FAT32 Partition |
| :--- | :--- |
| ![](../images/disk-start.png) | ![](../images/disk-efi.png) |
* If you have issues, please ensure you install OpenCore onto a FAT32 partition to ensure your Mac is able to boot it. You will need to format your drive as GUID/GPT in Disk Utility
# Once finished, head to [Booting OpenCore and macOS](./BOOT.md)

View File

@@ -1,9 +1,9 @@
# How to download and build macOS Installers
# Download and build macOS Installers
* [Downloading](#downloading)
* [Building](#building)
This doc is centered around downloading and writting the macOS installer to a USB. If you're already familair with how to do this, you can skip.
This doc is centered around downloading and writing the macOS installer to a USB. If you're already familiar with how to do this, you can skip.
* Note: 16GB+ USB will be required for the installer
@@ -28,7 +28,7 @@ Once finished, you'll find in your `~/macOS-Installer/` folder a DMG containing
* Note: We recommend to move the Install macOS.app into the `/Applications` folder, as we'll be executing commands from there.
* Note 2: Running Cmd+Shift+G in Finder will allow you to easily jump to `~/macOS-installer`
![](../images/munki-done.png)
![](../images/munki-done-2.png)
![](../images/munki-dmg.png)
@@ -50,4 +50,4 @@ sudo /Applications/Install\ macOS\ Big\ Sur.app/Contents/Resources/createinstall
![](../images/createinstallmedia.png)
# Once finished, [return to the README to finish up](../README.md)
# Once finished, head to [Building and installing OpenCore](./BUILD.md)

View File

@@ -122,4 +122,6 @@ The below table will list all supported and unsupported functions of the patcher
| :--- | :--- | :--- | :--- |
| Xserve1,1 | Mid-2006 | <span style="color:red"> NO </span> | 32-Bit Firmware limitation |
| Xserve2,1 | Early 2008 | ^^ | ^^ |
| Xserve3,1 | Early 2009 | <span style="color:#30BCD5"> YES </span> | <span style="color:green"> Everything is supported as long as GPU is Metal capable </span> |
| Xserve3,1 | Early 2009 | <span style="color:#30BCD5"> YES </span> | <span style="color:green"> Everything is supported as long as GPU is Metal capable </span> |
# Once you've verified your hardware is supported, head to [Download and build macOS Installers](./INSTALLER.md)

20
docs/README.md Normal file
View File

@@ -0,0 +1,20 @@
---
home: true
heroImage: /homepage.png
heroText: OpenCore Legacy Patcher
actionText: Getting Started→
actionLink: START.md
meta:
- name: description
content: Experience macOS just like before
features:
- title: Built with security in mind
details: Supporting System Integrity Protection(SIP), FileVault 2, .im4m Secure Boot and Vaulting. You're just as secure as a supported Mac
- title: Native OTA updates
details: Install updates the moment the come out just like on a supported Mac, and no more 12GB+ updates.
- title: Zero firmware patching
details: No need to patch APFS ROM support, all protocol upgrades are done in memory and never permanent.
footer: Copyright © Dortania 2020-2021
---

19
docs/START.md Normal file
View File

@@ -0,0 +1,19 @@
# What is OpenCore?
This is a sophisticated boot loader used to inject and patch data in memory, instead of on disk. This means we're able to get near-native experience on many unsupported Macs with Metal GPUs. This includes many of the long desired features of other patchers such as:
* System Integrity Protection, FileVault 2, .im4m Secure Boot and Vaulting
* Native OTA OS DELTA updates on all Macs
* Recovery OS, Safe Mode and Single-user Mode booting
While many PC users from the Hackintosh community are familiar with OpenCore, OpenCore was designed as Mac and PC agnostic ensuring both platforms can use it easily. And with OpenCore Legacy Patcher, we help automate the process making running with OpenCore that much easier.
## How do I get started?
1. The first step of ensuring whether your model is support is checking here:
* [Supported Models](./MODELS.md)
2. [Download and build macOS Installer](./INSTALLER.md)
3. [Run the `OpenCore-Patcher.app`](./BUILD.md)
4. [Reboot and boot OpenCore](./BOOT.md)

11
docs/UNINSTALL.md Normal file
View File

@@ -0,0 +1,11 @@
# Uninstalling OpenCore
To remove OpenCore is actually quite simply:
1. Remove OpenCore either from the USB or internal drive
* You'll need to mount the drive's EFI partition, and delete the EFI folder
* [See here for example how to mount](https://dortania.github.io/OpenCore-Post-Install/universal/oc2hdd.html)
2. Reset NVRAM
* [Reset NVRAM or PRAM on your Mac](https://support.apple.com/HT204063)
Know that if you are on Big Sur when you remove the EFI folder, your Mac will no longer boot and show the prohibited symbol. Be ready to install an older version of macOS before you uninstall OpenCore.

View File

@@ -1 +0,0 @@
theme: jekyll-theme-minimal

12795
docs/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

51
docs/package.json Normal file
View File

@@ -0,0 +1,51 @@
{
"name": "OpenCore-Legacy-Patcher",
"version": "0.0.1",
"description": "Guide to put macOS on unsupported devices",
"main": "",
"author": {
"name": "Dortania",
"url": "https://github.com/dortania"
},
"repository": {
"type": "git",
"url": "git+https://github.com/dortania/OpenCore-Legacy-Patcher.git"
},
"scripts": {
"dev": "vuepress dev",
"build": "vuepress build",
"fix-lint": "run-script-os",
"fix-lint:default": "(echo Attempting to fix lint... && markdownlint -c .markdownlint.json -p .markdownlintignore '**/*.md' -f && echo Fixed successfully, please commit.) || (echo Fix failed! && exit 1)",
"fix-lint:win32": "(echo Attempting to fix lint... && markdownlint -c .markdownlint.json -p .markdownlintignore **/*.md -f && echo Fixed successfully, please commit.) || (echo Fix failed! && exit 1)",
"lint": "run-script-os",
"lint:default": "(echo Linting... && markdownlint -c .markdownlint.json -p .markdownlintignore '**/*.md' && echo Lint passed.) || (echo Lint failed! Please review and fix errors. && exit 1)",
"lint:win32": "(echo Linting... && markdownlint -c .markdownlint.json -p .markdownlintignore **/*.md && echo Lint passed.) || (echo Lint failed! Please review and fix errors. && exit 1)",
"lint-ci": "run-script-os",
"lint-ci:default": "(echo Linting... && markdownlint -c .markdownlint.json -p .markdownlintignore '**/*.md' && echo Lint passed.) || ((echo Lint failed, attempting fix... && markdownlint -c .markdownlint.json -p .markdownlintignore '**/*.md' -f && echo Fix generated successfully. Please apply the following diff using git apply && git diff) || echo Fix failed! && exit 1)",
"lint-ci:win32": "(echo Linting... && markdownlint -c .markdownlint.json -p .markdownlintignore **/*.md && echo Lint passed.) || ((echo Lint failed, attempting fix... && markdownlint -c .markdownlint.json -p .markdownlintignore **/*.md -f && echo Fix generated successfully. Please apply the following diff using git apply && git diff) || echo Fix failed! && exit 1)",
"sort-dict": "node ./scripts/sortDict.js",
"spellcheck": "run-script-os",
"spellcheck:default": "(spellchecker --plugins spell indefinite-article repeated-words syntax-urls --dictionaries dictionary/dictionary.txt dictionary/opencorekeys.txt --files '**/*.md' && echo Spellcheck passed.) || (echo Spellcheck failed! Please review and fix errors/add words to dictionary as needed. && exit 1)",
"spellcheck:win32": "(spellchecker --plugins spell indefinite-article repeated-words syntax-urls --dictionaries dictionary/dictionary.txt dictionary/opencorekeys.txt --files **/*.md && echo Spellcheck passed.) || (echo Spellcheck failed! Please review and fix errors/add words to dictionary as needed. && exit 1)",
"test": "run-script-os",
"test:default": "npm run lint --silent; npm run spellcheck --silent",
"test:win32": "npm run lint --silent & npm run spellcheck --silent"
},
"license": "CC-BY-NC-SA-4.0",
"devDependencies": {
"@vuepress/plugin-back-to-top": "^1.7.1",
"markdown-it-multimd-table": "^4.0.3",
"markdown-link-check": "^3.8.5",
"markdownlint-cli": "^0.26.0",
"run-script-os": "^1.1.4",
"spellchecker-cli": "^4.4.0",
"vuepress": "^1.7.1",
"vuepress-plugin-medium-zoom": "^1.1.9",
"vuepress-plugin-zooming": "^1.1.8",
"vuepress-theme-book": "0.0.5",
"vuepress-theme-dark-new": "^0.1.2",
"vuepress-theme-succinct": "^1.6.4",
"vuepress-theme-yuu": "^2.3.0"
},
"homepage": "https://dortania.github.io/OpenCore-Legacy-Patcher/"
}

View File

@@ -0,0 +1,9 @@
from pathlib import Path
import subprocess
for i in [i for i in list(Path().resolve().glob("**/*.md")) if "node_modules" not in str(i.parent) and "_book" not in str(i.parent)]:
#bert = subprocess.run(['npx', 'markdown-link-check', '"' + str(i) + '"', '-c', '.markdownlinkcheck.json'], capture_output=True, shell=True, cwd=Path().resolve())
bert = subprocess.run('npx markdown-link-check "' + str(i) + '"', stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True, cwd=Path().resolve())
outpot = bert.stdout.decode().replace("\r", "").split("\n")
outpot = [i for i in outpot if ("FILE: " in i or " → Status: " in i) and " → Status: 429" not in i]
[print(i) for i in outpot]

26
docs/scripts/sortDict.js Normal file
View File

@@ -0,0 +1,26 @@
const fs = require("fs");
process.chdir(__dirname);
console.log("Reading dictionary.txt");
let dictionary = fs.readFileSync("../dictionary/dictionary.txt", { encoding: "UTF8" })
.replace("\r", "").split("\n");
let ocDictionary = fs.readFileSync("../dictionary/opencorekeys.txt", { encoding: "UTF8" })
.replace("\r", "").split("\n");
dictionary = dictionary.filter(string => string != "");
ocDictionary = ocDictionary.filter(string => string != "");
dictionary = dictionary.filter((string, index) => dictionary.indexOf(string) == index);
ocDictionary = ocDictionary.filter((string, index) => ocDictionary.indexOf(string) == index);
dictionary = dictionary.filter(string => !ocDictionary.includes(string));
console.log("Sorting...");
dictionary.sort();
ocDictionary.sort();
console.log("Writing dictionary.txt");
fs.writeFileSync("../dictionary/dictionary.txt", dictionary.join("\n"));
fs.writeFileSync("../dictionary/opencorekeys.txt", ocDictionary.join("\n"));