monoholic 0.3.0 → 0.3.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 364a310abc44a0c57868930db1aee8f0773c8f9948b3ff067d30529fb555cff8
4
- data.tar.gz: 6fb168dfecf8c8214801aa1a84630104b9e84e47eed27d391c2d3659b51d5884
3
+ metadata.gz: d32ca029c01d3daf2a3a5b84963743da741082e38bbcfaa017eb0d1abdd51c8a
4
+ data.tar.gz: 74e0b961dc404e54b16d2b0de034d80518ab7aed38bca7707cd216ec64b67604
5
5
  SHA512:
6
- metadata.gz: 4570824fddcb4937b9581449b880a4fed8f8ff19f414a26dac7ae7c0b37920d390103a02418e88ec0731a8feda33d33fab043420e7ce81fadfcac2035f2ecbcc
7
- data.tar.gz: 873d4990a9e089443f4d093a4939dc3a57c07e3fa728922c402624a8129828560599ad8ebb49f7e6bca8b491f946911eb6e01b424268e9bdd6528292b08a4f78
6
+ metadata.gz: 94abdf33dcfcef03cacfe59a66cc25e73cf9a7b8a8545dd0932871b9b22ea934c40123150a058032036f481c3a8b40e3e641ee670cd711732362ae918fd8ad64
7
+ data.tar.gz: 838e482ced8c32bf3023000e18af54532a6463077d9575f68ecaadab9c0a8f2741edfc6ad971741f139719720cd11a2d842a9eb9ad39fe923c51409d5aebf258
data/README.md CHANGED
@@ -14,13 +14,10 @@ A minimal, monochrome dark Jekyll theme🧪
14
14
 
15
15
  ## Features
16
16
 
17
- - **Minimalist Dark Aesthetic:** Sleek, high-contrast monochrome design out of the box.
18
- - **Data-Driven Menu:** Easily configure your site navigation via `_data/menu.yml`.
19
- - **Developer Friendly:** Code syntax highlighting and monospace typography (JetBrains Mono).
20
- - **Responsive Design:** Mobile-first layout with smooth fluid scaling using modern CSS.
21
- - **Customizable:** Centralized CSS variables for fast theming.
22
- - **SEO & RSS Ready:** Built-in support for `jekyll-seo-tag` and `jekyll-feed`.
23
- - **Per-Page Scripts:** Add specific JavaScript to individual pages seamlessly.
17
+ - Minimalist dark monochrome design
18
+ - Data-driven menu via `_data/menu.yml`
19
+ - Optional grayscale image filter
20
+ - SEO & RSS support
24
21
 
25
22
  ## Installation
26
23
 
@@ -68,8 +65,20 @@ Override the default settings in your `_config.yml`. Key theme configuration opt
68
65
  theme_config:
69
66
  back: ".." # Text for backlink on post pages
70
67
  date_format: "%Y%m%d" # Date format for post metadata
