From 0ebdcd75860b2a01a544708e84e5d8e88a6632b8 Mon Sep 17 00:00:00 2001 From: Joshua Potter Date: Sun, 17 Dec 2023 07:05:38 -0700 Subject: [PATCH] Migrate over to a jekyll site with lagrange theme. --- .bundle/config | 2 + .githooks/pre-commit | 21 --- .gitignore | 7 +- 404.html | 25 +++ Gemfile | 11 ++ Gemfile.lock | 87 ++++++++++ README.md | 46 +++--- _config.yml | 48 ++++++ about.markdown | 18 +++ build.sh | 5 - flake.lock | 12 +- flake.nix | 44 ++---- gemset.nix | 369 +++++++++++++++++++++++++++++++++++++++++++ imgs/boardwise.svg | 5 - imgs/favicon.ico | Bin 15406 -> 0 bytes imgs/github.svg | 4 - imgs/jekyll.png | Bin 26661 -> 0 bytes imgs/lean.png | Bin 24866 -> 0 bytes imgs/linkedin.svg | 4 - imgs/zotero.svg | 4 - index.markdown | 6 + package-lock.json | 13 -- package.json | 14 -- prettier.config.cjs | 7 - src/index.html | 208 ------------------------ src/main.css | 15 -- tailwind.config.cjs | 14 -- tsconfig.json | 14 -- 28 files changed, 615 insertions(+), 388 deletions(-) create mode 100644 .bundle/config delete mode 100755 .githooks/pre-commit create mode 100644 404.html create mode 100644 Gemfile create mode 100644 Gemfile.lock create mode 100644 _config.yml create mode 100644 about.markdown delete mode 100755 build.sh create mode 100644 gemset.nix delete mode 100644 imgs/boardwise.svg delete mode 100644 imgs/favicon.ico delete mode 100644 imgs/github.svg delete mode 100644 imgs/jekyll.png delete mode 100644 imgs/lean.png delete mode 100644 imgs/linkedin.svg delete mode 100644 imgs/zotero.svg create mode 100644 index.markdown delete mode 100644 package-lock.json delete mode 100644 package.json delete mode 100644 prettier.config.cjs delete mode 100644 src/index.html delete mode 100644 src/main.css delete mode 100644 tailwind.config.cjs delete mode 100644 tsconfig.json diff --git a/.bundle/config b/.bundle/config new file mode 100644 index 0000000..f154eb2 --- /dev/null +++ b/.bundle/config @@ -0,0 +1,2 @@ +--- +BUNDLE_FORCE_RUBY_PLATFORM: "true" diff --git a/.githooks/pre-commit b/.githooks/pre-commit deleted file mode 100755 index 749f5d3..0000000 --- a/.githooks/pre-commit +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env bash -set -e - -STAGED=$( - git --no-pager diff --name-only --no-color --cached --diff-filter=d | - # Remove quotations used to surrounding filenames with special characters. - sed -e "s/^\"//" -e "s/\"$//g" -) - -TARGETS=() -while IFS= read -r FILENAME -do - if [[ "$FILENAME" =~ .*\.jsx?$ ]] || [[ "$FILENAME" == .*\.tsx?$ ]]; then - TARGETS+=("${FILENAME}") - fi -done <<< "$STAGED" - -if (( ${#TARGETS[@]} )); then - prettier --write "${TARGETS[@]}" - git add "${TARGETS[@]}" -fi diff --git a/.gitignore b/.gitignore index 2ae6a44..e99b3ee 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,8 @@ # Directory used by `direnv` to hold `use flake`-generated profiles. /.direnv/ -# The directory containing all build outputs. -/dist/ - # A symlink produced by default when running `nix build`. /result -# The NodeJS dependency directory. -/node_modules/ +# The jekyll-produced static bundle. +_site/ diff --git a/404.html b/404.html new file mode 100644 index 0000000..086a5c9 --- /dev/null +++ b/404.html @@ -0,0 +1,25 @@ +--- +permalink: /404.html +layout: default +--- + + + +
+

404

+ +

Page not found :(

+

The requested page could not be found.

+
diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..e82fe9b --- /dev/null +++ b/Gemfile @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +source "https://rubygems.org" + +gem "jekyll", "~> 4.3.2" +gem "lagrange", "~> 4.0" + +# If you have any plugins, put them here! +group :jekyll_plugins do + gem "jekyll-feed", "~> 0.12" +end diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..15765f8 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,87 @@ +GEM + remote: https://rubygems.org/ + specs: + addressable (2.8.6) + public_suffix (>= 2.0.2, < 6.0) + colorator (1.1.0) + concurrent-ruby (1.2.2) + em-websocket (0.5.3) + eventmachine (>= 0.12.9) + http_parser.rb (~> 0) + eventmachine (1.2.7) + ffi (1.16.3) + forwardable-extended (2.6.0) + google-protobuf (3.25.1) + http_parser.rb (0.8.0) + i18n (1.14.1) + concurrent-ruby (~> 1.0) + jekyll (4.3.2) + addressable (~> 2.4) + colorator (~> 1.0) + em-websocket (~> 0.5) + i18n (~> 1.0) + jekyll-sass-converter (>= 2.0, < 4.0) + jekyll-watch (~> 2.0) + kramdown (~> 2.3, >= 2.3.1) + kramdown-parser-gfm (~> 1.0) + liquid (~> 4.0) + mercenary (>= 0.3.6, < 0.5) + pathutil (~> 0.9) + rouge (>= 3.0, < 5.0) + safe_yaml (~> 1.0) + terminal-table (>= 1.8, < 4.0) + webrick (~> 1.7) + jekyll-feed (0.17.0) + jekyll (>= 3.7, < 5.0) + jekyll-paginate (1.1.0) + jekyll-sass-converter (3.0.0) + sass-embedded (~> 1.54) + jekyll-seo-tag (2.8.0) + jekyll (>= 3.8, < 5.0) + jekyll-sitemap (1.4.0) + jekyll (>= 3.7, < 5.0) + jekyll-watch (2.2.1) + listen (~> 3.0) + kramdown (2.4.0) + rexml + kramdown-parser-gfm (1.1.0) + kramdown (~> 2.0) + lagrange (4.0.0) + jekyll (~> 4.2) + jekyll-feed (~> 0.6) + jekyll-paginate (~> 1.1) + jekyll-seo-tag (~> 2.6) + jekyll-sitemap (~> 1.3) + liquid (4.0.4) + listen (3.8.0) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + mercenary (0.4.0) + pathutil (0.16.2) + forwardable-extended (~> 2.6) + public_suffix (5.0.4) + rake (13.1.0) + rb-fsevent (0.11.2) + rb-inotify (0.10.1) + ffi (~> 1.0) + rexml (3.2.6) + rouge (4.2.0) + safe_yaml (1.0.5) + sass-embedded (1.69.5) + google-protobuf (~> 3.23) + rake (>= 13.0.0) + terminal-table (3.0.2) + unicode-display_width (>= 1.1.1, < 3) + unicode-display_width (2.5.0) + webrick (1.8.1) + +PLATFORMS + ruby + +DEPENDENCIES + jekyll (~> 4.3.2) + jekyll-feed (~> 0.12) + lagrange (~> 4.0) + +BUNDLED WITH + 2.4.22 diff --git a/README.md b/README.md index 6d519b4..b8dffa9 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,29 @@ -# Portfolio +# Jekyll Flake Template -This is a single-page springboard for my various links/projects/services. - -## Quickstart - -[direnv](https://direnv.net/) can be used to launch a dev shell upon entering -this directory (refer to `.envrc`). Otherwise run via: +This is a template for bootstrapping a [Jekyll](https://jekyllrb.com/)-based +project (version 4.3.2) with the [minima](https://github.com/jekyll/minima) +theme (version 2.5.1). [direnv](https://direnv.net/) can be used to launch a +dev shell upon entering this directory (refer to `.envrc`). Otherwise run via: ```bash $ nix develop ``` - -## Language Server - -The [typescript-language-server](https://github.com/typescript-language-server/typescript-language-server) -(version 4.1.2) is included in this flake. - -## Formatting - -Formatting depends on [prettier](https://prettier.io/) (version 3.1.0). A -`pre-commit` hook is included in `.githooks` that can be used to format all -`*.jsx?` and `*.tsx?` files prior to commit. Install via: -```bash -$ git config --local core.hooksPath .githooks/ +Start the server by running: ``` -If running [direnv](https://direnv.net/), this hook is installed automatically -when entering the directory. +$ jekyll serve [--watch] +``` + +## Building + +Dependencies are managed using [bundix](https://github.com/nix-community/bundix). +If you make any changes to the `Gemfile`, run the following: +```bash +$ bundix -l +``` +This will update the `Gemfile.lock` and `gemset.nix` files. Afterward you can +run: +```bash +$ nix build +``` +Note that we need the `.bundle/config` file to workaround issues bundix has with +pre-built, platform-specific gems. Refer to +[PR #68](https://github.com/nix-community/bundix/pull/68) for more details. diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..694fd77 --- /dev/null +++ b/_config.yml @@ -0,0 +1,48 @@ +# Welcome to Jekyll! +# +# This config file is meant for settings that affect your whole blog, values +# which you are expected to set up once and rarely edit after that. If you find +# yourself editing this file very often, consider using Jekyll's data files +# feature for the data you need to update frequently. +# +# For technical reasons, this file is *NOT* reloaded automatically when you use +# 'bundle exec jekyll serve'. If you change this file, please restart the server process. +# +# If you need help with YAML syntax, here are some quick references for you: +# https://learn-the-web.algonquindesign.ca/topics/markdown-yaml-cheat-sheet/#yaml +# https://learnxinyminutes.com/docs/yaml/ +# +# Site settings +# These are used to personalize your new site. If you look in the HTML files, +# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on. +# You can create any custom variable you would like, and they will be accessible +# in the templates via {{ site.myvariable }}. + +title: Joshua Potter +description: My portfolio +github_username: jrpotter + +# Build settings +theme: lagrange +plugins: + - jekyll-feed + +# Exclude from processing. +# The following items will not be processed, by default. +# Any item listed under the `exclude:` key here will be automatically added to +# the internal "default list". +# +# Excluded items can be processed by explicitly listing the directories or +# their entries' file path in the `include:` list. +# +# exclude: +# - .sass-cache/ +# - .jekyll-cache/ +# - gemfiles/ +# - Gemfile +# - Gemfile.lock +# - node_modules/ +# - vendor/bundle/ +# - vendor/cache/ +# - vendor/gems/ +# - vendor/ruby/ diff --git a/about.markdown b/about.markdown new file mode 100644 index 0000000..8b4e0b2 --- /dev/null +++ b/about.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: About +permalink: /about/ +--- + +This is the base Jekyll theme. You can find out more info about customizing your Jekyll theme, as well as basic Jekyll usage documentation at [jekyllrb.com](https://jekyllrb.com/) + +You can find the source code for Minima at GitHub: +[jekyll][jekyll-organization] / +[minima](https://github.com/jekyll/minima) + +You can find the source code for Jekyll at GitHub: +[jekyll][jekyll-organization] / +[jekyll](https://github.com/jekyll/jekyll) + + +[jekyll-organization]: https://github.com/jekyll diff --git a/build.sh b/build.sh deleted file mode 100755 index 371fe4d..0000000 --- a/build.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -tailwindcss -i ./src/main.css -o ./dist/main.css -cp ./src/index.html ./dist/index.html -cp -a ./imgs ./dist diff --git a/flake.lock b/flake.lock index fdd5e26..62fd956 100644 --- a/flake.lock +++ b/flake.lock @@ -19,11 +19,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1694529238, - "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", + "lastModified": 1701680307, + "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", "owner": "numtide", "repo": "flake-utils", - "rev": "ff7b65b44d01cf9ba6a71320833626af21126384", + "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", "type": "github" }, "original": { @@ -34,11 +34,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1701253981, - "narHash": "sha256-ztaDIyZ7HrTAfEEUt9AtTDNoCYxUdSd6NrRHaYOIxtk=", + "lastModified": 1702312524, + "narHash": "sha256-gkZJRDBUCpTPBvQk25G0B7vfbpEYM5s5OZqghkjZsnE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "e92039b55bcd58469325ded85d4f58dd5a4eaf58", + "rev": "a9bf124c46ef298113270b1f84a164865987a91c", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 86cf8ba..ce3a8c7 100644 --- a/flake.nix +++ b/flake.nix @@ -1,11 +1,11 @@ { description = '' - An opinionated nodejs flake. + An opinionated jekyll flake. To generate a copy of this template elsewhere, install [bootstrap](https://github.com/jrpotter/bootstrap) and run: ```bash - $ bootstrap nodejs + $ bootstrap jekyll ``` ''; @@ -19,28 +19,20 @@ flake-utils.lib.eachDefaultSystem (system: let pkgs = nixpkgs.legacyPackages.${system}; + gems = pkgs.bundlerEnv { + name = "portfolio-gems"; + gemdir = ./.; + ruby = pkgs.ruby_3_2; + }; in { packages = { - app = pkgs.buildNpmPackage { - pname = "portfolio"; - version = "0.1.0"; + app = pkgs.stdenv.mkDerivation { + name = "portfolio"; + buildInputs = [ gems gems.wrappedRuby ]; src = ./.; - npmDepsHash = "sha256-Vx9NOJfk4sF2MMy/x0mJ0SINqWgx5oKmc8XOhi2vu6I"; - forceEmptyCache = true; - - buildPhase = "bash ${./build.sh}"; - - # Needed to properly invoke npm run build. - nativeBuildInputs = with pkgs; [ - nodePackages.tailwindcss - typescript - ]; - - installPhase = '' - mkdir $out - cp -a dist/* $out - ''; + version = "0.1.0"; + installPhase = "jekyll b -d $out"; }; default = self.packages.${system}.app; @@ -48,13 +40,11 @@ devShells.default = pkgs.mkShell { packages = with pkgs; [ - nodePackages.prettier - nodePackages.typescript-language-server - nodePackages.tailwindcss - nodejs - prefetch-npm-deps - typescript + bundix + gems + gems.wrappedRuby ]; }; - }); + } + ); } diff --git a/gemset.nix b/gemset.nix new file mode 100644 index 0000000..c8f0b96 --- /dev/null +++ b/gemset.nix @@ -0,0 +1,369 @@ +{ + addressable = { + dependencies = ["public_suffix"]; + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0irbdwkkjwzajq1ip6ba46q49sxnrl2cw7ddkdhsfhb6aprnm3vr"; + type = "gem"; + }; + version = "2.8.6"; + }; + colorator = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0f7wvpam948cglrciyqd798gdc6z3cfijciavd0dfixgaypmvy72"; + type = "gem"; + }; + version = "1.1.0"; + }; + concurrent-ruby = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0krcwb6mn0iklajwngwsg850nk8k9b35dhmc2qkbdqvmifdi2y9q"; + type = "gem"; + }; + version = "1.2.2"; + }; + em-websocket = { + dependencies = ["eventmachine" "http_parser.rb"]; + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1a66b0kjk6jx7pai9gc7i27zd0a128gy73nmas98gjz6wjyr4spm"; + type = "gem"; + }; + version = "0.5.3"; + }; + eventmachine = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0wh9aqb0skz80fhfn66lbpr4f86ya2z5rx6gm5xlfhd05bj1ch4r"; + type = "gem"; + }; + version = "1.2.7"; + }; + ffi = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1yvii03hcgqj30maavddqamqy50h7y6xcn2wcyq72wn823zl4ckd"; + type = "gem"; + }; + version = "1.16.3"; + }; + forwardable-extended = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15zcqfxfvsnprwm8agia85x64vjzr2w0xn9vxfnxzgcv8s699v0v"; + type = "gem"; + }; + version = "2.6.0"; + }; + google-protobuf = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18yiqq657lbqbrbdfbxfspdrkiynd0wf49l3cgdw939z36cy0h77"; + type = "gem"; + }; + version = "3.25.1"; + }; + "http_parser.rb" = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1gj4fmls0mf52dlr928gaq0c0cb0m3aqa9kaa6l0ikl2zbqk42as"; + type = "gem"; + }; + version = "0.8.0"; + }; + i18n = { + dependencies = ["concurrent-ruby"]; + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0qaamqsh5f3szhcakkak8ikxlzxqnv49n2p7504hcz2l0f4nj0wx"; + type = "gem"; + }; + version = "1.14.1"; + }; + jekyll = { + dependencies = ["addressable" "colorator" "em-websocket" "i18n" "jekyll-sass-converter" "jekyll-watch" "kramdown" "kramdown-parser-gfm" "liquid" "mercenary" "pathutil" "rouge" "safe_yaml" "terminal-table" "webrick"]; + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0wbp9xjnjv832ksqs816napy6amp5fh8v4wbrxlpxvgakqz6scsx"; + type = "gem"; + }; + version = "4.3.2"; + }; + jekyll-feed = { + dependencies = ["jekyll"]; + groups = ["jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1hzwmjrxi57x68i7jx5rxi8qlcbqcbg3di55wywrp53pr0bap6k8"; + type = "gem"; + }; + version = "0.17.0"; + }; + jekyll-paginate = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0r7bcs8fq98zldih4787zk5i9w24nz5wa26m84ssja95n3sas2l8"; + type = "gem"; + }; + version = "1.1.0"; + }; + jekyll-sass-converter = { + dependencies = ["sass-embedded"]; + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "00n9v19h0qgjijygfdkdh2gwpmdlz49nw1mqk6fnp43f317ngrz2"; + type = "gem"; + }; + version = "3.0.0"; + }; + jekyll-seo-tag = { + dependencies = ["jekyll"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0638mqhqynghnlnaz0xi1kvnv53wkggaq94flfzlxwandn8x2biz"; + type = "gem"; + }; + version = "2.8.0"; + }; + jekyll-sitemap = { + dependencies = ["jekyll"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0622rwsn5i0m5xcyzdn86l68wgydqwji03lqixdfm1f1xdfqrq0d"; + type = "gem"; + }; + version = "1.4.0"; + }; + jekyll-watch = { + dependencies = ["listen"]; + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1qd7hy1kl87fl7l0frw5qbn22x7ayfzlv9a5ca1m59g0ym1ysi5w"; + type = "gem"; + }; + version = "2.2.1"; + }; + kramdown = { + dependencies = ["rexml"]; + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ic14hdcqxn821dvzki99zhmcy130yhv5fqfffkcf87asv5mnbmn"; + type = "gem"; + }; + version = "2.4.0"; + }; + kramdown-parser-gfm = { + dependencies = ["kramdown"]; + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0a8pb3v951f4x7h968rqfsa19c8arz21zw1vaj42jza22rap8fgv"; + type = "gem"; + }; + version = "1.1.0"; + }; + lagrange = { + dependencies = ["jekyll" "jekyll-feed" "jekyll-paginate" "jekyll-seo-tag" "jekyll-sitemap"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1x94cw219d8pwqmsm9dp9swvsfsxpdph1d4sninbr9anc83yndh1"; + type = "gem"; + }; + version = "4.0.0"; + }; + liquid = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1czxv2i1gv3k7hxnrgfjb0z8khz74l4pmfwd70c7kr25l2qypksg"; + type = "gem"; + }; + version = "4.0.4"; + }; + listen = { + dependencies = ["rb-fsevent" "rb-inotify"]; + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "13rgkfar8pp31z1aamxf5y7cfq88wv6rxxcwy7cmm177qq508ycn"; + type = "gem"; + }; + version = "3.8.0"; + }; + mercenary = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0f2i827w4lmsizrxixsrv2ssa3gk1b7lmqh8brk8ijmdb551wnmj"; + type = "gem"; + }; + version = "0.4.0"; + }; + pathutil = { + dependencies = ["forwardable-extended"]; + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "12fm93ljw9fbxmv2krki5k5wkvr7560qy8p4spvb9jiiaqv78fz4"; + type = "gem"; + }; + version = "0.16.2"; + }; + public_suffix = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1bni4qjrsh2q49pnmmd6if4iv3ak36bd2cckrs6npl111n769k9m"; + type = "gem"; + }; + version = "5.0.4"; + }; + rake = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ilr853hawi09626axx0mps4rkkmxcs54mapz9jnqvpnlwd3wsmy"; + type = "gem"; + }; + version = "13.1.0"; + }; + rb-fsevent = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zmf31rnpm8553lqwibvv3kkx0v7majm1f341xbxc0bk5sbhp423"; + type = "gem"; + }; + version = "0.11.2"; + }; + rb-inotify = { + dependencies = ["ffi"]; + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1jm76h8f8hji38z3ggf4bzi8vps6p7sagxn3ab57qc0xyga64005"; + type = "gem"; + }; + version = "0.10.1"; + }; + rexml = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "05i8518ay14kjbma550mv0jm8a6di8yp5phzrd8rj44z9qnrlrp0"; + type = "gem"; + }; + version = "3.2.6"; + }; + rouge = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1fkfa0iq3r9b0zzrxpxha17avmyzci3kidzmfbf6fd1279mndpb0"; + type = "gem"; + }; + version = "4.2.0"; + }; + safe_yaml = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0j7qv63p0vqcd838i2iy2f76c3dgwzkiz1d1xkg7n0pbnxj2vb56"; + type = "gem"; + }; + version = "1.0.5"; + }; + sass-embedded = { + dependencies = ["google-protobuf" "rake"]; + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "10f04wvgca22lynvy4pycabkf55p4jf3a3bhmmscjmxv89g9khpg"; + type = "gem"; + }; + version = "1.69.5"; + }; + terminal-table = { + dependencies = ["unicode-display_width"]; + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "14dfmfjppmng5hwj7c5ka6qdapawm3h6k9lhn8zj001ybypvclgr"; + type = "gem"; + }; + version = "3.0.2"; + }; + unicode-display_width = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1d0azx233nags5jx3fqyr23qa2rhgzbhv8pxp46dgbg1mpf82xky"; + type = "gem"; + }; + version = "2.5.0"; + }; + webrick = { + groups = ["default" "jekyll_plugins"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "13qm7s0gr2pmfcl7dxrmq38asaza4w0i2n9my4yzs499j731wh8r"; + type = "gem"; + }; + version = "1.8.1"; + }; +} diff --git a/imgs/boardwise.svg b/imgs/boardwise.svg deleted file mode 100644 index e2fa1bc..0000000 --- a/imgs/boardwise.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/imgs/favicon.ico b/imgs/favicon.ico deleted file mode 100644 index d8e2a5296679b23961b4ec8e5a2a7f7fcaabba20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15406 zcmeHN%}*0S6dxmrS3G#{3Gs#+@nqzpsGy1EfX0s$ib6mVHR@jg2mwwe#zaG6yl6BK zl)nKflutd80Hxh|yTDDa>iAwuNn_b|mTq^u@on-l?aZ5fzxU=hvpa7`h(qGAsIC@R zhD2AD5cNWcP$=`i_NWkJSXWoK+g>BY^f4i7Q3tzVk4!xl`(6M>mkIKxWrA`d={^9| z_lJ{yxw^S_L8jD~$#FIQ@qIxd9WYXPSf@TusB>peYRS~(L|*@iPam}Ul8tfH&GmzR zbN^t+&k=u+YyXZvNJG&*h#Q53bVxVbzvTI2LFYm4L49cM@4F~CsHAl!gwlXQ>r+2dZ}f4cKpSC8i(uRq0}JK1(#e|Y`TT~~DVg0%jO4h^{e{xgE_blLe;tW0dI zE7GT!xgm5fx@R%Fezg0!2O!%hzV5#)OI}9|KJ7m?Vrm zYrI?j1{u4P7^IS$YJM)JVl&g82-!*|He7ixTV7gF?RRddri%^g%7ycu2-%9wVw0n-3g+=D!^`bn2Nu%pV<|*y%8Tm_K&h(5YwsFn@G-VyDCWVgA^0 zL#Lkk!~D_ViJcDfhxud24V`-CPq6v3I3M>ve^^2em-6PlT~Xiihtaz?6=BHD$vXZ0 zePv1YbhhI-TvFlYMo)xnb>EAqm8Hd!uxEXx7%bp8&S5Uq3n5#j?vLSO4CF9re(p4O2eg%2jGoi7{^iHKwkoNe!v8fc=q8mo!>B}jN<0BTz~N{sKin&F=sJ diff --git a/imgs/github.svg b/imgs/github.svg deleted file mode 100644 index d96a675..0000000 --- a/imgs/github.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/imgs/jekyll.png b/imgs/jekyll.png deleted file mode 100644 index 5e81865d1c02a36fa52bd93dcdd3a6d663e46b24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26661 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 Lb}n5Xa{B)OQ6sx` diff --git a/imgs/lean.png b/imgs/lean.png deleted file mode 100644 index d9f2822b36038dcda41a034e17309fb7acdeda97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24866 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 l7XVWl*1gP(DXCn)(wRF`^Zpbg6N3& - - - diff --git a/imgs/zotero.svg b/imgs/zotero.svg deleted file mode 100644 index ecb48a1..0000000 --- a/imgs/zotero.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/index.markdown b/index.markdown new file mode 100644 index 0000000..0671507 --- /dev/null +++ b/index.markdown @@ -0,0 +1,6 @@ +--- +# Feel free to add content and custom Front Matter to this file. +# To modify the layout, see https://jekyllrb.com/docs/themes/#overriding-theme-defaults + +layout: home +--- diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index f81657f..0000000 --- a/package-lock.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "portfolio", - "version": "0.1.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "portfolio", - "version": "0.1.0", - "license": "ISC" - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index 768e6eb..0000000 --- a/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "portfolio", - "version": "0.1.0", - "description": "", - "main": "main.js", - "scripts": { - "build": "./build.sh", - "format": "prettier --write \"src/**/*.{js,jsx,ts,tsx}\"", - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC" -} diff --git a/prettier.config.cjs b/prettier.config.cjs deleted file mode 100644 index ee2e235..0000000 --- a/prettier.config.cjs +++ /dev/null @@ -1,7 +0,0 @@ -/** @type {import('prettier').Options} */ -module.exports = { - arrowParens: "always", - semi: false, - tabWidth: 2, - trailingComma: "es5", -} diff --git a/src/index.html b/src/index.html deleted file mode 100644 index 203d394..0000000 --- a/src/index.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - - - Portfolio • Joshua Potter - - - -
-
- -

Joshua Potter

-
- -
-
-
-
-

Hosting

-

- The following websites are served from - NixOS - machines hosted on - Digital Ocean. Configuration files for each of my machines can be found - here. If interested in starting a similar hosting solution, consider - getting a $200 credit using my - referral link. -

-
-
- - blog - -
- Blog -

- I occasionally write about (usually) technical concepts in my - blog. Originally powered by Github Pages, I've since moved the - Jekyll-based - project to a self-hosting solution. Theming is provided by - Chirpy. -

-
-
-
- - bookshelf - -
- Bookshelf -

- A collection of books I am actively studying. Usually mathematics - or computer-science based. I aim to prove concepts as I encounter - them using the - Lean - interactive theorem prover. All proofs are also available in - LaTeX. -

-
-
-
- - boardwise - -
- BoardWise -

- A - Phoenix- and - React-based - project that provides an interface for finding chess coaches. This - serves as an alternative to those found on - Lichess - and - Chess.com. - Based on the - Tailwind Studio - theme. -

-
-
-
-
-

Projects

-
-
- Bootstrap -

- A C-based CLI for initializing projects in a flexible but - deterministic way. Originally motivated to serve as a better - alternative to - Nix flake templates, bootstrap allows you to provide different - parameters to custom initialization scripts akin to - npm init, django-admin startproject, - etc. -

-
-
- Anki Synonyms -

- An - Anki - plugin for specifying synonyms within flashcard question and - answer prompts. -

-
-
- Homesync -

- An experimental Rust-based project for automatically syncing files - scross your desktop to a git repository. Allows upstream and - downstream syncing with a single command, without any need to copy - files manually to and from a git repository. Separately, a daemon - can be spawned that watches files for changes and pushes/pulls - them as they happen. -

-
-
-
-
- - - diff --git a/src/main.css b/src/main.css deleted file mode 100644 index 5bf273f..0000000 --- a/src/main.css +++ /dev/null @@ -1,15 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -a { - text-decoration: underline; -} - -a:hover { - color: #0056b2; -} - -.link:hover { - filter: invert(19%) sepia(98%) saturate(2006%) hue-rotate(198deg) brightness(98%) contrast(101%); -} diff --git a/tailwind.config.cjs b/tailwind.config.cjs deleted file mode 100644 index 932f2d8..0000000 --- a/tailwind.config.cjs +++ /dev/null @@ -1,14 +0,0 @@ -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: ["src/**/*.{html,ts}"], - theme: { - extend: { - colors: { - primary: "white", - secondary: "#f6f8fa", - }, - }, - }, - plugins: [], -} - diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index c027276..0000000 --- a/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - // Visit https://aka.ms/tsconfig to read more about this file. - "compilerOptions": { - "target": "es2016", - "module": "commonjs", - "strict": true, - "esModuleInterop": true, - "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - "outDir": "dist" - }, - "include": ["src"], - "$schema": "https://json.schemastore.org/tsconfig" -}