diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..7772044 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,63 @@ +# Sample workflow for building and deploying a VitePress site to GitHub Pages +# +name: Deploy VitePress site to Pages + +on: + # Runs on pushes targeting the `main` branch. Change this to `master` if you're + # using the `master` branch as the default branch. + push: + branches: [main] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: pages + cancel-in-progress: false + +jobs: + # Build job + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 # Not needed if lastUpdated is not enabled + # - uses: pnpm/action-setup@v3 # Uncomment this if you're using pnpm + - uses: oven-sh/setup-bun@v1 # Uncomment this if you're using Bun + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 20 + - name: Setup Pages + uses: actions/configure-pages@v4 + - name: Install dependencies + run: bun install # or pnpm install / yarn install / bun install + - name: Build with VitePress + run: bun run docs:build # or pnpm docs:build / yarn docs:build / bun run docs:build + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: .vitepress/dist + + # Deployment job + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + needs: build + runs-on: ubuntu-latest + name: Deploy + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d88a875 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules +.vitepress/dist/* +.vitepress/cache/* \ No newline at end of file diff --git a/.vitepress/config.mts b/.vitepress/config.mts new file mode 100644 index 0000000..93dd15d --- /dev/null +++ b/.vitepress/config.mts @@ -0,0 +1,46 @@ +import { defineConfig } from 'vitepress' + +// https://vitepress.dev/reference/site-config +export default defineConfig({ + base: '/bootloader-unlock-wall-of-shame/', + rewrites: { + 'README.md': 'index.md', + '(.*)/README.md': '(.*)/index.md' + }, + title: "Bootloader Unlock: Wall of Shame", + description: "Keeping track of companies that \"care about your data 🥺\"", + + head: [ + ['link', { rel: 'icon', type: 'image/png', href: '/bootloader-unlock-wall-of-shame/favicon.png' }], + ['link', { rel: 'shortcut icon', type: 'image/png', href: '/bootloader-unlock-wall-of-shame/favicon.png' }], + ['meta', { name: "robots", content: "noai, noimageai" }], + ['link', { rel: 'preconnect', href: 'https://fonts.googleapis.com' }], + ['link', { rel: 'preconnect', href: 'https://fonts.gstatic.com', crossorigin: '' }], + ['link', { href: 'https://fonts.googleapis.com/css2?family=Rubik:ital,wght@0,300..900;1,300..900&family=Ubuntu+Mono:ital,wght@0,400;0,700;1,400;1,700&display=swap', rel: 'stylesheet' }] + ], + + cleanUrls: true, + lastUpdated: true, + + markdown: { + image: { + lazyLoading: true + } + }, + + themeConfig: { + logo: { src: '/favicon.png', width: 24, height: 24 }, + + socialLinks: [ + { icon: 'github', link: 'https://github.com/melontini/bootloader-unlock-wall-of-shame' } + ], + + footer: { + message: 'Creative Commons License
Bootloader Unlock: Wall of Shame by https://github.com/melontini/bootloader-unlock-wall-of-shame is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.' + }, + + search: { + provider: 'local' + }, + } +}) diff --git a/.vitepress/theme/index.ts b/.vitepress/theme/index.ts new file mode 100644 index 0000000..602b40a --- /dev/null +++ b/.vitepress/theme/index.ts @@ -0,0 +1,59 @@ +// https://vitepress.dev/guide/custom-theme +import giscusTalk from 'vitepress-plugin-comment-with-giscus'; +import type { Theme, VitePressData } from 'vitepress' +import DefaultTheme from 'vitepress/theme' +import './style.css' +import { useData, useRoute } from 'vitepress'; +import { toRefs } from "vue"; +import { watch, nextTick, onMounted } from 'vue'; +import { GiscusProps } from '@giscus/vue/dist/types' + +export default { + ...DefaultTheme, + enhanceApp(ctx) { + DefaultTheme.enhanceApp(ctx); + }, + setup() { + // Get frontmatter and route + const data = useData(); + const { frontmatter } = toRefs(data); + const route = useRoute(); + + var props: GiscusProps = { + repo: 'melontini/bootloader-unlock-wall-of-shame', + repoId: 'R_kgDOJts7Mg', + category: 'General', + categoryId: 'DIC_kwDOJts7Ms4CXj04', + mapping: 'pathname', + inputPosition: 'top', + reactionsEnabled: '1', + loading: 'lazy' + } + + onMounted(() => { + fixLang(props, data); + }) + watch(() => route.path, () => nextTick(() => { + fixLang(props, data); + })) + + // Obtain configuration from: https://giscus.app/ + giscusTalk(props, { frontmatter, route }, true); + } +} satisfies Theme + +const fixLang = (props: GiscusProps, data: VitePressData) => { + var lang = data.lang.value + switch (lang) { + case "en-US": + lang = "en" + break; + case "zh-CN": + lang = "zh-CN" + break; + default: + lang = "en" + break; + } + props.lang = lang +} \ No newline at end of file diff --git a/.vitepress/theme/style.css b/.vitepress/theme/style.css new file mode 100644 index 0000000..3bedf81 --- /dev/null +++ b/.vitepress/theme/style.css @@ -0,0 +1,155 @@ +/** + * Customize default theme styling by overriding CSS variables: + * https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css + */ + +/** + * Colors + * + * Each colors have exact same color scale system with 3 levels of solid + * colors with different brightness, and 1 soft color. + * + * - `XXX-1`: The most solid color used mainly for colored text. It must + * satisfy the contrast ratio against when used on top of `XXX-soft`. + * + * - `XXX-2`: The color used mainly for hover state of the button. + * + * - `XXX-3`: The color for solid background, such as bg color of the button. + * It must satisfy the contrast ratio with pure white (#ffffff) text on + * top of it. + * + * - `XXX-soft`: The color used for subtle background such as custom container + * or badges. It must satisfy the contrast ratio when putting `XXX-1` colors + * on top of it. + * + * The soft color must be semi transparent alpha channel. This is crucial + * because it allows adding multiple "soft" colors on top of each other + * to create a accent, such as when having inline code block inside + * custom containers. + * + * - `default`: The color used purely for subtle indication without any + * special meanings attched to it such as bg color for menu hover state. + * + * - `brand`: Used for primary brand colors, such as link text, button with + * brand theme, etc. + * + * - `tip`: Used to indicate useful information. The default theme uses the + * brand color for this by default. + * + * - `warning`: Used to indicate warning to the users. Used in custom + * container, badges, etc. + * + * - `danger`: Used to show error, or dangerous message to the users. Used + * in custom container, badges, etc. + * -------------------------------------------------------------------------- */ + + :root { + --vp-c-default-1: var(--vp-c-gray-1); + --vp-c-default-2: var(--vp-c-gray-2); + --vp-c-default-3: var(--vp-c-gray-3); + --vp-c-default-soft: var(--vp-c-gray-soft); + + --vp-c-brand-1: var(--vp-c-red-1); + --vp-c-brand-2: var(--vp-c-red-2); + --vp-c-brand-3: var(--vp-c-red-3); + --vp-c-brand-soft: var(--vp-c-red-soft); + + --vp-c-tip-1: var(--vp-c-brand-1); + --vp-c-tip-2: var(--vp-c-brand-2); + --vp-c-tip-3: var(--vp-c-brand-3); + --vp-c-tip-soft: var(--vp-c-brand-soft); + + --vp-c-warning-1: var(--vp-c-yellow-1); + --vp-c-warning-2: var(--vp-c-yellow-2); + --vp-c-warning-3: var(--vp-c-yellow-3); + --vp-c-warning-soft: var(--vp-c-yellow-soft); + + --vp-c-danger-1: var(--vp-c-red-1); + --vp-c-danger-2: var(--vp-c-red-2); + --vp-c-danger-3: var(--vp-c-red-3); + --vp-c-danger-soft: var(--vp-c-red-soft); + + --vp-font-family-base: "Rubik", sans-serif; + --vp-font-family-mono: "Ubuntu Mono", monospace; +} + +.dark { + --vp-c-bg: #000000; + --vp-c-bg-alt: #0b0b0b; + --vp-c-bg-elv: #060606; + --vp-c-bg-soft: #111111; +} + +.dark { + --vp-c-border: var(--vp-c-brand-3); + --vp-c-divider: var(--vp-c-brand-soft); + --vp-c-gutter: var(--vp-c-brand-soft); +} + +/** + * Component: Button + * -------------------------------------------------------------------------- */ + +:root { + --vp-button-brand-border: transparent; + --vp-button-brand-text: var(--vp-c-white); + --vp-button-brand-bg: var(--vp-c-brand-3); + --vp-button-brand-hover-border: transparent; + --vp-button-brand-hover-text: var(--vp-c-white); + --vp-button-brand-hover-bg: var(--vp-c-brand-2); + --vp-button-brand-active-border: transparent; + --vp-button-brand-active-text: var(--vp-c-white); + --vp-button-brand-active-bg: var(--vp-c-brand-1); +} + +/** + * Component: Home + * -------------------------------------------------------------------------- */ + +:root { + --vp-home-hero-name-color: transparent; + --vp-home-hero-name-background: -webkit-linear-gradient( + 120deg, + #bd34fe 30%, + #41d1ff + ); + + --vp-home-hero-image-background-image: linear-gradient( + -45deg, + #bd34fe 50%, + #47caff 50% + ); + --vp-home-hero-image-filter: blur(44px); +} + +@media (min-width: 640px) { + :root { + --vp-home-hero-image-filter: blur(56px); + } +} + +@media (min-width: 960px) { + :root { + --vp-home-hero-image-filter: blur(68px); + } +} + +/** + * Component: Custom Block + * -------------------------------------------------------------------------- */ + +:root { + --vp-custom-block-tip-border: transparent; + --vp-custom-block-tip-text: var(--vp-c-text-1); + --vp-custom-block-tip-bg: var(--vp-c-brand-soft); + --vp-custom-block-tip-code-bg: var(--vp-c-brand-soft); +} + +/** + * Component: Algolia + * -------------------------------------------------------------------------- */ + +.DocSearch { + --docsearch-primary-color: var(--vp-c-brand-1) !important; +} + diff --git a/README.md b/README.md index db0c6b5..14058d5 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,8 @@ If you know of specific details/unlocking methods, please PR them or drop them i > Reminder that no matter how nice a company is,
> you should not trust them unless their unlock process is 100% offline! +[[toc]] + ## â›” Avoid at all costs! ### Huawei/Honor @@ -188,4 +190,3 @@ Xiaomi Mi A1 and maybe all MSM89** manufactured before 2018:
*** -Creative Commons License
Bootloader Unlock: Wall of Shame by https://github.com/melontini/bootloader-unlock-wall-of-shame is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. diff --git a/bu_wos_banner_s.webp b/bu_wos_banner_s.webp deleted file mode 100644 index a403b81..0000000 Binary files a/bu_wos_banner_s.webp and /dev/null differ diff --git a/bu_wos_gh.jpg b/bu_wos_gh.jpg deleted file mode 100644 index bac6b97..0000000 Binary files a/bu_wos_gh.jpg and /dev/null differ diff --git a/bun.lockb b/bun.lockb new file mode 100644 index 0000000..6d05dee Binary files /dev/null and b/bun.lockb differ diff --git a/package.json b/package.json new file mode 100644 index 0000000..7515c6d --- /dev/null +++ b/package.json @@ -0,0 +1,11 @@ +{ + "dependencies": { + "vitepress": "^1.0.2", + "vitepress-plugin-comment-with-giscus": "^1.1.12" + }, + "scripts": { + "docs:dev": "vitepress dev", + "docs:build": "vitepress build", + "docs:preview": "vitepress preview" + } +} \ No newline at end of file diff --git a/public/ai.txt b/public/ai.txt new file mode 100644 index 0000000..4443459 --- /dev/null +++ b/public/ai.txt @@ -0,0 +1,88 @@ +# Spawning AI +# Prevent datasets from using the following file types + +User-Agent: * +Disallow: *.txt +Disallow: *.pdf +Disallow: *.doc +Disallow: *.docx +Disallow: *.odt +Disallow: *.rtf +Disallow: *.tex +Disallow: *.wks +Disallow: *.wpd +Disallow: *.wps +Disallow: *.html +Disallow: *.bmp +Disallow: *.gif +Disallow: *.ico +Disallow: *.jpeg +Disallow: *.jpg +Disallow: *.png +Disallow: *.svg +Disallow: *.tif +Disallow: *.tiff +Disallow: *.webp +Disallow: *.aac +Disallow: *.aiff +Disallow: *.amr +Disallow: *.flac +Disallow: *.m4a +Disallow: *.mp3 +Disallow: *.oga +Disallow: *.opus +Disallow: *.wav +Disallow: *.wma +Disallow: *.mp4 +Disallow: *.webm +Disallow: *.ogg +Disallow: *.avi +Disallow: *.mov +Disallow: *.wmv +Disallow: *.flv +Disallow: *.mkv +Disallow: *.py +Disallow: *.js +Disallow: *.java +Disallow: *.c +Disallow: *.cpp +Disallow: *.cs +Disallow: *.h +Disallow: *.css +Disallow: *.php +Disallow: *.swift +Disallow: *.go +Disallow: *.rb +Disallow: *.pl +Disallow: *.sh +Disallow: *.sql +Disallow: / +Disallow: * +# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@( @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ &@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@% @@@@@@@@@ +# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@ +# @@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ *@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +# @@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +# @@@@@@@@@@@( @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +# @@@@@@@@@@@@ %@@@@@/@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +# @@@@@@@@@@@@ %@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +# @@@@@@@@@@@, @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +# @@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@( %@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +# @@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@ +# @@@@@@@@@@@/@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@ +# @@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +# @@@@@@@@@@@* @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@, @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +# @@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@ *@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +# @@@@@@@@@@@@ %@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +# @@@@@@@@@@@@ %@@@@& @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +# @@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +# @@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +# @@@@@@@@@@@ .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@ +# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@ +# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@* @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ spawning.ai \ No newline at end of file diff --git a/public/favicon.png b/public/favicon.png new file mode 100644 index 0000000..7ce0987 Binary files /dev/null and b/public/favicon.png differ diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..57ca279 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,20 @@ +User-agent: CCBot +Disallow: / + +User-agent: ChatGPT-User +Disallow: / + +User-agent: GPTBot +Disallow: / + +User-agent: Google-Extended +Disallow: / + +User-agent: Omgilibot +Disallow: / + +User-agent: Omgili +Disallow: / + +User-agent: FacebookBot +Disallow: / \ No newline at end of file