68
+ monochrome_images: true # Apply grayscale filter to images (default: true)
69
+ footer: true # Show/hide site footer (default: true)
71
70
  ```
72
71
 
72
+ ### Analytics
73
+
74
+ Monoholic has built-in support for [GoatCounter](https://www.goatcounter.com/), a privacy-friendly analytics platform. Add your GoatCounter subdomain to `_config.yml`:
75
+
76
+ ```yaml
77
+ goatcounter: your-subdomain
78
+ ```
79
+
80
+ This injects the GoatCounter tracking script on every page. Remove the key entirely to disable analytics.
81
+
73
82
  ### Menu Configuration
74
83
 
75
84
  Monoholic uses a data-driven approach to its menu. Create or edit `_data/menu.yml` to define your site's navigation structure.
@@ -88,8 +97,53 @@ entries:
88
97
 
89
98
  - `title`: The section header.
90
99
  - `content`: Custom HTML or text for the menu section.
100
+ - `content_file`: Path to an external markdown file (e.g., `about.md`) to load content from your root directory.
91
101
  - `post_list`: Set to `true` to auto-generate a list of your Jekyll posts under this section.
92
102
 
103
+ #### Nested Menu Sections
104
+
105
+ Menu entries can contain nested `entries` to create recursive sub-sections:
106
+
107
+ ```yaml
108
+ entries:
109
+ - title: projects
110
+ entries:
111
+ - title: web
112
+ content: |
113
+ <p>Web projects here.</p>
114
+ - title: archive
115
+ post_list: true
116
+ ```
117
+
118
+ Nesting can go as deep as needed — `menu.html` includes itself recursively for each `entries` array it encounters.
119
+
120
+ #### Using External Content Files
121
+
122
+ You can reference external markdown files instead of inline content:
123
+
124
+ ```yaml
125
+ entries:
126
+ - title: about
127
+ content_file: about.md
128
+ ```
129
+
130
+ This will load and render the content from `about.md` in your site's root directory.
131
+
132
+ ### Per-Page JavaScript
133
+
134
+ To load custom JavaScript files on a specific page, add a `custom_js` list to the page's front matter:
135
+
136
+ ```yaml
137
+ ---
138
+ layout: post
139
+ custom_js:
140
+ - my-script
141
+ - chart
142
+ ---
143
+ ```
144
+
145
+ Each entry is a filename (without `.js`) relative to `assets/js/`. The example above loads `assets/js/my-script.js` and `assets/js/chart.js` at the bottom of the page body.
146
+
93
147
  ## Contributing
94
148
 
95
149
  Bug reports and pull requests are welcome on GitHub at [https://github.com/stiermid/monoholic](https://github.com/stiermid/monoholic). This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](https://www.contributor-covenant.org/) code of conduct.
@@ -1,16 +1,11 @@
1
1
  <footer class="site-footer h-card">
2
2
  <data class="u-url" href="{{ "/" | relative_url }}"></data>
3
3
  <div class="wrapper">
4
- <div class="footer-col-wrapper">
5
- <div
6
- class="footer-col"
7
- style="display: flex; justify-content: space-between; align-items: center; width: 100%;"
8
- >
9
- <p>
10
- &copy; {{ 'now' | date: '%Y' }}
11
- {{ site.title | upcase }}
12
- </p>
13
- </div>
4
+ <div class="footer-col">
5
+ <p>
6
+ &copy; {{ 'now' | date: '%Y' }}
7
+ {{ site.title | upcase }}
8
+ </p>
14
9
  </div>
15
10
  </div>
16
11
  </footer>
@@ -4,7 +4,7 @@
4
4
  <span class="post-meta">
5
5
  * {{ post.date | date: site.theme_config.date_format }}
6
6
  </span>
7
- <a class="post-link" href="{{ post.url | relative_url }}">
7
+ <a href="{{ post.url | relative_url }}">
8
8
  {{ post.title | escape }}
9
9
  </a>
10
10
  </li>
@@ -1,7 +1,7 @@
1
1
  <!doctype html>
2
2
  <html lang="{{ page.lang | default: "en" }}">
3
3
  {%- include head.html -%}
4
- <body class="{% if site.theme_config.monochrome_images %}m-img{% endif %}">
4
+ <body class="{% if site.theme_config.monochrome_images != false %}images-monochrome{% endif %}">
5
5
  <main class="page-content" aria-label="Content">
6
6
  <div class="wrapper">
7
7
  {{ content }}
@@ -20,5 +20,13 @@
20
20
  ></script>
21
21
  {% endfor %}
22
22
  {% endif %}
23
+
24
+ {%- if site.goatcounter -%}
25
+ <script
26
+ data-goatcounter="https://{{ site.goatcounter }}.goatcounter.com/count"
27
+ async
28
+ src="//gc.zgo.at/count.js"
29
+ ></script>
30
+ {%- endif -%}
23
31
  </body>
24
32
  </html>
data/_layouts/post.html CHANGED
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  layout: default
3
3
  ---
4
- {%- include back_link.html -%}
4
+ <a href="{{ '/' | relative_url }}">{{ site.theme_config.back }}</a>
5
5
 
6
6
  <article>
7
- <span class="post-meta" style="text-align: right">
7
+ <span class="post-meta">
8
8
  {{ page.date | date: site.theme_config.date_format }}
9
9
  </span>
10
10
  <h1>{{ page.title }}</h1>
data/_sass/_base.scss ADDED
@@ -0,0 +1,43 @@
1
+ * {
2
+ box-sizing: border-box;
3
+ }
4
+
5
+ body {
6
+ background-color: var(--bg-color);
7
+ color: var(--text-color);
8
+ font-family: var(--font-family);
9
+ font-size: var(--font-size-base);
10
+ line-height: 1.4;
11
+ margin: 0;
12
+ padding: 0;
13
+ -webkit-font-smoothing: antialiased;
14
+ }
15
+
16
+ h1,
17
+ h2,
18
+ h3,
19
+ h4,
20
+ h5,
21
+ h6 {
22
+ font-weight: 700;
23
+ margin-top: 0;
24
+ }
25
+
26
+ p {
27
+ margin-top: 0;
28
+ }
29
+
30
+ a {
31
+ color: var(--text-color);
32
+ text-decoration: underline;
33
+ }
34
+
35
+ img {
36
+ max-width: 100%;
37
+ display: block;
38
+ margin: 0 auto;
39
+ }
40
+
41
+ .images-monochrome img {
42
+ filter: grayscale(1);
43
+ }
@@ -0,0 +1,42 @@
1
+ .post-list {
2
+ list-style: none;
3
+ padding: 0;
4
+ margin: 0;
5
+
6
+ li {
7
+ margin-bottom: 0.75rem;
8
+ display: flex;
9
+ align-items: baseline;
10
+ gap: var(--space-md);
11
+ flex-wrap: wrap; // Mobile safety
12
+ }
13
+ }
14
+
15
+ .post-meta {
16
+ color: var(--meta-color);
17
+ }
18
+
19
+ .site-footer {
20
+ padding-top: var(--space-xl);
21
+ font-size: var(--font-size-sm);
22
+ color: var(--meta-color);
23
+
24
+ .footer-col {
25
+ display: flex;
26
+ justify-content: space-between;
27
+ align-items: center;
28
+ width: 100%;
29
+ }
30
+
31
+ p {
32
+ margin: 0;
33
+ }
34
+ }
35
+
36
+ .page-content {
37
+ .post-meta {
38
+ color: var(--meta-color);
39
+ display: block;
40
+ text-align: right;
41
+ }
42
+ }
@@ -0,0 +1,40 @@
1
+ .highlighter-rouge,
2
+ highlight {
3
+ background-color: var(--text-color);
4
+ color: var(--bg-color);
5
+ }
6
+
7
+ div.highlighter-rouge {
8
+ code {
9
+ display: block;
10
+ overflow-x: auto;
11
+ white-space: pre-wrap;
12
+ }
13
+
14
+ pre.highlight {
15
+ padding: var(--space-md);
16
+ }
17
+ }
18
+
19
+ table {
20
+ width: 100%;
21
+ margin-bottom: var(--space-md);
22
+
23
+ &,
24
+ th,
25
+ td {
26
+ border: thin solid var(--meta-color);
27
+ border-collapse: collapse;
28
+ padding: var(--space-xs);
29
+ }
30
+ }
31
+
32
+ blockquote {
33
+ font-style: italic;
34
+ border: thin solid var(--border-color);
35
+ padding: var(--space-md);
36
+
37
+ p {
38
+ margin: 0;
39
+ }
40
+ }
@@ -0,0 +1,25 @@
1
+ .wrapper {
2
+ max-width: var(--content-width);
3
+ margin: 0 auto;
4
+ padding: var(--space-3xl) var(--space-xl);
5
+ }
6
+
7
+ .site-header {
8
+ margin: var(--space-2xl) 0;
9
+
10
+ .site-title {
11
+ font-size: var(--font-size-site-title);
12
+ font-weight: 700;
13
+ letter-spacing: 0.5px;
14
+ }
15
+ }
16
+
17
+ .section-title {
18
+ font-size: var(--font-size-section);
19
+ font-weight: 700;
20
+ margin-bottom: var(--space-lg);
21
+ }
22
+
23
+ section {
24
+ margin-bottom: var(--space-xl);
25
+ }
@@ -0,0 +1,26 @@
1
+ :root {
2
+ // Colors
3
+ --bg-color: #030303;
4
+ --text-color: #e0e0e0;
5
+ --meta-color: #888888;
6
+ --border-color: #222222;
7
+
8
+ // Typography
9
+ --font-family: "JetBrains Mono", monospace;
10
+ --font-size-base: 16px;
11
+ --font-size-sm: 0.85rem;
12
+ --font-size-section: 1.1rem;
13
+ --font-size-site-title: 2rem;
14
+
15
+ // Spacing scale
16
+ --space-xs: 0.4rem;
17
+ --space-sm: 0.5rem;
18
+ --space-md: 1rem;
19
+ --space-lg: 1.5rem;
20
+ --space-xl: 2rem;
21
+ --space-2xl: 3rem;
22
+ --space-3xl: 4rem;
23
+
24
+ // Layout
25
+ --content-width: 680px;
26
+ }
data/_sass/monoholic.scss CHANGED
@@ -1,171 +1,6 @@
1
1
  // monoholic.scss
2
-
3
- :root {
4
- --bg-color: #030303;
5
- --text-color: #e0e0e0;
6
- --meta-color: #888888;
7
- --border-color: #222222;
8
- --font-family: "JetBrains Mono", monospace;
9
- --base-size: 16px;
10
- }
11
-
12
- * {
13
- box-sizing: border-box;
14
- }
15
-
16
- body {
17
- background-color: var(--bg-color);
18
- color: var(--text-color);
19
- font-family: var(--font-family);
20
- font-size: var(--base-size);
21
- line-height: 1.7;
22
- margin: 0;
23
- padding: 0;
24
- -webkit-font-smoothing: antialiased;
25
- }
26
-
27
- h1,
28
- h2,
29
- h3,
30
- h4,
31
- h5,
32
- h6 {
33
- font-weight: 700;
34
- margin-top: 0;
35
- }
36
-
37
- p {
38
- margin-top: 0;
39
- }
40
-
41
- a {
42
- color: var(--text-color);
43
- text-decoration: underline;
44
- }
45
-
46
- img {
47
- max-width: 100%;
48
- display: block;
49
- margin: 0 auto;
50
- }
51
-
52
- .m-img img {
53
- filter: grayscale(1);
54
- }
55
-
56
- .highlighter-rouge,
57
- highlight {
58
- background-color: var(--text-color);
59
- color: var(--bg-color);
60
- }
61
-
62
- div.highlighter-rouge code {
63
- display: block;
64
- overflow-x: auto;
65
- white-space: pre-wrap;
66
- }
67
-
68
- pre.highlight {
69
- padding: 1rem;
70
- }
71
-
72
- table {
73
- width: 100%;
74
- margin-bottom: 1rem;
75
- }
76
-
77
- table,
78
- th,
79
- td {
80
- border: thin solid var(--meta-color);
81
- border-collapse: collapse;
82
- padding: 0.4rem;
83
- }
84
-
85
- blockquote {
86
- font-style: italic;
87
- border: thin solid var(--border-color);
88
- padding: 1rem;
89
-
90
- p {
91
- margin: 0;
92
- }
93
- }
94
-
95
- .wrapper {
96
- max-width: 680px;
97
- margin: 0 auto;
98
- padding: 4rem 2rem;
99
- }
100
-
101
- // Header
102
- .site-header {
103
- margin: 3rem 0;
104
-
105
- .site-title {
106
- font-size: 2rem;
107
- font-weight: 700;
108
- letter-spacing: 0.5px;
109
- }
110
- }
111
-
112
- // Typography / Sections
113
- .section-title {
114
- font-size: 1.1rem;
115
- font-weight: 700;
116
- margin-bottom: 1.5rem;
117
- }
118
-
119
- // Section
120
- section {
121
- margin-bottom: 2rem;
122
- }
123
-
124
- // Posts Section
125
- .post-list {
126
- list-style: none;
127
- padding: 0;
128
- margin: 0;
129
-
130
- li {
131
- margin-bottom: 0.75rem;
132
- display: flex;
133
- align-items: baseline;
134
- gap: 1rem;
135
- flex-wrap: wrap; // Mobile safety
136
- }
137
- }
138
-
139
- .post-meta {
140
- color: var(--meta-color);
141
- }
142
-
143
- // Footer
144
- .site-footer {
145
- padding-top: 2rem;
146
- font-size: 0.85rem;
147
- color: var(--meta-color);
148
-
149
- .footer-col {
150
- display: flex;
151
- justify-content: space-between;
152
- width: 100%;
153
- }
154
-
155
- p {
156
- margin: 0;
157
- }
158
- }
159
-
160
- // Page Layout Styles (For standard pages/posts if they have content)
161
- .page-content {
162
- .post-title {
163
- font-size: 1.5rem;
164
- margin-bottom: 0.5rem;
165
- }
166
-
167
- .post-meta {
168
- color: var(--meta-color);
169
- display: block;
170
- }
171
- }
2
+ @import "variables";
3
+ @import "base";
4
+ @import "content";
5
+ @import "layout";
6
+ @import "components";
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: monoholic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Agil Mammadov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-04-03 00:00:00.000000000 Z
11
+ date: 2026-04-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -89,9 +89,7 @@ extra_rdoc_files: []
89
89
  files:
90
90
  - LICENSE
91
91
  - README.md
92
- - _config.yml
93
92
  - _data/menu.yml
94
- - _includes/back_link.html
95
93
  - _includes/footer.html
96
94
  - _includes/head.html
97
95
  - _includes/header.html
@@ -101,6 +99,11 @@ files:
101
99
  - _layouts/home.html
102
100
  - _layouts/page.html
103
101
  - _layouts/post.html
102
+ - _sass/_base.scss
103
+ - _sass/_components.scss
104
+ - _sass/_content.scss
105
+ - _sass/_layout.scss
106
+ - _sass/_variables.scss
104
107
  - _sass/monoholic.scss
105
108
  - assets/css/style.scss
106
109
  homepage: https://github.com/stiermid/monoholic
data/_config.yml DELETED
@@ -1,23 +0,0 @@
1
- name: "monoholic"
2
- title: "monoholic"
3
- author: Agil Mammadov
4
- email: mammadovagil@tutamail.com
5
- description: >
6
- Minimal monochrome dark jekyll theme🧪
7
- baseurl: "/monoholic" # the subpath of your site, e.g. /blog
8
- url: "https://stiermid.github.io" # the base hostname & protocol for your site, e.g. http://example.com
9
- github_username: "stiermid"
10
-
11
- # Build settings
12
- markdown: kramdown
13
- remote_theme: stiermid/monoholic
14
-
15
- theme_config:
16
- back: ".."
17
- date_format: "%Y%m%d"
18
- monochrome_images: true
19
- footer: true # set to false to hide the footer
20
-
21
- plugins:
22
- - jekyll-feed
23
- - jekyll-seo-tag
@@ -1 +0,0 @@
1
- <a href="{{ '/' | relative_url }}">{{ site.theme_config.back }}</a>