site

Website's source files.
Log | Files | Refs | Submodules | LICENSE

commit 84dcd483c6a91b82e8506ac435fb584006645b73
parent c1cc6267d08a80512f3841fde1cd772b2606cde3
Author: Ryan Jeffrey <ryan@ryanmj.xyz>
Date:   Wed, 19 Jan 2022 22:42:04 -0800

New site, express server with handlebars.

Diffstat:
M.gitignore | 150+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
DMakefile | 25-------------------------
Dabout.org | 42------------------------------------------
Dcss/emacs.css | 252-------------------------------------------------------------------------------
Dcss/main.css | 210-------------------------------------------------------------------------------
Dcss/rgb.css | 663-------------------------------------------------------------------------------
Dcss/terminal.css | 165-------------------------------------------------------------------------------
Dindex.org | 111-------------------------------------------------------------------------------
Apackage-lock.json | 1156++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Apackage.json | 7+++++++
Dposts/index.org | 36------------------------------------
Dposts/mailserver-addendum.org | 169-------------------------------------------------------------------------------
Dposts/sitemap.org | 6------
Dposts/views/postamble-e.html | 8--------
Dposts/views/postamble-i.html | 24------------------------
Dposts/views/preamble-e.html | 13-------------
Dposts/views/preamble-i.html | 35-----------------------------------
Dpublish.el | 239-------------------------------------------------------------------------------
Dscripts/main.js | 44--------------------------------------------
Aserver.js | 114+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dsoftware.org | 48------------------------------------------------
Aviews/index.handlebars | 5+++++
Aviews/partials/lsTemplate.handlebars | 1+
Dviews/postamble-i.html | 24------------------------
Dviews/preamble-i.html | 35-----------------------------------
25 files changed, 1431 insertions(+), 2151 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -58,4 +58,150 @@ flycheck_*.el res/ public/ -files/- \ No newline at end of file +files/ + + +# Created by https://www.toptal.com/developers/gitignore/api/node +# Edit at https://www.toptal.com/developers/gitignore?templates=node + +### Node ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +### Node Patch ### +# Serverless Webpack directories +.webpack/ + +# Optional stylelint cache + +# SvelteKit build / generate output +.svelte-kit + +# End of https://www.toptal.com/developers/gitignore/api/node+ \ No newline at end of file diff --git a/Makefile b/Makefile @@ -1,25 +0,0 @@ -# Makefile for Ryan's Blog -# Adapted from https://opensource.com/article/20/3/blog-emacs -# See: https://gitlab.com/psachin/psachin.gitlab.io - -.PHONY: all publish publish_no_init - -all: publish - -publish: publish.el - @echo "Publishing... with current Emacs configurations." - emacs --batch --load publish.el --funcall org-publish-all - -force: publish.el - @echo "Publish... with configuration and force." - emacs --batch --load publish.el -e '(org-publish-all t)' - -publish_no_init: publish.el - @echo "Publishing... with --no-init." - emacs --batch --no-init --load publish.el --funcall org-publish-all - -clean: - @echo "Cleaning up.." - @rm -rvf *.elc - @rm -rvf public - @rm -rvf ~/.org-timestamps/* diff --git a/about.org b/about.org @@ -1,42 +0,0 @@ -#+options: ':nil *:t -:t ::t <:t H:3 \n:nil ^:{} arch:headline -#+options: author:t broken-links:nil c:nil creator:nil -#+options: d:(not "LOGBOOK") date:t e:t email:nil f:t inline:t num:t -#+options: p:nil pri:nil prop:nil stat:t tags:t tasks:t tex:t -#+options: timestamp:t title:nil toc:t todo:t |:t -#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="css/terminal.css" /> -#+HTML_HEAD: <script src="scripts/main.js" integrity="sha384-__SHASUM__"></script> -#+language: en -#+select_tags: export -#+exclude_tags: noexport -#+creator: Emacs 27.1 (Org mode 9.3) -#+options: html-link-use-abs-url:nil -#+options: html-scripts:nil html-style:nil -#+options: html5-fancy:nil tex:t -#+html_doctype: xhtml-strict -#+html_container: div -#+description: -#+keywords: -#+html_link_home: -#+html_link_up: -#+html_mathjax: -#+html_head: -#+html_head_extra: -#+subtitle: -#+infojs_opt: -#+creator: <a href="https://www.gnu.org/software/emacs/">Emacs</a> 27.1 (<a href="https://orgmode.org">Org</a> mode 9.3) -#+latex_header: - -#+title: about -#+date: <2021-02-10 Wed> -#+author: Ryan Jeffrey -#+email: ryan@ryanmj.xyz - - -__PROMPT__ whoami - -My name is Ryan Jeffrey, I also go by the alias Mallock sometimes. I was born in August 1998 in Austin, Texas. - -Though I am a Linux user I am pessimistic about the future of Linux and am disappointed that there are basically no free software OS alternatives. For many Linux /is/ free software; it feels as tough projects like the BSDs have been erased from history. It's always been a fantasy of mine to make an alternative OS myself, which I might do one day! - -This blog is a free software echo chamber, you will not see any positive mentions of pr*prietary software on this site! - diff --git a/css/emacs.css b/css/emacs.css @@ -1,252 +0,0 @@ -@import './rgb.css'; - -table { - table-layout: fixed; - border-collapse: collapse; - border-spacing: 0; - width: 100%; - justify-content: left; -} - -h5 { - color: #fff; - font-size: 1.1em; -} - -code { - font-size: 1em; -} - -.src { - color: #00FF7F; -} - -.org-ol { - color: #FFFFFF; - font-size: 1.2em; -} - -pre { - color: #00FFFF; -} - - -.termout { - white-space: pre-wrap; -} - -table p { - padding: 0; - margin: 0; -} - -h4 { - color: #00FF88; -} - -td { - color: #00FF88; - padding: 0; -} - -th { - color: #00FFFF; - padding: 0; -} - -tr td:nth-of-type(1) { - width: 20%; -} - -tr td:nth-of-type(2) { - text-align: left; - justify-content: left; - margin-left: 0.2em; - float:left; - width: 80% -} - - -.emacs { - background-image:url(../res/bg.png); - border: 0.2em solid #285577; - /* positioning */ - margin: 0 auto; - margin-top: 75px; - width: 75%; -} - -#gnu-emacs { - width: 2%; -} - -.ebar { - height: 1.3em; - background-color: #CCCCCC; - padding: 0; - margin : 0; - width: 100%; -} - -.ebar-top { - border: 0.15em solid #F5F5F5; -} - -.ebar-bot { - border: 0.15em solid #7A7A7A; -} - -.ebar p { - padding: 0; - margin: 0; - font-size: 1.2em; - display: inline; - color: #00008B; -} - - -.ebar .title-red { - padding: 0; - margin: 0; - font-size: 0.8em; - color: #B22; -} - - -body { - font-family: Inconsolata, "Courier New", monospace; - -webkit-font-smoothing : none; - background-color: #C8C8C8; - background-image: url("../res/ui-back.png"); - -moz-font-smoothing: never; -} - -h1 { - font-size: 4em; - color: #b0c4de; - text-align: center; -} - -title { - color: #00FFFF; -} - -h2 { - color: #00FF7F; - font-size: 26pt; -} - -h3 { font-size: 16pt; color: #B0C4DE; text-decoration: underline; } - - -p { - color: #fff; - font-size: 16pt; - -moz-font-smoothing: never; -} - -.headpar { - color:#00FFFF; -} - -.headital { - color: #FFFF00; -} - -a { - font-weight: bold; - text-decoration: none; - font-size: 16pt; -} - - /* unvisited link */ -a:link { - color: #00FFFF; -} - -/* visited link */ -a:visited { - color: #e916d5; -} - - -/* selected link */ -a:active { - color: blue; -} - -a:hover { - text-decoration: underline; -} - -hr.vertical { - height:100%; /* you might need some positioning for this to work, see other questions about 100% height */ - width:0; - border:1px solid black; -} - -.seperator { - height: 100%; - width: 1px; - background: black; - top: 0; - bottom: 0; - position: absolute; - left: 50%; -} - -.hddr { - width: 50%; - display: table-cell; - border:1px solid grey; -} - -.fttr { - margin-top: auto; - margin: auto; - margin-top: 75px; - width: 75%; -} - -ul { -} - -ul li { - color: white; - font-size: 1.2em; - margin-left: 2em; -} - -.code { - display: inline; -} - -#links { - font-size: large; - text-align: center; - margin: auto; - max-width: 700px; - padding: 5px; - border-radius: 10px; -} - -#links img { - height: 1.25em; -} - -a:hover img { - background: rgba(0, 0, 0, 0); - transition: .5s; - transform: scale(2, 2); -} - -.ebar .last { - margin-right: 0%; - margin-left: 30%; - display: inline; -} - - -h6 { - font-size: 16pt; -} diff --git a/css/main.css b/css/main.css @@ -1,210 +0,0 @@ -#taskbar { - width: 75%; - display: flex; - height: 200px; -} - -#home { - width: 20%; -} - -#git-server { - width: 20%; -} - - -#blog { - width: 20%; -} - - -#files { - width: 20%; -} - - -#other-posts { - width: 20%; -} - - -.title { text-align: center; - margin-bottom: .2em; } -.subtitle { text-align: center; - font-size: medium; - font-weight: bold; - margin-top:0; } -.todo { font-family: monospace; color: red; } -.done { font-family: monospace; color: green; } -.priority { font-family: monospace; color: orange; } -.tag { background-color: #eee; font-family: monospace; - padding: 2px; font-size: 80%; font-weight: normal; } -.timestamp { color: #bebebe; } -.timestamp-kwd { color: #5f9ea0; } -.org-right { margin-left: auto; margin-right: 0px; text-align: right; } -.org-left { margin-left: 0px; margin-right: auto; text-align: left; } -.org-center { margin-left: auto; margin-right: auto; text-align: center; } -.underline { text-decoration: underline; } -#postamble p, #preamble p { font-size: 90%; margin: .2em; } -p.verse { margin-left: 3%; } -pre :not(#main-page-title) { - border: 1px solid #ccc; - box-shadow: 3px 3px 3px #eee; - padding: 8pt; - font-family: monospace; - overflow: auto; - margin: 1.2em; -} -pre.src { - position: relative; - overflow: visible; - padding-top: 1.2em; -} -pre.src:before { - display: none; - position: absolute; - background-color: white; - top: -10px; - right: 10px; - padding: 3px; - border: 1px solid black; -} -pre.src:hover:before { display: inline;} -/* Languages per Org manual */ -pre.src-asymptote:before { content: 'Asymptote'; } -pre.src-awk:before { content: 'Awk'; } -pre.src-C:before { content: 'C'; } -/* pre.src-C++ doesn't work in CSS */ -pre.src-clojure:before { content: 'Clojure'; } -pre.src-css:before { content: 'CSS'; } -pre.src-D:before { content: 'D'; } -pre.src-ditaa:before { content: 'ditaa'; } -pre.src-dot:before { content: 'Graphviz'; } -pre.src-calc:before { content: 'Emacs Calc'; } -pre.src-emacs-lisp:before { content: 'Emacs Lisp'; } -pre.src-fortran:before { content: 'Fortran'; } -pre.src-gnuplot:before { content: 'gnuplot'; } -pre.src-haskell:before { content: 'Haskell'; } -pre.src-hledger:before { content: 'hledger'; } -pre.src-java:before { content: 'Java'; } -pre.src-js:before { content: 'Javascript'; } -pre.src-latex:before { content: 'LaTeX'; } -pre.src-ledger:before { content: 'Ledger'; } -pre.src-lisp:before { content: 'Lisp'; } -pre.src-lilypond:before { content: 'Lilypond'; } -pre.src-lua:before { content: 'Lua'; } -pre.src-matlab:before { content: 'MATLAB'; } -pre.src-mscgen:before { content: 'Mscgen'; } -pre.src-ocaml:before { content: 'Objective Caml'; } -pre.src-octave:before { content: 'Octave'; } -pre.src-org:before { content: 'Org mode'; } -pre.src-oz:before { content: 'OZ'; } -pre.src-plantuml:before { content: 'Plantuml'; } -pre.src-processing:before { content: 'Processing.js'; } -pre.src-python:before { content: 'Python'; } -pre.src-R:before { content: 'R'; } -pre.src-ruby:before { content: 'Ruby'; } -pre.src-sass:before { content: 'Sass'; } -pre.src-scheme:before { content: 'Scheme'; } -pre.src-screen:before { content: 'Gnu Screen'; } -pre.src-sed:before { content: 'Sed'; } -pre.src-sh:before { content: 'shell'; } -pre.src-sql:before { content: 'SQL'; } -pre.src-sqlite:before { content: 'SQLite'; } -/* additional languages in org.el's org-babel-load-languages alist */ -pre.src-forth:before { content: 'Forth'; } -pre.src-io:before { content: 'IO'; } -pre.src-J:before { content: 'J'; } -pre.src-makefile:before { content: 'Makefile'; } -pre.src-maxima:before { content: 'Maxima'; } -pre.src-perl:before { content: 'Perl'; } -pre.src-picolisp:before { content: 'Pico Lisp'; } -pre.src-scala:before { content: 'Scala'; } -pre.src-shell:before { content: 'Shell Script'; } -pre.src-ebnf2ps:before { content: 'ebfn2ps'; } -/* additional language identifiers per "defun org-babel-execute" - in ob-*.el */ -pre.src-cpp:before { content: 'C++'; } -pre.src-abc:before { content: 'ABC'; } -pre.src-coq:before { content: 'Coq'; } -pre.src-groovy:before { content: 'Groovy'; } -/* additional language identifiers from org-babel-shell-names in - ob-shell.el: ob-shell is the only babel language using a lambda to put - the execution function name together. */ -pre.src-bash:before { content: 'bash'; } -pre.src-csh:before { content: 'csh'; } -pre.src-ash:before { content: 'ash'; } -pre.src-dash:before { content: 'dash'; } -pre.src-ksh:before { content: 'ksh'; } -pre.src-mksh:before { content: 'mksh'; } -pre.src-posh:before { content: 'posh'; } -/* Additional Emacs modes also supported by the LaTeX listings package */ -pre.src-ada:before { content: 'Ada'; } -pre.src-asm:before { content: 'Assembler'; } -pre.src-caml:before { content: 'Caml'; } -pre.src-delphi:before { content: 'Delphi'; } -pre.src-html:before { content: 'HTML'; } -pre.src-idl:before { content: 'IDL'; } -pre.src-mercury:before { content: 'Mercury'; } -pre.src-metapost:before { content: 'MetaPost'; } -pre.src-modula-2:before { content: 'Modula-2'; } -pre.src-pascal:before { content: 'Pascal'; } -pre.src-ps:before { content: 'PostScript'; } -pre.src-prolog:before { content: 'Prolog'; } -pre.src-simula:before { content: 'Simula'; } -pre.src-tcl:before { content: 'tcl'; } -pre.src-tex:before { content: 'TeX'; } -pre.src-plain-tex:before { content: 'Plain TeX'; } -pre.src-verilog:before { content: 'Verilog'; } -pre.src-vhdl:before { content: 'VHDL'; } -pre.src-xml:before { content: 'XML'; } -pre.src-nxml:before { content: 'XML'; } -/* add a generic configuration mode; LaTeX export needs an additional - (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */ -pre.src-conf:before { content: 'Configuration File'; } - -table { border-collapse:collapse; } -caption.t-above { caption-side: top; } -caption.t-bottom { caption-side: bottom; } -td, th { vertical-align:top; } -th.org-right { text-align: center; } -th.org-left { text-align: center; } -th.org-center { text-align: center; } -td.org-right { text-align: right; } -td.org-left { text-align: left; } -td.org-center { text-align: center; } -dt { font-weight: bold; } -.footpara { display: inline; } -.footdef { margin-bottom: 1em; } -.figure { padding: 1em; } -.figure p { text-align: center; } -.equation-container { - display: table; - text-align: center; - width: 100%; -} -.equation { - vertical-align: middle; -} -.equation-label { - display: table-cell; - text-align: right; - vertical-align: middle; -} -.inlinetask { - padding: 10px; - border: 2px solid gray; - margin: 10px; - background: #ffffcc; -} -#org-div-home-and-up -{ text-align: right; font-size: 70%; white-space: nowrap; } -textarea { overflow-x: auto; } -.linenr { font-size: smaller } -.code-highlighted { background-color: #ffff00; } -.org-info-js_info-navigation { border-style: none; } -#org-info-js_console-label -{ font-size: 10px; font-weight: bold; white-space: nowrap; } -.org-info-js_search-highlight -{ background-color: #ffff00; color: #000000; font-weight: bold; } -.org-svg { width: 90%; } diff --git a/css/rgb.css b/css/rgb.css @@ -1,663 +0,0 @@ -/* X11 colors (snake_case version) with some additions at the end */ - -:root { - --black:#000000; - --gray0:#000000; - --grey0:#000000; - --gray1:#030303; - --grey1:#030303; - --gray2:#050505; - --grey2:#050505; - --gray3:#080808; - --grey3:#080808; - --navy_blue:#000080; - --navy:#000080; - --gray4:#0a0a0a; - --grey4:#0a0a0a; - --dark_blue:#00008b; - --blue4:#00008b; - --gray5:#0d0d0d; - --grey5:#0d0d0d; - --medium_blue:#0000cd; - --blue3:#0000cd; - --gray6:#0f0f0f; - --grey6:#0f0f0f; - --blue2:#0000ee; - --gray7:#121212; - --grey7:#121212; - --blue1:#0000ff; - --blue:#0000ff; - --gray8:#141414; - --grey8:#141414; - --gray9:#171717; - --grey9:#171717; - --gray10:#1a1a1a; - --grey10:#1a1a1a; - --gray11:#1c1c1c; - --grey11:#1c1c1c; - --dark_red:#8b0000; - --red4:#8b0000; - --gray12:#1f1f1f; - --grey12:#1f1f1f; - --midnight_blue:#191970; - --gray13:#212121; - --grey13:#212121; - --gray14:#242424; - --grey14:#242424; - --gray15:#262626; - --grey15:#262626; - --dark_magenta:#8b008b; - --magenta4:#8b008b; - --gray16:#292929; - --grey16:#292929; - --deep_pink4:#8b0a50; - --gray17:#2b2b2b; - --grey17:#2b2b2b; - --red3:#cd0000; - --gray18:#2e2e2e; - --grey18:#2e2e2e; - --dark_violet:#9400d3; - --purple4:#551a8b; - --gray19:#303030; - --grey19:#303030; - --firebrick4:#8b1a1a; - --red2:#ee0000; - --gray20:#333333; - --grey20:#333333; - --gray21:#363636; - --grey21:#363636; - --red1:#ff0000; - --red:#ff0000; - --gray22:#383838; - --grey22:#383838; - --orange_red4:#8b2500; - --dark_orchid4:#68228b; - --maroon4:#8b1c62; - --brown4:#8b2323; - --magenta3:#cd00cd; - --gray23:#3b3b3b; - --grey23:#3b3b3b; - --violet_red4:#8b2252; - --gray24:#3d3d3d; - --grey24:#3d3d3d; - --deep_pink3:#cd1076; - --gray25:#404040; - --grey25:#404040; - --royal_blue4:#27408b; - --firebrick:#b22222; - --gray26:#424242; - --grey26:#424242; - --medium_violet_red:#c71585; - --magenta2:#ee00ee; - --slate_blue4:#473c8b; - --brown:#a52a2a; - --purple3:#7d26cd; - --dark_slate_blue:#483d8b; - --gray27:#454545; - --grey27:#454545; - --dodger_blue4:#104e8b; - --tomato4:#8b3626; - --gray28:#474747; - --grey28:#474747; - --dark_green:#006400; - --dark_slate_gray:#2f4f4f; - --dark_slate_grey:#2f4f4f; - --magenta1:#ff00ff; - --magenta:#ff00ff; - --deep_pink2:#ee1289; - --firebrick3:#cd2626; - --gray29:#4a4a4a; - --grey29:#4a4a4a; - --purple:#a020f0; - --indian_red4:#8b3a3a; - --medium_orchid4:#7a378b; - --blue_violet:#8a2be2; - --gray30:#4d4d4d; - --grey30:#4d4d4d; - --coral4:#8b3e2f; - --violet_red:#d02090; - --hot_pink4:#8b3a62; - --maroon:#b03060; - --dark_orange4:#8b4500; - --gray31:#4f4f4f; - --grey31:#4f4f4f; - --deep_pink1:#ff1493; - --deep_pink:#ff1493; - --purple2:#912cee; - --saddle_brown:#8b4513; - --chocolate4:#8b4513; - --medium_purple4:#5d478b; - --gray32:#525252; - --grey32:#525252; - --orange_red3:#cd3700; - --dark_orchid:#9932cc; - --sienna4:#8b4726; - --dark_orchid3:#9a32cd; - --maroon3:#cd2990; - --brown3:#cd3333; - --gray33:#545454; - --grey33:#545454; - --deep_sky_blue4:#00688b; - --firebrick2:#ee2c2c; - --purple1:#9b30ff; - --gray34:#575757; - --grey34:#575757; - --pale_violet_red4:#8b475d; - --violet_red3:#cd3278; - --salmon4:#8b4c39; - --gray35:#595959; - --grey35:#595959; - --orchid4:#8b4789; - --gray36:#5c5c5c; - --grey36:#5c5c5c; - --firebrick1:#ff3030; - --steel_blue4:#36648b; - --orange4:#8b5a00; - --gray37:#5e5e5e; - --grey37:#5e5e5e; - --royal_blue3:#3a5fcd; - --sienna:#a0522d; - --orange_red2:#ee4000; - --dark_orchid2:#b23aee; - --light_salmon4:#8b5742; - --maroon2:#ee30a7; - --gray38:#616161; - --grey38:#616161; - --tan4:#8b5a2b; - --brown2:#ee3b3b; - --dark_olive_green:#556b2f; - --gray39:#636363; - --grey39:#636363; - --green4:#008b00; - --slate_blue3:#6959cd; - --slate_blue:#6a5acd; - --gray40:#666666; - --grey40:#666666; - --violet_red2:#ee3a8c; - --dark_goldenrod4:#8b6508; - --dodger_blue3:#1874cd; - --dark_orchid1:#bf3eff; - --orange_red1:#ff4500; - --orange_red:#ff4500; - --tomato3:#cd4f39; - --maroon1:#ff34b3; - --spring_green4:#008b45; - --brown1:#ff4040; - --light_pink4:#8b5f65; - --dim_gray:#696969; - --dim_grey:#696969; - --gray41:#696969; - --grey41:#696969; - --royal_blue:#4169e1; - --sky_blue4:#4a708b; - --turquoise4:#00868b; - --goldenrod4:#8b6914; - --gray42:#6b6b6b; - --grey42:#6b6b6b; - --pink4:#8b636c; - --forest_green:#228b22; - --violet_red1:#ff3e96; - --dark_cyan:#008b8b; - --cyan4:#008b8b; - --gray43:#6e6e6e; - --grey43:#6e6e6e; - --royal_blue2:#436eee; - --indian_red3:#cd5555; - --medium_orchid3:#b452cd; - --gray44:#707070; - --grey44:#707070; - --rosy_brown4:#8b6969; - --plum4:#8b668b; - --gold4:#8b7500; - --coral3:#cd5b45; - --chartreuse4:#458b00; - --gray45:#737373; - --grey45:#737373; - --sea_green4:#2e8b57; - --sea_green:#2e8b57; - --medium_orchid:#ba55d3; - --indian_red:#cd5c5c; - --dark_orange3:#cd6600; - --slate_blue2:#7a67ee; - --gray46:#757575; - --grey46:#757575; - --medium_slate_blue:#7b68ee; - --burlywood4:#8b7355; - --royal_blue1:#4876ff; - --medium_purple3:#8968cd; - --light_sky_blue4:#607b8b; - --chocolate3:#cd661d; - --dodger_blue2:#1c86ee; - --gray47:#787878; - --grey47:#787878; - --steel_blue:#4682b4; - --slate_gray4:#6c7b8b; - --tomato2:#ee5c42; - --light_steel_blue4:#6e7b8b; - --chocolate:#d2691e; - --peach_puff4:#8b7765; - --gray48:#7a7a7a; - --grey48:#7a7a7a; - --sienna3:#cd6839; - --aquamarine4:#458b74; - --hot_pink3:#cd6090; - --navajo_white4:#8b795e; - --pale_green4:#548b54; - --cadet_blue4:#53868b; - --olive_drab4:#698b22; - --deep_sky_blue3:#009acd; - --gray49:#7d7d7d; - --grey49:#7d7d7d; - --slate_blue1:#836fff; - --slate_gray:#708090; - --slate_grey:#708090; - --light_blue4:#68838b; - --light_slate_blue:#8470ff; - --bisque4:#8b7d6b; - --olive_drab:#6b8e23; - --dark_slate_gray4:#528b8b; - --gray50:#7f7f7f; - --grey50:#7f7f7f; - --wheat4:#8b7e66; - --medium_purple:#9370db; - --dark_olive_green4:#6e8b3d; - --light_goldenrod4:#8b814c; - --thistle4:#8b7b8b; - --dodger_blue1:#1e90ff; - --dodger_blue:#1e90ff; - --misty_rose4:#8b7d7b; - --pale_violet_red3:#cd6889; - --indian_red2:#ee6363; - --yellow4:#8b8b00; - --dark_sea_green4:#698b69; - --medium_orchid2:#d15fee; - --salmon3:#cd7054; - --gray51:#828282; - --grey51:#828282; - --tomato1:#ff6347; - --tomato:#ff6347; - --khaki4:#8b864e; - --pale_turquoise4:#668b8b; - --antique_white4:#8b8378; - --coral2:#ee6a50; - --lavender_blush4:#8b8386; - --gray52:#858585; - --grey52:#858585; - --orchid3:#cd69c9; - --light_slate_gray:#778899; - --light_slate_grey:#778899; - --seashell4:#8b8682; - --dark_orange2:#ee7600; - --gray53:#878787; - --grey53:#878787; - --light_cyan4:#7a8b8b; - --cornsilk4:#8b8878; - --lemon_chiffon4:#8b8970; - --dark_goldenrod:#b8860b; - --honeydew4:#838b83; - --pale_violet_red:#db7093; - --azure4:#838b8b; - --chocolate2:#ee7621; - --snow4:#8b8989; - --steel_blue3:#4f94cd; - --medium_purple2:#9f79ee; - --indian_red1:#ff6a6a; - --light_yellow4:#8b8b7a; - --gray54:#8a8a8a; - --grey54:#8a8a8a; - --ivory4:#8b8b83; - --hot_pink2:#ee6aa7; - --orange3:#cd8500; - --medium_orchid1:#e066ff; - --gray55:#8c8c8c; - --grey55:#8c8c8c; - --orchid:#da70d6; - --sienna2:#ee7942; - --coral1:#ff7256; - --hot_pink:#ff69b4; - --light_salmon3:#cd8162; - --gray56:#8f8f8f; - --grey56:#8f8f8f; - --peru:#cd853f; - --tan3:#cd853f; - --deep_sky_blue2:#00b2ee; - --cadet_blue:#5f9ea0; - --cornflower_blue:#6495ed; - --gray57:#919191; - --grey57:#919191; - --dark_orange1:#ff7f00; - --hot_pink1:#ff6eb4; - --light_sea_green:#20b2aa; - --green3:#00cd00; - --chocolate1:#ff7f24; - --medium_purple1:#ab82ff; - --gray58:#949494; - --grey58:#949494; - --pale_violet_red2:#ee799f; - --medium_sea_green:#3cb371; - --gray59:#969696; - --grey59:#969696; - --salmon2:#ee8262; - --coral:#ff7f50; - --dark_goldenrod3:#cd950c; - --light_coral:#f08080; - --sienna1:#ff8247; - --rosy_brown:#bc8f8f; - --salmon:#fa8072; - --gray60:#999999; - --grey60:#999999; - --spring_green3:#00cd66; - --dark_orange:#ff8c00; - --light_pink3:#cd8c95; - --orchid2:#ee7ae9; - --deep_sky_blue1:#00bfff; - --deep_sky_blue:#00bfff; - --turquoise3:#00c5cd; - --gray61:#9c9c9c; - --grey61:#9c9c9c; - --sky_blue3:#6ca6cd; - --goldenrod3:#cd9b1d; - --gray62:#9e9e9e; - --grey62:#9e9e9e; - --pink3:#cd919e; - --pale_violet_red1:#ff82ab; - --steel_blue2:#5cacee; - --orange2:#ee9a00; - --violet:#ee82ee; - --lime_green:#32cd32; - --gray63:#a1a1a1; - --grey63:#a1a1a1; - --cyan3:#00cdcd; - --salmon1:#ff8c69; - --dark_turquoise:#00ced1; - --gray64:#a3a3a3; - --grey64:#a3a3a3; - --light_salmon2:#ee9572; - --dark_salmon:#e9967a; - --rosy_brown3:#cd9b9b; - --plum3:#cd96cd; - --orchid1:#ff83fa; - --gray65:#a6a6a6; - --grey65:#a6a6a6; - --tan2:#ee9a49; - --goldenrod:#daa520; - --gold3:#cdad00; - --gray66:#a8a8a8; - --grey66:#a8a8a8; - --chartreuse3:#66cd00; - --dark_gray:#a9a9a9; - --dark_grey:#a9a9a9; - --sea_green3:#43cd80; - --green2:#00ee00; - --gray67:#ababab; - --grey67:#ababab; - --steel_blue1:#63b8ff; - --orange1:#ffa500; - --orange:#ffa500; - --gray68:#adadad; - --grey68:#adadad; - --burlywood3:#cdaa7d; - --light_sky_blue3:#8db6cd; - --dark_sea_green:#8fbc8f; - --dark_goldenrod2:#eead0e; - --gray69:#b0b0b0; - --grey69:#b0b0b0; - --sandy_brown:#f4a460; - --plum:#dda0dd; - --light_salmon1:#ffa07a; - --light_salmon:#ffa07a; - --tan1:#ffa54f; - --light_steel_blue3:#a2b5cd; - --spring_green2:#00ee76; - --slate_gray3:#9fb6cd; - --dark_khaki:#bdb76b; - --light_pink2:#eea2ad; - --gray70:#b3b3b3; - --grey70:#b3b3b3; - --peach_puff3:#cdaf95; - --medium_turquoise:#48d1cc; - --medium_aquamarine:#66cdaa; - --aquamarine3:#66cdaa; - --turquoise2:#00e5ee; - --gray71:#b5b5b5; - --grey71:#b5b5b5; - --sky_blue2:#7ec0ee; - --cadet_blue3:#7ac5cd; - --navajo_white3:#cdb38b; - --goldenrod2:#eeb422; - --pale_green3:#7ccd7c; - --green1:#00ff00; - --green:#00ff00; - --olive_drab3:#9acd32; - --yellow_green:#9acd32; - --tan:#d2b48c; - --gray72:#b8b8b8; - --grey72:#b8b8b8; - --pink2:#eea9b8; - --light_blue3:#9ac0cd; - --bisque3:#cdb79e; - --gray73:#bababa; - --grey73:#bababa; - --dark_slate_gray3:#79cdcd; - --cyan2:#00eeee; - --wheat3:#cdba96; - --misty_rose3:#cdb7b5; - --dark_olive_green3:#a2cd5a; - --light_goldenrod3:#cdbe70; - --dark_goldenrod1:#ffb90f; - --thistle3:#cdb5cd; - --burlywood:#deb887; - --turquoise:#40e0d0; - --gray74:#bdbdbd; - --grey74:#bdbdbd; - --medium_spring_green:#00fa9a; - --gray:#bebebe; - --grey:#bebebe; - --yellow3:#cdcd00; - --dark_sea_green3:#9bcd9b; - --gray75:#bfbfbf; - --grey75:#bfbfbf; - --spring_green1:#00ff7f; - --spring_green:#00ff7f; - --light_pink1:#ffaeb9; - --plum2:#eeaeee; - --rosy_brown2:#eeb4b4; - --sky_blue:#87ceeb; - --pale_turquoise3:#96cdcd; - --khaki3:#cdc673; - --antique_white3:#cdc0b0; - --light_steel_blue:#b0c4de; - --turquoise1:#00f5ff; - --gray76:#c2c2c2; - --grey76:#c2c2c2; - --light_sky_blue:#87cefa; - --gold2:#eec900; - --sky_blue1:#87ceff; - --goldenrod1:#ffc125; - --chartreuse2:#76ee00; - --lavender_blush3:#cdc1c5; - --gray77:#c4c4c4; - --grey77:#c4c4c4; - --sea_green2:#4eee94; - --pink1:#ffb5c5; - --thistle:#d8bfd8; - --seashell3:#cdc5bf; - --light_pink:#ffb6c1; - --gray78:#c7c7c7; - --grey78:#c7c7c7; - --lemon_chiffon3:#cdc9a5; - --cornsilk3:#cdc8b1; - --light_cyan3:#b4cdcd; - --cyan1:#00ffff; - --cyan:#00ffff; - --gray79:#c9c9c9; - --grey79:#c9c9c9; - --honeydew3:#c1cdc1; - --snow3:#cdc9c9; - --burlywood2:#eec591; - --azure3:#c1cdcd; - --light_sky_blue2:#a4d3ee; - --light_yellow3:#cdcdb4; - --gray80:#cccccc; - --grey80:#cccccc; - --ivory3:#cdcdc1; - --rosy_brown1:#ffc1c1; - --pink:#ffc0cb; - --plum1:#ffbbff; - --lawn_green:#7cfc00; - --gray81:#cfcfcf; - --grey81:#cfcfcf; - --light_steel_blue2:#bcd2ee; - --slate_gray2:#b9d3ee; - --light_blue:#add8e6; - --gold1:#ffd700; - --gold:#ffd700; - --peach_puff2:#eecbad; - --gray82:#d1d1d1; - --grey82:#d1d1d1; - --chartreuse1:#7fff00; - --chartreuse:#7fff00; - --aquamarine2:#76eec6; - --navajo_white2:#eecfa1; - --light_gray:#d3d3d3; - --light_grey:#d3d3d3; - --cadet_blue2:#8ee5ee; - --light_green:#90ee90; - --pale_green2:#90ee90; - --sea_green1:#54ff9f; - --gray83:#d4d4d4; - --grey83:#d4d4d4; - --olive_drab2:#b3ee3a; - --gray84:#d6d6d6; - --grey84:#d6d6d6; - --powder_blue:#b0e0e6; - --light_blue2:#b2dfee; - --bisque2:#eed5b7; - --burlywood1:#ffd39b; - --gray85:#d9d9d9; - --grey85:#d9d9d9; - --light_goldenrod2:#eedc82; - --dark_slate_gray2:#8deeee; - --light_sky_blue1:#b0e2ff; - --wheat2:#eed8ae; - --dark_olive_green2:#bcee68; - --thistle2:#eed2ee; - --light_goldenrod:#eedd82; - --misty_rose2:#eed5d2; - --gray86:#dbdbdb; - --grey86:#dbdbdb; - --gainsboro:#dcdcdc; - --yellow2:#eeee00; - --dark_sea_green2:#b4eeb4; - --gray87:#dedede; - --grey87:#dedede; - --slate_gray1:#c6e2ff; - --light_steel_blue1:#cae1ff; - --green_yellow:#adff2f; - --pale_green:#98fb98; - --peach_puff1:#ffdab9; - --peach_puff:#ffdab9; - --wheat:#f5deb3; - --gray88:#e0e0e0; - --grey88:#e0e0e0; - --pale_turquoise2:#aeeeee; - --pale_turquoise:#afeeee; - --aquamarine1:#7fffd4; - --aquamarine:#7fffd4; - --khaki2:#eee685; - --antique_white2:#eedfcc; - --navajo_white1:#ffdead; - --navajo_white:#ffdead; - --khaki:#f0e68c; - --cadet_blue1:#98f5ff; - --pale_green1:#9aff9a; - --gray89:#e3e3e3; - --grey89:#e3e3e3; - --lavender_blush2:#eee0e5; - --olive_drab1:#c0ff3e; - --pale_goldenrod:#eee8aa; - --gray90:#e5e5e5; - --grey90:#e5e5e5; - --light_blue1:#bfefff; - --moccasin:#ffe4b5; - --seashell2:#eee5de; - --lemon_chiffon2:#eee9bf; - --cornsilk2:#eee8cd; - --bisque1:#ffe4c4; - --bisque:#ffe4c4; - --lavender:#e6e6fa; - --light_cyan2:#d1eeee; - --gray91:#e8e8e8; - --grey91:#e8e8e8; - --wheat1:#ffe7ba; - --dark_slate_gray1:#97ffff; - --light_goldenrod1:#ffec8b; - --dark_olive_green1:#caff70; - --misty_rose1:#ffe4e1; - --misty_rose:#ffe4e1; - --thistle1:#ffe1ff; - --honeydew2:#e0eee0; - --snow2:#eee9e9; - --gray92:#ebebeb; - --grey92:#ebebeb; - --azure2:#e0eeee; - --light_yellow2:#eeeed1; - --yellow1:#ffff00; - --yellow:#ffff00; - --antique_white:#faebd7; - --ivory2:#eeeee0; - --gray93:#ededed; - --grey93:#ededed; - --blanched_almond:#ffebcd; - --dark_sea_green1:#c1ffc1; - --gray94:#f0f0f0; - --grey94:#f0f0f0; - --khaki1:#fff68f; - --papaya_whip:#ffefd5; - --pale_turquoise1:#bbffff; - --antique_white1:#ffefdb; - --linen:#faf0e6; - --gray95:#f2f2f2; - --grey95:#f2f2f2; - --beige:#f5f5dc; - --lavender_blush1:#fff0f5; - --lavender_blush:#fff0f5; - --white_smoke:#f5f5f5; - --gray96:#f5f5f5; - --grey96:#f5f5f5; - --old_lace:#fdf5e6; - --seashell1:#fff5ee; - --seashell:#fff5ee; - --alice_blue:#f0f8ff; - --gray97:#f7f7f7; - --grey97:#f7f7f7; - --light_goldenrod_yellow:#fafad2; - --cornsilk1:#fff8dc; - --cornsilk:#fff8dc; - --lemon_chiffon1:#fffacd; - --lemon_chiffon:#fffacd; - --light_cyan1:#e0ffff; - --light_cyan:#e0ffff; - --ghost_white:#f8f8ff; - --gray98:#fafafa; - --grey98:#fafafa; - --floral_white:#fffaf0; - --honeydew1:#f0fff0; - --honeydew:#f0fff0; - --snow1:#fffafa; - --snow:#fffafa; - --azure1:#f0ffff; - --azure:#f0ffff; - --gray99:#fcfcfc; - --grey99:#fcfcfc; - --mint_cream:#f5fffa; - --light_yellow1:#ffffe0; - --light_yellow:#ffffe0; - --ivory1:#fffff0; - --ivory:#fffff0; - --gray100:#ffffff; - --grey100:#ffffff; - --white:#ffffff; - - --kde_bg:#4377a2; -} diff --git a/css/terminal.css b/css/terminal.css @@ -1,165 +0,0 @@ -@import './rgb.css'; -@import './main.css'; - -/* unvisited link */ -a:link { - color: var(--dodger_blue4); - text-shadow: 0 0 4px var(--dodger_blue4); -} - -/* visited link */ -a:visited { - color: var(--dark_orchid2); - text-shadow: 0 0 4px var(--dark_orchid2); -} - -/* mouse over link */ -a:hover { - color: var(--green2); - text-shadow: 0 0 4px var(--green2); -} - -/* selected link */ -a:active { - color: var(--dodger_blue4); - text-shadow: 0 0 4px var(--dodger_blue4); -} - -#main-page-title { - margin: 0 auto; - padding: 0; - white-space: pre-wrap; - color: var(--grey); -} - -.topl:hover { - box-shadow: 0 0 0.2em 0.2em #0ff; -} - -h4 { - padding: 0; - margin: 0; - margin-top: 0; - color: white; - font-color: white; - font-family: "Cantarell", Sans-Serif; - font-size: 0.8em; -} - -#taskbar { - width: 100%; -} - -#task-meta { - width: 75%; - padding: 0; - margin: auto; - margin-top: auto; - background-color: rgba(200,200,200,0.2); - border: 0.1em solid white; - text-align: center; -} - -#taskbar div { - display: inline-block; - zoom: 1; - width: 19%; - text-align:center; - margin: auto; - margin-top: auto; - margin-bottom: 5%; - padding: 0; -} - - - -#task-meta hr { - /* Permalink - use to edit and share this gradient: https://colorzilla.com/gradient-editor/#ffffff+0,f3f3f3+50,ededed+51,ffffff+100;White+Gloss+%232 */ - background: #ffffff; /* Old browsers */ - background: -moz-linear-gradient(top, #ffffff 0%, #f3f3f3 50%, #ededed 51%, #ffffff 100%); /* FF3.6-15 */ - background: -webkit-linear-gradient(top, #ffffff 0%,#f3f3f3 50%,#ededed 51%,#ffffff 100%); /* Chrome10-25,Safari5.1-6 */ - background: linear-gradient(to bottom, #ffffff 0%,#f3f3f3 50%,#ededed 51%,#ffffff 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#ffffff',GradientType=0 ); /* IE6-9 */ - -} - -.taskimg { - width: 40%; - height: 40%; - transition: transform 0.3s; -} - -.taskimg:hover { - transform: scale(1.5); -} - -.twin { - border: 1.5em solid transparent; - border-image: url(../res/2008.png) 19 12 round; - padding: 0; - /* positioning */ - margin: 0 auto; - margin-top: 75px; - width: 75%; - background-color: rgba(0, 0, 0, 0.85); - -} - -.tcontent { - margin: 0 auto; - padding: 0; -} - -.twin p { - margin: 0 auto; - padding: 0; - white-space: pre-wrap; - color: var(--white); - text-shadow: 0 0 4px var(--white); -} - -.prompt1 { - color: var(--bisque4); - text-shadow: 0 0 4px var(--bisque4); -} - -.prompt2 { - color: var(--blue); - text-shadow: 0 0 4px var(--blue); -} - -.prompt3 { - color: var(--yellow); - text-shadow: 0 0 4px var(--yellow); -} - -.prompt4 { - font-weight: bold; - text-shadow: 0 0 4px var(--white); -} - -h2 { - color: var(--spring_green); - font-size: 26pt; -} - -body { - background-color: #2d6189; - /*background-image: url('../res/back.jpg');*/ - background-repeat: no-repeat; /* Do not repeat the image */ - background-size: cover; /* Resize the background image to cover the entire container */ - background-size: cover; - background-repeat: no-repeat; - font-family: "Hasklig", "Inconsolata", "Courier New", monospace; - font-size: 1.1em; - -webkit-font-smoothing : none; - -moz-font-smoothing: never; -} - -.fttr { - margin-top: auto; - margin: auto; - margin-top: 75px; - width: 75%; -} - diff --git a/index.org b/index.org @@ -1,111 +0,0 @@ -#+options: ':nil *:t -:t ::t <:t H:3 \n:nil ^:{} arch:headline -#+options: author:t broken-links:nil c:nil creator:nil -#+options: d:(not "LOGBOOK") date:t e:t email:nil f:t inline:t num:t -#+options: p:nil pri:nil prop:nil stat:t tags:t tasks:t tex:t -#+options: timestamp:t title:nil toc:t todo:t |:t -#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="css/terminal.css" /> -#+HTML_HEAD: <script defer src="scripts/main.js"></script> -#+HTML_HEAD: <link rel="shortcut icon" type="image/x-icon" href="res/favicon-32x32.ico"> -#+language: en -#+select_tags: export -#+exclude_tags: noexport -#+creator: Emacs 27.1 (Org mode 9.3) -#+options: html-link-use-abs-url:nil -#+options: html-scripts:nil html-style:nil -#+options: html5-fancy:nil tex:t -#+html_doctype: xhtml-strict -#+html_container: div -#+description: -#+keywords: -#+html_link_home: -#+html_link_up: -#+html_mathjax: -#+html_head: -#+html_head_extra: -#+subtitle: -#+infojs_opt: -#+creator: <a href="https://www.gnu.org/software/emacs/">Emacs</a> 27.1 (<a href="https://orgmode.org">Org</a> mode 9.3) -#+latex_header: - -#+title: Ryan's Homepage -#+date: <2021-02-10 Wed> -#+author: Ryan Jeffrey -#+email: ryan@ryanmj.xyz - -__PROMPT__ cat ~/intro.txt - -#+BEGIN_EXPORT html - -<pre id="main-page-title"> - - ____ _ -| _ \ _ _ __ _ _ __ ( )___ -| |_) | | | |/ _` | '_ \|// __| -| _ <| |_| | (_| | | | | \__ \ -|_| \_\\__, |\__,_|_| |_| |___/ - |___/ - _ _ -| | | | ___ _ __ ___ ___ _ __ __ _ __ _ ___ -| |_| |/ _ \| '_ ` _ \ / _ \ '_ \ / _` |/ _` |/ _ \ -| _ | (_) | | | | | | __/ |_) | (_| | (_| | __/ -|_| |_|\___/|_| |_| |_|\___| .__/ \__,_|\__, |\___| - |_| |___/ -</pre> - -#+END_EXPORT - -__PROMPT__ ls -lh - -<!--LS HERE--> -#+INCLUDE: "sitemap.org" :lines "3-" - -__PROMPT__ cat reason.txt - -#+BEGIN_EXPORT html - -<!-- - _____ _ ___ _ _ _ _ -|_ _| |__ ___ |_ _|_ __ __| |_ _ ___| |_ _ __(_) __ _| | - | | | '_ \ / _ \ | || '_ \ / _` | | | / __| __| '__| |/ _` | | - | | | | | | __/ | || | | | (_| | |_| \__ \ |_| | | | (_| | | - |_| |_| |_|\___| |___|_| |_|\__,_|\__,_|___/\__|_| |_|\__,_|_| - - ____ _ _ _ _ -| _ \ _____ _____ | |_ _| |_(_) ___ _ __ __ _ _ __ __| | -| |_) / _ \ \ / / _ \| | | | | __| |/ _ \| '_ \ / _` | '_ \ / _` | -| _ < __/\ V / (_) | | |_| | |_| | (_) | | | | | (_| | | | | (_| | -|_| \_\___| \_/ \___/|_|\__,_|\__|_|\___/|_| |_| \__,_|_| |_|\__,_| - - _ _ -(_) |_ ___ ___ ___ _ __ ___ ___ __ _ _ _ ___ _ __ ___ ___ ___ -| | __/ __| / __/ _ \| '_ \/ __|/ _ \/ _` | | | |/ _ \ '_ \ / __/ _ \/ __| -| | |_\__ \ | (_| (_) | | | \__ \ __/ (_| | |_| | __/ | | | (_| __/\__ \ -|_|\__|___/ \___\___/|_| |_|___/\___|\__, |\__,_|\___|_| |_|\___\___||___/ - |_| - _ _ -| |__ __ ___ _____ | |__ ___ ___ _ __ __ _ -| '_ \ / _` \ \ / / _ \ | '_ \ / _ \/ _ \ '_ \ / _` | -| | | | (_| |\ V / __/ | |_) | __/ __/ | | | | (_| | -|_| |_|\__,_| \_/ \___| |_.__/ \___|\___|_| |_| \__,_| - - _ _ _ __ _ _ - __| (_)___ __ _ ___| |_ ___ _ __ / _| ___ _ __ | |_| |__ ___ - / _` | / __|/ _` / __| __/ _ \ '__| | |_ / _ \| '__| | __| '_ \ / _ \ -| (_| | \__ \ (_| \__ \ || __/ | | _| (_) | | | |_| | | | __/ - \__,_|_|___/\__,_|___/\__\___|_| |_| \___/|_| \__|_| |_|\___| - - _ -| |__ _ _ _ __ ___ __ _ _ __ _ __ __ _ ___ ___ -| '_ \| | | | '_ ` _ \ / _` | '_ \ | '__/ _` |/ __/ _ \ -| | | | |_| | | | | | | (_| | | | | | | | (_| | (_| __/_ -|_| |_|\__,_|_| |_| |_|\__,_|_| |_| |_| \__,_|\___\___(_) ---> -#+END_EXPORT - -This site is a celebration of old computers and technology (or, what is old and nostalgic to me). Everything here is designed to look like a Linux desktop from between the years 2008-2012. That was the last time you could still feel 90's era optimism about technology (or the future in general), and the first time I used Linux (my father started me on Ubuntu 08.04 when I was 10). - -In current year it's impossible to feel anything but disgust and disappointment over the state of technology. Social media has enabled conformism in a way never before thought possible. Every electronic device is a government surveillance machine. Unix is _still_ using X11. Perhaps the Vi guy was right [[https://www.wired.com/2000/04/joy-2/][to go full AnPrim]]. - -But this site at www.ryanmj.xyz _is not_ about that. Instead, this is a place to LARP and pretend it's still 2008. It is a place where we can live in a world before Jack Dorsey literally ruined everything. - -[[https://openlibrary.org/works/OL2286765W/Atomised?edition=atomised00houe][This website is dedicated to mankind.]] diff --git a/package-lock.json b/package-lock.json @@ -0,0 +1,1156 @@ +{ + "name": "site", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "dependencies": { + "express": "^4.17.2", + "express-handlebars": "^6.0.2", + "handlebars": "^4.7.7" + } + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/body-parser": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", + "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", + "dependencies": { + "bytes": "3.1.1", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.9.6", + "raw-body": "2.4.2", + "type-is": "~1.6.18" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/bytes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", + "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==", + "dependencies": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.4.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.9.6", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express-handlebars": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/express-handlebars/-/express-handlebars-6.0.2.tgz", + "integrity": "sha512-PXNT4oDHIDbg0/QBXPwf2laTi+eqErEJ3Ldc7Ky6WHpr7xJMoltsnPM7lScjN6sWZWaIPNdDYJvV+6P9cnv1pg==", + "dependencies": { + "glob": "^7.2.0", + "graceful-fs": "^4.2.8", + "handlebars": "^4.7.7" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dependencies": { + "mime-db": "1.51.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", + "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==", + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", + "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", + "dependencies": { + "bytes": "3.1.1", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/send": { + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "1.8.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/uglify-js": { + "version": "3.14.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.5.tgz", + "integrity": "sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ==", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + } + }, + "dependencies": { + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "body-parser": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", + "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", + "requires": { + "bytes": "3.1.1", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.9.6", + "raw-body": "2.4.2", + "type-is": "~1.6.18" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "bytes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "express": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", + "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.4.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.9.6", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "express-handlebars": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/express-handlebars/-/express-handlebars-6.0.2.tgz", + "integrity": "sha512-PXNT4oDHIDbg0/QBXPwf2laTi+eqErEJ3Ldc7Ky6WHpr7xJMoltsnPM7lScjN6sWZWaIPNdDYJvV+6P9cnv1pg==", + "requires": { + "glob": "^7.2.0", + "graceful-fs": "^4.2.8", + "handlebars": "^4.7.7" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + }, + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" + }, + "mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "requires": { + "mime-db": "1.51.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "qs": { + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", + "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", + "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", + "requires": { + "bytes": "3.1.1", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "send": { + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "1.8.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "serve-static": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.2" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "uglify-js": { + "version": "3.14.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.5.tgz", + "integrity": "sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ==", + "optional": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + } + } +} diff --git a/package.json b/package.json @@ -0,0 +1,7 @@ +{ + "dependencies": { + "express": "^4.17.2", + "express-handlebars": "^6.0.2", + "handlebars": "^4.7.7" + } +} diff --git a/posts/index.org b/posts/index.org @@ -1,36 +0,0 @@ -#+options: ':nil *:t -:t ::t <:t H:3 \n:nil ^:{} arch:headline -#+options: author:t broken-links:nil c:nil creator:nil -#+options: d:(not "LOGBOOK") date:t e:t email:nil f:t inline:t num:t -#+options: p:nil pri:nil prop:nil stat:t tags:t tasks:t tex:t -#+options: timestamp:t title:nil toc:t todo:t |:t -#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="../css/terminal.css" /> -#+HTML_HEAD: <script src="../scripts/main.js" integrity="sha384-__SHASUM__"></script> -#+HTML_HEAD: <link rel="shortcut icon" type="image/x-icon" href="/res/favicon.ico"> -#+language: en -#+select_tags: export -#+exclude_tags: noexport -#+creator: Emacs 27.1 (Org mode 9.3) -#+options: html-link-use-abs-url:nil -#+options: html-scripts:nil html-style:nil -#+options: html5-fancy:nil tex:t -#+html_doctype: xhtml-strict -#+html_container: div -#+description: -#+keywords: -#+html_link_home: -#+html_link_up: -#+html_mathjax: -#+html_head: -#+html_head_extra: -#+subtitle: -#+infojs_opt: -#+creator: <a href="https://www.gnu.org/software/emacs/">Emacs</a> 27.1 (<a href="https://orgmode.org">Org</a> mode 9.3) -#+latex_header: - -#+title: Ryan's Blog -#+date: <2021-02-10 Wed> -#+author: Ryan Jeffrey -#+email: ryan@ryanmj.xyz - - -#+INCLUDE: "sitemap.org" :lines "3-" diff --git a/posts/mailserver-addendum.org b/posts/mailserver-addendum.org @@ -1,169 +0,0 @@ -#+options: ':nil *:t -:t ::t <:t H:3 \n:nil ^:{} arch:headline -#+options: author:t broken-links:nil c:nil creator:nil -#+options: d:(not "LOGBOOK") date:t e:t email:nil f:t inline:t num:t -#+options: p:nil pri:nil prop:nil stat:t tags:t tasks:t tex:t -#+options: timestamp:t title:nil toc:t todo:t |:t -#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="../css/terminal.css" /> -#+HTML_HEAD: <script src="../scripts/main.js" integrity="sha384-__SHASUM__"></script> -#+HTML_HEAD: <link rel="shortcut icon" type="image/x-icon" href="/res/favicon.ico"> -#+language: en -#+select_tags: export -#+exclude_tags: noexport -#+creator: Emacs 27.1 (Org mode 9.3) -#+options: html-link-use-abs-url:nil -#+options: html-scripts:nil html-style:nil -#+options: html5-fancy:nil tex:t -#+html_doctype: xhtml-strict -#+html_container: div -#+description: -#+keywords: -#+html_link_home: -#+html_link_up: -#+html_mathjax: -#+html_head: -#+html_head_extra: -#+subtitle: -#+infojs_opt: -#+creator: <a href="https://www.gnu.org/software/emacs/">Emacs</a> 27.1 (<a href="https://orgmode.org">Org</a> mode 9.3) -#+latex_header: -#+options: toc:nil - - -#+TITLE: In Addition to Luke Smith's Mail Configuration Video -#+AUTHOR: Ryan Jeffrey -#+EMAIL: ryan@ryanmj.xyz -#+DATE: <2020-09-16 Wed> -#+OPTIONS: num:nil - -__PROMPT__ cat posts/mailserver-addendum.html - -I used [[https://youtu.be/9zP7qooM4pY][Luke Smith's video on setting up an email server]], and although it got me 90% of the way there, I encountered a couple of snags that he was able to avoid for whatever reason. - - -* Port 25 -By default the well-known port 25 (SMTP) is blocked on Vultr. They do this to minimize the amount of spam that comes from their servers. You can verify that this is the problem by: - -#+begin_src shell -journalctl | grep 'timed out' -i -#+end_src - -If the output has the number `25' it is safe to assume that this is the problem (I fixed this problem months ago, so I don't have any sample output to show you. Sorry!). You can fix it by opening up a ticket with Vultr's support, simply ask them to unblock the port. - -* Reverse DNS -I just attempted to submit a patch to the GNU project today only to have my mail rejected because I had not set up a reverse DNS entry with Vultr. It's not uncommon for mailservers to reject your mail for this. To set up reverse DNS: - -** ipv4 -- Go to products->instances->your-server-settings->ipv4 and simply add your domain name (like ~ryanmj.xyz~) on the column that says "reverse DNS". -** ipv6 -- Go to the ipv6 settings -- Copy the address under the "network" column and take note of the "netmask" number. -- run: -#+begin_src shell -sipcalc network_addr/netmask_number -#+end_src - -Replace network_addr with your copied address, and replace netmask_number with the number under "netmask". - -It will give you something that looks like this: -#+begin_src -[ryan@Springfield ~]$ sipcalc 2001:19f0:5:3b2d::/64 --[ipv6 : 2001:19f0:5:3b2d::/64] - 0 - -[IPV6 INFO] -Expanded Address - 2001:19f0:0005:3b2d:0000:0000:0000:0000 -Compressed address - 2001:19f0:5:3b2d:: -Subnet prefix (masked) - 2001:19f0:5:3b2d:0:0:0:0/64 -Address ID (masked) - 0:0:0:0:0:0:0:0/64 -Prefix address - ffff:ffff:ffff:ffff:0:0:0:0 -Prefix length - 64 -Address type - Aggregatable Global Unicast Addresses -Network range - 2001:19f0:0005:3b2d:0000:0000:0000:0000 - - 2001:19f0:0005:3b2d:ffff:ffff:ffff:ffff - -- -#+end_src - -Copy the ipv6 address on the top row of "Network range" and place a colon, then replace the numbers at the end with a number in the appropiate range. For example, my chosen address is: ~2001:19f0:5:3b2d::2~. - -- Add a reverse DNS entry in Vultr with your chosen ipv6 as the ip address and your domain name as the entry. - - -* fail2ban -While trying to fix a tiny problem with by server I encountered dozens of lines like this in ~journalctl~: - -#+begin_src -Sep 15 11:36:54 underground postfix/smtps/smtpd[32284]: warning: unknown[212.70.149.68]: SASL LOGIN authentication failed: UGFzc3dvcmQ6 -Sep 15 11:37:00 underground postfix/smtps/smtpd[32284]: lost connection after AUTH from unknown[212.70.149.68] -#+end_src - -These logs would come in every 2 minutes, it appears that someone is using a script to hack the server. - -To fix this, I use ~fail2ban~, a service that puts IP's associated with too many failed login attempts into a jail (essentially a timeout area). It can also block IP's completely. - -Once you install the package: - -#+begin_src shell - cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local -#+end_src - -And apply this patch to ~/etc/fail2ban/jail.local~: - -#+begin_src diff ---- /etc/fail2ban/jail.conf 2018-01-18 13:49:01.000000000 +0000 -+++ /etc/fail2ban/jail.local 2020-09-16 00:10:44.888473433 +0000 -@@ -51,7 +51,7 @@ - # "ignoreip" can be a list of IP addresses, CIDR masks or DNS hosts. Fail2ban - # will not ban a host which matches an address in this list. Several addresses - # can be defined using space (and/or comma) separator. --#ignoreip = 127.0.0.1/8 ::1 -+ignoreip = 127.0.0.1/8 ::1 - - # External command that will take an tagged arguments to ignore, e.g. <ip>, - # and return true if the IP is to be ignored. False otherwise. -@@ -60,7 +60,7 @@ - ignorecommand = - - # "bantime" is the number of seconds that a host is banned. --bantime = 10m -+bantime = 1h - - # A host is banned if it has generated "maxretry" during the last "findtime" - # seconds. -@@ -244,7 +244,8 @@ - port = ssh - logpath = %(sshd_log)s - backend = %(sshd_backend)s -- -+maxretry = 3 -+enable = true - - [dropbear] - -@@ -541,6 +542,7 @@ - port = smtp,465,submission - logpath = %(postfix_log)s - backend = %(postfix_backend)s -+enabled = true - - - [postfix-rbl] -@@ -638,7 +640,7 @@ - # "warn" level but overall at the smaller filesize. - logpath = %(postfix_log)s - backend = %(postfix_backend)s -- -+enabled = true - - [perdition] - -#+end_src - -Then, start the service: - -#+begin_src shell -systemctl enable fail2ban -systemctl start fail2ban -#+end_src - - -Your mailserver should now be good to go. Happy mailing! diff --git a/posts/sitemap.org b/posts/sitemap.org @@ -1,6 +0,0 @@ -#+TITLE: Blog Map - - -#+begin_archive -@@html:<p>-rw-r--r-- 1 ryan ryan @@ 6.1K [[file:mailserver-addendum.org][In Addition to Luke Smith's Mail Configuration Video]] @@html:</p>@@ -#+end_archive diff --git a/posts/views/postamble-e.html b/posts/views/postamble-e.html @@ -1,8 +0,0 @@ -</div> - -<div class="fttr"> - <a href="https://www.sxemacs.org/"> - <imp src="res/stickies/sxe.png" /> - </a> - <br/> -</div> diff --git a/posts/views/postamble-i.html b/posts/views/postamble-i.html @@ -1,24 +0,0 @@ - </div> -</div> -<div class="fttr"> - <a href="https://www.gnu.org/software/emacs/"> - <img alt="POWERED BY EMACS" src="../res/stickies/emacs.png" /> - </a> - <a href="https://www.gnu.org/licenses/gpl-3.0.en.html"> - <img alt="GPLv3" src="../res/stickies/gplv3.png" /> - </a> - <a href="https://www.sxemacs.org/"> - <img alt="POWERED BY SXEMACS" src="../res/stickies/sxe.png" /> - </a> - <a href="https://www.xemacs.org/"> - <img alt="POWERED BY XEMACS" src="../res/stickies/xe.png" /> - </a> - - <a href='https://ipv6-test.com/validate.php?url=referer'> - <img src='../res/stickies/button-ipv6-big.png' alt='ipv6 ready' title='ipv6 ready'> - </a> - - <a href="https://jigsaw.w3.org/css-validator/check/referer"> - <img src="../res/stickies/vcss.gif" alt="Valid CSS!"> - </a> -</div> diff --git a/posts/views/preamble-e.html b/posts/views/preamble-e.html @@ -1,13 +0,0 @@ -<div class="emacs"> - <div class="ebar-top"></div> - <div class="ebar"> - <p class="title-red">------</p> - <img alt="GNU EMACS" id="gnu-emacs" src="res/gnu-emacs.png"/> - <p>*Setup*</p> - - <div class="last"> - <p class="modded">Last Modified: <!--DATE--></p> - </div> - - </div> - <div class="ebar-bot"></div> diff --git a/posts/views/preamble-i.html b/posts/views/preamble-i.html @@ -1,35 +0,0 @@ -<script defer src="../scripts/site-bkgs/main.js"></script> -<div id="task-meta" class="topl"> - <h4 style="margin-left:1em; margin-top:0.5em;">Links</h4> - <hr> - - <div id="taskbar"> - <div id="home"> - <a href="../index.html"><img src="../res/user-home.png" alt="Homepage" class="taskimg"></a> - <h4>Home</h4> - </div> - - <div id="blog"> - <a href="../posts/"><img src="../res/folder-documents.png" alt="Blog" class="taskimg"></a> - <h4>Blog</h4> - </div> - - <div id="files"> - <a href="../files/"><img src="../res/ktorrent.png" alt="Files" class="taskimg"></a> - <h4>Files</h4> - </div> - - <div id="git-server"> - <a href="https://git.ryanmj.xyz"><img src="../res/folder-git.png" alt="git" class="taskimg"></a> - <h4>Git Server</h4> - </div> - - <div id="contact-me"> - <a href="mailto:ryan@ryanmj.xyz"><img alt="Email me" src="../res/kopete.png"/></a> - <h4>Contact Me</h4> - </div> - </div> -</div> - -<div class="twin topl"> - <div style="tcontent"> diff --git a/publish.el b/publish.el @@ -1,239 +0,0 @@ -;;; package --- summary Website generator. - -;;; Copyright (C) Ryan Jeffrey 2021 - -;;; Author: Ryan Jeffrey <ryan@ryanmj.xyz> -;;; Created: 2021-02-12 -;;; Keywords: website org -;;; Version: 0.1 -;;; Package-Requires: ((emacs "27.1")) -;;; URL: https://gitlab.com/Mallock/site - -;;; License: - -;; This file is part of Ryan's Homepage. -;; -;; Ryan's Homepage is free software: you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. -;; -;; Ryan's Homepage is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. -;; -;; You should have received a copy of the GNU General Public License -;; along with Ryan's Homepage. If not, see <http://www.gnu.org/licenses/>. - - -;;; Commentary: - -;; This script uses org-mode to export my site. - -;;; Code: - - -(require 'ox-publish) -(require 'ox-html) - -(setq site-dir (concat (getenv "HOME") "/src/site")) -(setq export-site "/ssh:root@ryanmj.xyz:/var/www/underground/") - -;; Get SHA checksum for org-mode js file. -(defvar js-sum1 (shell-command-to-string - "sha384sum -b scripts/main.js | awk '{ print $1 }' | xxd -r -p | base64 | tr -d '\n'") - "SHA checksum for `org-mode' js file.") - -(defun create-preamble (plist) - "Insert preamble, PLIST is list of options." - (let* ((file-name (file-name-nondirectory (plist-get plist :output-file)))) - (cond - ;;((string= file-name "index.html") - (t - (with-temp-buffer - (insert-file-contents "views/preamble-i.html") (buffer-string)))))) - ;;(t (insert-file-contents "views/preamble-e.html"))))) - -(defun create-postamble (plist) - "Insert postamble, PLIST is list of options." - (let* ((file-name (file-name-nondirectory (plist-get plist :output-file)))) - (cond - ;;((string= file-name "index.html") - (t - (with-temp-buffer - (insert-file-contents "views/postamble-i.html") (buffer-string)))))) - ;;(t (insert-file-contents "views/postamble-e.html"))))) - -;; Replace __PROMPT__ with the actual prompt -(add-hook 'org-export-before-parsing-hook #'(lambda (backend) - (goto-char (point-min)) - (while (search-forward "__PROMPT__" (point-max) t) - (kill-backward-chars (length "__PROMPT__")) - (insert "@@html:<span class=\"prompt1\">ryan</span><span class=\"prompt2\">@</span><span class=\"prompt3\">themainframe</span><span class=\"prompt4\"></span>@@")))) - - -(defun index-sitemap-entry (entry _style project) - "Create ls-like output on file ENTRY with style _STYLE and from project PROJECT." - (if (string= entry "index.org") - "" - (concat - "@@html:<p>" - (cond ; Get the prefix if the ls -l output. - ((file-symlink-p entry) "lrwxrwxrwx 1") - ((file-directory-p entry) "drwxr-xr-x 2") - (t "-rw-r--r-- 1")) - " ryan ryan " - (format "%4s " - (shell-command-to-string - (concat "find " entry " -name '*.org' -exec cat {} + | wc -c | numfmt --to=si | tr -d '\n'"))) - (shell-command-to-string (concat "ls -dl '--time-style=+%b %m %Y' " - entry - " | awk '{printf \"%s %2d %s \", $6, $7, $8} '" )) - "@@" - (format "[[file:%s]]" entry) - "@@html:</p>@@"))) - - - -(defun create-index-blogmap (title list) - "Create the sitemap for the posts/ directory. -Return sitemap using TITLE and LIST returned by `create-blogmap-entry'." - (concat "#+TITLE: " title "\n\n" - (mapconcat (lambda (li) - (format "%s" (car li))) - (seq-filter #'car (cdr list)) - "\n"))) - -;; Replace <!--LS HERE--> with ls output. -(add-hook 'org-export-before-parsing-hook #'(lambda (backend) - "Create fake ls listing." - (goto-char (point-min)) - (while (search-forward "<!--LS HERE-->" (point-max) t) - (kill-whole-line) - (insert (concat - "@@html:<p>total " - (shell-command-to-string - "find . -name '*.org' -exec cat {} + | wc -c | numfmt --to=si | tr -d '\n'") - " Words</p>@@\n"))))) - -;; Replace __SHASUM__ with the sum of the file. -(add-hook 'org-export-before-parsing-hook #'(lambda (backend) - "Create fake ls listing." - (goto-char (point-min)) - (while (search-forward "__SHASUM__" (point-max) t) - (kill-backward-chars (length "__SHASUM__")) - (insert-before-markers js-sum1)))) - - -(defun create-blogmap-entry (entry _style project) - "Create an entry for the blogmap. -One string for each ENTRY in PROJECT." - (if (string= entry "index.org") - "" - (format "@@html:<p>-rw-r--r-- 1 ryan ryan @@ %4s [[file:%s][%s]] @@html:</p>@@" - (shell-command-to-string (format "wc -c < %s | numfmt --to=si | tr -d '\n'" (org-publish--expand-file-name entry project))) - ;(format-time-string "%h %d, %Y" - ; (org-publish-find-date entry project)) - entry - (org-publish-find-title entry project)))) - -(defun create-blogmap (title list) - "Create the sitemap for the posts/ directory. -Return sitemap using TITLE and LIST returned by `create-blogmap-entry'." - (concat "#+TITLE: " title "\n\n" - "\n#+begin_archive\n" - (mapconcat (lambda (li) - (format "%s" (car li))) - (seq-filter #'car (cdr list)) - "") - "\n#+end_archive\n")) - -(defun force-main-publish () - "Force evaluation of main project." - (org-publish "main" t) - (org-publish "posts" t) - (org-publish-all)) - -;; Sets up exporting defaults for org mode. -;; "posts" are blog posts. -;; "main" is for index files like index.html, blog.html, etc. -(setq org-publish-project-alist - '(("main" - :base-directory "" - :base-extension "org" - :publishing-directory "public" - :publishing-function org-html-publish-to-html - :html-preamble create-preamble - :html-postamble create-postamble - :auto-sitemap t - :sitemap-filename "sitemap.org" - :sitemap-title nil - :sitemap-style list - :sitemap-sort-files anti-chronologically - :sitemap-format-entry index-sitemap-entry - :sitemap-function create-index-blogmap - :sitemap-sort-folders first - ;;:html-link-up "/" - ;;:html-link-home "/" - :recursive nil) - ("posts" - :base-directory "posts" - :base-extension "org" - :publishing-directory "public/posts" - :recursive t - :publishing-function org-html-publish-to-html - - :html-preamble create-preamble - :html-postamble create-postamble - - ;; Sitemap. - - :auto-sitemap t - :sitemap-filename "sitemap.org" - :sitemap-title "Blog Map" - :sitemap-style list - :sitemap-sort-files anti-chronologically - :sitemap-format-entry create-blogmap-entry - :sitemap-function create-blogmap - ) - ("misc" - :base-directory "misc" - :base-extension "org" - :publishing-directory "public/misc" - :recursive t - :publishing-function org-html-publish-to-html - :html-preamble create-preamble - :html-postamble create-postamble - :auto-sitemap nil) - ("css" - :base-directory "css/" - :base-extension "css" - :publishing-directory "public/css" - :publishing-function org-publish-attachment - :recursive nil) - ("res" - :base-directory "res/" - :publishing-directory "public/res" - :base-extension "png\\|jpg\\|gif\\|pdf\\|mp3\\|ogg\\|swf\\|otf\\|ttf\\|ico" - :recursive t - :publishing-function org-publish-attachment) - ("files" - :base-directory "files/" - :publishing-directory "public/files" - :base-extension "html\\|txt\\|org" - :recursive t - :publishing-function org-publish-attachment - :htmlized-source nil - :html-preamble nil - :html-postamble nil) - ("scripts" - :base-directory "scripts/" - :publishing-directory "public/scripts" - :base-extension "js" - :recursive t - :publishing-function org-publish-attachment) - ("all" :components ("posts" "css" "main" "res" "files" "scripts")))) - -(provide 'publish) -;;; publish.el ends here diff --git a/scripts/main.js b/scripts/main.js @@ -1,44 +0,0 @@ -/* -@licstart The following is the entire license notice for the -JavaScript code in this tag. - -Copyright (C) 2012-2020 Free Software Foundation, Inc. - -The JavaScript code in this tag is free software: you can -redistribute it and/or modify it under the terms of the GNU -General Public License (GNU GPL) as published by the Free Software -Foundation, either version 3 of the License, or (at your option) -any later version. The code is distributed WITHOUT ANY WARRANTY; -without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. - -As additional permission under GNU GPL version 3 section 7, you -may distribute non-source (e.g., minimized or compacted) forms of -that code without the copy of the GNU GPL normally required by -section 4, provided you include this license notice and a URL -through which recipients can access the Corresponding Source. - - -@licend The above is the entire license notice -for the JavaScript code in this tag. -*/ -<!--/*--><![CDATA[/*><!--*/ - function CodeHighlightOn(elem, id) - { - var target = document.getElementById(id); - if(null != target) { - elem.cacheClassElem = elem.className; - elem.cacheClassTarget = target.className; - target.className = "code-highlighted"; - elem.className = "code-highlighted"; - } - } - function CodeHighlightOff(elem, id) - { - var target = document.getElementById(id); - if(elem.cacheClassElem) - elem.className = elem.cacheClassElem; - if(elem.cacheClassTarget) - target.className = elem.cacheClassTarget; - } - diff --git a/server.js b/server.js @@ -0,0 +1,114 @@ +// Cropyright (C) Ryan Jeffrey 2022 +// A simple express server that uses handlebars. + +const path = require('path'); +const express = require('express'); +const { engine } = require('express-handlebars'); + +const fs = require('fs'); + +var app = express(); +var port = process.env.PORT || 3000; +var exphbs = require('express-handlebars'); + +function getMonthByNumber(i) { + const months = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', + 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ]; + return (i in months) ? months[i] : null; +} + +// Get the mtime in the same format that LS would. +function lsTime(timeMS) { + let fileDate = new Date(timeMS); + // If the file was updated this year then set the last column to the + // hour and minute. Else, the last column should be the year. + if(Date.now().getFullYear() != fileDate.getFullYear()) + return `${getMonthByNumber(fileDate.getMonth())} ${fileDate.getDate()} ${fileDate.getHours()}:${fileDate.getMinutes()}`; + return `${getMonthByNumber(fileDate.getMonth())} ${fileDate.getDate()} ${fileDate.getFullYear()}`; +} + +function ls(thePath) { + let result = ""; + + fs.stat(thePath, (err, stats) => { + // ls file permissions. + if(err) { + return console.error("Could not stat ", thePath, ": ", err); + } + // Convert mode to string. + let unixFilePermissions = (stats.mode & parseInt('777', 8)).toString(8); + // Unix file permission array. The mode is the index in the array. + const permStrings = ['---', '--x', '-w-', '-wx', 'r--', 'r-x', 'rw-', 'rwx']; + let permsResult = permStrings[parseInt(unixFilePermissions[0])]; + permsResult += permStrings[parseInt(unixFilePermissions[1])]; + permsResult += permStrings[parseInt(unixFilePermissions[2])]; + + let prefixChar = '-'; + if(stats.isDirectory()) { + prefixChar = 'd'; + } + + result = `${prefixChar}${permsResult} ${stats.nlink} ryan ryan ${stats.size} ${lsTime(stats.mtimeMS)} ${path.basename(thePath)}`; + }); + + return result; +} + +function lsDir(thePath) { + let lines = []; + fs.readdir(thePath, (err, files) => { + if(err) { + return console.log('Cannot scane directory ', thePath, ": ", err); + } + + files.forEach((file) => { + lines.push(ls(file)); + }); + }); + + return lines; +} + +// App config + +app.engine('handlebars', engine({ defaultLayout: 'main' })); +app.set('view engine', 'handlebars'); +app.set('views', "./views"); + +app.use(express.static(path.join(__dirname, 'public'))); +app.use(express.json()); + +// TODO maybe a system that exports org to handlebars. + +// Get the requested post +app.get('/posts/:post', (req, res, next) => { + let post = req.params.post.toLowerCase(); + if(fs.exists(post)) { + res.status(200).render('writing', { text : fs.readFile(post) }); + } + else { + // Page not found. + res.status(404).render('404'); + } +}); +// Posts index file. +app.get('/posts', (req, res, next) => { + res.status(200).render('indexWriting'); +}); +// index.html should be before 404 and after everything else + + +app.get('/', (req, res, next) => { + res.status(200).render('index', { + entries: lsDir('.'), + }); +}); + +// 404 is last. +app.get('*', (req, res) => { + res.status(404).render('404'); +}); + +app.listen(port, () => { + console.log('== Server is listening on port', port); +}); diff --git a/software.org b/software.org @@ -1,48 +0,0 @@ -#+options: ':nil *:t -:t ::t <:t H:3 \n:nil ^:{} arch:headline -#+options: author:t broken-links:nil c:nil creator:nil -#+options: d:(not "LOGBOOK") date:t e:t email:nil f:t inline:t num:t -#+options: p:nil pri:nil prop:nil stat:t tags:t tasks:t tex:t -#+options: timestamp:t title:nil toc:t todo:t |:t -#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="css/terminal.css" /> -#+HTML_HEAD: <script src="scripts/main.js" integrity="sha384-__SHASUM__"></script> -#+language: en -#+select_tags: export -#+exclude_tags: noexport -#+creator: Emacs 27.1 (Org mode 9.3) -#+options: html-link-use-abs-url:nil -#+options: html-scripts:nil html-style:nil -#+options: html5-fancy:nil tex:t -#+html_doctype: xhtml-strict -#+html_container: div -#+description: -#+keywords: -#+html_link_home: -#+html_link_up: -#+html_mathjax: -#+html_head: -#+html_head_extra: -#+subtitle: -#+infojs_opt: -#+creator: <a href="https://www.gnu.org/software/emacs/">Emacs</a> 27.1 (<a href="https://orgmode.org">Org</a> mode 9.3) -#+latex_header: - -#+title: Software I use -#+date: <2021-02-10 Wed> -#+author: Ryan Jeffrey -#+email: ryan@ryanmj.xyz - - -__PROMPT__ cat ~/config.html - -My machines all run a variant of Arch Linux (either Arch itself, or Parabola, etc.). My configuration is based around Emacs which I use as a Unix Userland replacement where I can. - -When I began learning how to use a computer I used the ~joe~ text editor. It's an excellent terminal-based editor with Wordstar keybindings. However it isn't extensible (it has no 'joescript', nothing like vimscript or elsip), this makes pretty unusable for things like HTML editing where extensibility goes a long way in terms of QoL. In late 2018 I used VIM and hated it. In May 2019 I switched to Emacs. - -The more I used Emacs the more I began to believe in its mission. The whole idea behind Emacs is that it's a Unix Userland replacement based on LISP. It ultimately fails at this because of how slow, legacy, and occasionally inflexible it is. That being said, it's an interesting idea and I'd like to see a more modern attempt at that concept some day. - -For email is ~mu4e~ and for my RSS feed I use ~elfeed~. Lately, I've been trying to ween myself off of file managers by replacing ~nemo~ with ~dired~. - -My web browser is the ~red cat shill browser~. - -My window manager is ~bspwm~ (this is the most likely thing to change), I switch window managers every six months because I'm never satisfied with them. Each window manager or desktop environment I try has its own issues with ~bspwm~ being a bit buggy and not always cooperating with other programs (especially polybar). - diff --git a/views/index.handlebars b/views/index.handlebars @@ -0,0 +1,5 @@ + + +{{#each entries}} + {{{> lsTemplate}}} +{{/each}} diff --git a/views/partials/lsTemplate.handlebars b/views/partials/lsTemplate.handlebars @@ -0,0 +1 @@ +<p>{{line}}</p> diff --git a/views/postamble-i.html b/views/postamble-i.html @@ -1,24 +0,0 @@ - </div> -</div> -<div class="fttr"> - <a href="https://www.gnu.org/software/emacs/"> - <img alt="POWERED BY EMACS" src="res/stickies/emacs.png" /> - </a> - <a href="https://www.gnu.org/licenses/gpl-3.0.en.html"> - <img alt="GPLv3" src="res/stickies/gplv3.png" /> - </a> - <a href="https://www.sxemacs.org/"> - <img alt="POWERED BY SXEMACS" src="res/stickies/sxe.png" /> - </a> - <a href="https://www.xemacs.org/"> - <img alt="POWERED BY XEMACS" src="res/stickies/xe.png" /> - </a> - - <a href='https://ipv6-test.com/validate.php?url=referer'> - <img src='res/stickies/button-ipv6-big.png' alt='ipv6 ready' title='ipv6 ready'> - </a> - - <a href="https://jigsaw.w3.org/css-validator/check/referer"> - <img src="res/stickies/vcss.gif" alt="Valid CSS!"> - </a> -</div> diff --git a/views/preamble-i.html b/views/preamble-i.html @@ -1,35 +0,0 @@ -<script defer src="scripts/site-bkgs/main.js"></script> -<div id="task-meta" class="topl"> - <h4 style="margin-left:1em; margin-top:0.5em;">Links</h4> - <hr> - - <div id="taskbar"> - <div id="home"> - <a href="index.html"><img src="res/user-home.png" alt="Homepage" class="taskimg"></a> - <h4>Home</h4> - </div> - - <div id="blog"> - <a href="posts/"><img src="res/folder-documents.png" alt="Blog" class="taskimg"></a> - <h4>Blog</h4> - </div> - - <div id="files"> - <a href="files/"><img src="res/ktorrent.png" alt="Files" class="taskimg"></a> - <h4>Files</h4> - </div> - - <div id="git-server"> - <a href="https://git.ryanmj.xyz"><img src="res/folder-git.png" alt="git" class="taskimg"></a> - <h4>Git Server</h4> - </div> - - <div id="contact-me"> - <a href="mailto:ryan@ryanmj.xyz"><img alt="Email me" src="res/kopete.png"/></a> - <h4>Contact Me</h4> - </div> - </div> -</div> - -<div class="twin topl"> - <div style="tcontent">