jekyll-theme-low 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 1e1dd70696e840536c7f56a927149ce557a041a58ac157c3ffb05a6abf88492c
4
+ data.tar.gz: d4fe0e3f0f300255f9b2d103ec910a9b9c1c6fce8b4aeda5e60daafaa8c090ec
5
+ SHA512:
6
+ metadata.gz: bc77ed2037d73b1b2c1cc0e8b29f05f74a6b57fac5233b6b25a57984c884a0394662d7f9d9b25778fb04b152ea0ce8043cfd836d18ac20f7623ef6ebefbf24e4
7
+ data.tar.gz: dcf6d617bd52a9b03c0ba07af9044f703a850eec852d82e44c63272a81067383d21b841d662bb632aa4c9519b763fbc5746d0f645b77aeb4291537002d86dcd4
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,97 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ low (0.1.0)
5
+ jekyll (>= 4.3, < 5.0)
6
+ jekyll-feed (>= 0.17)
7
+ jekyll-seo-tag (>= 2.8)
8
+ jekyll-sitemap (>= 1.4)
9
+
10
+ GEM
11
+ remote: https://rubygems.org/
12
+ specs:
13
+ addressable (2.8.7)
14
+ public_suffix (>= 2.0.2, < 7.0)
15
+ base64 (0.3.0)
16
+ bigdecimal (3.2.3)
17
+ colorator (1.1.0)
18
+ concurrent-ruby (1.3.5)
19
+ csv (3.3.5)
20
+ em-websocket (0.5.3)
21
+ eventmachine (>= 0.12.9)
22
+ http_parser.rb (~> 0)
23
+ eventmachine (1.2.7)
24
+ ffi (1.17.2)
25
+ forwardable-extended (2.6.0)
26
+ google-protobuf (4.32.1)
27
+ bigdecimal
28
+ rake (>= 13)
29
+ http_parser.rb (0.8.0)
30
+ i18n (1.14.7)
31
+ concurrent-ruby (~> 1.0)
32
+ jekyll (4.4.1)
33
+ addressable (~> 2.4)
34
+ base64 (~> 0.2)
35
+ colorator (~> 1.0)
36
+ csv (~> 3.0)
37
+ em-websocket (~> 0.5)
38
+ i18n (~> 1.0)
39
+ jekyll-sass-converter (>= 2.0, < 4.0)
40
+ jekyll-watch (~> 2.0)
41
+ json (~> 2.6)
42
+ kramdown (~> 2.3, >= 2.3.1)
43
+ kramdown-parser-gfm (~> 1.0)
44
+ liquid (~> 4.0)
45
+ mercenary (~> 0.3, >= 0.3.6)
46
+ pathutil (~> 0.9)
47
+ rouge (>= 3.0, < 5.0)
48
+ safe_yaml (~> 1.0)
49
+ terminal-table (>= 1.8, < 4.0)
50
+ webrick (~> 1.7)
51
+ jekyll-feed (0.17.0)
52
+ jekyll (>= 3.7, < 5.0)
53
+ jekyll-sass-converter (3.1.0)
54
+ sass-embedded (~> 1.75)
55
+ jekyll-seo-tag (2.8.0)
56
+ jekyll (>= 3.8, < 5.0)
57
+ jekyll-sitemap (1.4.0)
58
+ jekyll (>= 3.7, < 5.0)
59
+ jekyll-watch (2.2.1)
60
+ listen (~> 3.0)
61
+ json (2.15.0)
62
+ kramdown (2.5.1)
63
+ rexml (>= 3.3.9)
64
+ kramdown-parser-gfm (1.1.0)
65
+ kramdown (~> 2.0)
66
+ liquid (4.0.4)
67
+ listen (3.9.0)
68
+ rb-fsevent (~> 0.10, >= 0.10.3)
69
+ rb-inotify (~> 0.9, >= 0.9.10)
70
+ mercenary (0.4.0)
71
+ pathutil (0.16.2)
72
+ forwardable-extended (~> 2.6)
73
+ public_suffix (6.0.2)
74
+ rake (13.3.0)
75
+ rb-fsevent (0.11.2)
76
+ rb-inotify (0.11.1)
77
+ ffi (~> 1.0)
78
+ rexml (3.4.4)
79
+ rouge (4.6.1)
80
+ safe_yaml (1.0.5)
81
+ sass-embedded (1.93.2)
82
+ google-protobuf (~> 4.31)
83
+ rake (>= 13)
84
+ terminal-table (3.0.2)
85
+ unicode-display_width (>= 1.1.1, < 3)
86
+ unicode-display_width (2.6.0)
87
+ webrick (1.9.1)
88
+
89
+ PLATFORMS
90
+ ruby
91
+ x86_64-linux
92
+
93
+ DEPENDENCIES
94
+ low!
95
+
96
+ BUNDLED WITH
97
+ 2.6.9
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2025
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,94 @@
1
+ # low
2
+
3
+ ![ss](./docs/ss.png)
4
+
5
+ > A minimal, retro-inspired Jekyll theme for engineers who care about the metal.
6
+
7
+ **low** is a lightweight Jekyll theme designed for technical blogging — inspired by [Fabien Sanglard’s website](https://fabiensanglard.net/).
8
+ It’s meant for developers who write about *low-level programming, graphics, operating systems, emulation, and the craft of software*.
9
+
10
+ No JavaScript frameworks. No build pipelines. Just clean HTML, monospace typography, and focus on content.
11
+
12
+ ---
13
+
14
+ ## ✳ Features
15
+
16
+ - ⚙️ **Zero-dependency design** — pure HTML + CSS, no JavaScript.
17
+ - 💾 **Retro technical aesthetic** — monospaced typography and print-like layout.
18
+ - 🧱 **Simple structure** — easily fork, modify, or embed in existing Jekyll setups.
19
+ - 📰 **RSS + SEO ready** — via `jekyll-feed`, `jekyll-seo-tag`, and `jekyll-sitemap`.
20
+ - 🗓️ **Archive view** — grouped by year, auto-generated from posts.
21
+ - 🖋️ **Clean code blocks** — styled for low-level and C-style syntax.
22
+ - 🪶 **Compact footer** — © year + author, nothing more.
23
+
24
+ ---
25
+
26
+ ## 🧩 Directory Structure
27
+
28
+ ```sh
29
+ low/
30
+ ├── _layouts/
31
+ │ ├── default.html # Base layout (includes header/footer)
32
+ │ ├── home.html # Main index page
33
+ │ ├── post.html # Individual post layout
34
+ │ └── archive.html # Yearly archive page
35
+
36
+ ├── _includes/
37
+ │ ├── head.html # Metadata + styles
38
+ │ ├── header.html # Top navigation bar
39
+ │ ├── footer.html # Minimal one-liner footer
40
+ │ ├── post-list.html # Reusable post index
41
+ │ └── post-meta.html # Date + tags for posts
42
+
43
+ ├── assets/
44
+ │ └── css/
45
+ │ └── main.scss # Global theme styles
46
+
47
+ ├── _sass/
48
+ │ └── theme/
49
+ │ └── _syntax.scss # Rouge syntax highlighting
50
+
51
+ └── low.gemspec # Jekyll theme definition
52
+ ```
53
+
54
+ ## ⚡ Installation
55
+
56
+ Add it to your Jekyll site:
57
+
58
+ ```sh
59
+ bundle add low
60
+ ```
61
+
62
+ ## 🧠 Philosophy
63
+
64
+ This theme follows the same principles as the projects it’s meant to host:
65
+
66
+ - Understand what runs under the hood.
67
+ - Respect simplicity.
68
+ - Prefer text over tools.
69
+
70
+ It’s ideal for developers writing deep dives into:
71
+ - retro-game rendering,
72
+ - CPU emulation,
73
+ - assembly or C,
74
+ - framebuffer graphics,
75
+ - or OS development logs.
76
+
77
+ ## 🧭 Example Site
78
+ The theme ships with an `example/` site that demonstrates:
79
+ - index listing posts under Articles,
80
+ - /archive/ for yearly grouping,
81
+ - /rss.xml for feed readers.
82
+
83
+ Run it locally:
84
+ ```sh
85
+ cd example
86
+ bundle exec jekyll serve
87
+ ```
88
+
89
+ Open: http://127.0.0.1:4000
90
+
91
+ ## 🪞 Credit
92
+
93
+ Heavily inspired by the aesthetic and minimalism of
94
+ Fabien Sanglard
@@ -0,0 +1,3 @@
1
+ <footer class="footer">
2
+ © {{ site.time | date: "%Y" }} {{ site.author.name | default: site.title }}. All rights reserved.
3
+ </footer>
@@ -0,0 +1,15 @@
1
+ <meta charset="utf-8">
2
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=12.0, minimum-scale=1.0, user-scalable=yes">
3
+ <title>{% if page.title %}{{ page.title }} · {% endif %}{{ site.title }}</title>
4
+ <meta name="description" content="{{ page.description | default: site.description }}">
5
+
6
+ <link rel="stylesheet" href="{{ '/assets/css/main.css' | relative_url }}">
7
+
8
+ {% if site.favicon %}
9
+ <link rel="icon" href="{{ site.favicon | relative_url }}">
10
+ {% endif %}
11
+
12
+ <link rel="alternate" type="application/rss+xml" title="{{ site.title }} RSS" href="{{ site.feed.path | default: '/rss.xml' | relative_url }}">
13
+ <link rel="canonical" href="{{ page.url | absolute_url }}">
14
+
15
+ {% seo %}
@@ -0,0 +1,14 @@
1
+ <br>
2
+ <center>
3
+ <div style="display: inline-block; vertical-align: middle;">
4
+ <a href="{{ '/' | relative_url }}" class="title"><b>{{ site.title | upcase }}</b><br></a>
5
+ <hr>
6
+ <div style="text-align: justify; display: inline-block; width: 100%;">
7
+ <a class="title" href="mailto:{{ site.email | default: 'leventkayadev@gmail.com' }}">CONTACT</a>&nbsp;&nbsp;&nbsp;
8
+ <a class="title" href="{{ '/archive/' | relative_url }}">ARCHIVE</a>&nbsp;&nbsp;&nbsp;
9
+ <a class="title" href="{{ site.feed.path | default: '/rss.xml' | relative_url }}">RSS</a>&nbsp;&nbsp;&nbsp;&nbsp;
10
+ <a class="title" href="{{ '/donate' | relative_url }}">DONATE</a>
11
+ </div>
12
+ </div>
13
+ </center>
14
+ <br><br>
@@ -0,0 +1,7 @@
1
+ <p style="text-align:left; margin-bottom:1ch;">
2
+ {% assign posts_sorted = include.posts | default: site.posts | sort: "date" | reverse %}
3
+ {% for post in posts_sorted %}
4
+ {{ post.date | date: "%d/%m/%Y" }}:
5
+ <a href="{{ post.url | relative_url }}">{{ post.title }}</a><br>
6
+ {% endfor %}
7
+ </p>
@@ -0,0 +1,11 @@
1
+ <p class="meta" style="margin:0 0 2ch 0; opacity:.8;">
2
+ <time datetime="{{ page.date | date_to_xmlschema }}">
3
+ {{ page.date | date: "%d/%m/%Y" }}
4
+ </time>
5
+ {% if page.categories and page.categories.size > 0 %}
6
+ · {{ page.categories | array_to_sentence_string }}
7
+ {% endif %}
8
+ {% if page.tags and page.tags.size > 0 %}
9
+ · tags: {{ page.tags | array_to_sentence_string }}
10
+ {% endif %}
11
+ </p>
@@ -0,0 +1,19 @@
1
+ ---
2
+ layout: default
3
+ ---
4
+ <div class="heading">Archive</div>
5
+ <hr>
6
+
7
+ {% assign grouped = site.posts | group_by_exp: 'post', 'post.date | date: "%Y"' %}
8
+ {% assign grouped = grouped | sort: 'name' | reverse %}
9
+ {% for year in grouped %}
10
+ <h2 style="margin-top:2ch;">{{ year.name }}</h2>
11
+ <hr>
12
+ <p style="text-align:left; margin-bottom:1ch;">
13
+ {% assign posts_sorted = year.items | sort: "date" | reverse %}
14
+ {% for post in posts_sorted %}
15
+ {{ post.date | date: "%d/%m/%Y" }}:
16
+ <a href="{{ post.url | relative_url }}">{{ post.title }}</a><br>
17
+ {% endfor %}
18
+ </p>
19
+ {% endfor %}
@@ -0,0 +1,18 @@
1
+ ---
2
+ layout: nil
3
+ ---
4
+ <!doctype html>
5
+ <html lang="en">
6
+ <head>
7
+ {% include head.html %}
8
+ </head>
9
+ <body>
10
+ {% include header.html %}
11
+ <div style="margin-bottom: 2ch; text-transform: none;"></div>
12
+ <main class="container">
13
+ {{ content }}
14
+ </main>
15
+ {% include footer.html %}
16
+ </body>
17
+ </html>
18
+
@@ -0,0 +1,7 @@
1
+ <meta charset="utf-8">
2
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=12.0, minimum-scale=1.0, user-scalable=yes">
3
+ <title>{% if page.title %}{{ page.title }} · {% endif %}{{ site.title }}</title>
4
+ <link rel="stylesheet" href="{{ '/assets/css/main.css' | relative_url }}">
5
+ <link rel="alternate" type="application/rss+xml" title="RSS" href="{{ site.feed.path | default: '/rss.xml' | relative_url }}">
6
+ {% seo %}
7
+
@@ -0,0 +1,14 @@
1
+ <br>
2
+ <center>
3
+ <div style="display: inline-block; vertical-align: middle;">
4
+ <a href="{{ '/' | relative_url }}" class="title"><b>{{ site.title | upcase }}</b><br></a>
5
+ <hr>
6
+ <div style="text-align: justify; display: inline-block; width: 100%;">
7
+ <a class="title" href="mailto:{{ site.email | default: 'leventkayadev@gmail.com' }}">CONTACT</a>&nbsp;&nbsp;&nbsp;
8
+ <a class="title" href="{{ site.feed.path | default: '/rss.xml' | relative_url }}">RSS</a>&nbsp;&nbsp;&nbsp;&nbsp;
9
+ <a class="title" href="{{ '/donate' | relative_url }}">DONATE</a>
10
+ </div>
11
+ </div>
12
+ </center>
13
+ <br><br>
14
+
@@ -0,0 +1,17 @@
1
+ ---
2
+ layout: default
3
+ ---
4
+ <div class="heading">{{ site.title }}</div>
5
+ <hr>
6
+ <p>This is my personal site where I document code experiments and random ideas that pop into my head during downtime.</p>
7
+
8
+ <div class="heading">Articles</div>
9
+ <hr>
10
+ {% include post-list.html %}
11
+
12
+ <div class="heading">Projects</div>
13
+ <hr>
14
+ Ongoing...: <a href="{{ '/projects/' | relative_url }}">Projects</a><br>
15
+
16
+ <hr>
17
+ <center class=".sun">*</center>
@@ -0,0 +1,5 @@
1
+ ---
2
+ layout: default
3
+ ---
4
+
5
+ {{ content }}
@@ -0,0 +1,7 @@
1
+ <p style="text-align:left; margin-bottom:1ch;">
2
+ {% assign posts_sorted = include.posts | default: site.posts | sort: "date" | reverse %}
3
+ {% for post in posts_sorted %}
4
+ {{ post.date | date: "%d/%m/%Y" }}:
5
+ <a href="{{ post.url | relative_url }}">{{ post.title }}</a><br>
6
+ {% endfor %}
7
+ </p>
@@ -0,0 +1,11 @@
1
+ <p class="meta" style="margin:0 0 2ch 0; opacity:.8;">
2
+ <time datetime="{{ page.date | date_to_xmlschema }}">
3
+ {{ page.date | date: "%d/%m/%Y" }}
4
+ </time>
5
+ {% if page.categories and page.categories.size > 0 %}
6
+ · {{ page.categories | array_to_sentence_string }}
7
+ {% endif %}
8
+ {% if page.tags and page.tags.size > 0 %}
9
+ · tags: {{ page.tags | array_to_sentence_string }}
10
+ {% endif %}
11
+ </p>
@@ -0,0 +1,24 @@
1
+ ---
2
+ layout: default
3
+ ---
4
+ <article class="post">
5
+ <h1>{{ page.title }}</h1>
6
+
7
+ {% include post-meta.html %}
8
+
9
+ {{ content }}
10
+
11
+ <hr>
12
+ <nav class="post-nav" style="display:flex; justify-content:space-between;">
13
+ <div class="prev">
14
+ {% if page.previous %}
15
+ ← <a href="{{ page.previous.url | relative_url }}">{{ page.previous.title }}</a>
16
+ {% endif %}
17
+ </div>
18
+ <div class="next" style="text-align:right;">
19
+ {% if page.next %}
20
+ <a href="{{ page.next.url | relative_url }}">{{ page.next.title }}</a> →
21
+ {% endif %}
22
+ </div>
23
+ </nav>
24
+ </article>
@@ -0,0 +1,2 @@
1
+ /* Rouge syntax hooks (customize later) */
2
+ .highlight pre, pre code, code { }
@@ -0,0 +1,126 @@
1
+ @font-face {
2
+ font-family: "fabfont";
3
+ src: url("/assets/font/DejaVuSansMono.woff2") format("woff2"), url("/assets/font/DejaVuSansMono.woff") format("woff");
4
+ font-weight: normal;
5
+ font-style: normal;
6
+ font-display: block;
7
+ }
8
+ @font-face {
9
+ font-family: "fabfont";
10
+ src: url("/assets/font/DejaVuSansMono-Bold.woff2") format("woff2"), url("/assets/font/DejaVuSansMono-Bold.woff") format("woff");
11
+ font-weight: bold;
12
+ font-style: normal;
13
+ font-display: block;
14
+ }
15
+ * {
16
+ font-size: 16px;
17
+ }
18
+
19
+ html {
20
+ font-family: "fabfont", "DejaVu Sans Mono", "Consolas", "Monaco", "Courier New", monospace;
21
+ max-width: 900px;
22
+ padding-left: 2%;
23
+ padding-right: 3%;
24
+ margin: 0 auto;
25
+ background: #F5F5F0;
26
+ }
27
+
28
+ a {
29
+ color: black;
30
+ font-weight: bold;
31
+ }
32
+
33
+ img {
34
+ border: none;
35
+ }
36
+
37
+ p {
38
+ margin-top: 0px;
39
+ text-align: justify;
40
+ }
41
+
42
+ sup {
43
+ vertical-align: 0.3em;
44
+ font-size: 0.65em;
45
+ }
46
+
47
+ pre {
48
+ font-family: "fabfont", monospace;
49
+ background-color: white;
50
+ border: 1px solid black;
51
+ padding-left: 2%;
52
+ padding-top: 1ch;
53
+ padding-bottom: 1ch;
54
+ overflow: hidden;
55
+ }
56
+
57
+ div.heading {
58
+ font-weight: bold;
59
+ text-transform: uppercase;
60
+ margin-top: 4ch;
61
+ }
62
+
63
+ @media (max-width: 500px) {
64
+ * {
65
+ font-size: 12px;
66
+ }
67
+ }
68
+ .title {
69
+ text-decoration: none;
70
+ }
71
+
72
+ img.pixel, canvas.pixel {
73
+ image-rendering: pixelated;
74
+ image-rendering: -moz-crisp-edges;
75
+ image-rendering: crisp-edges;
76
+ }
77
+
78
+ blockquote {
79
+ background-color: #f3f3f3;
80
+ border: dashed 1px grey;
81
+ width: 97.5%;
82
+ font-style: italic;
83
+ text-align: justify;
84
+ padding: 1ch;
85
+ padding-top: 2ch;
86
+ padding-bottom: 2ch;
87
+ margin: 0ch 0ch 2ch 0ch;
88
+ }
89
+
90
+ blockquote div {
91
+ text-transform: none;
92
+ text-align: right;
93
+ width: 100%;
94
+ }
95
+
96
+ code {
97
+ font-weight: bold;
98
+ background-color: #e1e1e1;
99
+ border-radius: 0.5ch;
100
+ padding-left: 0.3ch;
101
+ padding-right: 0.3ch;
102
+ }
103
+
104
+ .trivia {
105
+ border-left: 1px black solid;
106
+ padding-left: 1ch;
107
+ }
108
+
109
+ .trivia::before {
110
+ font-weight: bold;
111
+ text-decoration: underline;
112
+ padding-right: 1ch;
113
+ content: "Trivia:";
114
+ }
115
+
116
+ /* container hook */
117
+ /* --- Footer --- */
118
+ .footer {
119
+ text-align: center;
120
+ margin-top: 4ch;
121
+ margin-bottom: 2ch;
122
+ opacity: 0.7;
123
+ font-size: 0.9em;
124
+ }
125
+
126
+ /*# sourceMappingURL=main.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sourceRoot":"","sources":["main.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EAEA;EACA;EACA;;AAGF;EACE;EACA;EAEA;EACA;EACA;;AAGF;EAAI;;;AAEJ;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EAAI;EAAc;;;AAClB;EAAM;;;AAEN;EAAI;EAAiB;;;AAErB;EAAM;EAAuB;;;AAE7B;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;IAAI;;;AAGN;EAAS;;;AAET;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EAAU;EAA8B;;;AAExC;EACE;EACA;EACA;EACA;;;AAGF;AAGA;AACA;EACE;EACA;EACA;EACA;EACA","sourcesContent":["@font-face {\n font-family: 'fabfont';\n src: url('/assets/font/DejaVuSansMono.woff2') format('woff2'),\n url('/assets/font/DejaVuSansMono.woff') format('woff');\n font-weight: normal;\n font-style: normal;\n font-display: block;\n}\n\n@font-face {\n font-family: 'fabfont';\n src: url('/assets/font/DejaVuSansMono-Bold.woff2') format('woff2'),\n url('/assets/font/DejaVuSansMono-Bold.woff') format('woff');\n font-weight: bold;\n font-style: normal;\n font-display: block;\n}\n\n* { font-size: 16px; }\n\nhtml {\n font-family: 'fabfont', 'DejaVu Sans Mono', 'Consolas', 'Monaco', 'Courier New', monospace;\n max-width: 900px;\n padding-left: 2%;\n padding-right: 3%;\n margin: 0 auto;\n background: #F5F5F0;\n}\n\na { color: black; font-weight: bold; }\nimg { border: none; }\n\np { margin-top: 0px; text-align: justify; }\n\nsup { vertical-align: 0.3em; font-size: 0.65em; }\n\npre {\n font-family: 'fabfont', monospace;\n background-color: white;\n border: 1px solid black;\n padding-left: 2%;\n padding-top: 1ch;\n padding-bottom: 1ch;\n overflow: hidden;\n}\n\ndiv.heading {\n font-weight: bold;\n text-transform: uppercase;\n margin-top: 4ch;\n}\n\n@media (max-width: 500px) {\n * { font-size: 12px; }\n}\n\n.title { text-decoration: none; }\n\nimg.pixel, canvas.pixel {\n image-rendering: pixelated;\n image-rendering: -moz-crisp-edges;\n image-rendering: crisp-edges;\n}\n\nblockquote {\n background-color: #f3f3f3;\n border: dashed 1px grey;\n width: 97.5%;\n font-style: italic;\n text-align: justify;\n padding: 1ch;\n padding-top: 2ch;\n padding-bottom: 2ch;\n margin: 0ch 0ch 2ch 0ch;\n}\n\nblockquote div {\n text-transform: none;\n text-align: right;\n width: 100%;\n}\n\ncode {\n font-weight: bold;\n background-color: #e1e1e1;\n border-radius: 0.5ch;\n padding-left: 0.3ch;\n padding-right: 0.3ch;\n}\n\n.trivia { border-left: 1px black solid; padding-left: 1ch; }\n\n.trivia::before {\n font-weight: bold;\n text-decoration: underline;\n padding-right: 1ch;\n content: \"Trivia:\";\n}\n\n/* container hook */\n.container {}\n\n/* --- Footer --- */\n.footer {\n text-align: center;\n margin-top: 4ch;\n margin-bottom: 2ch;\n opacity: 0.7;\n font-size: 0.9em;\n}\n\n"],"file":"main.css"}
@@ -0,0 +1,4 @@
1
+ /* _sass/theme/_syntax.scss */
2
+ .highlight, pre code, code {
3
+ /* hook to style Rouge output later */
4
+ }
@@ -0,0 +1,255 @@
1
+ ---
2
+ # Jekyll front matter for SCSS
3
+ ---
4
+
5
+ /* ===============================
6
+ FONT FACE
7
+ =============================== */
8
+ @font-face {
9
+ font-family: 'fabfont';
10
+ src: url('{{ "/assets/font/DejaVuSansMono.woff2" | relative_url }}') format('woff2'),
11
+ url('{{ "/assets/font/DejaVuSansMono.woff" | relative_url }}') format('woff');
12
+ font-weight: normal;
13
+ font-style: normal;
14
+ font-display: block;
15
+ }
16
+
17
+ @font-face {
18
+ font-family: 'fabfont';
19
+ src: url('{{ "/assets/font/DejaVuSansMono-Bold.woff2" | relative_url }}') format('woff2'),
20
+ url('{{ "/assets/font/DejaVuSansMono-Bold.woff" | relative_url }}') format('woff');
21
+ font-weight: bold;
22
+ font-style: normal;
23
+ font-display: block;
24
+ }
25
+
26
+ /* ===============================
27
+ BASE RESET
28
+ =============================== */
29
+ * {
30
+ font-size: 16px;
31
+ box-sizing: border-box;
32
+ }
33
+
34
+ html {
35
+ font-family: 'fabfont', 'DejaVu Sans Mono', 'Consolas', 'Monaco', 'Courier New', monospace;
36
+ max-width: 900px;
37
+ margin: 0 auto;
38
+ padding-left: 2%;
39
+ padding-right: 3%;
40
+ background: #F5F5F0;
41
+ line-height: 1.5;
42
+ color: #000;
43
+ }
44
+
45
+ body {
46
+ margin: 0;
47
+ padding: 0;
48
+ }
49
+
50
+ /* ===============================
51
+ LINKS & TYPOGRAPHY
52
+ =============================== */
53
+ a {
54
+ color: black;
55
+ font-weight: bold;
56
+ text-decoration: none;
57
+ }
58
+ a:hover {
59
+ text-decoration: underline;
60
+ }
61
+
62
+ p {
63
+ margin-top: 0;
64
+ text-align: justify;
65
+ }
66
+
67
+ sup {
68
+ vertical-align: 0.3em;
69
+ font-size: 0.65em;
70
+ }
71
+
72
+ /* ===============================
73
+ HEADINGS
74
+ =============================== */
75
+ div.heading {
76
+ font-weight: bold;
77
+ text-transform: uppercase;
78
+ margin-top: 4ch;
79
+ }
80
+
81
+ h1, h2, h3, h4 {
82
+ font-weight: bold;
83
+ text-transform: uppercase;
84
+ margin-top: 4ch;
85
+ }
86
+
87
+ /* ===============================
88
+ CODE & PRE BLOCKS
89
+ =============================== */
90
+ pre, code {
91
+ font-family: 'fabfont', monospace;
92
+ }
93
+
94
+ pre {
95
+ background-color: white;
96
+ border: 1px solid black;
97
+ padding: 1ch 2%;
98
+ overflow-x: auto;
99
+ white-space: pre;
100
+ }
101
+
102
+ code {
103
+ background-color: #e1e1e1;
104
+ border-radius: 0.5ch;
105
+ padding: 0.2ch 0.4ch;
106
+ font-weight: bold;
107
+ }
108
+
109
+ /* Inline code inside pre shouldn't have double background */
110
+ pre code {
111
+ background: none;
112
+ padding: 0;
113
+ border-radius: 0;
114
+ font-weight: normal;
115
+ }
116
+
117
+ /* ===============================
118
+ IMAGES & MEDIA
119
+ =============================== */
120
+ img, video, canvas, iframe {
121
+ max-width: 100%;
122
+ height: auto;
123
+ display: block;
124
+ box-sizing: border-box;
125
+ }
126
+
127
+ img {
128
+ border: none;
129
+ margin-bottom: 2ch;
130
+ }
131
+
132
+ img.pixel, canvas.pixel {
133
+ image-rendering: pixelated;
134
+ image-rendering: -moz-crisp-edges;
135
+ image-rendering: crisp-edges;
136
+ }
137
+
138
+ /* For blog images inside posts */
139
+ .post img,
140
+ article img {
141
+ border: 1px solid black;
142
+ margin-bottom: 2ch;
143
+ }
144
+
145
+ /* ===============================
146
+ BLOCKQUOTE
147
+ =============================== */
148
+ blockquote {
149
+ background-color: #f3f3f3;
150
+ border: 1px dashed grey;
151
+ width: 97.5%;
152
+ font-style: italic;
153
+ text-align: justify;
154
+ padding: 2ch 1ch;
155
+ margin: 0 0 2ch 0;
156
+ }
157
+ blockquote div {
158
+ text-transform: none;
159
+ text-align: right;
160
+ width: 100%;
161
+ }
162
+
163
+ .sun {
164
+ background: #ffee99;
165
+ border-radius: 4px;
166
+ padding: 0 2px;
167
+ }
168
+
169
+ /* ===============================
170
+ TRIVIA BLOCK
171
+ =============================== */
172
+ .trivia {
173
+ border-left: 1px solid black;
174
+ padding-left: 1ch;
175
+ }
176
+ .trivia::before {
177
+ font-weight: bold;
178
+ text-decoration: underline;
179
+ padding-right: 1ch;
180
+ content: "Trivia:";
181
+ }
182
+
183
+ /* ===============================
184
+ FOOTER
185
+ =============================== */
186
+ .footer {
187
+ text-align: center;
188
+ margin-top: 4ch;
189
+ margin-bottom: 2ch;
190
+ opacity: 0.7;
191
+ font-size: 0.9em;
192
+ }
193
+
194
+ /* ===============================
195
+ RESPONSIVE
196
+ =============================== */
197
+ @media (max-width: 500px) {
198
+ * {
199
+ font-size: 12px;
200
+ }
201
+ }
202
+
203
+ /* ===============================
204
+ SYTAX STYLE START
205
+ =============================== */
206
+
207
+ .highlight table td { padding: 5px; }
208
+ .highlight table pre { margin: 0; }
209
+ .highlight, .highlight .w {
210
+ color: #444444;
211
+ }
212
+ .highlight .cp {
213
+ color: #CC00A3;
214
+ }
215
+ .highlight .cs {
216
+ color: #CC00A3;
217
+ }
218
+ .highlight .c, .highlight .ch, .highlight .cd, .highlight .cm, .highlight .cpf, .highlight .c1 {
219
+ color: #FF0000;
220
+ }
221
+ .highlight .ge {
222
+ font-style: italic;
223
+ }
224
+ .highlight .ges {
225
+ font-weight: bold;
226
+ font-style: italic;
227
+ }
228
+ .highlight .gs {
229
+ font-weight: bold;
230
+ }
231
+ .highlight .kc {
232
+ color: #C34E00;
233
+ }
234
+ .highlight .kd {
235
+ color: #0000FF;
236
+ }
237
+ .highlight .kr {
238
+ color: #007575;
239
+ }
240
+ .highlight .k, .highlight .kn, .highlight .kp, .highlight .kt, .highlight .kv {
241
+ color: #0000FF;
242
+ }
243
+ .highlight .s, .highlight .sb, .highlight .sc, .highlight .dl, .highlight .sd, .highlight .s2, .highlight .se, .highlight .sh, .highlight .si, .highlight .sx, .highlight .sr, .highlight .s1, .highlight .ss {
244
+ color: #009C00;
245
+ }
246
+ .highlight .sa {
247
+ color: #0000FF;
248
+ }
249
+ .highlight .nb, .highlight .bp {
250
+ color: #C34E00;
251
+ }
252
+
253
+ /* ===============================
254
+ SYTAX STYLE END
255
+ =============================== */
Binary file
data/docs/ss.png ADDED
Binary file
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+ module Low
3
+ VERSION = "1.0.1"
4
+ end
5
+
data/lib/low.rb ADDED
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+ require "jekyll"
3
+ require "low/version"
4
+
5
+ module Low
6
+ class Theme < Jekyll::Theme; end
7
+ end
8
+
data/low.gemspec ADDED
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+ require_relative "lib/low/version"
3
+
4
+ Gem::Specification.new do |spec|
5
+ spec.name = "jekyll-theme-low"
6
+ spec.version = Low::VERSION
7
+ spec.summary = "A minimal, retro-inspired Jekyll theme for engineers who care about the metal."
8
+ spec.homepage = "https://github.com/lvntky/low"
9
+ spec.license = "MIT"
10
+
11
+ spec.authors = ["Levent Kaya"]
12
+ spec.files = Dir["**/*"].grep_v(%r{^(example/|script/|pkg/|\.git/)|\.gem$})
13
+ spec.require_paths = ["lib"]
14
+
15
+ spec.add_runtime_dependency "jekyll", "~> 4.3"
16
+ spec.add_runtime_dependency "jekyll-seo-tag", "~> 2.8"
17
+ spec.add_runtime_dependency "jekyll-feed", "~> 0.17"
18
+ spec.add_runtime_dependency "jekyll-sitemap", "~> 1.4"
19
+ end
metadata ADDED
@@ -0,0 +1,129 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jekyll-theme-low
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Levent Kaya
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2025-11-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: jekyll
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.3'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '4.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: jekyll-seo-tag
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.8'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.8'
41
+ - !ruby/object:Gem::Dependency
42
+ name: jekyll-feed
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.17'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.17'
55
+ - !ruby/object:Gem::Dependency
56
+ name: jekyll-sitemap
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.4'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.4'
69
+ description:
70
+ email:
71
+ executables: []
72
+ extensions: []
73
+ extra_rdoc_files: []
74
+ files:
75
+ - Gemfile
76
+ - Gemfile.lock
77
+ - LICENSE.txt
78
+ - README.md
79
+ - _includes/footer.html
80
+ - _includes/head.html
81
+ - _includes/header.html
82
+ - _includes/post-list.html
83
+ - _includes/post-meta.html
84
+ - _layouts/archive.html
85
+ - _layouts/default.html
86
+ - _layouts/head.html
87
+ - _layouts/header.html
88
+ - _layouts/home.html
89
+ - _layouts/page.html
90
+ - _layouts/post-list.html
91
+ - _layouts/post-meta.html
92
+ - _layouts/post.html
93
+ - _sass/theme/_syntax.scss
94
+ - assets/_site/css/main.css
95
+ - assets/_site/css/main.css.map
96
+ - assets/_site/font/DejaVuSansMono-Bold.woff2
97
+ - assets/_site/font/DejaVuSansMono.woff2
98
+ - assets/css/_syntax.scss
99
+ - assets/css/main.scss
100
+ - assets/font/DejaVuSansMono-Bold.woff2
101
+ - assets/font/DejaVuSansMono.woff2
102
+ - docs/ss.png
103
+ - lib/low.rb
104
+ - lib/low/version.rb
105
+ - low.gemspec
106
+ homepage: https://github.com/lvntky/low
107
+ licenses:
108
+ - MIT
109
+ metadata: {}
110
+ post_install_message:
111
+ rdoc_options: []
112
+ require_paths:
113
+ - lib
114
+ required_ruby_version: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ required_rubygems_version: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ requirements: []
125
+ rubygems_version: 3.3.15
126
+ signing_key:
127
+ specification_version: 4
128
+ summary: A minimal, retro-inspired Jekyll theme for engineers who care about the metal.
129
+ test_files: []