Migrate over to a jekyll site with lagrange theme.
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
BUNDLE_FORCE_RUBY_PLATFORM: "true"
|
|
@ -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
|
|
@ -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/
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
---
|
||||
permalink: /404.html
|
||||
layout: default
|
||||
---
|
||||
|
||||
<style type="text/css" media="screen">
|
||||
.container {
|
||||
margin: 10px auto;
|
||||
max-width: 600px;
|
||||
text-align: center;
|
||||
}
|
||||
h1 {
|
||||
margin: 30px 0;
|
||||
font-size: 4em;
|
||||
line-height: 1;
|
||||
letter-spacing: -1px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="container">
|
||||
<h1>404</h1>
|
||||
|
||||
<p><strong>Page not found :(</strong></p>
|
||||
<p>The requested page could not be found.</p>
|
||||
</div>
|
|
@ -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
|
|
@ -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
|
46
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.
|
||||
|
|
|
@ -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/
|
|
@ -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
|
5
build.sh
|
@ -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
|
12
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": {
|
||||
|
|
44
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
|
||||
];
|
||||
};
|
||||
});
|
||||
}
|
||||
);
|
||||
}
|
||||
|
|
|
@ -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";
|
||||
};
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg viewBox="0 0 25 25" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M 12.5 0 H 20 Q 25 0, 25 5 V 12.5 H 12.5 Z" fill="rgb(10 10 10)"></path>
|
||||
<path d="M 0 20 Q 0 25, 5 25 H 12.5 V 12.5 H 0 Z" fill="rgb(10 10 10)"></path>
|
||||
</svg>
|
Before Width: | Height: | Size: 272 B |
BIN
imgs/favicon.ico
Before Width: | Height: | Size: 15 KiB |
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M12,2.2467A10.00042,10.00042,0,0,0,8.83752,21.73419c.5.08752.6875-.21247.6875-.475,0-.23749-.01251-1.025-.01251-1.86249C7,19.85919,6.35,18.78423,6.15,18.22173A3.636,3.636,0,0,0,5.125,16.8092c-.35-.1875-.85-.65-.01251-.66248A2.00117,2.00117,0,0,1,6.65,17.17169a2.13742,2.13742,0,0,0,2.91248.825A2.10376,2.10376,0,0,1,10.2,16.65923c-2.225-.25-4.55-1.11254-4.55-4.9375a3.89187,3.89187,0,0,1,1.025-2.6875,3.59373,3.59373,0,0,1,.1-2.65s.83747-.26251,2.75,1.025a9.42747,9.42747,0,0,1,5,0c1.91248-1.3,2.75-1.025,2.75-1.025a3.59323,3.59323,0,0,1,.1,2.65,3.869,3.869,0,0,1,1.025,2.6875c0,3.83747-2.33752,4.6875-4.5625,4.9375a2.36814,2.36814,0,0,1,.675,1.85c0,1.33752-.01251,2.41248-.01251,2.75,0,.26251.1875.575.6875.475A10.0053,10.0053,0,0,0,12,2.2467Z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 866 B |
BIN
imgs/jekyll.png
Before Width: | Height: | Size: 26 KiB |
BIN
imgs/lean.png
Before Width: | Height: | Size: 24 KiB |
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M20.47,2H3.53A1.45,1.45,0,0,0,2.06,3.43V20.57A1.45,1.45,0,0,0,3.53,22H20.47a1.45,1.45,0,0,0,1.47-1.43V3.43A1.45,1.45,0,0,0,20.47,2ZM8.09,18.74h-3v-9h3ZM6.59,8.48h0a1.56,1.56,0,1,1,0-3.12,1.57,1.57,0,1,1,0,3.12ZM18.91,18.74h-3V13.91c0-1.21-.43-2-1.52-2A1.65,1.65,0,0,0,12.85,13a2,2,0,0,0-.1.73v5h-3s0-8.18,0-9h3V11A3,3,0,0,1,15.46,9.5c2,0,3.45,1.29,3.45,4.06Z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 480 B |
|
@ -1,4 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M25.264 5.562v-0.769c-0.001-0.442-0.359-0.8-0.801-0.8h-16.639c-0.442 0-0.8 0.358-0.8 0.8v0.929c0 0.442 0.358 0.8 0.8 0.8h13.738l-14.885 19.418c-0.103 0.133-0.165 0.302-0.165 0.485 0 0 0 0.001 0 0.002v-0 0.768c0 0.442 0.358 0.8 0.8 0.801h17.119c0.442-0.001 0.8-0.359 0.801-0.801v-0.928c-0.001-0.442-0.359-0.8-0.801-0.801h-14.219l14.885-19.417c0.103-0.133 0.166-0.302 0.166-0.486v-0z"></path>
|
||||
</svg>
|
Before Width: | Height: | Size: 509 B |
|
@ -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
|
||||
---
|
|
@ -1,13 +0,0 @@
|
|||
{
|
||||
"name": "portfolio",
|
||||
"version": "0.1.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "portfolio",
|
||||
"version": "0.1.0",
|
||||
"license": "ISC"
|
||||
}
|
||||
}
|
||||
}
|
14
package.json
|
@ -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"
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
/** @type {import('prettier').Options} */
|
||||
module.exports = {
|
||||
arrowParens: "always",
|
||||
semi: false,
|
||||
tabWidth: 2,
|
||||
trailingComma: "es5",
|
||||
}
|
208
src/index.html
|
@ -1,208 +0,0 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="description" content="Joshua Potter portfolio" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link phx-track-static rel="stylesheet" href="./main.css" />
|
||||
<title>Portfolio • Joshua Potter</title>
|
||||
<link rel="icon" href="./imgs/favicon.ico" type="image/x-icon" />
|
||||
</head>
|
||||
<body class="bg-primary">
|
||||
<div
|
||||
class="bg-secondary border-b-2 border-zinc-200 flex items-center gap-4 p-6 text-zinc-200"
|
||||
>
|
||||
<header class="grow flex items-center gap-5">
|
||||
<img
|
||||
class="rounded-full w-28 h-28 border-2 border-black"
|
||||
src="https://avatars.githubusercontent.com/u/3267697?v=4"
|
||||
/>
|
||||
<h1 class="text-2xl mb-2 text-black">Joshua Potter</h1>
|
||||
</header>
|
||||
<div class="flex flex-col gap-6">
|
||||
<a href="https://github.com/jrpotter/" target="_blank">
|
||||
<img class="w-6 h-6 link" src="./imgs/github.svg" />
|
||||
</a>
|
||||
<a href="https://www.linkedin.com/in/jrpotter2112/" target="_blank">
|
||||
<img class="w-6 h-6 link" src="./imgs/linkedin.svg" />
|
||||
</a>
|
||||
<a href="https://www.zotero.org/jrpotter2112/library" target="_blank">
|
||||
<img class="w-6 h-6 link" src="./imgs/zotero.svg" />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<main class="mx-auto max-w-7xl p-8">
|
||||
<section class="grid grid-cols-1 lg:grid-cols-2 gap-16 pb-16">
|
||||
<div class="col-span-1 lg:col-span-2">
|
||||
<h2 class="text-xl pb-2">Hosting</h2>
|
||||
<p class="text-sm grow">
|
||||
The following websites are served from
|
||||
<a href="https://nixos.org/" target="_blank">NixOS</a>
|
||||
machines hosted on
|
||||
<a href="https://www.digitalocean.com/" target="_blank"
|
||||
>Digital Ocean</a
|
||||
>. Configuration files for each of my machines can be found
|
||||
<a
|
||||
href="https://github.com/jrpotter/nixos-configuration"
|
||||
target="_blank"
|
||||
>here</a
|
||||
>. If interested in starting a similar hosting solution, consider
|
||||
getting a $200 credit using my
|
||||
<a href="https://m.do.co/c/c65b89434c1b">referral link</a>.
|
||||
</p>
|
||||
</div>
|
||||
<div class="flex gap-8">
|
||||
<a
|
||||
href="https://blog.jrpotter.com"
|
||||
target="_blank"
|
||||
class="w-32 h-32 flex-none bg-[#343433] rounded-full"
|
||||
>
|
||||
<img class="p-4 mx-auto" src="./imgs/jekyll.png" alt="blog" />
|
||||
</a>
|
||||
<div class="grow">
|
||||
<a
|
||||
href="https://blog.jrpotter.com"
|
||||
target="_blank"
|
||||
class="font-bold grow"
|
||||
>Blog</a
|
||||
>
|
||||
<p class="text-sm pt-2">
|
||||
I occasionally write about (usually) technical concepts in my
|
||||
blog. Originally powered by Github Pages, I've since moved the
|
||||
<a href="https://jekyllrb.com/" target="_blank">Jekyll</a>-based
|
||||
project to a self-hosting solution. Theming is provided by
|
||||
<a
|
||||
href="https://github.com/cotes2020/jekyll-theme-chirpy"
|
||||
target="_blank"
|
||||
>Chirpy</a
|
||||
>.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex gap-8">
|
||||
<a
|
||||
href="https://bookshelf.jrpotter.com"
|
||||
target="_blank"
|
||||
class="w-32 h-32 flex-none"
|
||||
>
|
||||
<img class="mx-auto" src="./imgs/lean.png" alt="bookshelf" />
|
||||
</a>
|
||||
<div class="grow">
|
||||
<a
|
||||
href="https://bookshelf.jrpotter.com"
|
||||
target="_blank"
|
||||
class="font-bold"
|
||||
>Bookshelf</a
|
||||
>
|
||||
<p class="text-sm pt-2">
|
||||
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
|
||||
<a href="https://lean-lang.org/" target="_blank">Lean</a>
|
||||
interactive theorem prover. All proofs are also available in
|
||||
<a href="https://www.latex-project.org/" target="_blank">LaTeX</a
|
||||
>.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex gap-8">
|
||||
<a
|
||||
href="https://www.boardwise.gg"
|
||||
target="_blank"
|
||||
class="flex-none w-32 h-32"
|
||||
>
|
||||
<img src="./imgs/boardwise.svg" alt="boardwise" />
|
||||
</a>
|
||||
<div class="grow">
|
||||
<a href="https://www.boardwise.gg" target="_blank" class="font-bold"
|
||||
>BoardWise</a
|
||||
>
|
||||
<p class="text-sm pt-2">
|
||||
A
|
||||
<a href="https://www.phoenixframework.org/" target="_blank"
|
||||
>Phoenix</a
|
||||
>- and
|
||||
<a href="https://react.dev/" target="_blank">React</a>-based
|
||||
project that provides an interface for finding chess coaches. This
|
||||
serves as an alternative to those found on
|
||||
<a href="https://lichess.org/coach" target="_blank">Lichess</a>
|
||||
and
|
||||
<a href="https://chess.com/coaches" target="_blank">Chess.com</a>.
|
||||
Based on the
|
||||
<a href="https://tailwindui.com/templates/studio" target="_blank"
|
||||
>Tailwind Studio</a
|
||||
>
|
||||
theme.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section>
|
||||
<h2 class="text-xl pb-4">Projects</h2>
|
||||
<div class="grid grid-cols-1 gap-6">
|
||||
<div>
|
||||
<a
|
||||
href="https://github.com/jrpotter/bootstrap"
|
||||
target="_blank"
|
||||
class="font-bold"
|
||||
>Bootstrap</a
|
||||
>
|
||||
<p class="text-sm pt-2">
|
||||
A C-based CLI for initializing projects in a flexible but
|
||||
deterministic way. Originally motivated to serve as a better
|
||||
alternative to
|
||||
<a href="https://github.com/NixOS/templates" target="_blank"
|
||||
>Nix flake templates</a
|
||||
>, <code>bootstrap</code> allows you to provide different
|
||||
parameters to custom initialization scripts akin to
|
||||
<code>npm init</code>, <code>django-admin startproject</code>,
|
||||
etc.
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<a
|
||||
href="https://github.com/jrpotter/anki-synonyms"
|
||||
target="_blank"
|
||||
class="font-bold"
|
||||
>Anki Synonyms</a
|
||||
>
|
||||
<p class="text-sm pt-2">
|
||||
An
|
||||
<a href="https://apps.ankiweb.net/" target="_blank">Anki</a>
|
||||
plugin for specifying synonyms within flashcard question and
|
||||
answer prompts.
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<a
|
||||
href="https://github.com/jrpotter/homesync"
|
||||
target="_blank"
|
||||
class="font-bold"
|
||||
>Homesync</a
|
||||
>
|
||||
<p class="text-sm pt-2">
|
||||
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.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
<footer
|
||||
class="h-24 px-4 lg:px-8 bg-secondary border-t-2 border-zinc-200 flex items-center"
|
||||
>
|
||||
<div class="grow">© 2023 Joshua Potter</div>
|
||||
<a
|
||||
href="https://www.digitalocean.com/?refcode=c65b89434c1b&utm_campaign=Referral_Invite&utm_medium=Referral_Program&utm_source=badge"
|
||||
><img
|
||||
src="https://web-platforms.sfo2.cdn.digitaloceanspaces.com/WWW/Badge%201.svg"
|
||||
alt="DigitalOcean Referral Badge"
|
||||
class="w-40 max-w-none"
|
||||
/></a>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
15
src/main.css
|
@ -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%);
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
/** @type {import('tailwindcss').Config} */
|
||||
module.exports = {
|
||||
content: ["src/**/*.{html,ts}"],
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
primary: "white",
|
||||
secondary: "#f6f8fa",
|
||||
},
|
||||
},
|
||||
},
|
||||
plugins: [],
|
||||
}
|
||||
|
|
@ -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"
|
||||
}
|