diff --git a/.gitignore b/.gitignore index c4bb138..3c6f3a7 100644 --- a/.gitignore +++ b/.gitignore @@ -189,3 +189,5 @@ Icon Network Trash Folder Temporary Items .apdisk + +/.quarto/ diff --git a/.prettierrc b/.prettierrc index 672b6f3..7a778c9 100644 --- a/.prettierrc +++ b/.prettierrc @@ -7,3 +7,6 @@ overrides: - files: "*.gotmpl" options: parser: "go-template" + - files: "*.qmd" + options: + parser: "markdown" diff --git a/.zed/settings.json b/.zed/settings.json index eb5924a..73f67e7 100644 --- a/.zed/settings.json +++ b/.zed/settings.json @@ -9,5 +9,5 @@ } } }, - "file_types": { "HTML": ["gotmpl"] } + "file_types": { "HTML": ["gotmpl"], "Markdown": ["qmd"] } } diff --git a/_quarto.yml b/_quarto.yml new file mode 100644 index 0000000..79b8d68 --- /dev/null +++ b/_quarto.yml @@ -0,0 +1,13 @@ +project: + type: hugo + preview: + serve: + cmd: "hugo server --port {port} --bind 0.0.0.0 --navigateToChanged" + ready: "Web Server is available at" + +format: + hugo-md: + code-fold: true + +execute: + warning: false diff --git a/assets/styles/millironx.css b/assets/styles/millironx.css index 00ad31e..6db0114 100644 --- a/assets/styles/millironx.css +++ b/assets/styles/millironx.css @@ -289,6 +289,15 @@ article > p { line-height: 1.5em; } +h2#references ~ p { + font-size: 1rem; + text-justify: unset; + text-align: left; + hyphens: none; + line-height: 1rem; + text-indent: 2ch hanging; +} + article h1 + p, article h2 + p, article h3 + p, @@ -337,6 +346,10 @@ figure:has(blockquote) > figcaption { font-size: 80%; } +figure > img { + max-width: 100%; +} + footer { display: flex; flex-direction: column; diff --git a/assets/styles/mix-twbs.scss b/assets/styles/mix-twbs.scss new file mode 100644 index 0000000..536f92e --- /dev/null +++ b/assets/styles/mix-twbs.scss @@ -0,0 +1,179 @@ +$web-font-path: "/fonts/nunito-sans/index.css"; + +@import "bootstrap/functions"; +@import "bootswatch/lux/variables"; +@import "bootstrap/bootstrap"; +@import "bootswatch/lux/bootswatch"; + +$peek-height: 25rem; + +.blurred-container { + position: relative; + width: 100%; + min-height: 35vh; + height: $peek-height; + top: 0; + left: 0; +} + +.blurred-container .motto { + color: #fff; + font-size: 76px; + font-weight: 600; + text-align: center; + text-shadow: 0 0 10px rgba(0, 0, 0, 0.33); + text-transform: uppercase; + top: 7.5vh; + z-index: 3; + display: block; + margin: 0 auto; + position: relative; + width: 60%; + height: 0; +} + +.motto h1 { + background: #0000007d; + -webkit-text-stroke: 0.3px $gray-100; + line-height: 1; +} + +.blurred-container .img-src { + position: fixed; + width: 100%; + min-height: 35vh; + height: $peek-height; + background-repeat: no-repeat; + background-size: cover; + background-position: center center; +} + +.list-main { + position: relative; + background-color: #fff; + padding-bottom: calc(1rem + 95px); + padding-top: 1rem; +} + +.footer-contents { + position: relative; + background-color: $gray-200; +} + +/* Gives me greater control over fonts */ +.font-serif { + font-family: Georgia, "Times New Roman", Times, serif; +} + +.font-sans { + font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +.font-mono { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} + +.font-small-caps { + font-variant-caps: small-caps; +} + +.strikethrough { + text-decoration: line-through; +} + +.sfTable { + margin: 0 auto; +} + +.text-align-left { + text-align: left; +} + +.text-align-right { + text-align: right; +} + +.float-left { + float: left; +} + +.float-right { + float: right; +} + +.media-object { + max-height: 100%; + max-width: 100%; +} + +@media (min-width: 768px) { + .pull-left { + max-width: 25%; + } + + .w-md-50 { + width: 50%; + } +} + +h1 small { + font-size: 60%; + color: #9a9a9a; + font-weight: 300; + line-height: 1.5; +} + +h1 { + font-weight: 400; + margin: 30px 0 15px; +} + +.dogear { + clip-path: polygon(0 0, 0 100%, 100% 100%, 100% 25%, 75% 0); +} + +.fa-stack-top { + vertical-align: top; +} + +.table-condensed th { + padding: 0.5rem; +} + +.table-condensed td { + padding: 0.5rem; +} + +@media (min-width: map-get($grid-breakpoints, md)) { + .fixed-bottom { + left: 25%; + } + + .md-max-width-33 { + max-width: 33%; + } +} + +.card-link { + white-space: nowrap; +} + +.category-button { + position: absolute; + top: 1em; + right: 1em; + display: grid; +} + +.card-title { + margin-right: 2.25em; +} + +.thumb-icon-wrapper { + display: flex; + justify-content: center; +} + +.thumb-icon-badge { + font-size: xx-large; +} diff --git a/config.toml b/config.toml index 8a730b3..50bda13 100644 --- a/config.toml +++ b/config.toml @@ -1,6 +1,7 @@ baseURL = "https://millironx.com" languageCode = "en-us" title = "Milliron X" +ignoreFiles = ["\\.qmd$", "\\.ipynb$", "\\.py$"] [pagination] pagerSize = 5 @@ -51,6 +52,9 @@ notAlternative = "true" [markup.goldmark.parser.attribute] block = true +[markup.goldmark.renderer] +unsafe = true + [markup.goldmark.renderHooks] [markup.goldmark.renderHooks.link] diff --git a/content/posts/gave-up-github/.gitignore b/content/posts/gave-up-github/.gitignore new file mode 100644 index 0000000..fc0ab8a --- /dev/null +++ b/content/posts/gave-up-github/.gitignore @@ -0,0 +1 @@ +index.md diff --git a/content/posts/gave-up-github/ballmergatesaustinpowers.jpg b/content/posts/gave-up-github/ballmergatesaustinpowers.jpg new file mode 100644 index 0000000..76d2a39 Binary files /dev/null and b/content/posts/gave-up-github/ballmergatesaustinpowers.jpg differ diff --git a/content/posts/gave-up-github/index.qmd b/content/posts/gave-up-github/index.qmd new file mode 100644 index 0000000..f5e21f2 --- /dev/null +++ b/content/posts/gave-up-github/index.qmd @@ -0,0 +1,88 @@ +--- +title: I gave up Github (and more) +subtitle: Starting on a self-hosted blog +date: 2025-11-01 +tags: + - blog +featured: true +categories: + - blog +--- + +If you are reading this post, then I have migrated most of my online services +over to a VPS to the point where I feel confident enough to host a blog on them. +Yay for me! It has been my goal for nearly six years now to be able to have an +_interesting_ corner of the internet, filled with interconnected links that try +to tell the story of what I've done, who I've done it with, and where to find +it, and this is the result. + +I wanted to take the first post and indulge myself in explaining my motivation +for going self-hosted, show off my tech stack just a little bit, and lay out +some ground rules for myself for the posts ahead. + +## My motivation + +Microsoft is evil. There you have it. End of story. Thank you for coming to my +TED Talk. + +![The dynamic duo of Microsoft roleplaying as supervillains](./ballmergatesaustinpowers.jpg) + +Okay, but in all seriousness, the changes after Github was acquired by Microsoft +were annoying, and showed that Microsoft was prioritizing the wrong things, and +going back to their old ways of +[embrace, extend, exterminate](https://en.wikipedia.org/wiki/Embrace,_extend,_and_extinguish). + +1. [A page redesign for phones](https://github.com/Kira-NT/GitHub-Defreshed) +2. An "Achievements" system that gamified risky behavior +3. An integrated CI/CD pipeline system that is + [terribly designed](https://youtu.be/9qljpi5jiMQ) and + [way too easy to use insecurely](https://docs.zizmor.sh/)[^*] +4. Finally, ahem, ARTIFICIAL INTELLIGENCE, with illegal scraping of repos and + reproduction of code without proper license compliance + +I got into programming using Visual Basic .NET, writing automatic Punnet square +solvers and gestation calculators with Windows Forms, and designing websites +using ASP.NET MVC with Razor pages. Programming with Visual Basic was fun! At +least it was until Microsoft put +[someone who'd rather talk about her hip replacement than Visual Basic](https://www.dotnetrocks.com/details/1691) +in charge of development. When I started to see the same attitudes creeping +into Github, Github Actions, and Visual Studio Code, I made the decision to +move. + +The fact is, if you are the kind of person who I expect to be reading this blog, +then you probably know more of the drama around Github than I do. That, or +you're the kind of person who is not affected by Github whatsoever. Either way, +I'll leave you with a collection of links I've found to be varying levels of +insightful on the whole subject, and leave it at that. + +### Microsoft's behavior + +- [Microsoft, there is a way to win our trust](https://davelane.nz/microsoft-there-way-win-our-trust) +- [Can we trust Microsoft with open source?](https://dusted.codes/can-we-trust-microsoft-with-open-source) +- [Visual Studio Code is designed to fracture](https://ghuntley.com/fracture/) + +### Github-specific complaints + +- [Give Up Github Campaign - Software Freedom Conservancy](https://sfconservancy.org/GiveUpGitHub/) +- [Why not Github?](https://sanctum.geek.nz/why-not-github.html) +- [We need to talk about your Github addiction](https://ploum.net/2023-02-22-leaving-github.html) +- [Why I won't use Github for any new projects](https://raccoon.onyxbits.de/blog/why-not-use-github/) + +### Github Actions + +- [Github Actions feels bad](https://youtu.be/9qljpi5jiMQ) +- [The pain that is Github Actions](https://www.feldera.com/blog/the-pain-that-is-github-actions) +- [Github Actions could be so much better](https://blog.yossarian.net/2023/09/22/GitHub-Actions-could-be-so-much-better)z +- [Github Actions are a problem](https://felix-knorr.net/posts/2023-11-11-github-actions.html) + +### The problem in general + +- [Free software hasn't won](https://dorotac.eu/posts/fosswon/) + +[^*]: + Lumping Github Actions here might seem strange, but for context, I wrote and + maintained the + [nf-core/setup-nextflow](https://github.com/nf-core/setup-nextflow) Github + Action. Trying to make something coherent out of the Github Actions + ecosystem was harrowing, and convinced me more than anything else that + Github is just part of the embrace, extend, exterminate strategy. diff --git a/flake.lock b/flake.lock index 0a20125..594570b 100644 --- a/flake.lock +++ b/flake.lock @@ -20,16 +20,16 @@ }, "nixpkgs": { "locked": { - "lastModified": 1737597992, - "narHash": "sha256-FECKBxkd+w5I/fhsquthDiw/r/MdCpqmKikBU9yQGug=", + "lastModified": 1762756533, + "narHash": "sha256-HiRDeUOD1VLklHeOmaKDzf+8Hb7vSWPVFcWwaTrpm+U=", "owner": "nixos", "repo": "nixpkgs", - "rev": "d0bb4699177f691c8e558b32b3bdc38bc112f76f", + "rev": "c2448301fb856e351aab33e64c33a3fc8bcf637d", "type": "github" }, "original": { "owner": "nixos", - "ref": "nixos-unstable-small", + "ref": "nixos-25.05", "repo": "nixpkgs", "type": "github" } diff --git a/flake.nix b/flake.nix index 79685b8..0d20c3f 100644 --- a/flake.nix +++ b/flake.nix @@ -1,13 +1,13 @@ { inputs = { - nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable-small"; + nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05"; flake-utils.url = "github:numtide/flake-utils"; }; outputs = { self, nixpkgs, flake-utils }: flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; }; - buildInputs = with pkgs; [ hugo nodejs ]; + buildInputs = with pkgs; [ hugo nodejs quarto julia-bin ]; in with pkgs; { devShells.default = mkShell { inherit buildInputs; }; packages.default = stdenvNoCC.mkDerivation { diff --git a/layouts/partials/scrolling-image-header.html b/layouts/partials/scrolling-image-header.html index 57950b6..60d5187 100644 --- a/layouts/partials/scrolling-image-header.html +++ b/layouts/partials/scrolling-image-header.html @@ -1,6 +1,6 @@ {{ $thumbnailImage := .Resources.GetMatch "*thumbnail*" }} {{ with $thumbnailImage }} - {{ $croppedImage := $thumbnailImage.Fill "960x320 center" }} + {{ $croppedImage := $thumbnailImage.Fill "1500x500 center" }}