diff --git a/web/.gitignore b/web/.gitignore new file mode 100644 index 0000000..69edf7a --- /dev/null +++ b/web/.gitignore @@ -0,0 +1 @@ +./public diff --git a/web/archetypes/default.md b/web/archetypes/default.md new file mode 100644 index 0000000..00e77bd --- /dev/null +++ b/web/archetypes/default.md @@ -0,0 +1,6 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +date: {{ .Date }} +draft: true +--- + diff --git a/web/content/_index.md b/web/content/_index.md new file mode 100644 index 0000000..4ee7366 --- /dev/null +++ b/web/content/_index.md @@ -0,0 +1,22 @@ +![Rainforest](jungle.jpg) + +Welcome to the jungle, a set of machines with no imposed rules that are fully +controlled and maintained by their users. + +The configuration of all the machines is written in a centralized [git +repository][config] using the Nix language for NixOS. Changes in the +configuration of the machines are introduced by merge requests and pass a review +step before being deployed. + +[config]: https://pm.bsc.es/gitlab/rarias/jungle + +The machines have access to the large list of packages available in +[Nixpkgs][nixpkgs] and a custom set of packages named [bscpkgs][bscpkgs], +specifically tailored to our needs for HPC machines. Users can install their own +packages and made them system-wide available by opening a merge request. + +[nixpkgs]: https://github.com/NixOS/nixpkgs +[bscpkgs]: https://pm.bsc.es/gitlab/rarias/bscpkgs + +We have put a lot of effort to guarantee very good reproducibility properties in +the configuration of the machines and the software they use. diff --git a/web/content/eudy/_index.md b/web/content/eudy/_index.md new file mode 100644 index 0000000..dd432f1 --- /dev/null +++ b/web/content/eudy/_index.md @@ -0,0 +1,10 @@ +--- +title: "Eudy" +description: "Linux kernel experiments" +--- + +[![Eudy](eudy.jpg)](https://commons.wikimedia.org/w/index.php?curid=5817408) + +The *eudy* machine is destined as a playground for Linux kernel experiments. The +name is a shorthand of the Eudyptula species of little penguins found the New +Zealand and Australia. diff --git a/web/content/eudy/eudy.jpg b/web/content/eudy/eudy.jpg new file mode 100644 index 0000000..42b2c75 Binary files /dev/null and b/web/content/eudy/eudy.jpg differ diff --git a/web/content/grafana/_index.md b/web/content/grafana/_index.md new file mode 100644 index 0000000..e9cdbc5 --- /dev/null +++ b/web/content/grafana/_index.md @@ -0,0 +1,6 @@ +--- +title: "Grafana" +description: "Monitor metrics" +--- + +If you are reading this page, the proxy to the Grafana service is not working. diff --git a/web/content/hut/_index.md b/web/content/hut/_index.md new file mode 100644 index 0000000..4d70451 --- /dev/null +++ b/web/content/hut/_index.md @@ -0,0 +1,18 @@ +--- +title: "Hut" +description: "Control node" +date: 2023-06-13T19:36:57+02:00 +--- + +![Hut](hut.jpg) + +From the hut we monitor and control other nodes. It consist of one node only, +which is available at `hut` or `xeon07`. It runs the following services: + +- Prometheus: to store the monitoring data. +- Grafana: to plot the data in the web browser. +- Slurmctld: to manage the SLURM nodes. +- Gitlab runner: to run CI jobs from Gitlab. + +This node is prone to interruptions from all the services it runs, so it is not +a good candidate for low noise executions. diff --git a/web/content/hut/hut.jpg b/web/content/hut/hut.jpg new file mode 100644 index 0000000..26f74c2 Binary files /dev/null and b/web/content/hut/hut.jpg differ diff --git a/web/content/lake/_index.md b/web/content/lake/_index.md new file mode 100644 index 0000000..f1c8950 --- /dev/null +++ b/web/content/lake/_index.md @@ -0,0 +1,10 @@ +--- +title: "Lake" +description: "Data storage" +date: 2023-06-13T19:36:57+02:00 +draft: true +--- + +![Lake](lake.jpg) + +Data storage diff --git a/web/content/lake/lake.jpg b/web/content/lake/lake.jpg new file mode 100644 index 0000000..5e72141 Binary files /dev/null and b/web/content/lake/lake.jpg differ diff --git a/web/content/owl/_index.md b/web/content/owl/_index.md new file mode 100644 index 0000000..d6fbb1b --- /dev/null +++ b/web/content/owl/_index.md @@ -0,0 +1,10 @@ +--- +title: "Owl" +description: "Low system noise" +--- + +![Owl](owl.jpg) + +Much like the silent flight of an owl at night, these nodes are configured to +minimize the system noise and let programs run undisturbed. The list of nodes is +`owl[1-2]` and are available for jobs with SLURM. diff --git a/web/content/owl/owl.jpg b/web/content/owl/owl.jpg new file mode 100644 index 0000000..5e0441a Binary files /dev/null and b/web/content/owl/owl.jpg differ diff --git a/web/hugo.toml b/web/hugo.toml new file mode 100644 index 0000000..39357f3 --- /dev/null +++ b/web/hugo.toml @@ -0,0 +1,5 @@ +baseURL = 'https://jungle.bsc.es/' +languageCode = 'en-us' +title = 'The jungle' +theme = 'PaperMod' +sectionPagesMenu = "main" diff --git a/web/static/hut-big.jpg b/web/static/hut-big.jpg new file mode 100644 index 0000000..196abc1 Binary files /dev/null and b/web/static/hut-big.jpg differ diff --git a/web/static/jungle.jpg b/web/static/jungle.jpg new file mode 100644 index 0000000..8c06610 Binary files /dev/null and b/web/static/jungle.jpg differ diff --git a/web/static/nodes.jpg b/web/static/nodes.jpg new file mode 100644 index 0000000..45f9e2d Binary files /dev/null and b/web/static/nodes.jpg differ diff --git a/web/static/rainforest.jpg b/web/static/rainforest.jpg new file mode 100644 index 0000000..31ed09e Binary files /dev/null and b/web/static/rainforest.jpg differ diff --git a/web/themes/PaperMod/.github/ISSUE_TEMPLATE/bug_report.md b/web/themes/PaperMod/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..b7d5b28 --- /dev/null +++ b/web/themes/PaperMod/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,50 @@ +--- +name: Bug report +about: Create a report to help us improve +title: "[BUG]" +labels: bug +assignees: '' + +--- + + + +**Describe the bug** + + + - Device/Os: [e.g. Android 10] + - Type: [e.g. Desktop/Mobile] + - Browser and version [e.g. Chrome 86.0]: + - Hugo Version [ >=0.97.1 expected]: + - Theme Version [e.g. v4.0, master, or commit-id ]: + +**Steps to reproduce the behavior:** + + +**Expected behavior**: + + +**Repo/Source where this issue can be reproduced**: + + +**Screenshots** + + +**Additional context** + diff --git a/web/themes/PaperMod/.github/ISSUE_TEMPLATE/config.yml b/web/themes/PaperMod/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..1a4dd9b --- /dev/null +++ b/web/themes/PaperMod/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: PaperMod Discussions + url: https://github.com/adityatelange/hugo-PaperMod/discussions + about: Please ask and answer questions/doubts here, do not open an issue for questions. diff --git a/web/themes/PaperMod/.github/ISSUE_TEMPLATE/new-blank-issue.md b/web/themes/PaperMod/.github/ISSUE_TEMPLATE/new-blank-issue.md new file mode 100644 index 0000000..dbc48f1 --- /dev/null +++ b/web/themes/PaperMod/.github/ISSUE_TEMPLATE/new-blank-issue.md @@ -0,0 +1,7 @@ +--- +name: New Blank Issue +about: Anything other than bug report +title: "" +labels: "" +assignees: "" +--- diff --git a/web/themes/PaperMod/.github/PULL_REQUEST_TEMPLATE.md b/web/themes/PaperMod/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..00b856c --- /dev/null +++ b/web/themes/PaperMod/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,44 @@ + + + +**What does this PR change? What problem does it solve?** + + + + +**Was the change discussed in an issue or in the Discussions before?** + + + + +## PR Checklist + +- [ ] This change adds/updates translations and I have used the [template present here](https://github.com/adityatelange/hugo-PaperMod/wiki/Translations#want-to-add-your-language-). +- [ ] I have enabled [maintainer edits for this PR](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/allowing-changes-to-a-pull-request-branch-created-from-a-fork). +- [ ] I have verified that the code works as described/as intended. +- [ ] This change adds a Social Icon which has a permissive license to use it. +- [ ] This change **does not** include any CDN resources/links. +- [ ] This change **does not** include any unrelated scripts such as bash and python scripts. +- [ ] This change updates the overridden internal templates from HUGO's repository. diff --git a/web/themes/PaperMod/.github/stale.yml b/web/themes/PaperMod/.github/stale.yml new file mode 100644 index 0000000..7b5f571 --- /dev/null +++ b/web/themes/PaperMod/.github/stale.yml @@ -0,0 +1,17 @@ +# Number of days of inactivity before an issue becomes stale +daysUntilStale: 7 +# Number of days of inactivity before a stale issue is closed +daysUntilClose: 3 +# Issues with these labels will never be considered stale +exemptLabels: + - pinned + - keep +# Label to use when marking an issue as stale +staleLabel: stale +# Comment to post when marking an issue as stale. Set to `false` to disable +markComment: > + This issue has been automatically marked as stale because it has not had + recent activity. It will be closed if no further activity occurs. Thank you + for your contributions. +# Comment to post when closing a stale issue. Set to `false` to disable +closeComment: false diff --git a/web/themes/PaperMod/.github/workflows/gh-pages.yml b/web/themes/PaperMod/.github/workflows/gh-pages.yml new file mode 100644 index 0000000..4f59e30 --- /dev/null +++ b/web/themes/PaperMod/.github/workflows/gh-pages.yml @@ -0,0 +1,80 @@ +name: Deploy Hugo PaperMod Demo to Pages + +on: + push: + paths-ignore: + - "images/**" + - "LICENSE" + - "README.md" + branches: + - master + - exampleSite + workflow_dispatch: + # manual run + inputs: + hugoVersion: + description: "Hugo Version" + required: false + default: "0.97.1" + +# Allow one concurrent deployment +concurrency: + group: "pages" + cancel-in-progress: true + +# Default to bash +defaults: + run: + shell: bash + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +jobs: + # Build job + build: + runs-on: ubuntu-latest + env: + HUGO_VERSION: "0.97.1" + steps: + - name: Check version + if: ${{ github.event.inputs.hugoVersion }} + run: export HUGO_VERSION="${{ github.event.inputs.hugoVersion }}" + - name: Install Hugo CLI + run: | + wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_${HUGO_VERSION}_Linux-64bit.deb \ + && sudo dpkg -i ${{ runner.temp }}/hugo.deb + - name: Checkout + uses: actions/checkout@v3 + with: + ref: exampleSite + - name: Setup Pages + id: pages + uses: actions/configure-pages@v1 + - name: Get Theme + run: git submodule update --init --recursive + - name: Update theme to Latest commit + run: git submodule update --remote --merge + - name: Build with Hugo + run: | + hugo \ + --buildDrafts --gc --verbose \ + --baseURL ${{ steps.pages.outputs.base_url }} + - name: Upload artifact + uses: actions/upload-pages-artifact@v1 + with: + path: ./public + # Deployment job + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v1 diff --git a/web/themes/PaperMod/LICENSE b/web/themes/PaperMod/LICENSE new file mode 100644 index 0000000..34f0885 --- /dev/null +++ b/web/themes/PaperMod/LICENSE @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) 2020 nanxiaobei and adityatelange +Copyright (c) 2021-2023 adityatelange + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/web/themes/PaperMod/README.md b/web/themes/PaperMod/README.md new file mode 100644 index 0000000..00dec5a --- /dev/null +++ b/web/themes/PaperMod/README.md @@ -0,0 +1,103 @@ +
+ +
+ +--- + +## Features/Mods 💥 + +- Uses Hugo's asset generator with pipelining, fingerprinting, bundling and minification by default. +- 3 Modes: + - [Regular Mode.](https://github.com/adityatelange/hugo-PaperMod/wiki/Features#regular-mode-default-mode) + - [Home-Info Mode.](https://github.com/adityatelange/hugo-PaperMod/wiki/Features#home-info-mode) + - [Profile Mode.](https://github.com/adityatelange/hugo-PaperMod/wiki/Features#profile-mode) +- Table of Content Generation (newer implementation). +- Archive of posts. +- Social Icons (home-info and profile-mode) +- Social-Media Share buttons on posts. +- Menu location indicator. +- Multilingual support. (with language selector) +- Taxonomies +- Cover image for each post (with Responsive image support). +- Light/Dark theme (automatic theme switch a/c to browser theme and theme-switch button). +- SEO Friendly. +- Multiple Author support. +- Search Page with Fuse.js +- Other Posts suggestion below a post +- Breadcrumb Navigation +- Code Block Copy buttons +- No webpack, nodejs and other dependencies are required to edit the theme. + +Read Wiki For More Details => **[PaperMod - Features](https://github.com/adityatelange/hugo-PaperMod/wiki/Features)** + +--- + +## Install/Update 📥 + +Read Wiki For More Details => **[PaperMod - Installation](https://github.com/adityatelange/hugo-PaperMod/wiki/Installation)** + +--- + +## FAQs / How To's Guide 🙋 + +Read Wiki For More Details => **[PaperMod-FAQs](https://github.com/adityatelange/hugo-PaperMod/wiki/FAQs)** + +--- + +## Social-Icons/Share-Icons 🖼️ + +Read Wiki For More Details => **[PaperMod-Icons](https://github.com/adityatelange/hugo-PaperMod/wiki/Icons)** + +--- + +## Release Changelog 📃 + +Release ChangeLog has info about stuff added: **[Releases](https://github.com/adityatelange/hugo-PaperMod/releases)** + +--- + +## [Pagespeed Insights (100% ?)](https://pagespeed.web.dev/report?url=https://adityatelange.github.io/hugo-PaperMod/) 👀 + +--- + +## Support 🫶 + +- Star 🌟 this repository. +- Help spread the word about PaperMod by sharing it on social media and recommending it to your friends. 🗣️ +- You can also sponsor 🏅 on [Github Sponsors](https://github.com/sponsors/adityatelange) / [Ko-Fi](https://ko-fi.com/adityatelange). + +--- + +## Special Thanks 🌟 + +- [**Highlight.js**](https://github.com/highlightjs/highlight.js) +- [**Fuse.js**](https://github.com/krisk/fuse) +- [**Feather Icons**](https://github.com/feathericons/feather) +- [**Simple Icons**](https://github.com/simple-icons/simple-icons) +- **All Contributors and Supporters** + +--- + +## Stargazers over time 📈 + +[![Stargazers over time](https://starchart.cc/adityatelange/hugo-PaperMod.svg)](https://starchart.cc/adityatelange/hugo-PaperMod) diff --git a/web/themes/PaperMod/assets/css/common/404.css b/web/themes/PaperMod/assets/css/common/404.css new file mode 100644 index 0000000..8a23430 --- /dev/null +++ b/web/themes/PaperMod/assets/css/common/404.css @@ -0,0 +1,11 @@ +.not-found { + position: absolute; + left: 0; + right: 0; + display: flex; + align-items: center; + justify-content: center; + height: 80%; + font-size: 160px; + font-weight: 700; +} diff --git a/web/themes/PaperMod/assets/css/common/archive.css b/web/themes/PaperMod/assets/css/common/archive.css new file mode 100644 index 0000000..7e7e245 --- /dev/null +++ b/web/themes/PaperMod/assets/css/common/archive.css @@ -0,0 +1,44 @@ +.archive-posts { + width: 100%; + font-size: 16px; +} + +.archive-year { + margin-top: 40px; +} + +.archive-year:not(:last-of-type) { + border-bottom: 2px solid var(--border); +} + +.archive-month { + display: flex; + align-items: flex-start; + padding: 10px 0; +} + +.archive-month-header { + margin: 25px 0; + width: 200px; +} + +.archive-month:not(:last-of-type) { + border-bottom: 1px solid var(--border); +} + +.archive-entry { + position: relative; + padding: 5px; + margin: 10px 0; +} + +.archive-entry-title { + margin: 5px 0; + font-weight: 400; +} + +.archive-count, +.archive-meta { + color: var(--secondary); + font-size: 14px; +} diff --git a/web/themes/PaperMod/assets/css/common/footer.css b/web/themes/PaperMod/assets/css/common/footer.css new file mode 100644 index 0000000..5addb1e --- /dev/null +++ b/web/themes/PaperMod/assets/css/common/footer.css @@ -0,0 +1,60 @@ +.footer, +.top-link { + font-size: 12px; + color: var(--secondary); +} + +.footer { + max-width: calc(var(--main-width) + var(--gap) * 2); + margin: auto; + padding: calc((var(--footer-height) - var(--gap)) / 2) var(--gap); + text-align: center; + line-height: 24px; +} + +.footer span { + margin-inline-start: 1px; + margin-inline-end: 1px; +} + +.footer span:last-child { + white-space: nowrap; +} + +.footer a { + color: inherit; + border-bottom: 1px solid var(--secondary); +} + +.footer a:hover { + border-bottom: 1px solid var(--primary); +} + +.top-link { + visibility: hidden; + position: fixed; + bottom: 60px; + right: 30px; + z-index: 99; + background: var(--tertiary); + width: 42px; + height: 42px; + padding: 12px; + border-radius: 64px; + transition: visibility 0.5s, opacity 0.8s linear; +} + +.top-link, +.top-link svg { + filter: drop-shadow(0px 0px 0px var(--theme)); +} + +.footer a:hover, +.top-link:hover { + color: var(--primary); +} + +.top-link:focus, +#theme-toggle:focus { + outline: 0; +} diff --git a/web/themes/PaperMod/assets/css/common/header.css b/web/themes/PaperMod/assets/css/common/header.css new file mode 100644 index 0000000..64894da --- /dev/null +++ b/web/themes/PaperMod/assets/css/common/header.css @@ -0,0 +1,93 @@ +.nav { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + max-width: calc(var(--nav-width) + var(--gap) * 2); + margin-inline-start: auto; + margin-inline-end: auto; + line-height: var(--header-height); +} + +.nav a { + display: block; +} + +.logo, +#menu { + display: flex; + margin: auto var(--gap); +} + +.logo { + flex-wrap: inherit; +} + +.logo a { + font-size: 24px; + font-weight: 700; +} + +.logo a img, .logo a svg { + display: inline; + vertical-align: middle; + pointer-events: none; + transform: translate(0, -10%); + border-radius: 6px; + margin-inline-end: 8px; +} + +button#theme-toggle { + font-size: 26px; + margin: auto 4px; +} + +body.dark #moon { + vertical-align: middle; + display: none; +} + +body:not(.dark) #sun { + display: none; +} + +#menu { + list-style: none; + word-break: keep-all; + overflow-x: auto; + white-space: nowrap; +} + +#menu li + li { + margin-inline-start: var(--gap); +} + +#menu a { + font-size: 16px; +} + +#menu .active { + font-weight: 500; + border-bottom: 2px solid currentColor; +} + +.lang-switch li, +.lang-switch ul, +.logo-switches { + display: inline-flex; + margin: auto 4px; +} + +.lang-switch { + display: flex; + flex-wrap: inherit; +} + +.lang-switch a { + margin: auto 3px; + font-size: 16px; + font-weight: 500; +} + +.logo-switches { + flex-wrap: inherit; +} diff --git a/web/themes/PaperMod/assets/css/common/main.css b/web/themes/PaperMod/assets/css/common/main.css new file mode 100644 index 0000000..50022ac --- /dev/null +++ b/web/themes/PaperMod/assets/css/common/main.css @@ -0,0 +1,68 @@ +.main { + position: relative; + min-height: calc(100vh - var(--header-height) - var(--footer-height)); + max-width: calc(var(--main-width) + var(--gap) * 2); + margin: auto; + padding: var(--gap); +} + +.page-header h1 { + font-size: 40px; +} + +.pagination { + display: flex; +} + +.pagination a { + color: var(--theme); + font-size: 13px; + line-height: 36px; + background: var(--primary); + border-radius: calc(36px / 2); + padding: 0 16px; +} + +.pagination .next { + margin-inline-start: auto; +} + +.social-icons { + padding: 12px 0; +} + +.social-icons a:not(:last-of-type) { + margin-inline-end: 12px; +} + +.social-icons a svg { + height: 26px; + width: 26px; +} + +code { + direction: ltr; +} + +div.highlight, +pre { + position: relative; +} + +.copy-code { + display: none; + position: absolute; + top: 4px; + right: 4px; + color: rgba(255, 255, 255, 0.8); + background: rgba(78, 78, 78, 0.8); + border-radius: var(--radius); + padding: 0 5px; + font-size: 14px; + user-select: none; +} + +div.highlight:hover .copy-code, +pre:hover .copy-code { + display: block; +} diff --git a/web/themes/PaperMod/assets/css/common/post-entry.css b/web/themes/PaperMod/assets/css/common/post-entry.css new file mode 100644 index 0000000..885aa2a --- /dev/null +++ b/web/themes/PaperMod/assets/css/common/post-entry.css @@ -0,0 +1,104 @@ +.first-entry { + position: relative; + display: flex; + flex-direction: column; + justify-content: center; + min-height: 320px; + margin: var(--gap) 0 calc(var(--gap) * 2) 0; +} + +.first-entry .entry-header { + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 3; +} + +.first-entry .entry-header h1 { + font-size: 34px; + line-height: 1.3; +} + +.first-entry .entry-content { + margin: 14px 0; + font-size: 16px; + -webkit-line-clamp: 3; +} + +.first-entry .entry-footer { + font-size: 14px; +} + +.home-info .entry-content { + -webkit-line-clamp: unset; +} + +.post-entry { + position: relative; + margin-bottom: var(--gap); + padding: var(--gap); + background: var(--entry); + border-radius: var(--radius); + transition: transform 0.1s; + border: 1px solid var(--border); +} + +.post-entry:active { + transform: scale(0.96); +} + +.tag-entry .entry-cover { + display: none; +} + +.entry-header h2 { + font-size: 24px; + line-height: 1.3; +} + +.entry-content { + margin: 8px 0; + color: var(--secondary); + font-size: 14px; + line-height: 1.6; + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +.entry-footer { + color: var(--secondary); + font-size: 13px; +} + +.entry-link { + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; +} + +.entry-cover, +.entry-isdraft { + font-size: 14px; + color: var(--secondary); +} + +.entry-cover { + margin-bottom: var(--gap); + text-align: center; +} + +.entry-cover img { + border-radius: var(--radius); + pointer-events: none; + width: 100%; + height: auto; +} + +.entry-cover a { + color: var(--secondary); + box-shadow: 0 1px 0 var(--primary); +} diff --git a/web/themes/PaperMod/assets/css/common/post-single.css b/web/themes/PaperMod/assets/css/common/post-single.css new file mode 100644 index 0000000..47b9888 --- /dev/null +++ b/web/themes/PaperMod/assets/css/common/post-single.css @@ -0,0 +1,402 @@ +.page-header, +.post-header { + margin: 24px auto var(--content-gap) auto; +} + +.post-title { + margin-bottom: 2px; + font-size: 40px; +} + +.post-description { + margin-top: 10px; + margin-bottom: 5px; +} + +.post-meta, +.breadcrumbs { + color: var(--secondary); + font-size: 14px; + display: flex; + flex-wrap: wrap; +} + +.post-meta .i18n_list li { + display: inline-flex; + list-style: none; + margin: auto 3px; + box-shadow: 0 1px 0 var(--secondary); +} + +.breadcrumbs a { + font-size: 16px; +} + +.post-content { + color: var(--content); +} + +.post-content h3, +.post-content h4, +.post-content h5, +.post-content h6 { + margin: 24px 0 16px; +} + +.post-content h1 { + margin: 40px auto 32px; + font-size: 40px; +} + +.post-content h2 { + margin: 32px auto 24px; + font-size: 32px; +} + +.post-content h3 { + font-size: 24px; +} + +.post-content h4 { + font-size: 16px; +} + +.post-content h5 { + font-size: 14px; +} + +.post-content h6 { + font-size: 12px; +} + +.post-content a, +.toc a:hover { + box-shadow: 0 1px 0; + box-decoration-break: clone; + -webkit-box-decoration-break: clone; +} + +.post-content a code { + margin: auto 0; + border-radius: 0; + box-shadow: 0 -1px 0 var(--primary) inset; +} + +.post-content del { + text-decoration: line-through; +} + +.post-content dl, +.post-content ol, +.post-content p, +.post-content figure, +.post-content ul { + margin-bottom: var(--content-gap); +} + +.post-content ol, +.post-content ul { + padding-inline-start: 20px; +} + +.post-content li { + margin-top: 5px; +} + +.post-content li p { + margin-bottom: 0; +} + +.post-content dl { + display: flex; + flex-wrap: wrap; + margin: 0; +} + +.post-content dt { + width: 25%; + font-weight: 700; +} + +.post-content dd { + width: 75%; + margin-inline-start: 0; + padding-inline-start: 10px; +} + +.post-content dd ~ dd, +.post-content dt ~ dt { + margin-top: 10px; +} + +.post-content table { + margin-bottom: 32px; +} + +.post-content table th, +.post-content table:not(.highlighttable, .highlight table, .gist .highlight) td { + min-width: 80px; + padding: 12px 8px; + line-height: 1.5; + border-bottom: 1px solid var(--border); +} + +.post-content table th { + font-size: 14px; + text-align: start; +} + +.post-content table:not(.highlighttable) td code:only-child { + margin: auto 0; +} + +.post-content .highlight table { + border-radius: var(--radius); +} + +.post-content .highlight:not(table) { + margin: 10px auto; + background: var(--hljs-bg) !important; + border-radius: var(--radius); + direction: ltr; +} + +.post-content li > .highlight { + margin-inline-end: 0; +} + +.post-content ul pre { + margin-inline-start: calc(var(--gap) * -2); +} + +.post-content .highlight pre { + margin: 0; +} + +.post-content .highlighttable { + table-layout: fixed; +} + +.post-content .highlighttable td:first-child { + width: 40px; +} + +.post-content .highlighttable td .linenodiv { + padding-inline-end: 0 !important; +} + +.post-content .highlighttable td .highlight, +.post-content .highlighttable td .linenodiv pre { + margin-bottom: 0; +} + +.post-content code { + margin: auto 4px; + padding: 4px 6px; + font-size: 0.78em; + line-height: 1.5; + background: var(--code-bg); + border-radius: 2px; +} + +.post-content pre code { + display: block; + margin: auto 0; + padding: 10px; + color: rgb(213, 213, 214); + background: var(--hljs-bg) !important; + border-radius: var(--radius); + overflow-x: auto; + word-break: break-all; +} + +.post-content blockquote { + margin: 20px 0; + padding: 0 14px; + border-inline-start: 3px solid var(--primary); +} + +.post-content hr { + margin: 30px 0; + height: 2px; + background: var(--tertiary); + border: 0; +} + +.post-content iframe { + max-width: 100%; +} + +.post-content img { + border-radius: 4px; + margin: 1rem 0; +} + +.post-content img[src*="#center"] { + margin: 1rem auto; +} + +.post-content figure.align-center { + text-align: center; +} + +.post-content figure > figcaption { + color: var(--primary); + font-size: 16px; + font-weight: bold; + margin: 8px 0 16px; +} + +.post-content figure > figcaption > p { + color: var(--secondary); + font-size: 14px; + font-weight: normal; +} + +.toc { + margin: 0 2px 40px 2px; + border: 1px solid var(--border); + background: var(--code-bg); + border-radius: var(--radius); + padding: 0.4em; +} + +.dark .toc { + background: var(--entry); +} + +.toc details summary { + cursor: zoom-in; + margin-inline-start: 20px; +} + +.toc details[open] summary { + cursor: zoom-out; +} + +.toc .details { + display: inline; + font-weight: 500; +} + +.toc .inner { + margin: 0 20px; + padding: 10px 20px; +} + +.toc li ul { + margin-inline-start: var(--gap); +} + +.toc summary:focus { + outline: 0; +} + +.post-footer { + margin-top: 56px; +} + +.post-tags li { + display: inline-block; + margin-inline-end: 3px; + margin-bottom: 5px; +} + +.post-tags a, +.share-buttons, +.paginav { + border-radius: var(--radius); + background: var(--code-bg); + border: 1px solid var(--border); +} + +.post-tags a { + display: block; + padding-inline-start: 14px; + padding-inline-end: 14px; + color: var(--secondary); + font-size: 14px; + line-height: 34px; + background: var(--code-bg); +} + +.post-tags a:hover, +.paginav a:hover { + background: var(--border); +} + +.share-buttons { + margin: 14px 0; + padding-inline-start: var(--radius); + display: flex; + justify-content: center; + overflow-x: auto; +} + +.share-buttons a { + margin-top: 10px; +} + +.share-buttons a:not(:last-of-type) { + margin-inline-end: 12px; +} + +h1:hover .anchor, +h2:hover .anchor, +h3:hover .anchor, +h4:hover .anchor, +h5:hover .anchor, +h6:hover .anchor { + display: inline-flex; + color: var(--secondary); + margin-inline-start: 8px; + font-weight: 500; + user-select: none; +} + +.paginav { + margin: 10px 0; + display: flex; + line-height: 30px; + border-radius: var(--radius); +} + +.paginav a { + padding-inline-start: 14px; + padding-inline-end: 14px; + border-radius: var(--radius); +} + +.paginav .title { + letter-spacing: 1px; + text-transform: uppercase; + font-size: small; + color: var(--secondary); +} + +.paginav .prev, +.paginav .next { + width: 50%; +} + +.paginav span:hover:not(.title) { + box-shadow: 0 1px 0; +} + +.paginav .next { + margin-inline-start: auto; + text-align: right; +} + +[dir="rtl"] .paginav .next { + text-align: left; +} + +h1>a>svg { + display: inline; +} + +img.in-text { + display: inline; + margin: auto; +} diff --git a/web/themes/PaperMod/assets/css/common/profile-mode.css b/web/themes/PaperMod/assets/css/common/profile-mode.css new file mode 100644 index 0000000..58f2819 --- /dev/null +++ b/web/themes/PaperMod/assets/css/common/profile-mode.css @@ -0,0 +1,42 @@ +.buttons, +.main .profile { + display: flex; + justify-content: center; +} + +.main .profile { + align-items: center; + min-height: calc(100vh - var(--header-height) - var(--footer-height) - (var(--gap) * 2)); + text-align: center; +} + +.profile .profile_inner h1 { + padding: 12px 0; +} + +.profile img { + display: inline-table; + border-radius: 50%; +} + +.buttons { + flex-wrap: wrap; + max-width: 400px; + margin: 0 auto; +} + +.button { + background: var(--tertiary); + border-radius: var(--radius); + margin: 8px; + padding: 6px; + transition: transform 0.1s; +} + +.button-inner { + padding: 0 8px; +} + +.button:active { + transform: scale(0.96); +} diff --git a/web/themes/PaperMod/assets/css/common/search.css b/web/themes/PaperMod/assets/css/common/search.css new file mode 100644 index 0000000..38d5b6b --- /dev/null +++ b/web/themes/PaperMod/assets/css/common/search.css @@ -0,0 +1,45 @@ +#searchbox input { + padding: 4px 10px; + width: 100%; + color: var(--primary); + font-weight: bold; + border: 2px solid var(--tertiary); + border-radius: var(--radius); +} + +#searchbox input:focus { + border-color: var(--secondary); +} + +#searchResults li { + list-style: none; + border-radius: var(--radius); + padding: 10px; + margin: 10px 0; + position: relative; + font-weight: 500; +} + +#searchResults { + margin: 10px 0; + width: 100%; +} + +#searchResults li:active { + transition: transform 0.1s; + transform: scale(0.98); +} + +#searchResults a { + position: absolute; + width: 100%; + height: 100%; + top: 0px; + left: 0px; + outline: none; +} + +#searchResults .focus { + transform: scale(0.98); + border: 2px solid var(--tertiary); +} diff --git a/web/themes/PaperMod/assets/css/common/terms.css b/web/themes/PaperMod/assets/css/common/terms.css new file mode 100644 index 0000000..244614b --- /dev/null +++ b/web/themes/PaperMod/assets/css/common/terms.css @@ -0,0 +1,18 @@ +.terms-tags li { + display: inline-block; + margin: 10px; + font-weight: 500; +} + +.terms-tags a { + display: block; + padding: 3px 10px; + background: var(--tertiary); + border-radius: 6px; + transition: transform 0.1s; +} + +.terms-tags a:active { + background: var(--tertiary); + transform: scale(0.96); +} diff --git a/web/themes/PaperMod/assets/css/core/license.css b/web/themes/PaperMod/assets/css/core/license.css new file mode 100644 index 0000000..6234007 --- /dev/null +++ b/web/themes/PaperMod/assets/css/core/license.css @@ -0,0 +1,6 @@ +/* + PaperMod v7 + License: MIT https://github.com/adityatelange/hugo-PaperMod/blob/master/LICENSE + Copyright (c) 2020 nanxiaobei and adityatelange + Copyright (c) 2021-2023 adityatelange +*/ diff --git a/web/themes/PaperMod/assets/css/core/reset.css b/web/themes/PaperMod/assets/css/core/reset.css new file mode 100644 index 0000000..f509cf6 --- /dev/null +++ b/web/themes/PaperMod/assets/css/core/reset.css @@ -0,0 +1,116 @@ +*, +::after, +::before { + box-sizing: border-box; +} + +html { + -webkit-tap-highlight-color: transparent; + overflow-y: scroll; +} + +a, +button, +body, +h1, +h2, +h3, +h4, +h5, +h6 { + color: var(--primary); +} + +body { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; + font-size: 18px; + line-height: 1.6; + word-break: break-word; + background: var(--theme); +} + +article, +aside, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +table { + display: block; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + line-height: 1.2; +} + +h1, +h2, +h3, +h4, +h5, +h6, +p { + margin-top: 0; + margin-bottom: 0; +} + +ul { + padding: 0; +} + +a { + text-decoration: none; +} + +body, +figure, +ul { + margin: 0; +} + +table { + width: 100%; + border-collapse: collapse; + border-spacing: 0; + overflow-x: auto; + word-break: keep-all; +} + +button, +input, +textarea { + padding: 0; + font: inherit; + background: 0 0; + border: 0; +} + +input, +textarea { + outline: 0; +} + +button, +input[type=button], +input[type=submit] { + cursor: pointer; +} + +input:-webkit-autofill, +textarea:-webkit-autofill { + box-shadow: 0 0 0 50px var(--theme) inset; +} + +img { + display: block; + max-width: 100%; +} diff --git a/web/themes/PaperMod/assets/css/core/theme-vars.css b/web/themes/PaperMod/assets/css/core/theme-vars.css new file mode 100644 index 0000000..fd0c5ee --- /dev/null +++ b/web/themes/PaperMod/assets/css/core/theme-vars.css @@ -0,0 +1,38 @@ +:root { + --gap: 24px; + --content-gap: 20px; + --nav-width: 1024px; + --main-width: 720px; + --header-height: 60px; + --footer-height: 60px; + --radius: 8px; + --theme: rgb(255, 255, 255); + --entry: rgb(255, 255, 255); + --primary: rgb(30, 30, 30); + --secondary: rgb(108, 108, 108); + --tertiary: rgb(214, 214, 214); + --content: rgb(31, 31, 31); + --hljs-bg: rgb(28, 29, 33); + --code-bg: rgb(245, 245, 245); + --border: rgb(238, 238, 238); +} + +.dark { + --theme: rgb(29, 30, 32); + --entry: rgb(46, 46, 51); + --primary: rgb(218, 218, 219); + --secondary: rgb(155, 156, 157); + --tertiary: rgb(65, 66, 68); + --content: rgb(196, 196, 197); + --hljs-bg: rgb(46, 46, 51); + --code-bg: rgb(55, 56, 62); + --border: rgb(51, 51, 51); +} + +.list { + background: var(--code-bg); +} + +.dark.list { + background: var(--theme); +} diff --git a/web/themes/PaperMod/assets/css/core/zmedia.css b/web/themes/PaperMod/assets/css/core/zmedia.css new file mode 100644 index 0000000..210d486 --- /dev/null +++ b/web/themes/PaperMod/assets/css/core/zmedia.css @@ -0,0 +1,49 @@ +@media screen and (max-width: 768px) { + /* theme-vars */ + :root { + --gap: 14px; + } + + /* profile-mode */ + .profile img { + transform: scale(0.85); + } + + /* post-entry */ + .first-entry { + min-height: 260px; + } + + /* archive */ + .archive-month { + flex-direction: column; + } + + .archive-year { + margin-top: 20px; + } + + /* footer */ + .footer { + padding: calc((var(--footer-height) - var(--gap) - 10px) / 2) var(--gap); + } +} + +/* footer */ +@media screen and (max-width: 900px) { + .list .top-link { + transform: translateY(-5rem); + } +} + +@media (prefers-reduced-motion) { + /* terms; profile-mode; post-single; post-entry; post-entry; search; search */ + .terms-tags a:active, + .button:active, + .post-entry:active, + .top-link, + #searchResults .focus, + #searchResults li:active { + transform: none; + } +} diff --git a/web/themes/PaperMod/assets/css/extended/blank.css b/web/themes/PaperMod/assets/css/extended/blank.css new file mode 100644 index 0000000..a577295 --- /dev/null +++ b/web/themes/PaperMod/assets/css/extended/blank.css @@ -0,0 +1,5 @@ +/* +This is just a placeholder blank stylesheet so as to support adding custom styles budled with theme's default styles + +Read https://github.com/adityatelange/hugo-PaperMod/wiki/FAQs#bundling-custom-css-with-themes-assets for more info +*/ diff --git a/web/themes/PaperMod/assets/css/hljs/an-old-hope.min.css b/web/themes/PaperMod/assets/css/hljs/an-old-hope.min.css new file mode 100644 index 0000000..b5dabdf --- /dev/null +++ b/web/themes/PaperMod/assets/css/hljs/an-old-hope.min.css @@ -0,0 +1,63 @@ +.hljs-comment, +.hljs-quote { + color: #b6b18b; +} + +.hljs-deletion, +.hljs-name, +.hljs-regexp, +.hljs-selector-class, +.hljs-selector-id, +.hljs-tag, +.hljs-template-variable, +.hljs-variable { + color: #eb3c54; +} + +.hljs-built_in, +.hljs-builtin-name, +.hljs-link, +.hljs-literal, +.hljs-meta, +.hljs-number, +.hljs-params, +.hljs-type { + color: #e7ce56; +} + +.hljs-attribute { + color: #ee7c2b; +} + +.hljs-addition, +.hljs-bullet, +.hljs-string, +.hljs-symbol { + color: #4fb4d7; +} + +.hljs-section, +.hljs-title { + color: #78bb65; +} + +.hljs-keyword, +.hljs-selector-tag { + color: #b45ea4; +} + +.hljs { + display: block; + overflow-x: auto; + background: #1c1d21; + color: #c0c5ce; + padding: .5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: 700; +} diff --git a/web/themes/PaperMod/assets/css/includes/scroll-bar.css b/web/themes/PaperMod/assets/css/includes/scroll-bar.css new file mode 100644 index 0000000..47405de --- /dev/null +++ b/web/themes/PaperMod/assets/css/includes/scroll-bar.css @@ -0,0 +1,63 @@ +/* from reset */ +::-webkit-scrollbar-track { + background: 0 0; +} + +.list:not(.dark)::-webkit-scrollbar-track { + background: var(--code-bg); +} + +::-webkit-scrollbar-thumb { + background: var(--tertiary); + border: 5px solid var(--theme); + border-radius: var(--radius); +} + +.list:not(.dark)::-webkit-scrollbar-thumb { + border: 5px solid var(--code-bg); +} + +::-webkit-scrollbar-thumb:hover { + background: var(--secondary); +} + +::-webkit-scrollbar:not(.highlighttable, .highlight table, .gist .highlight) { + background: var(--theme); +} + +/* from post-single */ +.post-content .highlighttable td .highlight pre code::-webkit-scrollbar { + display: none; +} + +.post-content :not(table) ::-webkit-scrollbar-thumb { + border: 2px solid var(--hljs-bg); + background: rgb(113, 113, 117); +} + +.post-content :not(table) ::-webkit-scrollbar-thumb:hover { + background: rgb(163, 163, 165); +} + +.gist table::-webkit-scrollbar-thumb { + border: 2px solid rgb(255, 255, 255); + background: rgb(173, 173, 173); +} + +.gist table::-webkit-scrollbar-thumb:hover { + background: rgb(112, 112, 112); +} + +.post-content table::-webkit-scrollbar-thumb { + border-width: 2px; +} + +/* from zmedia */ +@media screen and (min-width: 768px) { + + /* reset */ + ::-webkit-scrollbar { + width: 19px; + height: 11px; + } +} \ No newline at end of file diff --git a/web/themes/PaperMod/assets/js/fastsearch.js b/web/themes/PaperMod/assets/js/fastsearch.js new file mode 100644 index 0000000..06ebcfb --- /dev/null +++ b/web/themes/PaperMod/assets/js/fastsearch.js @@ -0,0 +1,147 @@ +import * as params from '@params'; + +let fuse; // holds our search engine +let resList = document.getElementById('searchResults'); +let sInput = document.getElementById('searchInput'); +let first, last, current_elem = null +let resultsAvailable = false; + +// load our search index +window.onload = function () { + let xhr = new XMLHttpRequest(); + xhr.onreadystatechange = function () { + if (xhr.readyState === 4) { + if (xhr.status === 200) { + let data = JSON.parse(xhr.responseText); + if (data) { + // fuse.js options; check fuse.js website for details + let options = { + distance: 100, + threshold: 0.4, + ignoreLocation: true, + keys: [ + 'title', + 'permalink', + 'summary', + 'content' + ] + }; + if (params.fuseOpts) { + options = { + isCaseSensitive: params.fuseOpts.iscasesensitive ?? false, + includeScore: params.fuseOpts.includescore ?? false, + includeMatches: params.fuseOpts.includematches ?? false, + minMatchCharLength: params.fuseOpts.minmatchcharlength ?? 1, + shouldSort: params.fuseOpts.shouldsort ?? true, + findAllMatches: params.fuseOpts.findallmatches ?? false, + keys: params.fuseOpts.keys ?? ['title', 'permalink', 'summary', 'content'], + location: params.fuseOpts.location ?? 0, + threshold: params.fuseOpts.threshold ?? 0.4, + distance: params.fuseOpts.distance ?? 100, + ignoreLocation: params.fuseOpts.ignorelocation ?? true + } + } + fuse = new Fuse(data, options); // build the index from the json file + } + } else { + console.log(xhr.responseText); + } + } + }; + xhr.open('GET', "../index.json"); + xhr.send(); +} + +function activeToggle(ae) { + document.querySelectorAll('.focus').forEach(function (element) { + // rm focus class + element.classList.remove("focus") + }); + if (ae) { + ae.focus() + document.activeElement = current_elem = ae; + ae.parentElement.classList.add("focus") + } else { + document.activeElement.parentElement.classList.add("focus") + } +} + +function reset() { + resultsAvailable = false; + resList.innerHTML = sInput.value = ''; // clear inputbox and searchResults + sInput.focus(); // shift focus to input box +} + +// execute search as each character is typed +sInput.onkeyup = function (e) { + // run a search query (for "term") every time a letter is typed + // in the search box + if (fuse) { + const results = fuse.search(this.value.trim()); // the actual query being run using fuse.js + if (results.length !== 0) { + // build our html if result exists + let resultSet = ''; // our results bucket + + for (let item in results) { + resultSet += `{{ .Get "summary" | markdownify }}
+ {{ .Inner | markdownify }}
+