From 3f0f57400ef783198fdff2a2476b89237b578fa2 Mon Sep 17 00:00:00 2001 From: Tyler Nguyen Date: Wed, 5 Jun 2024 18:18:28 -0500 Subject: [PATCH] chore: initial commit --- .github/FUNDING.yml | 1 + .github/dependabot.yml | 20 + .github/workflows/build.yml | 83 ++ .gitignore | 6 + LICENSE | 352 ++++++++ docs/.authors.yml | 7 + docs/about.md | 106 +++ docs/anime.md | 42 + docs/assets/favicon.png | Bin 0 -> 17080 bytes .../font/BerkeleyMono/BerkeleyMono-Bold.woff2 | Bin 0 -> 38696 bytes .../BerkeleyMono-BoldItalic.woff2 | Bin 0 -> 39432 bytes .../BerkeleyMono/BerkeleyMono-Italic.woff2 | Bin 0 -> 39360 bytes .../BerkeleyMono/BerkeleyMono-Regular.woff2 | Bin 0 -> 37724 bytes .../BerkeleyMonoVariable-Italic.woff2 | Bin 0 -> 40484 bytes .../BerkeleyMonoVariable-Regular.woff2 | Bin 0 -> 37272 bytes docs/assets/logo.png | Bin 0 -> 17080 bytes docs/board-games.md | 35 + docs/books.md | 155 ++++ docs/comics.md | 136 +++ docs/contact.md | 61 ++ docs/credits.md | 110 +++ docs/dotfiles.md | 71 ++ docs/graphic-novels.md | 36 + docs/hardware.md | 244 ++++++ docs/index.md | 16 + docs/javascripts/feedback.js | 20 + docs/javascripts/tablesort.js | 6 + docs/manga.md | 21 + docs/movies.md | 39 + docs/peripherals.md | 183 ++++ docs/podcasts.md | 85 ++ docs/posts/.meta.yml | 3 + docs/posts/diagnostics/.meta.yml | 6 + docs/posts/diagnostics/admonitions.md | 121 +++ docs/posts/diagnostics/code.md | 229 +++++ docs/posts/diagnostics/markdown.md | 43 + docs/posts/diagnostics/mermaid.md | 604 +++++++++++++ docs/posts/hello-world.md | 96 +++ docs/projects/index.md | 25 + docs/projects/x1c6-hackintosh/ACPI-patches.md | 139 +++ docs/projects/x1c6-hackintosh/ALC285.md | 292 +++++++ docs/projects/x1c6-hackintosh/BIOS.md | 190 +++++ docs/projects/x1c6-hackintosh/EC-queries.md | 103 +++ docs/projects/x1c6-hackintosh/README.md | 48 ++ docs/projects/x1c6-hackintosh/checklist.md | 36 + docs/projects/x1c6-hackintosh/config.plist.md | 68 ++ docs/projects/x1c6-hackintosh/datasheet.md | 74 ++ docs/projects/x1c6-hackintosh/external.md | 34 + docs/projects/x1c6-hackintosh/hardware.md | 68 ++ .../projects/x1c6-hackintosh/install-macOS.md | 45 + docs/projects/x1c6-hackintosh/issues.md | 33 + .../x1c6-hackintosh/keyboard-queries.md | 107 +++ docs/projects/x1c6-hackintosh/post-install.md | 123 +++ docs/self-hosted.md | 148 ++++ docs/services.md | 165 ++++ docs/software.md | 146 ++++ docs/stylesheets/colors.css | 323 +++++++ docs/stylesheets/fonts.css | 90 ++ docs/stylesheets/solarized.css | 793 ++++++++++++++++++ docs/tools.md | 100 +++ docs/tv.md | 53 ++ docs/video-games.md | 57 ++ docs/websites.md | 57 ++ includes/abbreviations.md | 20 + mkdocs.yml | 323 +++++++ .../.icons/material/clock-edit-outline.svg | 1 + .../.icons/material/clock-plus-outline.svg | 1 + overrides/.icons/material/shape-outline.svg | 1 + overrides/.icons/material/timer-outline.svg | 1 + overrides/blog-post.html | 180 ++++ overrides/main.html | 17 + overrides/partials/comments.html | 56 ++ overrides/partials/consent.html | 91 ++ .../integrations/analytics/posthog.html | 12 + overrides/partials/post.html | 76 ++ requirements.txt | 7 + tools/__init__.py | 1 + tools/collapse_code.py | 106 +++ tools/pymdownx_md_render.py | 69 ++ 79 files changed, 7216 insertions(+) create mode 100644 .github/FUNDING.yml create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/build.yml create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 docs/.authors.yml create mode 100644 docs/about.md create mode 100644 docs/anime.md create mode 100644 docs/assets/favicon.png create mode 100644 docs/assets/font/BerkeleyMono/BerkeleyMono-Bold.woff2 create mode 100644 docs/assets/font/BerkeleyMono/BerkeleyMono-BoldItalic.woff2 create mode 100644 docs/assets/font/BerkeleyMono/BerkeleyMono-Italic.woff2 create mode 100644 docs/assets/font/BerkeleyMono/BerkeleyMono-Regular.woff2 create mode 100644 docs/assets/font/BerkeleyMonoVariable/BerkeleyMonoVariable-Italic.woff2 create mode 100644 docs/assets/font/BerkeleyMonoVariable/BerkeleyMonoVariable-Regular.woff2 create mode 100644 docs/assets/logo.png create mode 100644 docs/board-games.md create mode 100644 docs/books.md create mode 100644 docs/comics.md create mode 100644 docs/contact.md create mode 100644 docs/credits.md create mode 100644 docs/dotfiles.md create mode 100644 docs/graphic-novels.md create mode 100644 docs/hardware.md create mode 100644 docs/index.md create mode 100644 docs/javascripts/feedback.js create mode 100644 docs/javascripts/tablesort.js create mode 100644 docs/manga.md create mode 100644 docs/movies.md create mode 100644 docs/peripherals.md create mode 100644 docs/podcasts.md create mode 100644 docs/posts/.meta.yml create mode 100644 docs/posts/diagnostics/.meta.yml create mode 100644 docs/posts/diagnostics/admonitions.md create mode 100644 docs/posts/diagnostics/code.md create mode 100644 docs/posts/diagnostics/markdown.md create mode 100644 docs/posts/diagnostics/mermaid.md create mode 100644 docs/posts/hello-world.md create mode 100644 docs/projects/index.md create mode 100644 docs/projects/x1c6-hackintosh/ACPI-patches.md create mode 100644 docs/projects/x1c6-hackintosh/ALC285.md create mode 100644 docs/projects/x1c6-hackintosh/BIOS.md create mode 100644 docs/projects/x1c6-hackintosh/EC-queries.md create mode 100644 docs/projects/x1c6-hackintosh/README.md create mode 100644 docs/projects/x1c6-hackintosh/checklist.md create mode 100644 docs/projects/x1c6-hackintosh/config.plist.md create mode 100644 docs/projects/x1c6-hackintosh/datasheet.md create mode 100644 docs/projects/x1c6-hackintosh/external.md create mode 100644 docs/projects/x1c6-hackintosh/hardware.md create mode 100644 docs/projects/x1c6-hackintosh/install-macOS.md create mode 100644 docs/projects/x1c6-hackintosh/issues.md create mode 100644 docs/projects/x1c6-hackintosh/keyboard-queries.md create mode 100644 docs/projects/x1c6-hackintosh/post-install.md create mode 100644 docs/self-hosted.md create mode 100644 docs/services.md create mode 100644 docs/software.md create mode 100644 docs/stylesheets/colors.css create mode 100644 docs/stylesheets/fonts.css create mode 100644 docs/stylesheets/solarized.css create mode 100644 docs/tools.md create mode 100644 docs/tv.md create mode 100644 docs/video-games.md create mode 100644 docs/websites.md create mode 100644 includes/abbreviations.md create mode 100644 mkdocs.yml create mode 100644 overrides/.icons/material/clock-edit-outline.svg create mode 100644 overrides/.icons/material/clock-plus-outline.svg create mode 100644 overrides/.icons/material/shape-outline.svg create mode 100644 overrides/.icons/material/timer-outline.svg create mode 100644 overrides/blog-post.html create mode 100644 overrides/main.html create mode 100644 overrides/partials/comments.html create mode 100644 overrides/partials/consent.html create mode 100644 overrides/partials/integrations/analytics/posthog.html create mode 100644 overrides/partials/post.html create mode 100644 requirements.txt create mode 100644 tools/__init__.py create mode 100644 tools/collapse_code.py create mode 100644 tools/pymdownx_md_render.py diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..6429cd1 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +github: tylernguyen \ No newline at end of file diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..4e69296 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,20 @@ +version: 2 +updates: + + # Maintain dependencies for GitHub Actions + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + labels: + - "fix:github_actions" + + # Maintain dependencies for pip + - package-ecosystem: "pip" + directory: "/" + ignore: + - dependency-name: "mkdocs-material" + schedule: + interval: "weekly" + labels: + - "fix:python" diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..33cb3bd --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,83 @@ +name: build and deploy + +on: + push: + branches: + - main + - master + workflow_dispatch: + +permissions: + contents: write + id-token: write + pages: write + +jobs: + build: + runs-on: ubuntu-latest + permissions: + contents: read + deployments: write + if: github.event.repository.fork == false + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + sparse-checkout: | + docs + includes + overrides + tools + + - name: Setup Python runtime + uses: actions/setup-python@v5 + with: + python-version: 3.x + cache: pip + cache-dependency-path: | + pyproject.toml + requirements.txt + + - name: Set PYTHONPATH + run: echo "PYTHONPATH=$GITHUB_WORKSPACE" >> $GITHUB_ENV + + - name: Restore build cache + uses: actions/cache/restore@v4 + with: + key: mkdocs-material-${{ hashfiles('.cache/**') }} + path: .cache + restore-keys: | + mkdocs-material- + + - run: sudo apt install pngquant + + - name: Install Python dependencies + run: pip install -r requirements.txt + + - name: Install Insiders build + if: github.event.repository.fork == false + env: + GH_TOKEN: ${{ secrets.GH_TOKEN }} + run: | + pip install git+https://${GH_TOKEN}@github.com/squidfunk/mkdocs-material-insiders.git + + - name: Build site + run: | + mkdocs build --clean + mkdocs --version + + - name: Publish to Cloudflare Pages + uses: cloudflare/pages-action@1 + with: + apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} + accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} + projectName: ${{ secrets.CLOUDFLARE_PAGES_PROJECT }} + directory: 'site' + gitHubToken: ${{ secrets.GITHUB_TOKEN }} + + - name: Save build cache + uses: actions/cache/save@v4 + with: + key: mkdocs-material-${{ hashfiles('.cache/**') }} + path: .cache diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5ecb341 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +# Cache +.cache + +# Folder view configuration files +.DS_Store +Desktop.ini diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..94a3b7e --- /dev/null +++ b/LICENSE @@ -0,0 +1,352 @@ +Creative Commons Attribution-NonCommercial 4.0 International + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright and +certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + +- Considerations for licensors: Our public licenses are intended for + use by those authorized to give the public permission to use + material in ways otherwise restricted by copyright and certain other + rights. Our licenses are irrevocable. Licensors should read and + understand the terms and conditions of the license they choose + before applying it. Licensors should also secure all rights + necessary before applying our licenses so that the public can reuse + the material as expected. Licensors should clearly mark any material + not subject to the license. This includes other CC-licensed + material, or material used under an exception or limitation to + copyright. More considerations for licensors : + wiki.creativecommons.org/Considerations\_for\_licensors + +- Considerations for the public: By using one of our public licenses, + a licensor grants the public permission to use the licensed material + under specified terms and conditions. If the licensor's permission + is not necessary for any reason–for example, because of any + applicable exception or limitation to copyright–then that use is not + regulated by the license. Our licenses grant only permissions under + copyright and certain other rights that a licensor has authority to + grant. Use of the licensed material may still be restricted for + other reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, such + as asking that all changes be marked or described. Although not + required by our licenses, you are encouraged to respect those + requests where reasonable. More considerations for the public : + wiki.creativecommons.org/Considerations\_for\_licensees + +Creative Commons Attribution-NonCommercial 4.0 International Public +License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution-NonCommercial 4.0 International Public License ("Public +License"). To the extent this Public License may be interpreted as a +contract, You are granted the Licensed Rights in consideration of Your +acceptance of these terms and conditions, and the Licensor grants You +such rights in consideration of benefits the Licensor receives from +making the Licensed Material available under these terms and conditions. + +- Section 1 – Definitions. + + - a. Adapted Material means material subject to Copyright and + Similar Rights that is derived from or based upon the Licensed + Material and in which the Licensed Material is translated, + altered, arranged, transformed, or otherwise modified in a + manner requiring permission under the Copyright and Similar + Rights held by the Licensor. For purposes of this Public + License, where the Licensed Material is a musical work, + performance, or sound recording, Adapted Material is always + produced where the Licensed Material is synched in timed + relation with a moving image. + - b. Adapter's License means the license You apply to Your + Copyright and Similar Rights in Your contributions to Adapted + Material in accordance with the terms and conditions of this + Public License. + - c. Copyright and Similar Rights means copyright and/or similar + rights closely related to copyright including, without + limitation, performance, broadcast, sound recording, and Sui + Generis Database Rights, without regard to how the rights are + labeled or categorized. For purposes of this Public License, the + rights specified in Section 2(b)(1)-(2) are not Copyright and + Similar Rights. + - d. Effective Technological Measures means those measures that, + in the absence of proper authority, may not be circumvented + under laws fulfilling obligations under Article 11 of the WIPO + Copyright Treaty adopted on December 20, 1996, and/or similar + international agreements. + - e. Exceptions and Limitations means fair use, fair dealing, + and/or any other exception or limitation to Copyright and + Similar Rights that applies to Your use of the Licensed + Material. + - f. Licensed Material means the artistic or literary work, + database, or other material to which the Licensor applied this + Public License. + - g. Licensed Rights means the rights granted to You subject to + the terms and conditions of this Public License, which are + limited to all Copyright and Similar Rights that apply to Your + use of the Licensed Material and that the Licensor has authority + to license. + - h. Licensor means the individual(s) or entity(ies) granting + rights under this Public License. + - i. NonCommercial means not primarily intended for or directed + towards commercial advantage or monetary compensation. For + purposes of this Public License, the exchange of the Licensed + Material for other material subject to Copyright and Similar + Rights by digital file-sharing or similar means is NonCommercial + provided there is no payment of monetary compensation in + connection with the exchange. + - j. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, + distribution, dissemination, communication, or importation, and + to make material available to the public including in ways that + members of the public may access the material from a place and + at a time individually chosen by them. + - k. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and + of the Council of 11 March 1996 on the legal protection of + databases, as amended and/or succeeded, as well as other + essentially equivalent rights anywhere in the world. + - l. You means the individual or entity exercising the Licensed + Rights under this Public License. Your has a corresponding + meaning. + +- Section 2 – Scope. + + - a. License grant. + - 1. Subject to the terms and conditions of this Public + License, the Licensor hereby grants You a worldwide, + royalty-free, non-sublicensable, non-exclusive, irrevocable + license to exercise the Licensed Rights in the Licensed + Material to: + - A. reproduce and Share the Licensed Material, in whole + or in part, for NonCommercial purposes only; and + - B. produce, reproduce, and Share Adapted Material for + NonCommercial purposes only. + - 2. Exceptions and Limitations. For the avoidance of doubt, + where Exceptions and Limitations apply to Your use, this + Public License does not apply, and You do not need to comply + with its terms and conditions. + - 3. Term. The term of this Public License is specified in + Section 6(a). + - 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter + created, and to make technical modifications necessary to do + so. The Licensor waives and/or agrees not to assert any + right or authority to forbid You from making technical + modifications necessary to exercise the Licensed Rights, + including technical modifications necessary to circumvent + Effective Technological Measures. For purposes of this + Public License, simply making modifications authorized by + this Section 2(a)(4) never produces Adapted Material. + - 5. Downstream recipients. + - A. Offer from the Licensor – Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + - B. No downstream restrictions. You may not offer or + impose any additional or different terms or conditions + on, or apply any Effective Technological Measures to, + the Licensed Material if doing so restricts exercise of + the Licensed Rights by any recipient of the Licensed + Material. + - 6. No endorsement. Nothing in this Public License + constitutes or may be construed as permission to assert or + imply that You are, or that Your use of the Licensed + Material is, connected with, or sponsored, endorsed, or + granted official status by, the Licensor or others + designated to receive attribution as provided in Section + 3(a)(1)(A)(i). + - b. Other rights. + - 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, + to the extent possible, the Licensor waives and/or agrees + not to assert any such rights held by the Licensor to the + limited extent necessary to allow You to exercise the + Licensed Rights, but not otherwise. + - 2. Patent and trademark rights are not licensed under this + Public License. + - 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties, including when + the Licensed Material is used other than for NonCommercial + purposes. + +- Section 3 – License Conditions. + + Your exercise of the Licensed Rights is expressly made subject to + the following conditions. + + - a. Attribution. + - 1. If You Share the Licensed Material (including in modified + form), You must: + - A. retain the following if it is supplied by the + Licensor with the Licensed Material: + - i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if designated); + - ii. a copyright notice; + - iii. a notice that refers to this Public License; + - iv. a notice that refers to the disclaimer of + warranties; + - v. a URI or hyperlink to the Licensed Material to + the extent reasonably practicable; + - B. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + - C. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + - 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may + be reasonable to satisfy the conditions by providing a URI + or hyperlink to a resource that includes the required + information. + - 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + - 4. If You Share Adapted Material You produce, the Adapter's + License You apply must not prevent recipients of the Adapted + Material from complying with this Public License. + +- Section 4 – Sui Generis Database Rights. + + Where the Licensed Rights include Sui Generis Database Rights that + apply to Your use of the Licensed Material: + + - a. for the avoidance of doubt, Section 2(a)(1) grants You the + right to extract, reuse, reproduce, and Share all or a + substantial portion of the contents of the database for + NonCommercial purposes only; + - b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material; + and + - c. You must comply with the conditions in Section 3(a) if You + Share all or a substantial portion of the contents of the + database. + + For the avoidance of doubt, this Section 4 supplements and does not + replace Your obligations under this Public License where the + Licensed Rights include other Copyright and Similar Rights. + +- Section 5 – Disclaimer of Warranties and Limitation of Liability. + + - a. Unless otherwise separately undertaken by the Licensor, to + the extent possible, the Licensor offers the Licensed Material + as-is and as-available, and makes no representations or + warranties of any kind concerning the Licensed Material, whether + express, implied, statutory, or other. This includes, without + limitation, warranties of title, merchantability, fitness for a + particular purpose, non-infringement, absence of latent or other + defects, accuracy, or the presence or absence of errors, whether + or not known or discoverable. Where disclaimers of warranties + are not allowed in full or in part, this disclaimer may not + apply to You. + - b. To the extent possible, in no event will the Licensor be + liable to You on any legal theory (including, without + limitation, negligence) or otherwise for any direct, special, + indirect, incidental, consequential, punitive, exemplary, or + other losses, costs, expenses, or damages arising out of this + Public License or use of the Licensed Material, even if the + Licensor has been advised of the possibility of such losses, + costs, expenses, or damages. Where a limitation of liability is + not allowed in full or in part, this limitation may not apply to + You. + - c. The disclaimer of warranties and limitation of liability + provided above shall be interpreted in a manner that, to the + extent possible, most closely approximates an absolute + disclaimer and waiver of all liability. + +- Section 6 – Term and Termination. + + - a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply + with this Public License, then Your rights under this Public + License terminate automatically. + - b. Where Your right to use the Licensed Material has terminated + under Section 6(a), it reinstates: + + - 1. automatically as of the date the violation is cured, + provided it is cured within 30 days of Your discovery of the + violation; or + - 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect + any right the Licensor may have to seek remedies for Your + violations of this Public License. + + - c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing + so will not terminate this Public License. + - d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + +- Section 7 – Other Terms and Conditions. + + - a. The Licensor shall not be bound by any additional or + different terms or conditions communicated by You unless + expressly agreed. + - b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + +- Section 8 – Interpretation. + + - a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could + lawfully be made without permission under this Public License. + - b. To the extent possible, if any provision of this Public + License is deemed unenforceable, it shall be automatically + reformed to the minimum extent necessary to make it enforceable. + If the provision cannot be reformed, it shall be severed from + this Public License without affecting the enforceability of the + remaining terms and conditions. + - c. No term or condition of this Public License will be waived + and no failure to comply consented to unless expressly agreed to + by the Licensor. + - d. Nothing in this Public License constitutes or may be + interpreted as a limitation upon, or waiver of, any privileges + and immunities that apply to the Licensor or You, including from + the legal processes of any jurisdiction or authority. + +Creative Commons is not a party to its public licenses. Notwithstanding, +Creative Commons may elect to apply one of its public licenses to +material it publishes and in those instances will be considered the +"Licensor." The text of the Creative Commons public licenses is +dedicated to the public domain under the CC0 Public Domain Dedication. +Except for the limited purpose of indicating that material is shared +under a Creative Commons public license or as otherwise permitted by the +Creative Commons policies published at creativecommons.org/policies, +Creative Commons does not authorize the use of the trademark "Creative +Commons" or any other trademark or logo of Creative Commons without its +prior written consent including, without limitation, in connection with +any unauthorized modifications to any of its public licenses or any +other arrangements, understandings, or agreements concerning use of +licensed material. For the avoidance of doubt, this paragraph does not +form part of the public licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/docs/.authors.yml b/docs/.authors.yml new file mode 100644 index 0000000..2a10b9d --- /dev/null +++ b/docs/.authors.yml @@ -0,0 +1,7 @@ +authors: + tylernguyen: + name: Tyler Nguyen + slug: tylernguyen + description: Creator + avatar: https://avatars.githubusercontent.com/u/3349081 + url: /about diff --git a/docs/about.md b/docs/about.md new file mode 100644 index 0000000..fb4ac97 --- /dev/null +++ b/docs/about.md @@ -0,0 +1,106 @@ +--- +hide: + - navigation +--- + +# About + +
+ +- [:simple-mastodon:{ .mastodon } @tylernguyen@tylernguyen.social](https://tylernguyen.social/@tylernguyen) +- [:simple-github:{ .github } @tylernguyen](https://github.com/tylernguyen) +- [:simple-gitea:{ .gitea } tylernguyen.codes](https://tylernguyen.codes) + +
+ +My name is Tyler Nguyễn (Nguyen `/wɪn/`). + +/// tip + +Nguyễn `[ŋwiəŋ˨˩˦]`[^1], is the most common last(sur)-name of the Vietnamese people. Roughly 30 to 40% all Viet people share this name. + +/// + +As the domain and TLD suggests, _tylernguyen.wiki_ is my personal encyclopedia and second brain. It's a catalog of belongings, notes, research, thoughts, and opinions; everything packed and organized. + +/// announce | Mission Statement + +This website acts is personal effort to establish focus, absorb information, and organize thoughts. + +Beyond that, I hope to create succinct writings that is both informative of the world and reflective of my beliefs. + +/// + +## Disclaimer + +/// warning | Mine and mine alone + +Technical writings here are limited to my own knowledge and research. + +Opinions expressed here are just that. + +/// + +## Navigation + +The site is organized mostly into 2 parts: + +- **Static References** - These pages usually detail personal preferences for tools, software, services, and setups. They are continuously edited and kept up-to-date. +- **Blog** - Blog posts can be written about basically anything. They are organized into categories and tags. + +## License + +/// details | Creative Commons Attribution-NonCommercial 4.0 International License + type: info +:fontawesome-brands-creative-commons: :fontawesome-brands-creative-commons-by: :fontawesome-brands-creative-commons-nc: + +This work is licensed under a [Creative Commons Attribution-NonCommercial 4.0 International License](https://creativecommons.org/licenses/by-nc/4.0/). + +I.e. copy, remix, and redistribute in a non-commercial manner. + +--- + +--8<-- "LICENSE" +/// + +## Privacy Policy + +### Analytics + +
+ +-
+

+ ![PostHog](https://assets.tylernguyen.wiki/logos/PostHog-light.svg#only-light){ width=250 } + ![PostHog](https://assets.tylernguyen.wiki/logos/PostHog-dark.svg#only-dark){ width=250 } +

+
+ +
+ +*.wiki* uses PostHog browser cookie for traffic and interaction analytics. + +/// danger | Data Sharing +Analytics data are hosted on the US-instance of PostHog. + +Data is never shared with anyone. +/// + +
+ +[:material-cookie-settings-outline: Manage Cookies](#__consent){.md-button} + +
+ +I do ask that you please accept it in order to help me build a more effective website. However, rejecting the cookie will not affect the website's content. + +### Embedded Content + +Pages may contain embedded contents from other websites. + +/// warning +Embedded content from other websites behaves in the exact same way as if the visitor has visited the origin website. +/// + +[^1]: [Wikipedia: Nguyen](https://en.wikipedia.org/wiki/Nguyen) +[^2]: [Wikipedia: Pro Evolution Soccer](https://en.wikipedia.org/wiki/Pro_Evolution_Soccer) diff --git a/docs/anime.md b/docs/anime.md new file mode 100644 index 0000000..056a26d --- /dev/null +++ b/docs/anime.md @@ -0,0 +1,42 @@ +--- + icon: material/ninja + hide: + - toc +--- + +# Anime + +/// featured +
+ +- ![Cowboy Bebop](https://image.tmdb.org/t/p/original/A4PHx94G7mvM3b8vsDJ5HEaQ6uv.jpg) + __Cowboy Bebop__ + [:simple-anilist:{ .anilist }](https://anilist.co/anime/1/Cowboy-Bebop/){ .card-link title="AniList"} + [![aniDB](https://assets.tylernguyen.wiki/logos/aniDB.png){ .twemoji .card-link title="aniDB" }](https://anidb.net/anime/23) + +- ![Frieren: Beyond Journey's End](https://image.tmdb.org/t/p/original/96RT2A47UdzWlUfvIERFyBsLhL2.jpg) + __Frieren: Beyond Journey's End__ + [:simple-anilist:{ .anilist }](https://anilist.co/anime/154587/Sousou-no-Frieren){ .card-link title="AniList"} + [![aniDB](https://assets.tylernguyen.wiki/logos/aniDB.png){ .twemoji .card-link title="aniDB" }](https://anidb.net/anime/17617) + +- ![Ranking of Kings](https://image.tmdb.org/t/p/original/vKWw2EiJfnw2jOcXPbMJ2n1nl4S.jpg) + __Ranking of Kings__ + [:simple-anilist:{ .anilist }](https://anilist.co/anime/113717/Ranking-of-Kings/){ .card-link title="AniList"} + [![aniDB](https://assets.tylernguyen.wiki/logos/aniDB.png){ .twemoji .card-link title="aniDB" }](https://anidb.net/anime/15298) + +- ![Nichijou](https://image.tmdb.org/t/p/original/7gzFoYs1N97cD53E7jPAer9UNlg.jpg) + __Nichijou__ + [:simple-anilist:{ .anilist }](https://www.rottentomatoes.com/m/matrix){ .card-link title="AniList"} + [![aniDB](https://assets.tylernguyen.wiki/logos/aniDB.png){ .twemoji .card-link title="aniDB" }](https://anidb.net/anime/8168) + +- ![Mushi-shi](https://image.tmdb.org/t/p/original/8ysRHGV3URjOJT7u7NkZiFjvObk.jpg) + __Mushi-Shi__ + [:simple-anilist:{ .anilist }](https://anilist.co/anime/457/MUSHISHI/){ .card-link title="AniList"} + [![aniDB](https://assets.tylernguyen.wiki/logos/aniDB.png){ .twemoji .card-link title="aniDB" }](https://anidb.net/anime/3433) + + __Mushi-Shi Season 2__ + [:simple-anilist:{ .anilist }](https://anilist.co/anime/20595/MUSHISHI-The-Next-Passage/){ .card-link title="AniList"} + [![aniDB](https://assets.tylernguyen.wiki/logos/aniDB.png){ .twemoji .card-link title="aniDB" }](https://anidb.net/anime/10384) + +
+/// diff --git a/docs/assets/favicon.png b/docs/assets/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..e48a3ec17ab388445ea8ac854e75a0823f6d0f00 GIT binary patch literal 17080 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%0AMeM~>yj@p z*u0(6m=+DbS~Kw}K>cI9Zn@xZ+I1^y8FzMET45Pjcg zrX`v&^xI&inVt56dE$x)q&W`&G)Cc5Mcl0^+whTaIUJ|6!dkE87Y8;8E7)Y}A!v_2 z0@uT)FpW;VEtkpDwoVG$7`ilOpg_DHft$73lA#W6x0e%D5o=?Vm>N{T8e1|(mQ-w) z6MgB>`?*zK$36aD4J$k^(8&h5(-Dmb$@uzxvS>v?gY_h2C-DK0`fI-5xY$u}g~3huEC&&i616E5=qV&^iZt*sUD z%6_2Z01h7=oCI}b;Q7!6jSs251+ar}0rKHn0NUC>GJnaOXy%?;ssNg?Yz4a435$DrMK}rN}-oz6^-~D=d_4!Hmz!f_uuO^heK&rwyH!E99TT!kpyLgUNtY zXU-!p@J;2+HdsQcOn&BxiDV^WuU9nPq$@Byb zZ3UQ~0CVIp4X?3qz-2yR7n8fWH4lb@xbuA8hK5D>&iuUlTnZ163^4;Fe~DP@@OibO zD@xAY+USb&?x+3zBr6?Hv=mSz4cdw*tin7{oxc}KTT2vwp+!OQsKV~~(3vFz<8F~P zM^CUHKmw)vfwzUj=M@UxUuyJMu=%qJ`0S^+31l2F$bkLjXsmnWNOerc-{W|qqau5_ z^T`jRi9jlX?sM{cZ;mFeNAl~1g%kC87ZcMu${*dx(`ebiIj?aI}N5f zEwMv4K3E^b00_7)5%Z^z@9HpkugAibFs(4^(T8JGw z3!X*8!a+MIzT?}Tq=ir!IF6Q@JJ15-3vd|^v%Hc&8%d{#)bg&vnbIomy~FTK2%owO z))~p-{v15hvT@g^ma4d1(}`E&-VCljjFeug-#J}<^#~#|fYM%T>@KNBMpA;+%z1;7 zS(ESuW3EgtaXk3>&P?5SK<;yEJHh!dldkdJ-=;>q#Xn9p?If$we+9bAh2A;F{?&o_ zO#}O}I$=>b>)rJaMeR}jEe2@YD#gK%JkvHu#p21p4N9lU*#;AhBcWJDov<5>?*2XE z%gO|eyTt}mp)G-*My61?g@ds3zEkjc$_9i=ZVyNrefG=%QipV9B0`iXqltots$%-z p2Vnkx8S-BqK=;7^mwNEoWOlOdu>OyV$3Q-UZKi!+@g4ox{{zUO+K2!E literal 0 HcmV?d00001 diff --git a/docs/assets/font/BerkeleyMono/BerkeleyMono-Bold.woff2 b/docs/assets/font/BerkeleyMono/BerkeleyMono-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..64fce49c91bcb872783c330e6fcd942300ac2361 GIT binary patch literal 38696 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
  • _3 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 literal 0 HcmV?d00001 diff --git a/docs/assets/font/BerkeleyMono/BerkeleyMono-Italic.woff2 b/docs/assets/font/BerkeleyMono/BerkeleyMono-Italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4562ce63d4ce35873335a604d9ecdb507277880e GIT binary patch literal 39360 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�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�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 Qosjzz=+2sQ;mURd0D`Z7=l}o! literal 0 HcmV?d00001 diff --git a/docs/assets/font/BerkeleyMono/BerkeleyMono-Regular.woff2 b/docs/assets/font/BerkeleyMono/BerkeleyMono-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b5e5bf6e0281a29a7251547a5812116cb323ebf2 GIT binary patch literal 37724 zcmV(`K-0f>Pew9NR8&s@0Fzt*3;+NC0UVS70Fw#;0RR9100000000000000000000 z0000Dg35CmffgH@9vp$MR0d!Gj2Hnn0we>8S_B3KiERfUTe%x?1>MA?3LJIZ&e684 z#{-?B7LCZ=4&(^AUO5YajSB*>kl7nW`{)4P=`l+MJnL zqZYLydMpuB?{h;7uRVK>HCtd=?CID7I~xZc9DGvbRwQAHSqtt(h_81f)>g!Ls~27` zqMJHMVj~okpPVxa(qY(m!-QXho?ppQCEcqI?k*^L7xexi7pz#( z-sO$&kN?G0JdH>@pzc^|Ej$VrkUPBvBlnRYcC=BV8Ec!7AYC0WNq zn*n~C{R8BIh&DDD31Xs+iYOuif`TzcU6_G76QdT!f{9(zITyOZMR`ltEn7Rh@BZ%c zo39Gt`~zY81>~uE)0|{^-aTW0xX5r}uOHg1OV_J_0s#L1lREz;Msvlw;m!B=VVpJ> z1f-dkbQaGqw&IvlV`^G~pE$jXnpQ|@#or?7)aGYwV+#q~{`vl(o%=p5 z;OZKztOa=(c#~>mO=68V?c@LXAA8!}=Zz_lCy}QFta`>H9x{uNNts0^lZm2T{6k;t zr;`&VNblcd1HdkEAS5bim94GtRjS8yMmtSeUuCVR5V$B3AgTDz>qGyxoTK#k-c^q$ zCr=oHBOZ-LmnJMixaIwwwP1hW&RHR}3#B~!OAY}4dtSGHGx@oBbN|elne4%NlXyX~ z@v3%;t$gKGUTM~jcC-fzXa`HBH6Mxv?AR)Z(1V6*z#w2n)`>g#m&RJFuP{;C?NCjk z^8fR?^^eQB_h#MSbse81|J-AyR-LBKU>~1?rC}LFN|#U*=%Lh5MXK~}Lmfr5I$ z?L)P>oo)L^RGN6ilP4mXL?nxrtRVq6U}M~nn!^MH{>VGB6zBH_Y|Qp}Q2{ID_5Yur z>K85f-sh$B=dCq*bG?48Tq!AX2n)c88{(2Z$v7ZW8(U4}IP`-K064(K09mq(ibF6C zx%;~3B^}*1LXP5|E)G2A@P5NcK>*EG6YgJU*=jWM8g%pzSpnXnQ-JEjGEk;ytdV`* z@kmSF&09%F)Jafx4tiQKzX>GzE261!Wt>0@9Vi91&-PhtZEX``rW{Cd1s#g0xDEmNdl6*;fmAsd{ z7k6`eDfU;D9}fWe0Z{S>AlV=&*%T$ul9U4odOZ{^Z;aYYDT0)}LrG4e2}!0ct(Znea`J8e_unKe}bD?`<$)d5Zoiqqs$g0(L)dr_Rf!^p7g6V?AYt1qcKP zUPPNPB(x`AoFucV4oj!Ls6>E^d47B*VdkgnSyiig6;aWTvnEza$uI^O=XX9Kgb_kC zO(Pm1gfNZcEWS6f9Imp^(35wgMr}j(#CWrLlXFB=0SpE|^VA_Q*f*q*Pa7AJ?*Ay= z>gi9$Y*TT6x|`NbJl!MCK0U10JrW)K0$#0UL5=MVBxy9Pc>FK^tO&6By*KqufH(w# zg;9$UCqY*|Wb3WSP^BtOGQ}(lEw@^|O}5+XkmJtz+a>L8x$n7mi6aLE7%WmWt9VI# zIKpj~BtxMxH5RI|QiCma*r&zM(wY?gZ@TfUG$D#9JWbJA>zcRVxJ4FQVj1OC zTxCnD>)RUI(%z1CGN`Fy)Zxz5e;e#N)dMPw*h#`mIGOBcniE{3!&=!MIvi-Z630Dj z%3e3vWiG9Vk}7Cty&Y<~e1mo?S=>?=x2)B!eN#KVmCbJPc*oTYo?yc5-pCerW9?l4 zgpq`Z0p__unT3>ZwANd$+pM(RKBqnHUDxsAkZr#4iYupvBu#d_YZV)337o*ZVoFLP zla$iz&0tREMt0|LMKv_BncddHwsySd+tLFy3tH6Tm%hXmu4SE@+?lOx=X~Tu;U*IS zIqYVDBV3@Fz4!+B(P5t1mb=d}7rf#A(?RqW#fiETPa^3EDMds*P3)(aQ4VvGOEgf% zaF7!O#>Evs#B#A(93!@glf%_*fMQmScj+Vg8;V(14q^hx_|H4%>NEI9X+4fSxH2N3yq~obCmD6c7 zgeqwmjiw275nW9;(Cu^|JxX)w8G41@rjO`LYM`HJ1+AwR%F_)~2mFS9I%ct#kR@gfpD?T5d?!ime-| z?Ws$81gOs@5(C0m4tQJ0g?&pcM*7ca2Pln!H^41FsQ+bj>N?8uk{Km&Upt~caK^ii z>SjC*CQ=?K6O~LYH%!ATI8i+8s)2==3&EvS87HR$I7}vbnji5mTM{dr&`;X-6=RHWR;ci1U z2c4@Kj`nZ;5>~2Hv+6#H3T+0B0(yJjy|vnZxGICedN7W946M9)zQN~2uZt*K_`|v{ zV@~*zSbrPQSwgwuhf!U_L0w^kHXT==WkZ2Oc5^Nvk!lVqSMj>-->iJ}`<#!pkq=Y+ z*}Z6;&K9F(4QITtr_2!G&sCiaH24&H%8)auS5dYAjNq`c1$4O%k;`OcHQu194{;ru z!0S^E=e5IsjSsD(O%S)Fy^Zx6S!!GgEttdGR!bNb%y(}Wyq^)G<3x$|Pd`-mN z&3Cto_+@R}LBvpNrrRV`#3d45XoNoeBzdQUOoIwp>FeSSw{x68e9SF zQxvZeaZ-iYa|)dlhk=@*RxU;4VV~p!K;=w&o1j9H`g=v26>KQ`IDq9UidC(@g&V$w zQfPbUneSOHAgBV@7^74`*4nSsVFhEh=5VPMZVg3_>E4(PzE7y8Op zwF;~t#|!itcyjGxtp539hwtC%Z&t1Eu9)DL4$LZ zNZL-QY$pePBEy`*q84`l`6tIYMf>N+mtE-&!wHf`(V1uATzrcE>9-E2gN9rM-g{^A z0Kx^j{j}w7QysaUBlOT17VhPtg*ig1x70MnFa3u4z?nHeD8)Rq5Pz03_1UrEu zSilw;1!}vEj0-o4KQ8%L3TX%m0U^25A>Mxpt|HWrrmK2|=$N+x`G7M4gKUTIK>{hn zhvhm7F9lLpK*mwPfsk_vtv^V?AezmD50giO%cHy5__%Flgd!i=j&#oYdhVGO7A z(4@{zt{`Of*HNQO28Wwnd8U@~oY%u+LIL*=;GU(i&>1t>F%~*rj3>Yqef%*lO}= zW}1EOdH411{cjE>{b=PUAJs^)%(Ko@Wgn^BrhAtW|HvsBl%kYoIMX?vNBO79W;C=B zEoggB^;-Yz$0^r!1D3uWYg^}z?$)+WBSA(Snea%bkS2y0XMr2+fu+>j7#;RB-h3PE zbjFk3aHm}-hDa;2h`Nb#i6ogK8fasbV_YQ99!_DD;-^?Iwu@8cDlpYTOKnu_fHR)- zih0Q+&ho9qmIx(siB4jbBuRW;RtOA%V?#-*Q65uETeZ;$OKGD?nFwTyYu0H^um?@B zqNEcq0>e)%K@O?)=plfYeV8r?j2FlK1Ve@&*@iDRVVp zu1d;&k!u9|v9D+;3D#hU=OpD+ncw#kq+tcdz8dsm5ABBF{184%)K2g^%(MV0q^uf-B9N=z=H*tfX^*idm943eY)68TW+i9;f2mVLtc2io^2Q&&91Zr76cYNuPaD zo_JvlshUUf;vnnH` zV9zwsAQ=amAOJ1t75A!pMoLA5sZT+jB~=CeXS*63iyA^7{Hea6sh#l@&&#&%9F!x8o4zR2LruUWT!?ynM%(9D(uqCCZDW-yQ}N+2W))?fqK6Pl64l* zJ%FDM=l-4OWuE~W)GrJsWxRCeudicu+XsVe$5A!xmQKfa_xQcz$w)Eae@@IBk$f@o z^^eo?YoD^ppY1NpYf+H@`o5QH{!Q7lFHsb$OXX=vLzZKJ6H$p#w^iKu_djjiM4Zm8 z1(L_iraUM~&6=KD*ur*L-|2}9%gYC9{_VK7Pfk>&%1ACeqY`4k7cC`cbB@ThAe~NB zts3P0+QtHxE4c0`18XEi`)1{Z43AGfIy@maKQ8pSK!8UC;|Co@NRZGF|B<81vKE2s z>tGSU8MDD0>LO|OcJ{Z>Ki(Nn-g_F<-oOPQZij4W5NoT@ODw zd$a7CD3N84Zhfa06{KEj(HuYd*^;pnx3q3}NfW$L+LyL|YI#RjX?!2w#0399eOZrW zw^}*i^qFs0ThCqB`QGz`0^SK8Nc(Ntj4OlXaqsMoPdwn7Sb8H!O(+11VA;6Z2*WpD zRwE%Uug*xPrh|5_o@1!^zHoHZv^3I_-J7lec4Y5f4o&B+J@+6o93(ey3@Mi*G`*fH z{E_K@>Z1UAeC~|Nym^NU+(Y!XGEcA~u34^hMbMz@NKCOlfP=V*2NR|hT> zv`WQ?t6QH~nqq?2m$8W8;?G|Wr(dpYHLho2tw|StHVb9QhEo$>GDxUCRB7?V7XET^ z^hz&!WpzpssM6X=-9Z8yG-v=PJ(H>gV2#1zNmcEpiwuZFn8C2xiz=;aLJR zEnG7rZF0oJ5oVLU24hyrtcPplu0l)knn0PC)7!IdY*#dCl)CxEKeP9yEBM$h0p@s{ zpdK{LtRYZ3WDAs;Kq=KHGa_eCzCwTt3Y6wM@FU!Fh0n_n?#-93OWjI9eL7JKHN686 z>Q(P%>g7oh4%<~(_ zv^wgKpj4&Y-PKSzW1({n-!2aO&}+#XMyBsShNg_N^xQh%*W@X$!$O@G(maLWou@$# zwXe@&^sW$F?C8DVe)^&1^MSm&eAFu^q^BJIdKZ}r@WAc)n@${md)|Q zP16etVJWQOynQwB&i3!a@KvE@y0v7L9sS`Eq;R~4woYq$viuj4Xs&Z+UEp+;l+Krs zW;wI+Ynw9LRae)QjxLLh0UbNlnVz;hASQ2zTlTx!jB(6Uk;G)ui!)&Yzg@#fMAE0j z?8lT(>y#hGq+QOSgxCl}3U({DK7AeQ$ZW^N!EOkw7(4)`pv}}>uAusncf={h-%M>Y zI-HDi>AuS4ZKPBB-tg!{)c*SzgW7*xKFohsSg-@j!X$VP$^KWI9ph<`iW>0r;ug?6 zQ_Q6`n!HOj;ZayY|M&F>nHFj-yN@{@zBa(B1Aa#)GFIP)#*t;&&(8>*k}w#%`!t3I znETOc9^?&sJ0dhhthT)WoG#^oC9}S-{dDx_C!{*rSl44Y8UpO}r9Z-3Z5jZh;S7r3 zt&03u`A%@mYmwmNk)d-k?xm7?8&gG0UO3%Um0UytyNH%oRua)g;N#yXOg{N zyD6M{NYjRXMTP?b*3U9vPiDPV{7>ZTvWdyJ6G7I?3_LqXZS+dc$ zL1-N!^Jd45qaMWWJG<1v8FN#$N!UicjZnrH?o5170=06 zT`!R%KhdwsUW{hI4LC1P89xz~Np~(!CW5m?Lesk63^~=bEsX?4v*fXVsPLVh=$#&GGLupnE7%U ztCP^m`)VEP0_^w6c1$Liubu-T%R^H(oxFNm|8~`$@Fod5L;R~z8({N+QK&P7g})B( zzc-ychfJb(o2EbXlbYUEwN1iy(tW}!leB5V2H_sJAbmn_BM4m1RY{2hP18hc$>uIu zjF*fzWcFEs>TVYsB=xag`$yAzJ7m6pitjJ0h)i0ZKdv0h_C&|#lp@UxuJTa_#xG>a4 zGOA>oABX`uH+3cihF<4i7@vClf0Iv~a}VzPd{m)(;MsB6tQ4ZDndVo~W1MQdfP~c* ziKC`n-1<}54xcSMsT#lNmeMK3K;}PRB51981ye<>ydl3LQ=cAM>>)@#LKkrJrwBF(+LD^i;vv8f~i}`ZBTb z52qgi@5&dtRQ#0XKUa?(NlNP!;c)L;s7=ABjELC6!JWbVZ^jn61Q=eBj}ak?S@}H& zWrhTX*s zErJwMFQnY4AZ?zqmP+H)BKO|geZn%mKDG0w(W@e4y%)#`LhsH;ax7<8!{@s0Ah}BH zjm3T*g9*swvVpk28pvAuYfVUT4bL7Ppfn0qT1=T@0QJ%kp|20<@ z&z4wD27YK{iVOli;*#aoW8uErRn628=xP3w!`&<9fR}1?qDI%gbTr5xMiRNYvER)2m9dm!Tzvja1ibcqQbf$ z8txhx;qF26;F`e^xEI8P>jq|cAXp46VMA~fSiuhmH-aVL1Xv2b8u!_w1D%m8ju#`IQSjj z8*~Sa@IK}Pf53->KWp*J;BWXi)+5O2SO$DK$OOy5Kc~g{SWozNkOkijdcpUxT96&& z-`GWv3oe}&7qM?Z8>j<$U<1exayeEAzYhKnzhNstZ}=nD2eh9S9f$P|a{I9U0Uhw? z;0F9P7zlq4Zo)sYMPM2HKM-H=>5GIQ5QGI&009OA6_^IbgDMaJC?En|fdGsJ3lPf& z9>nqiFHi)Efg2=)2?3>G5=a4DPzEN0@&FQ)fDwoluOT(yfJ!hDYy+FY8n7O*8~hJ6 zfN??Bf+1iOU?KJ&7z&0X4iETX3upr010~|fAOeIVj)HZFdfH`0uvV%vI2cXY^9jKFNh-RA{@w8J*PgG0(54#>IOcsZ6W@Pr?|s;kNRu$mvqedOrE84&%88)b-i@a z`hQ#&g;5`;;@duj$=)%$a^E}Gg^WH;XYstrfwKPDk)t`EC-PPv$!oWpe5dd0>MZ}s zM^{1BR(H+U=awDc?Jez6U+VCcDQt>?ui$mQBfooi(f{jsaoeO=>HodM%hziei(*ME zljU|49s71nT5-E$Q>Rht`RY*hR&|!TqEnrB2k#-?o1Q)XY@TwaHPiCnTjr1B#rD?Q+ zN?07rW4l=wJINk#5x>aATpkmP1LCy!Wg5t{az%D3wlY%(RF0}qBWhXQ)8X3c9XeWP z=oYowWx2AHEPc!J;;*pD z*3g<&m+OtjZ>DWqOK5#z4g=ukE+{3(uT#h9aa)9d8fqH}t#jR}UR<0-ixg zol*BvGpNJmLdh53KX*p^KlA?`a11z!_pp;Tpq--S(}u4*^d5dx9&)ocUkB(RKEM9oUIo*$3HM**olwKjXhR zXU@I(f83KdHuOQLJS+~&2rCI|T1#u+3V18tb{?Bo!JB&S|Ng_j#4q3vzPjOa_|@?4 z_sj?V;v()w}!Uf90Qi zEuRE~Ar3Ld1!K5`ym$9QU;EShea27uB`^9OKSQ9F%tiikoReJSWg>~YxtEp)c#$8( z){!YRrxi8SQj!Uxiq_idTWxCB-_pJOM>M8!i@`V_Tk8P1c5B1(hEKE0vMmjtHGY!) zH2cGiUuM6Y|NZC?rKi8fTH3l<>3g&_p2NU{LKT^M8s0KGg(B39FGoz^JmsPk-~ z*+8%W4mS(uLYC1<7W~(x_yRjy_@N>T!L*7YNk+rLg*wnf3fClA0IQo#QcN(T@WZ)T zL{F=@vM^0hNsPO%!%jcUlfQc&$Sa2t->ITN@_^>e7cZcJSW^LyZF!=Ki; zHfXeT={=JEN+X0zfr^@N>jU@Cz2Vr=j}$Lz4@5>2c|s8AKScSHV7B6I`T+%<4u6fb ztoV6l9Iy@8xxPlS`d_|ko0&XYJ=NaPy0IPGwp6v3Vj@o+FPG)Tukf>B%zkKY=VSyb zmWeBj&!x_LFZc{=TrIBg|GCLLUJKVv$Tgels!%^4WTnd>Ng>#F=R8jfpGYn)XDBHTFF?6+gKuGxJOi6?q_k@>s*xrdHKXURMoY zb>yUC{Q!$>yzS2*7qPE;r{Ev0O~GiYtO0eHDsik?q*s@Rpp|N)S zWpi`@tuUP+cvE(cs%>QW=O-=Hg0cySET$YgE?WCnlO*h3A=y_ZFb-p`51EG+uAXQW z!RnRj=(hSf3$@6__JhbSU~XNWOctHBZ+wD3X5g}WBF4KKn(U11H5hKgHfZO%E(DSx^gO`LApqjxOR!A=Ba zruE2sQLek}LU{OA0Ai*tmh?_|;xVSLfdTS`m7XDKt}52^8b&f~>%9X_YnpcRNfKU; zw*GKG;tPs)ui;)M!o=HU2Zc4|AJ#&}Z%&>#E!?nRPPeGM218bTdHWjNfFZnLb&*%` z91g+UDn)SP!;Xvv{E|95#Is~ilt;;9_vlO|h}kSljwsZ0%LLJ>^fzvsCTtq(Sn=xB)(Z2pw^Pa`L-|bHDDf6@ao=cE8;R1*<&$f_|(zr&r+Id z#ivGkGhWZvD000Z{z>bp>FhNqvg$FBOkj8E0yr{RvdUd3bXyqm_JGCp)@_k+Ee71F z^?F>i`J&p&Q?9ms4PNpX!IvChJTJl*ZnuCIc+PcKxE>#Jc(}?ax@ir9ax=WaQAQ6t zc{?pq_E?kNT=xrTL?dUpKNUPU1sp)$7K4lD478h80)xEb!4NOgy+1lfFgOge9}W^& zO&ECnTrJ!cfWBjRW@NMrhnQ8|Ah4AachhWa-4j#*5WiD_yR-T`?JFdi4+U#3f`>Xj z=j;mri%0=0xyiFGGJ*oD;wR3^13)DPc`;wq6<6WVynZ@8uKY)GFvUp07}zq7giVcP2`>T zC41WD_K1hmVL$6XD{7VRkR#NZ>${8lGiVDPYrhjpZ=^I^&w;kK(PJpJ7-pJ-aG9J& zONL-ZZ12e3cIy-Eu>F{=d!V<}oG5Z(kPGU$z2bYzq??I+yJdXMAj`3hKlAxs?&hqW zHSbtv;4FJpJyHSkH4c4=_591O2O^C-uX3vNQuy z8ip%tlD1tRX(L-9d2B@JjjP}Y2h@6rg09+6 zz%PTEjx+a(IFf6|9;~Q*btk)a(*S(o+4G>P zjI_BD>;-plN|$E4xQX4g$Go){XSI|<=w&ioQ9zr01Yjnr`MYhTx(48T07}B|KjC2V+>#xs6q_X$i zBOgw4D{0s-^);?OdnxszO2ld9&lVl_TlMd-vP@Z54f{uUm$k7yyy;`=)w*dD_FC5r zw@1nwv7As#l}PgTJp-M*!2Vg7v4xu~Qr(i$HQr;)u*((8;9=i~J;*>2P4DorzO4ViHhY-(H(byQx;c2zPumYvZP57anTvUKdGXpHj2xZ^jds>VqUTm zyHol5lm1~`wcHZs>wVT%1Jw{ZcPvNaJq{s(|mK>69e!iDpj zzxS5~oR8w~E=YTW$A6Mn;|8kirLa_lao#5{B?m)2cQ&I z3(eNO3q}&lw`?qu_r9w|iELrB?i>~Ao=N5{P589H%C{d%Ho98%d6D?bx70aOnM1ZS zwsn^(IU!i9-fz2VK(TFAYrDi~ItcFmBAs^#nooj13ohG>vh}5Mlv?#wYjY+@N!OAe ztF%_XN~Nm~AFAh)?`y1M>o_Wg*nf9c>3R1TENlp$cM7j?63^?UjzS5#?1WbGI(e*s zuzHjOB3*D;qYZ3R^r60L``lbxHA~O%gscd!UeTECq_42;Tfv}BXOEZ1pvV4vOrt9f z;F9yzS~R6=4rsJZZ=n+rz23l#;JY0Ko9idqN&6jbr_t}gd|2I!A`_=iEE|S^_rhTRsgRb%@L9X>deG;4F!nfp}`LjglcfiBQVu z@ruEoAeYSCEzt5QH;%oB)>rERsEm^yu5m9kj`@rw3EidgFx7WJNPmgn? zld?TrCfE4Wz~KUUv7Fv{Y`Ppj-zOWc%dd%p)l&Eb$?&YA@dj&Y#R|T8+_TVc0QV@LFp?jjvD}`CrKuD8HjGS7$GXQmzBhXGr zTw{PXFJ_3QyebUM4tz@Xxs;mZq(CnRD)iJ!$-YEt(a%4NrbMhu2f59;);9?0%T}KoRi0 z4~lee&Y#F5@_SP2es3>;@NH3#2fjb9R7CH}|0^QC_ojcPiRoJ^znI9TRdQIZYU4H^ z&2X~OLgd^n_pjqD0KJr{HVY%O>%}1I%*axFk8J9ScxHverAlzE30$q*tpf!Bm%Nt? zuT{Vs5U*Fz2l;=YCmAMSa5fFBnSA<@`++cM&|(bFkjS;&)>lNSwdb#NQX#uPQqc14 zBxog=-7p#vuE!bq`96{Tu7GNw9_XCW*$aNNB;^m#&zqj9Tn=NSLhokinCtnc*se)3 zUTR_5j;Xa_EYk~sOE3+Hl@(Nt>BQM+`~MFjl#i^Mi*2B(lvl899T4m#LSR4?62c|% zqF9IJSv|DSGBo?mk{&nNlX_6wR2i`h3Ow(JBajc}90P*WaXTjiKWfXE#U!CAD#{li zNm&X_jX1d zO4H@2B7&5!(c`gQS%>uK7$TF19SfSkz;&{>i9KP(H5xn+4K|nEhfPjE#$181n`liq z4d&`+HeH$+ItAP$3@ns!VOcp&^H4d}cQv~%5P>J9ZFrk2$9Wz~r@F6RFZX}elUFQw zCjcLMapmtJvD?F?F#g`!<25@~blx>Q+9iT*=BYH#NO?nf5eMp&E=GuCEAusqZDJv4 z({A2D%KoPPtV5IREy;$ePO9t5>#7|x=OaYQ%Owv(J2}DIPR3i>puH2bZnT@$;F)1h z0pPQ%htcGz+`p50eK_a&eU7sA5op@2ayh!Fm+aOvcJkk;9adIflRGt z6L~(`fs-AAsEH%x^?2ID-Th>X!8HjT)5{iC7wQywmw3sp?M3q4fIZ)*s71b|#@Hv9 z_2?#{Ey#W+lu(n>dG$<{{|xH%E{1-v;d2@t+#BADQ{B12h{xGe0B2IS$XiX}MhSxD z&IeRBp{RxyZc*3eq;bpa=n2kkx)pMcof$aP&(VC1KbPX?TC!0!TY9MjLr4r z>X3gdT1h#$MN7y0} zh=`KvNe;iw;mRPN{JCdMKzqYM!jp5GJ&7kg>!0*tn`QFl%oMV@3O+Q_#eJ#5b+5pR z%_?>|JPBUASe-O^qGGUv?c;e6w)k8Z*1c}eX~dGaJ1V8=LgKW~Ci%NTm7@m(+O2A# zmVwXgpiQZibq5#GrWG$bI^RhZHnMfq;PrQ`Ih4?7Fyovpge)x99_7cDS2zp*!dd*6 zAKdp05GABgc?J&GOW9=f$TDneL#O80OoW=Gi7A%8w-tisr1L!k$sKUlCagzI@s#Y$ zo*=U6R&kz9x{WlP3gJh258+4q6kHiHu+x+B&-DRRxmWD3Fzk#c=%q<>cG7?Flm0RP z2yu4V!{(@XQRM{4B`X;CC<`0t%ilC&vvKSQcA1fFGBs4zK&fx`w|Tnsy%Z5zZx_u; zkx-Y`{G=`=?8AUrp{Sf84KdPHFg+XmGJ{9L(XpKkF(U8yNG5nG0rfwPh(;+=pv&JK zZSHzvhN0VOw3Fx(dL226Rs~F0%~G?JQZ@eSNydfz6W6`+HOdEuQZ>}5QJ<*{oFzs> z=#7=kH5#&xyU?M?Dz6!6U-jmKhU3aFrMn^SjYnj+!dkOk&_}hxlF3H}V@Vsyr`uli8PYFu=20 zj1`wrcrR`iX{DDK12%{vnU0nJRf}?0laF>L86+4od~_bImpQMv{klsR>sDYKQkxo^^Pe?^S zI!Pl|N%r)$?n8DTE7(YcwHSPr2=Zx<(dY-G`?aZ%fk-9vG+d;s!zx|stK`m5E-xQ( zq`hk?TM?v*I^>03N5}{{_=&ml0s74%tl{1nklu^cAAotXXMp&u_G7{v#_%1ugTvO#=#ap+=W-5uPrh*0hmUg4T~^U%_)Vdm^_^K&hO- z^;Edfp1_ICW*nJ>&xB5T%NA6{VPdX>#9*k1+yS$;`n5U?D>xm*c<5fDj5>|4clG%OUz>?Sq@(JL%4fOz50c;3I zB&vpoA&83MO`ws>#7!;KBu^PlWtC&+uxl=GjvP3XL=e*72~OWFZ&%;*iWJCJpIzNN zV}^lW3sTV6PlE;@$AoLoU>I(q2#KyoO&l8&gc~%0-y&>dXbC0D_ zh(cs|_4l4+i-I3yBCg`MAGNVg>$KYE7f4;xv~?3^aZn3w<2W-u{XPM=q$M4{gcLyb znHf-&2=(qq76yBJV+aOy`v7G;zNo)lipY46^^YAuBqAL*$=L*24NU+7sv!imvm{1k zg@+?j#qfwmKr?ZK#?e)uRIZmjS$C*{@d5nEg|}v$9X2Oo3c-H($n6Qv_uP>|2Q91~ zh-dwPGj-9VE2ze?NBZZmB85)Fwz{mgbILd3fr1vP}>)MNdX(|y0&*O?|If9UZ;+hF2T1HkoHgI)(ad^PfBh1s!rFr{A_{;FY@ zE+;Hd**(-fT_X)m&;`9}>Aj?JXnmGlbmFzJG={=iog|y}pyrSo1?sTG0XxQks6hhv z+D-Tf&xEhJkYkrkpvyDu9U;(Hh?}&)V=X}6CDL?NTq3pp=(uP93CkYC(F;p20>67P zxET)$xVO2~K&vF;sw5qV87dCA1&?=DB!j!g@(x8^06PJxYF|XD54@H$-pfGwzV3G? zd3Nr})N_Q3Y!mQBqb<+9L(##EYcI~hOjXW71)FVdgY<%{6`p;L*fGzJuChR6lRmb% zI%6nDg>;3F;;5u!mxx}f!h03|J*Z@vWIW#{>Zu5NYV2UX3)t_9VFE>5WjjSu=WKK7 zHZY3n7b!Y+81v4J5%|hF`4SA11Xtl#&3>a=c}x^m5rn0-Ajf3}5YI`T&wATIMdMwC zHycawGe@^IYPL(YXWlZSdS-6}uh1ca>bF1t%J(0Lr`t^ML-T5ncSb6Ho0brS0n~i&b&?MDU$ucqt`4|J(Wb3h$Guz~WU2~& z^-Z^`l<)C^ZD|tH;jqp1688vxL0v#-H_)beAVy{vK<0rM@xzt0o3>;?f6Idzx0dH>m-h*?+)$19P{{Gsn1@-63Lb5C;fu$~jV(SI`o8^H_bZTW;KdEx z#ddbUHqK*Xqy@FIAx@CJf zU0wD*?`%ikEz=Zzd)3O&MrZjEzQ(KGIEkH9=K%&i7erl|w;pdx@No47*Q2^{%I_&( zTU_P&0n(9Hur1}W|4JBqsi^6fvnTAjOQA;y8wfNHi`6h^y`tF}4NWC8t)Hf^T;XVW z&7XmSdG0dtI+AR34&lxutu{VpQ%X_&AgNJhCE@IoTM1z?b8(`ofLrWb3izQkNhf_0 zAD$rL;`x79nit=0Vl;$03S9VLCY6r#%Csvg4vMLs9luY9&?cSO>=3uTXDn7+_*o4=5b1aBgT#Hf z@cPw?+Ujz*rG0Nd%u{I99xSc!UoxbRzs0oM@4bp1%xKqh0fS{~VF{$LzubKKeKGhf zfzqKhdZ)o0P*y95a3oQMM|6Og@Hk=D*}QmVa-5*`&i0HFTXR1ym!P@61U<-Y;}wP8 z*Heo>cE?JnKCeL3?s2}jTl?>}@EZd!mEkzNFOZA;gm_r78_U0aJ}g8ma<5UhS1^=0 z;p}J$-uEkwLe2$ppyG?WeOTUN&qJ3=>|{mvNx58}D0yyo8nzs9)vV}qk#yig(1#;t z;5z>MkO={El$J>GhTjvFuPcb`N4KHBz%)7A`uP|8{dyw+p;%`QA26DW_Y9PqJ>vn< z-TU+Y9P8(7n!MlD6W!7yGjthI3hqB5(qD7-?i!^TM2zv`O#Tt%B{%%W;`?>}2gFxg&rD6MdL@P}0kp{>ls0!eAJ-(3*@kVBYPN_;IJS zoZ*)%+JNSF{UfP{!K|?^qs_P_mCP6v`-rCF)$t;k>uLdCs_UdF8np^ECKCuV+k0S*xHmnH7>gj#FWt@G)5?-3DW1 zf~#wDCSQCE)eSa{8YCS5;v>=&2P^10<0xy5kxkAppPnFx`ent?F?j@-^Jae~@M;;! zU~`ykImw4^efJ;ihOIO&g9k%hnuNA~&giq>uR8)@igl*&b7SVhJ?F}ep78+d?)iCt z&fKjHhemKztXiLb_#Jcah(lEyq}Jl{U6t;2fr_?7j{!D)7v{n)yN`7%pU&r1%%r^3 zS842lmoI6etBQ!P^zPifBJfzWqf8p>1;67{n>rm$W%cUG0vPaSf8>c97k}RR##)`~ zC&k)6J{O|k!PG^u4o=LOgUe+lM5R%TXZNBeYI_eh-%HHPdA$3)#K(KN=(wQzbKSa1 z9hSG+)=B;r3A;+5!?)4xT>ZE@Q5qNjuJyoV8CFJMHK7EfC43#+6Oa9zf~NY_f4DpK zsMrXWRDL!2#`cIe3M|dx>(PG8P(&Jhb`l3IiY}%Okhb*udv^x5-KZ0A~h`n8~ zJP`Ib!jM>KS0L=uzGqIh{(`TD!+g^pw$Bz0`xN8+v1mm@?Bja&>SD<8pA8LvgcpEw zjW8&*jF4#D&|<_F&W=A(WkZz10XP>&EzlOK>c5s**zU2Jltf8F-G$lrRY6~ z4zjYy&q!LF!IQ?`QHjR{C?6r*=SJ7E7-_W_ez(`{#+?+(p zmqK5WoL_F**P2YR{-Orqs!xvs^wtQ}i@#9*EA7M}QN9~$L=|6J4f|zSL#h#mp|$x@ zMXLR$+>f9DGS-{he+i-KNi7&cV|U$kP4ol+&<4OgfnRSsl}-)VFQ4?cA;`AE?2`q` zat6*zhUX^aCrK|ji7Qc94oT#&+mDdS!F41Bk_M6pheSJ-KIthQXI{%AqFAwxL~&{M{UoRhhQ5(y+d&D!xxwjsO3`x3VZDA{2#>TjtKEQ1uTr48OH3V|wiT&`n`cuws2RHj=%vgoeKlEv3nc)U=c zmfi@&4puG|IiUF{i-DD!<%?M9vGlSLOQCYiVi=&XR$3q$A7|^fa_qn-t}y_?4|F5A zZ$dKCyj8x60HEBVph0=&Jr7r?sf|}bBdNQ4T&0apP?toQa+F{+)G11&PS%|{*I~N? zm(-!4deW+>8=_6dd@+}lVA9^_n5Ibiq z1zYe@_CSn_YyqkaH+t9-tbzT4!|4=5x%ivozk;G98iZ&No+6@rxrSIzkiuA3#%9-;40)ETC@HYtjs zQZ6hAVbIHgEL!yEnYm*c4FM>a_AyCqoGl!7C}>T)Juy#he}Ip1u4$&1`_l!^v6FKc{oeAM_zpvn&8CbtI| zP>Ka~KaqBu=U)8WuV5jxJT!k#u46;s8%8!yKkA7n<+taLfrXnyldwUcApwyg%}HaQ z4drQ44r&azgH^i1JJ(3D`633*I-Z`E)*!uL@$^zRD;X8(4oD1_4NE}`mz@GK80U;f z+gLKD*{dZlOA9`jw-*0WiPv1#kM3YWxY?9twsKuOp4gh#Pp|nqn9-L&z@rxe6`vQX zGQD8ZNF2Cja#cB~eADR;DU>VfKUhNsDVi9S@HR)&%=W`guT*Z|K@v^ogvr9ET*imv zg_bVX1#T2qxic|4T;v+abql9psIAhFX&2WiuG_-{FHjREJ8|9$D$_a-B{U{V?}tjy zzIK!X(oxGX!Wkn?e=tq2fjUu!ivbcS=ema4% ziyLjHQsO^|RdQC+V;;-hpjUL6*neUB^s%Gf%77;(PPAtwmrrEW%0vf+S};lUsLxF7 zmo0TmfrFkYBC!D2etSU|t%K94rEVAilph=wx}eS$g=&ILKq`>$FlC; zhDw@oi&FugzFAW3z0~&nmSavdE_lR}aGK5*%`Wf}0d_D>kDePSr{w1rdCPbcjutfO zP+oK)O{58FM8#kpBoHmA(X(3CxVm4{8a}AjS?9~*h{{_$3YM!E;cWv*n)iUylRBLl zdrs0|CfMd9iHEqay#pDm``NiI>FE|l(+{id=!>AqXYa84h(NL(oCVU!91Y}Ln!bFw zJuf+NxgC5PrJR9^!MtYYt#2CoDbqEmpK_XH*tN|CERG%%gcYJNi(yAn)nhtYsHsNu zn4V%3v2Pizb7rp!C&~a5AJ*)kHy81Q*PNFdUQP7r$`z@vRp=TF>depOXy}(3wn&bd zBmH}Y@SZqpmQ7dHDd(UHE4I0tPvv{|IR!7c3d}ogs-)*ZreA|SN~4POeE1L$02xwqG{LXw7JlQ-zgtWH3GsKqYFC)l;`kwE}&kj1?H; z&>gjPWIi{qyVFzPT+8YQDsC1fSg@u6?)};aDbEv8F9w~zDhgoTTN+8r70vI$ z;#GlPiL+)+mGq z-27L1YK+DUeAwp_>I0T+Jcf}(|Fmgq_Ex7gClt^BQTu+#Q(mP=7zy+Yq1AxR(=k(W448tw@ zT|!ha#aDu3V{s3wZr zaUxgmv~7506wY56_@&o@mYc6I&2DDOezm`am?VRt9U6C86}19mG% zYeL@%m&C#Gkq>3txapJFBE8$7SIYI81KIF?%*qWZ^zw4WbX|UhWz9*A8JDviJLm2Z zX%+Fq)8&}V&;i*jw}Y$re?ObH^pJi53l-B`k@fyEt6YrAWSGycb@~+wfN+Rhk#15z z&3H*O7=|m!$C>F*Gi?>#6e2jitaViGDkF$9soaX;?GOX6@L{;N@PyaYk3)FtIj!yy zc~rng)EnLDfZ-wqnGV`qozcCB-W&r-jWBn(Nbs!@GQO2Di13%>t%k&ta!WznfX{kSvE$RUvL9E4 z5G&DUU3}h3?w3xPG+}dO&{K$dYOPMw`E#PYjd3?*gPD_@BY;-id^XX6+Fe8@Fjg@E{^KB^#` z@J%MV*Y0VsGu%|(pIx(#N-)lhj2E&!qs4iqPyd<`=FF}_^KaL1(?TEr|3S^zkSG!_ z9u!^oQD9Z6^}Go8aNQ^8*?M=Lw^30S#Ga8Ydf9K=Pka^b_{+xL4%JVKUB;okXv|fU za>lX8(!ubbr~2S~Dog&dw(kLv|AUbmX1rthw~{*N{~(^kRp#WB zGuCD${eB?U#PO`Bkr!_}_dpF!HW7Mn8R1nwbY!@T>YM^? z?0X}>_?S`kUYJzN466Gif%ss`7#6*q#4!tH>v|O4@piifj9Fn(*YW6q*y)&A$SwuJ>utC)YR0y3elK997aF^Owuvq`$tv=G&T#G)I2vfQBP;$13M zh>1iz6L5d!$3>6MZD_l`_&Y#mlRBjdf!uxqu4b?tpLBBs#(|jYsKDMnK{V6H`=rZA zLw`TfwK(|+S!P<0lWmI&2?R~Peb7HH%*Do9>R!bCv-`GIJa&r}baF+D3}35p98(-B z^4>(egVt`Lh)g*bAh+x6BQ(`SXJJsAi&_RA;@M#+Wc=fmaAAx(oHjR?>2Vr<5POK( zmHSg$uGzJS%>sKT=w0f(QpM;4 z9v0+U zN%h6%u?Y4(KQBEz#X~hbylJ{Tq3ywiI(X&%S^JZ_%w~bR zy?`mvw~eNq?_C0mo(mnnO%C)dy{?C=aF;ZkC^aRr108v-J<2{kZo`JN1vhQ#+JerI6}gpex*b%oW^&FHcdk1USEsryc`$f&}|L(1tH z;i=)$@3HZz?^^n=IWe@BZK+SM8BktA1(N=427mfgT4W(Rwv9W*Q<5iC*#)RDR?D}j)dRB2-gmPhWN}wd<(XOfEi=fv5 zz~`XbwitSH8c7H4SMx#T!d^7!o63~Bt89}Ro>?b|tqv_Y1;@D~DhIR7^Q z_9R|N-VHbp=}K~7c2AE4nMaz>_W$sDdhaV=&h&Zd>(gFOyhedO$vb@N#+_rapKXtg z-@QAbeArW*6JtccDfvQ*BL3!p`b-7h@M;ceT#o-G+%Ch5XYwS6ZAgOt1aIL z6gTMDHgM)}o(C^`kC}~CY`S|R(vf;+G!PjpLpuRkNT}>QIc&MmnjF!@m@J5Juv_PQ zd3YFyPnhbe*4-<}xyxpYFL0t0!0d67r;|>rbE=HcDm{DlSN+F}I$w*HA_Pj;n~v1B znJ(j-eRjn$$?@F>#$DP-LzrqCPnk}$`f5YxoHp67@RaVx(j)$PhuNUU%-ye^`2yP{Ir49Xs7P%~eV z6ZlVojrH!EF|7C{~$%T1gJ?Qo9QA* zf5qI)DynW}H-A5OcE@eQp|*nlLFJ9G(}``;{ri*8ab){#FBhxvDB7h8@<`EX7+u_Z zZHoJ?pScak(>?Yp|19t<3zmM`arW5IO~cC8GbuMM-iRV(d!5)eQ;~T5r7xETf8!{j{~WzxKZdllM58y&vF4q?-|-^IW)=VZxJz@#vYZS&l09v0v#*j zAJKWxSyrP^Fkk>KM2#6(d$>RW`SN8TLD05Ayc)sy(*_~rQ^SkzH}I=BaSo*hiG)@_ zuW&hs13IrK;3aeCdHx8IM4T3mjn_PJ7MdK=6Fufh%D-Fo9>gLz#!-v>^`X;%E@JnU z*!zY6CHz8cTR^4a16VU|aO3!pja;n))cMGbMU0F2kS!dV_)uqG?b}-w{RSyw#{|mF zD4ZNNHp*mr{I<$8%reqK53D2g9+cbeZAqEnM+E{suo|zGo=*Wi1sHs+*+4bza2UTo zyEwa8S_hs*b^o{j%e@2XJ!uLmY&U6rUl?rg$x_gxc9@=B7tv5a(Ph>_ zGOdT?(v&8)8i;E>XAIeU24ZE%wJurO4aU^dV9dR+Yf!L+1uWQN-#(5U=CJjLLu|es zQ<#0Y56l=WM-le!+mCDacS5l17J0-KNE#(cB8U>fh2AjHXC(w@bmN(Ezi@qg1^* zAkSB|atG7`6$ws|n<3o5Bfvj>=23%de9N~#>-Sn4pCc>0uD3dU@qG^$Q%TA#Xwp%sQkc0 zaO!`fl>6!6KXe3d57QQ7$FKqzoeipxv*I=BY&oir$l9nu3(qu{r|-Yz`OCedskbbY zia+sVq8o8U{s*af0+CVl){x4*C_CSmIDZAxecoGPiS6RONCB=IbuxBJAIbuplw-hN zv|h&Zqr;AP%~R71=pY81=aM>wCU=9WM-i3k+nFTbb_e)7x|sXYcT^7-a3hcYt-5`l z?cskq*B*V>0%&K)A3p=y5$X~cv(uf0^Yzp14P&Nz<$%8{>x9-Hp z?QW5N42q21qxvPW{Eioza>AQv5+m3E7YruYgEAV${w@o&n^*9g@4o^2)wZdEnuzH1FZz;3GcGK zw1ip12zSk&FE<6>cVpJ5~StSzroV6S-=pfJQru4sigU*{a|uZ4s^fjbPF zKXbDDt4;!Wa_S$aqm$)yc3G`7zD;D&Ryy0ex`C{x9$nk(!i9!SKi){#@YYlPJYNW& zOgmKapD!+zB)sOL*B|~orQ}Yq?y-9ismjIho>@4)N>dsn>m z%d`W){Ngljo(Mx#wRBQjm=cpE+DoTZGaJQl^?%gaH*U7QNJ#I=fS5GgaC?zC=s|ad z7u}0U1zyPfdhj_~G$J?$*&q_ z9hwfj4kC8*Yyy$}(%4Io?Vn+OccMrGs7^`eT{MJ+h+6v#1#0E~h$yg}C@a`PoRV-x z&=@FwXstnmtn^sog9yj9@`FMydb2eQVL?6clDU>W#r*CE(w}iTdw?|Vst0B!Yy8B1k{!gMO=8!QwMCsKDE-fDaBydWrgUs)UV0TBkgYPSr%8fRcJf^_5?# z_3hF*V5ksAfwP`VT~6=ec0A@jqX1LrhGk^_X(qP8PZgPnb+W4;>n=-8=%6Q@%9kjV z8h2<69N?Un@g0v#OE!-3Gb-np#@i%+us=S%&M`?xf^9Wh1h|UP!Dl6X@lkAtqA3$& zx#|eL-&mX3?7eg-6)FjJ7ZO&w+oLq`%HkPB>&e(t7H}g8F57jK8NB6|WNn!5a)mNz_wIiMSvmv>?RxSF|dO+3oo`MoJ zyNVOqa&^m_EkCvVI9IuK1o@ux3-duyj-yX##{5SvlzIg2OV+hqN_M$svm zFBny$Ai73UO?nsKKa$$MY-S2b!zM^e)|B`xpycdScZgytNqhkmb*db_*s!Xdm7ZEd z_o6%Pm;@7#MX|+___72(=J{651O+{`ied?UZskyJ7WvX%XCAyk*QFR){tRv~gGoA_zStYmVV$jU!4;k(gDIRGJWQ(`0sTe0C9obYi-MXRg!Nba831p)m0tnDJ>bE}EW_7~okswxFn_z?ppIdwsZ3c~5++ z0R*$ww3337bP1{zoCS(6G!|0(|C+sHi$<9Lbt9DPGI7jy5Ap<6EKX^VRtsudnRMC7a*!6~-vszFj$asby{4pTIGGo56p=7T_EfM-;FLo5iNKxSkL1c()>4RytT^e>J)SBF= zd5{n6Ta1SjszRW$5q(UVlZXWCy*FLkP?l_a z-H74_ioU82Yr~7N#Cq=NZs!TjD6HU8OA zSYw!xyCut8+VU(*JTuTnvGw`gCC{7bbfJtO05%ESL?9`4m=JCR^12D!dq3WV-W_TJ zZ`ngc@temDJ9(&JFISEaE*Q!0-NC zILSN2DVB3_T!tKxn-UUoy)EZ*vygo$&2W`&zL}*!x8_6(swF7M$kU@Hpa+@ zswFL5A+8xHl^2JWL_{P@9ePfiEE2IlW`2`0oXNeY+v^@0dho4h|F1LU?;U7XtiP=H zt=Eg^O-6%n@&gJI!d`)oVq3nw_~w$K)zkGp#q3X6_0x#?D+Bip^+bbEe=oM$MfI6G zV!P!^?RHO8QR8j^qb;-Bt#WNlz*9?ok7}N>)`Dw)VV$W!WE^Pd*=?#!(8YI5X83nT zJ3K|MpANbysGq_IOWXWYUeUj(-j^UF`=4b_oWeiD5K90tMi@0S8>g=F^-*fNd1|co zy-gbJw9lXZb;)&)YKOs;w2Z7gXc*WcB}h|5q`^`vd~1i@PTOU#!%pbTB4{EwMcT|c z%8FlHmCbK)YueDRj&!0^HKa2g>~z72wLM<{L=#T}1(Z`mA45zt$5~8Vl9cE&Mcb{h zErzPoY`k4v;iBjJ$XI;cs;;G@oh#WQY`}Vqzv@lz!b%Q~jU-->; zzSR-}y&&R61lbf(%}xdxVU8nAnl{WerV6c1zCYo)r4eqwbSr@!&!KTZoh&X1P zRj!d^wyETDs;Hq|?XSOs9Zs5Gu2!=?p0|UX{+sThmh?Eaq3)`UrZZS{nXxCU#B~~d zcw+Ex&_mBpI^DA@D$3s1$xRVVYmt#zf`M~V=UJFfqtX%|Fj7ga(*%=YNe1u)DlKk} z=yAz*MvL%=`VWs3-hrVOaS+=|nJS|bteGJalAd9x7$r%3K)aj2qHQkUHNK5rttj)6 ziWg@DUS~maeCVbaVVy5?+XagZ;Wo+Lki%0s_Zc}rHcH;I;Fyp z1i45O*|olwl32XG-Yq`z%s6#NPyXzU+RMni=JfNLHrYm;UoSCO-XtvN7Kl#N81cT5 zh#$DfN6NYQw9iRAr6YOf{pvwSQd{|asN{)Xf~vJM;HinIX7Je%gP;1Sv$nPLF_O~G zB9#oPj7jYw4uY|@;#+Zp~LlA<7% zC#G1ocC98wS{VOkYazUNO0xM6*Tf8-3>vN(5WdoslB22UEAXNh6UR9uDfOmG z;`9?Ri5dOh-!@T)@#Av#v3hFmC9%{67O4D>oCve@U_{1LdA6}4=D-YUlwK;*SvyZWD7<)2H~#$zyYhU4Oafm}+B!|=f7VTsn|FlS zZdGhBkUROSi=+9_-Ab4IT6IosO$ zx(HTT+kr;e;2?IB3uoRf1n|+VXF)Vp%$>j?-P%09Ii)Yk?BkXH&b9bC`v^DLz}3-3 z3m;Dia=6uMcwL_a4W3HQlgn_vjR5x$jFD&@ zf=4Q8&kX{RcU6OiEDt906i^KZ7D~&G zH};WPeLy}98Q!Ko<&-|{GvqDpnfOWVM!hq91U&yZ&}N^%XyrdlG|`KM&33x?IDu?z=*vWzq=FrxxKj7M?-zi(^)jKqEmc`q1BM1&)z%aJVfD3`%Q(TboNpCsa*czqs#xO zZLk!d*aDWj=X#59pjyGsFuP>OSIwWK?LB-GV~S8Z_oSg(H^tF~_Ym2%ukzK~abveb zW-`zHFFLJlvi9)5sicq9I7-kBER&p-w8FWSl3w-6rDsg1vKVC*w7%ZwUdGTq7{A%} zpG!OJqa;p6JssB`t}%8+NjolK_io@$oB>di`Kt1HEmm|k zp;Gz=mXc@$p{>b}Tl{F~iVwF_s6_;oR*k2iZEsS4pdnqeTuGVwh8m8%bVjloqM>>l zbyCW=zVk^H`iLQos%Nr9a?JUxdC)E5(ySyy)ZAo8LdkU$CFI%Y)H6-y#25i({N`k( z|4t=&C2S}92aQ4Tz|cjVnsTt^uamtIw2z*$)7>;{%(SG+B8l1+iRj?fk`6AxR<0}% z)v^xCxc?opMg0Gc=@Jk@V8fFq#bWWV+yEIBO7$^Y%~h`&tXG@d;@hoAxZ|$(`;hbJ zrGnII|7!a%e`-?y$f*ko>aud(GuvcXy2l&IsQ~zS=~7Yh3LBA7+`;7m&K-C+;S2 zW-^Q&#P*H15pTb7-i5Vl?U6@G%#@Vos= z*MGwR0%qcyIe$dfj+V>|AX6@YK8gSgRRUm)DgaYe1DI0;@cY-s;4JWMv$KWdz0CY88+rEiexF`qJ5sS1Wtm>XJ$cv_7bm^^ASNrdhm zgaT5UC>@OTMh+Y>_ad*Z_hsM_)(CbN#OcnjWvlQDv^%BkEpF_N{=%W`OUUnjv`3G2aO zw+q=1YjCB$u0Vu-8|?P5y9Xw)$!Mv-c{HO0{M!Db{dfEqw*@7&z4O}XT&L?(w>Jw! zk#e%`c~6i=BhHpwht1ex{|Qgyzb@UQw;!l;5bn~6@WY7i1c8*}LT9-Yz4^X(Ep;l4 zu$AmVI0DDv^>_o`R(U5|uxr?f#hb2fhBWJVai-R@pO@+#=jw}x65VYx?^a{IzNr^c zh9WDgW>1ocD^3gkjDMn!JFvcUF3YPDCD~D)IeepkGVduR;xJ0VabYAH(1Ld5;nboJ zvoJp_=H2kmCj^r-6X)YnT#Xwm?{^c=#&ddk6#1uhn)~G9uEWs#I<8GU7MTy@^~nXI zC3wOH23xqp)IJ_wdfan4TdIUKT-evzkK^6mh}&JxJN#R} z)Qc!vtlfOtqZA3EjKoIn+2A^qqYCx9z|=i?0+ebWh+=z(a#W#S2|BcV0^Ia&C30Ox zUFqsq23&^mobl1$bhc%^R^HnaZOpI|JBW-mMz9~^2vT?cAVQPacJUGUHb8|a%fv7C1f_cT3$DCQRc@NTY{iInPW4^6|}J(B;tUfZl~DLC!)^j1&Ga0}FlibCvCeATX1 z6x{SOl3J*z^xf4 z<-pHy0>;3X~axj6hl6IuWnn{kv4H!_F zL`Sa%{KB*uL1-z`ISsUz;Ik3@E)k2|*d>BT)C=B1wXSI?{0bbb&L)EB1C1tKLdkCW zLqz_up!gBULuM+b4oM#XX(B03{cqgPuk(!@B_c4hOs3mN^^e-xN$1g+P!a}Yb ze&z-?a6+;@v#U3ZFeOUlWqZnPGiERaG9@o$`nf3Y!)7RF0?D1dD-=mdiM;L@kc&~% z(0KSub|)8^55s}4Ko^Rv7d> z;MMY4fdqs^#3X`91!IJe2_+XsA)HbK6}3njS~_}B45AsuFfp@;WfjM!3%hs@37itS zB>mx++WKZDo68r9rE;ZOt2dghcBk9x4~C=hWICHKma8?k2?fXX{2*jp$Vh1uC!6hV ze>k4bm+MV8Ov`p$&kw>VPSPwd%BpVKt{=u}Ue;@1aGaWRKbLesJB|+uS;$5Xa*>BL z2K?5-$Lol3#P_WoeONBmOw^zrJ8%;9FgR=cwsYCP)56&$LHql4!EfTd9)gYuy0P~Q zsP5N>e*D(4bC;Qc)kz4>&kN_9i(Rx(^g?`%ISZ)~>Gu z0u+LqFbmEjBx*)qum>L}APFG{$S2y5-empQ1Mc82_#@#GzhtKTpysMCI#pjbZu7ws z>_?~IqTFeZ_DTL=fQH~O5gp>2_&5HNj;9}vTk$F12A|>G@GUVKCnnbPYF<45a-Wtr zwYbhURI6y0yQ)9zUp7ym+@ZXK%ls~viPR_O8UCLzAm9M5(<0hLbr1aA>gZo6LHeK= zbSP+RP$f0f0L{~F+D@H}GGm3+EMpr(z$j#lu%uU;=Zn0ZJNc(z{r=Np7rX=?2~G&! z9=x}Ym@xQ!-zy1Wn3TDV$z^6S%XmF9ASdOjY?Z%R301KoYY!`p)u>&%sQ>6*)$EMP z*qObD9nBW98*Rj-w$n^VHDn1n6|y~KxA*y?U-rEoaLOFZX`Bn39M0Y`HLj2SQ%w8F zihQwAyu7&$^(&Pwxiylha;jV}pJamb#93-#CTtC7{+}^Uc7}ra(WH_WIS? z9xz*@yCd(PqRuI9h`v493Kbh?vYBes+vc$2+THWSn6O}fq1=*0h`0?58{#=7S~nJJ ztDsF6_OajDMzgNENf{B(GjGDwC6~6-3cD>gPJvFFaFC0K_rXW3I8IRp>MdirNy5mO z1A}Sp2;(UcW&6aIkI7cdw|fM5p#r0eS);QOhXU}ldf#inM;fcjupywbS%)fDvCx8q zVnk`wnK#>Nk6M!y^Wl;t-dI&;D*tP~z%eT7MTSJ#K4)-|RlZPfj(L`uYSK0}zOmDE zgT6LG?x+J=Ow(_&LS%;+eMdHa#Fc>|g{#fC!!CQR6($ha*4ds%)w8k;zrBoh*B(89t5$<_T-TjZWxtIKzR&;RxNCD55;>+NH znuH{i9N_v-<0vGbM(&;wt;K3SX@kpONNM{S*9`CS4)+p7@6Bzm#ua$MQ%|{SHL?`y`x6onJ9LDIFN%2<3zXgIe7u z-_#S{+(#h&ZNANYV5t5Ln}-&c29%h(=Eqf@h|JqT)rbiNCY1)cOFbz({g*%2I|}v3 zQfunk?C5yP{afZ1gN9JW6tn5E`_sSTfQW*LTb81EX_5#JFuE9dvm6T3c$z$Avf)IN z=H^^mdl(0wGnGXiQ^Z}B-$=nW&BGb^J#517Rl$HOSti?YU-|$FT)%C4wjU)2uHc=! zAz1dpyJ2E~2gqoLO$KX;-Z?nwk)U}SxO^dS>w8NTz?A|^z0OVX?oT?P%acy_pk@Rp zJaUy%&drmWdkti|C`C4Wnbz#SRL;P`OK)_+N*RGGC-sU!{jrr|JnhV`Yekx5Wz@6- zWIe#YU&Y2}q=`_qr`;cRN}VcWxUbrP@9194+>6TqqCZswRQD`qWL(^D{o?7s>h5IB z&$Gp{C-%<1JuZv7=2fy6v)98Gn4|y#hL0F1DKk^-?fA`X5OA9>RIp9_A)=X}BDy(w zwjDs}ij?ppWl6wnE7*1g1(Xj*LeyA&F7{$kr;ky7P`(n<9;qDvpmtkx@v@|(LX z0>PwfQf2x@gnn2rBvAQAQlz>jUTM43L8*pQF_FGVn>^GXbV$fYB_^*>_}0X;)&NKt zPKE0r4Q3xIb1P{@U?#ooOntHQ)l`s#s(3*O)0vPcH%Q&I5N)Yu2PwwCn@UaQ^lrD* zl%~m`EIrpyxWmlw8=N-ap+>eXEt5fX%e&fuRO-jMFI$gYLk|BiO)6-Y6MC~%&|=L=_r^P zDIS@0V5*7j_u7>Dw8utK#01C~b1y>`rt6*Zk!AMJSjCbv7rjNpi}t!ko{E%3CcjPa zAC@7hEEYGR!z|Q86Jsd~W6m38UugnH6_yH$6+8WXCVg@cRNn1Lr6<*t6p2(Ea^<(P z%})T3PiA7I&?ytm`kbtG1d-jJf8vLbj^)N~;=kd6l$Nb`I8X2rA%l2TA>&Rk-5xY4 z{#Eb{VDiQk_aYs@kLgl_Eg`yT*O6B_byA{su+loe4=_UYB_EO10he0c#iJVbCp(wk_F(w7g&7Rg(qZ7!(8s-K@`yOm;D? zkSLC}2~;#nFRcvP>$DXmL9)brcMEDC(&K21$4U^OD|k06Sexv!C<#oIhj9w|@)q7I z*2Z#sNtS_{m3ki@O70~=h4ofs%o0(@9je$9j8T#SseWK1`cRjE8!Ye4M_pxpl?h|I z6d(%hPJA;-D$PlVtY5>LRcosWu4;~F$v&s#jGV-khI-@F$_n&*95T;EP7q0~z6Z)) z+cb=^R?H$cXQXw2&ZLO2t9irSv1ka$YRCrDFJiCZu)acL%$#A_#Ch|b-jq#dSlDcI zAJcr&_PA{+<<_;!Ptrw8$gEbPHHd3HqifLZP~>j9^h%)Yw_*4`~b_nebGmK&S+?_~2I z=lU{wwvH#{Xp$u1Rdv-D)pv<$WfeUj*=P1!2c}PX#hBoQBJkZCPuT|}2F`4R@76KO zvrZusyigclI5_|kLq{9Az1`uP)BO8~r3c2j*|b8nHnSQ5n?)CX=UNNCnG0l8j<>_m@E7>k@fPK-4LX)+2n(0)SRHG1{5 z&zh(ck(Co>8wAW;%5O8j4^bzz&V)|P26Vq+SVzsrx{>K(SZc+QTo=^6nRXGiu)==W%!=MG1lW%(ecqgF z_E5-Mss$QoKatxl>WZz*UWmC1We}AH>MLhJ+O--&E9Q2Nj4&M5HsR$hH5sTEFS#`| zq)**|57k#G(um1p?)3jPNxXO~3ZDxYmD!14Q&tpAzY|sXC7jgF2>kE1JV<>=G2}xsNFz*_sarRLqf>&?(srnjp-ud4-H!`Vi+yq2-9{A-f5Pvo9emPd9o3_N=CR8j8mZN%AVUxWGrXI2y;G7W0QKx3 zCKAr3sTV-5dny2EBnH%>d9E8Bkx9Xvw;*TViPGwUDnjgd$kn(1lPhA_boZ%VBDf3? ziCS0?V`X?igykbAOHc?^sfDB!8L5O3X*4dhCIdXlP9ibvdO^1{U&=OVnlj|w0g=oB z23pw}oQ{hXxeIm8S%Ep=C|s<{+aqs>909__sKW%rz>kJb>3XhT2kEY3)Ff-(XOlO9 ziz8Qei7Q+e)kuZYNlE&y%R z^-B20j)+nhiM#)rAsbSk7(k+?KzM8eJWw9)3ul5*LqZ!Cf|_hn2qiha;vqe$$1h`7 zaWf7CaLM7;HbznDoN~~aAEiq=Esm@~_)kO0y(U%+<6FcNH0^MHpTzK~+Y$+G(ks2b zym`1}_`yr(G&!U9Kn#~xg3dsDz1BM`G7x$xkl4_0Y>UgtIG z+8zoOu1e4{64wnycSSo0Kzhd)g&}zg0j;`Tol6~_#VCRwT7uVi(HeIhu zHLGd`=`;BGj;d4xMhe-)n7O@16u2xkc2%lbRjar~2%7@VG!usjst{6A$m{{~(GbK> zapaZ<^m74wn_WT-aZf^;2a8i; z^^TqlUR#1%NFX7DxV!1Tn>bHGTM~TuGnrmdT+7!hDg*9u_4{~Sa#jRghBOPGr{GZq zSe3jyQnQa{8=+0LJA}wK2RPrQ0p!$WOtB5jfwH&(`oeYS`Raq6yW^;kkB9r(-+lIjl;eTHWYOO6t$olQ`A6YseSmU{&>!;v>Gpi% zXNXWUdKtUx{x*B87%MX5IBtTMUJbik>0swif)q^v9z%8MdE8Jj9{h3wOOLz%ekZG9 z`242*;}h1y{p5+2id)#V`^zzw6TvSgIe$nr-c9!>$vic$m$$pF1$GO?4@DNxXyGBgi{T^FDL?%;=L=$rNpgQ0+a+}Z`Fp32ePzDIC3-EaMe z;Q^=5rc4kr}4qn%Fn7hqG0q>?Nid<^P`u35Bju2$GGQNIh90=VSFX>r?7G|;&3>8YXFhw+sTYmh&vC}L<$slu_h=D+ zZ3G^;lD(Jt+ERF;_%60KGlliYjv8W$uMFZpM^Xc&;U3b#V(%`&%xxh~gxV7n0S%)4 zXjDLW2?yv1AF6#2ZT?PcQPA6sI2GJKd-KoX$$)=9PSvwGo6i-dwZls_=dcKCtat5) z1T$8C@mWz#lku9>$SiEYh+f(1S!$9^)L#vTia0+sJ~6uyEW6+eDu~5vG~whbzC0{x zw%wK6Bt@c2W8z_s*hLj_~!8!Cu%>W4r6xqiP>Y`yjh1$8XJ-H^ZC41oq{T8 zA>CXxRc)zf)8B{wP*S978a}r3lUDD=Dt>y6F0TLC^l@-pdj2eI(q1kT z3I};!z;w%gYE&;IbjXQsCZcg1V+#V;xjvE&cGj8p571uOqf6TNCx&g@JGARE5T#x{ z$QsQ@Abmv8bcxvxWco~X!bk90ePQ+&Mc1?VbP+N~3o+*D@&FMIbENpEA=@^JtXf76 znQ#I^ap+Fv&!{)8TkGY`EZEl%%9w1`$#Od;#S~DIc5d2SpBJLcTkER@ayYM5e4RL^ zC-&MhAc!0yQgrhi^1nVT#nJ1(6OoyPY={$(EElpBjvY@=#1fRgyOfbWUxFR0xWkul zl^{NZ+Kfu3k=o$-xT90XKpa+Xciyg9p+f_d#%-0RuF%4n*NtI6kt@i%K3Gb@Psg(Da&Wq{ z-uWhMXQ9}7gXOQ%Qz%+{LDNo8&P>pa3b(iFzn~Z@p9SP zxq!O)wu8O_pjg0&s}4YJM4fw!bl!&7D$B`G2Vo~Q&@YPMW)}%fnW#5vy3GwFbq%iU%w9* zbNuHQqmy4ih$P;*U{vX+bu2(^nhOWe(_9DFYS*X}FSWADePiB3{&cz(U`K|A(d ztOefy0HT#>8o*7fSv(6%O)yqeox1uvuNqsHSc$%}!(NB|5C?;V(TEbGiv-EivBgM~ zu0o62!b+%rm)dn&lU$NdN{->oJ}r;tl$pTIuS$$-Qd@W z$or8`c+N{+_m&?WJAibfyQ6zRf(!*Jv>CJJLZ1;+7OWvS_%IAN=2OS_G_apT9OFk_ zT9>)@K{b2%cnKG%Sh+OV<$$A3L?c5<&&a|dQ3@8WIBBvxL0RpKl@258B#nBghG#d9 zE3Ja0hFZjr;152;+T^UA-q{({xEU;9#f|sTObaImy<4q+F^*cB_i1P2vajrax;N&X zuKIa#7{KC_8C?HrGw-aT)&dIy1Dv3f&Ukgf&UvbxCMQDn*cy+ zsiJspad5G`*uQvU@uZ?E_9%8QCYU!2+J1suPzaiR!^U7sur=7mpz)`NA3@cjd;C*+ z4S0S3)jykW=sbYVmTI)rN~<&E%3Da>!V(l$N`-B&xpg%vgx9pYR=<>~km4t z6Cm{Jx4gP=F3w$CQ6K?cThu6SF@TxHj$@9x$v`d>8e9gzlnJ6-eQdG9#QDf8f`m(s zW}A;gmQ^=Yv~RM-_USdvQ*z94KRNBZ|6FiYo9q0%mnFR4yNq^ANwczyEk#_|oo4x9 zTPc_A&GW-DcNM?RW@C+m#1er0R$}3Vo%Sto>19&M(%{j>9#VTszZeRA=H)V-GFg?0 zrkiA%FU_>n0;scJk8b`uY>qt++GoEb4%EKG{`8yQ{o(&w_;F1^nSf_1p=uJdh|Cad zF2+1c%P1@np+=~MH0tQAq_skn)nYZUTF-2)Xy5B%vv`dXY~|3zX`3WFb+wz@F5MmC z)hyjny_}HaN7+uw^RoiK%J++Y&g$!o!TvVXzXtis5dRqIk_zoc8>ho~H+|uTLaq8c zH}S#~w7J-#q8C(fA#q|A7%g^;m@9F`2p5fV*%;TVwM~L}TWq!2HT5RDFYl5r;0r~J z!?eI30#y}z>~3UnCFCeR4k082L?FQ@0tlMm5uy}@r;JNPrcYB;+6?K69sq&h7 zUWLiOb+^dQ0f7I%cK_~sxa9fAE;?TaugL^36G5O!XXyiN)2SWTn0R>H@09@2MxvGv zqzzC&5~6uLpqzH4#H{FMoF1w?o6HQ!(ndItp*qOZ7vriFtGbpaQO51Nu?R)J(MshH zP;swHmCiovK9`2*h=;`L8q2+XU+GP&B#QK>C{2c2_XTA2lP&Gm0||VgQc863E7hhW zHsIQREC${_i@jiR!u=;V`pZWc&uUh&UUbL(hq%x~yi#IA+k5{t=!-X;uZOZZmBV78 z9Ni;i&^r4zDGosI^i;UooLvR%^1lX|5`JUmzm1Jv>zhX{|6=SOnaOl35Wb&(P=c$& z;$b_(uUdJS+PFwcYa{A|4Mk-o`(yWhDs9khcg7#{cd-7L=_3d8Fh_?vWa;FSt#80C z*K9>)qadB`&!MVc(_~uARnNV32<;Gtor<*=3cN&}7oQ zTt6@@(TkwDEW4~8_K&^gt6O9e0al;M-`76f@F1Nu`uCn*X*T(mQ1_<_JhT#Njm{HP zE6<8s&B0CKhWE*|@0!`L8$X=l=0a59md7&KO)KcZyvbLmZ6@Ae6t1+AaE|_U+i$4J zOP~aC2AP1doKvQkRz)HSgOlrzG(eH8Lj?*DrN3nTq;U;@`1sh+bNxqHiUf8Qf~csB zmSiYeh9Z$DISNE5ly8V&!w6N0=HtWyb?(HDhr=LT{wrhYHmNhK1?&_6%o?Rp(mpSo`6DFE!c$+z48yayA}7w`kxhX`8!+is0O$N_@fqi%707$677G*|)mg+#7w`Bb0A!$D$D`tAL3-ytIo7D|;DhjIqnXC=;BA968R|`c_Mnq_>{> z%APxO%$aV?w7U&-r;4RduBcLJT31z*+~X`$d?i1kE-Wc*Tgspd$M>fon$NDK{@=V+<1y**Qf~g|YI{zKl3OKozmdWbC$-*m=|zR2U8zL#b*A6^{fAqjPaQp%|1J zL$M4au8PG8R337dj?G8SEp55DQc21zdPYR3lVMMGg`NDt+>DWVB)UOm1gu0R3OH-~a#s literal 0 HcmV?d00001 diff --git a/docs/assets/font/BerkeleyMonoVariable/BerkeleyMonoVariable-Italic.woff2 b/docs/assets/font/BerkeleyMonoVariable/BerkeleyMonoVariable-Italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..c568c6234bc143d49919d8aae37d80e66dd293c5 GIT binary patch literal 40484 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 literal 0 HcmV?d00001 diff --git a/docs/assets/font/BerkeleyMonoVariable/BerkeleyMonoVariable-Regular.woff2 b/docs/assets/font/BerkeleyMonoVariable/BerkeleyMonoVariable-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..14f4f38a54d8ccaf044a172bf8fe67b6e8744256 GIT binary patch literal 37272 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 I|6eQu0I|eckpKVy literal 0 HcmV?d00001 diff --git a/docs/assets/logo.png b/docs/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e48a3ec17ab388445ea8ac854e75a0823f6d0f00 GIT binary patch literal 17080 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%0AMeM~>yj@p z*u0(6m=+DbS~Kw}K>cI9Zn@xZ+I1^y8FzMET45Pjcg zrX`v&^xI&inVt56dE$x)q&W`&G)Cc5Mcl0^+whTaIUJ|6!dkE87Y8;8E7)Y}A!v_2 z0@uT)FpW;VEtkpDwoVG$7`ilOpg_DHft$73lA#W6x0e%D5o=?Vm>N{T8e1|(mQ-w) z6MgB>`?*zK$36aD4J$k^(8&h5(-Dmb$@uzxvS>v?gY_h2C-DK0`fI-5xY$u}g~3huEC&&i616E5=qV&^iZt*sUD z%6_2Z01h7=oCI}b;Q7!6jSs251+ar}0rKHn0NUC>GJnaOXy%?;ssNg?Yz4a435$DrMK}rN}-oz6^-~D=d_4!Hmz!f_uuO^heK&rwyH!E99TT!kpyLgUNtY zXU-!p@J;2+HdsQcOn&BxiDV^WuU9nPq$@Byb zZ3UQ~0CVIp4X?3qz-2yR7n8fWH4lb@xbuA8hK5D>&iuUlTnZ163^4;Fe~DP@@OibO zD@xAY+USb&?x+3zBr6?Hv=mSz4cdw*tin7{oxc}KTT2vwp+!OQsKV~~(3vFz<8F~P zM^CUHKmw)vfwzUj=M@UxUuyJMu=%qJ`0S^+31l2F$bkLjXsmnWNOerc-{W|qqau5_ z^T`jRi9jlX?sM{cZ;mFeNAl~1g%kC87ZcMu${*dx(`ebiIj?aI}N5f zEwMv4K3E^b00_7)5%Z^z@9HpkugAibFs(4^(T8JGw z3!X*8!a+MIzT?}Tq=ir!IF6Q@JJ15-3vd|^v%Hc&8%d{#)bg&vnbIomy~FTK2%owO z))~p-{v15hvT@g^ma4d1(}`E&-VCljjFeug-#J}<^#~#|fYM%T>@KNBMpA;+%z1;7 zS(ESuW3EgtaXk3>&P?5SK<;yEJHh!dldkdJ-=;>q#Xn9p?If$we+9bAh2A;F{?&o_ zO#}O}I$=>b>)rJaMeR}jEe2@YD#gK%JkvHu#p21p4N9lU*#;AhBcWJDov<5>?*2XE z%gO|eyTt}mp)G-*My61?g@ds3zEkjc$_9i=ZVyNrefG=%QipV9B0`iXqltots$%-z p2Vnkx8S-BqK=;7^mwNEoWOlOdu>OyV$3Q-UZKi!+@g4ox{{zUO+K2!E literal 0 HcmV?d00001 diff --git a/docs/board-games.md b/docs/board-games.md new file mode 100644 index 0000000..d643259 --- /dev/null +++ b/docs/board-games.md @@ -0,0 +1,35 @@ +--- +icon: material/chess-king +hide: + - toc +tags: + - Evergreen +--- + +# Board Games + +/// featured +

    +/// diff --git a/docs/books.md b/docs/books.md new file mode 100644 index 0000000..3e25fb9 --- /dev/null +++ b/docs/books.md @@ -0,0 +1,155 @@ +--- +icon: material/book-open-variant-outline +tags: + - Evergreen +--- + +# Books + +I prefer to listen to the audiobook version when available. I've read/listened to the books listed here at least once. Frequent interested genres include: general nonfiction, history, crime, science, and mathematics. + +/// featured +![The Committed](https://assets.tylernguyen.wiki/covers/The-Committed_2021.jpg){ align=right width=125 } +![The Sympathizer](https://assets.tylernguyen.wiki/covers/The-Sympathizer_2015.jpg){ align=right width=125} + +__Nguyễn, Việt Thanh__ - _The Sympathizer_ [:simple-goodreads:{ .goodreads }](https://www.goodreads.com/book/show/23168277-the-sympathizer){ .card-link title=Goodreads } + +__Nguyễn, Việt Thanh__ - _The Committed (Sequel to The Sympathizer)_ [:simple-goodreads:{ .goodreads }](https://www.goodreads.com/book/show/52260627-the-committed){ .card-link title=Goodreads } + +[Việt Thanh Nguyễn](https://vietnguyen.info/){ .md-button } +/// + +## Art, Design & Writing + +- __Heschong, Lisa__ - _Thermal Delight in Architecture_ +- __Mars, Roman__ - _The 99 Percent Invisible City: A Field Guide to the Hidden World of Everyday Design_ +- __Norman, Don__ - _The Design of Everyday Things_ +- __Strunk, William__ - _The Elements of Style_ + +## Biography, Autobiography & Memoir + +- __Bùi, Thi__ - _The Best We Could Do: An Illustrated Memoir_ +- __King, Stephen__ - _On Writing_ +- __Obama, Barack__ - _A Promised Land_ +- __Yamashita, Karen Tei__ - _Letters to Memory_ + +## Business + +- __Bogle, John C.__ - _Stay the Course_ +- __Bogle, John C.__ - _Little Book of Common Sense Investing_ +- __Graham, Benjamin__ - _The Intelligent Investor_ +- __Graham, Benjamin__ - _The Interpretation of Financial Statements_ +- __Zuckerman, Gregory__ - _The Man Who Solved the Market: How Jim Simons Launched the Quant Evolution_ +- __Zweig, Jason__ - _The Devil's Financial Diction_ + +## Comedy + +- __Carlin, George__ - _When Will Jesus Bring the Pork Chops?_ + +## Crime + +- __Capote, Truman__ - _In Cold Blood_ +- __Cullen, David__ - _Columbine_ +- __Gentry, Curt and Bugliosi, Vincent__ - _Helter Skelter_ +- __Grann, David__ - _Killers of the Flower Moon_ +- __Guinn, Jeff__ - _Road to Jones Town: Jim Jones and the Peoples Temple_ +- __Keefe, Patrick Radden__ - _Empire of Pain: The Secret History of the Sackler Dynasty_ +- __Keefe, Patrick Radden__ - _Say Nothing: A True Story of Murder and Memory in Northern Ireland_ +- __Keefe, Patrick Radden__ - _The Snakehead: An Epic Tale of the Chinatown Underworld and the American Dream_ +- __Nelson, Maggie__ - _The Red Parts: Autobiography of a Trial_ +- __Parry, Richard Lloyd__ - _People Who Eat Darkness: The True Story of a Young Woman Who Vanished from the Streets of Tokyo--and the Evil That Swallowed Her Up_ + +## Essays + +- __Grann, David__ - _The Devil and Sherlock Holmes_ + +## Fiction + +- __Cliche, Ernest__ - _Ready Player One_ +- __Haddon, Mark__ - _The Curious Incident of the Dog in the Night-Time_ +- __Hamid, Moshin__ - _Exit West_ +- __Johnson, Adam__ - _The Orphan Master's Son_ +- __Lee, Chang-Rae__ - _Native Speaker_ +- __Mahajan, Karan__ - _The Association of Small Bombs_ +- __McBride, James__ - _Deacon King Kong_ +- __McGuire, Ian__ - _The North Water_ +- __O'Farrell, Maggie__ - _Hamnet and Judtih_ +- __Otsuka, Julie__ - _The Buddha in The Attic_ +- __Tarantino, Quentin__ - _Once Upon a Time in Hollywood_ + +## History + +- __Applebaum, Anne__ - _Gulag: A History_ +- __Chammah, Maurice__ - _Let the Lord Sort Them: The Rise and Fall of the Death Penalty_ +- __Davis, Jack E.__ - _The Gulf: The Making of An American Sea_ +- __Deyle, Steven__ - _Carry Me Back: The Domestic Slave Trade in American Life_ +- __Dolnick, Edward__ - _The Clockwork Universe: Saac Newto, Royal Society, and the Birth of the Modern World_ +- __FitzGerald, Frances__ - _Fire in the Lake: The Vietnamese and the Americans in Vietnam_ +- __Harari, Yuvai Noah__ - _Sapiens_ +- __Harari, Yuvai Noah__ - _Homo Deus (Sequal to Sapiens)_ +- __Golding, William__ - _The Inheritors_ +- __Graeber, David__ - _Debt: The First 5000 Years_ +- __Johnson, Walter__ - _Soul by Soul: Life Inside the Antebellum Slave Market_ +- __Keefe, Patrick Radden__ - _Say Nothing: A True Story of Murder and Memory in Northern Ireland_ +- __Kiernan, Ben__ - _Việt Nam: A History from Earliest Times to the Present_ +- __Li, Tana__ - _Nguyen Cochinchina: Southern Vietnam in the Seventeenth and Eighteenth Centuries_ +- __Logevall, Fredrik__ - _Embers of War: The Fall of An Empire and the Making of America's Vietnam_ +- __Morris, Stephen J.__ - _Why Vietnam Invaded Cambodia: Political Culture and the Causes of War_ +- __Rhodes, Richard__ - _The Making of the Atomic Bomb_ +- __Tuchman, Barbara W.__ - _The Guns of August_ +- __Wilkerson, Isabel__ - _The Warmth of Other Suns: The Epic Story of America's Great Migration_ +- __Winegard, Timothy C.__ - _The Mosquito: A Human History of Our Deadliest Predator_ + +## Poetry + +- __Nguyễn, Du__ - _Truyện Kiều / The Tale of Kiều_ (Billingual Ed. translated by Huynh Sanh Thong) +- __Tennyson, Alfred__ - _Poems_ + +## Politics + +- __Rhodes, Ben__ - _The World as It Is_ +- __Sharpio, James S.__ - _Shakespeare in a Divided America: What His Plays Tell Us About Our Past and Future_ + +## Philosophy + +- __Becker, Ernest__ - _The Denial of Death_ +- __Galloway, Scott__ - _The Algebra of Happiness_ +- __MacMillan, Margaret__ - _War: How Conflict Shaped Us_ +- __Taleb, Nassim Nicholas__ - _Fooled by Randomness_ +- __Taleb, Nassim Nicholas__ - _The Black Swan_ +- __Taleb, Nassim Nicholas__ - _The Bed of Procrustes_ + +## Religion + +- __Fry, Stephen__ - _Mythos_ +- __Fry, Stephe__ - _Heroes_ +- __Skilton, Andrew__ - _A Concise History of Buddhism_ + +## Science, Economics & Mathematics + +- __Ackerman, Jennifer__ - _The Bird Way_ +- __Akerlof, George A. and Shiller, Robert J.__ - _Animal Spirits: How Human Psychology Drives the Economy, and Why It Matters for Global Capitalism_ +- __Akerlof, George A. and Shiller, Robert J.__ - _Phishing for Phools: The Economy of Manipulation and Deception_ +- __Gawande, Atul__ - _Being Mortal: Medicine and What Matters in the End_ +- __Geithner, Timothy F.__ - _Stress Test: Reflections on Financial Cries_ +- __Godfrey-Smith, Peter__ - _Other Minds: The Octopus, the Sea, and the Deep Origins of Consciousness_ +- __Godfrey-Smith, Peter__ - _Metazoa: Animal Life and the Birth of the Mind_ +- __Huff, Darrell__ - _How to Lie with Statistics_ +- __Kahneman, Daniel__ - _Thinking, Fast and Slow_ +- __Levitt, Steven and Dubner, Stephen__ - _Freakonomics_ +- __Lewis, Michael__ - _Boomerang: Travels in the New Third World_ +- __Lewis, Michael__ - _Moneyball_ +- __Lewis, Michael__ - _The Big Short_ +- __Lewis, Michael__ - _The Fifth Risk_ +- __Lewis, Michael__ - _The Premonition: A Pandemic Story_ +- __Marshall, Tim__ - _Prioners of Geography: Ten Maps That Explain Everything About the World_ +- __Mukherjee, Siddhartha__ - _The Emperor of All Maladies: A Biography of Cancer_ +- __Zucker, Caren and Donvan, John__ - _In a Different Key: The Story of Autism_ + +## Short Stories + +- __Butler, Robert Olen__ - _A Good Scent from a Strange Mountain_ + +## Textbooks + +- [Hadley Wickham - R for Data Science](https://r4ds.hadley.nz/) diff --git a/docs/comics.md b/docs/comics.md new file mode 100644 index 0000000..bf35995 --- /dev/null +++ b/docs/comics.md @@ -0,0 +1,136 @@ +--- +icon: material/robot-angry-outline +tags: + - Evergreen +--- + +# Comics + +/// featured +**The Department of Truth** + +![Department of Truth](https://assets.tylernguyen.wiki/covers/Department-of-Truth_2021.jpg){ align=right width=125 } + +[James Tynion IV](https://jamestynioniv.substack.com/){ .md-button } +[![Comic Vine](https://assets.tylernguyen.wiki/logos/ComicVine.png){ .twemoji } Comic Vine](https://comicvine.gamespot.com/the-department-of-truth/4050-130740/){ .md-button } +[![Image Comics](https://assets.tylernguyen.wiki/logos/Image_Comics.svg){ .twemoji } Image Comics](https://imagecomics.com/comics/series/the-department-of-truth){ .md-button } +/// + +/// featured +**Spy Superb** + +![Spy Superb](https://assets.tylernguyen.wiki/covers/Spy-Superb_2023.jpg){ align=right width=125 } + +[Matt Kindt](https://www.mattkindtshop.com){ .md-button } +[![Comic Vine](https://assets.tylernguyen.wiki/logos/ComicVine.png){ .twemoji } Comic Vine](https://comicvine.gamespot.com/spy-superb/4050-147440/){ .md-button } +[![Dark Horse Comics](https://assets.tylernguyen.wiki/logos/Dark_Horse_Comics.svg){ .twemoji } Dark Horse Comics](https://www.darkhorse.com/Books/3010-220/Spy-Superb-HC){ .md-button } +/// + +- 100 Bullets (1999) +- A Contract with God (1978) +- A Study In Emerald (2018) +- Age of Reptiles The Journey (2009) +- BRZRKR (2021) +- Batman Arkham Asylum (2020) +- Batman Hush The 15th Anniversary Deluxe Edition (2017) +- Batman The Court of Owls (2012) +- Batman The Man Who Laughs The Deluxe Edition (2020) +- Batman Year One The Deluxe Edition (2017) +- Batman Year Two (2003) +- Black Science (2013) +- Blacksad (2010) +- Blacksad Amarillo (2014) +- Blacksad Silent Hell (2012) +- Blankets (2003) +- Chew (2009) +- Chew Demon Chicken Poyo (2016) +- Chew Secret Agent Poyo (2012) +- Chew Warrior Chicken Poyo (2014) +- Chew-Revival (2014) +- Chronicles of Hate (2014) +- Criminal (2006) +- Criminal (2008) +- Criminal 10th Anniversary Special Edition (2016) +- Criminal Special Edition (2015) +- Criminal The Last of the Innocent (2011) +- Criminal The Sinners (2009) +- DUNE The Graphic Novel (2020) +- Daytripper (2011) +- Department of Truth (2020) +- Dept. H Omnibus (2019) +- East of West (2013) +- East of West The World (2014) +- Essex County (2008) +- Fatale (2012) +- Frank Millers Sin City (2005) +- From Hell Master Edition (2018) +- Gideon Falls (2018) +- Gotham Central (2003) +- Green River Killer A True Detective Story (2011) +- Harrow County (2015) +- Harrow County Library Edition (2018) +- High Crimes (2013) +- House of Penance (2016) +- Kennel Block Blues (2016) +- Lone Wolf and Cub (2000) +- Manifest Destiny (2013) +- Marvels 25th Anniversary (2020) +- Maus A Survivors Tale (1986) +- Mind MGMT (2012) +- Moonshine (2016) +- Mouse Guard Legends of the Guard (2010) +- Mouse Guard The Black Axe (2010) +- Nameless (2015) +- Night of the Ghoul (2021) +- Once & Future The King Is Undead (2020) +- Pax Romana (2007) +- Planetary (1999) +- Planetary-Batman Night on Earth (2003) +- Planetary-JLA Terra Occulta (2002) +- Planetary-The Authority Ruling the World (2000) +- Polar Came From the Cold (2013) +- Polar Eye For An Eye (2015) +- Polar No Mercy For Sister Maria (2016) +- Polar The Black Kaiser (2019) +- Polar The Kaiser Falls (2019) +- Pulp (2020) +- Saga (2012) +- Saga of the Swamp Thing (2009) +- Sam and Twitch The Writer (2010) +- Scalped (2007) +- Scott Pilgrim Color (2012) +- Sea of Sorrows (2020) +- Sheriff of Babylon (2015) +- Slaughterhouse-Five (2020) +- Sleeper (2018) +- Something Is Killing the Children (2019) +- Sonata (2019) +- Southern Bastards (2014) +- Stray Dogs (2021) +- Sweet Tooth (2009) +- TMNT The Last Ronin (2020) +- Tales from Harrow County Deaths Choir (2020) +- The Devils Red Bride (2020) +- The Fade Out (2015) +- The Good Asian (2021) +- The Hood (2002) +- The Manhattan Projects (2012) +- The Manhattan Projects The Sun Beyond the Stars (2015) +- The Nice House on the Lake (2021) +- The Old Guard (2017) +- The Old Guard Force Multiplied (2019) +- The Private Eye (2013) +- The Sandman (1989) +- The Usagi Yojimbo Saga (2014) +- The Usagi Yojimbo Saga Legends (2017) +- Torso (2012) +- Transmetropolitan (1997) +- Trashed (2015) +- Trillium (2013) +- Ultramega (2021) +- Undiscovered Country (2019) +- V for Vendetta (1988) +- Watchmen (1986) +- Whiteout (2007) +- Y The Last Man (2002) +- Zero (2013) diff --git a/docs/contact.md b/docs/contact.md new file mode 100644 index 0000000..49c3320 --- /dev/null +++ b/docs/contact.md @@ -0,0 +1,61 @@ +--- +hide: + - navigation + - toc +--- + +# Contact + +I'm available on fediverse at my personal Mastodon instance. + +
    + +[:simple-mastodon:{ .mastodon } @tylernguyen@tylernguyen.social](https://tylernguyen.social/@tylernguyen){ .md-button } + +
    + +Email is also a convenient way to get ahold of me. + +
    + +[:simple-protonmail:{ .protonmail } human@tylernguyen.email](mailto:human@tylernguyen.email){ .md-button } +[:simple-gnuprivacyguard:{ .gnuprivacyguard } 0x136307727d3eef96](https://github.com/tylernguyen.gpg){ .md-button } + +
    + +I do not have a Twitter[^1], Facebook[^2], nor Instagram. + +[^1]: [Richard Stallman: Twitter](https://stallman.org/twitter.html) +[^2]: [Richard Stallman: Reasons not be used by Facebook](https://stallman.org/facebook.html) + +/// note +I would prefer for messages to be encrypted, even if its content is non-sensitive. +/// + +/// success | What I'll DEFINITELY respond to. + +- Meaningful replies, critiques, and/or thoughts on things I have written/published are always welcomed. I take criticism fairly well and will do my best to express my thoughts in responding. + +- Genuine topic suggestions, that is: a recommendation with purpose, reasons, and some background information. + +- Ex: "Please look into X, I've found to be very useful in dealing with Y situation and is a better solution than Z." or "Please write about X topic, I read your previous Y page and the two seems connected. So it would be great to see a new perspective on the two together." +/// + +/// question | What I MAY or MAY NOT respond to. + +- I try and respond to technical queries but would prefer and suggest you try Google first. + +- If your message doesn't explicitly look like it needs a response: being vague or unclear what the purpose is, you may not hear back from me. + +/// + +/// failure | What I'll definitely NOT respond to + +- [Don't ask to ask, just ask.](https://dontasktoask.com/) + +- [The XY Problem](https://xyproblem.info/) + +- No guest posts, linking, cross-promotions, and/or solicitations will be accepted. + +- Do not bump my email inbox by sending another email without substance. By doing so, you are annoying me and lessening a chance that I will reply. +/// diff --git a/docs/credits.md b/docs/credits.md new file mode 100644 index 0000000..8b8d34a --- /dev/null +++ b/docs/credits.md @@ -0,0 +1,110 @@ +--- +hide: + - navigation +--- + +# Credits + +## Platforms + +
    + +- :simple-github:{ .github } GitHub +[:octicons-repo-16:](https://github.com/tylernguyen/wiki){ .card-link title="Repository" } +[:octicons-workflow-16:](){ .card-link title="Workflow" } + +
    + +
    + +- :simple-cloudflare:{ .cloudflare } [Cloudflare R2](https://www.cloudflare.com/products/r2/) +[:fontawesome-solid-money-bill:](https://developers.cloudflare.com/r2/pricing/){ .card-link title="Pricing" } +[:fontawesome-regular-eye:](https://www.cloudflare.com/privacypolicy/){ .card-link title="Privacy Policy" } + +- :simple-cloudflarepages:{ .cloudflarepages } [Cloudflare Pages](https://pages.cloudflare.com/) +[:fontawesome-regular-eye:](https://www.cloudflare.com/privacypolicy/){ .card-link title="Privacy Policy" } + +
    + +## Framework + +
    + +- :simple-materialformkdocs:{ .materialformkdocs } [Material for MkDocs](https://squidfunk.github.io/mkdocs-material/) [*Insiders*](https://squidfunk.github.io/mkdocs-material/insiders/) +[:fontawesome-solid-money-bill:](https://github.com/sponsors/squidfunk){ .card-link title="Pricing" } +[:fontawesome-regular-file-code:](https://github.com/squidfunk/mkdocs-material){ .card-link title="Source Code" } +[:octicons-law-16:](https://github.com/squidfunk/mkdocs-material/blob/master/LICENSE){ .card-link title=License } + +- [PyMdown Extensions](https://facelessuser.github.io/pymdown-extensions/) by [:simple-github:{ .github } @facelessuser](https://github.com/facelessuser) +[:octicons-markdown-16:](https://facelessuser.github.io/pymdown-extensions/){ .card-link title=Documentation} +[:fontawesome-regular-file-code:](https://github.com/facelessuser/pymdown-extensions/tree/main){ .card-link title="Source Code" } +[:octicons-law-16:](https://github.com/facelessuser/pymdown-extensions/blob/main/LICENSE.md){ .card-link title=License } + +
    + +## Color Scheme + +
    + +- ![Solarized](https://assets.tylernguyen.wiki/logos/solarized.png){ .twemoji } [Solarized](https://ethanschoonover.com/solarized/) by Ethan Schoonover +[:fontawesome-regular-file-code:](https://github.com/altercation/solarized){ .card-link title="Source Code" } +[:octicons-law-16:](https://github.com/altercation/solarized/blob/master/LICENSE){ .card-link title=License } + +
    + +## Icons + +
    + +- :simple-simpleicons:{ .simpleicons } [Simple Icons](https://simpleicons.org/) +[:fontawesome-regular-file-code:](https://github.com/simple-icons/simple-icons){ .card-link title="Source Code" } +[:octicons-law-16:](https://github.com/simple-icons/simple-icons/blob/develop/LICENSE.md){ .card-link title=License } +[:fontawesome-regular-heart:](https://opencollective.com/simple-icons){ .card-link title=Support } + +- :simple-github:{ .github } [Octicons](https://primer.style/foundations/icons) by GitHub +[:fontawesome-regular-file-code:](https://github.com/primer/octicons){ .card-link title="Source Code" } +[:octicons-law-16:](https://github.com/primer/octicons/blob/main/LICENSE){ .card-link title=License } +[:fontawesome-regular-eye:](https://docs.github.com/en/site-policy/privacy-policies/github-privacy-statement){ .card-link title="Privacy Policy" } + +
    + +
    + +- :simple-materialdesignicons:{ .materialdesignicons } [Material Design Icons](https://pictogrammers.com/library/mdi/) by Pictogrammers + +
    + +## Font + +
    + +- ![Berkeley Graphics](https://assets.tylernguyen.wiki/logos/Berkeley-Graphics.png){ .twemoji } [Berkeley Mono](https://berkeleygraphics.com/typefaces/berkeley-mono/) by Berkeley Graphics +[:fontawesome-solid-money-bill:](https://berkeleygraphics.com/products/){ .card-link title="Pricing" } +[:octicons-law-16:](https://berkeleygraphics.com/legal/license/){ .card-link title=License } + +
    + +## Analytics + +
    + +-
    +

    + ![PostHog](https://assets.tylernguyen.wiki/logos/PostHog-light.svg#only-light){ width=250 } + ![PostHog](https://assets.tylernguyen.wiki/logos/PostHog-dark.svg#only-dark){ width=250 } +

    +
    + +
    + +## Notice + +/// announce | License and Attribution +I've tried to include every appropriate licenses and due attribution. Feel free to [contact](contact.md) me if I've missed anything +/// + +/// abstract | Fair Use +I believe that usage of branded assets used on .wiki fall under the fair use doctrine. + +Feel free to [contact](contact.md) me, however, if you or an entity feel that I've misused or otherwise abused your copyright. +/// diff --git a/docs/dotfiles.md b/docs/dotfiles.md new file mode 100644 index 0000000..305e03b --- /dev/null +++ b/docs/dotfiles.md @@ -0,0 +1,71 @@ +--- + icon: simple/gnubash +--- + +# dotfiles + +
    + +[:octicons-repo-16:{ .github } github.com/tylernguyen/dotfiles](https://github.com/tylernguyen/dotfiles){ .md-button } + +
    + +/// abstract +dotfiles is designed with maximum cross-platform compatibility, minimal components, and universal behaviors in mind. +/// + +/// extension | Components +
    + +- ![zsh](https://assets.tylernguyen.wiki/logos/zsh.svg){ .twemoji } [zsh](https://zsh.sourceforge.io/) +[:octicons-markdown-16:](https://zsh.sourceforge.io/Doc/){ .card-link title=Documentation} + +- ![chezmoi](https://assets.tylernguyen.wiki/logos/chezmoi.svg){ .twemoji } [chezmoi](https://github.com/twpayne/chezmoi/) +[:octicons-markdown-16:](https://www.chezmoi.io/){ .card-link title=Documentation} +[:fontawesome-regular-file-code:](https://github.com/twpayne/chezmoi){ .card-link title="Source Code" } +[:octicons-law-16:](https://github.com/twpayne/chezmoi/blob/master/LICENSE){ .card-link title=License } + +- :simple-wezterm:{ .wezterm } [wezterm](https://wezfurlong.org/wezterm/index.html) +[:octicons-markdown-16:](https://wezfurlong.org/wezterm/){ .card-link title=Documentation} +[:fontawesome-regular-file-code:](https://github.com/wez/wezterm){ .card-link title="Source Code" } +[:octicons-law-16:](https://github.com/wez/wezterm/blob/main/LICENSE.md){ .card-link title=License } + +- :simple-1password:{ .onepassword } [1Password](https://1password.com/) +[:fontawesome-solid-money-bill:](https://1password.com/sign-up/){ .card-link title=Pricing } +[:fontawesome-regular-eye:](https://support.onepassword.com/1password-privacy/){ .card-link title="Privacy Policy" } +[:octicons-markdown-16:](https://developer.onepassword.com/){ .card-link title="Developer Documentation" } + +
    +/// + +## Wezterm :simple-wezterm:{ .wezterm } + +- Cross-platform, written in Rust +- [GPU-accelerated](https://wezfurlong.org/wezterm/config/lua/config/front_end.html) +- Ligature support +- [Nerd Fonts fallback](https://wezfurlong.org/wezterm/config/lua/wezterm/nerdfonts.html) + +## Z Shell ![zsh](https://assets.tylernguyen.wiki/logos/zsh.svg){ .twemoji } + +- :octicons-repo-16:{ .github } [zimfw/zimfw]() - Plugin Manager +- :octicons-repo-16:{ .github } [romkatv/powerlevel10k]() - Prompt Theme +- :octicons-repo-16:{ .github } [atunish/atuin]() - Shell History TUI +- :octicons-repo-16:{ .github } [Aloxaf/fzf-tab](https://github.com/Aloxaf/fzf-tab) - fzf Completion Menu + +## Git :simple-git:{ .git } + +`.gitconfig` uses `code` (Visual Studio Code) as the editor, diff and merge tool. + +1Password handles SSH authentication and signing. + +Projects live under `src/` and are associated with their respective SSH signing key, i.e. `src/tylernguyen@GitHub`, `src/tylernguyen@GitLab`, `tylernguyen.codes` + +I prefer to rebase by default, unless there is very specific reason to merge. + +## Package Managers + +On Windows :simple-windows:{ .windows } , I use `winget` by default, supplementing it with third-party installers and the Microsoft Store if needed. Portable executables are placed in `%userprofile%/bin`. + +On macOS :simple-apple:{ .apple } , [:simple-homebrew:{ .homebrew } homebrew](https://brew.sh/) is preferred and likewise supplemented by the App Store. + +Depending on the Linux :simple-linux:{ .linux } distribution, I tend to use the default package managers such `apt` or `pacman`. If there are no feature difference, however, I will defer to installation via [:simple-flatpak:{ .flatpak } flatpak](https://flatpak.org/). diff --git a/docs/graphic-novels.md b/docs/graphic-novels.md new file mode 100644 index 0000000..fb7c85b --- /dev/null +++ b/docs/graphic-novels.md @@ -0,0 +1,36 @@ +--- +icon: material/image-outline +tags: + - Evergreen +--- + +# Graphic Novels + +It's a shame that there aren't many graphic novels that catch my attention. I do feel that narratives told with pictures is a medium that's underutilized and often reduced to children's literature. + +/// featured +**Barry Windsor-Smith** - _Monsters_ + +![Monsters](https://assets.tylernguyen.wiki/covers/Monster_2021.jpg){ align=right width=125 } + +[Barry Windsor-Smith](https://barrywindsor-smith.com){ .md-button } [Fantagraphics](https://www.fantagraphics.com/products/monsters){ .md-button } +/// + +- A Contract with God (1978) +- A Users Guide To Neglectful Parenting (2013) +- Albert and the Others (2007) +- Alec The Years Have Pants (2009) +- Burma Chronicles (2008) +- Did You Hear What Eddie Gein Done (2021) +- Factory Summers (2021) +- Footnotes in Gaza (2009) +- Fun Home A Family Tragicomic (2006) +- Hostage (2017) +- Jerusalem Chronicles From the Holy City (2012) +- Kent State Four Dead in Ohio (2020) +- Maus A Survivors Tale (1986) +- Monsters (2021) +- My Friend Dahmer (2012) +- Pyongyang A Journey in North Korea (2005) +- Trashed (2015) +- Will Eisner A Contract With God And Other Tenement Stories (2017) diff --git a/docs/hardware.md b/docs/hardware.md new file mode 100644 index 0000000..6842320 --- /dev/null +++ b/docs/hardware.md @@ -0,0 +1,244 @@ +--- +icon: material/harddisk +tags: + - Evergreen +--- + +# Hardware + +## PC + +
    + +-
    +

    + ![BenQ Zowie XL2566K](https://assets.tylernguyen.wiki/hardware/BenQ-Zowie_XL2566K.png){ width=200} +

    BenQ Zowie XL2566K
    +

    +
    + +-
    +

    + ![Fractal Torrent](https://assets.tylernguyen.wiki/hardware/Fractal_Torrent.png){ width=140 } +

    Fractal Torrent
    +

    +
    + +-
    +

    + ![GIGABYTE X570S AORUS Master](https://assets.tylernguyen.wiki/hardware/GIGABYTE-X570S-AORUS-Master.png){ width=125 } +

    GIGABYTE X570S AORUS Master
    +

    +
    + +-
    +

    + ![AMD Ryzen 7 5800X3D](https://assets.tylernguyen.wiki/hardware/AMD_Ryzen-5800X3D.png){ width=175 } +

    AMD Ryzen 7 5800X3D
    +

    +
    + +-
    +

    + ![EVGA RTX 3080 Ti FTW3 Ultra](https://assets.tylernguyen.wiki/hardware/Nvidia_RTX3080-Ti-FTW3-Ultra.png){ width=200 } +

    EVGA RTX 3080 Ti FTW3 Ultra
    +

    +
    + +-
    +

    + ![Noctua NH-D15 chromax.Black](https://assets.tylernguyen.wiki/hardware/Noctua_NH-D15-chromax.Black.png){ width=140 } +

    Noctua NH-D15 chromax.Black
    +

    +
    + +-
    +

    + ![be quiet! Dark Power 12 1000W](https://assets.tylernguyen.wiki/hardware/be-quiet!_Dark-Power-12.png){ width=150 } +

    be quiet! Dark Power 12 1000W
    +

    +
    + +-
    +

    + ![Sabrent Rocket 4.0 Plus](https://assets.tylernguyen.wiki/hardware/Sabrent_Rocket-4.0-Plus.png){ width=125 } +

    Sabrent Rocket 4.0 Plus 1TB
    +

    +
    + +-
    +

    + ![Crucial P3](https://assets.tylernguyen.wiki/hardware/Crucial_P3.png){ width=200 } +

    Crucial P3 3.0 4TB
    +

    +
    + +
    + +## Server + +
    + +-
    +

    + ![Fractal Meshify 2 XL](https://assets.tylernguyen.wiki/hardware/Fractal_Meshify2-XL.png){ width=150 } +

    Fractal Meshify 2 XL
    +

    +
    + +-
    +

    + ![ASRock X570 Phantom Gaming X](https://assets.tylernguyen.wiki/hardware/ASRock_X570-Phantom-Gaming-X.png){ width=175 } +

    ASRock X570 Phantom Gaming X
    +

    +
    + +-
    +

    + ![AMD Ryzen 9 3950X](https://assets.tylernguyen.wiki/hardware/AMD_Ryzen-3950X.png){ width=200 } +

    AMD Ryzen 9 3950X
    +

    +
    + +-
    +

    + ![Noctua NH-D15 chromax.Black](https://assets.tylernguyen.wiki/hardware/Noctua_NH-D15-chromax.Black.png){ width=150 } +

    Noctua NH-D15 chromax.Black
    +

    +
    + +-
    +

    + ![PNY RTX 4000](https://assets.tylernguyen.wiki/hardware/PNY_Quadro-RTX4000.png){ width=225 } +

    PNY RTX 4000
    +

    +
    + +-
    +

    + ![WD Elements](https://assets.tylernguyen.wiki/hardware/WD_Elements.png){ width=75 } +

    150TB of shucked WD Drives
    +

    +
    + +-
    +

    + ![be quiet! Dark Power 12 1000W](https://assets.tylernguyen.wiki/hardware/be-quiet!_Dark-Power-12.png){ width=150 } +

    be quiet! Dark Power 12 1000W
    +

    +
    + +-
    +

    + ![MTA18ASF4G72AZ-3G2R](https://assets.tylernguyen.wiki/hardware/Micron-DDR4-ECC-UDIMM.png){ width=200 } +

    Micron 32GB DDR4-3200 ECC UDIMM 2Rx8 CL22 MTA18ASF4G72AZ-3G2R
    +

    +
    + +-
    +

    + ![WD SN750](https://assets.tylernguyen.wiki/hardware/WD_Black-SN750.png){ width=150 } +

    2x 1TB WD SN750
    +

    +
    + +
    + +/// tip +[Disk Prices (US)](https://diskprices.com/) is convenient price checking/tracking tool for WD external drives. +/// + +## Mobile + +
    + +
    + +-
    +

    + ![iPhone 14 Pro](https://assets.tylernguyen.wiki/hardware/Apple_iPhone-14Pro.png){ width=123 } +

    iPhone 14 Pro
    +

    +
    + +-
    +

    + ![iPad Mini 6th Gen](https://assets.tylernguyen.wiki/hardware/Apple_iPad-mini6.png){ width=120 } +

    iPad Mini 6th Gen
    +

    +
    + +-
    +

    + ![Kobo Clara BW](https://assets.tylernguyen.wiki/hardware/Kobo_ClaraBW.png){ width=105 } +

    Kobo Clara BW
    +

    +
    + +
    + +## Gaming + +
    + +-
    +

    + ![Steam Deck OLED Limited Edition](https://assets.tylernguyen.wiki/hardware/Steam-Deck-OLED-LE-top.png){ width=360 } +

    Steam Deck OLED LE
    +

    +
    + +-
    +

    + ![Nintendo Switch OLED](https://assets.tylernguyen.wiki/hardware/Nintendo_Switch-OLED.png){ width=250 } +

    Nintendo Switch OLED
    +

    +
    + +-
    +

    + ![Miyoo Mini Plus](https://assets.tylernguyen.wiki/hardware/Miyoo_MiniPlus.png){ width=80 } +

    Miyoo Mini Plus[^1]
    +

    +
    + +
    + +## Miscellaneous + +
    + +-
    +

    + ![Yubikey 5C NFC](https://assets.tylernguyen.wiki/hardware/Yubikey_5C-NFC.png){ width=100 } +

    Yubikey 5C NFC [^2]
    +

    +
    + +-
    +

    + ![Apple AirTag](https://assets.tylernguyen.wiki/hardware/Apple_AirTag.png){ width=125 } +

    Apple AirTag
    +

    +
    + +
    + +[^1]: [OnionUI/OnionOS](https://github.com/OnionUI/Onion) - Replacement OS for Miyoo Mini and Mini+ +[^2]: [drduh/YubiKey-Guide](https://github.com/drduh/YubiKey-Guide): Guide to using YubiKey for GnuPG and SSH diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..fc094d7 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,16 @@ +--- +hide: toc +--- + +# Blog + +Welcome (back)! :wave: + +
    + +- :fontawesome-solid-square-rss:{ .rss } RSS 2.0: by date [__created__ :octicons-link-external-16:](https://tylernguyen.wiki/feed_rss_created.xml) / [__updated__ :octicons-link-external-16:](https://tylernguyen.wiki/feed_rss_updated.xml) +- :simple-json:{ .json } JSON Feed: by date [__created__ :octicons-link-external-16:](https://tylernguyen.wiki/feed_json_created.json) / [__updated__ :octicons-link-external-16:](https://tylernguyen.wiki/feed_json_updated.json) + +
    + +## Recent Posts diff --git a/docs/javascripts/feedback.js b/docs/javascripts/feedback.js new file mode 100644 index 0000000..d87f80b --- /dev/null +++ b/docs/javascripts/feedback.js @@ -0,0 +1,20 @@ +/* LINK https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-analytics/?h=helpf#custom-site-feedback-docsjavascriptsfeedbackjs */ + +var feedback = document.forms.feedback; +feedback.hidden = false; + +feedback.addEventListener("submit", function (ev) { + ev.preventDefault(); + + var page = document.location.pathname; + var data = ev.submitter.getAttribute("data-md-value"); + + console.log(page, data); + + feedback.firstElementChild.disabled = true; + + var note = feedback.querySelector( + ".md-feedback__note [data-md-value='" + data + "']" + ); + if (note) note.hidden = false; +}); diff --git a/docs/javascripts/tablesort.js b/docs/javascripts/tablesort.js new file mode 100644 index 0000000..98717ae --- /dev/null +++ b/docs/javascripts/tablesort.js @@ -0,0 +1,6 @@ +document$.subscribe(function () { + var tables = document.querySelectorAll("article table:not([class])") + tables.forEach(function (table) { + new Tablesort(table) + }) +}) diff --git a/docs/manga.md b/docs/manga.md new file mode 100644 index 0000000..06fcf9a --- /dev/null +++ b/docs/manga.md @@ -0,0 +1,21 @@ +--- +icon: material/sword +tags: + - Evergreen +--- + +# Manga + +/// featured +![Goodnight Punpun](https://assets.tylernguyen.wiki/covers/Goodnight-Punpun.png){ align=right width=125 } + +[:simple-anilist:{ .anilist } AniList](https://anilist.co/manga/34632/Oyasumi-Punpun){ .md-button } +[![Viz](https://assets.tylernguyen.wiki/logos/Viz.png){ .twemoji } Viz](https://www.viz.com/goodnight-punpun){ .md-button } +/// + +/// featured +![Vagabond](https://assets.tylernguyen.wiki/covers/Vagabond.jpg){ align=right width=125 } + +[:simple-anilist:{ .anilist } AniList](https://anilist.co/manga/30656/Vagabond){ .md-button } +[![Viz](https://assets.tylernguyen.wiki/logos/Viz.png){ .twemoji } Viz](https://www.viz.com/vagabond){ .md-button } +/// diff --git a/docs/movies.md b/docs/movies.md new file mode 100644 index 0000000..a7d702c --- /dev/null +++ b/docs/movies.md @@ -0,0 +1,39 @@ +--- +icon: material/movie-outline +tags: + - Evergreen +hide: + - toc +--- + +# Movies + +/// featured +
    + +- ![Enter the Dragon](https://image.tmdb.org/t/p/original/b9G01LQzVhxgxdFOgopYlShM4L5.jpg) + **Enter the Dragon** + [:simple-rottentomatoes:{ .rottentomatoes }](https://www.rottentomatoes.com/m/enter_the_dragon){ .card-link title="Rotten Tomatoes"} + [:simple-themoviedatabase:{ .tmdb }](https://www.themoviedb.org/movie/9461-enter-the-dragon){ .card-link title="TMDB"} + [![IMDb](https://assets.tylernguyen.wiki/logos/IMDb.png){ .twemoji .card-link title="IMDb" }](https://www.imdb.com/title/tt0070034/) + [![The Criterion Collection](https://assets.tylernguyen.wiki/logos/The-Criterion-Collection.svg){ .twemoji .card-link title="The Criterion Collection" }](https://www.criterion.com/films/30623-enter-the-dragon) + +- ![The Matrix](https://image.tmdb.org/t/p/original/ncEsesgOJDNrTUED89hYbA117wo.jpg) + **The Matrix** + [:simple-rottentomatoes:{ .rottentomatoes }](https://www.rottentomatoes.com/m/matrix){ .card-link title="Rotten Tomatoes"} + [:simple-themoviedatabase:{ .tmdb }](https://www.themoviedb.org/movie/603-the-matrix){ .card-link title="TMDB"} + [![IMDb](https://assets.tylernguyen.wiki/logos/IMDb.png){ .twemoji .card-link title="IMDb" }](https://www.imdb.com/title/tt0133093/) + +- ![Heat](https://image.tmdb.org/t/p/original/gndZ51GNkmGGGi9jT2eqbJuzyt8.jpg) + **Heat** + [:simple-rottentomatoes:{ .rottentomatoes }](https://www.rottentomatoes.com/m/heat_1995){ .card-link title="Rotten Tomatoes"} + [:simple-themoviedatabase:{ .tmdb }](https://www.themoviedb.org/movie/949-heat){ .card-link title="TMDB"} + [![IMDb](https://assets.tylernguyen.wiki/logos/IMDb.png){ .twemoji .card-link title="IMDb" }](https://www.imdb.com/title/tt0113277/) + +- ![1917](https://image.tmdb.org/t/p/original/zpWL0LEjiEcLxhtm8goyyMOylst.jpg) + **1917** + [:simple-rottentomatoes:{ .rottentomatoes }](https://www.rottentomatoes.com/m/1917_2019){ .card-link title="Rotten Tomatoes"} + [![IMDb](https://assets.tylernguyen.wiki/logos/IMDb.png){ .twemoji .card-link title="IMDb" }](https://www.imdb.com/title/tt8579674/) + +
    +/// diff --git a/docs/peripherals.md b/docs/peripherals.md new file mode 100644 index 0000000..58e45fd --- /dev/null +++ b/docs/peripherals.md @@ -0,0 +1,183 @@ +--- +icon: material/mouse-outline +tags: + - Evergreen +--- + +# Peripherals + +## Mouse + +
    + +-
    +

    + ![Logitech G Pro Superlight 2](https://assets.tylernguyen.wiki/peripherals/Logitech_GPro-Superlight2.png){ width=80 } +

    Logitech G Pro Superlight 2
    +

    +
    + +
    + +
    + +-
    +

    + ![Pulsar Supergrip](https://assets.tylernguyen.wiki/peripherals/Pulsar_Supergrip.png){ width=150 } +

    Pulsar Supergrip
    +

    +
    + +-
    +

    + ![EspTiger Ice DIY Dots V2](https://assets.tylernguyen.wiki/peripherals/EspTiger_ICE-DotsV2.png){ width=150 } +

    EspTiger Ice DIY Dots V2
    +

    +
    + +
    + +## Mousepad + +
    + +-
    +

    + ![Artisan Zero Mid](https://assets.tylernguyen.wiki/peripherals/Artisan_Zero.png){ width=300 } +

    Artisan Zero Mid Orange
    +

    +
    + +-
    +

    + ![Artisan Otsu Soft](https://assets.tylernguyen.wiki/peripherals/Artisan_Otsu.png){ width=300 } +

    Artisan Otsu Soft
    +

    +
    + +
    + +## Keyboard + +
    + +-
    +

    + ![Wooting 60HE+ Module](https://assets.tylernguyen.wiki/peripherals/Wooting_60HE-module.png){ width=375 } +

    Wooting 60HE+ Module
    +

    +
    + +
    + +
    + +-
    +

    + ![Wilba.Tech Salvation](https://assets.tylernguyen.wiki/peripherals/wilba.tech_Salvation.png){ width=425 } +

    Wilba.Tech Salvation Lightning Silver
    +

    +
    + +
    + +
    + +-
    +

    + ![NovelKeys GMK Kaiju Part Deux: Mechabase](https://assets.tylernguyen.wiki/peripherals/NovelKeys_Mecha-Godzilla.png){ width=75 } +

    NovelKeys GMK Kaiju Part Deux
    Mechabase Keycaps
    +

    +
    + +-
    +

    + ![GEONWORKS Raptor HE + Lekkar Stem](https://assets.tylernguyen.wiki/peripherals/GEONWORKS_Rapter-HE-Lekkar-stem.png){ width=100 } +

    GEONWORKS Raptor HE Housing
    Lekkar Stem
    +

    +
    + +
    + +## Audio + +
    + +-
    +

    + ![MOTU UltraLite Mk5](https://assets.tylernguyen.wiki/hardware/MOTU_Ultralite-Mk5.png){ width=300 } +

    MOTU UltraLite Mk5
    +

    +
    + +
    + +
    + +-
    +

    + ![Shure SM7dB](https://assets.tylernguyen.wiki/hardware/Shure_SM7dB.png){ width=200 } +

    Shure SM7dB
    +

    +
    + +-
    +

    + ![Sennheiser HD 490 PRO](https://assets.tylernguyen.wiki/peripherals/Sennheiser_HD490-PRO.png){ width=200 } +

    Sennheiser HD 490 PRO
    +

    +
    + +-
    +

    + ![Sennheiser IE600](https://assets.tylernguyen.wiki/peripherals/Sennheiser_IE600.png){ width=250 } +

    Sennheiser IE600
    +

    +
    + +-
    +

    + ![Sony WH-1000XM4](https://assets.tylernguyen.wiki/peripherals/Sony_WH-1000XM4.png){ width=150 } +

    Sony WH-1000XM4
    +

    +
    + +-
    +

    + ![Apple AirPods Pro 2](https://assets.tylernguyen.wiki/peripherals/Apple_AirPods-Pro2.png){ width=115 } +

    Apple AirPods Pro 2
    +

    +
    + +
    + +## Music + +### Neural DSP + +
    + +-
    +

    + ![Neural DSP Quad Cortex](https://assets.tylernguyen.wiki/hardware/NeuralDSP_Quad-Cortex.png){ width=300 } +

    Neural DSP Quad Cortex
    +

    +
    + +
    + +#### Plugins + +
    + +- ![Neural DSP Archetype: Gojira X](https://assets.tylernguyen.wiki/logos/NeuralDSP_Archetype-Gojira.png){ .twemoji } [Neural DSP Archetype: Gojira X](https://neuraldsp.com/plugins/archetype-gojira) +- ![Neural DSP Archetype: Plini X](https://assets.tylernguyen.wiki/logos/NeuralDSP_Archetype-Plini.png){ .twemoji } [Neural DSP Archetype: Plini X](https://neuraldsp.com/plugins/archetype-plini) + +
    + +
    + +- ![Neural DSP Archetype: Petrucci](https://assets.tylernguyen.wiki/logos/NeuralDSP_Archetype-Petrucci.png){ .twemoji } [Neural DSP Archetype: Petrucci](https://neuraldsp.com/plugins/archetype-petrucci) +- ![Neural DSP Archetype: TIm Henson](https://assets.tylernguyen.wiki/logos/NeuralDSP_Archetype-Tim-Henson.png){ .twemoji } [Neural DSP Archetype: Tim Henson](https://neuraldsp.com/plugins/archetype-tim-henson) + +
    diff --git a/docs/podcasts.md b/docs/podcasts.md new file mode 100644 index 0000000..b2480c4 --- /dev/null +++ b/docs/podcasts.md @@ -0,0 +1,85 @@ +--- +icon: material/microphone-outline +tags: + - Evergreen +--- + +# Podcasts + +/// featured +
    + +- ![This American Life](https://assets.tylernguyen.wiki/podcasts/This-American-Life.png){ align=right width=150 } + **This American Life** + [:octicons-link-external-16:](https://www.thisamericanlife.org/){ .card-link title="Homepage"} + [:fontawesome-solid-square-rss:{ .rss }](https://www.thisamericanlife.org/podcast/rss.xml){ .card-link title="RSS Feed"} + [:octicons-archive-16:](https://www.thisamericanlife.org/archive){ .card-link title=Archive} + + The official RSS feed only has its recent episodes. There is an [un-official archive RSS feed](https://github.com/dcadata/this-american-life-archive) with episodes 1 to current. + +- ![Planet Money](https://assets.tylernguyen.wiki/podcasts/NPR_Planet-Money.jpg){ align=right width=150 } + **Planet Money** + [:octicons-link-external-16:](https://www.npr.org/podcasts/510289/planet-money){ .card-link title="Homepage"} + [:fontawesome-solid-square-rss:{ .rss }](https://feeds.npr.org/510289/podcast.xml){ .card-link title="RSS Feed"} + +- ![Lore](https://assets.tylernguyen.wiki/podcasts/Lore.jpg){ align=right width=150 } + **Lore** + [:octicons-link-external-16:](https://www.lorepodcast.com/){ .card-link title="Homepage"} + [:fontawesome-solid-square-rss:{ .rss }](https://feeds.libsyn.com/65267/rss){ .card-link title="RSS Feed"} + +- ![Criminal](https://assets.tylernguyen.wiki/podcasts/Vox_Criminal.png){ align=right width=150 } + **Criminal** + [:octicons-link-external-16:](https://thisiscriminal.com/){ .card-link title="Homepage"} + [:fontawesome-solid-square-rss:{ .rss }](https://feeds.megaphone.fm/VMP7924981569){ .card-link title="RSS Feed"} + +
    +/// + +## Art, Design & Writing + +- 99% Invisible +- The Allusionist + +## Biography, Autobiography & Memoir + +- The Prince + +## Business + +- StartUp + +## Criminal, Investigation + +- Bear Brook +- Day X +- In the Dark +- Serial +- The Sound: Mystery of the Havana Syndrome +- Winds of Change + +## Culture, Society + +- S-Town +- The Improvement Association +- Nice White Parants + +## Fiction + +- Homecoming +- Limetown + +## History + +- Slow Burn + +## News, Politics + +## Science, Economics & Mathematics + +## Persona + +- The Erza Klein Show + +## Tech + +- The Rabbit Hole diff --git a/docs/posts/.meta.yml b/docs/posts/.meta.yml new file mode 100644 index 0000000..991b6ff --- /dev/null +++ b/docs/posts/.meta.yml @@ -0,0 +1,3 @@ +authors: + - tylernguyen +comments: true diff --git a/docs/posts/diagnostics/.meta.yml b/docs/posts/diagnostics/.meta.yml new file mode 100644 index 0000000..46b1f88 --- /dev/null +++ b/docs/posts/diagnostics/.meta.yml @@ -0,0 +1,6 @@ +authors: + - tylernguyen +comments: true +draft: true +tags: + - _diagnostics diff --git a/docs/posts/diagnostics/admonitions.md b/docs/posts/diagnostics/admonitions.md new file mode 100644 index 0000000..8a2b2cd --- /dev/null +++ b/docs/posts/diagnostics/admonitions.md @@ -0,0 +1,121 @@ +--- +icon: material/alert-outline +date: + created: 2024-01-01 +--- + +# Admonitions + + + +## Default Admonitions + +### Note + +/// note +In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit hole, and that means comfort. +/// + +### Abstract + +/// abstract +In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit hole, and that means comfort. +/// + +### Info + +/// info +In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit hole, and that means comfort. +/// + +### Question + +/// question +In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit hole, and that means comfort. +/// + +### Success + +/// success +In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit hole, and that means comfort. +/// + +### Tip + +/// tip +In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit hole, and that means comfort. +/// + +### Warning + +/// warning +In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit hole, and that means comfort. +/// + +### Bug + +/// bug +In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit hole, and that means comfort. +/// + +### Failure + +/// failure +In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit hole, and that means comfort. +/// + +### Danger + +/// danger +In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit hole, and that means comfort. +/// + +### Example + +/// example +In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit hole, and that means comfort. +/// + +### Quote + +/// quote +In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit hole, and that means comfort. +/// + +## Custom Admonitions + +### Featured + +/// featured +In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit hole, and that means comfort. +/// + +### Announce + +/// announce +In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit hole, and that means comfort. +/// + +### Screenshot + +/// screenshot +In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit hole, and that means comfort. +/// + +### Extension + +/// extension +In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit hole, and that means comfort. +/// + +### Code + +/// code +In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit hole, and that means comfort. +/// + +### Setting + +/// setting +In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit hole, and that means comfort. +/// diff --git a/docs/posts/diagnostics/code.md b/docs/posts/diagnostics/code.md new file mode 100644 index 0000000..ae6770c --- /dev/null +++ b/docs/posts/diagnostics/code.md @@ -0,0 +1,229 @@ +--- +icon: material/code-braces +date: + created: 2024-01-01 +--- + +# Code + + + +Demo of Pygments Syntax Highlighting in Material for MkDocs. Inherits + +## JavaScript :simple-javascript:{ .javascript } + +//// collapse-code + +``` js title="JS" +/** +* JSDoc example +* @param {Object} block - The block to be processed. +* @param {string} cls - The class name to be added to the block. +*/ +function $initHighlight(block, cls) { + try { + if (cls.search(/\bno\-highlight\b/) != -1) { + return process(block, true, 0x0F) + ` class="${cls}"`; + } + } catch (e) { + /* handle exception */ + } + for (var i = 0 / 2; i <= classes.length; i++) { + if (checkCondition(classes[i]) === undefined) + console.log('undefined'); + } + + return ( +
    + {block} +
    + ) +} +``` + +//// + +## CSS :simple-css3:{ .css3 } + +//// collapse-code + +``` css title="CSS" +@font-face { + font-family: Chunkfive; src: url('Chunkfive.otf'); +} + +body, .usertext { + color: #F0F0F0; background: #600; + font-family: Chunkfive, sans; + --heading-1: 30px/32px Helvetica, sans-serif; +} + +@import url(print.css); +@media print { + a[href^=http]::after { + content: attr(href) + } +} +``` + +//// + +## HTML :simple-html5:{ .html5 } + +//// collapse-code + +``` html title="HTML" + +Title + + + + + + +

    Title

    + + +``` + +//// + +## Python :simple-python:{ .python } + +//// collapse-code + +``` python title="Python" +import asyncio +import time +from datetime import datetime + + +async def custom_sleep(): + print(f"SLEEP {datetime.now()}\n") + await asyncio.sleep(1) + + +async def factorial(name, number): + f = 1 + for i in range(2, number + 1): + print(f"Task {name}: Compute factorial({i})") + await custom_sleep() + f *= i + print(f"Task {name}: factorial({number}) is {f}\n") + + +start = time.time() +loop = asyncio.get_event_loop() + +tasks = [ + asyncio.ensure_future(factorial("A", 3)), + asyncio.ensure_future(factorial("B", 4)), +] +loop.run_until_complete(asyncio.wait(tasks)) +loop.close() + +end = time.time() +print(f"Total time: {end - start}") +``` + +//// + +## YAML :simple-yaml:{ .yaml } + +//// collapse-code + +```yaml title="YAML" +variables: +- key: stringVariable + type: xlrelease.StringVariable + value: Hello world +- key: passwordVariable + type: xlrelease.PasswordStringVariable +- key: booleanVariable + type: xlrelease.BooleanVariable + value: true +- key: numberVariable + type: xlrelease.IntegerVariable + value: 42 +- key: listVariable + type: xlrelease.ListStringVariable + value: + - One + - Two + - Three +- key: mapVariable + type: xlrelease.MapStringStringVariable + value: + 1: I + 2: II + 3: III +- key: setVariable + type: xlrelease.SetStringVariable + value: + - Apples + - Pears + - Oranges +- key: listBoxVariable + type: xlrelease.StringVariable + valueProvider: + type: xlrelease.ListOfStringValueProviderConfiguration + values: + - One + - Two + - Three +``` + +//// + +## JSON :simple-json:{ .json } + +//// collapse-code + +```json title="JSON" +{ + "id": "uuid", + "id2": "id", + "id3": "id", + "title": "title", + "text": "paragraph", + "todo": "text", + "name": "first-name", + "city": "city", + "country": "country", + "last-name": "last-name", + "age": "age", + "phone": "phone", + "grade": "decimal", + "price": "price", + "card": "credit-card", + "aniversary": "date", + "color": "choice red blue yellow", + "friends": [ + {"repeat": 5}, + { + "id": "index", + "name": "first-name", + "last-name": "last-name", + "company": "company", + "email": "email" + } + ], + "check-ins":{ + "id": "id", + "name": "full-name", + "opened": "date", + "users": [ + {"repeat": 5}, + { + "id": "uuid", + "index": "index", + "married": "boolean" + } + ] + } +} +``` + +//// diff --git a/docs/posts/diagnostics/markdown.md b/docs/posts/diagnostics/markdown.md new file mode 100644 index 0000000..24c9856 --- /dev/null +++ b/docs/posts/diagnostics/markdown.md @@ -0,0 +1,43 @@ +--- +icon: material/language-markdown-outline +date: + created: 2024-01-01 +--- + +# Markdown + + + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sed velit dignissim sodales ut eu sem integer vitae. Pellentesque elit eget gravida cum sociis. Habitasse platea dictumst quisque sagittis. Ultrices gravida dictum fusce ut placerat orci. Nibh sit amet commodo nulla. Faucibus et molestie ac feugiat sed lectus. Ultrices dui sapien eget mi. Adipiscing diam donec adipiscing tristique risus nec feugiat in fermentum. Sagittis orci a scelerisque purus semper eget duis at. Senectus et netus et malesuada fames ac turpis egestas sed. + +# h1 Heading +## h2 Heading +### h3 Heading +#### h4 Heading +##### h5 Heading +###### h6 Heading + +Emphasis, aka italics, with *asterisks* or _underscores_. + +Strong emphasis, aka bold, with **asterisks** or __underscores__. + +Combined emphasis with **asterisks and _underscores_**. + +Strikethrough uses two tildes. ~~Scratch this.~~ + +**This is bold text** + +__This is bold text__ + +*This is italic text* + +_This is italic text_ + +~~Strikethrough~~ + + +| Left Aligned | Centered | Right Aligned | +| ------------- |:-------------:| -----:| +| col 3 is | right-aligned | $1600 | +| col 2 is | centered | $12 | +| zebra stripes | are neat | $1 | diff --git a/docs/posts/diagnostics/mermaid.md b/docs/posts/diagnostics/mermaid.md new file mode 100644 index 0000000..0718811 --- /dev/null +++ b/docs/posts/diagnostics/mermaid.md @@ -0,0 +1,604 @@ +--- +date: + created: 2024-01-01 +--- + +# Mermaid + + + +## Flowchart + +```` title="Flowchart" +``` mermaid +graph TB + sq[Square shape] --> ci((Circle shape)) + + subgraph A + od>Odd shape]-- Two line
    edge comment --> ro + di{Diamond with
    line break} -.-> ro(Rounded
    square
    shape) + di==>ro2(Rounded square shape) + end + + %% Notice that no text in shape are added here instead that is appended further down + e --> od3>Really long text with linebreak
    in an Odd shape] + + %% Comments after double percent signs + e((Inner / circle
    and some odd
    special characters)) --> f(,.?!+-*ز) + + cyr[Cyrillic]-->cyr2((Circle shape Начало)); + + classDef green fill:#9f6,stroke:#333,stroke-width:2px; + classDef orange fill:#f96,stroke:#333,stroke-width:4px; + class sq,e green + class di orange +``` +```` + +
    + +``` mermaid +graph TB + sq[Square shape] --> ci((Circle shape)) + + subgraph A + od>Odd shape]-- Two line
    edge comment --> ro + di{Diamond with
    line break} -.-> ro(Rounded
    square
    shape) + di==>ro2(Rounded square shape) + end + + %% Notice that no text in shape are added here instead that is appended further down + e --> od3>Really long text with linebreak
    in an Odd shape] + + %% Comments after double percent signs + e((Inner / circle
    and some odd
    special characters)) --> f(,.?!+-*ز) + + cyr[Cyrillic]-->cyr2((Circle shape Начало)); + + classDef green fill:#9f6,stroke:#333,stroke-width:2px; + classDef orange fill:#f96,stroke:#333,stroke-width:4px; + class sq,e green + class di orange +``` + +
    + +## Sequence + +```` title="Sequence" +``` mermaid +sequenceDiagram + participant web as Web Browser + participant blog as Blog Service + participant account as Account Service + participant mail as Mail Service + participant db as Storage + + Note over web,db: The user must be logged in to submit blog posts + web->>+account: Logs in using credentials + account->>db: Query stored accounts + db->>account: Respond with query result + + alt Credentials not found + account->>web: Invalid credentials + else Credentials found + account->>-web: Successfully logged in + + Note over web,db: When the user is authenticated, they can now submit new posts + web->>+blog: Submit new post + blog->>db: Store post data + + par Notifications + blog--)mail: Send mail to blog subscribers + blog--)db: Store in-site notifications + and Response + blog-->>-web: Successfully posted + end + end +``` +```` + +
    + +``` mermaid +sequenceDiagram + participant web as Web Browser + participant blog as Blog Service + participant account as Account Service + participant mail as Mail Service + participant db as Storage + + Note over web,db: The user must be logged in to submit blog posts + web->>+account: Logs in using credentials + account->>db: Query stored accounts + db->>account: Respond with query result + + alt Credentials not found + account->>web: Invalid credentials + else Credentials found + account->>-web: Successfully logged in + + Note over web,db: When the user is authenticated, they can now submit new posts + web->>+blog: Submit new post + blog->>db: Store post data + + par Notifications + blog--)mail: Send mail to blog subscribers + blog--)db: Store in-site notifications + and Response + blog-->>-web: Successfully posted + end + end +``` + +
    + +## Class + +```` title="Flowchart" +``` mermaid +--- +title: Animal example +--- +classDiagram + note "From Duck till Zebra" + Animal <|-- Duck + note for Duck "can fly\ncan swim\ncan dive\ncan help in debugging" + Animal <|-- Fish + Animal <|-- Zebra + Animal : +int age + Animal : +String gender + Animal: +isMammal() + Animal: +mate() + class Duck{ + +String beakColor + +swim() + +quack() + } + class Fish{ + -int sizeInFeet + -canEat() + } + class Zebra{ + +bool is_wild + +run() + } +``` +```` + +
    + +``` mermaid +--- +title: Animal example +--- +classDiagram + note "From Duck till Zebra" + Animal <|-- Duck + note for Duck "can fly\ncan swim\ncan dive\ncan help in debugging" + Animal <|-- Fish + Animal <|-- Zebra + Animal : +int age + Animal : +String gender + Animal: +isMammal() + Animal: +mate() + class Duck{ + +String beakColor + +swim() + +quack() + } + class Fish{ + -int sizeInFeet + -canEat() + } + class Zebra{ + +bool is_wild + +run() + } +``` + +
    + +## State + +```` title="State" +``` mermaid +stateDiagram-v2 + [*] --> Active + + state Active { + [*] --> NumLockOff + NumLockOff --> NumLockOn : EvNumLockPressed + NumLockOn --> NumLockOff : EvNumLockPressed + -- + [*] --> CapsLockOff + CapsLockOff --> CapsLockOn : EvCapsLockPressed + CapsLockOn --> CapsLockOff : EvCapsLockPressed + -- + [*] --> ScrollLockOff + ScrollLockOff --> ScrollLockOn : EvScrollLockPressed + ScrollLockOn --> ScrollLockOff : EvScrollLockPressed + } +``` +```` + +
    + +``` mermaid +stateDiagram-v2 + [*] --> Active + + state Active { + [*] --> NumLockOff + NumLockOff --> NumLockOn : EvNumLockPressed + NumLockOn --> NumLockOff : EvNumLockPressed + -- + [*] --> CapsLockOff + CapsLockOff --> CapsLockOn : EvCapsLockPressed + CapsLockOn --> CapsLockOff : EvCapsLockPressed + -- + [*] --> ScrollLockOff + ScrollLockOff --> ScrollLockOn : EvScrollLockPressed + ScrollLockOn --> ScrollLockOff : EvScrollLockPressed + } +``` + +
    + +## Entity Relationship + +````markdown +``` mermaid +erDiagram + CAR ||--o{ NAMED-DRIVER : allows + CAR { + string registrationNumber + string make + string model + } + PERSON ||--o{ NAMED-DRIVER : is + PERSON { + string firstName + string lastName + int age + } +``` +```` + +
    + +``` mermaid +erDiagram + CAR ||--o{ NAMED-DRIVER : allows + CAR { + string registrationNumber + string make + string model + } + PERSON ||--o{ NAMED-DRIVER : is + PERSON { + string firstName + string lastName + int age + } +``` + +
    + +## User Journey + +````markdown +``` mermaid +journey + title My working day + section Go to work + Make tea: 5: Me + Go upstairs: 3: Me + Do work: 1: Me, Cat + section Go home + Go downstairs: 5: Me + Sit down: 5: Me +``` +```` + +
    + +``` mermaid +journey + title My working day + section Go to work + Make tea: 5: Me + Go upstairs: 3: Me + Do work: 1: Me, Cat + section Go home + Go downstairs: 5: Me + Sit down: 5: Me +``` + +
    + +## Gantt + +````markdown +``` mermaid +gantt + title A Gantt Diagram + dateFormat YYYY-MM-DD + section Section + A task :a1, 2014-01-01, 30d + Another task :after a1, 20d + section Another + Task in Another :2014-01-12, 12d + another task :24d +``` +```` + +
    + +``` mermaid +gantt + title A Gantt Diagram + dateFormat YYYY-MM-DD + section Section + A task :a1, 2014-01-01, 30d + Another task :after a1, 20d + section Another + Task in Another :2014-01-12, 12d + another task :24d +``` + +
    + +/// bug +"Gantt charts usually are too big to render properly in a page. If the element is big enough to hold it, and the chart is large, they render too small to see. If the element is not wide enough, the chart can sometimes render squished and hard to read." [^1] +/// + +[^1]: [PyMdown Extensions Documentation: Advanced Mermaid Notes](https://facelessuser.github.io/pymdown-extensions/extras/mermaid/#practical-diagrams-gantt) + +## Pie Chart + +```` title="Pie Chart" +``` mermaid +pie showData +title Key elements in Product X +"Calcium" : 42.96 +"Potassium" : 50.05 +"Magnesium" : 10.01 +"Iron" : 5 +``` +```` + +
    + +``` mermaid +pie showData + title Key elements in Product X + "Calcium" : 42.96 + "Potassium" : 50.05 + "Magnesium" : 10.01 + "Iron" : 5 +``` + +
    + +## Quadrant Chart + +``` mermaid +quadrantChart + title Reach and engagement of campaigns + x-axis Low Reach --> High Reach + y-axis Low Engagement --> High Engagement + quadrant-1 We should expand + quadrant-2 Need to promote + quadrant-3 Re-evaluate + quadrant-4 May be improved + Campaign A: [0.3, 0.6] + Campaign B: [0.45, 0.23] + Campaign C: [0.57, 0.69] + Campaign D: [0.78, 0.34] + Campaign E: [0.40, 0.34] + Campaign F: [0.35, 0.78] +``` + +## Git + +```` title="Git" +``` mermaid +gitGraph + commit + branch hotfix + checkout hotfix + commit + branch develop + checkout develop + commit id:"ash" tag:"abc" + branch featureB + checkout featureB + commit type:HIGHLIGHT + checkout main + checkout hotfix + commit type:NORMAL + checkout develop + commit type:REVERSE + checkout featureB + commit + checkout main + merge hotfix + checkout featureB + commit + checkout develop + branch featureA + commit + checkout develop + merge hotfix + checkout featureA + commit + checkout featureB + commit + checkout develop + merge featureA + branch release + checkout release + commit + checkout main + commit + checkout release + merge main + checkout develop + merge release +``` +```` + +
    + +``` mermaid +gitGraph + commit + branch hotfix + checkout hotfix + commit + branch develop + checkout develop + commit id:"ash" tag:"abc" + branch featureB + checkout featureB + commit type:HIGHLIGHT + checkout main + checkout hotfix + commit type:NORMAL + checkout develop + commit type:REVERSE + checkout featureB + commit + checkout main + merge hotfix + checkout featureB + commit + checkout develop + branch featureA + commit + checkout develop + merge hotfix + checkout featureA + commit + checkout featureB + commit + checkout develop + merge featureA + branch release + checkout release + commit + checkout main + commit + checkout release + merge main + checkout develop + merge release +``` + +
    + +## C4 + +``` mermaid + C4Context + title System Context diagram for Internet Banking System + Enterprise_Boundary(b0, "BankBoundary0") { + Person(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.") + Person(customerB, "Banking Customer B") + Person_Ext(customerC, "Banking Customer C", "desc") + + Person(customerD, "Banking Customer D", "A customer of the bank,
    with personal bank accounts.") + + System(SystemAA, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.") + + Enterprise_Boundary(b1, "BankBoundary") { + + SystemDb_Ext(SystemE, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.") + + System_Boundary(b2, "BankBoundary2") { + System(SystemA, "Banking System A") + System(SystemB, "Banking System B", "A system of the bank, with personal bank accounts. next line.") + } + + System_Ext(SystemC, "E-mail system", "The internal Microsoft Exchange e-mail system.") + SystemDb(SystemD, "Banking System D Database", "A system of the bank, with personal bank accounts.") + + Boundary(b3, "BankBoundary3", "boundary") { + SystemQueue(SystemF, "Banking System F Queue", "A system of the bank.") + SystemQueue_Ext(SystemG, "Banking System G Queue", "A system of the bank, with personal bank accounts.") + } + } + } + + BiRel(customerA, SystemAA, "Uses") + BiRel(SystemAA, SystemE, "Uses") + Rel(SystemAA, SystemC, "Sends e-mails", "SMTP") + Rel(SystemC, customerA, "Sends e-mails to") + + UpdateElementStyle(customerA, $fontColor="red", $bgColor="grey", $borderColor="red") + UpdateRelStyle(customerA, SystemAA, $textColor="blue", $lineColor="blue", $offsetX="5") + UpdateRelStyle(SystemAA, SystemE, $textColor="blue", $lineColor="blue", $offsetY="-10") + UpdateRelStyle(SystemAA, SystemC, $textColor="blue", $lineColor="blue", $offsetY="-40", $offsetX="-50") + UpdateRelStyle(SystemC, customerA, $textColor="red", $lineColor="red", $offsetX="-50", $offsetY="20") + + UpdateLayoutConfig($c4ShapeInRow="3", $c4BoundaryInRow="1") +``` + +## Mindmaps + +``` mermaid +mindmap + root((mindmap)) + Origins + Long history + ::icon(fa fa-book) + Popularisation + British popular psychology author Tony Buzan + Research + On effectiveness
    and features + On Automatic creation + Uses + Creative techniques + Strategic planning + Argument mapping + Tools + Pen and paper + Mermaid +``` + +## Timeline + +``` mermaid +timeline + title Timeline of Industrial Revolution + section 17th-20th century + Industry 1.0 : Machinery, Water power, Steam
    power + Industry 2.0 : Electricity, Internal combustion engine, Mass production + Industry 3.0 : Electronics, Computers, Automation + section 21st century + Industry 4.0 : Internet, Robotics, Internet of Things + Industry 5.0 : Artificial intelligence, Big data,3D printing +``` + +## ZenUML + +## Sankey + +``` mermaid +sankey-beta + +Pumped heat,"Heating and cooling, ""homes""",193.026 +Pumped heat,"Heating and cooling, ""commercial""",70.672 +``` + +## XYChart + +``` mermaid +xychart-beta + title "Sales Revenue" + x-axis [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec] + y-axis "Revenue (in $)" 4000 --> 11000 + bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000] + line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000] +``` diff --git a/docs/posts/hello-world.md b/docs/posts/hello-world.md new file mode 100644 index 0000000..68fb282 --- /dev/null +++ b/docs/posts/hello-world.md @@ -0,0 +1,96 @@ +--- +pin: true +date: + created: 2024-05-01 + updated: 2024-05-22 +categories: + - Update +slug: hello-world +--- + +# Hello, World! Building Dot Wiki + + + +/// announce | It's Alive! + +Keeping a knowledge base and maintaining a blog has been something I've always wanted to do. So after an extended period of on and off development, I'm now proud to say that my personal wiki is now public. + +/// + +## Markdown :octicons-markdown-16: + +[Markdown](https://en.wikipedia.org/wiki/Markdown) is the de-facto markup language. The standard is open, simple, and widely supported. Files written in Markdown are human-readable without a WYSIWYG editor. So I see no particular reasons to use anything else. + +Markdown, however, is conservative in its syntax, features, and specifications. Implementations(flavors) of Markdown would take advantage its barebone-design to add components, integrations, and features. + +Having used several different interations in Markdown, I still don't have a strong preference for any particular implementation. So I paid no mind to the choices of Markdown flavors, and would be okay with whichever is defaulted to by the website framework. + +## Static Site Generator + +Creating a website with React, Javascript, MDX, and Tailwind CSS all sounded like a very fun project to me in the beginning. But maintaining said infrastructure seems rather involved and time-consuming for a personal wiki. I wanted a place to organize my brain, and the last thing I want to deal with is JavaScript dependencies breaking. + +
    + +- :simple-materialformkdocs:{ .materialformkdocs } [Material for MkDocs](https://squidfunk.github.io/mkdocs-material/) [_Insiders_](https://squidfunk.github.io/mkdocs-material/insiders/) +[:fontawesome-solid-money-bill:](https://github.com/sponsors/squidfunk){ .card-link title="Pricing" } +[:fontawesome-regular-file-code:](https://github.com/squidfunk/mkdocs-material){ .card-link title="Source Code" } +[:octicons-law-16:](https://github.com/squidfunk/mkdocs-material/blob/master/LICENSE){ .card-link title=License } + +
    + +Enters Material for MkDocs, the project started as a theme for the [MkDocs](https://www.mkdocs.org/) framework, but grew popular and became a framework of its own. It uses Python Markdown, which is more limited in its extensibility than something like [MDX](https://mdxjs.com/) with JavaScript. + +Since I have no specific needs for MDX and other JavaScript elements anyway, I'm content with starting on Material for MkDocs. The extensions and customizations that it does have are more than enough for my intended purpose. And for starting out, the framework is robust and matured enough that I can focus more on writing and less time on building the website. + +
    + +- :simple-docker:{ .docker } [Docker Desktop](https://www.docker.com/products/docker-desktop/) +[:fontawesome-solid-money-bill:](https://www.docker.com/pricing/){ .card-link title="Pricing" } +- ![OrbStack](https://assets.tylernguyen.wiki/logos/OrbStack.png){ .twemoji } [OrbStack](https://orbstack.dev/) +[:fontawesome-solid-money-bill:](https://orbstack.dev/pricing){ .card-link title="Pricing" } + +
    + +The site is built locally for previewing with a Docker image of Material for MkDocs Insiders. + +## Cloudflare Stack :simple-cloudflare:{ .cloudflare } + +
    + +- :simple-cloudflare:{ .cloudflare } [Cloudflare Domain Registar](https://www.cloudflare.com/products/registrar/) +- :simple-cloudflare:{ .cloudflare } [Cloudflare DNS](https://www.cloudflare.com/) + +
    + +
    + +- :simple-cloudflare:{ .cloudflare } [Cloudflare R2](https://www.cloudflare.com/products/r2/) +- :simple-cloudflarepages:{ .cloudflarepages } [Cloudflare Pages](https://pages.cloudflare.com/) + +
    + +As a passion project, I wanted to limit costs as much as possible. Cloudflare Domain Registar offers [at-cost pricing](https://www.cloudflare.com/products/registrar/), and the free tiers on R2 and Pages are more than enough for starting out. + +Importantly, since Cloudflare basically powers the entire internet nowadays, I don't think there is a more reliable party for hosting. + +## Analytics + +I want to use analytics as a form of automated feedbacks, __NOT__ as a tool to create better advertisements and convert higher ROI. + +Google Analytics was designed for the latter purpose, not the mention being a privacy-invasive product. It's something I block in every browser, ad-block extension, and DNS-blocker. So the thought of using it myself feels hypocritical. + +I briefly considered [Plausible Analytics](https://plausible.io/), but the analytics data it gives is not something that I find actionable nor particularly useful. The same issue arises with Cloudflare's built in web analytics. + +
    + +-
    +

    + ![PostHog](https://assets.tylernguyen.wiki/logos/PostHog-light.svg#only-light){ width=350 } + ![PostHog](https://assets.tylernguyen.wiki/logos/PostHog-dark.svg#only-dark){ width=350 } +

    +
    + +
    + +Enters PostHog, which seems perfect for what I want analytics to do. Aside from the standard [web analyitcs](https://posthog.com/web-analytics) tookit, PostHog's [session replay](https://posthog.com/session-replay) seems like the perfect non-interactive feedback that I was looking for. diff --git a/docs/projects/index.md b/docs/projects/index.md new file mode 100644 index 0000000..c7ce5dd --- /dev/null +++ b/docs/projects/index.md @@ -0,0 +1,25 @@ +# Showcase + +## X1C6 Hackintosh + +
    + +- ![Thinkpad X1C6](https://assets.tylernguyen.wiki/hardware/Lenovo_ThinkPad-X1C6.png){ align=right width=250 } + + macOS on the Lenovo X1 Carbon 6th Generation. + + ![OpenCore](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/OpenCore.png){ .twemoji } Powered by OpenCore + + ![UEFI](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/UEFI.png){ .twemoji } ACPI-level patches + + ![GitHub Stars](https://img.shields.io/github/stars/tylernguyen/x1c6-hackintosh?style=for-the-badge&logo=GitHub&logoColor=073642&labelColor=eee8d5&color=859900#only-light) + ![GitHub Forks](https://img.shields.io/github/forks/tylernguyen/x1c6-hackintosh?style=for-the-badge&logo=GitHub&logoColor=073642&labelColor=eee8d5&color=859900#only-light) + ![GitHub Stars](https://img.shields.io/github/stars/tylernguyen/x1c6-hackintosh?style=for-the-badge&logo=GitHub&logoColor=839496&labelColor=073642&color=2aa198#only-dark) + ![GitHub Forks](https://img.shields.io/github/forks/tylernguyen/x1c6-hackintosh?style=for-the-badge&logo=GitHub&logoColor=839496&labelColor=073642&color=2aa198#only-dark) + + [:simple-github:{ .github } Repository](https://github.com/tylernguyen/x1c6-hackintosh){ .md-button } + [:octicons-markdown-16: README](x1c6-hackintosh/README.md){ .md-button } + [:material-data-matrix: Datasheet](x1c6-hackintosh/datasheet.md){ .md-button } + [:octicons-law-16:](https://github.com/tylernguyen/x1c6-hackintosh/blob/main/LICENSE){ .card-link title=License } + +
    diff --git a/docs/projects/x1c6-hackintosh/ACPI-patches.md b/docs/projects/x1c6-hackintosh/ACPI-patches.md new file mode 100644 index 0000000..daeb741 --- /dev/null +++ b/docs/projects/x1c6-hackintosh/ACPI-patches.md @@ -0,0 +1,139 @@ +# ACPI Patches + +## ACPI Patches + +1. Download and install [MaciASL](https://github.com/acidanthera/MaciASL/releases) if you do not have it already. +2. Dump your original ACPI tables. See [Dortania/ ACPI Dump](https://dortania.github.io/Getting-Started-With-ACPI/Manual/dump.html). +3. In Terminal, disassemble the copied ACPI tables with "iasl -dl DSDT.aml". For our purpose, the only file that really matters is DSDT.dsl + +- Your DSDT file will be used as a reference table in determining that needs to be patched and what patches need to be added. + +4. Source SSDT\*.dsl patch files are located in `patches` folder. +5. Refer to my `EFI-OpenCore` folder to see which patches are currently being used by me. +6. If your x1c6's model is 20KH*, most of my compiled hotpatches and can likely be copied straight to your setup. However, some patches may require certain directories or variables to be changed depending on your hardware (examine your own disassemebled DSDT). For these, edit the .dsl patch files. Also, note that some SSDT patches also require accompanying OpenCore/ Clover ACPI patches to work. + +A good way to see if you need to edit and compile your own SSDT patches is to compare your DSDT.dsl with mine of the same BIOS version. You can find my disassemebled DSDT file in `ACPI/Disassembled ACPI/BIOS-v*`. + +Should your source DSDT be similar enough (in regards to certain items in these ACPI patches)to mine. Congrats! You can simply try my compiled patches. Should it differ however, please carefully examine these notes and create your own SSDT patches. + +7. Once you have the compiled ACPI patches, place them in `EFI/OC/ACPI/` and make sure to create matching entries within OpenCore's `config.plist`'s `ACPI/Add/` section. + +/// note +The following patches are arranged alphabetically for easy cross-referencing. For the loading order, please refer to the main EFI's `config.plist`. +/// + +## SSDT-AC + +**Load AppleACPIACAdapter** + +## SSDT-ALS0 + +**Fake Ambient Light Sensor** +Starting with Catalina, an ambient light sensor device is required for brightness preservation. This patch fakes an ambient light sensor device `ALS0` since the x1c6 does not have one. +Why?: `ACPI0008` missing in DSDT. + +## SSDT-Battery + +**Enables Battery Status in macOS** +- Single battery system: only `BAT0` in ACPI, no `BAT1`. + +## SSDT-DMAC + +**Patch Memory Controller** +- Why?: `PNP0200` is missing in DSDT. + +## SSDT-Darwin + +**Detects macOS to enable other patches** + +## SSDT-EC + +**Alow Reads/Write and Provide an Interface with Embedded Controller via YogaSMC** +- Two parts: + - Allow access to EC + - Sample SSDT from YogaSMC + +## SSDT-HWAC + +**Fix axxess to 16byte-EC-field HWAC** + +## SSDT-INIT + +**Initialize System Variables** +- Disables: + - HPET + - DPTF +- Enables: + - DYTC + +## SSDT-Keyboard + +**Remap PS2 Keys, EC Keys are handled by `BrightnessKeys.kext`** +- Remap 1: PrtSc to F13 +- Remap 2: Fn + K to Deadkey +- Remap 3: Fn + P to Deadkey +- For Fn 1-12 functions, check the following option within `Preferences/Keyboard`: + ![Fn keys](https://github.com/tylernguyen/x1c6-hackintosh/blob/main/docs/assets/img/macOS%20Settings/fnkeys.png) + +## SSDT-PM + +**Enables Native Intel Power Managements** +- Why?: `Processor` search in DSDT, rename `PR` to other variables as needed. + +``` + Scope (\_PR) + { + Processor (PR00, 0x01, 0x00001810, 0x06){} + Processor (PR01, 0x02, 0x00001810, 0x06){} + Processor (PR02, 0x03, 0x00001810, 0x06){} + Processor (PR03, 0x04, 0x00001810, 0x06){} + Processor (PR04, 0x05, 0x00001810, 0x06){} + Processor (PR05, 0x06, 0x00001810, 0x06){} + Processor (PR06, 0x07, 0x00001810, 0x06){} + Processor (PR07, 0x08, 0x00001810, 0x06){} + Processor (PR08, 0x09, 0x00001810, 0x06){} + Processor (PR09, 0x0A, 0x00001810, 0x06){} + Processor (PR10, 0x0B, 0x00001810, 0x06){} + Processor (PR11, 0x0C, 0x00001810, 0x06){} + Processor (PR12, 0x0D, 0x00001810, 0x06){} + Processor (PR13, 0x0E, 0x00001810, 0x06){} + Processor (PR14, 0x0F, 0x00001810, 0x06){} + Processor (PR15, 0x10, 0x00001810, 0x06){} + } +``` + +## SSDT-PMCR + +- Why?: `PMCR`,`APP9876` missing in DSDT. + +## SSDT-PNLF + +**Enables Brightness Management in macOS** +- iGPU is `PCI0.GFX0` +- Why?: `Skylake/ KabyLake/ KabyLake-R` CPU. +- Used in conjunction with `WhateverGreen.kext`. + +## SSDT-PWRB + +- Why?: `PNP0C0C` missing in DSDT. +- Patch power button. + +## SSDT-Sleep + +**Patch macOS Sleep, S3, and S0 under Windows Dual Boot** +- Comprehensive sleep/wake patch. +- Fixes restart on shutdown. +**Needs `OpenCore Patches/ Sleep.plist`** + +## SSDT-TB-DSB0 to SSDT-TB-DSB6 + +- Patch USB 3.1 +- Patch Thunderbolt 3 Hotplug +- Patch Thunderbolt 3 Power Management +- Patch Thunderbolt 3 native interfacing with macOS's System Report + +## SSDT-XHC1 - USB 2.0/3.0 + +**Needs `OpenCore Patches/ XHC1.plist`** +- Map USB 2.0/3.0 +- Patch USB Power Properties diff --git a/docs/projects/x1c6-hackintosh/ALC285.md b/docs/projects/x1c6-hackintosh/ALC285.md new file mode 100644 index 0000000..f6659b3 --- /dev/null +++ b/docs/projects/x1c6-hackintosh/ALC285.md @@ -0,0 +1,292 @@ +# ALC285 Dump + +
    + ![ALC285 Pinout on X1C6](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/ALC285-Pinout.png){ width=800 } +
    ALC285 Pinout on X1C6
    +
    + +``` +Codec: Realtek ALC285 +Address: 0 +AFG Function Id: 0x1 (unsol 1) +Vendor Id: 0x10ec0285 +Subsystem Id: 0x17aa225c +Revision Id: 0x100002 +No Modem Function Group found +Default PCM: + rates [0x560]: 44100 48000 96000 192000 + bits [0xe]: 16 20 24 + formats [0x1]: PCM +Default Amp-In caps: N/A +Default Amp-Out caps: N/A +State of AFG node 0x01: + Power states: D0 D1 D2 D3 D3cold CLKSTOP EPSS + Power: setting=D0, actual=D0 +GPIO: io=3, o=0, i=0, unsolicited=1, wake=0 + IO[0]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0 + IO[1]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0 + IO[2]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0 +Node 0x02 [Audio Output] wcaps 0x41d: Stereo Amp-Out + Control: name="Line Out Playback Volume", index=0, device=0 + ControlAmp: chs=3, dir=Out, idx=0, ofs=0 + Device: name="ALC285 Analog", type="Audio", device=0 + Amp-Out caps: ofs=0x57, nsteps=0x57, stepsize=0x02, mute=0 + Amp-Out vals: [0x3c 0x3c] + Converter: stream=0, channel=0 + PCM: + rates [0x40]: 48000 + bits [0xe]: 16 20 24 + formats [0x1]: PCM + Power states: D0 D1 D2 D3 EPSS + Power: setting=D0, actual=D0 +Node 0x03 [Audio Output] wcaps 0x41d: Stereo Amp-Out + Amp-Out caps: ofs=0x57, nsteps=0x57, stepsize=0x02, mute=0 + Amp-Out vals: [0x57 0x57] + Converter: stream=0, channel=0 + PCM: + rates [0x40]: 48000 + bits [0xe]: 16 20 24 + formats [0x1]: PCM + Power states: D0 D1 D2 D3 EPSS + Power: setting=D0, actual=D0 +Node 0x04 [Vendor Defined Widget] wcaps 0xf00000: Mono +Node 0x05 [Vendor Defined Widget] wcaps 0xf00000: Mono +Node 0x06 [Audio Output] wcaps 0x411: Stereo + Converter: stream=0, channel=0 + PCM: + rates [0x40]: 48000 + bits [0xe]: 16 20 24 + formats [0x1]: PCM + Power states: D0 D1 D2 D3 EPSS + Power: setting=D0, actual=D0 +Node 0x07 [Audio Input] wcaps 0x10051b: Stereo Amp-In + Amp-In caps: ofs=0x17, nsteps=0x3f, stepsize=0x02, mute=1 + Amp-In vals: [0x97 0x97] + Converter: stream=0, channel=0 + SDI-Select: 0 + PCM: + rates [0x40]: 48000 + bits [0xe]: 16 20 24 + formats [0x1]: PCM + Power states: D0 D1 D2 D3 EPSS + Power: setting=D0, actual=D0 + Connection: 1 + 0x24 +Node 0x08 [Audio Input] wcaps 0x10051b: Stereo Amp-In + Control: name="Capture Volume", index=0, device=0 + ControlAmp: chs=3, dir=In, idx=0, ofs=0 + Control: name="Capture Switch", index=0, device=0 + ControlAmp: chs=3, dir=In, idx=0, ofs=0 + Device: name="ALC285 Analog", type="Audio", device=0 + Amp-In caps: ofs=0x17, nsteps=0x3f, stepsize=0x02, mute=1 + Amp-In vals: [0x27 0x27] + Converter: stream=0, channel=0 + SDI-Select: 0 + PCM: + rates [0x560]: 44100 48000 96000 192000 + bits [0xe]: 16 20 24 + formats [0x1]: PCM + Power states: D0 D1 D2 D3 EPSS + Power: setting=D0, actual=D0 + Connection: 1 + 0x23 +Node 0x09 [Audio Input] wcaps 0x10051b: Stereo Amp-In + Amp-In caps: ofs=0x17, nsteps=0x3f, stepsize=0x02, mute=1 + Amp-In vals: [0x97 0x97] + Converter: stream=0, channel=0 + SDI-Select: 0 + PCM: + rates [0x560]: 44100 48000 96000 192000 + bits [0xe]: 16 20 24 + formats [0x1]: PCM + Power states: D0 D1 D2 D3 EPSS + Power: setting=D0, actual=D0 + Connection: 1 + 0x22 +Node 0x0a [Vendor Defined Widget] wcaps 0xf00000: Mono +Node 0x0b [Vendor Defined Widget] wcaps 0xf00000: Mono +Node 0x0c [Vendor Defined Widget] wcaps 0xf00000: Mono +Node 0x0d [Vendor Defined Widget] wcaps 0xf00000: Mono +Node 0x0e [Vendor Defined Widget] wcaps 0xf00000: Mono +Node 0x0f [Vendor Defined Widget] wcaps 0xf00000: Mono +Node 0x10 [Vendor Defined Widget] wcaps 0xf00000: Mono +Node 0x11 [Vendor Defined Widget] wcaps 0xf00000: Mono +Node 0x12 [Pin Complex] wcaps 0x40040b: Stereo Amp-In + Control: name="Internal Mic Boost Volume", index=0, device=0 + ControlAmp: chs=3, dir=In, idx=0, ofs=0 + Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0 + Amp-In vals: [0x00 0x00] + Pincap 0x00000020: IN + Pin Default 0x90a60130: [Fixed] Mic at Int N/A + Conn = Digital, Color = Unknown + DefAssociation = 0x3, Sequence = 0x0 + Misc = NO_PRESENCE + Pin-ctls: 0x20: IN + Power states: D0 D1 D2 D3 EPSS + Power: setting=D0, actual=D0 +Node 0x13 [Pin Complex] wcaps 0x40040b: Stereo Amp-In + Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0 + Amp-In vals: [0x00 0x00] + Pincap 0x00000020: IN + Pin Default 0x40000000: [N/A] Line Out at Ext N/A + Conn = Unknown, Color = Unknown + DefAssociation = 0x0, Sequence = 0x0 + Pin-ctls: 0x00: + Power states: D0 D1 D2 D3 EPSS + Power: setting=D0, actual=D0 +Node 0x14 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out + Control: name="Speaker Playback Switch", index=0, device=0 + ControlAmp: chs=3, dir=Out, idx=0, ofs=0 + Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1 + Amp-Out vals: [0x00 0x00] + Pincap 0x00010014: OUT EAPD Detect + EAPD 0x2: EAPD + Pin Default 0x90170110: [Fixed] Speaker at Int N/A + Conn = Analog, Color = Unknown + DefAssociation = 0x1, Sequence = 0x0 + Misc = NO_PRESENCE + Pin-ctls: 0x40: OUT + Unsolicited: tag=00, enabled=0 + Power states: D0 D1 D2 D3 EPSS + Power: setting=D0, actual=D0 + Connection: 1 + 0x02 +Node 0x15 [Vendor Defined Widget] wcaps 0xf00000: Mono +Node 0x16 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out + Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1 + Amp-Out vals: [0x80 0x80] + Pincap 0x0000001c: OUT HP Detect + Pin Default 0x411111f0: [N/A] Speaker at Ext Rear + Conn = 1/8, Color = Black + DefAssociation = 0xf, Sequence = 0x0 + Misc = NO_PRESENCE + Pin-ctls: 0x00: + Unsolicited: tag=00, enabled=0 + Power states: D0 D1 D2 D3 EPSS + Power: setting=D0, actual=D0 + Connection: 2 + 0x02* 0x03 +Node 0x17 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out + Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1 + Amp-Out vals: [0x80 0x80] + Pincap 0x0000001c: OUT HP Detect + Pin Default 0x411111f0: [N/A] Speaker at Ext Rear + Conn = 1/8, Color = Black + DefAssociation = 0xf, Sequence = 0x0 + Misc = NO_PRESENCE + Pin-ctls: 0x00: + Unsolicited: tag=00, enabled=0 + Power states: D0 D1 D2 D3 EPSS + Power: setting=D0, actual=D0 + Connection: 3 + 0x02* 0x03 0x06 +Node 0x18 [Pin Complex] wcaps 0x40048b: Stereo Amp-In + Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0 + Amp-In vals: [0x00 0x00] + Pincap 0x00000024: IN Detect + Pin Default 0x411111f0: [N/A] Speaker at Ext Rear + Conn = 1/8, Color = Black + DefAssociation = 0xf, Sequence = 0x0 + Misc = NO_PRESENCE + Pin-ctls: 0x00: + Unsolicited: tag=00, enabled=0 + Power states: D0 D1 D2 D3 EPSS + Power: setting=D0, actual=D0 +Node 0x19 [Pin Complex] wcaps 0x40048b: Stereo Amp-In + Control: name="Mic Boost Volume", index=0, device=0 + ControlAmp: chs=3, dir=In, idx=0, ofs=0 + Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0 + Amp-In vals: [0x00 0x00] + Pincap 0x00003724: IN Detect + Vref caps: HIZ 50 GRD 80 100 + Pin Default 0x04a11040: [Jack] Mic at Ext Right + Conn = 1/8, Color = Black + DefAssociation = 0x4, Sequence = 0x0 + Pin-ctls: 0x24: IN VREF_80 + Unsolicited: tag=02, enabled=1 + Power states: D0 D1 D2 D3 EPSS + Power: setting=D0, actual=D0 +Node 0x1a [Pin Complex] wcaps 0x40048b: Stereo Amp-In + Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0 + Amp-In vals: [0x00 0x00] + Pincap 0x00003724: IN Detect + Vref caps: HIZ 50 GRD 80 100 + Pin Default 0x411111f0: [N/A] Speaker at Ext Rear + Conn = 1/8, Color = Black + DefAssociation = 0xf, Sequence = 0x0 + Misc = NO_PRESENCE + Pin-ctls: 0x00: VREF_HIZ + Unsolicited: tag=00, enabled=0 + Power states: D0 D1 D2 D3 EPSS + Power: setting=D0, actual=D0 +Node 0x1b [Pin Complex] wcaps 0x40058f: Stereo Amp-In Amp-Out + Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0 + Amp-In vals: [0x00 0x00] + Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1 + Amp-Out vals: [0x80 0x80] + Pincap 0x00013734: IN OUT EAPD Detect + Vref caps: HIZ 50 GRD 80 100 + EAPD 0x2: EAPD + Pin Default 0x411111f0: [N/A] Speaker at Ext Rear + Conn = 1/8, Color = Black + DefAssociation = 0xf, Sequence = 0x0 + Misc = NO_PRESENCE + Pin-ctls: 0x00: VREF_HIZ + Unsolicited: tag=00, enabled=0 + Power states: D0 D1 D2 D3 EPSS + Power: setting=D0, actual=D0 + Connection: 2 + 0x02* 0x03 +Node 0x1c [Vendor Defined Widget] wcaps 0xf00000: Mono +Node 0x1d [Pin Complex] wcaps 0x400400: Mono + Pincap 0x00000020: IN + Pin Default 0x40600001: [N/A] Modem Line at Ext N/A + Conn = Unknown, Color = Unknown + DefAssociation = 0x0, Sequence = 0x1 + Pin-ctls: 0x20: IN + Power states: D0 D1 D2 D3 EPSS + Power: setting=D0, actual=D0 +Node 0x1e [Pin Complex] wcaps 0x400501: Stereo + Pincap 0x00000010: OUT + Pin Default 0x411111f0: [N/A] Speaker at Ext Rear + Conn = 1/8, Color = Black + DefAssociation = 0xf, Sequence = 0x0 + Misc = NO_PRESENCE + Pin-ctls: 0x40: OUT + Power states: D0 D1 D2 D3 EPSS + Power: setting=D0, actual=D0 + Connection: 1 + 0x06 +Node 0x1f [Vendor Defined Widget] wcaps 0xf00000: Mono +Node 0x20 [Vendor Defined Widget] wcaps 0xf00040: Mono + Processing caps: benign=0, ncoeff=142 +Node 0x21 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out + Control: name="Headphone Playback Switch", index=0, device=0 + ControlAmp: chs=3, dir=Out, idx=0, ofs=0 + Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1 + Amp-Out vals: [0x80 0x80] + Pincap 0x0001001c: OUT HP EAPD Detect + EAPD 0x2: EAPD + Pin Default 0x04211020: [Jack] HP Out at Ext Right + Conn = 1/8, Color = Black + DefAssociation = 0x2, Sequence = 0x0 + Pin-ctls: 0xc0: OUT HP + Unsolicited: tag=01, enabled=1 + Power states: D0 D1 D2 D3 EPSS + Power: setting=D0, actual=D0 + Connection: 2 + 0x02* 0x03 +Node 0x22 [Audio Mixer] wcaps 0x20010b: Stereo Amp-In + Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1 + Amp-In vals: [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] + Connection: 5 + 0x19 0x1a 0x1b 0x1d 0x13 +Node 0x23 [Audio Mixer] wcaps 0x20010b: Stereo Amp-In + Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1 + Amp-In vals: [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x00 0x00] + Connection: 5 + 0x19 0x1a 0x1b 0x1d 0x12 +Node 0x24 [Audio Selector] wcaps 0x300101: Stereo + Connection: 3 + 0x12* 0x13 0x18 +``` diff --git a/docs/projects/x1c6-hackintosh/BIOS.md b/docs/projects/x1c6-hackintosh/BIOS.md new file mode 100644 index 0000000..57a9423 --- /dev/null +++ b/docs/projects/x1c6-hackintosh/BIOS.md @@ -0,0 +1,190 @@ +--- +icon: material/chip +--- + +# BIOS Prep + +Modding the machine's BIOS is **optional** and will unlock hidden advanced settings. These settings allow for better optimizations under macOS. + +/// danger +The BIOS mod will **permanently** break TPM. + +Only mod the BIOS if you do not need TPM under Windows or Linux. +/// + +[:material-fast-forward-outline: Skip to Vanilla BIOS Settings](#vanilla-bios-settings){ .md-button } + +## BIOS Modding + +![CH341a SPI Programmer and SOIC8 Clip](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/CH341a.png){ align=right width=200 } + +The CH341a SPI Programmer and SOIC8 Clip are needed to dump and flash the BIOS chip. An inexpensive one from Amazon/eBay is sufficient. + +The BIOS chip is located just above the CPU, hidden under the sticker shield. + +
    + ![BIOS Chip Location](https://user-images.githubusercontent.com/3349081/87883762-38686380-c9cf-11ea-9e9d-c400f7b5407b.jpg){ width=300 } +
    BIOS Chip Location
    +
    + +
    + +[:simple-github:{.github} digmorepaka/thinkpad-firnware-patches](https://github.com/digmorepaka/thinkpad-firmware-patches){ .md-button } + +
    + +/// announce | Credits +Thank you to `paranoidbashthot` and `\x` for creating the patches. +/// + +[:simple-youtube:{ .youtube } @notthebee](https://github.com/notthebee) similarly modded his BIOS in [:simple-youtube:{ .youtube } Removing Wi-Fi Whitelist ... & Unlocking Advanced BIOS Settings](https://www.youtube-nocookie.com/embed/ce7kqUEccUM) + +1. Use `xx_80_patches-v*.txt`, feel free to comment out the WWAN patches if unnecessary. + +3. Remember to **dump the vanilla twice and use `diff` to make sure things were dumped properly**, store this backup somewhere safe. +4. Confirmed working `BIOS-v1.45`, I cannot be sure about other BIOS versions. Though they will most likely work as well. +5. The modded BIOS does not need to be signed by `thinkpad-eufi-sign`. Remember to replace `4C 4E 56 42 42 53 45 43 FB` with `4C 4E 56 42 42 53 45 43 FF` on the patched BIOS. + +6. Your BIOS chip may not be made by Winbond, but by Macronix instead. In that case, add the argument `-c MX25L12835F/MX25L12845E/MX25L12865E` to `flashrom`. See [Issue #116](https://github.com/tylernguyen/x1c6-hackintosh/issues/116#issuecomment-778654320)`` + +/// success +Successfully modding your BIOS will reveal the `Advance Menu` tab. + +

    +BIOS Advance Menu +

    + +It is safe to update the BIOS. However, the patches will have to be reapplied and reflashed. +/// + +## Modded BIOS Settings + +DVMT Pre-Allocated will enable 4K HDMI output. +Disabling CFG Lock gives Kernel (XNU) and AppleIntelPowerManagement the ability to write to the MSR 0xE2 register. + +``` mermaid +graph TD + id1[Advance Tab]-->id2[Intel Advanced Menu]; + id2-->id3[System Agent Configuration]; + id2-->id4[Power & Performance]; + id3-->id5[Graphics Configuration]; + id4-->id6[CPU - Power Management Control]; + id5-->|DVMT Pre-Allocated|64M; + id6-->id7[CPU Lock Configuration]; + id7-->|CFG Lock|Disabled; +``` + +### Optimization Settings + +/// tip | Undervolting +I also recommend undervolting your machine. Be sure to verify your resulting by stress testing with `Prime95` and `Heaven Benchmark`. + +The following are stable settings for my x1c6 with `i7-8650U`, repasted with Thermal Grizzly. +/// + +``` mermaid +graph LR + id1[Advance Tab]-->id2[Intel Advanced Menu]; + id2-->id3[OverClocking Performance Menu]; + id3-->|OverClocking Feature|Enabled; + id3-->Processor; + id3-->GT; + id3-->Uncore; + Processor-.->|Voltage Offset|100; + Processor-.->|Offset Prefix|id4[-]; + GT-.->|GT Voltage Offset|id8[80]; + GT-.->|Offset Prefix|id5[-]; + GT-.->|GTU Voltage Offset|id8; + GT-.->|Offset Prefix|id5; + Uncore-.->|Uncore Voltage Offset|80; + Uncore-.->|Offset Prefix|id6[-]; +``` + +/// setting | Optimize CPU **performance** at the cost of battery +/// + +``` mermaid +graph LR + id1[Advance Tab]-->id2[Power & Performance]; + id2-->id3[CPU - Power Management Control]; + id3-->|Boot Performance Mode|id4[Turbo Performance]; + id3-->|Config TDP Configurations|Up; +``` + +/// setting | Optimize **battery time** at the cost of performance +/// + +``` mermaid +graph LR + id1[Advance Tab]-->id2[Power & Performance]; + id2-->id3[CPU - Power Management Control]; + id3-->|Boot Performance Mode|id4[Max Battery]; + id3-->|Config TDP Configurations|Down; +``` + +## Vanilla BIOS Settings + +These BIOS settings must be made to install and run macOS without any problems: + +``` mermaid +graph LR + id1[Main Menu]-->Security; + id1-->Config; + id1-->Startup; + Security-->TPM[Security Chip]; + Security-->Fingerprint; + Security-->SBC[Secure Boot Configuration]; + Config-->Network; + Startup-.->|UEFI/Legacy Boot|id4[UEFI Only]; + Startup-.->|CSM Support|No; + TPM-.->|Security Chip|id2[Disabled]; + Fingerprint-.->|Predesktop Authentication|id2; + SBC-.->|Secure Boot|id2; + Network-.->|Wake on LAN|id3[Disabled]; + Network-.->|Wake on LAN from Dock|id3; + Network-.->|UEFI IPv4 Network Stack|id3; + Network-.->|UEFI IPv6 Network Stack|id3; +``` + +/// tip +You can also disable hardware/features you do not need to save power, some examples are: +/// + +``` mermaid +graph LR + id1[Main Menu]-->Security; + id1-->Config; + Security-->id2[I/O Port Access]; + Config-->USB; + id2-->|Wireless WAN|id3[Disabled]; + id2-->|Fingerprint Reader|id3; + id2-->|Memory Card Slot|id3; + USB-->|Always on USB|Disabled; +``` + +### Thunderbolt 3 Settings + +/// setting | Thunderbolt 3 Coldplug +If you **DO NOT use Thunderbolt 3 hotplug** in macOS (don't mind shutting down the machine to connect TB3 devices), this will drastically lower power consumption: +/// + +``` mermaid +graph LR + id1[Main Menu]-->Config; + Config-->id2[Thunderbolt 3]; + id2-.->|Thunderbolt BIOS Assist Mode|Enabled; + id2-.->|Thunderbolt Device|Enabled; +``` + +/// setting | Thunderbolt 3 Hotplug +If you **DO use Thunderbolt 3 hotplug in macOS** (at the expense of idle power consumption): +/// + +``` mermaid +graph LR + id1[Main Menu]-->Config; + Config-->id2[Thunderbolt 3]; + id2-.->|Thunderbolt BIOS Assist Mode|Disabled; + id2-.->|Security Level|id3[No Security]; + id2-.->|Support in Pre Boot Environment: Thunderbolt Device|Disabled; +``` diff --git a/docs/projects/x1c6-hackintosh/EC-queries.md b/docs/projects/x1c6-hackintosh/EC-queries.md new file mode 100644 index 0000000..761b57e --- /dev/null +++ b/docs/projects/x1c6-hackintosh/EC-queries.md @@ -0,0 +1,103 @@ +# EC Queries + +## Battery + +### _Q22 + +### _Q4A + +Battery 0 attach/detach + +``` +Method(_Q4A, 0, NotSerialized) +{ + Notify(BAT0, 0x81) +} +``` + +### _Q4B + +Battery 0 state change + +``` +Method(_Q4B, 0, NotSerialized) +{ + Notify(BAT0, 0x80) +} +``` + +### _Q4C + +Battery 1 attach/detach + +``` +Method(_Q4C, 0, NotSerialized) +{ + Notify(BAT1, 0x81) +} +``` + +### _Q4D + +Battery 1 state change + +``` +Method(_Q4D, 0, NotSerialized) +{ + Notify(BAT1, 0x80) +} +``` + +### _Q24 + +Battery 0 critical + +``` +Notify(BAT0, 0x80) +``` + +### _Q25 + +Battery 1 critical + +``` +Notify(BAT1, 0x80) +``` + +## Power + +| Event | EC Query | | +|-------------------------------|----------|---| +| Lid Open | _Q2A | | +| Lid Close | _Q2B | | +| Sleep Button | _Q13 | | +| AC Status Change: Present | _Q26 | | +| AC Status Change: Not Present | _Q27 | | + +## Misc + +### _Q1C + +### _Q1D + +## Sleep? + +### _Q62 + +### _Q65 + +### _Q3D + +### _Q48 + +### _Q49 + +### _Q7F + +### _Q46 + +### _Q3B + +### _Q4F + +### _Q2F diff --git a/docs/projects/x1c6-hackintosh/README.md b/docs/projects/x1c6-hackintosh/README.md new file mode 100644 index 0000000..870cc77 --- /dev/null +++ b/docs/projects/x1c6-hackintosh/README.md @@ -0,0 +1,48 @@ +--- +icon: simple/lenovo +subtitle: README.md +--- + +# README + +## FAQ + +#### Does everything work? + +Core functions work flawlessly. Notable non-functional features include the fingerprint reader, WWAN, and USB 3.1 Gen2 hotplug. + +#### Is this project maintained? + +Yes, until eventually my x1c6 dies or macOS phases out update (even then, it'll likely last a few more years). + +#### Can this brick my laptop? + +Not very likely, expect drive wipes and lost time, however. + +#### Can you port this for X machine? + +No. + +#### How do I keep my Hackintosh setup updated? + +Currently, there is no automatic solution available. For now, I recommend you create a GitHub watch alert and update the EFI as it comes along. + +## Basic References + +/// warning +Please read, or at the least, browse through these great resources to get an idea of what's going on before proceeding. This is especially important if this is your first time (OpenCore) Hackintosh-ing. +/// + +- [dortania's Hackintosh guides](https://github.com/dortania) +- [dortania's OpenCore Install Guide](https://dortania.github.io/OpenCore-Install-Guide/) +- [dortania's OpenCore Post Install Guide](https://dortania.github.io/OpenCore-Post-Install/) +- [dortania/ Getting Started with ACPI](https://dortania.github.io/Getting-Started-With-ACPI/) +- [dortania/ opencore `multiboot`](https://dortania.github.io/OpenCore-Multiboot/) +- [dortania/ `USB map` guide](https://dortania.github.io/OpenCore-Post-Install/usb/) +- `Configuration.pdf` and `Differences.pdf` in each `OpenCore` releases. + +/// tip +If I missed something here, refer to the official OpenCore docs first, then Dortania's docs. Only then, if you still haven't found what you're looking for, seek Google or forum help. +/// + +- Additionally, references specific to the x1c6 are located in `docs/references/` diff --git a/docs/projects/x1c6-hackintosh/checklist.md b/docs/projects/x1c6-hackintosh/checklist.md new file mode 100644 index 0000000..54abfa2 --- /dev/null +++ b/docs/projects/x1c6-hackintosh/checklist.md @@ -0,0 +1,36 @@ +--- +icon: material/list-status +--- + +# Checklist + +The following checklist is provided for your convenience. + +Cross-reference your install against the [:material-data-matrix: Datasheet](datasheet.md). + +/// warning +The checklist is not exhaustive and is basic in nature. It is not meant to discover nor diagnose problems. +/// + +- [ ] FileVault +- [ ] iMessage +- [ ] AirDrop +- [ ] macOS Continuity +- [ ] Sidecar +- [ ] TrackPad + - [ ] TrackPad Gestures +- [ ] HDMI + - [ ] < 4K + - [ ] 4K +- [ ] Sound + - [ ] Speakers + - [ ] 3.5 Headphone +- [ ] Power + - [ ] S3 Sleep + - [ ] Hibernation Mode 3 +- [ ] WiFi +- [ ] Bluetooth +- [ ] Ethernet +- [ ] Thunderbolt 3 + - [ ] Coldboot Thunderbolt 3 + - [ ] Hotplug diff --git a/docs/projects/x1c6-hackintosh/config.plist.md b/docs/projects/x1c6-hackintosh/config.plist.md new file mode 100644 index 0000000..d0276ae --- /dev/null +++ b/docs/projects/x1c6-hackintosh/config.plist.md @@ -0,0 +1,68 @@ +# config.plist + +/// tip | Sanity Check +Always run `ocvalidate config.plist` after editing. +/// + +* The default `config.plist` is meant to serve a mostly vanilla configuration. Additional `config.plist` components are available in [x1c6-hackintosh/patches/](https://github.com/tylernguyen/x1c6-hackintosh/tree/main/patches) + +## Audio + +`Device Properties` > `PciRoot(0x0)/Pci(0x1f,0x3)` > `layout-id`: Injects AppleALC layout-id `21` + +## Intel iGPU and HDMI + +`Device Properties` > `PciRoot(0x0)/Pci(0x2,0x0)` > + +- `device-id` = `16590000` per [WhateverGreen/IntelHD.en.md](https://github.com/acidanthera/WhateverGreen/blob/master/Manual/FAQ.IntelHD.en.md) +- `AAPL,ig-platform-id` = This is negotiable. In the future, I will test different variables for optimization. For now, `04002759` works well enough. +- `AAPL00,override-no-connect` = EDID override to fix HDMI hotplug. Search for yours at `patches/Internal Displays/` or see [Issue #60](https://github.com/tylernguyen/x1c6-hackintosh/issues/60) to create one for your display model. +- `framebuffer-con1-enable` to enable framebuffer patching by WEG on connector 1. +- `framebuffer-con1-type` to set connector 1 type to HDMI (per IOReg) +- `framebuffer-patch-enable` tells WEG to patch framebuffer. +- `AAPL00,override-no-connect` to override EDID (dependent on display models). See `patches/Internal Displays/`. This is necessary to fix HDMI hotplug. To create your own, see [Issue #60](https://github.com/tylernguyen/x1c6-hackintosh/issues/60) + +## FileVault compatibility + +- Misc -> Boot + - `PollAppleHotKeys` set to `YES`(While not needed can be helpful) +- Misc -> Security + - `AuthRestart` set to `YES`(Enables Authenticated restart for FileVault 2 so password is not required on reboot. Can be considered a security risk so optional) +- NVRAM -> Add -> 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14 + - `UIScale` set to `02` for high resolution small displays +- UEFI -> Input + - `KeySupport` set to `YES`(Only when using OpenCore's builtin input, users of OpenUsbKbDxe should avoid) +- UEFI -> Output + - `ProvideConsoleGop` to `YES` +- UEFI -> ProtocolOverrides + - `FirmwareVolume` set to `YES` + - `AppleSmcIo` set to `YES`(this replaces VirtualSMC.efi) +- UEFI -> Quirks + - `RequestBootVarRouting` set to `YES` + +## Hibernation Mode 25 support + +- Booter -> Quirks + - `DiscardHibernateMap` set to `YES` +- NVRAM -> Add -> 7C436110-AB2A-4BBB-A880-FE41995C9F82 + - `boot-args` includes `-hbfx-dump-nvram rtcfx_exclude=80-AB` +- Misc -> Boot + - `HibernateMode` set to `NVRAM` +- UEFI -> ReservedMemory + - Address: `569344` + - Size: `4096` + - Type: `RuntimeCode` + +## Personalization + +- `ShowPicker` is `No`. Use `Esc` during boot to show picker when needed. +- `PickerMode` is `External` to use `OpenCanopy` boot menu. If you prefer a lighter `EFI`, delete `Resources` and switch variable to `Builtin`. +- `PlayChime` is `No`. Set this to `Yes` if you want the native chime to play upon boot. + +## OpenCanopy Support + +I prefer OpenCanopy for its looks. However, it is completely optional and can take up space in your EFI. If you would rather use OpenCore's built in picker. Change `PickerMode` to `Builtin` and remove `OpenCanopy.efi` from `UEFI` > `Drivers`. + +## EFI Tools + +* OpenCore tools and utilities are removed for a clean setup and can be added when needed. diff --git a/docs/projects/x1c6-hackintosh/datasheet.md b/docs/projects/x1c6-hackintosh/datasheet.md new file mode 100644 index 0000000..5c31cda --- /dev/null +++ b/docs/projects/x1c6-hackintosh/datasheet.md @@ -0,0 +1,74 @@ +--- +icon: material/data-matrix +--- + +# Datasheet + +## Non-Functional + +| Feature | Dependency | Remarks | +|---|---|---| +| :octicons-x-16:{ .solarized-red } Apple Music Lossless (DRM) | | iGPU is incompatible with Apple's Lossless DRM. Try using an external DAC. | +| :octicons-x-16:{ .solarized-red } Fingerprint Reader | `DISABLED` in BIOS to save power if not used in other OSes. | | +| :octicons-x-16:{ .solarized-red } Wireless WAN | `DISABLED` in BIOS to save power if not used in other OSes. | Unable to investigate as I have no need and my model did not come with WWAN. | +| :octicons-x-16:{ .solarized-red } Load Apple's Graphics Micro Code (GuC) | | See [Issue #103](https://github.com/tylernguyen/x1c6-hackintosh/issues/103). Will never work AFAIK due to inherent incompatibility. | + +## Video and Audio + +| Feature | Dependency | Remarks | +|---|---|---| +| :octicons-check-16:{ .solarized-green } Full Graphics Acceleration (QE/CI) | ![Apple Kext](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/Apple_kext.png){ .twemoji } WhateverGreen | | +| :octicons-check-16:{ .solarized-green } Webcam | ![UEFI](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/UEFI.png){ .twemoji } SSDT-XHC1 | | +| :octicons-check-16:{ .solarized-green } Audio Recording | ![Apple Kext](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/Apple_kext.png){ .twemoji } AppleALC | Layout ID = 21 | +| :octicons-check-16:{ .solarized-green } Audio Playback | ![Apple Kext](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/Apple_kext.png){ .twemoji } AppleALC | Layout ID = 21 | +| :octicons-check-16:{ .solarized-green } Automatic Headphone Output Switching | ![Apple Kext](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/Apple_kext.png){ .twemoji } AppleALC | Layout ID = 21 | + +## Power, Charge, Sleep and Hibernation + +| Feature | Dependency | Remarks | +|---|---|---| +| :octicons-check-16:{ .solarized-green } Battery Percentage Indication | ![UEFI](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/UEFI.png){ .twemoji } SSDT-Battery
    ![OpenCore](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/OpenCore.png){ .twemoji } `/patches/OpenCore Patches/Battery.plist` | +| :octicons-check-16:{ .solarized-green } CPU Power Management (SpeedShift) | ![UEFI](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/UEFI.png){ .twemoji } SSDT-PM
    ![Apple Kext](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/Apple_kext.png){ .twemoji } CPUFriend
    ![Apple Kext](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/Apple_kext.png){ .twemoji } CPUFriendDataProvider | [CPUFriendFriend](https://github.com/corpnewt/CPUFriendFriend_) or [one-key-cpufriend](https://github.com/stevezhengshiqi/one-key-cpufriend). +| :octicons-check-16:{ .solarized-green } iGPU Power Management | ![UEFI](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/UEFI.png){ .twemoji } SSDT-PM | +| :octicons-check-16:{ .solarized-green } NVMe Drive Battery Management | ![Apple Kext](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/Apple_kext.png){ .twemoji } NVMeFix | In my experience, NVMe drives will drain more power than SATA drives. | +| :octicons-check-16:{ .solarized-green } S3 Sleep | ![UEFI](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/UEFI.png){ .twemoji } SSDT-Sleep | | +| :octicons-check-16:{ .solarized-green } Hibernation Mode 25 | ![Apple Kext](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/Apple_kext.png){ .twemoji } RTCMemoryFixup
    ![Apple Kext](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/Apple_kext.png){ .twemoji } HibernationFixup | Supported, macOS uses mode 3 by default. Change to mode 25 via `pmset`. | +| :octicons-check-16:{ .solarized-green } Custom Charge Threshold | ![UEFI](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/UEFI.png){ .twemoji } SSDT-EC
    ![Apple Kext](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/Apple_kext.png){ .twemoji } [YogaSMC](https://github.com/zhen-zen/YogaSMC)
    [YogaSMCPane](https://github.com/zhen-zen/YogaSMC) | Adjust with YogaSMCPane in System Preferences +| :octicons-check-16:{ .solarized-green } Fan Control | ![UEFI](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/UEFI.png){ .twemoji } SSDT-EC
    ![Apple Kext](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/Apple_kext.png){ .twemoji } [YogaSMC](https://github.com/zhen-zen/YogaSMC)
    [YogaSMC App](https://github.com/zhen-zen/YogaSMC)| Adjust with YogaSMC App. + +## Input and Output + +| Feature | Dependency | Remarks | +|---|---|---| +| :octicons-check-16:{ .solarized-green } WiFi | Native with BCM94360CS2
    [![OpenIntelWireless](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/OpenIntelWireless.png){ .twemoji } OpenIntelWireless](https://openintelwireless.github.io/) for Intel cards | See `/patches/ Network Patches/` for patches. | +| :octicons-check-16:{ .solarized-green } Bluetooth | ![UEFI](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/UEFI.png){ .twemoji } SSDT-XHC1
    Native with BCM94360CS2
    [![OpenIntelWireless](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/OpenIntelWireless.png){ .twemoji } OpenIntelWireless](https://openintelwireless.github.io/) for Intel cards | See `/patches/ Network Patches/` for patches. | +| :octicons-check-16:{ .solarized-green } Ethernet | ![Apple Kext](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/Apple_kext.png){ .twemoji } IntelMausi | Needs Lenovo Ethernet adapter: [Item page](https://www.lenovo.com/us/en/accessories-and-monitors/cables-and-adapters/adapters/CABLE-BO-Ethernet-Extension-Adapter-2/p/4X90Q84427) | +| :octicons-check-16:{ .solarized-green } HDMI hotplug | Custom EDID Override ![OpenCore](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/OpenCore.png){ .twemoji } `/patches/Internal Displays/` | Refer to [Issue #60](https://github.com/tylernguyen/x1c6-hackintosh/issues/60) if one does not exist already for your display. | +| :octicons-check-16:{ .solarized-green } 4K HDMI/DisplayPort Output **(Modded BIOS)** | BIOS `DMVT Pre-Allocated` to `64M` | See [docs/BIOS.md](https://tylernguyen.github.io/x1c6-hackintosh/BIOS/) for information about modding the BIOS. | +| :octicons-check-16:{ .solarized-green } 4K HDMI/DisplayPort Output **(Vanilla BIOS)** |![OpenCore](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/OpenCore.png){ .twemoji } `/patches/OpenCore Patches/4K-Output-wo-BIOSmod.plist` | | +| :octicons-check-16:{ .solarized-green } USB 2.0
    :octicons-check-16:{ .solarized-green } USB 3.0
    :octicons-check-16:{ .solarized-green } Micro SD Card Reader | ![UEFI](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/UEFI.png){ .twemoji } SSDT-XHC1 | | +| :octicons-check-16:{ .solarized-green } USB 3.1 Coldboot
    ⚠️ USB 3.1 Hotplug | ![UEFI](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/UEFI.png){ .twemoji } SSDT-TB-DSB2-XHC2 | USB 3.1 Gen2 hotplug will likely never work. It is also neither planned nor currently worked on. If you need USB 3.1 Gen2, coldboot the machine with the device attached. | +| :octicons-check-16:{ .solarized-green } USB Power Properties in macOS | ![UEFI](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/UEFI.png){ .twemoji } SSDT-XHC1 | | +| :octicons-check-16:{ .solarized-green } Thunderbolt 3 Hotplug | ![UEFI](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/UEFI.png){ .twemoji } SSDT-TB-* | Native interface within System Report | + +## Display, TrackPad, TrackPoint, and Keyboard + +| Feature | Dependency | Remarks | +|---|---|---| +| :octicons-check-16:{ .solarized-green } Brightness Adjustments | ![UEFI](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/UEFI.png){ .twemoji } SSDT-PNLF
    ![Apple Kext](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/Apple_kext.png){ .twemoji } WhateverGreen
    ![Apple Kext](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/Apple_kext.png){ .twemoji } BrightnessKeys | | +| :octicons-check-16:{ .solarized-green } HiDPI | [xzhih/one-key-hidpi](https://github.com/xzhih/one-key-hidpi) | Scaling issues post-sleep fixed with AAPL, ig-platform `BAAnWQ==` | +| :octicons-check-16:{ .solarized-green } TrackPoint | ![Apple Kext](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/Apple_kext.png){ .twemoji } VoodooPS2Controller | | +| :octicons-check-16:{ .solarized-green } TrackPad | ![Apple Kext](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/Apple_kext.png){ .twemoji } VoodooSMBus
    ![Apple Kext](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/Apple_kext.png){ .twemoji } VoodooRMI | | +| :octicons-check-16:{ .solarized-green } Built-in Keyboard | ![UEFI](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/UEFI.png){ .twemoji } SSDT-Keyboard
    ![Apple Kext](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/Apple_kext.png){ .twemoji } VoodooPS2Controller | Optimizations recommended, see [`docs/Post-Installation.md`](https://tylernguyen.github.io/x1c6-hackintosh/Post-Installation/) | +| :octicons-check-16:{ .solarized-green } Multimedia Keys | ![Apple Kext](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/Apple_kext.png){ .twemoji } BrightnessKeys
    [YogaSMC App](https://github.com/zhen-zen/YogaSMC) | | + +## macOS Continuity + +| Feature | Dependency | Remarks | +|---|---|---| +| :octicons-check-16:{ .solarized-green } iCloud, iMessage, FaceTime | Whitelisted Apple ID, Valid SMBIOS | See [dortania/OpenCore-Install-Guide](https://dortania.github.io/OpenCore-Post-Install/universal/iservices.html) | +| :octicons-check-16:{ .solarized-green } Continuity | Native with BCM94360CS2. `ExtendBTFeatureFlags` to `True` otherwise. | See `/patches/Network Patches/` for specific network card. | +| :octicons-check-16:{ .solarized-green } AirDrop | Native with BCM94360CS2. `ExtendBTFeatureFlags` to `True` otherwise. | See `/patches/Network Patches/` for specific network card. | +| :octicons-check-16:{ .solarized-green } Sidecar | Native with BCM94360CS2. `ExtendBTFeatureFlags` to `True` otherwise. iPad with >= `iPadOS 13` | Tested with iPad Mini with iPadOS 13.1.2 | +| :octicons-check-16:{ .solarized-green } FileVault | as configured in `config.plist` per [Dortania's Post-Install](https://dortania.github.io/OpenCore-Post-Install/universal/security/filevault.html) | | +| :octicons-check-16:{ .solarized-green } Time Machine | Native | TimeMachine only backups your Macintosh partition. Manually backup your EFI partition using another method. | diff --git a/docs/projects/x1c6-hackintosh/external.md b/docs/projects/x1c6-hackintosh/external.md new file mode 100644 index 0000000..2c5caaf --- /dev/null +++ b/docs/projects/x1c6-hackintosh/external.md @@ -0,0 +1,34 @@ +# External + +## ACPI, ASL, and Patches + +- The patches written for this project are in ASL. Consder reading the [ACPI Source Language (ASL) Tutorial v20190625](https://acpica.org/sites/acpica/files/asl_tutorial_v20190625.pdf) to get a basic understanding of the patches' code. + +/// info +The Ubuntu Wiki also has an [ACPI Tricks and Tips](https://wiki.ubuntu.com/Kernel/Reference/ACPITricksAndTips) section. +/// + +- [5T33Z0/OC-Little-Translated](https://github.com/5T33Z0/OC-Little-Translated) is the English docs translation of [daliansky/OC-little](https://github.com/daliansky/OC-little). It is helpful to refer to existing patches when Hackintoshing. + +/// warning +Some patches within OC-Little can be oudated, badly done, or fragmented because of different patch authors. Consider using this resource only as a reference and basic guide, not a patch repository. +/// +- Consider referencing the [MacbookPro14,1 ACPI Dump](https://github.com/khronokernel/DarwinDumped/tree/master/MacBookPro/MacBookPro14%2C1) when trying to understand certain functions within macOS. + +## Acidanthera Official Docs + +- Consider reading `Configuration.pdf` from the OpenCore release package if you haven't. From there, pay attention to `Differences.pdf` with everynew OpenCore releases. + +- WhateverGreen Intel HD Graphics FAQ: [WhateverGreen/Manual/FAQ.IntelHD.en.md](https://github.com/acidanthera/WhateverGreen/blob/master/Manual/FAQ.IntelHD.en.md) + +## UEFI Secure Boot + +It is possible to enable Secure Boot with macOS. Doing so will require custom secure boot keys and signing OpenCore binaries each update. See [profzei/Matebook-X-Pro-2018/wiki](https://github.com/profzei/Matebook-X-Pro-2018/wiki/Enable-BIOS-Secure-Boot-with-OpenCore) for a basic getting started guide. + +/// info +UEFI Secure Boot Explanation: [hac-mini-guide/details/secure-boot](https://osy.gitbook.io/hac-mini-guide/details/secure-boot) +/// + +## Thunderbolt 3 + +[osy](https://github.com/osy) has a great write-up of patching Thunderbolt 3 hotplug under macOS. See [Part 1](https://osy.gitbook.io/hac-mini-guide/details/thunderbolt-3-fix), [Part 2]( https://osy.gitbook.io/hac-mini-guide/details/thunderbolt-3-fix-part-2), and [Part 3](https://osy.gitbook.io/hac-mini-guide/details/thunderbolt-3-fix-part-3). diff --git a/docs/projects/x1c6-hackintosh/hardware.md b/docs/projects/x1c6-hackintosh/hardware.md new file mode 100644 index 0000000..2d4938c --- /dev/null +++ b/docs/projects/x1c6-hackintosh/hardware.md @@ -0,0 +1,68 @@ +--- +icon: material/harddisk-remove +--- + +# Hardware Prep + +## Storage + +/// bug +The factory PM981 NVMe drive does not play well with macOS. + +Replace it with an aftermarket NVMe for easily installation and better macOS compatibility. +/// + +For installation on the factory drive `PM981`, please refer to [Issue #43](https://github.com/tylernguyen/x1c6-hackintosh/issues/43). I do, however, recommend against this. + +Consult the [dortania/Anti-Hackintosh-Buyers-Guide](https://dortania.github.io/Anti-Hackintosh-Buyers-Guide/Storage.html) for up-to-date storage recommendations. + +/// tip +You can install an additional M.2 2242 NVMe drive in the WWAN card slot. + +This is particularly useful if you intend to dual-boot Windows/Linux. However, the drive will only run at PCIe x1 speed. +/// + +## WiFi and Bluetooth + +/// tip +If your laptop did not come with WWAN, you can purchase additional antennas to add to your laptop. This is useful when using WiFi/Bluetooth cards that have 3 antennas. +/// + +The laptop's default wireless card can be patched to function under macOS. + +The BCM94360CS2, along with a M.2 NGFF adapter will work natively under macOS. + +The two options, however, can be limited in speed and compatibility. I recommend upgrading to a newer Intel card for more modern WiFi and Bluetooth standards. + +See [![OpenIntelWireless](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/OpenIntelWireless.png){ .twemoji } OpenIntelWireless | Compatibility](https://openintelwireless.github.io/itlwm/Compat.html) for Intel cards compatibilities. + +## CPU Cooler + +/// info +The X1C6 has different CPU cooler manufacturers, and they differ greatly in noise and performance. +[:octicons-link-external-16: Reddit ](https://www.reddit.com/r/thinkpad/comments/c7zpah/x1_carbon_6th_gen_horrible_cooling_fan_design/){ .card-link title="Report" } + +Replacement CPU coolers can be found on eBay. +/// + +I also advise to redo the stock thermal application. + +- [Grizzly Kryonaut](https://www.thermal-grizzly.com/en/products/16-kryonaut-en) is often recommended. You may also look into other brands such as Noctua or Arctic. +- [Grizzly Conductonaut](https://www.thermal-grizzly.com/produkte/25-conductonaut) (liquid metal) gives better thermal performance, given that you are experienced and inclined with the application. + +[:simple-youtube:{ .youtube } @der8auer](https://www.youtube.com/@der8auer) shown himself tuning this exact machine model with liquid metal: + +1. [:simple-youtube:{ .youtube } Lenovo X1 Carbon G6 - Liquid Metal and Tuning (Part 1/2)](https://www.youtube.com/watch?v=FXR5-HwIre8) +2. [:simple-youtube:{ .youtube } Lenovo X1 Carbon G6 - Liquid Metal and Tuning (Part 2/2)](https://www.youtube.com/watch?v=1yimz_Wy0lM) + +## Battery Replacement + +![Replacement Battery Cell](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/Battery-cell.png){ align=right width=300 } + +Depending on the battery health (cycle count, max capacity), consider getting a replacement battery cell. Genuine battery cells are the Lenovo Part 01AV430 and Lenovo Part 01AV431. + +Avoid eBay sellers, especially from overseas. Look to purchase from the Lenovo Parts Store or from trust worthy vendors such as iFixit. + +/// tip +The X1 Carbon 5th and 6th Generation uses the same battery cell. +/// diff --git a/docs/projects/x1c6-hackintosh/install-macOS.md b/docs/projects/x1c6-hackintosh/install-macOS.md new file mode 100644 index 0000000..33960af --- /dev/null +++ b/docs/projects/x1c6-hackintosh/install-macOS.md @@ -0,0 +1,45 @@ +--- +icon: material/apple-finder +--- + +# Install macOS + +## Create the Installer + +Start by creating a vanilla macOS installer, refer to [Dortania's Creating the USB](https://dortania.github.io/OpenCore-Install-Guide/installer-guide/). + +You may also use [`createinstallmedia`](https://support.apple.com/en-us/101578) if you already have a Mac. + +/// tip +Often as above, the project will defer universal steps to Dortania links. Hence, this repository is meant to be used in conjunction with their guides. +/// + +## Prep the Installer + +![OpenCore](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/OpenCore.png){ align=right width=100 } + +/// warning +The default EFI folder is BIOS and network card agnostic. +/// + +Vanilla BIOS: merge `/patches/ OpenCore Patches/ Vanilla BIOS.plist` with `config.plist` + +Intel Network Cards [![OpenIntelWireless](https://assets.tylernguyen.wiki/projects/x1c6-hackintosh/OpenIntelWireless.png){ .twemoji } OpenIntelWireless]() + +\*Notice that these patches require additional kexts to be installed. See them in `Kernel/Add/` + +1. Make the following changes to `config.plist` within the `EFI` folder. + - `ShowPicker` to `YES` + - `ScanPolicy` to `0` +2. Mount the installer media's EFI partition. You may do this via the command line with `diskutil` or via a utility like [corpnewt/MountEFI](https://github.com/corpnewt/MountEFI). +3. Copy the EFI folder into the installer media's EFI partition. Remember that the top directory level should be `EFI`. +4. Boot into the macOS installer environment using the media. Format target disk as `APFS` using `Disk Utility` and complete installation. + +## First Boot + +1. Boot the installed macOS partition with the existing installer USB and complete new user setup. +2. Copy `EFI` from the installer into the macOS drive's EFI partition. Set `ShowPicker` to `NO` for a cleaner boot experience. You can still access the boot picker by pressing `ESC` during boot time. + +/// success +Your machine should now be able to independently boot macOS. +/// diff --git a/docs/projects/x1c6-hackintosh/issues.md b/docs/projects/x1c6-hackintosh/issues.md new file mode 100644 index 0000000..d045a1c --- /dev/null +++ b/docs/projects/x1c6-hackintosh/issues.md @@ -0,0 +1,33 @@ +--- +icon: octicons/issue-opened-16 +--- + +# Issues + +/// warning +None of this applies to you if your machine is not an X1C6, or similar models such as the T480. You're on your own there. +/// + +#### Machine boots to black/BIOS, and/or selector + +- Double check your EFI partition dirrectory structure. The directory structure should look as `/Volumes/EFI/EFI/` + + - `OC` + - `BOOT` + +#### Legacy macOS: Sierra, High Sierra, Catalina, and Big Sur + +- These were all working on the machine at one point. They should still working with some minor tweaks to the EFI. They won't be supported by me, however. You'll have to do this yourself. + +#### My X isn't working! + +- Was it supposed to work? Check Summary +- Have you applied the needed patch? Check Summary, `/patches/Network Patches` and `/patches/Display Patches`. +- Is it an acknowledged, won't be fixed issue? Check [Issues/ beyond my scope](https://github.com/tylernguyen/x1c6-hackintosh/issues?q=is%3Aissue+is%3Aclosed+label%3A%22beyond+my+scope+%28for+now%29%22). + +## Troubleshooting +Defer to [Dortania's General Troubleshooting](https://dortania.github.io/OpenCore-Install-Guide/troubleshooting/troubleshooting.html). + +/// bug +You may find the patches under `/patches/Debug Patches/` useful in getting logs. +/// diff --git a/docs/projects/x1c6-hackintosh/keyboard-queries.md b/docs/projects/x1c6-hackintosh/keyboard-queries.md new file mode 100644 index 0000000..24b9cfb --- /dev/null +++ b/docs/projects/x1c6-hackintosh/keyboard-queries.md @@ -0,0 +1,107 @@ +# Keyboard Queries + +| KEY | PS2 Scan Codes | EC Queries | ADB Injected | +|---------------------|----------------|------------|--------------| +| ++esc++ | 1 | | 35 | +| ++fn+esc++ | | EC \_Q74 | | +| ++f1++ | 3b | | 7a | +| ++f2++ | 3c | | 78 | +| ++f3++ | 3d | | 63 | +| ++f4++ | 3e | | 76 | +| ++f5++ | 3f | | 60 | +| ++f6++ | 40 | | 61 | +| ++f7++ | 41 | | 62 | +| ++f8++ | 42 | | 64 | +| ++f9++ | 43 | | 65 | +| ++f10++ | 44 | | 6d | +| ++f11++ | 57 | | 67 | +| ++f12++ | 58 | | 6f | +| ++fn+f1++ | e020 | | 4a | +| ++fn+f2++ | e02e | | 49 | +| ++fn+f3++ | e030 | | 48 | +| ++fn+f4++ | | EC \_Q6A | | +| ++fn+f5++ | | EC \_Q15 | | +| ++fn+f6++ | | EC \_Q14 | | +| ++fn+f7++ | | EC \_Q16 | | +| ++fn+f8++ | | EC \_Q64 | | +| ++fn+f9++ | | EC \_Q66 | | +| ++fn+f10++ | | EC \_Q60 | | +| ++fn+f11++ | | EC \_Q61 | | +| ++fn+f12++ | | EC \_Q62 | | +| ++home++ | e047 | | 73 | +| ++end++ | e04f | | 77 | +| ++insert++ | e052 | | 92 | +| ++del++ | e053 | | 75 | +| ++grave++ | 29 | | 32 | +| ++1++ | 2 | | 12 | +| ++2++ | 3 | | 13 | +| ++3++ | 4 | | 14 | +| ++4++ | 5 | | 15 | +| ++5++ | 6 | | 17 | +| ++6++ | 7 | | 16 | +| ++7++ | 8 | | 1a | +| ++8++ | 9 | | 1c | +| ++9++ | a | | 19 | +| ++0++ | b | | 1d | +| ++hyphen++ | c | | 1b | +| ++equal++ | d | | 18 | +| ++backspace++ | e | | 33 | +| ++tab++ | f | | 30 | +| ++q++ | 10 | | c | +| ++w++ | 11 | | d | +| ++e++ | 12 | | e | +| ++r++ | 13 | | f | +| ++t++ | 14 | | 11 | +| ++y++ | 15 | | 10 | +| ++u++ | 16 | | 20 | +| ++i++ | 17 | | 22 | +| ++o++ | 18 | | 1f | +| ++p++ | 19 | | 23 | +| ++fn+p++ | e045 | | 71 | +| ++bracket-left++ | 1a | | 21 | +| ++bracket-right++ | 1b | | 1e | +| ++backslash++ | 2b | | 2a | +| ++caps-lock++ | 3a | | 39 | +| ++a++ | 1e | | 0 | +| ++s++ | 1f | | 1 | +| ++fn+s++ | 54 | | 44 | +| ++d++ | 20 | | 2 | +| ++f++ | 21 | | 3 | +| ++g++ | 22 | | 5 | +| ++h++ | 23 | | 4 | +| ++j++ | 24 | | 26 | +| ++k++ | 25 | | 28 | +| ++fn+k++ | 46 | | 6b | +| ++l++ | 26 | | 25 | +| ++semicolon++ | 27 | | 29 | +| | 28 | | 27 | +| ++enter++ | 1c | | 24 | +| ++left-shift++ | 2a | | 38 | +| ++z++ | 2c | | 6 | +| ++x++ | 2d | | 7 | +| ++c++ | 2e | | 8 | +| ++v++ | 2f | | 9 | +| ++b++ | 30 | | b | +| ++fn+b++ | 1d | | 3b | +| ++n++ | 31 | | 2d | +| ++m++ | 32 | | 2e | +| ++comma++ | 33 | | 3b | +| ++period++ | 34 | | 2f | +| ++slash++ | 35 | | 2c | +| ++right-shift++ | 36 | | 3c | +| ++fn++ | 1d | | 3b | +| ++left-control++ | e063 | | 80 | +| ++win++ | e05b | | 3a | +| ++left-alt++ | 38 | | 37 | +| ++space++ | 39 | | 31 | +| ++fn+space++ | | EC \_Q1f | | +| ++right-alt++ | e038 | | 36 | +| ++print-screen++ | e037 | | 0 | +| ++fn+print-screen++ | | EC \_Q65 | | +| ++right-control++ | e01d | | 3e | +| ++page-up++ | e049 | | 74 | +| ++page-down++ | e051 | | 79 | +| ++up++ | e048 | | 7e | +| ++down++ | e050 | | 7d | +| ++left++ | e04b | | 7b | +| ++right++ | e04d | | 7c | diff --git a/docs/projects/x1c6-hackintosh/post-install.md b/docs/projects/x1c6-hackintosh/post-install.md new file mode 100644 index 0000000..c582974 --- /dev/null +++ b/docs/projects/x1c6-hackintosh/post-install.md @@ -0,0 +1,123 @@ +--- +icon: octicons/gear-16 +--- + +# Post Install + +## YogaSMC + +
    + +[:simple-github:{.github} zhen-zen/YogaSMC](https://github.com/zhen-zen/YogaSMC){ .md-button } + +
    + +There are two components to YogaSMC: + +1. YogaSMCPane: a preference pane showing basic information and settings. +2. YogaSMCNC: notification app that receives EC event; also has fan control. + +## Display + +### HiDPI + +/// warning +Enabling HiDPI requires disabling Apple's System Integrity Protection (SIP). +/// + +/// danger +Users of `SecureBootModel` may end up in a RecoveryOS boot loop if the system partition has been modified. To resolve this, Reset NVRAM and set `SecureBootModel` to `Disabled` +/// + +1. Disable SIP. I prefer to use `ToggleSipEntry.efi` at Boot Picker. +2. Mount drive as writeable. See [instructions](https://dortania.github.io/OpenCore-Install-Guide/troubleshooting/extended/post-issues.html#writing-to-the-macos-system-partition) +3. Run [xzhih/one-key-hidpi](https://github.com/xzhih/one-key-hidpi) + - for Ventura: use this fork [yurhett/one-key-hidpi](https://github.com/yurhett/one-key-hidpi) +4. Enable SIP. + +## HDMI Out + +### EDID Override + +- This is necessary to fix HDMI hotplug. +- See current available patches in `/patches/Internal Displays/`, merge them with `config.plist` +- If a patch is not yet created for your display model. Please see [Issue #60](https://github.com/tylernguyen/x1c6-hackintosh/issues/60) to create your own EDID override. Please create a pull request to add your EDID override for different displays. + +## Dual Booting + +I recommend that you dual boot using another drive in the WWAN slot (I have the WDC PC SN520 NVMe 2242). This makes installation much easier, and lets the BIOS F12 option act as your boot manager. + +/// note +Lenovo's Boot Manager will not have an entry for the WWAN NVMe. Most OS(es) will create a bootloader entry during install. If not, use OpenCore to boot into these partitions. See [dortania / OpenCore-Multiboot](https://dortania.github.io/OpenCore-Multiboot/) +/// + +/// tip +It is possible to share Bluetooth pairing keys between Windows and macOS when dual booting. + +The `.reg` for Bluetooth connected devices in macOS can be exported using Hackintool's Utilities section. This key can then be imported to Windows. +/// + +## iMessage and other Apple Services + +- Refer to [dortania /OpenCore-Install-Guide](https://dortania.github.io/OpenCore-Post-Install/universal/iservices.html) + +/// note +`We’re sorry, but this serial number isn’t valid` is fine and has personally worked and working for me and many others. `Purchase Date not Validated` can be a problem down the line if a legitimate machine with that PlatformInfo is activated. +/// + +## Keyboard + +/// note +MultiMedia Fn keys will work out of the box. Special Fn keys require [YogaSMC App](https://github.com/zhen-zen/YogaSMC) to be installed. Additionally, some parameters can be configured with YogaSMC's PrefPane plugin. +/// + +- PrtSc (remapped to F13) = I use it for Screen Capture (Set in `System Preferences/Keyboard/Shortcuts`) +- Check `Use F1, F2, etc. keys as standard function keys` in `System Preferences/Keyboard` to gain access to standard F keys: + +

    + +

    + +/// tip +[Karabiner-Elements](https://karabiner-elements.pqrs.org/) and [BetterTouchTool](https://folivora.ai/) are great advanced customization tools for your keyboard. +/// + +## Sleep + +- Disable Power Nap for both [`Battery`](https://github.com/tylernguyen/x1c6-hackintosh/blob/main/docs/assets/macOS%20Settings/Battery_powernap.png) and [`Power Adapter`](https://github.com/tylernguyen/x1c6-hackintosh/blob/main/docs/assets/macOS%20Settings/Poweradt_powernap.png). +- Disable [`Wake for Network Access`](https://github.com/tylernguyen/x1c6-hackintosh/blob/main/docs/assets/macOS%20Settings/Poweradt_powernap.png) in `Power Adapter`. + +- Uncheck `Allow Bluetooth devices to wake this computer` if you do not need it. + +

    + +

    + +- Do not disable `hibernatefile`. +- `sudo pmset -a tcpkeepalive 0` to disable Network while sleeping. +- `sudo pmset -a proximitywake 0` to disable peripheral wake agent. + +## Thunderbolt 3 + +- Native-like integration with macOS in System Report without the need of flashing a modded firmware. Thank you [@benbender](https://github.com/benbender) +- NOTE: If you do have a modded BIOS firmware, please reset all settings relating to Thunderbolt 3 to default, all that's needed are settings detailed below or in [Settings for Vanilla BIOS](https://tylernguyen.github.io/x1c6-hackintosh/BIOS/settings-for-vanilla-BIOS/) +- Please make sure of these settings in BIOS: + +| Main Menu | Sub 1 | Sub 2 | Sub 3 | +| --------- | ----------- | --------------------------------------------- | ------------------------------------------------------------------ | +| | >> Config | >> Thunderbolt (TM) 3 | Thunderbolt BIOS Assist Mode `Disabled` | +| | | | Security Level `No Security` | +| | | | Support in Pre Boot Environment: Thunderbolt(TM) Device `Disabled` | + +/// warning +USB 3.1 Gen2 hotplug will likely never work. It is also neither planned nor currently worked on. If you need USB 3.1 Gen2, coldboot the machine with the device attached. +/// + +## Trackpad + +- Force Click is enabled by default, which turns any click on the trackpad into a force touch. I suggest you turn this off. +- In addition, I prefer to have tap to click on: + +

    + +

    diff --git a/docs/self-hosted.md b/docs/self-hosted.md new file mode 100644 index 0000000..15b9e8d --- /dev/null +++ b/docs/self-hosted.md @@ -0,0 +1,148 @@ +--- +icon: material/server-network-outline +tags: + - Evergreen +--- + +# Self-Hosted + +## Unraid + +![Unraid](https://assets.tylernguyen.wiki/logos/Unraid-light.svg#only-light){ align=right width=150 } +![Unraid](https://assets.tylernguyen.wiki/logos/Unraid-dark.svg#only-dark){ align=right width=150 } + +Unraid has a robust redundancy system, supports virtualization, third-party plugins, and Docker. Its UI and UX is straight forward and user-friendly. + +The Unraid community is also very active and helpful. + +/// warning +Unraid is not open source. +/// + +[:octicons-link-external-16: Homepage](https://unraid.net/){ .md-button } +[:fontawesome-solid-money-bill:](https://unraid.net/pricing){ .card-link title=Pricing} +[:octicons-markdown-16:](https://wiki.unraid.net/Documentation){ .card-link title=Documentation} + +## Containers + +/// note +I recommend the linuxserver Docker image for its [image mods](https://mods.linuxserver.io/?mod=plex). +/// + +
    + +- ![plex](https://assets.tylernguyen.wiki/logos/plex.svg){ .twemoji } [Plex Media Server](https://www.plex.tv/) +[:octicons-container-16:{ .docker }](https://hub.docker.com/r/linuxserver/plex){ .card-link title=Container} + +- ![Audiobookshelf](https://assets.tylernguyen.wiki/logos/audiobookshelf.svg){ .twemoji } [Audiobookshelf](https://www.audiobookshelf.org/) +[:octicons-container-16:{ .docker }](https://github.com/advplyr/audiobookshelf/pkgs/container/audiobookshelf){ .card-link title=Container} +[:fontawesome-regular-file-code:](https://github.com/advplyr/audiobookshelf){ .card-link title="Source Code" } + +- [:simple-gitea: Gitea](https://gitea.io/en-us/) +[:octicons-container-16:{ .docker }](https://hub.docker.com/r/gitea/gitea/tags){ .card-link title=Container} + +- ![Paperless-ngx](https://assets.tylernguyen.wiki/logos/paperless-ngx.svg){ .twemoji } [Paperless-ngx](https://github.com/paperless-ngx/paperless-ngx) +[:octicons-container-16:{ .docker }](https://github.com/paperless-ngx/paperless-ngx/pkgs/container/paperless-ngx){ .card-link title=Container} +[:fontawesome-regular-file-code:](https://github.com/paperless-ngx/paperless-ngx){ .card-link title="Source Code" } + +- ![Calibre](https://assets.tylernguyen.wiki/logos/calibre.svg){ .twemoji } [Calibre](https://calibre-ebook.com/) +[:octicons-container-16:{ .docker }](https://hub.docker.com/r/linuxserver/calibre){ .card-link title=Container} + +- ![Kavita](https://assets.tylernguyen.wiki/logos/kavita.svg){ .twemoji } [Kavita](https://www.kavitareader.com/) +[:octicons-container-16:{ .docker }](https://hub.docker.com/r/linuxserver/kavita){ .card-link title=Container} +[:fontawesome-regular-file-code:](https://github.com/Kareadita/Kavita){ .card-link title="Source Code" } + +- ![FreshRSS](https://assets.tylernguyen.wiki/logos/freshrss.svg){ .twemoji } [FreshRSS](https://freshrss.org/) +[:octicons-container-16:{ .docker }](https://hub.docker.com/r/linuxserver/freshrss){ .card-link title=Container} +[:fontawesome-regular-file-code:](https://github.com/FreshRSS/FreshRSS){ .card-link title="Source Code" } + +- ![Kometa](https://assets.tylernguyen.wiki/logos/Kometa.png){ .twemoji } [Kometa (formerly plex-meta-manager)](https://github.com/meisnate12/Plex-Meta-Manager) +[:octicons-container-16:{ .docker }](https://hub.docker.com/r/kometateam/kometa){ .card-link title=Container} +[:fontawesome-regular-file-code:](https://github.com/Kometa-Team/Kometa){ .card-link title="Source Code" } + +- ![Kometa/ImageMaid](https://assets.tylernguyen.wiki/logos/Kometa.png){ .twemoji } [Kometa/ImageMaid](https://github.com/meisnate12/Plex-Meta-Manager) +[:octicons-container-16:{ .docker }](https://hub.docker.com/r/kometateam/imagemaid){ .card-link title=Container} + +- [giorgi-o/SkinPeek](https://github.com/giorgi-o/SkinPeek) +[:octicons-container-16:{ .docker }](https://github.com/users/giorgi-o/packages/container/package/skinpeek%2Fskinpeek){ .card-link title=Container} +[:fontawesome-regular-file-code:](https://github.com/giorgi-o/SkinPeek){ .card-link title="Source Code" } + +- ![rmcrackan/Libation](https://assets.tylernguyen.wiki/logos/libation.png){ .twemoji } [rmcrackan/Libation](https://github.com/rmcrackan/Libation) +[:octicons-container-16:{ .docker }](https://hub.docker.com/r/rmcrackan/libation/tags){ .card-link title=Container} +[:fontawesome-regular-file-code:](https://github.com/rmcrackan/Libation){ .card-link title="Source Code" } + +
    + +
    + +- :simple-mastodon:{ .mastodon } [Mastodon](https://joinmastodon.org/) +[:octicons-container-16:{ .docker }](https://github.com/mastodon/mastodon/pkgs/container/mastodon){ .card-link title=Container} + + /// success + Follow me on the Fediverse: [@tylernguyen@tylernguyen.social](https://tylernguyen.social/@tylernguyen) + /// + +
    + +
    + +- ![PostgreSQL](https://assets.tylernguyen.wiki/logos/PostgreSQL.svg){ .twemoji } [PostgreSQL](https://www.postgresql.org/) +[:octicons-container-16:{ .docker }](https://hub.docker.com/_/postgres){ .card-link title=Container} + +- ![Redis](https://assets.tylernguyen.wiki/logos/Redis.svg){ .twemoji } [Redis](https://redis.io/) +[:octicons-container-16:{ .docker }](https://hub.docker.com/_/redis){ .card-link title=Container} + +- :simple-elasticsearch:{ .elasticsearch } [Elasticsearch](https://www.elastic.co/elasticsearch) +[:octicons-container-16:{ .docker }](https://hub.docker.com/_/elasticsearch/tags){ .card-link title=Container} + +
    + +## Cloudflare Zero Trust + +![Cloudflare Zero Trust](https://assets.tylernguyen.wiki/logos/Cloudflare-Zero-Trust.svg){ align=right width=125 } + +I use Cloudflare Tunnel[^1] (part of the Zero Trust suite) to expose some services to the public, notably my [:simple-mastodon:{ .mastodon } Mastodon](https://tylernguyen.social/@tylernguyen) and Gitea instance. + +
    + +- :simple-cloudflare:{ .cloudflare } [cloudflare/cloudflared](https://github.com/cloudflare/cloudflared) +[:octicons-container-16:{ .docker }](https://hub.docker.com/r/cloudflare/cloudflared){ .card-link title=Container} + +
    + +[^1]: [Cloudflare Docs: How Cloudflare Tunnel Works :octicons-link-external-16:](https://developers.cloudflare.com/cloudflare-one/connections/connect-apps). + +[:octicons-link-external-16: Homepage](https://www.cloudflare.com/products/zero-trust/){ .md-button } +[:fontawesome-solid-money-bill:](https://www.cloudflare.com/plans/zero-trust-services/#overview){ .card-link title=Pricing} +[:fontawesome-regular-eye:](https://www.cloudflare.com/privacypolicy/){ .card-link title="Privacy Policy" } + +## Tailscale + +
    + +-
    +

    + ![Tailscale](https://assets.tylernguyen.wiki/logos/Tailscale-light.svg#only-light){ width=300 } + ![Tailscale](https://assets.tylernguyen.wiki/logos/Tailscale-dark.svg#only-dark){ width=300 } +

    +
    + +
    + +Tailscale is my preferred remote solution for accessing the home network. + +
    + +- ![tailscale/golink](https://assets.tylernguyen.wiki/logos/Tailscale.png){ .twemoji } [tailscale/golink](https://github.com/tailscale/golink) +[:octicons-container-16:{ .docker }](https://github.com/tailscale/golink/pkgs/container/golink){ .card-link title=Container} + +- ![tailscale-dev/tclip](https://assets.tylernguyen.wiki/logos/Tailscale.png){ .twemoji } [tailscale-dev/tclip](https://github.com/tailscale-dev/tclip) +[:octicons-container-16:{ .docker }](https://github.com/tailscale-dev/tclip/pkgs/container/tclip){ .card-link title=Container} + +
    + +[:octicons-link-external-16: Homepage](https://tailscale.com/){ .md-button } +[:fontawesome-solid-money-bill:](https://tailscale.com/pricing){ .card-link title=Pricing} +[:fontawesome-regular-eye:](https://tailscale.com/privacy-policy){ .card-link title="Privacy Policy" } +[:octicons-markdown-16:](https://tailscale.com/kb/1017/install?slug=kb&slug=1017&slug=install){ .card-link title=Documentation} +[:fontawesome-regular-file-code:](https://github.com/tailscale/tailscale){ .card-link title="Source Code" } diff --git a/docs/services.md b/docs/services.md new file mode 100644 index 0000000..9ecb06b --- /dev/null +++ b/docs/services.md @@ -0,0 +1,165 @@ +--- +icon: material/signal-cellular-outline +tags: + - Evergreen +--- + +# Services + +I hate subscriptions and actively avoid them when I can. This is mostly a financial decision but is also motivated by data privacy. The services here are mostly irreplaceable for their features and/or should not be self-hosted for security. + +## Productivity + +
    + +- :simple-todoist:{ .todoist } [Todoist](https://todoist.com/) + +
    + +## Media + +
    + +- :simple-audible:{ .audible } [Audible](https://www.audible.com/) +- :simple-pocketcasts:{ .pocketcasts } [Pocket Casts](https://pocketcasts.com/) +- ![Libby](https://assets.tylernguyen.wiki/logos/Libby.png){ .twemoji } [Libby](https://libbyapp.com) + +
    + +/// warning +Audible is a subsidiary of Amazon.[^1] + +Audible is only used for exclusives. + +eBooks and audiobooks are sold by Amazon with DRM. Buy directly from publisher and your local bookstore when possible! +/// + +/// tip +Consider archiving your audiobooks from Audible. See [rmcrackan/Libation](https://github.com/rmcrackan/Libation). +/// + +## 1Password + +
    + +-
    +

    + ![1Password](https://assets.tylernguyen.wiki/logos/1Password-light.svg#only-light){ width=200 } + ![1Password](https://assets.tylernguyen.wiki/logos/1Password-dark.svg#only-dark){ width=200 } +

    +
    + +
    + +/// warning +1Password is not open source. +/// + +1Password is robust, cross-platform, and well integrated. Its ease of use and wide adoption also makes sharing passwords effortless. + +1Password also offers various developer functions that I find cannot be matched by other offerings. These include: + +- SSH Authentication +- Git Commit Signing +- Developer Tokens and Secrets Automation +- [twpayne/chezmoi](https://www.chezmoi.io/user-guide/password-managers/1password/) integration for managing dotfiles +- [Visual Studio Code](https://developer.1password.com/docs/vscode/) integration for editing secrets + +/// info +1Password is [audited](https://support.onepassword.com/security-assessments/) on a regular basis and also documents their security in the [security white paper](https://1passwordstatic.com/files/security/1password-white-paper.pdf). +/// + +[:octicons-link-external-16: Homepage](https://1password.com/){ .md-button } +[:fontawesome-solid-money-bill:](https://1password.com/sign-up/){ .card-link title=Pricing } +[:fontawesome-regular-eye:](https://support.onepassword.com/1password-privacy/){ .card-link title="Privacy Policy" } +[:octicons-markdown-16:](https://developer.onepassword.com/){ .card-link title="Developer Documentation" } + +## Proton Unlimited + +
    + +-
    +

    + ![Proton](https://assets.tylernguyen.wiki/logos/Proton-logotype-purple-noborder.svg){ width=200 } +

    +
    + +
    + +
    + +- :simple-protonmail:{ .protonmail } [ProtonMail](https://protonmail.com/) + + /// warning + Email is an insecure form of communication by design. [^2] + /// + +
    + +
    + +- :simple-protonvpn:{ .protonvpn } [Proton VPN](https://protonvpn.com/) + + I use ProtonVPN purely for P2P traffic as it's one of the few VPN services that supports [port forwarding](https://protonvpn.com/blog/port-forwarding/). + + /// danger + VPNs do not provide anonymity.[^3] + /// + +
    + +
    + +- :simple-protondrive:{ .protondrive } [ProtonDrive](https://proton.me/drive) +- :simple-simplelogin:{ .simplelogin } [SimpleLogin](https://simplelogin.io/) + +
    + +[:octicons-link-external-16: Homepage](https://proton.me/){ .md-button } +[:simple-torbrowser:{.torproject }](http://o54hon2e2vj6c7m3aqqu6uyece65by3vgoxxhlqlsvkmacw6a7m7kiad.onion){ .card-link title="Onion Service" } +[:fontawesome-solid-money-bill:](https://proton.me/pricing){ .card-link title="Pricing" } +[:fontawesome-regular-eye:](https://proton.me/legal/privacy){ .card-link title="Privacy Policy" } +[:octicons-markdown-16:](https://mullvad.net/en/help/){ .card-link title=Documentation } + +## Cloudflare + +
    + +- :simple-cloudflare:{ .cloudflare } [Cloudflare Domain Registar](https://www.cloudflare.com/products/registrar/) + + Cloudflare offers at-cost pricing both for new registrations and renewals. + +- :simple-cloudflare:{ .cloudflare } [Cloudflare DNS](https://www.cloudflare.com/) +- :simple-cloudflare:{ .cloudflare } [Cloudflare R2](https://www.cloudflare.com/products/r2/) + + Cloudflare R2 hosts assets for this wiki, as well as for my [Mastodon instance](https://tylernguyen.social/@tylernguyen). + +- ![Cloudflare Workers](https://assets.tylernguyen.wiki/logos/Cloudflare-Workers.png){ .twemoji } [Cloudflare Workers](https://workers.cloudflare.com/) +- :simple-cloudflarepages:{ .cloudflarepages } [Cloudflare Pages](https://pages.cloudflare.com/) +- ![Cloudflare Zero Trust](https://assets.tylernguyen.wiki/logos/Cloudflare-Zero-Trust.svg){ .twemoji } [Cloudflare Zero Trust](https://www.cloudflare.com/zero-trust/) + +
    + +[:octicons-link-external-16: Homepage](https://cloudflare.com/){ .md-button } +[:fontawesome-regular-eye:](https://www.cloudflare.com/privacypolicy/){ .card-link title="Privacy Policy" } +[:octicons-markdown-16:](https://developers.cloudflare.com/){ .card-link title=Documentation } +[:octicons-typography-16:](https://blog.cloudflare.com/){ .card-link title=Blog } + +## Postmark + +
    + +- ![Postmark](https://assets.tylernguyen.wiki/logos/Postmark.png){ .twemoji } [Postmark](https://postmarkapp.com/) + +
    + +I mainly need transactional email for self-hosted apps, which send a very low volume. Postmark's free plan has been perfect for this. + +[:octicons-link-external-16: Homepage](https://postmarkapp.com/){ .md-button } +[:fontawesome-solid-money-bill:](https://postmarkapp.com/pricing){ .card-link title="Pricing" } +[:fontawesome-regular-eye:](https://postmarkapp.com/privacy-policy){ .card-link title="Privacy Policy" } +[:octicons-markdown-16:](https://postmarkapp.com/manual){ .card-link title=Documentation } + +[^1]: [Richard Stallman: Reasons not to buy from Amazon](https://stallman.org/amazon.html) +[^2]: [Privacy Guides: Email is an insecure form of communication by default](https://www.privacyguides.org/basics/email-security/) +[^3]: [Privacy Guides: VPN Overview](https://www.privacyguides.org/vpn/#vpn-overview) diff --git a/docs/software.md b/docs/software.md new file mode 100644 index 0000000..7efc3c9 --- /dev/null +++ b/docs/software.md @@ -0,0 +1,146 @@ +--- +icon: octicons/apps-16 +tags: + - Evergreen +--- + +# Software + +Though I do prefer free (as in freedom) software, I defer to the standard, popular choice if its open-source alternative is obviously lacking in features. + +More importantly, I only use software that adhere to the industry (usually open-source) standard and actively avoid any software that forces a new/proprietary implementation. + +## Firefox + +
    + +-
    +

    + ![Firefox](https://assets.tylernguyen.wiki/logos/Firefox-light.svg#only-light){ width=200 } + ![Firefox](https://assets.tylernguyen.wiki/logos/Firefox-dark.svg#only-dark){ width=200 } +

    +
    + +
    + +Firefox is open-source, privacy oriented, and customizable[^1]. + +[^1]: [Reddit: /r/FirefoxCSS](https://www.reddit.com/r/FirefoxCSS/top/?sort=top&t=all) + +uBlock Origin also works best on Firefox. [^2] + +[^2]: [gorhill/uBlock: uBlock Origin Works Best on Firefox](https://github.com/gorhill/uBlock/wiki/uBlock-Origin-works-best-on-Firefox) + +/// extension | Extensions +
    + +- :simple-ublockorigin:{ .ublockorigin } [uBlock Origin](https://addons.mozilla.org/en-US/firefox/addon/ublock-origin/) +- ![SponsorBlock](https://assets.tylernguyen.wiki/logos/Firefox_SponsorBlock.png){ .twemoji } [SponsorBlock](https://addons.mozilla.org/en-US/firefox/addon/sponsorblock/) +- ![TTV LOL Pro](https://assets.tylernguyen.wiki/logos/Firefox_TTV-LOL-Pro.png){ .twemoji } [TTV LOL Pro](https://github.com/younesaassila/ttv-lol-pro) +- :simple-1password:{ .onepassword } [1Password](https://1password.com/) + +
    +/// + +[:octicons-link-external-16: Homepage](https://firefox.com){ .md-button } +[:fontawesome-regular-eye:](https://www.mozilla.org/privacy/firefox/){ .card-link title="Privacy Policy" } +[:octicons-markdown-16:](https://firefox-source-docs.mozilla.org/){ .card-link title=Documentation} +[:fontawesome-regular-file-code:](https://hg.mozilla.org/mozilla-central){ .card-link title="Source Code" } +[:fontawesome-regular-heart:](https://donate.mozilla.org/){ .card-link title=Contribute } + +## Visual Studio Code + +
    + +-
    +

    + ![Visual Studio Code](https://assets.tylernguyen.wiki/logos/VSCode.svg#only-light){ width=100 } + ![Visual Studio Code](https://assets.tylernguyen.wiki/logos/VSCode-dark.svg#only-dark){ width=100 } +

    +
    + +
    + +I use Visual Studio Code is mainly for extensions and remote capabilities. + +//// collapse-code + +```json title="settings.json" + +--8<-- "https://gist.githubusercontent.com/tylernguyen/fd3271d4d2ab037e9a4bd43270866684/raw/b65f342c04b88800e16f0bdf8929ea51805af041/vscode_settings.json" + +``` + +//// + +/// extension | Extensions + +
    + +- ![Fluent Icons](https://assets.tylernguyen.wiki/logos/VSCode_Fluent-Icons.png){ .twemoji } [Fluent Icons](https://marketplace.visualstudio.com/items?itemName=miguelsolorio.fluent-icons) +- ![Comment Anchors](https://assets.tylernguyen.wiki/logos/VSCode_Comment-Anchors.png){ .twemoji } [Comment Anchors](https://marketplace.visualstudio.com/items?itemName=ExodiusStudios.comment-anchors) +- ![GitHub Repositories](https://assets.tylernguyen.wiki/logos/VSCode_GitHub-Repositories.png){ .twemoji } [GitHub Repositories](https://marketplace.visualstudio.com/items?itemName=GitHub.remotehub) +- ![GitHub Actions](https://assets.tylernguyen.wiki/logos/VSCode_GitHub-Actions.png){ .twemoji } [GitHub Actions](https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-github-actions) +- ![Block Sort](https://assets.tylernguyen.wiki/logos/VSCode_Block-Sort.png){ .twemoji } [Block Sort](https://marketplace.visualstudio.com/items?itemName=1nVitr0.blocksort) +- :simple-1password:{ .onepassword } [1Password](https://marketplace.visualstudio.com/items?itemName=1Password.op-vscode) +- ![Error Lens](https://assets.tylernguyen.wiki/logos/VSCode_Error-Lens.png){ .twemoji } [Error Lens](https://marketplace.visualstudio.com/items?itemName=usernamehw.errorlens) +- ![Tailscale](https://assets.tylernguyen.wiki/logos/Tailscale.png){ .twemoji } [Tailscale](https://marketplace.visualstudio.com/items?itemName=Tailscale.vscode-tailscale) + +
    +/// + +[:octicons-link-external-16: Homepage](https://code.visualstudio.com/){ .md-button } +[:fontawesome-regular-eye:](https://privacy.microsoft.com/en-US/privacystatement){ .card-link title="Privacy Policy" } +[:octicons-markdown-16:](https://code.visualstudio.com/docs){ .card-link title=Documentation} +[:fontawesome-regular-file-code:](https://github.com/microsoft/vscode){ .card-link title="Source Code" } + +## Media + +
    + +- ![NetNewsWire](https://assets.tylernguyen.wiki/logos/NetNewsWire.png){ .twemoji } [NetNewsWire](https://netnewswire.com/) +- ![Aidoku](https://assets.tylernguyen.wiki/logos/Aidoku.png){ .twemoji } [Aidoku](https://aidoku.app/) +- ![Plexamp](https://assets.tylernguyen.wiki/logos/Plexamp.png){ .twemoji } [Plexamp](https://plexamp.com/) +- :simple-vlcmediaplayer:{ .vlc } [VLC Media Player](https://www.videolan.org/vlc/) +- ![OBS](https://assets.tylernguyen.wiki/logos/OBS.svg){ .twemoji } [OBS Studio](https://obsproject.com/) + +
    + +## Files + +
    + +- ![Cryptomator](https://assets.tylernguyen.wiki/logos/Cryptomator.svg){ .twemoji } [Cryptomator](https://cryptomator.org/) +- ![Syncthing](https://assets.tylernguyen.wiki/logos/Syncthing.svg){ .twemoji } [Syncthing](https://syncthing.net/) + +
    + +## Static Site Generator + +
    + +- :simple-materialformkdocs:{ .materialformkdocs } [Material for MkDocs](https://squidfunk.github.io/mkdocs-material/) [*Insiders*](https://squidfunk.github.io/mkdocs-material/insiders/) +[:fontawesome-solid-money-bill:](https://github.com/sponsors/squidfunk){ .card-link title="Pricing" } +[:fontawesome-regular-file-code:](https://github.com/squidfunk/mkdocs-material){ .card-link title="Source Code" } +[:octicons-law-16:](https://github.com/squidfunk/mkdocs-material/blob/master/LICENSE){ .card-link title=License } + +
    + +/// example +This website is created using Material for MkDocs Insiders. +/// + +/// info +Material for MkDocs has a private development fork called Insiders. The subscription starts at $10 a month and gives access to early developments and features. +/// + +## Virtualization and Containers + +
    + +- :simple-docker:{ .docker } [Docker Desktop](https://www.docker.com/products/docker-desktop/) +[:fontawesome-solid-money-bill:](https://www.docker.com/pricing/){ .card-link title="Pricing" } +- ![OrbStack](https://assets.tylernguyen.wiki/logos/OrbStack.png){ .twemoji } [OrbStack](https://orbstack.dev/) +[:fontawesome-solid-money-bill:](https://orbstack.dev/pricing){ .card-link title="Pricing" } + +
    diff --git a/docs/stylesheets/colors.css b/docs/stylesheets/colors.css new file mode 100644 index 0000000..a6e613f --- /dev/null +++ b/docs/stylesheets/colors.css @@ -0,0 +1,323 @@ +.solarized-yellow { + color: #b58900; +} + +.solarized-orange { + color: #cb4b16; +} + +.solarized-red { + color: #dc322f; +} + +.solarized-magenta { + color: #d33682; +} + +.solarized-violet { + color: #6c71c4; +} + +.solarized-blue { + color: #268bd2; +} + +.solarized-cyan { + color: #2aa198; +} + +.solarized-green { + color: #859900; +} + +.anilist { + color: #02a9ff; +} + +.apple { + color: #000000; +} + +.appstore { + color: #0d96f6; +} + +.audible { + color: #f8991c; +} + +.boardgamegeek { + color: #FF5100; +} + +.cloudflare { + color: #f38020; +} + +.cloudflarepages { + color: #f38020; +} + +.css3 { + color: #1572B6; +} + +.docker { + color: #2496ed; +} + +.elasticsearch { + color: #005571; +} + +.firefox { + color: #ff7139; +} + +.flathub { + color: #4a86cf; +} + +.flatpak { + color: #4A90D9; +} + +.forgejo { + color: #FB923C; +} + +.git { + color: #f05032; +} + +.github { + color: #181717; +} + +.githubactions { + color: #2088FF; +} + +.gitea { + color: #609926; +} + +.gnubash { + color: #4eaa25; +} + +.gnuprivacyguard { + color: #0093dd; +} + +.gog { + color: #86328A; +} + +.goodreads { + color: #372213; +} + +.googleplay { + color: #414141; +} + +.homebrew { + color: #fbb040; +} + +.html5 { + color: #E34F26; +} + +.icloud { + color: #3693f3; +} + +.ifixit { + color: #0071CE; +} + +.imdb { + color: #F5C518; +} + +.ios { + color: #000000; +} + +.javascript { + color: #F7DF1E; +} + +.json { + color: #000000; +} + +.linux { + color: #000000; +} + +.lua { + color: #2C2D72; +} + +.mastodon { + color: #6364FF; +} + +.materialdesignicons { + color: #2196F3; +} + +.materialformkdocs { + color: #526CFE; +} + +.neovim { + color: #57A143; +} + +.obsstudio { + color: #302E31; +} + +.onepassword { + color: #3B66BC; +} + +.openzfs { + color: #2A667F; +} + +.plex { + color: #ebaf00; +} + +.pocket { + color: #ef3f56; +} + +.pocketcasts { + color: #f43e37; +} + +.postgresql { + color: #4169E1; +} + +.posthog { + color: #000000; +} + +.proton { + color: #6d4aff; +} + +.protondrive { + color: #eb508d; +} + +.protonmail { + color: #6d4aff; +} + +.protonvpn { + color: #66deb1; +} + +.python { + color: #3776AB; +} + +.qmk { + color: #333333; +} + +.r { + color: #276DC3; +} + +.raycast { + color: #FF6363; +} + +.redis { + color: #DC382D; +} + +.riotgames { + color: #EB0029; +} + +.rottentomatoes { + color: #fa320a; +} + +.rss { + color: #ffa500; +} + +.sidekiq { + color: #B1003E; +} + +.simpleicons { + color: #111111; +} + +.simplelogin { + color: #EA319F; +} + +.steamdb { + color: #000000; +} + +.sqlite { + color: #003b57; +} + +.tmdb { + color: #01B4E4; +} + +.todoist { + color: #e44332; +} + +.torproject { + color: #7e4798; +} + +.ublockorigin { + color: #800000; +} + +.unraid { + color: #f15a2c; +} + +.yaml { + color: #CB171E; +} + +.vlc { + color: #ff8800; +} + +.visualstudiocode { + color: #007acc; +} + +.wezterm { + color: #4E49EE; +} + +.windows { + color: #0078d4; +} + +.youtube { + color: #FF0000; +} diff --git a/docs/stylesheets/fonts.css b/docs/stylesheets/fonts.css new file mode 100644 index 0000000..3567679 --- /dev/null +++ b/docs/stylesheets/fonts.css @@ -0,0 +1,90 @@ +@font-face { + font-family: "BerkeleyMono"; + src: url("/assets/font/BerkeleyMonoVariable/BerkeleyMonoVariable-Regular.woff2") format("woff2"); + font-display: swap; + font-weight: 100 150; + font-style: normal; +} + +@font-face { + font-family: "BerkeleyMono"; + src: url("/assets/font/BerkeleyMonoVariable/BerkeleyMonoVariable-Italic.woff2") format("woff2"); + font-display: swap; + font-weight: 100 150; + font-style: italic; +} + +.md-typeset h1 { + margin: 0 0 .75em; + font-size: xx-large; + font-weight: 130; + color: rgb(var(--solarized-orange)); + text-decoration: underline; + text-decoration-color: rgb(var(--solarized-orange)); +} + +.md-typeset h2 { + font-weight: 120; +} + +.md-typeset p { + font-weight: 110; + font-size: medium; + line-height: 1.6; +} + +.md-typeset figcaption { + font-weight: 100; + font-size: small; +} + +.md-ellipsis { + font-weight: 100; +} + +.md-meta { + color: var(--md-default-fg-color--light); + font-size: small; + padding: 2px; + margin-bottom: 20px; +} + +.md-grid { + font-weight: 100; +} + +.md-search-result .md-typeset { + font-size: 1.2em; + line-height: 1.5; + padding-bottom: .5em; +} + +.md-sidebar { + padding: 0.9rem 0; +} + +.md-content__inner { + padding: 0; +} + +.md-typeset .footnote ol li blockquote, +.md-typeset .footnote ol li p, +.md-typeset .footnote ul li blockquote, +.md-typeset .footnote ul li p { + font-size: small; +} + +.md-post__content.md-typeset h2 { + font-size: x-large; + margin: 0; +} + +.md-post--excerpt .md-post__header { + align-items: normal; + gap: .6rem; + min-height: 1.6rem; +} + +.md-typeset .md-button { + font-weight: 120; +} diff --git a/docs/stylesheets/solarized.css b/docs/stylesheets/solarized.css new file mode 100644 index 0000000..ecb6028 --- /dev/null +++ b/docs/stylesheets/solarized.css @@ -0,0 +1,793 @@ +:root>* { + --solarized-base03: 0, 43, 54; + --solarized-base02: 7, 54, 66; + --solarized-base01: 88, 110, 117; + --solarized-base00: 101, 123, 131; + --solarized-base0: 131, 148, 150; + --solarized-base1: 147, 161, 161; + --solarized-base2: 238, 232, 213; + --solarized-base3: 253, 246, 227; + --solarized-blue: 38, 139, 210; + --solarized-cyan: 42, 161, 152; + --solarized-green: 133, 153, 0; + --solarized-magenta: 211, 54, 130; + --solarized-orange: 203, 75, 22; + --solarized-red: 220, 50, 47; + --solarized-violet: 108, 113, 196; + --solarized-yellow: 181, 137, 0; + --md-search-result-icon: url('data:image/svg+xml, '); + /* LINK https: //github.com/squidfunk/mkdocs-material/blob/master/src/templates/assets/stylesheets/main/_colors.scss*/ + --md-admonition-icon--extension: url('data:image/svg+xml, '); + --md-admonition-icon--code: url('data:image/svg+xml, '); + --md-admonition-icon--setting: url('data:image/svg+xml, '); + --md-admonition-icon--featured: url('data:image/svg+xml, '); + --md-admonition-icon--announce: url('data:image/svg+xml, '); + --md-admonition-icon--screenshot: url('data:image/svg+xml, '); + /* LINK https://github.com/squidfunk/mkdocs-material/blob/master/src/templates/assets/stylesheets/main/integrations/_mermaid.scss */ + --md-mermaid-edge-color: var(--md-primary-fg-color); + --md-mermaid-node-bg-color: var(--md-default-bg-color--light); + --md-mermaid-node-fg-color: var(--md-default-fg-color--light); + --md-mermaid-label-bg-color: var(--md-default-bg-color); + --md-mermaid-label-fg-color: var(--md-default-fg-color); +} + +[data-md-color-scheme="default"] { + --md-default-bg-color: rgb(var(--solarized-base3)); + --md-default-bg-color--light: rgb(var(--solarized-base2)); + --md-default-bg-color--lighter: rgb(var(--solarized-base1)); + --md-default-bg-color--lightest: rgb(var(--solarized-base0)); + --md-default-fg-color: rgb(var(--solarized-base02)); + --md-default-fg-color--light: rgb(var(--solarized-base01)); + --md-default-fg-color--lighter: rgb(var(--solarized-base00)); + --md-default-fg-color--lightest: rgb(var(--solarized-base0)); + --md-primary-bg-color: rgb(var(--solarized-base02)); + --md-primary-fg-color--dark: rgb(var(--solarized-base2)); + --md-primary-fg-color: rgb(var(--solarized-green)); + --md-primary-fg-color--light: rgba(var(--solarized-green), 0.2); + --md-accent-fg-color: rgb(var(--solarized-cyan)); + --md-footer-fg-color: rgb(var(--solarized-base03)); + --md-footer-fg-color--light: rgb(var(--solarized-base02)); + --md-footer-fg-color--lighter: rgb(var(--solarized-base01)); + --md-footer-bg-color: rgb(var(--solarized-base3)); + --md-footer-bg-color--dark: rgb(var(--solarized-base2)); + --md-code-fg-color: rgb(var(--solarized-base02)); + --md-code-bg-color: rgb(var(--solarized-base2)); + --md-code-hl-color: rgb(var(--solarized-base02)); + --md-typeset-kbd-color: rgb(var(--solarized-base2)); + --md-typeset-kbd-border-color: rgb(var(--solarized-green)); + --md-typeset-kbd-accent-color: rgb(var(--solarized-base3)); +} + +[data-md-color-scheme="slate"] { + --md-default-bg-color: rgb(var(--solarized-base03)); + --md-default-bg-color--light: rgb(var(--solarized-base02)); + --md-default-bg-color--lighter: rgb(var(--solarized-base01)); + --md-default-bg-color--lightest: rgb(var(--solarized-base00)); + --md-default-fg-color: rgb(var(--solarized-base0)); + --md-default-fg-color--light: rgb(var(--solarized-base00)); + --md-default-fg-color--lighter: rgb(var(--solarized-base01)); + --md-default-fg-color--lightest: rgb(var(--solarized-base02)); + --md-primary-bg-color: rgb(var(--solarized-base2)); + --md-primary-fg-color--dark: rgb(var(--solarized-base02)); + --md-primary-fg-color: rgb(var(--solarized-cyan)); + --md-primary-fg-color--light: rgba(var(--solarized-cyan), 0.2); + --md-accent-fg-color: rgb(var(--solarized-green)); + --md-footer-fg-color: rgb(var(--solarized-base2)); + --md-footer-fg-color--light: rgb(var(--solarized-base1)); + --md-footer-fg-color--lighter: rgb(var(--solarized-base00)); + --md-footer-bg-color: rgb(var(--solarized-base03)); + --md-footer-bg-color--dark: rgb(var(--solarized-base02)); + --md-code-fg-color: rgb(var(--solarized-base2)); + --md-code-bg-color: rgb(var(--solarized-base02)); + --md-code-hl-color: rgb(var(--solarized-base2)); + --md-typeset-kbd-color: rgb(var(--solarized-base02)); + --md-typeset-kbd-border-color: rgb(var(--solarized-cyan)); + --md-typeset-kbd-accent-color: rgb(var(--solarized-base03)); +} + +.md-grid { + max-width: 1660px; +} + +/* NOTE Header: Hide shadow under header */ +.md-header[data-md-state="shadow"], +.md-header--shadow { + box-shadow: none; +} + +/* ANCHOR Header Recolors */ +.md-header { + background-color: var(--md-default-bg-color--light); +} + +.md-tabs { + background-color: var(--md-primary-fg-color--light); + border-top: .05rem solid var(--md-primary-fg-color); +} + +.md-footer { + border-top: .05rem solid var(--md-primary-fg-color); +} + +.md-footer__title { + color: var(--md-footer-fg-color--light); +} + +.md-footer__link { + margin-top: 10px; +} + +.md-nav__source { + background-color: var(--md-primary-fg-color--light); + border-top: .05rem solid var(--md-primary-fg-color); +} + +.md-tabs__item--active .md-tabs__link { + color: var(--md-primary-fg-color); + text-decoration: underline solid var(--md-primary-fg-color); +} + +.md-banner { + background-color: var(--md-primary-fg-color--light); +} + +/* NOTE Icon Recolor */ +.md-source__icon { + color: #f05032; +} + +.md-social__link:nth-child(1) svg { + fill: #6364FF; +} + +.md-social__link:nth-child(2) svg { + fill: #181717; +} + +.md-social__link:nth-child(3) svg { + fill: #609926; +} + +/* ANCHOR Search */ +.md-search__form { + border: 1px solid var(--md-primary-fg-color); + background-color: var(--md-default-bg-color) !important; +} + +.md-search__icon, +.md-search-result__icon, +.md-search__input::placeholder { + color: var(--md-default-fg-color) !important; +} + +.md-search-result__meta { + background-color: var(--md-default-bg-color--light); +} + +/* SECTION Pygments */ + +.highlight span.filename { + border-top-left-radius: .3rem; + border-top-right-radius: .3rem; + border-bottom: .05rem solid var(--md-primary-fg-color); +} +.highlight .bp { color: rgb(var(--solarized-blue)); } /* Name.Builtin.Pseudo */ +.highlight .c { color: rgb(var(--solarized-base00)); } /* Comment */ +.highlight .c1 { color: rgb(var(--solarized-base00)); } /* Comment.Single */ +.highlight .cm { color: rgb(var(--solarized-base00)); } /* Comment.Multiline */ +.highlight .cp { color: rgb(var(--solarized-green)); } /* Comment.Preproc */ +.highlight .cs { color: rgb(var(--solarized-green)); } /* Comment.Special */ +.highlight .err { color: rgb(var(--solarized-base01)); } /* Error */ +.highlight .g { color: rgb(var(--solarized-base01)); } /* Generic */ +.highlight .ge { + color: rgb(var(--solarized-base01)); + font-style: italic; +} /* Generic.Emph */ +.highlight .gd { color: rgb(var(--solarized-cyan)); } /* Generic.Deleted */ +.highlight .gh { color: rgb(var(--solarized-orange)); } /* Generic.Heading */ +.highlight .gi { color: rgb(var(--solarized-green)); } /* Generic.Inserted */ +.highlight .go { color: rgb(var(--solarized-base01)); } /* Generic.Output */ +.highlight .gp { color: rgb(var(--solarized-base01)); } /* Generic.Prompt */ +.highlight .gr { color: rgb(var(--solarized-red)); } /* Generic.Error */ +.highlight .gs { + color: rgb(var(--solarized-base01)); + font-weight: bold; +} /* Generic.Strong */ +.highlight .gt { color: rgb(var(--solarized-base01)); } /* Generic.Traceback */ +.highlight .gu { color: rgb(var(--solarized-orange)); } /* Generic.Subheading */ +.highlight .il { color: rgb(var(--solarized-cyan)); } /* Literal.Number.Integer.Long */ +.highlight .k { color: rgb(var(--solarized-green)); } /* Keyword */ +.highlight .kc { color: rgb(var(--solarized-cyan)); } /* Keyword.Constant */ +.highlight .kd { color: rgb(var(--solarized-cyan)); } /* Keyword.Declaration */ +.highlight .kn { color: rgb(var(--solarized-green)); } /* Keyword.Namespace */ +.highlight .kp { color: rgb(var(--solarized-green)); } /* Keyword.Pseudo */ +.highlight .kr { color: rgb(var(--solarized-blue)); } /* Keyword.Reserved */ +.highlight .kt { color: rgb(var(--solarized-orange)); } /* Keyword.Type */ +.highlight .l { color: rgb(var(--solarized-base01)); } /* Literal */ +.highlight .ld { color: rgb(var(--solarized-base01)); } /* Literal.Date */ +.highlight .m { color: rgb(var(--solarized-cyan)); } /* Literal.Number */ +.highlight .mf { color: rgb(var(--solarized-cyan)); } /* Literal.Number.Float */ +.highlight .mh { color: rgb(var(--solarized-cyan)); } /* Literal.Number.Hex */ +.highlight .mi { color: rgb(var(--solarized-cyan)); } /* Literal.Number.Integer */ +.highlight .mo { color: rgb(var(--solarized-cyan)); } /* Literal.Number.Oct */ +.highlight .n { color: rgb(var(--solarized-base01)); } /* Name */ +.highlight .na { color: rgb(var(--solarized-base01)); } /* Name.Attribute */ +.highlight .nb { color: rgb(var(--solarized-blue)); } /* Name.Builtin */ +.highlight .nc { color: rgb(var(--solarized-blue)); } /* Name.Class */ +.highlight .nd { color: rgb(var(--solarized-blue)); } /* Name.Decorator */ +.highlight .ne { color: rgb(var(--solarized-orange)); } /* Name.Exception */ +.highlight .nf { color: rgb(var(--solarized-blue)); } /* Name.Function */ +.highlight .ni { color: rgb(var(--solarized-orange)); } /* Name.Entity */ +.highlight .nl { color: rgb(var(--solarized-base01)); } /* Name.Label */ +.highlight .nn { color: rgb(var(--solarized-base01)); } /* Name.Namespace */ +.highlight .no { color: rgb(var(--solarized-blue)); } /* Name.Constant */ +.highlight .nt { color: rgb(var(--solarized-blue)); } /* Name.Tag */ +.highlight .nv { color: rgb(var(--solarized-blue)); } /* Name.Variable */ +.highlight .nx { color: rgb(var(--solarized-base01)); } /* Name.Other */ +.highlight .o { color: rgb(var(--solarized-base01)); } /* Operator */ +.highlight .ow { color: rgb(var(--solarized-green)); } /* Operator.Word */ +.highlight .p { color: rgb(var(--solarized-base01)); } /* Punctuation */ +.highlight .py { color: rgb(var(--solarized-base01)); } /* Name.Property */ +.highlight .s { color: rgb(var(--solarized-cyan)); } /* Literal.String */ +.highlight .s1 { color: rgb(var(--solarized-cyan)); } /* Literal.String.Single */ +.highlight .s2 { color: rgb(var(--solarized-cyan)); } /* Literal.String.Double */ +.highlight .sb { color: rgb(var(--solarized-cyan)); } /* Literal.String.Backtick */ +.highlight .sc { color: rgb(var(--solarized-cyan)); } /* Literal.String.Char */ +.highlight .sd { color: rgb(var(--solarized-base01)); } /* Literal.String.Doc */ +.highlight .se { color: rgb(var(--solarized-orange)); } /* Literal.String.Escape */ +.highlight .sh { color: rgb(var(--solarized-base01)); } /* Literal.String.Heredoc */ +.highlight .si { color: rgb(var(--solarized-cyan)); } /* Literal.String.Interpol */ +.highlight .sr { color: rgb(var(--solarized-red)); } /* Literal.String.Regex */ +.highlight .ss { color: rgb(var(--solarized-cyan)); } /* Literal.String.Symbol */ +.highlight .sx { color: rgb(var(--solarized-cyan)); } /* Literal.String.Other */ +.highlight .vc { color: rgb(var(--solarized-blue)); } /* Name.Variable.Class */ +.highlight .vg { color: rgb(var(--solarized-blue)); } /* Name.Variable.Global */ +.highlight .vi { color: rgb(var(--solarized-blue)); } /* Name.Variable.Instance */ +.highlight .w { color: rgb(var(--solarized-base01)); } /* Text.Whitespace */ +.highlight .x { color: rgb(var(--solarized-orange)); } /* Other */ + +/* !SECTION Pygments */ + +/* SECTION Admonition */ + +/* NOTE Classic Admonitions */ +/* LINK https://squidfunk.github.io/mkdocs-material/reference/admonitions/?h=admoni#classic-admonitions */ +.md-typeset .admonition, +.md-typeset details { + border-width: 0; + border-left-width: 4px; +} + +/* NOTE Slate: Admonition Shadow */ +[data-md-color-scheme="slate"] .md-typeset .admonition { + box-shadow: rgba(0, 0, 0, 0.35) 0px 2px 10px; +} + +/* NOTE Slate: Darkened Title Backgrounds */ +[data-md-color-scheme="slate"] .md-typeset .admonition-title{ + background-color: rgba(17, 18, 23, 0.7); +} + +/* ANCHOR Default Admonition Recolors */ +/* NOTE Note Admonition */ +.md-typeset .admonition.note, +.md-typeset details.note { + border-color: rgb(var(--solarized-blue)); +} + +[data-md-color-scheme="default"] .md-typeset .note>.admonition-title, +[data-md-color-scheme="default"] .md-typeset .note>summary { + background-color: rgba(var(--solarized-blue), 0.2); +} + +.md-typeset .note>.admonition-title::before, +.md-typeset .note>summary::before { + background-color: rgb(var(--solarized-blue)); +} + +/* NOTE Abstract Admonition */ +.md-typeset .admonition.abstract, +.md-typeset details.abstract { + border-color: rgb(var(--solarized-blue)); +} + +[data-md-color-scheme="default"] .md-typeset .abstract>.admonition-title, +[data-md-color-scheme="default"] .md-typeset .abstract>summary { + background-color: rgba(var(--solarized-blue), 0.2); +} + +.md-typeset .abstract>.admonition-title::before, +.md-typeset .abstract>summary::before { + background-color: rgb(var(--solarized-blue)); +} + +/* NOTE Info Admonition */ +.md-typeset .admonition.info, +.md-typeset details.info { + border-color: rgb(var(--solarized-cyan)); +} + +[data-md-color-scheme="default"] .md-typeset .info>.admonition-title, +[data-md-color-scheme="default"] .md-typeset .info>summary { + background-color: rgba(var(--solarized-cyan), 0.2); +} + +.md-typeset .info>.admonition-title::before, +.md-typeset .info>summary::before { + background-color: rgb(var(--solarized-cyan)); +} + +/* NOTE Tip Admonition */ +.md-typeset .admonition.tip, +.md-typeset details.tip { + border-color: rgb(var(--solarized-yellow)); +} + +[data-md-color-scheme="default"] .md-typeset .tip>.admonition-title, +[data-md-color-scheme="default"] .md-typeset .tip>summary { + background-color: rgba(var(--solarized-yellow), 0.2); +} + +.md-typeset .tip>.admonition-title::before, +.md-typeset .tip>summary::before { + background-color: rgb(var(--solarized-yellow)); +} + +/* NOTE Question Admonition */ +.md-typeset .admonition.question, +.md-typeset details.question { + border-color: rgb(var(--solarized-cyan)); +} + +[data-md-color-scheme="default"] .md-typeset .question>.admonition-title, +[data-md-color-scheme="default"] .md-typeset .question>summary { + background-color: rgba(var(--solarized-cyan), 0.2); +} + +.md-typeset .question>.admonition-title::before, +.md-typeset .question>summary::before { + background-color: rgb(var(--solarized-cyan)); +} + +/* NOTE Success Admonition */ +.md-typeset .admonition.success, +.md-typeset details.success { + border-color: rgb(var(--solarized-green)); +} + +[data-md-color-scheme="default"] .md-typeset .success>.admonition-title, +[data-md-color-scheme="default"] .md-typeset .success>summary { + background-color: rgba(var(--solarized-green), 0.2); +} + +.md-typeset .success>.admonition-title::before, +.md-typeset .success>summary::before { + background-color: rgb(var(--solarized-green)); +} + +/* NOTE Warning Admonition */ +.md-typeset .admonition.warning, +.md-typeset details.warning { + border-color: rgb(var(--solarized-orange)); +} + +[data-md-color-scheme="default"] .md-typeset .warning>.admonition-title, +[data-md-color-scheme="default"] .md-typeset .warning>summary { + background-color: rgba(var(--solarized-orange), 0.2); +} + +.md-typeset .warning>.admonition-title::before, +.md-typeset .warning>summary::before { + background-color: rgb(var(--solarized-orange)); +} + +/* NOTE Failure Admonition */ +.md-typeset .admonition.failure, +.md-typeset details.failure { + border-color: rgb(var(--solarized-red)); +} + +[data-md-color-scheme="default"] .md-typeset .failure>.admonition-title, +[data-md-color-scheme="default"] .md-typeset .failure>summary { + background-color: rgba(var(--solarized-red), 0.2); +} + +.md-typeset .failure>.admonition-title::before, +.md-typeset .failure>summary::before { + background-color: rgb(var(--solarized-red)); +} + +/* NOTE Danger Admonition */ +.md-typeset .admonition.danger, +.md-typeset details.danger { + border-color: rgb(var(--solarized-red)); +} + +[data-md-color-scheme="default"] .md-typeset .danger>.admonition-title, +[data-md-color-scheme="default"] .md-typeset .danger>summary { + background-color: rgba(var(--solarized-red), 0.2); +} + +.md-typeset .danger>.admonition-title::before, +.md-typeset .danger>summary::before { + background-color: rgb(var(--solarized-red)); +} + +/* NOTE Bug Admonition */ +.md-typeset .admonition.bug, +.md-typeset details.bug { + border-color: rgb(var(--solarized-magenta)); +} + +[data-md-color-scheme="default"] .md-typeset .bug>.admonition-title, +[data-md-color-scheme="default"] .md-typeset .bug>summary { + background-color: rgba(var(--solarized-magenta), 0.2); +} + +.md-typeset .bug>.admonition-title::before, +.md-typeset .bug>summary::before { + background-color: rgb(var(--solarized-magenta)); +} + +/* NOTE Example Admonition */ +.md-typeset .admonition.example, +.md-typeset details.example { + border-color: rgb(var(--solarized-violet)); +} + +[data-md-color-scheme="default"] .md-typeset .example>.admonition-title, +[data-md-color-scheme="default"] .md-typeset .example>summary { + background-color: rgba(var(--solarized-violet), 0.2); +} + +.md-typeset .example>.admonition-title::before, +.md-typeset .example>summary::before { + background-color: rgb(var(--solarized-violet)); +} + +/* NOTE Quote Admonition */ +.md-typeset .admonition.quote, +.md-typeset details.quote { + border-color: rgb(var(--solarized-base01)); +} + +[data-md-color-scheme="default"] .md-typeset .quote>.admonition-title, +[data-md-color-scheme="default"] .md-typeset .quote>summary { + background-color: rgba(var(--solarized-base01), 0.2); +} + +.md-typeset .quote>.admonition-title::before, +.md-typeset .quote>summary::before { + background-color: rgb(var(--solarized-base01)); +} + +/* ANCHOR Custom Admonitions */ +/* NOTE Extension Admonition */ +.md-typeset .admonition.extension, +.md-typeset details.extension { + border-color: rgb(var(--solarized-violet)); +} + +[data-md-color-scheme="default"] .md-typeset .extension>.admonition-title, +[data-md-color-scheme="default"] .md-typeset .extension>summary { + background-color: rgba(var(--solarized-violet), 0.2); +} + +.md-typeset .extension>.admonition-title::before, +.md-typeset .extension>summary::before { + background-color: rgb(var(--solarized-violet)); + -webkit-mask-image: var(--md-admonition-icon--extension); + mask-image: var(--md-admonition-icon--extension); +} + +/* NOTE Code Admonition */ +.md-typeset .admonition.code, +.md-typeset details.code { + border-color: rgb(var(--solarized-base01)); +} + +[data-md-color-scheme="default"] .md-typeset .code>.admonition-title, +[data-md-color-scheme="default"] .md-typeset .code>summary { + background-color: rgba(var(--solarized-base01), 0.2); +} + +.md-typeset .code>.admonition-title::before, +.md-typeset .code>summary::before { + background-color: rgb(var(--solarized-base01)); + -webkit-mask-image: var(--md-admonition-icon--code); + mask-image: var(--md-admonition-icon--code); +} + +/* NOTE Setting Admonition */ +.md-typeset .admonition.setting, +.md-typeset details.setting { + border-color: rgb(var(--solarized-base01)); +} + +[data-md-color-scheme="default"] .md-typeset .setting>.admonition-title, +[data-md-color-scheme="default"] .md-typeset .setting>summary { + background-color: rgba(var(--solarized-base01), 0.2); +} + +.md-typeset .setting>.admonition-title::before, +.md-typeset .setting>summary::before { + background-color: rgb(var(--solarized-base01)); + -webkit-mask-image: var(--md-admonition-icon--setting); + mask-image: var(--md-admonition-icon--setting); +} + +/* NOTE Featured Admonition */ +.md-typeset .admonition.featured, +.md-typeset details.featured { + border-color: rgb(var(--solarized-green)); +} + +[data-md-color-scheme="default"] .md-typeset .featured>.admonition-title, +[data-md-color-scheme="default"] .md-typeset .featured>summary { + background-color: rgba(var(--solarized-green), 0.2); +} + +.md-typeset .featured>.admonition-title::before, +.md-typeset .featured>summary::before { + background-color: rgb(var(--solarized-green)); + -webkit-mask-image: var(--md-admonition-icon--featured); + mask-image: var(--md-admonition-icon--featured); +} + +/* NOTE Announcement Admonition */ +.md-typeset .admonition.announce, +.md-typeset details.announce { + border-color: rgb(var(--solarized-red)); +} + +[data-md-color-scheme="default"] .md-typeset .announce>.admonition-title, +[data-md-color-scheme="default"] .md-typeset .announce>summary { + background-color: rgba(var(--solarized-red), 0.2); +} + +.md-typeset .announce>.admonition-title::before, +.md-typeset .announce>summary::before { + background-color: rgb(var(--solarized-red)); + -webkit-mask-image: var(--md-admonition-icon--announce); + mask-image: var(--md-admonition-icon--announce); +} + +/* NOTE Screenshot Admonition */ +.md-typeset .admonition.screenshot, +.md-typeset details.screenshot { + border-color: rgb(var(--solarized-orange)); +} + +[data-md-color-scheme="default"] .md-typeset .screenshot>.admonition-title, +[data-md-color-scheme="default"] .md-typeset .screenshot>summary { + background-color: rgba(var(--solarized-orange), 0.2); +} + +.md-typeset .screenshot>.admonition-title::before, +.md-typeset .screenshot>summary::before { + background-color: rgb(var(--solarized-orange)); + -webkit-mask-image: var(--md-admonition-icon--screenshot); + mask-image: var(--md-admonition-icon--screenshot); +} + +/* !SECTION Admonitions */ + +/* ANCHOR Grids */ + +.md-typeset .grid.cards> :is(ul, ol)>li, +.md-typeset .grid>.card { + /* Firefox */ + color: var(--md-typeset-color); + background: var(--md-default-bg-color); + border: 1px solid var(--md-primary-fg-color); + border-radius: 6px; + box-shadow: rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, + rgba(0, 0, 0, 0.05) 0px 1px 3px 0px, rgba(0, 0, 0, 0.05) 0px 1px 2px -1px; + transition: none; + position: relative; +} + +.md-typeset .grid.cards> :-webkit-any(ul, ol)>li, +.md-typeset .grid>.card { + /* Webkit */ + color: var(--md-typeset-color); + background: var(--md-default-bg-color); + border: 1px solid var(--md-primary-fg-color); + border-radius: 6px; + box-shadow: rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, + rgba(0, 0, 0, 0.05) 0px 1px 3px 0px, rgba(0, 0, 0, 0.05) 0px 1px 2px -1px; + transition: none; + position: relative; +} + +.md-typeset .grid.cards> :is(ul, ol)>li:is(:focus-within, :hover), +.md-typeset .grid>.card:is(:focus-within, :hover) { + /* Firefox */ + box-shadow: rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, + rgba(0, 0, 0, 0.05) 0px 1px 3px 0px, rgba(0, 0, 0, 0.05) 0px 1px 2px -1px; + border-color: var(--md-accent-fg-color); +} + +.md-typeset .grid.cards> :-webkit-any(ul, ol)>li:-webkit-any(:focus-within, :hover) { + /* Webkit */ + box-shadow: rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, + rgba(0, 0, 0, 0.05) 0px 1px 3px 0px, rgba(0, 0, 0, 0.05) 0px 1px 2px -1px; + border-color: var(--md-accent-fg-color); +} + +/* NOTE Card links */ +.md-typeset .card-link { + color: var(--md-default-fg-color--light); +} + +.md-typeset .card-link:hover { + color: var(--md-accent-fg-color); +} + +.md-typeset .card-link, +.card-link.twemoji:not(:first-child) { + padding-left: 0.5em; +} + +/* NOTE Select/Copy Button on Code Blocks */ +.md-code__button { + color: var(--md-default-fg-color--light); +} + +:hover>.md-code__nav, +.md-code__nav:hover, +.md-code__nav { + background-color: var(--md-default-bg-color--light); + font-size: larger; +} + +/* NOTE Tag */ +.md-typeset .md-tag { + color: var(--md-default-fg-color); + background-color: var(--md-primary-fg-color--light); + border-radius: .125em; + margin-right: 0.5em; + font-weight: 100; + font-size: small; +} + +.md-post__back { + border-bottom: 0; + margin-bottom: 0; +} + +/* ANCHOR Collapsible Code Blocks */ +.md-typeset .collapse-code { + position: relative; + margin-top: 1em; + margin-bottom: 1em +} + +.md-typeset .collapse-code pre, +.md-typeset .collapse-code .highlighttable { + margin-top: 0; + margin-bottom: 0 +} + +.md-typeset .collapse-code input { + display: none +} + +.md-typeset .collapse-code input~.code-footer { + width: 100%; + margin: 0; + padding: .25em .5em .25em 0 +} + +[data-md-color-scheme="default"] .highlight span.filename { + background: rgba(var(--solarized-green), 0.2); +} + +[data-md-color-scheme="slate"] .highlight span.filename { + background: rgba(var(--solarized-cyan), 0.4); +} + +[data-md-color-scheme="default"] .md-typeset .collapse-code input~.code-footer label { + position: relative; + margin: .05em; + padding: .15em .8em; + color: var(--md-primary-bg-color); + background-color: rgba(var(--solarized-green), 0.6); + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + -webkit-mask-size: contain; + mask-size: contain; + border-radius: .1rem; + cursor: pointer; + content: "" +} + +[data-md-color-scheme="slate"] .md-typeset .collapse-code input~.code-footer label { + position: relative; + margin: .05em; + padding: .15em .8em; + color: var(--md-primary-bg-color); + background-color: rgba(var(--solarized-cyan), 0.6); + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + -webkit-mask-size: contain; + mask-size: contain; + border-radius: .1rem; + cursor: pointer; + content: "" +} + +.md-typeset .collapse-code input~.code-footer label:hover { + background-color: var(--md-accent-fg-color) +} + +.md-typeset .collapse-code input~.code-footer label::before { + position: absolute; + top: .15em; + left: .15em; + display: block; + box-sizing: border-box; + width: 1.25em; + height: 1.25em; + background-color: var(--md-primary-bg-color); + background-size: 1.25em; + content: "" +} + +.md-typeset .collapse-code input~.code-footer label.expand { + display: none +} + +.md-typeset .collapse-code input~.code-footer label.expand::before { + -webkit-mask-image: url('data:image/svg+xml;charset=utf-8,'); + mask-image: url('data:image/svg+xml;charset=utf-8,') +} + +.md-typeset .collapse-code input~.code-footer label.collapse::before { + -webkit-mask-image: url('data:image/svg+xml;charset=utf-8,'); + mask-image: url('data:image/svg+xml;charset=utf-8,') +} + +.md-typeset .collapse-code input:checked~.code-footer label.expand { + display: inline +} + +.md-typeset .collapse-code input:checked~.code-footer label.collapse { + display: none +} + +.md-typeset .collapse-code input:checked+div.highlight code, +.md-typeset .collapse-code input:checked+div.highlight .linenodiv { + max-height: 9.375em; + overflow: hidden +} + +.md-typeset .collapse-code input:checked~.code-footer { + position: absolute; + bottom: 0; + left: 0; + padding: 2em .5em .5em .8rem; + background-image: linear-gradient(to bottom, transparent, var(--md-default-bg-color) 80% 100%) +} + +.md-typeset .tabbed-block>.collapse-code:first-child, +.md-typeset .tabbed-block>.collapse-code:first-child { + margin: 0; +} + +@media screen and (max-width:44.9375em) { + .md-typeset>.collapse-code { + margin-right: -.8rem; + margin-left: -.8rem + } + + .md-typeset>.collapse-code label.collapse { + left: .8rem + } +} + +.md-post { + margin: 0; + padding: 0; + border: 0; +} diff --git a/docs/tools.md b/docs/tools.md new file mode 100644 index 0000000..ef71a23 --- /dev/null +++ b/docs/tools.md @@ -0,0 +1,100 @@ +--- +icon: octicons/tools-16 +tags: + - Evergreen +--- + +# Tools + +## Crimpers + +
    + +-
    +

    + ![Pressmaster MCT Frame](https://assets.tylernguyen.wiki/tools/Pressmaster_MCT-FRAME.png){ width=250 } +

    Pressmaster MCT Frame
    +

    +
    + +
    + +## Multimeter + +
    + +-
    +

    + ![Klein Tools CL900](https://assets.tylernguyen.wiki/tools/Klein-Tools_CL900.png){ width=75 } +

    Klein Tools CL900
    +

    +
    + +
    + +## Soldering + +
    + +-
    +

    + ![PACE_ADS200](https://assets.tylernguyen.wiki/tools/PACE_ADS200.png){ width=200 } +

    PACE ADS200
    +

    +
    + +-
    +

    + ![Hakko FR301](https://assets.tylernguyen.wiki/tools/Hakko_FR301.png){ width=150 } +

    Hakko FR301
    +

    +
    + +
    + +## Pliers + +
    + +-
    +

    + ![ENGINEER PZ-33](https://assets.tylernguyen.wiki/tools/ENGINEER_PZ-33.png){ width=150 } +

    ENGINEER PZ-33
    +

    +
    + +-
    +

    + ![ENGINEER PZ-57](https://assets.tylernguyen.wiki/tools/ENGINEER_PZ-57.png){ width=150 } +

    ENGINEER PZ-57
    +

    +
    + +
    + +## Screwdrivers + +
    + +-
    +

    + ![Wera Kraftform ESD Micro PH#00](https://assets.tylernguyen.wiki/tools/Wera_Kraftform-ESD-Micro-PH00.png){ width=250 } +

    Wera Kraftform ESD Micro PH#00
    +

    +
    + +-
    +

    + ![Wera Kraftform ESD Micro PH#0](https://assets.tylernguyen.wiki/tools/Wera_Kraftform-ESD-Micro-PH0.png){ width=250 } +

    Wera Kraftform ESD Micro PH#0
    +

    +
    + +-
    +

    + ![Wera Kraftform ESD Micro PH#1](https://assets.tylernguyen.wiki/tools/Wera_Kraftform-ESD-Micro-PH1.png){ width=250 } +

    Wera Kraftform ESD Micro PH#1
    +

    +
    + +
    diff --git a/docs/tv.md b/docs/tv.md new file mode 100644 index 0000000..8e18c6e --- /dev/null +++ b/docs/tv.md @@ -0,0 +1,53 @@ +--- +icon: material/television-classic +tags: + - Evergreen +hide: + - toc +--- + +# Television + +/// featured + +
    + +- ![Mr. Robot](https://image.tmdb.org/t/p/original/1SEVAgbaah9wE5xoLt4qWPMBdpL.jpg) + **Mr. Robot** + [:simple-rottentomatoes:{ .rottentomatoes }](https://www.rottentomatoes.com/tv/mr_robot){ .card-link title="Rotten Tomatoes"} + [:simple-themoviedatabase:{ .tmdb }](https://www.themoviedb.org/tv/62560-mr-robot){ .card-link title="TMDB"} + [![IMDb](https://assets.tylernguyen.wiki/logos/IMDb.png){ .twemoji .card-link title="IMDb" }](https://www.imdb.com/title/tt4158110/) + +- ![The Wire](https://image.tmdb.org/t/p/original/oggnxmvofLtGQvXsO9bAFyCj3p6.jpg) + **The Wire** + [:simple-rottentomatoes:{ .rottentomatoes }](https://www.rottentomatoes.com/tv/the-wire){ .card-link title="Rotten Tomatoes"} + [:simple-themoviedatabase:{ .tmdb }](https://www.themoviedb.org/tv/1438-the-wire){ .card-link title="TMDB"} + [![IMDb](https://assets.tylernguyen.wiki/logos/IMDb.png){ .twemoji .card-link title="IMDb" }](https://www.imdb.com/title/tt0306414/) + +- ![Severance](https://image.tmdb.org/t/p/original/npD65vPa4vvn1ZHpp3o05A5vdKT.jpg) + **Severance** + [:simple-rottentomatoes:{ .rottentomatoes }](https://www.rottentomatoes.com/tv/severance/s01){ .card-link title="Rotten Tomatoes"} + [:simple-themoviedatabase:{ .tmdb }](https://www.themoviedb.org/tv/95396-severance){ .card-link title="TMDB"} + [![IMDb](https://assets.tylernguyen.wiki/logos/IMDb.png){ .twemoji .card-link title="IMDb" }](https://www.imdb.com/title/tt11280740/) + +- ![Barry](https://image.tmdb.org/t/p/original/vCv4HFYhIlB454Hj22IqYXYEmyi.jpg) + **Barry** + [:simple-rottentomatoes:{ .rottentomatoes }](https://www.rottentomatoes.com/tv/barry){ .card-link title="Rotten Tomatoes"} + [:simple-themoviedatabase:{ .tmdb }](https://www.themoviedb.org/tv/73107-barry){ .card-link title="TMDB"} + [![IMDb](https://assets.tylernguyen.wiki/logos/IMDb.png){ .twemoji .card-link title="IMDb" }](https://www.imdb.com/title/tt5348176/) + +- ![Utopia](https://image.tmdb.org/t/p/original//tynEoLA2cYONcUSz2OrCU0wSp6K.jpg) + **Utopia** + [:simple-rottentomatoes:{ .rottentomatoes }](https://www.rottentomatoes.com/tv/barry){ .card-link title="Rotten Tomatoes"} + [:simple-themoviedatabase:{ .tmdb }](https://www.themoviedb.org/tv/46511-utopia){ .card-link title="TMDB"} + [![IMDb](https://assets.tylernguyen.wiki/logos/IMDb.png){ .twemoji .card-link title="IMDb" }](https://www.imdb.com/title/tt2384811/) + +- ![Chernobyl](https://image.tmdb.org/t/p/original/900tHlUYUkp7Ol04XFSoAaEIXcT.jpg) + **Chernobyl** + [:simple-rottentomatoes:{ .rottentomatoes }](https://www.rottentomatoes.com/tv/barry){ .card-link title="Rotten Tomatoes"} + [:simple-themoviedatabase:{ .tmdb }](https://www.themoviedb.org/tv/87108-chernobyl){ .card-link title="TMDB"} + [![IMDb](https://assets.tylernguyen.wiki/logos/IMDb.png){ .twemoji .card-link title="IMDb" }](https://www.imdb.com/title/tt7366338/) + +
    + +/// diff --git a/docs/video-games.md b/docs/video-games.md new file mode 100644 index 0000000..d4f979e --- /dev/null +++ b/docs/video-games.md @@ -0,0 +1,57 @@ +--- +icon: material/gamepad-variant-outline +hide: + - toc +tags: + - Evergreen +--- + +# Video Games + +
    + +- :simple-steam:{ .steam } [Steam: young simon](https://steamcommunity.com/id/youngsimon/) +- ![VALORANT Tracker.gg](https://assets.tylernguyen.wiki/logos/VALORANT.png){ .twemoji } [VALORANT: YoungSimon#tyler](https://tracker.gg/valorant/profile/riot/YoungSimon%23tyler/overview) + +
    + +/// featured + +
    + +- ![VALORANT](https://assets.tylernguyen.wiki/games/heroes/VALORANT.png) + **VALORANT** + [:simple-riotgames:{ .riotgames }](https://playvalorant.com/){ .card-link title="Riot Games: Play VALORANT"} + + [:octicons-gear-16: Settings](https://tylernguyen.social/@tylernguyen){ .md-button } + +- ![Counter Strike 2](https://assets.tylernguyen.wiki/games/heroes/Counter-Strike2.png) + **Counter Strike 2** + [![Steam](https://assets.tylernguyen.wiki/logos/Steam.svg){ .twemoji .card-link title="Steam" }](https://store.steampowered.com/app/730/CounterStrike_2/) + + [:material-file-cog-outline: autoexec.cfg](https://gist.github.com/tylernguyen/fa4b67b6fb8a8620b9cdc510a4dfdd7e){ .md-button } + +- ![Apex Legends](https://assets.tylernguyen.wiki/games/heroes/Apex-Legends.png) + **Apex Legends** + [![Steam](https://assets.tylernguyen.wiki/logos/Steam.svg){ .twemoji .card-link title="Steam" }](https://store.steampowered.com/app/1172470/Apex_Legends/) + + [:material-file-cog-outline: autoexec.cfg](https://gist.github.com/tylernguyen/fa4b67b6fb8a8620b9cdc510a4dfdd7e){ .md-button } + +- ![Teamfight Tactics](https://assets.tylernguyen.wiki/games/heroes/Teamfight-Tactics.png) + **Teamfight Tactics** + [:simple-riotgames:{ .riotgames }](https://teamfighttactics.leagueoflegends.com/en-us/){ .card-link title="Riot Games: Teamfight Tactics"} + +- ![Slay the Spire](https://assets.tylernguyen.wiki/games/heroes/Slay-the-Spire.png) + **Slay the Spire** + [![Steam](https://assets.tylernguyen.wiki/logos/Steam.svg){ .twemoji .card-link title="Steam" }](https://store.steampowered.com/app/646570/Slay_the_Spire/) + [:simple-steamdb:{ .steamdb }](https://steamdb.info/app/646570/){ .card-link title="SteamDB"} + [:simple-gogdotcom:{ .gog }](https://www.gog.com/game/Slay_the_Spire){ .card-link title="GOG"} + +- ![Balatro](https://assets.tylernguyen.wiki/games/heroes/Balatro.jpg) + **Balatro** + [![Steam](https://assets.tylernguyen.wiki/logos/Steam.svg){ .twemoji .card-link title="Steam" }](https://store.steampowered.com/app/2379780/Balatro/) + [:simple-steamdb:{ .steamdb }](https://steamdb.info/app/2379780/){ .card-link title="SteamDB"} + +
    + +/// diff --git a/docs/websites.md b/docs/websites.md new file mode 100644 index 0000000..017ad58 --- /dev/null +++ b/docs/websites.md @@ -0,0 +1,57 @@ +--- +icon: material/earth +tags: + - Evergreen +--- + +# Websites + +RSS is my preferred method of following websites. I also maintain an email alias specifically for newsletters to be converted into an RSS feed. + +/// featured +- [danluu.com](https://danluu.com/) [:fontawesome-solid-square-rss:{ .rss }](https://danluu.com/atom.xml){ .card-link title="RSS Feed"} +- [No Mercy / No Malice](https://www.profgalloway.com/) [:fontawesome-solid-square-rss:{ .rss }](https://www.profgalloway.com/feed/){ .card-link title="RSS Feed"} +- [NY Times - Visual Investigation](https://www.nytimes.com/spotlight/visual-investigations) [:simple-youtube:{ .youtube }](https://www.youtube.com/playlist?list=PL4CGYNsoW2iAZt9-UzPyPZOH-AlRMxcIE){ .card-link title="YouTube Channel"} +- [@3blue1brown](https://www.youtube.com/@3blue1brown) [:simple-youtube:{ .youtube }](https://www.youtube.com/@3blue1brown){ .card-link title="YouTube Channel"} +- [@LEMMiNO](https://www.youtube.com/@LEMMiNO) [:simple-youtube:{ .youtube }](https://www.youtube.com/@LEMMiNO){ .card-link title="YouTube Channel"} +/// + +## Blogs + +- [Schneier on Security](https://www.schneier.com/) [:fontawesome-solid-square-rss:{ .rss }](https://www.schneier.com/feed/){ .card-link title="RSS Feed"} +- [Julia Evans](https://jvns.ca) [:fontawesome-solid-square-rss:{ .rss }](https://jvns.ca/atom.xml){ .card-link title="RSS Feed"} +- [Seirdy’s Home](https://seirdy.one/) +- [endtimes.dev](https://endtimes.dev/) [:fontawesome-solid-square-rss:{ .rss }](https://endtimes.dev/feed.xml){ .card-link title="RSS Feed"} +- [Jeff Geerling](https://www.jeffgeerling.com/blog) + +## Digital Gardens + +- [Andy Matuschak](https://andymatuschak.org/) +- [Andy Matuschakʼs working notes](https://notes.andymatuschak.org) +- [Tom Critchlow](https://tomcritchlow.com/) + +## Newsletter + +- [Fridays' Elk](https://buttondown.email/carlzimmer) by [Carl Zimmer](https://carlzimmer.com/) + +## Utilities + +- [PGTune](https://pgtune.leopard.in.ua/) + +## Videos + +- [Josel Spolsky - You Suck at Excel](https://www.youtube.com/watch?v=0nbkaYsR94c) + +## Posts + +- [Joel Spolsky - The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)](https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/) + + /// tip + There is an informative follow-up to this post. + + [tonsky.me - The Absolute Minimum Every Software Developer Must Know About Unicode in 2023 (Still No Excuses!)](https://tonsky.me/blog/unicode/) + /// + +## Cooking + +- [Dr. Doughlas Baldwin - A Practical Guide to Sous Vide Cooking](https://douglasbaldwin.com/sous-vide.html) diff --git a/includes/abbreviations.md b/includes/abbreviations.md new file mode 100644 index 0000000..41c3bd4 --- /dev/null +++ b/includes/abbreviations.md @@ -0,0 +1,20 @@ +*[DoH]: DNS over HTTPS +*[DoQ]: DNS over QUIC +*[DoT]: DNS over TLS +*[E2EE]: End-to-End Encryption/Encrypted +*[EOL]: End-of-Life +*[FDE]: Full Disk Encryption +*[GDPR]: General Data Protection Regulation +*[GnuPG]: GNU Privacy Guard (PGP implementation) +*[GPG]: GNU Privacy Guard (PGP implementation) +*[OTP]: One-Time Password +*[OTPs]: One-Time Passwords +*[P2P]: Peer-to-Peer +*[PWA]: Progressive Web App +*[ToS]: Terms of Service +*[TOTP]: Time-based One-Time Password +*[TPM]: Trusted Platform Module +*[VPN]: Virtual Private Network +*[X1C6]: Lenovo X1 Carbon 6th Generation +*[ACPI]: Advanced Configuration and Power Interface +*[SSG]: Static Site Generator diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000..ca0c7d2 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,323 @@ +# yaml-language-server: $schema=https://squidfunk.github.io/mkdocs-material/schema.json +site_name: Tyler Nguyen's Dot Wiki +site_url: https://tylernguyen.wiki +site_author: Tyler Nguyen +site_description: >- + .wiki/ is Tyler Nguyen's digital garden and blog. + +repo_name: tylernguyen/wiki +repo_url: https://github.com/tylernguyen/wiki +edit_uri: "edit/main/docs/" + +copyright: > + Copyright © 2024 Tyler Nguyen | LICENSE
    + Manage cookie settings + +theme: + name: material + custom_dir: overrides + favicon: assets/favicon.png + logo: assets/logo.png + font: + text: BerkeleyMono + code: BerkeleyMono + features: + - announce.dismiss # LINK https://squidfunk.github.io/mkdocs-material/setup/setting-up-the-header/?h=dismiss#announcement-bar + - content.action.view # LINK https://squidfunk.github.io/mkdocs-material/setup/adding-a-git-repository/?h=content+action#code-actions + #- content.action.edit # LINK https://squidfunk.github.io/mkdocs-material/setup/adding-a-git-repository/?h=content+action#code-actions + - content.code.annotate # LINK https://squidfunk.github.io/mkdocs-material/reference/code-blocks/?h=code#adding-annotations + - content.code.copy # LINK https://squidfunk.github.io/mkdocs-material/reference/code-blocks/?h=code#code-copy-button + - content.footnote.tooltips # LINK https://squidfunk.github.io/mkdocs-material/reference/footnotes/?h=footnote+tooltips#footnote-tooltips + - content.code.select # LINK https://squidfunk.github.io/mkdocs-material/reference/code-blocks/?h=code#code-selection-button + - content.tooltips # LINK https://squidfunk.github.io/mkdocs-material/reference/tooltips/#improved-tooltips + #- navigation.expand # Note Bug: this will also expand collapsed code blocks on page reload + - navigation.footer # LINK https://squidfunk.github.io/mkdocs-material/setup/setting-up-the-footer/?h=footer#navigation + - navigation.indexes # LINK https://squidfunk.github.io/mkdocs-material/setup/setting-up-navigation/#section-index-pages INCOMPATIBLE with toc.integrate (Attach Top Level Doc to Section ) + - navigation.instant # LINK https://squidfunk.github.io/mkdocs-material/setup/setting-up-navigation/#instant-loading + - navigation.instant.prefetch # LINK https://squidfunk.github.io/mkdocs-material/setup/setting-up-navigation/#instant-prefetching + - navigation.instant.progress # LINK https://squidfunk.github.io/mkdocs-material/setup/setting-up-navigation/#progress-indicator + - navigation.path # LINK https://squidfunk.github.io/mkdocs-material/setup/setting-up-navigation/?h=navigation+path#navigation-path + - navigation.prune # LINK https://squidfunk.github.io/mkdocs-material/setup/setting-up-navigation/?h=navigation+pru#navigation-pruning + - navigation.sections + - navigation.tabs + - navigation.tabs.sticky + - navigation.top # LINK https://squidfunk.github.io/mkdocs-material/setup/setting-up-navigation/?h=navigation#back-to-top-button + - navigation.tracking # NOTE Update URL with Active Anchor + - search.highlight # LINK https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-search/?h=search+high#search-highlighting + - search.suggest # LINK https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-search/?h=search+high#search-suggestions + - toc.follow # LINK https://squidfunk.github.io/mkdocs-material/setup/setting-up-navigation/?h=navigation#anchor-following + #- toc.integrate # NOTE Table of Contents as part of Navigation INCOMPATIBLE with navigation.indexes + icon: + annotation: octicons/comment-24 + search: octicons/rel-file-path-24 + top: octicons/chevron-up-24 + view: octicons/markdown-16 + admonition: + note: octicons/pencil-16 + abstract: octicons/log-16 + info: octicons/report-16 + tip: octicons/hubot-16 + success: octicons/check-16 + question: octicons/question-16 + warning: octicons/alert-16 + failure: octicons/x-circle-16 + danger: octicons/zap-16 + bug: octicons/bug-16 + example: octicons/package-16 + tag: + default: octicons/tag-16 + Evergreen: material/leaf + video-games: material/microsoft-xbox-controller + board-games: material/chess-pawn + palette: + - media: "(prefers-color-scheme)" + scheme: default + toggle: + icon: material/lightbulb-auto-outline + name: "Automatic Mode Enabled. Click to Toggle Dark Mode." + - media: "(prefers-color-scheme: dark)" + scheme: slate + primary: custom + toggle: + icon: material/lightbulb-night-outline + name: "Dark Mode Enabled. Click to Toggle Light Mode." + - media: "(prefers-color-scheme: light)" + scheme: default + toggle: + icon: material/lightbulb-outline + name: "Light Mode Enabled. Click to Toggle Automatic Mode." + +extra: + analytics: + provider: posthog + consent: + actions: + - accept + - reject + - manage + title: Analytics Cookie + description: >- + PostHog's browser cookie gives me insights into how you interact with .wiki
    + Rejecting the cookie will not affect your experience with the site.

    + I do however, ask that you please accept it in order to help me build a more effective website. + cookies: + analytics: PostHog + generator: false + social: + - icon: simple/mastodon + link: https://tylernguyen.social/@tylernguyen + - icon: simple/github + link: https://github.com/tylernguyen + - icon: simple/gitea + link: https://tylernguyen.codes/explore/repos + tags: + Evergreen: Evergreen + Video Games: video-games + Board Games: board-games + +extra_css: + - stylesheets/solarized.css + - stylesheets/fonts.css + - stylesheets/colors.css + +extra_javascript: + - https://unpkg.com/tablesort@5.3.0/dist/tablesort.min.js + - javascripts/tablesort.js + - https://unpkg.com/mermaid@10.9.1/dist/mermaid.min.js + +watch: + - includes + +# ANCHOR Plugins +plugins: + - meta # NOTE Located at the beginning of the list of `plugins` so that other plugins (including the [built-in blog plugin]) will pick up the set defaults + - blog: + blog_dir: . + archive_toc: true + draft_if_future_date: true + post_excerpt: required + post_url_format: "{date}/{slug}" + post_url_max_categories: 1 + - group: + enabled: !ENV [CI, false] + plugins: + - git-revision-date-localized: + fallback_to_build_date: true + enable_creation_date: true + type: timeago + exclude: + - archive/* + - category/* + - rss: + match_path: posts/.* + date_from_meta: + as_creation: date.created + as_update: date.updated + categories: + - categories + - tags + comments_path: "#__comments" + - privacy: + assets_exclude: + - cdn.jsdelivr.net/npm/mathjax@3/* + - giscus.app/* + - optimize + - search + - tags: + shadow_tags_prefix: _ + - typeset + +# ANCHOR Markdown Extensions +markdown_extensions: + - abbr + - attr_list # NOTE Grid, Annotations, Images, Buttons + - md_in_html # NOTE Grid, Annotations, Images + - footnotes + - tables # NOTE Markdown Table + - toc: + permalink: true + - material.extensions.preview # LINK https://squidfunk.github.io/mkdocs-material/setup/setting-up-navigation/?h=instant+previ#automatic-previews + - pymdownx.blocks.admonition: + types: + - note + - abstract + - info + - question + - success + - tip + - warning + - bug + - failure + - danger + - example + - quote + - featured + - announce + - extension + - code + - setting + - screenshot + - pymdownx.blocks.details: + types: + - name: details-note + class: note + - name: details-abstract + class: abstract + - name: details-info + class: info + - name: details-question + class: question + - name: details-tip + class: tip + - name: details-warning + class: warning + - name: details-bug + class: bug + - name: details-failure + class: failure + - name: details-danger + class: danger + - name: details-example + class: example + - name: details-quote + class: quote + - name: details-featured + class: featured + - name: details-announce + class: announce + - name: details-extension + class: extension + - name: details-code + class: code + - name: details-setting + class: setting + - name: details-screenshot + class: setting + - pymdownx.betterem + - pymdownx.caret + - pymdownx.blocks.details + - pymdownx.keys + - pymdownx.mark + - pymdownx.tilde + - pymdownx.smartsymbols + - pymdownx.highlight: + anchor_linenums: true # NOTE Syntax highlighting on code blocks and inline code blocks + line_spans: __span # NOTE Syntax highlighting on code blocks and inline code blocks + pygments_lang_class: true # NOTE Add a CSS class to identify the language of the code block + - pymdownx.inlinehilite + - pymdownx.saneheaders + - pymdownx.snippets: + url_download: true + auto_append: + - includes/abbreviations.md + - pymdownx.emoji: + emoji_index: !!python/name:material.extensions.emoji.twemoji + emoji_generator: !!python/name:material.extensions.emoji.to_svg + options: + custom_icons: + - overrides/.icons + - pymdownx.superfences: # NOTE Admoniton, Annotations, MermaidJS + custom_fences: + - name: mermaid + class: mermaid + format: !!python/name:pymdownx.superfences.fence_code_format + - name: md-render + class: md-render + format: !!python/name:tools.pymdownx_md_render.md_sub_render + - pymdownx.blocks.tab: + slugify: !!python/object/apply:pymdownx.slugs.slugify + kwds: + case: lower + alternate_style: true + - pymdownx.tasklist: + custom_checkbox: true + - tools.collapse_code: + expand_text: '' + collapse_text: '' + +# ANCHOR Navigation tree +nav: + - Blog: + - index.md + - Projects: + - projects/index.md + - X1C6 Hackintosh: + - projects/x1c6-hackintosh/README.md + - projects/x1c6-hackintosh/datasheet.md + - projects/x1c6-hackintosh/hardware.md + - projects/x1c6-hackintosh/BIOS.md + - projects/x1c6-hackintosh/install-macOS.md + - projects/x1c6-hackintosh/post-install.md + - projects/x1c6-hackintosh/issues.md + - projects/x1c6-hackintosh/checklist.md + - Technical: + - projects/x1c6-hackintosh/config.plist.md + - projects/x1c6-hackintosh/ACPI-patches.md + - projects/x1c6-hackintosh/keyboard-queries.md + - projects/x1c6-hackintosh/EC-queries.md + - projects/x1c6-hackintosh/ALC285.md + - projects/x1c6-hackintosh/external.md + - Catalog: + - websites.md + - books.md + - movies.md + - tv.md + - anime.md + - comics.md + - manga.md + - graphic-novels.md + - podcasts.md + - board-games.md + - video-games.md + - Uses: + - dotfiles.md + - hardware.md + - peripherals.md + - tools.md + - software.md + - services.md + - self-hosted.md + - contact.md + - about.md + - Support: https://github.com/sponsors/tylernguyen + - credits.md diff --git a/overrides/.icons/material/clock-edit-outline.svg b/overrides/.icons/material/clock-edit-outline.svg new file mode 100644 index 0000000..b3814fc --- /dev/null +++ b/overrides/.icons/material/clock-edit-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/overrides/.icons/material/clock-plus-outline.svg b/overrides/.icons/material/clock-plus-outline.svg new file mode 100644 index 0000000..48f940a --- /dev/null +++ b/overrides/.icons/material/clock-plus-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/overrides/.icons/material/shape-outline.svg b/overrides/.icons/material/shape-outline.svg new file mode 100644 index 0000000..be3d9ee --- /dev/null +++ b/overrides/.icons/material/shape-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/overrides/.icons/material/timer-outline.svg b/overrides/.icons/material/timer-outline.svg new file mode 100644 index 0000000..41e58c8 --- /dev/null +++ b/overrides/.icons/material/timer-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/overrides/blog-post.html b/overrides/blog-post.html new file mode 100644 index 0000000..e934c20 --- /dev/null +++ b/overrides/blog-post.html @@ -0,0 +1,180 @@ + + +{% extends "main.html" %} + +{% import "partials/nav-item.html" as item with context %} + + +{% block container %} +
    + + +
    +
    +
    + + + + {% if "toc.integrate" in features %} + {% include "partials/toc.html" %} + {% endif %} +
    +
    +
    + + +
    + {% block content %} + {% include "partials/content.html" %} + {% endblock %} +
    +
    +{% endblock %} diff --git a/overrides/main.html b/overrides/main.html new file mode 100644 index 0000000..f8abd0c --- /dev/null +++ b/overrides/main.html @@ -0,0 +1,17 @@ + + +{% extends "base.html" %} + + +{% block announce %} + Follow me on + + {% include ".icons/fontawesome/brands/mastodon.svg" %} + + Mastodon + + @tylernguyen@tylernguyen.social + +{% endblock %} diff --git a/overrides/partials/comments.html b/overrides/partials/comments.html new file mode 100644 index 0000000..bae7fcc --- /dev/null +++ b/overrides/partials/comments.html @@ -0,0 +1,56 @@ +{% if page.meta.comments %} +

    {{ lang.t("meta.comments") }}

    + + + + + +{% endif %} diff --git a/overrides/partials/consent.html b/overrides/partials/consent.html new file mode 100644 index 0000000..0935cde --- /dev/null +++ b/overrides/partials/consent.html @@ -0,0 +1,91 @@ + + + +{% set cookies = config.extra.consent.cookies | d({}) %} +{% if config.extra.analytics %} + {% if "analytics" not in cookies %} + {% set _ = cookies.update({ "analytics": "Google Analytics" }) %} + {% endif %} +{% endif %} +{% if config.repo_url and "github.com" in config.repo_url %} + {% if "github" not in cookies %} + {% set _ = cookies.update({ "github": "GitHub" }) %} + {% endif %} +{% endif %} + + +{% set actions = config.extra.consent.actions %} +{% if not actions %} + {% set actions = ["accept", "manage"] %} +{% endif %} + + +{% if "manage" not in actions %} + {% set checked = "checked" %} +{% endif %} + + +

    {{ config.extra.consent.title }}

    +PostHog +PostHog +

    {{ config.extra.consent.description }}

    + + + + + + + diff --git a/overrides/partials/integrations/analytics/posthog.html b/overrides/partials/integrations/analytics/posthog.html new file mode 100644 index 0000000..54016ea --- /dev/null +++ b/overrides/partials/integrations/analytics/posthog.html @@ -0,0 +1,12 @@ + diff --git a/overrides/partials/post.html b/overrides/partials/post.html new file mode 100644 index 0000000..7c7c313 --- /dev/null +++ b/overrides/partials/post.html @@ -0,0 +1,76 @@ + + + +
    + + + +
    + {{ post.content }} + +
    + +
    + + + + + + +
    +
    diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..e48045e --- /dev/null +++ b/requirements.txt @@ -0,0 +1,7 @@ +# NOTE Requirements for social plugin +cairosvg>=2.7.1 +pillow>=10.3.0 + +# NOTE Requirements for other plugins +mkdocs-git-revision-date-localized-plugin>=1.2.6 +mkdocs-rss-plugin>=1.12.2 diff --git a/tools/__init__.py b/tools/__init__.py new file mode 100644 index 0000000..688ed87 --- /dev/null +++ b/tools/__init__.py @@ -0,0 +1 @@ +"""Tools.""" diff --git a/tools/collapse_code.py b/tools/collapse_code.py new file mode 100644 index 0000000..d8cdd8e --- /dev/null +++ b/tools/collapse_code.py @@ -0,0 +1,106 @@ +# LINK https://github.com/facelessuser/pymdown-extensions/blob/main/tools/collapse_code.py +"""Collapsible code.""" +import xml.etree.ElementTree as etree +from markdown import util as mutil +import re +from pymdownx.blocks.block import Block +from pymdownx.blocks import BlocksExtension + +# Fenced block placeholder for SuperFences +FENCED_BLOCK_RE = re.compile( + r'^([\> ]*){}({}){}$'.format( + mutil.HTML_PLACEHOLDER[0], + mutil.HTML_PLACEHOLDER[1:-1] % r'([0-9]+)', + mutil.HTML_PLACEHOLDER[-1] + ) +) + + +class CollapseCode(Block): + """Collapse code.""" + + NAME = 'collapse-code' + + def on_init(self): + """Handle initialization.""" + + # Track tab group count across the entire page. + if 'collapse_code_count' not in self.tracker: + self.tracker['collapse_code_count'] = 0 + + self.expand = self.config['expand_text'] + if not isinstance(self.expand, str): + raise ValueError("'expand_text' must be a string") + + self.collapse = self.config['collapse_text'] + if not isinstance(self.collapse, str): + raise ValueError("'collapse_text' must be a string") + + self.expand_title = self.config['expand_title'] + if not isinstance(self.expand_title, str): + raise ValueError("'expand_title' must be a string") + + self.collapse_title = self.config['collapse_title'] + if not isinstance(self.collapse_title, str): + raise ValueError("'collapse_title' must be a string") + + def on_create(self, parent): + """Create the element.""" + + self.count = self.tracker['collapse_code_count'] + self.tracker['collapse_code_count'] += 1 + el = etree.SubElement(parent, 'div', {'class': 'collapse-code'}) + etree.SubElement( + el, + 'input', + { + "type": "checkbox", + "id": f"__collapse{self.count}", + "name": f"__collapse{self.count}", + 'checked': 'checked' + } + ) + return el + + def on_end(self, block): + """Convert non list items to details.""" + + el = etree.SubElement(block, 'div', {'class': 'code-footer'}) + attrs = {'for': f'__collapse{self.count}', 'class': 'expand', 'tabindex': '0'} + if self.expand_title: + attrs['title'] = self.expand_title + expand = etree.SubElement(el, 'label', attrs) + expand.text = self.expand + + attrs = {'for': f'__collapse{self.count}', 'class': 'collapse', 'tabindex': '0'} + if self.collapse_title: + attrs['title'] = self.collapse_title + collapse = etree.SubElement(el, 'label', attrs) + collapse.text = self.collapse + + +class CollapseCodeExtension(BlocksExtension): + """Admonition Blocks Extension.""" + + def __init__(self, *args, **kwargs): + """Initialize.""" + + self.config = { + 'expand_text': ['Expand', "Set the text for the expand button."], + 'collapse_text': ['Collapse', "Set the text for the collapse button."], + 'expand_title': ['expand', "Set the text for the expand title."], + 'collapse_title': ['collapse', "Set the text for the collapse title."] + } + + super().__init__(*args, **kwargs) + + def extendMarkdownBlocks(self, md, blocks): + """Extend Markdown blocks.""" + + blocks.register(CollapseCode, self.getConfigs()) + + +def makeExtension(*args, **kwargs): + """Return extension.""" + + return CollapseCodeExtension(*args, **kwargs) diff --git a/tools/pymdownx_md_render.py b/tools/pymdownx_md_render.py new file mode 100644 index 0000000..054b5f4 --- /dev/null +++ b/tools/pymdownx_md_render.py @@ -0,0 +1,69 @@ +# LINK https://github.com/facelessuser/pymdown-extensions/blob/main/tools/pymdownx_md_render.py +"""Generate Markdown isolated from our current document options.""" +import markdown +import yaml +import re +from collections import OrderedDict + +def yaml_load(stream, loader=yaml.Loader): + """ + Custom YAML loader. + + Load all strings as Unicode. + http://stackoverflow.com/a/2967461/3609487 + """ + + def construct_yaml_str(self, node): + """Override the default string handling function to always return Unicode objects.""" + + return self.construct_scalar(node) + + class Loader(loader): + """Custom Loader.""" + + Loader.add_constructor( + 'tag:yaml.org,2002:str', + construct_yaml_str + ) + + return yaml.load(stream, Loader) + +def get_frontmatter(text): + """Get front matter from string.""" + + frontmatter = OrderedDict() + + if text.startswith("---"): + m = re.search(r'^(-{3}\r?\n(?!\r?\n)(.*?)(?<=\n)(?:-{3}|\.{3})\r?\n)', text, re.DOTALL) + if m: + yaml_okay = True + try: + frontmatter = yaml_load(m.group(2)) + if frontmatter is None: + frontmatter = OrderedDict() + # If we didn't get a dictionary, we don't want this as it isn't front matter. + assert isinstance(frontmatter, (dict, OrderedDict)), TypeError + except Exception: + # We had a parsing error. This is not the YAML we are looking for. + yaml_okay = False + frontmatter = OrderedDict() + + if yaml_okay: + text = text[m.end(1):] + + return frontmatter, text + +def md_sub_render(src="", language="", class_name=None, options=None, md="", **kwargs): + """Formatter wrapper.""" + try: + fm, text = get_frontmatter(src) + md = markdown.markdown( + text, + extensions=fm.get('extensions', []), + extension_configs=fm.get('extension_configs', {}) + ) + return md + except Exception: + import traceback + print(traceback.format_exc()) + raise