diff --git a/.envrc b/.envrc index f773b0e..7b61624 100644 --- a/.envrc +++ b/.envrc @@ -1,4 +1,2 @@ -use flake +use nix layout node -mkdir -p "${HOME}/Library/Application Support/SourceGit" -echo "${PATH}" > "${HOME}/Library/Application Support/SourceGit/PATH" diff --git a/.github/workflows/hugo.yml b/.github/workflows/hugo.yml new file mode 100644 index 0000000..cd6ae84 --- /dev/null +++ b/.github/workflows/hugo.yml @@ -0,0 +1,90 @@ +# Sample workflow for building and deploying a Hugo site to GitHub Pages +name: Deploy Hugo site to Pages + +on: + # Runs on pushes targeting the default branch + push: + branches: ["master"] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow one concurrent deployment +concurrency: + group: "pages" + cancel-in-progress: true + +# Default to bash +defaults: + run: + shell: bash + +jobs: + # Build job + build: + runs-on: ubuntu-latest + env: + HUGO_VERSION: 0.111.3 + NODE_VERSION: 18.14.2 + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + submodules: recursive + fetch-depth: 0 + - name: Install git-crypt + run: | + sudo apt-get install git-crypt -y + - name: Decrypt repository + run: | + echo "${{ secrets.GIT_CRYPT_KEY }}" \ + | base64 --decode \ + > ~/millironx.github.io.key + git-crypt unlock ~/millironx.github.io.key + - name: Install Node.js + uses: actions/setup-node@v3 + with: + node-version: "${{ env.NODE_VERSION }}" + - name: Install Hugo CLI + uses: peaceiris/actions-hugo@v2 + with: + hugo-version: "${{ env.HUGO_VERSION }}" + extended: true + - name: Setup Pages + id: pages + uses: actions/configure-pages@v2 + - name: Install postcss cli + run: npm install -g postcss-cli + - name: Install Node.js dependencies + run: npm ci + - name: Build with Hugo + env: + # For maximum backward compatibility with Hugo modules + HUGO_ENVIRONMENT: production + HUGO_ENV: production + run: | + hugo \ + --minify \ + --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/.gitignore b/.gitignore index c4bb138..51c7109 100644 --- a/.gitignore +++ b/.gitignore @@ -155,37 +155,3 @@ dist ### FontAwesome gitignore ### fontawesome-pro-6.3.0-web - -### direnv gitignore ### -.direnv - -### Nix Flake gitignore ### -result - -### MacOS gitignore ### -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk diff --git a/.gitpod.yml b/.gitpod.yml new file mode 100644 index 0000000..6e15b28 --- /dev/null +++ b/.gitpod.yml @@ -0,0 +1,10 @@ +# List the start up tasks. Learn more https://www.gitpod.io/docs/config-start-tasks/ +tasks: + - name: Install Hugo dependencies + before: brew install hugo + init: echo "Your version of Hugo is `hugo version`" + command: npm ci && hugo server -D -F --baseUrl $(gp url 1313) --liveReloadPort=443 --appendPort=false --bind=0.0.0.0 +# List the ports to expose. Learn more https://www.gitpod.io/docs/config-ports/ +ports: + - port: 1313 + onOpen: open-preview diff --git a/.prettierignore b/.prettierignore index 1fea400..aad4421 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1 +1,2 @@ -layouts/_default/index.manifest.json +node_modules +themes diff --git a/.prettierrc b/.prettierrc index 672b6f3..7c5268b 100644 --- a/.prettierrc +++ b/.prettierrc @@ -4,6 +4,3 @@ overrides: - files: "*.html" options: parser: "go-template" - - files: "*.gotmpl" - options: - parser: "go-template" diff --git a/.woodpecker.yml b/.woodpecker.yml deleted file mode 100644 index 881a8fd..0000000 --- a/.woodpecker.yml +++ /dev/null @@ -1,18 +0,0 @@ -when: - branch: master - event: - - push - - cron - cron: "weekly-build" - -steps: - - name: Build site - image: hugomods/hugo:std-base-non-root-0.141.0 - commands: - - hugo --minify - - name: Deploy to pages - image: codeberg.org/xfix/plugin-codeberg-pages-deploy:1 - settings: - folder: public - ssh_key: - from_secret: ssh_key diff --git a/.woodpecker/build-site.yml b/.woodpecker/build-site.yml new file mode 100644 index 0000000..a9d9090 --- /dev/null +++ b/.woodpecker/build-site.yml @@ -0,0 +1,21 @@ +when: + branch: "master" + +steps: + - name: Install Node packages + image: node:18.14.2-slim + commands: + - npm ci + - name: Build Hugo site + image: peaceiris/hugo:v0.111.3-full + environment: + HUGO_ENV: production + HUGO_ENVIRONMENT: production + commands: + - hugo --minify + - name: Deploy to pages + image: codeberg.org/xfix/plugin-codeberg-pages-deploy:1 + settings: + folder: public + ssh_key: + from_secret: ssh_key diff --git a/.zed/settings.json b/.zed/settings.json deleted file mode 100644 index eb5924a..0000000 --- a/.zed/settings.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "languages": { - "HTML": { - "formatter": { - "external": { - "command": "prettier", - "arguments": ["--stdin-filepath", "{buffer_path}"] - } - } - } - }, - "file_types": { "HTML": ["gotmpl"] } -} diff --git a/README.md b/README.md index 165340a..ca73784 100644 --- a/README.md +++ b/README.md @@ -1,42 +1,3 @@ -# pages +# millironx.github.io -[![status-badge](https://woodpecker.millironx.com/api/badges/30/status.svg?branch=master)](https://woodpecker.millironx.com/repos/30/branches/master) - -My personal website. Hosted over at - -## Notes to self - -### Nix dev shell - -All developer dependencies are now bundled as a Nix Flake. The only trouble with -this is that npm packages don't play well with Nix (and especially Flakes), so -npm packages are specified twice: once in `package{-lock}.json` and then again -in `node*.nix`. - -Compounding this, there are formatters and commit hooks that require npm to be -functional. So, to develop right now requires allowing direnv to setup the Nix -development shell, then immediately installing npm packages via `npm ci`. VSCode -(with extensions) and Zed are smart enough to figure out how to use direnv, and -direnv will pass the PATH to SourceGit for Mac, but other programs aren't that -smart, so you'll need to launch those programs from inside a direnv shell to -make sure they have Prettier, Husky, and all that jazz to execute the hooks. - -Last compounding factors: if `node_modules` is present in the root directory, -then node2nix won't create a correct derivation, so `node_modules` will need to -be temporarily deleted after modifying any npm packages, then as soon as -node2nix is happy, then immediately run `npm ci` to get the commit hooks working -again. Oh, and also, I renamed the `default.nix` file generated by node2nix to -node.nix to avoid giving direnv any wrong impressions about what derivation to -run. - -Yes, hopefully I can get completely away from npm here soon, but this is a minor -inconvenience considering how (not) often I install new packages into this site, -and really discourages me from contributing to the website obesity crisis. - -### Nix building - -Nix building will not work because Hugo reaches out to the internet via content -adapters, and that (by intention) is not perfectly reproducable. As such, -_development_ tools are installed in a Nix shell, but building has been removed -from the Flake. Thankfully, hugomods provides "canonical" Docker images for hugo -now. +My personal website. Now hosted over at https://millironx.com diff --git a/assets/characters/README.md b/assets/characters/README.md deleted file mode 100644 index 3b2d851..0000000 --- a/assets/characters/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# Characters - -Imaginary friends that help me inject personality into my articles. These are -anthropomorphized versions of animals that I have known in real life. I tried to -draw them roughly in the style of Chris Pasquini, but failed myself, then tried -using Perplexity's image generation. The style isn't quite the same, but I like -it for these animals. Also, Perplexity does a horrible job of labeling images, -so ignore the ref sheet emotion labels. - -## Spawn of Satan (aka Spawn aka SOS) - -![Spawn ref sheet](spawn/_ref-body-perplexity.png) - -Spawn of Satan is the name Travis gave to the cannulated cow, and it stuck. -Spawn is old and cynical after having every professor with a new idea experiment -on her. After being in academia for so long, she knows her way around -mathematics and the scientific method reasonably well, even if she's never -formally taken a college course in the sciences. She is the realist to any blog -post's optimist. - -## Whelen - -![Whelen ref sheet](whelen/_ref-body-perplexity.png) - -Whelen is a happy-go-lucky German Shepherd/Husky mix puppy. He's been to school -once - and that was just to get neutered - so his knowledge of math and science, -heck, even of the humanities, isn't very good. He is very naive and thinks -everyone is nice and wants to be his friend, but he is also friendly to everyone -and is very vocal when he feels left out. He will step in when any blog post is -getting too technical and demand an explanation for real people (dogs?). diff --git a/assets/characters/spawn/_ref-blueeye-perplexity.png b/assets/characters/spawn/_ref-blueeye-perplexity.png deleted file mode 100644 index b8bef00..0000000 Binary files a/assets/characters/spawn/_ref-blueeye-perplexity.png and /dev/null differ diff --git a/assets/characters/spawn/_ref-body-perplexity.png b/assets/characters/spawn/_ref-body-perplexity.png deleted file mode 100644 index 04f95a6..0000000 Binary files a/assets/characters/spawn/_ref-body-perplexity.png and /dev/null differ diff --git a/assets/characters/spawn/_ref-bodysmirk-perplexity.png b/assets/characters/spawn/_ref-bodysmirk-perplexity.png deleted file mode 100644 index afb9ba2..0000000 Binary files a/assets/characters/spawn/_ref-bodysmirk-perplexity.png and /dev/null differ diff --git a/assets/characters/spawn/_ref-face-perplexity.png b/assets/characters/spawn/_ref-face-perplexity.png deleted file mode 100644 index de286db..0000000 Binary files a/assets/characters/spawn/_ref-face-perplexity.png and /dev/null differ diff --git a/assets/characters/spawn/body-anger.png b/assets/characters/spawn/body-anger.png deleted file mode 100644 index 0f9fd87..0000000 Binary files a/assets/characters/spawn/body-anger.png and /dev/null differ diff --git a/assets/characters/spawn/body-lazy.png b/assets/characters/spawn/body-lazy.png deleted file mode 100644 index 530eb46..0000000 Binary files a/assets/characters/spawn/body-lazy.png and /dev/null differ diff --git a/assets/characters/spawn/body-skeptic.png b/assets/characters/spawn/body-skeptic.png deleted file mode 100644 index 8e110dc..0000000 Binary files a/assets/characters/spawn/body-skeptic.png and /dev/null differ diff --git a/assets/characters/spawn/body-snark.png b/assets/characters/spawn/body-snark.png deleted file mode 100644 index e2be9e1..0000000 Binary files a/assets/characters/spawn/body-snark.png and /dev/null differ diff --git a/assets/characters/spawn/body-tired.png b/assets/characters/spawn/body-tired.png deleted file mode 100644 index 3d84c4d..0000000 Binary files a/assets/characters/spawn/body-tired.png and /dev/null differ diff --git a/assets/characters/spawn/face-confusion.png b/assets/characters/spawn/face-confusion.png deleted file mode 100644 index 6a70166..0000000 Binary files a/assets/characters/spawn/face-confusion.png and /dev/null differ diff --git a/assets/characters/spawn/face-happy.png b/assets/characters/spawn/face-happy.png deleted file mode 100644 index 445dcef..0000000 Binary files a/assets/characters/spawn/face-happy.png and /dev/null differ diff --git a/assets/characters/spawn/face-neutral.png b/assets/characters/spawn/face-neutral.png deleted file mode 100644 index 44b5522..0000000 Binary files a/assets/characters/spawn/face-neutral.png and /dev/null differ diff --git a/assets/characters/spawn/face-sad.png b/assets/characters/spawn/face-sad.png deleted file mode 100644 index 15fdb4e..0000000 Binary files a/assets/characters/spawn/face-sad.png and /dev/null differ diff --git a/assets/characters/spawn/face-toldyouso.png b/assets/characters/spawn/face-toldyouso.png deleted file mode 100644 index 9a908bb..0000000 Binary files a/assets/characters/spawn/face-toldyouso.png and /dev/null differ diff --git a/assets/characters/whelen/_ref-body-perplexity.png b/assets/characters/whelen/_ref-body-perplexity.png deleted file mode 100644 index e5d4103..0000000 Binary files a/assets/characters/whelen/_ref-body-perplexity.png and /dev/null differ diff --git a/assets/characters/whelen/_ref-face-perplexity.png b/assets/characters/whelen/_ref-face-perplexity.png deleted file mode 100644 index 107709c..0000000 Binary files a/assets/characters/whelen/_ref-face-perplexity.png and /dev/null differ diff --git a/assets/characters/whelen/body-determined.png b/assets/characters/whelen/body-determined.png deleted file mode 100644 index 2c37c46..0000000 Binary files a/assets/characters/whelen/body-determined.png and /dev/null differ diff --git a/assets/characters/whelen/body-happy.png b/assets/characters/whelen/body-happy.png deleted file mode 100644 index ef40187..0000000 Binary files a/assets/characters/whelen/body-happy.png and /dev/null differ diff --git a/assets/characters/whelen/body-neutral.png b/assets/characters/whelen/body-neutral.png deleted file mode 100644 index 9737ccc..0000000 Binary files a/assets/characters/whelen/body-neutral.png and /dev/null differ diff --git a/assets/characters/whelen/body-sad.png b/assets/characters/whelen/body-sad.png deleted file mode 100644 index 2056f02..0000000 Binary files a/assets/characters/whelen/body-sad.png and /dev/null differ diff --git a/assets/characters/whelen/body-tired.png b/assets/characters/whelen/body-tired.png deleted file mode 100644 index 855a49d..0000000 Binary files a/assets/characters/whelen/body-tired.png and /dev/null differ diff --git a/assets/characters/whelen/body-worry.png b/assets/characters/whelen/body-worry.png deleted file mode 100644 index 2dd85e2..0000000 Binary files a/assets/characters/whelen/body-worry.png and /dev/null differ diff --git a/assets/characters/whelen/face-anticipation.png b/assets/characters/whelen/face-anticipation.png deleted file mode 100644 index 0be27d0..0000000 Binary files a/assets/characters/whelen/face-anticipation.png and /dev/null differ diff --git a/assets/characters/whelen/face-bored.png b/assets/characters/whelen/face-bored.png deleted file mode 100644 index d376b4d..0000000 Binary files a/assets/characters/whelen/face-bored.png and /dev/null differ diff --git a/assets/characters/whelen/face-happy.png b/assets/characters/whelen/face-happy.png deleted file mode 100644 index af35cae..0000000 Binary files a/assets/characters/whelen/face-happy.png and /dev/null differ diff --git a/assets/characters/whelen/face-neutral.png b/assets/characters/whelen/face-neutral.png deleted file mode 100644 index 1a93432..0000000 Binary files a/assets/characters/whelen/face-neutral.png and /dev/null differ diff --git a/assets/characters/whelen/face-skeptic.png b/assets/characters/whelen/face-skeptic.png deleted file mode 100644 index 33cc063..0000000 Binary files a/assets/characters/whelen/face-skeptic.png and /dev/null differ diff --git a/assets/characters/whelen/face-tired.png b/assets/characters/whelen/face-tired.png deleted file mode 100644 index f395166..0000000 Binary files a/assets/characters/whelen/face-tired.png and /dev/null differ diff --git a/assets/characters/whelen/face-worry.png b/assets/characters/whelen/face-worry.png deleted file mode 100644 index 563b68e..0000000 Binary files a/assets/characters/whelen/face-worry.png and /dev/null differ diff --git a/assets/graphics/fa/bitcoin.svg b/assets/graphics/fa/bitcoin.svg deleted file mode 100644 index 8815bce..0000000 --- a/assets/graphics/fa/bitcoin.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/graphics/fa/block-quote.svg b/assets/graphics/fa/block-quote.svg deleted file mode 100644 index faa51e9..0000000 --- a/assets/graphics/fa/block-quote.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/graphics/fa/candy-bar.svg b/assets/graphics/fa/candy-bar.svg deleted file mode 100644 index 3c0bdfa..0000000 --- a/assets/graphics/fa/candy-bar.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/graphics/fa/chevrons-down.svg b/assets/graphics/fa/chevrons-down.svg deleted file mode 100644 index 0fab552..0000000 --- a/assets/graphics/fa/chevrons-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/graphics/fa/circle-info.svg b/assets/graphics/fa/circle-info.svg deleted file mode 100644 index 025e8d0..0000000 --- a/assets/graphics/fa/circle-info.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/graphics/fa/circle-quarters.svg b/assets/graphics/fa/circle-quarters.svg deleted file mode 100644 index 31f53d2..0000000 --- a/assets/graphics/fa/circle-quarters.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/graphics/fa/code.svg b/assets/graphics/fa/code.svg deleted file mode 100644 index c43b6d1..0000000 --- a/assets/graphics/fa/code.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/graphics/fa/codeberg.svg b/assets/graphics/fa/codeberg.svg deleted file mode 100644 index d5fdd1a..0000000 --- a/assets/graphics/fa/codeberg.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/assets/graphics/fa/ebay.svg b/assets/graphics/fa/ebay.svg deleted file mode 100644 index cc19ef6..0000000 --- a/assets/graphics/fa/ebay.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/graphics/fa/ethereum.svg b/assets/graphics/fa/ethereum.svg deleted file mode 100644 index b200fd2..0000000 --- a/assets/graphics/fa/ethereum.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/graphics/fa/google-scholar.svg b/assets/graphics/fa/google-scholar.svg deleted file mode 100644 index e2b6347..0000000 --- a/assets/graphics/fa/google-scholar.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/assets/graphics/fa/hacker-news.svg b/assets/graphics/fa/hacker-news.svg deleted file mode 100644 index 1d402c1..0000000 --- a/assets/graphics/fa/hacker-news.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/graphics/fa/lightning.svg b/assets/graphics/fa/lightning.svg deleted file mode 100644 index e8cc00c..0000000 --- a/assets/graphics/fa/lightning.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/graphics/fa/link.svg b/assets/graphics/fa/link.svg deleted file mode 100644 index 9ace2c7..0000000 --- a/assets/graphics/fa/link.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/graphics/fa/lutris.svg b/assets/graphics/fa/lutris.svg deleted file mode 100644 index fd6d2aa..0000000 --- a/assets/graphics/fa/lutris.svg +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/assets/graphics/fa/matrix.svg b/assets/graphics/fa/matrix.svg deleted file mode 100644 index a178912..0000000 --- a/assets/graphics/fa/matrix.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/assets/graphics/fa/monero.svg b/assets/graphics/fa/monero.svg deleted file mode 100644 index 2a1a5dc..0000000 --- a/assets/graphics/fa/monero.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/graphics/fa/p.svg b/assets/graphics/fa/p.svg deleted file mode 100644 index 8082e1d..0000000 --- a/assets/graphics/fa/p.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/graphics/fa/right-to-bracket.svg b/assets/graphics/fa/right-to-bracket.svg deleted file mode 100644 index 0d86ac3..0000000 --- a/assets/graphics/fa/right-to-bracket.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/graphics/fa/rss.svg b/assets/graphics/fa/rss.svg deleted file mode 100644 index ce2e0d4..0000000 --- a/assets/graphics/fa/rss.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/graphics/fa/scroll.svg b/assets/graphics/fa/scroll.svg deleted file mode 100644 index 2d5e7a8..0000000 --- a/assets/graphics/fa/scroll.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/graphics/fa/spotify.svg b/assets/graphics/fa/spotify.svg deleted file mode 100644 index cb99987..0000000 --- a/assets/graphics/fa/spotify.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/graphics/fa/zcash.svg b/assets/graphics/fa/zcash.svg deleted file mode 100644 index 2a9c9d7..0000000 --- a/assets/graphics/fa/zcash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/graphics/fa/zotero.svg b/assets/graphics/fa/zotero.svg deleted file mode 100644 index 2948c62..0000000 --- a/assets/graphics/fa/zotero.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/assets/graphics/millironx-icon.png b/assets/graphics/millironx-icon.png deleted file mode 100644 index 1c4913f..0000000 Binary files a/assets/graphics/millironx-icon.png and /dev/null differ diff --git a/assets/graphics/millironx-icon.svg b/assets/graphics/millironx-icon.svg deleted file mode 100644 index 42b2777..0000000 --- a/assets/graphics/millironx-icon.svg +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - diff --git a/assets/graphics/millironx.svg b/assets/graphics/millironx.svg index 2e1c756..c0e4bd1 100644 --- a/assets/graphics/millironx.svg +++ b/assets/graphics/millironx.svg @@ -1,42 +1,43 @@ - + + - + + + + + + diff --git a/content/thumbnail.jpg b/assets/images/charolette.jpg similarity index 100% rename from content/thumbnail.jpg rename to assets/images/charolette.jpg diff --git a/content/blogroll/thumbnail.jpg b/assets/images/eclipse.jpg similarity index 100% rename from content/blogroll/thumbnail.jpg rename to assets/images/eclipse.jpg diff --git a/content/academia/thumbnail.jpg b/assets/images/library.jpg similarity index 100% rename from content/academia/thumbnail.jpg rename to assets/images/library.jpg diff --git a/content/contact/thumbnail.jpg b/assets/images/venice-mailbox.jpg similarity index 100% rename from content/contact/thumbnail.jpg rename to assets/images/venice-mailbox.jpg diff --git a/assets/scripts/phone-masking.js b/assets/scripts/phone-masking.js index fd2d427..1edbd77 100644 --- a/assets/scripts/phone-masking.js +++ b/assets/scripts/phone-masking.js @@ -1,15 +1 @@ -// Built by perplexity.ai -function maskPhoneNumber(input) { - input.addEventListener("input", function (e) { - var x = e.target.value - .replace(/\D/g, "") - .match(/(\d{0,3})(\d{0,3})(\d{0,4})/); - e.target.value = !x[2] - ? x[1] - : "(" + x[1] + ") " + x[2] + (x[3] ? "-" + x[3] : ""); - }); -} - -// Usage -var phoneInput = document.getElementById("phone"); -maskPhoneNumber(phoneInput); +$("#phone").mask("(000) 000-0000"); diff --git a/assets/styles/millironx.css b/assets/styles/millironx.css index 00ad31e..fb47932 100644 --- a/assets/styles/millironx.css +++ b/assets/styles/millironx.css @@ -3,180 +3,21 @@ Color schemes */ color-scheme: light dark; - - --ear-tag-red-1: oklch(97.5% 0.016 35.7); - --ear-tag-red-2: oklch(95.9% 0.027 37.7); - --ear-tag-red-3: oklch(91.8% 0.055 33.4); - --ear-tag-red-4: oklch(84% 0.092 29.8); - --ear-tag-red-5: oklch(80% 0.123 29.8); - --ear-tag-red-6: oklch(71% 0.146 29.8); - --ear-tag-red-7: oklch(66% 0.154 29.8); - --ear-tag-red-8: oklch(58% 0.162 29.8); - --ear-tag-red-9: oklch(53% 0.154 29.8); - --ear-tag-red-10: oklch(49% 0.146 29.8); - --ear-tag-red-11: oklch(42% 0.131 29.8); - --ear-tag-red-12: oklch(35% 0.115 29.8); - --ear-tag-red-13: oklch(27% 0.092 29.8); - --ear-tag-red-14: oklch(20% 0.07 29.8); - --ear-tag-red-15: oklch(16% 0.054 29.8); - --ear-tag-red-16: oklch(10% 0.039 29.8); - --ear-tag-red: var(--ear-tag-red-12); - - --swiss-brown-1: oklch(98% 0.011 67.7); - --swiss-brown-2: oklch(97% 0.023 67.7); - --swiss-brown-3: oklch(93% 0.039 67.7); - --swiss-brown-4: oklch(84% 0.046 67.7); - --swiss-brown-5: oklch(80% 0.061 67.7); - --swiss-brown-6: oklch(71% 0.072 67.7); - --swiss-brown-7: oklch(66% 0.076 67.7); - --swiss-brown-8: oklch(58% 0.08 67.7); - --swiss-brown-9: oklch(53% 0.076 67.7); - --swiss-brown-10: oklch(49% 0.072 67.7); - --swiss-brown-11: oklch(42% 0.065 67.7); - --swiss-brown-12: oklch(35% 0.057 67.7); - --swiss-brown-13: oklch(27% 0.046 67.7); - --swiss-brown-14: oklch(20% 0.035 67.7); - --swiss-brown-15: oklch(16% 0.027 67.7); - --swiss-brown-16: oklch(10% 0.019 67.7); - --swiss-brown: var(--swiss-brown-12); - - --prickly-pear-yellow-1: oklch(98% 0.017 94.5); - --prickly-pear-yellow-2: oklch(97% 0.035 94.5); - --prickly-pear-yellow-3: oklch(93% 0.059 94.5); - --prickly-pear-yellow-4: oklch(84% 0.07 94.5); - --prickly-pear-yellow-5: oklch(80% 0.093 94.5); - --prickly-pear-yellow-6: oklch(71% 0.11 94.5); - --prickly-pear-yellow-7: oklch(66% 0.116 94.5); - --prickly-pear-yellow-8: oklch(58% 0.122 94.5); - --prickly-pear-yellow-9: oklch(53% 0.116 94.5); - --prickly-pear-yellow-10: oklch(49% 0.11 94.5); - --prickly-pear-yellow-11: oklch(42% 0.099 94.5); - --prickly-pear-yellow-12: oklch(35% 0.083 93.6); - --prickly-pear-yellow-13: oklch(27.1% 0.064 92.8); - --prickly-pear-yellow-14: oklch(20% 0.047 92.4); - --prickly-pear-yellow-15: oklch(16% 0.038 93.3); - --prickly-pear-yellow-16: oklch(10% 0.024 89.7); - --prickly-pear-yellow: var(--prickly-pear-yellow-7); - - --hayyard-green-1: oklch(98% 0.014 135); - --hayyard-green-2: oklch(97% 0.03 135); - --hayyard-green-3: oklch(93% 0.049 135); - --hayyard-green-4: oklch(84% 0.058 135); - --hayyard-green-5: oklch(80% 0.078 135); - --hayyard-green-6: oklch(71% 0.092 135); - --hayyard-green-7: oklch(66% 0.097 135); - --hayyard-green-8: oklch(58% 0.103 135); - --hayyard-green-9: oklch(53% 0.097 135); - --hayyard-green-10: oklch(49% 0.092 135); - --hayyard-green-11: oklch(42% 0.083 135); - --hayyard-green-12: oklch(35% 0.073 135); - --hayyard-green-13: oklch(27% 0.058 135); - --hayyard-green-14: oklch(20% 0.044 135); - --hayyard-green-15: oklch(16% 0.034 135); - --hayyard-green-16: oklch(10% 0.025 135); - --hayyard-green: var(--hayyard-green-11); - - --flaming-gorge-blue-1: oklch(98% 0.012 241); - --flaming-gorge-blue-2: oklch(96.8% 0.021 230); - --flaming-gorge-blue-3: oklch(92.9% 0.041 242); - --flaming-gorge-blue-4: oklch(84% 0.051 245); - --flaming-gorge-blue-5: oklch(80% 0.069 245); - --flaming-gorge-blue-6: oklch(71% 0.081 245); - --flaming-gorge-blue-7: oklch(66% 0.086 245); - --flaming-gorge-blue-8: oklch(58% 0.09 245); - --flaming-gorge-blue-9: oklch(53% 0.086 245); - --flaming-gorge-blue-10: oklch(49% 0.081 245); - --flaming-gorge-blue-11: oklch(42% 0.073 245); - --flaming-gorge-blue-12: oklch(35% 0.064 245); - --flaming-gorge-blue-13: oklch(27% 0.051 245); - --flaming-gorge-blue-14: oklch(20% 0.039 245); - --flaming-gorge-blue-15: oklch(16% 0.03 245); - --flaming-gorge-blue-16: oklch(10% 0.022 245); - --flaming-gorge-blue: var(--flaming-gorge-blue-12); - - --coeurdalene-purple-1: oklch(97.8% 0.016 311); - --coeurdalene-purple-2: oklch(96.5% 0.026 314); - --coeurdalene-purple-3: oklch(92.5% 0.052 308); - --coeurdalene-purple-4: oklch(84% 0.097 302); - --coeurdalene-purple-5: oklch(80% 0.129 302); - --coeurdalene-purple-6: oklch(71% 0.153 302); - --coeurdalene-purple-7: oklch(66% 0.162 302); - --coeurdalene-purple-8: oklch(58% 0.17 302); - --coeurdalene-purple-9: oklch(53% 0.162 302); - --coeurdalene-purple-10: oklch(49% 0.153 302); - --coeurdalene-purple-11: oklch(42% 0.138 302); - --coeurdalene-purple-12: oklch(35% 0.121 302); - --coeurdalene-purple-13: oklch(27% 0.097 302); - --coeurdalene-purple-14: oklch(20% 0.073 302); - --coeurdalene-purple-15: oklch(16% 0.056 302); - --coeurdalene-purple-16: oklch(10% 0.041 302); - --coeurdalene-purple: var(--coeurdalene-purple-13); - - --eclipse-1: oklch(98% 0 0); - --eclipse-2: oklch(97% 0 0); - --eclipse-3: oklch(93% 0 0); - --eclipse-4: oklch(84% 0 0); - --eclipse-5: oklch(80% 0 0); - --eclipse-6: oklch(71% 0 0); - --eclipse-7: oklch(66% 0 0); - --eclipse-8: oklch(58% 0 0); - --eclipse-9: oklch(53% 0 0); - --eclipse-10: oklch(49% 0 0); - --eclipse-11: oklch(42% 0 0); - --eclipse-12: oklch(35% 0 0); - --eclipse-13: oklch(27% 0 0); - --eclipse-14: oklch(20% 0 0); - --eclipse-15: oklch(16% 0 0); - --eclipse-16: oklch(10% 0 0); - --eclipse: var(--eclipse-12); - - --cowhide-1: oklch(98% 0.009 77.5); - --cowhide-2: oklch(97% 0.018 77.5); - --cowhide-3: oklch(93% 0.029 77.5); - --cowhide-4: oklch(84% 0.034 77.5); - --cowhide-5: oklch(80% 0.046 77.5); - --cowhide-6: oklch(71% 0.054 77.5); - --cowhide-7: oklch(66% 0.057 77.5); - --cowhide-8: oklch(58% 0.06 77.5); - --cowhide-9: oklch(53% 0.057 77.5); - --cowhide-10: oklch(49% 0.054 77.5); - --cowhide-11: oklch(42% 0.049 77.5); - --cowhide-12: oklch(35% 0.043 77.5); - --cowhide-13: oklch(27% 0.034 77.5); - --cowhide-14: oklch(20% 0.026 77.5); - --cowhide-15: oklch(16% 0.02 77.5); - --cowhide-16: oklch(10% 0.015 77.5); - --cowhide: var(--cowhide-3); - - --body-background: light-dark(var(--cowhide-3), var(--eclipse-11)); - --link-color: light-dark( - var(--flaming-gorge-blue), - var(--coeurdalene-purple-4) - ); - --nav-button-text: light-dark(var(--eclipse-2), var(--cowhide-12)); - --nav-button-background: light-dark(var(--eclipse-11), var(--cowhide-2)); - --nav-button-background-hover: light-dark( - var(--eclipse-13), - var(--cowhide-4) - ); - --nav-button-background-active: light-dark( - var(--eclipse-14), - var(--cowhide-5) - ); - --container-border: light-dark(var(--swiss-brown-6), var(--eclipse-16)); - --container-background: light-dark(var(--swiss-brown-4), var(--eclipse-12)); - --container-border-alt: light-dark(var(--eclipse-16), var(--swiss-brown-6)); - --container-background-alt: light-dark( - var(--eclipse-12), - var(--swiss-brown-4) - ); - --motto-background: rgba(0, 0, 0, 0.66); - --page-button-text: var(--prickly-pear-yellow-1); - --page-button-background: var(--prickly-pear-yellow-8); - --page-button-background-hover: var(--prickly-pear-yellow-10); - --page-button-background-active: var(--prickly-pear-yellow-12); - --page-button-background-disabled: var(--prickly-pear-yellow-6); - --page-button-text-disabled: var(--eclipse-7); + --prickly-pear-yellow: #735f02; + --eclipse-gray: #3a3a3a; + --pumpkin-olive: #59521c; + --manhattan-steel-blue: #224553; + --pine-green: #36581d; + --brown-swiss-calf-brown: #543c21; + --ear-tag-red: #67160e; + --flaming-gorge-blue: #1b3e5a; + --hayyard-green: #355322; + --coeurdalene-purple: #1b245a; + --brown-swiss-cow-brown: #563c1f; + --buffalo-blue: #0b496a; + --saddle-blue: #104165; + --brown-swiss-gray: #eaddca; + --lavender-purple: #d9c1f6; /* Fonts @@ -185,10 +26,7 @@ "URW Bookman L", "Georgia Pro", Georgia, serif; --font-family-slab-serif: Rockwell, "Rockwell Nova", "Roboto Slab", "DejaVu Serif", "Sitka Small", serif; - --font-family-transitional: Charter, "Bitstream Charter", "Sitka Text", - Cambria, serif; --font-family-system-ui: system-ui, sans-serif; - --font-family-monospace: "Nimbus Mono PS", "Courier New", monospace; } /* @@ -196,32 +34,12 @@ */ html { - background-color: var(--body-background); + background-color: light-dark(var(--brown-swiss-gray), var(--eclipse-gray)); font-family: var(--font-family-slab-serif); } -body { - display: flex; - flex-direction: column; - min-height: 98vh; - margin: 0 8px; - align-items: center; -} - -.container { - max-width: min(60rem, 100vw - 2rem); -} - -.footer-inner { - width: min(60rem, 100vw - 2rem); - display: flex; - justify-content: space-between; - align-items: center; - flex-shrink: 0; -} - a { - color: var(--link-color); + color: light-dark(var(--saddle-blue), var(--lavender-purple)); } header { @@ -240,12 +58,18 @@ nav { } nav a { - color: var(--nav-button-text); - background-color: var(--nav-button-background); + color: light-dark(var(--brown-swiss-gray), var(--manhattan-steel-blue)); + background-color: light-dark( + var(--manhattan-steel-blue), + var(--brown-swiss-gray) + ); border-radius: 0.05rem; border-style: outset; border-width: 0.2rem; - border-color: var(--nav-button-background); + border-color: light-dark( + var(--manhattan-steel-blue), + var(--brown-swiss-gray) + ); min-width: 7.5rem; max-width: 7.5rem; display: flex; @@ -257,95 +81,54 @@ nav a { font-family: var(--font-family-system-ui); } -nav a.active { - background-color: var(--nav-button-background-active); -} - nav a:active { border-style: inset; } nav a:hover { - background-color: var(--nav-button-background-hover); -} - -main { - display: flex; - flex-direction: column; -} - -article p, -.character-dialog-text, -article li { - font-family: var(--font-family-transitional); - font-size: 1.15rem; - text-justify: inter-word; - text-align: justify; - hyphens: auto; -} - -article > p { - text-indent: 2ch; - line-height: 1.5em; -} - -article h1 + p, -article h2 + p, -article h3 + p, -article h4 + p, -article h5 + p, -article h6 + p { - text-indent: 0; -} - -.footnotes p { - font-size: smaller; + background-color: light-dark( + var(--buffalo-blue), + color-mix(in srgb, var(--prickly-pear-yellow), var(--brown-swiss-gray) 75%) + ); } figure { - border-color: var(--container-border); + border-color: light-dark(var(--eclipse-gray), var(--brown-swiss-gray)); border-width: 1.5pt; border-style: inset; - border-radius: 2.5pt; - background-color: var(--container-background); padding: 1.25pt; } -figure:has(blockquote) { +blockquote { background: linear-gradient( to right, - var(--container-border), - var(--container-background) + light-dark(lightgray, dimgray), + color-mix( + in srgb, + light-dark(var(--brown-swiss-gray), var(--eclipse-gray)), + white 25% + ) ); - border: none; - border-radius: 0; - border-left: 6px solid black; - padding: 0.25em 1em; + border-left: 5px solid black; + padding-left: 6px; } -figure:has(blockquote) > blockquote { - margin: 0; -} - -figure:has(blockquote) > figcaption::before { +blockquote small::before { content: "\2014 \00A0"; } -figure:has(blockquote) > figcaption { - margin-top: -1em; - margin-bottom: 1em; +blockquote small { font-size: 80%; } footer { - display: flex; - flex-direction: column; - align-items: center; - background-color: var(--container-background); + background-color: light-dark(lightgray, dimgray); margin: 0 0 -1em -1em; width: calc(100% - 1em); padding: 0.25em 1.25em; - font-size: smaller; + display: flex; + justify-content: space-between; + align-items: center; } form { @@ -370,25 +153,6 @@ textarea:invalid { border-bottom-color: var(--ear-tag-red); } -code { - font-family: var(--font-family-monospace); -} - -/* - abbr element "tooltip" for mobile - heavily modified from https://bitsofco.de/making-abbr-work-for-touchscreen-keyboard-mouse/ -*/ -abbr[title]:focus::after { - content: attr(title); - background-color: #1e1e1e; - color: #fff; - border-radius: 0.125em; - box-shadow: 1px 1px 5px 0 rgba(0, 0, 0, 0.4); - font-size: smaller; - padding: 0.5em; - display: block; -} - /* Container-type helper classes */ @@ -398,12 +162,6 @@ abbr[title]:focus::after { width: 100%; } -.motto-wrapper { - display: block; - flex: 1 0 30vh; - margin-bottom: 1em; -} - .motto { position: relative; display: grid; @@ -413,10 +171,8 @@ abbr[title]:focus::after { font-weight: 600; text-shadow: 0 0 10px rgba(0, 0, 0, 0.33); width: 100%; - height: 100%; padding: 0 0 0.5em 0; border-radius: 0.25rem; - z-index: 10; } .motto::before { @@ -440,36 +196,32 @@ abbr[title]:focus::after { } .motto .motto-inside h1 { - background-color: var(--motto-background); - padding: 0.5rem; + background-color: rgba(0.33, 0.33, 0.33, 0.33); + -webkit-text-stroke: 0.3px lightgray; + line-height: 1; } .card { - background-color: var(--container-background); - border-color: var(--container-border); + background-color: color-mix( + in srgb, + light-dark(var(--brown-swiss-gray), var(--eclipse-gray)), + white 10% + ); + border-color: light-dark( + var(--manhattan-steel-blue), + var(--brown-swiss-gray) + ); border-width: 1.5pt; border-radius: 0.1rem; border-style: outset; margin: 1rem 0; padding: 0.5rem; padding-top: 0; + position: relative; display: flex; flex-direction: column; } -.card-content { - display: flex; - flex-direction: column; - flex-grow: 1; -} - -.card-header { - display: flex; - flex-direction: row; - justify-content: space-between; - flex-grow: 1; -} - .card-link { white-space: nowrap; display: inline-flex; @@ -477,26 +229,22 @@ abbr[title]:focus::after { align-items: center; text-underline-offset: 0.25em; backface-visibility: hidden; - margin: 0.1em 0.25em; - padding: 0.33em; - padding-right: 0.45em; -} - -.card-body { - margin-top: 0.33em; + margin: 0 0.5em; } .category-button { + position: absolute; + top: 1em; + right: 1em; display: grid; - align-items: center; - justify-items: center; color: white; background-color: var(--ear-tag-red); border-radius: 0.5em; padding: 1em; - margin: 1em; - height: 2em; - aspect-ratio: 1 / 1; +} + +.card-title { + margin-right: 3em; } .card-title > a { @@ -539,118 +287,6 @@ abbr[title]:focus::after { fill: currentColor; } -.account-bucket { - display: grid; - grid-template-columns: 3em 1em 1fr; - background-color: var(--container-background-alt); - padding: 1em 0; - border-radius: 0.5em; - border-color: var(--container-border-alt); - border-style: solid; - color: light-dark(white, black); - margin: 1em 0; - align-items: center; -} - -.account-bucket h3 { - align-self: center; - writing-mode: sideways-lr; -} - -.account-bucket details { - grid-column: 3; -} - -.account-bucket .crypto-list { - grid-column: 3; - max-width: 100%; -} - -.account-list { - display: flex; - justify-content: space-between; - flex-wrap: wrap; - width: calc(100% - 1.5em); -} - -.account-bucket .account-list { - grid-column: 3; -} - -.account-list a { - font-size: xx-large; - text-decoration: none; - color: inherit; - padding: 0.5em; -} - -.account-list a:hover { - background-color: var(--container-background); - border-color: var(--container-border); - border-width: 2.5px; - border-radius: 0.5em; - border-style: solid; - padding: calc(0.5em - 2.5px); -} - -figcaption .mono { - color: light-dark(black, white); - overflow-wrap: anywhere; -} - -.crypto-list details { - max-width: 100%; -} - -.character-dialog { - display: grid; - width: calc(100% - 1rem); - grid-template-columns: 5rem 1fr; - grid-template-rows: auto auto; - gap: 1em; - margin: 0.5rem; -} - -.character-avatar { - display: grid; - max-width: 100%; - grid-row: 1 / span 2; - grid-column: 1; - align-self: start; - align-items: center; - justify-items: center; - min-width: 5rem; - min-height: 5rem; - border-radius: 5rem; - align-items: center; - border-style: solid; - border-color: var(--nav-button-background-hover); - background-color: var(--cowhide-2); -} - -.character-avatar > img { - max-width: 4rem; - max-height: 4rem; -} - -.character-dialog-bubble { - display: grid; - grid-template-rows: auto auto; - align-self: start; - border-radius: 0.5em; - border-width: 0.2rem; - border-color: var(--nav-button-background); - border-style: outset; - row-gap: 0.5rem; - padding: 0.5rem; - background-color: var(--container-border); - min-height: 5rem; -} - -.character-dialog-title { - font-weight: bolder; -} - /* Helper classes */ @@ -661,9 +297,6 @@ figcaption .mono { .img-fluid { max-width: 100%; height: auto; - display: grid; - align-items: center; - justify-items: center; } .float-left { @@ -676,66 +309,21 @@ figcaption .mono { max-width: 100%; } -.pagination { - display: flex; - justify-content: center; - gap: 0.5em; - padding-left: 0; +/* + Application-state helper classes +*/ +@media (prefers-color-scheme: light) { + .active { + background-color: var(--coeurdalene-purple); + } } -.pagination li { - list-style-type: none; - color: var(--nav-button-text); -} - -.pagination li a { - color: var(--page-button-text); - background-color: var(--page-button-background); - border-radius: 0.05rem; - border-style: outset; - border-width: 0.2rem; - border-color: var(--page-button-background); - width: 2rem; - max-width: 1.8vw; - aspect-ratio: 1 / 1; - display: flex; - justify-content: center; - align-items: center; - margin: 0.2rem; - text-decoration: none; - padding: 0 0.2rem; - font-family: var(--font-family-system-ui); -} - -.pagination li a:hover { - background-color: var(--page-button-background-hover); -} - -.pagination li.active a { - background-color: var(--page-button-background-active); -} - -.pagination li.disabled a { - cursor: not-allowed; - background-color: var(--page-button-background-disabled); - color: var(--page-button-text-disabled); - border-style: solid; -} - -.mono { - font-family: var(--font-family-monospace); - font-weight: 600; -} - -.bolder { - font-weight: bolder; - background-color: rgba(0, 0, 0, 0.33); - border-radius: 0.25em; -} - -/* Specific elements */ -#content { - flex: 1 0 max-content; +@media (prefers-color-scheme: dark) { + .active { + color: color-mix(in srgb, var(--manhattan-steel-blue), white 75%); + background-color: color-mix(in srgb, var(--brown-swiss-gray), black 75%); + border-color: color-mix(in srgb, var(--brown-swiss-gray), black 50%); + } } /* @@ -775,15 +363,6 @@ figcaption .mono { flex-direction: row; } - .person-profile { - position: sticky; - top: 0; - width: 300px; - min-width: 20vw; - max-width: 30vw; - margin-bottom: 5vh; - } - /* Helper classes */ @@ -805,19 +384,20 @@ figcaption .mono { margin-right: 1rem; } - .card-thumbnail { + .card-header { width: 20vw; flex-shrink: 0; } - .card-thumbnail:not( - :has(~ .card-content > .card-header > .card-title > .dt-published) - ) { - width: 10vw; + .card-body { + margin-left: 1rem; } - .card-content { - margin-left: 1rem; + .bolder { + font-weight: bolder; + background-color: rgba(0, 0, 0, 0.33); + border-radius: 0.25em; + padding: 0.25em 0.75em 0.5em 0.33em; } /* @@ -828,8 +408,7 @@ figcaption .mono { h3::before, h4::before, h5::before, - h6::before, - blockquote::before { + h6::before { content: " "; /* Older browser do not support empty content */ visibility: hidden; display: block; @@ -837,3 +416,77 @@ figcaption .mono { clear: both; } } /* end @media */ + +@supports (animation-timeline: scroll()) and (animation-range: 0 50vh) { + @keyframes sticky-header { + from { + height: 50vh; + top: 6rem; + } + + to { + height: 10vh; + top: -1rem; + } + } + + @keyframes blurry-header { + from { + filter: blur(0); + } + + to { + filter: blur(2px); + } + } + + @keyframes transparent-text-bg { + from { + background-color: rgba(0.33, 0.33, 0.33, 0.33); + } + to { + background-color: rgba(0.33, 0.33, 0.33, 0); + } + } + + main, + footer { + position: relative; + top: 55vh; + } + + .motto { + position: fixed; + top: 12rem; + + animation: sticky-header linear forwards; + animation-timeline: scroll(); + animation-range: 0.001vh 50vh; + } + + .motto::before { + filter: blur(12px); + + top: 2rem; + + animation: blurry-header linear forwards; + animation-timeline: scroll(); + animation-range: 0.001vh 50vh; + } + + .motto-inside h1 { + animation: transparent-text-bg linear forwards; + animation-timeline: scroll(); + animation-range: 0.001vh 40vh; + } + + @media (min-width: 768px) { + .motto { + width: calc(100% - 8rem); + } + + .motto::before { + top: 0; + } + } +} /* end @supports */ diff --git a/assets/styles/scrolling-header.css b/assets/styles/scrolling-header.css deleted file mode 100644 index acc8a4b..0000000 --- a/assets/styles/scrolling-header.css +++ /dev/null @@ -1,68 +0,0 @@ -@media (prefers-reduced-motion: no-preference) { - @supports (animation-timeline: scroll()) and (animation-range: 0 50vh) { - @keyframes sticky-header { - from { - flex-basis: 30vh; - } - - to { - flex-basis: 0; - } - } - - .motto-wrapper { - position: sticky; - top: 0; - z-index: 100; - - animation: sticky-header linear forwards; - animation-timeline: scroll(); - animation-range: 0 30vh; - - contain: content; - } - - @keyframes blurry-header { - from { - filter: blur(0); - } - - to { - filter: blur(3.5px); - } - } - - .motto::before { - animation: blurry-header linear forwards; - animation-timeline: scroll(); - animation-range: 0 30vh; - } - - @keyframes transparent-text-bg { - from { - background-color: var(--motto-background); - text-shadow: 0 0 10px rgba(0, 0, 0, 0.33); - } - to { - background-color: rgba(0, 0, 0, 0); - text-shadow: 0 0 10px rgba(0, 0, 0, 1); - } - } - .motto-inside h1 { - animation: transparent-text-bg linear forwards; - animation-timeline: scroll(); - animation-range: 0 30vh; - } - - .motto-inside h1 small { - display: block; - font-size: calc(1vh + 1vw); - line-height: calc(1vh + 1vw); - } - - main section { - margin: 0 0.25em; - contain: content; - } - } /* end @supports */ -} /* end @media */ diff --git a/config.toml b/config.toml index 8a730b3..89a2f66 100644 --- a/config.toml +++ b/config.toml @@ -1,9 +1,7 @@ baseURL = "https://millironx.com" languageCode = "en-us" -title = "Milliron X" - -[pagination] -pagerSize = 5 +title = "MillironX" +paginate = 5 [build] writeStats = true @@ -11,47 +9,74 @@ writeStats = true [Params] cardImage = "saddles" motto = "" -images = ["saddles.jpg"] -categories = [] [taxonomies] people = "people" tag = "tags" category = "categories" -[mediaTypes] +[module] -[mediaTypes."application/atom+xml"] -suffixes = ["xml"] +[[module.mounts]] +source = "static" +target = "static" -[outputs] -home = ["atom", "html", "manifest"] -page = ["html"] -section = ["html", "atom"] -term = ["html", "atom"] +[[module.mounts]] +source = "assets/graphics" +target = "assets/graphics" -[outputFormats] +[[module.mounts]] +source = "assets/images" +target = "assets/images" -[outputFormats.atom] -mediaType = "application/atom+xml" -baseName = "feed" +[[module.mounts]] +source = "assets/scripts" +target = "assets/scripts" -[outputFormats.manifest] -name = "manifest" -baseName = "manifest" -mediaType = "application/json" -notAlternative = "true" +[[module.mounts]] +source = "assets/styles" +target = "assets/styles" -[markup] +[[modules.mounts]] +source = "assets/scripts/custom" +target = "assets/scripts/custom" -[markup.goldmark] +[[module.mounts]] +source = "./node_modules/@fortawesome/fontawesome-pro/js" +target = "assets/scripts/fontawesome" -[markup.goldmark.parser] +[[module.mounts]] +source = "./node_modules/@popperjs/core/dist/umd" +target = "assets/scripts/popper" -[markup.goldmark.parser.attribute] -block = true +[[module.mounts]] +source = "./node_modules/bootstrap/scss" +target = "assets/styles/bootstrap" -[markup.goldmark.renderHooks] +[[module.mounts]] +source = "./node_modules/bootswatch/dist/" +target = "assets/styles/bootswatch" -[markup.goldmark.renderHooks.link] -enableDefault = true +[[module.mounts]] +source = "./node_modules/@openfonts/nunito-sans_all" +target = "static/fonts/nunito-sans" + +[[module.mounts]] +source = "./node_modules/bootstrap/dist/js" +target = "assets/scripts/bootstrap" + +[[module.mounts]] +source = "./node_modules/fittext.js" +target = "assets/scripts/fittext" + +[[module.mounts]] +source = "./node_modules/jquery/dist" +target = "assets/scripts/jquery" + +[[module.mounts]] +source = "./node_modules/jquery-mask-plugin/dist" +target = "assets/scripts/jquery-mask-plugin" + +[[module.mounts]] +source = "./node_modules/masonry-layout/dist" +target = "assets/scripts/masonry" diff --git a/content/_index.md b/content/_index.md index 1cfe790..b7cd16c 100644 --- a/content/_index.md +++ b/content/_index.md @@ -1,11 +1,12 @@ --- +title: Home cardImage: charolette cardImageDescription: She almost looks like she's in her native country again. motto: My name is Thomas Christensen
I am Milliron X description: The homepage of Thomas A. Christensen II +layout: _default/list menu: main: - name: Home params: icon: home weight: -1000 @@ -16,15 +17,72 @@ menu: It's a [cattle brand](https://en.wikipedia.org/wiki/Livestock_branding), of course! My cattle brand! -The {{< dfn >}}milliron{{< /dfn >}} is the bar with a bend in the middle. It -does not represent anything physical or textual _per se_, and is therefore a -rather unique element in cattle brands. Millirons are difficult to modify into -another brand, and provide a guarantee of authentic ownership. +The milliron is the bar with a bend in the middle. It does not +represent anything physical or textual _per se_, and is therefore a rather +unique element in cattle brands. Millirons are difficult to modify into another +brand, and provide a guarantee of authentic ownership. -{{< dfn >}}X{{< /dfn >}} is the letter of mystery and mystique. For nerds, it's -the unknown in any algebra problem. Ranchers and cowboys will associate it with -big names like the "Bar X" and the "Double X." In either case, it lends itself -to a sense of withholding, prestige, and power. +X is the letter of mystery and mystique. For nerds, it's the unknown +in any algebra problem. Ranchers and cowboys will associate it with big names +like the "Bar X" and the "Double X." In either case, it lends itself to a sense +of withholding, prestige, and power. Together, these two symbols represent the qualities I strive for in each of my works: authenticity, originality, power, depth, and prestige. + +## Who am I? + +{{< imgproc me-and-lady Resize "768x" "float-right" >}} Image courtesy +[Guy McCutcheon Photography](https://www.guymccutcheon.com/) {{< /imgproc >}} + +I am + +- 🧬 A bioinformatician (by profession) +- 📐 An engineer (by education) +- 🐂 A rancher (by lifestyle) +- 🖥️ A techie (self-taught) +- 🎥 And a filmmaker (at heart) + +I've got a soft spot for Brown Swiss dairy cows (just in case you couldn't tell +by the pictures), and am sometimes called "one of those crazy, Wyoming dairy cow +people." I love anything to do with cattle or technology, but especially +anything to do with both of them. + +_Christian, American, Convervative, Pro-gun, Heterosexual - any questions?_ + +## Where am I? + +{{< imgproc wy-in-ks Resize "768x" "float-left" / >}} + +I am a Wyomingite sojurning in Kansas. That ought to lead to some interesting +stories. + +Around the web you can find me at (in order of subjective importance) + +- {{< fa github >}} GitHub: [@MillironX](https://github.com/MillironX) +- {{< fa orcid >}} ORDiD: + [0000-0003-1219-9320](https://orcid.org/0000-0003-1219-9320) +- {{< fa gitlab >}} GitLab: [@MillironX](https://gitlab.com/MillironX) +- {{< fa vimeo >}} Vimeo: + [Thomas Christensen II](https://vimeo.com/tchristensenii) +- {{< fa stack-overflow >}} StackExchange: + [Milliron X](https://stackexchange.com/users/4863541/milliron-x) +- {{< fa steam >}} Steam: [MillironX](https://steamcommunity.com/id/millironx) + +This list is intended to verify my identity on other sites. Please do _not_ use +it as fodder to try and "follow" me on each of these platforms. I stand with +RMS: + +{{< blockquote "Richard Stallman _in_ [If you feel your organization needs a 'presence' in Facebook](https://stallman.org/facebook-presence.html)" >}} +Facebook is a bad place for a person to be. When people find us on Facebook, we +lead them away from Facebook and then talk with them elsewhere. +{{< /blockquote >}} + +I typically don't respond to inquiries made on these platforms. Please use +[my contact form](/contact), instead. + + + diff --git a/content/academia/_index.md b/content/academia/_index.md index ea2eb55..10e4083 100644 --- a/content/academia/_index.md +++ b/content/academia/_index.md @@ -14,15 +14,13 @@ menu: fa-thumbnail: university --- +> I have spent too long in school and not enough time in the middle of nowhere +> +> -- Baxter Black, DVM + During my time in academia, I have amassed a few notable accomplishments. Of course, as the old saying goes, "if it isn't published, then it never happened," -so here is a list of everything that actually happened. - -Academia is not the be-all and end-all of life (contrary to what your professor -might have told you). I've found the side-effects to be similar to this guy's: - - -> I have spent too long in school and not enough time in the middle of nowhere, -> and it has inhibited my ability to learn the simple things. -{author="Baxter Black, DVM"} - +so here is a list of everything that actually happened. Several of these +articles are also available on +[my Google Scholar page](https://scholar.google.com/citations?user=gbP4RDgAAAAJ), +but this is the complete list. diff --git a/content/academia/bpv-genetics.md b/content/academia/bpv-genetics.md deleted file mode 100644 index edd678f..0000000 --- a/content/academia/bpv-genetics.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: "Genetic analysis of bovine papillomas" -date: 2024-09-19 -categories: - - poster -people: - - Thomas A. Christensen II - - Rachel Palinski - - Bob Gentry -journal: - "National Association of Animal Breeders Technical Conference Student Poster - session" -location: "Middleton, Wisconsin" ---- - -Bovine papillomavirus (BPV) is a major cause of reproductive failure in cattle. -In bulls, penile papillomas caused by BPV may cause reluctance to breed, and is -always a cause to fail an animal on a breeding soundness exam. Historically, it -has been thought that BPV was transmitted via direct contact and could be -controlled by managing clinically presenting animals in the herd, but more -recent evidence suggests alternative modes of transmission. BPV has been found -repeatably in clinically healthy animals, and in non-cutaneous secretions -including milk, blood, urine and semen. Currently, no commercially available BPV -vaccine uses isolated viral particles and naturally occurring virus does not -produce cross-protective immunity. In order to develop a proper vaccine for -penile papillomas further studies are required to understand the epidemiology of -BPV in herds. While vulvar, cutaneous, and mammary papillomas have been -genotyped in recent years, this information is not available for penile -papillomas. In this study there were 31 submissions, collected from 7 states, -NE, KS, NY, TX, AL, MO and SD (14 different cattle operations) Samples were -collected between August of 2022 and April 2024. Twenty-two submissions were -penile papillomas and with pooling of samples represented over 50 penile -papillomas. Samples were metagenomically sequenced at the Kansas State -Veterinary Diagnostic Lab, and the genotype of each sample was determined using -the phylogenetic analysis. The clade of each sample was determined by aligning -consensus sequences of the L1 gene (used for both for phylogeny and as a vaccine -target) using MAFFT and a maximum-likelihood phylogeny generated in Mega X. -Analysis found that all penile papilloma submissions were composed of BPV type -2, with one sample showing co-infection with BPV type 1. Conversely, cutaneous -and teat papillomas had BPV genotypes that were more variable with genotypes of -1,2,7,12,14,29 and 40. These results indicate that BPV type 2 and type 1 provide -a unified target for bovine penile papilloma vaccine development. diff --git a/content/academia/got-warts-naab.md b/content/academia/got-warts-naab.md deleted file mode 100644 index adea3d8..0000000 --- a/content/academia/got-warts-naab.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: - "Got Warts? Bovine Papillomavirus Pathogenesis, Transmission, and Vaccination" -date: 2024-09-19 -featured: false -categories: - - presentation -people: - - Bob Gentry - - Thomas A. Christensen II -journal: - "National Association of Animal Breeders Technical Conference Sponsor session" -location: "Middleton, Wisconsin" ---- diff --git a/content/academia/metagenomics/thumbnail.jpg b/content/academia/metagenomics/thumbnail.jpg deleted file mode 100644 index b952da2..0000000 Binary files a/content/academia/metagenomics/thumbnail.jpg and /dev/null differ diff --git a/content/academia/pva-aiche/thumbnail.jpg b/content/academia/pva-aiche/thumbnail.jpg deleted file mode 100644 index 80f1c8e..0000000 Binary files a/content/academia/pva-aiche/thumbnail.jpg and /dev/null differ diff --git a/content/academia/taxprofiler.md b/content/academia/taxprofiler.md index b629a8a..88c62e4 100644 --- a/content/academia/taxprofiler.md +++ b/content/academia/taxprofiler.md @@ -1,7 +1,6 @@ --- title: - "nf-core/taxprofiler: highly parallelised and flexible pipeline for - metagenomic taxonomic classification and profiling" + "nf-core/taxprofiler: highly parallelised and flexible pipeline for metagenomic taxonomic classification and profiling" date: 2023-10-23 featured: true tags: @@ -17,25 +16,9 @@ people: - Maxime Borry - Mahwash Jamy - nf-core community - - James A. Fellows Yates + - James A. Fellows Yate link: https://doi.org/10.1101/2023.10.20.563221 journal: bioRxiv --- -Metagenomic classification tackles the problem of characterising the taxonomic -source of all DNA sequencing reads in a sample. A common approach to address the -differences and biases between the many different taxonomic classification tools -is to run metagenomic data through multiple classification tools and databases. -This, however, is a very time-consuming task when performed manually - -particularly when combined with the appropriate preprocessing of sequencing -reads before the classification. Here we present nf-core/taxprofiler, a highly -parallelised read-processing and taxonomic classification pipeline. It is -designed for the automated and simultaneous classification and/or profiling of -both short- and long-read metagenomic sequencing libraries against a 11 -taxonomic classifiers and profilers as well as databases within a single -pipeline run. Implemented in Nextflow and as part of the nf-core initiative, the -pipeline benefits from high levels of scalability and portability, accommodating -from small to extremely large projects on a wide range of computing -infrastructure. It has been developed following best-practise software -development practises and community support to ensure longevity and adaptability -of the pipeline, to help keep it up to date with the field of metagenomics. +Metagenomic classification tackles the problem of characterising the taxonomic source of all DNA sequencing reads in a sample. A common approach to address the differences and biases between the many different taxonomic classification tools is to run metagenomic data through multiple classification tools and databases. This, however, is a very time-consuming task when performed manually - particularly when combined with the appropriate preprocessing of sequencing reads before the classification. Here we present nf-core/taxprofiler, a highly parallelised read-processing and taxonomic classification pipeline. It is designed for the automated and simultaneous classification and/or profiling of both short- and long-read metagenomic sequencing libraries against a 11 taxonomic classifiers and profilers as well as databases within a single pipeline run. Implemented in Nextflow and as part of the nf-core initiative, the pipeline benefits from high levels of scalability and portability, accommodating from small to extremely large projects on a wide range of computing infrastructure. It has been developed following best-practise software development practises and community support to ensure longevity and adaptability of the pipeline, to help keep it up to date with the field of metagenomics. diff --git a/content/academia/yavsap/index.md b/content/academia/yavsap/index.md deleted file mode 100644 index 3ffc79c..0000000 --- a/content/academia/yavsap/index.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: "YAVSAP: versatile viral quasispecies analysis for veterinary samples" -date: 2024-03-05 -featured: false -categories: - - presentation -people: - - Thomas A. Christensen II - - Steven Stancic - - Andrea Lu - - Dana Mitzel - - William Wilson - - Rachel Palinski -journal: "Phi Zeta Research Day" -location: "Manhattan, Kansas" -tags: - - virus - - quasispecies - - next-generation sequencing - - pipeline -awards: - - "2nd Place Large Animal Applied Research Presentation" -link: "/academia/yavsap/yavsap.pdf" ---- - -Viral populations within an infected host are composed of viral particles with a -spectrum of genetic mutations rather than a unified genome. This phenomenon is -referred to as viral "quasispecies," and has been useful for the understanding -of viral transmission and early detection of new viral variants. Next generation -sequencing (NGS) has enabled the study of these quasispecies for many viral -species, notably Influenza A and B, Human Immunodeficiency Virus (HIV), Foot and -Mouth Disease Virus (FMDV), and Severe Acute Respiratory Syndrome Coronavirus 2 -(SARS CoV2), and established protocols and computer analysis tools have been -developed for these species. Some of the most important viruses, such as -emerging and exotic disease agents, however, do not have replicatable protocols -or software tools capable of producing valid output from their sequence data. -Here, we present Yet Another Viral Subspecies Analysis Pipeline (YAVSAP). YAVSAP -is a fully automated bioinformatic pipeline built from the ground up to identify -and analyze viral quasispecies of any arbitrary virus in human and veterinary -samples. YAVSAP provides reference-based genome mapping of both long- and -short-read sequencing reads to any reference genome that the user chooses, -identifies subconsensus variants and haplotypes, and assesses the phylogenies of -all viral sequences found within a sample. YAVSAP is written in Nextflow and -conforms to the nf-core initiative's standards, which allows it to run on -low-end computers, high performance computing (HPC) clusters, or anything in -between with zero configuration. YAVSAP has been tested on viruses of interest -to veterinary medicine and public health, including Japanese Encephalitis Virus -(JEV), Influenza D Virus (IDV), Bovine Coronavirus (BCoV), SARS CoV2, and Rift -Valley Fever Virus (RVFV), and can correctly identify consensus genomes and -quasispecies within samples containing each of these viruses. This tool provides -a means for biologists with little bioinformatic experience to analyze deep -sequence data while correcting for many of the pitfalls associated with previous -and current analysis platforms. YAVSAP is open source software and is publicly -available at https://github.com/ksumngs/yavsap. diff --git a/content/academia/yavsap/yavsap.pdf b/content/academia/yavsap/yavsap.pdf deleted file mode 100644 index 14462c7..0000000 Binary files a/content/academia/yavsap/yavsap.pdf and /dev/null differ diff --git a/content/blogroll/_index.md b/content/blogroll/_index.md index 307a619..2a17fb5 100644 --- a/content/blogroll/_index.md +++ b/content/blogroll/_index.md @@ -1,15 +1,5 @@ --- -title: "Blogroll" -menu: - main: - name: Blogroll - params: - icon: scroll - weight: -800 -cardImage: eclipse -cardImageDescription: | - Randall Monroe was right. Eclipses are way cooler than they sound. -suppressRss: true +draft: true --- ## Stuff I like on the internet @@ -17,4 +7,39 @@ suppressRss: true This section of a website used to be called a "blogroll." I don't know what it's called now. In order to be on this list, I must have been subscribed or otherwise follow it for over a year. It's amazing how little stuff on the -internet can make that cut. +internet can't make that cut. + +### [Thru the Bible](https://ttb.org/) + +I'm convinced that the word of God is timeless, and we need less commentary and +cherry-picking of favorite verses, and more study of the complete Bible. Dr. +McGee does just that. + +### [Enoch the Cow Vet](https://youtube.com/channel/UC6PPmHUbcdOSzX5tLB3uXdw) + +A veterinarian/agricultural channel that doesn't make me cringe. "God built +these things for cows for vets ... [there are] so many aspects of the cow that +are just designed for vets." Amen, Enoch. Amen. + +### [Proglogion](https://blog.drwile.com/) + +The blog of my high school science teacher (of sorts). It is refreshing to find +a creationist who can still think critically. I love his "bad sermon +illustrations" posts. + +### [The Milk Check](https://www.jacoby.com/learning-center/podcasts-overview/) + +A pragmatic inside look at dairy marketing. I only understand half of what +they're talking about, but I learn something new every episode. + +### [Brian Harry's Blog](https://devblogs.microsoft.com/bharry/) + +Where else are you going to find a blog about cows _and_ version control? The +blog is basically dead now, but it's still fun to go back and read the farm +stories. + +### [Car Talk](https://cartalk.com/) + +The antics of these guys are enough to make anyone have to pull over to the side +of the road from laughing too much. I dread the day when NPR fully axes the only +good program to cross their airwaves. diff --git a/content/blogroll/brian-harry/index.md b/content/blogroll/brian-harry/index.md deleted file mode 100644 index a75e0bd..0000000 --- a/content/blogroll/brian-harry/index.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Brian Harry's blog -link: https://devblogs.microsoft.com/bharry/ ---- - -Where else are you going to find a blog about cows _and_ version control? The -blog is basically dead now, but it's still fun to go back and read the farm -stories. diff --git a/content/blogroll/brian-harry/thumbnail.png b/content/blogroll/brian-harry/thumbnail.png deleted file mode 100644 index 98cd5b5..0000000 Binary files a/content/blogroll/brian-harry/thumbnail.png and /dev/null differ diff --git a/content/blogroll/car-talk/index.md b/content/blogroll/car-talk/index.md deleted file mode 100644 index ee66c77..0000000 --- a/content/blogroll/car-talk/index.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Car Talk -link: https://cartalk.com ---- - -The antics of these guys are enough to make anyone have to pull over to the side -of the road from laughing too much. I dread the day when NPR fully axes the only -good program to cross their airwaves. diff --git a/content/blogroll/car-talk/thumbnail.jpg b/content/blogroll/car-talk/thumbnail.jpg deleted file mode 100644 index d09dcaf..0000000 Binary files a/content/blogroll/car-talk/thumbnail.jpg and /dev/null differ diff --git a/content/blogroll/enoch-the-cow-vet/index.md b/content/blogroll/enoch-the-cow-vet/index.md deleted file mode 100644 index 0e3f074..0000000 --- a/content/blogroll/enoch-the-cow-vet/index.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Enoch the Cow Vet -link: https://youtube.com/channel/UC6PPmHUbcdOSzX5tLB3uXdw ---- - -A veterinarian/agricultural channel that doesn't make me cringe. "God built -these things for cows for vets ... [there are] so many aspects of the cow that -are just designed for vets." Amen, Enoch. Amen. diff --git a/content/blogroll/enoch-the-cow-vet/thumbnail.jpg b/content/blogroll/enoch-the-cow-vet/thumbnail.jpg deleted file mode 100644 index 3e99c2f..0000000 Binary files a/content/blogroll/enoch-the-cow-vet/thumbnail.jpg and /dev/null differ diff --git a/content/blogroll/proslogion/index.md b/content/blogroll/proslogion/index.md deleted file mode 100644 index f73002f..0000000 --- a/content/blogroll/proslogion/index.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Proslogion -link: https://blog.drwile.com ---- - -The blog of my high school science teacher (of sorts). It is refreshing to find -a creationist who can still think critically. I love his "bad sermon -illustrations" posts. diff --git a/content/blogroll/proslogion/thumbnail.jpg b/content/blogroll/proslogion/thumbnail.jpg deleted file mode 100644 index 2369d6c..0000000 Binary files a/content/blogroll/proslogion/thumbnail.jpg and /dev/null differ diff --git a/content/blogroll/thru-the-bible/index.md b/content/blogroll/thru-the-bible/index.md deleted file mode 100644 index 9863380..0000000 --- a/content/blogroll/thru-the-bible/index.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Thru the Bible -link: https://ttb.org ---- - -I'm convinced that the word of God is timeless, and we need less commentary and -cherry-picking of favorite verses, and more study of the complete Bible. Dr. -McGee does just that. diff --git a/content/blogroll/thru-the-bible/thumbnail.jpg b/content/blogroll/thru-the-bible/thumbnail.jpg deleted file mode 100644 index 87c7d57..0000000 Binary files a/content/blogroll/thru-the-bible/thumbnail.jpg and /dev/null differ diff --git a/content/code/_content.gotmpl b/content/code/_content.gotmpl deleted file mode 100644 index 2992e8b..0000000 --- a/content/code/_content.gotmpl +++ /dev/null @@ -1,75 +0,0 @@ -{{ $data := dict }} -{{ $url := "https://code.millironx.com/api/v1/users/millironx/repos" }} -{{ with try (resources.GetRemote $url) }} - {{ with .Err }} - {{ errorf "Unable to get remote resource %s: %s" $url . }} - {{ else with .Value }} - {{ $data = . | transform.Unmarshal }} - {{ end }} -{{ else }} - {{ errorf "Unable to get remote resource %s" $url }} -{{ end }} - -{{ range $data }} - {{/* Get tags of this repository. To quote Steve Edstrom, "If it doesn't have a - tag, it doesn't count." - */}} - {{ $tagUrl := print "https://code.millironx.com/api/v1/repos/millironx/" .name "/tags" }} - {{ $tagData := dict }} - {{ with try (resources.GetRemote $tagUrl) }} - {{ with .Err }} - {{ errorf "Unable to get remote resource %s: %s" $tagUrl . }} - {{ else with .Value }} - {{ $tagData = . | transform.Unmarshal }} - {{ end }} - {{ else }} - {{ errorf "Unable to get remote resource %s" $tagUrl }} - {{ end }} - - {{ $firstTag := index $tagData 0 }} - - {{ if $firstTag }} - {{ $dates := dict "date" (time.AsTime $firstTag.commit.created) }} - - {{ $content := dict "mediaType" "text/markdown" "value" .description }} - {{ $categories := slice "code" }} - {{ $people := slice "Thomas A. Christensen II" }} - {{ $link := .html_url }} - {{ $featured := (gt .stars_count 0) }} - {{ $tags := .topics }} - {{ $params := dict - "categories" $categories - "people" $people - "link" $link - "featured" $featured - "tags" $tags - }} - {{ $page := dict - "content" $content - "dates" $dates - "title" .name - "path" .name - "params" $params - }} - {{ $.AddPage $page }} - - {{ $item := . }} - {{ with $url := $item.avatar_url }} - {{ with resources.GetRemote $url }} - {{ with .Err }} - {{ errorf "Unable to get remote resource %s: %s" $url . }} - {{ else }} - {{ $content := dict "mediaType" .MediaType.Type "value" .Content }} - {{ $resource := dict - "content" $content - "path" (print $item.name "/thumbnail." .MediaType.SubType) - }} - {{ $.AddResource $resource }} - {{ end }} - {{ else }} - {{ errorf "Unable to get remote resource %s" $url }} - {{ end }} - {{ end }} - {{ end }} - -{{ end }} diff --git a/content/code/_index.md b/content/code/_index.md deleted file mode 100644 index c7c7df5..0000000 --- a/content/code/_index.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Coding projects -menu: - main: - name: Code - params: - icon: code - link: https://code.millironx.com - weight: 50 -fa-thumbnail: code -link: https://code.millironx.com ---- - -A Forgejo instance dedicated to cows and technology diff --git a/content/contact/_index.html b/content/contact/_index.html index 3d73f4f..79d864c 100644 --- a/content/contact/_index.html +++ b/content/contact/_index.html @@ -15,21 +15,12 @@ menu: weight: 1 fa-thumbnail: file-signature validation: true -suppressRss: true --- - -
Contact Me - + - - -
-