diff --git a/flaskr/__init__.py b/flaskr/__init__.py index f1d7568..76971ae 100644 --- a/flaskr/__init__.py +++ b/flaskr/__init__.py @@ -39,9 +39,7 @@ data = { "next_theme": { "system": "dark", "dark": "light", - "light": "contrast", - "contrast": "contrast-dark", - "contrast-dark": "system", + "light": "system", } } diff --git a/flaskr/static/f/Merriweather-Bold.woff2 b/flaskr/static/f/Merriweather-Bold.woff2 new file mode 100644 index 0000000..8a1fa70 Binary files /dev/null and b/flaskr/static/f/Merriweather-Bold.woff2 differ diff --git a/flaskr/static/f/Merriweather-BoldItalic.woff2 b/flaskr/static/f/Merriweather-BoldItalic.woff2 new file mode 100644 index 0000000..0b6aa93 Binary files /dev/null and b/flaskr/static/f/Merriweather-BoldItalic.woff2 differ diff --git a/flaskr/static/f/Merriweather-Italic.woff2 b/flaskr/static/f/Merriweather-Italic.woff2 new file mode 100644 index 0000000..9c1cb76 Binary files /dev/null and b/flaskr/static/f/Merriweather-Italic.woff2 differ diff --git a/flaskr/static/f/Merriweather-Light.woff2 b/flaskr/static/f/Merriweather-Light.woff2 new file mode 100644 index 0000000..d937827 Binary files /dev/null and b/flaskr/static/f/Merriweather-Light.woff2 differ diff --git a/flaskr/static/f/Merriweather-LightItalic.woff2 b/flaskr/static/f/Merriweather-LightItalic.woff2 new file mode 100644 index 0000000..a45d711 Binary files /dev/null and b/flaskr/static/f/Merriweather-LightItalic.woff2 differ diff --git a/flaskr/static/f/Merriweather-Regular.woff2 b/flaskr/static/f/Merriweather-Regular.woff2 new file mode 100644 index 0000000..a77afac Binary files /dev/null and b/flaskr/static/f/Merriweather-Regular.woff2 differ diff --git a/flaskr/static/f/RobotoSlab-Medium.woff2 b/flaskr/static/f/RobotoSlab-Medium.woff2 new file mode 100644 index 0000000..230d181 Binary files /dev/null and b/flaskr/static/f/RobotoSlab-Medium.woff2 differ diff --git a/flaskr/static/style.css b/flaskr/static/style.css index d4d8839..c4570c6 100644 --- a/flaskr/static/style.css +++ b/flaskr/static/style.css @@ -1,16 +1,44 @@ -@import url('https://fonts.googleapis.com/css2?family=Fira+Mono:wght@400;700&family=Lato:ital,wght@0,400;0,700;1,400;1,700&family=Roboto+Slab:wght@500&display=swap'); +@font-face { + font-family: Merriweather; + src: url(/static/f/Merriweather-Light.woff2); + font-weight: 400; +} + +@font-face { + font-family: Merriweather; + src: url(/static/f/Merriweather-LightItalic.woff2); + font-weight: 400; + font-style: italic; +} + +@font-face { + font-family: Merriweather; + src: url(/static/f/Merriweather-Bold.woff2); + font-weight: 700; +} + +@font-face { + font-family: Merriweather; + src: url(/static/f/Merriweather-BoldItalic.woff2); + font-weight: 700; + font-style: italic; +} + +@font-face { + font-family: "Roboto Slab"; + src: url(/static/f/RobotoSlab-Medium.woff2); + font-weight: 500; +} @media (prefers-color-scheme: dark) { :root.theme-system { - --bg: #242328; - --bg-intense: #141316; - --bg-faded: #373338; - --fg: #e0dedc; - --fg-faded: #9b9497; - --accent-1: #96bf59; - --accent-1-dark: #759438; - --accent-2: #789ebf; - --accent-2-dark: #52729d; + --bg: #131720; + --bg-intense: #000000; + --bg-faded: #293441; + --fg: #e6ded6; + --fg-faded: #908a81; + --accent-1: #2aca98; + --accent-1-dark: #268d78; --error: #ee6d7d; } .only-theme-light { @@ -37,15 +65,13 @@ } :root.theme-dark { - --bg: #242328; - --bg-intense: #141316; - --bg-faded: #373338; - --fg: #e0dedc; - --fg-faded: #9b9497; - --accent-1: #96bf59; - --accent-1-dark: #759438; - --accent-2: #789ebf; - --accent-2-dark: #52729d; + --bg: #131720; + --bg-intense: #000000; + --bg-faded: #293441; + --fg: #e6ded6; + --fg-faded: #908a81; + --accent-1: #2aca98; + --accent-1-dark: #268d78; --error: #ee6d7d; } @@ -57,37 +83,9 @@ --fg-faded: #989097; --accent-1: #0642c3; --accent-1-dark: #07136d; - --accent-2: #0d8101; - --accent-2-dark: #045901; --error: #a50518; } -:root.theme-contrast { - --bg: white; - --bg-intense: white; - --bg-faded: #d0d0d0; - --fg: black; - --fg-faded: #444444; - --accent-1: blue; - --accent-1-dark: darkblue; - --accent-2: blue; - --accent-2-dark: darkblue; - --error: #880000; -} - -:root.theme-contrast-dark { - --bg: black; - --bg-intense: black; - --bg-faded: #333333; - --fg: white; - --fg-faded: #cccccc; - --accent-1: #44c0ff; - --accent-1-dark: #2280bb; - --accent-2: #44c0ff; - --accent-2-dark: #2280bb; - --error: #ff8888; -} - :root.theme-special { --bg: #ffff00; --bg-intense: #ffffff; @@ -96,31 +94,29 @@ --fg-faded: #ff0000; --accent-1: #00ffff; --accent-1-dark: #0000ff; - --accent-2: #000000; - --accent-2-dark: #00ffff; - --error: #00ff88; + --error: #000000; font-family: "Comic Sans MS", cursive; } :root { color: var(--fg); - font-family: "Lato", sans-serif; - font-size: 20px; + --text-fonts: "Merriweather", "DejaVu Serif", serif; + font-family: var(--text-fonts); + font-size: 19px; font-weight: 400; - line-height: 1.5; + line-height: 1.6; --link: var(--accent-1); --link-hover: var(--accent-1-dark); --link-active: var(--accent-1-dark); --button: var(--bg-intense); --button-hover: var(--bg-faded); - --button-active: var(--accent-2-dark); + --button-active: var(--accent-1-dark); overflow-wrap: break-word; } h1, h2, h3, nav { font-family: "Roboto Slab", serif; font-weight: 500; - margin-left: 20px; margin-top: 16px; margin-bottom: 16px; } @@ -129,6 +125,8 @@ h1 { width: fit-content; margin-left: auto; margin-right: auto; + margin-top: 4px; + margin-bottom: 0px; } body { @@ -144,6 +142,15 @@ main { flex-grow: 1; } +hr { + width: 100%; +} + +section { + padding-left: 10px; + background-color: var(--bg-intense); +} + footer { text-align: center; color: var(--fg-faded); @@ -226,7 +233,7 @@ pre { padding-top: 3px; padding-bottom: 3px; padding-left: 12px; - border-left: 5px solid var(--accent-2-dark); + border-left: 5px solid var(--accent-1-dark); } button, input, select, textarea { @@ -234,7 +241,7 @@ button, input, select, textarea { background-color: var(--bg-faded); border: 2px solid var(--fg-faded); border-radius: 3px; - font-family: "Lato", sans-serif; + font-family: var(--text-fonts); font-size: 16px; } diff --git a/flaskr/templates/_base.html b/flaskr/templates/_base.html index 10ae2cf..331cbc5 100644 --- a/flaskr/templates/_base.html +++ b/flaskr/templates/_base.html @@ -23,7 +23,7 @@ {% if meta.fullscreen == True %} width: 100%; {% else %} - width: min({{ meta.pagewidth or "900px"}}, 90vw); + width: min({{ meta.pagewidth or "800px"}}, 80vw); {% endif %} } @@ -39,7 +39,7 @@ Home · Projects · Blog™ · - + {% if theme == "dark" %} @@ -48,12 +48,6 @@ {% elif theme == "light" %} Light theme - {% elif theme == "contrast" %} - - High-contrast theme - {% elif theme == "contrast-dark" %} - - Dark high-contrast theme {% elif theme == "special" %} transform="translate(0 1)" /> @@ -65,15 +59,18 @@ - - {% block title %} + {{ meta.title }} - {% endblock %} + + + {% endif %} {% block content %}{% endblock %} {% if meta.fullscreen != True %} + + {% block footer_content %}{% endblock %} diff --git a/flaskr/templates/index.html b/flaskr/templates/index.html index 089ccab..bbdbf6e 100644 --- a/flaskr/templates/index.html +++ b/flaskr/templates/index.html @@ -2,29 +2,40 @@ {% extends "/_base.html" %} {% block content %} - -Welcome! On this website you may view a multitude of content, including numerous -projects, a Blog™, and various other information contained on -this page. Enjoy. - - About -I am a person (proof of this fact is left to the reader) who has been granted an internet connection and uses -it extensively for assorted purposes. I enjoy many things, most of which involve manipulating some state -according to various sets of rules. + I am a person (proof of this fact is left to the reader) who has been granted an internet connection and uses + it extensively for assorted purposes. I enjoy many things, most of which involve manipulating some state + according to various sets of rules. -GEORGE + +Projects + + Complex Grapher - Graph complex functions online + zzcxz visualizer - Force-directed graph of zzcxz using D3.js + complexpr - A toy programming language with an interpreter written in Rust + Quectocraft - An ultra-minimalist implementation of a Minecraft server in Rust and Lua + RSS Bundler - Bundle multiple RSS feeds into one + -GEORGE is a webring of which I am a member. Use the standard-issue GEORGEbox -below to view the GEORGE homepage or access the previous and next members in the ring. + See more on the projects page and on my Forgejo instance. + +Contact + + Email: trimill012 ("at" sign) gmail (full stop) com + Discord: trimill#6898 + Forgejo: trimill + GitHub: trimill + Youtube: trimill + + +{% endblock %} + +{% block footer_content %} + {% if theme == "light" %} -{% elif theme == "contrast" %} - -{% elif theme == "contrast-dark" %} - {% elif theme == "special" %} {% elif theme == "system" %} @@ -34,27 +45,6 @@ below to view the GEORGE homepage or access the previous and next members in the {% endif %} -Other places I exist - -Email: trimill012 ("at" sign) gmail (full stop) com -Discord: trimill#6898 -Forgejo: trimill -GitHub: trimill -Youtube: trimill - - -Source code & attribution - -The source code for this website is available on my Forgejo instance and is -released under the GNU GPLv3 free and open-source license. -It is built using the Flask web framework and incorporates -icons from Open Iconic. The memetic apioform page -was not involved at all in this site's creation, yet for some reason I feel compelled to link it here. - - - - -johnvertisement diff --git a/flaskr/templates/projects.html b/flaskr/templates/projects.html index 16ed51a..f4df888 100644 --- a/flaskr/templates/projects.html +++ b/flaskr/templates/projects.html @@ -2,19 +2,82 @@ {% extends "/_base.html" %} {% block content %} -Here are some projects I have made over the past few years. +complexpr + + Complexpr is a toy programming language with an interpreter written in Rust. It is dynamically typed, with + native support for rational and complex numbers, lists and maps, and first-class functions. It features + pipeline operators (similar to Elixir's |>) to express nested function calls more cleanly. + - -{% for site in data.projects %} -{% if site.hidden != True %} - -{% if site.star == True %} -★ -{% endif %} -{{ site.title }} · {{ site.desc | safe }} - -{% endif %} -{% endfor %} - +Quectocraft + + Quectocraft is an extensible, ultra-minimalist implementation of a Minecraft server. By doing away with most + features of the vanilla server (such as world generation and interaction) it can run without consuming many system + resources. It is written primarily in Rust, but can load simple plugins written in Lua to add chat features and commands. + -{% endblock %} \ No newline at end of file +RSS Bundler + + RSS Bundler is a tool that bundles multiple RSS feeds into one. At a fixed interval it fetches content from the configured + feeds, merges them together, and stores and serves the result. RSS Bundler is written in Rust. + + +Complex grapher + + Complex grapher allows you to functions using domain coloring. + Functions are written in a custom expression language and compiled to GLSL. WebGL is then used to generate a color for each pixel. + Complex grapher also has support for iterating functions, allowing you to generate fractals such as the Mandelbrot and Julia sets. + + +zzcxz visualizer + + zzcxz visualizer displays a force-directed graph of zzcxz, a collaborative interactive + fiction project. It is written in JavaScript and uses D3.js. + + +sysh + + sysh is a shell that allows users to run Linux syscalls directly. It supports the entire set of x86_64 syscalls, as well as + several other commands to manage memory, manipulate data, and perform arithmetic. sysh is written in C, using Python to + automatically generate some code. + + +Musidl + + Musidl is a Bash script that downloads music using yt-dlp and + automatically add ID3v2 tags based on Youtube Music metadata. + + +Maze maker + + Generate random mazes based on a variety of parameters. Written in JavaScript using p5.js. + + +Unit converter + + Convert between various different units, including commonly-used ones as well as unusual or archaic ones. + + + +Fraction base converter + + Convert a fraction to its positional notation in an arbitrary base. + + +number + + Make number go up. + + +Pixel circle + + Create pixelated circles with a specified radius. + + +Stars + + Generate stars. + + + +{% endblock %}
-Welcome! On this website you may view a multitude of content, including numerous -projects, a Blog™, and various other information contained on -this page. Enjoy. -
-I am a person (proof of this fact is left to the reader) who has been granted an internet connection and uses -it extensively for assorted purposes. I enjoy many things, most of which involve manipulating some state -according to various sets of rules. + I am a person (proof of this fact is left to the reader) who has been granted an internet connection and uses + it extensively for assorted purposes. I enjoy many things, most of which involve manipulating some state + according to various sets of rules.
-GEORGE is a webring of which I am a member. Use the standard-issue GEORGEbox -below to view the GEORGE homepage or access the previous and next members in the ring. + See more on the projects page and on my Forgejo instance.
+ Email: trimill012 ("at" sign) gmail (full stop) com + Discord: trimill#6898 + Forgejo: trimill + GitHub: trimill + Youtube: trimill +
-Email: trimill012 ("at" sign) gmail (full stop) com -Discord: trimill#6898 -Forgejo: trimill -GitHub: trimill -Youtube: trimill -
-The source code for this website is available on my Forgejo instance and is -released under the GNU GPLv3 free and open-source license. -It is built using the Flask web framework and incorporates -icons from Open Iconic. The memetic apioform page -was not involved at all in this site's creation, yet for some reason I feel compelled to link it here. -
Here are some projects I have made over the past few years.
+ Complexpr is a toy programming language with an interpreter written in Rust. It is dynamically typed, with + native support for rational and complex numbers, lists and maps, and first-class functions. It features + pipeline operators (similar to Elixir's |>) to express nested function calls more cleanly. +
|>
+ Quectocraft is an extensible, ultra-minimalist implementation of a Minecraft server. By doing away with most + features of the vanilla server (such as world generation and interaction) it can run without consuming many system + resources. It is written primarily in Rust, but can load simple plugins written in Lua to add chat features and commands. +
+ RSS Bundler is a tool that bundles multiple RSS feeds into one. At a fixed interval it fetches content from the configured + feeds, merges them together, and stores and serves the result. RSS Bundler is written in Rust. +
+ Complex grapher allows you to functions using domain coloring. + Functions are written in a custom expression language and compiled to GLSL. WebGL is then used to generate a color for each pixel. + Complex grapher also has support for iterating functions, allowing you to generate fractals such as the Mandelbrot and Julia sets. +
+ zzcxz visualizer displays a force-directed graph of zzcxz, a collaborative interactive + fiction project. It is written in JavaScript and uses D3.js. +
+ sysh is a shell that allows users to run Linux syscalls directly. It supports the entire set of x86_64 syscalls, as well as + several other commands to manage memory, manipulate data, and perform arithmetic. sysh is written in C, using Python to + automatically generate some code. +
+ Musidl is a Bash script that downloads music using yt-dlp and + automatically add ID3v2 tags based on Youtube Music metadata. +
+ Generate random mazes based on a variety of parameters. Written in JavaScript using p5.js. +
+ Convert between various different units, including commonly-used ones as well as unusual or archaic ones. +
+ Convert a fraction to its positional notation in an arbitrary base. +
+ Make number go up. +
+ Create pixelated circles with a specified radius. +
+ Generate stars. +