1 Commits

Author SHA1 Message Date
105dce7d40 theming 2026-05-05 19:48:35 +02:00
23 changed files with 86 additions and 106 deletions

View File

@@ -43,47 +43,8 @@ function get_title(path, default_title, full_path, line, title, in_fm) {
return default_title
}
function get_priority(path, full_path, line, prio, in_fm) {
full_path = src "/" path
if (path !~ /\.md$/) {
full_path = full_path "/index.md"
}
prio = ""
in_fm = 0
while ((getline line < full_path) > 0) {
if (line ~ /^---[[:space:]]*$/) {
if (in_fm == 0) {
in_fm = 1
continue
} else {
break
}
}
if (in_fm) {
if (line ~ /^[[:space:]]*priority[[:space:]]*=/) {
sub(/^[[:space:]]*priority[[:space:]]*=[[:space:]]*/, "", line)
if (line ~ /^".*"$/) {
prio = substr(line, 2, length(line) - 2)
} else if (line ~ /^'.*'$/) {
prio = substr(line, 2, length(line) - 2)
} else {
prio = line
}
break
}
} else {
break
}
}
close(full_path)
if (prio != "" && prio + 0 == prio) return prio + 0
return 0
}
function compare_paths(p1, p2, parts1, parts2, n1, n2, i, k, name1, name2, lname1, lname2, pr1, pr2, dir1, dir2, ent1, ent2) {
function compare_paths(p1, p2, parts1, parts2, n1, n2, i, name1, name2, lname1, lname2, w1, w2) {
n1 = split(p1, parts1, "/")
n2 = split(p2, parts2, "/")
for (i = 1; i <= n1 && i <= n2; i++) {
@@ -97,37 +58,15 @@ function compare_paths(p1, p2, parts1, parts2, n1, n2, i, k, name1, name2, ln
if (lname1 == "index" && i == n1 && lname2 != "index") return -1
if (lname2 == "index" && i == n2 && lname1 != "index") return 1
if (lname1 != lname2) {
dir1 = ""
dir2 = ""
for (k = 1; k < i; k++) {
dir1 = (dir1 == "" ? parts1[k] : dir1 "/" parts1[k])
dir2 = (dir2 == "" ? parts2[k] : dir2 "/" parts2[k])
}
w1 = (lname1 in custom_order ? custom_order[lname1] : 999999)
w2 = (lname2 in custom_order ? custom_order[lname2] : 999999)
if (i == n1) {
pr1 = get_priority(p1)
} else {
ent1 = (dir1 == "" ? name1 : dir1 "/" name1)
pr1 = get_priority(ent1)
}
if (i == n2) {
pr2 = get_priority(p2)
} else {
ent2 = (dir2 == "" ? name2 : dir2 "/" name2)
pr2 = get_priority(ent2)
}
if (pr1 > 0 || pr2 > 0) {
if (pr1 < pr2) return -1
if (pr1 > pr2) return 1
}
if (w1 < w2) return -1
if (w1 > w2) return 1
if (lname1 < lname2) return -1
if (lname1 > lname2) return 1
}
}
if (n1 < n2) return -1
if (n1 > n2) return 1
return 0
@@ -137,6 +76,7 @@ BEGIN {
src = ENVIRON["AWK_SRC"]
single_file_index = ENVIRON["AWK_SINGLE_FILE_INDEX"]
flatten = ENVIRON["AWK_FLATTEN"]
order = ENVIRON["AWK_ORDER"]
home_name = ENVIRON["AWK_HOME_NAME"]
show_home_in_nav = ENVIRON["AWK_SHOW_HOME_IN_NAV"]
dinfo = ENVIRON["AWK_DINFO"]
@@ -147,6 +87,16 @@ BEGIN {
d_dirs[dparts[1]] = dparts[3]
}
}
n_order = split(order, oparts, ",")
for (i = 1; i <= n_order; i++) {
name = oparts[i]
sub(/^[[:space:]]*/, "", name)
sub(/[[:space:]]*$/, "", name)
if (name != "") {
custom_order[tolower(name)] = i
}
}
}
{

View File

@@ -170,17 +170,10 @@ eval "find \"$src\" \( $IGNORE_ARGS \) -prune -o -type d -print" | sort | while
label="$p_date $p_time"
fi
fi
if [ -n "$fm_priority" ]; then
prio_val="$fm_priority"
else
prio_val="0"
fi
if [ "$is_post_entry" = "true" ]; then
prio_key=$(printf '%05d' "$prio_val")
sort_key="${prio_key} ${p_date} ${p_time}"
sort_key="${p_date} ${p_time}"
else
prio_key=$(printf '%05d' "$((99999 - prio_val))")
sort_key="${prio_key} $name"
sort_key="$name"
fi
echo "${sort_key}|- [$label](${name%.md}.html)|$name|${name%.md}.html" >> "$temp_entries"
else

View File

@@ -5,6 +5,7 @@ draft_by_default = false
dir_indexes = true
single_file_index = true
flatten = false
order = ""
home_name = "Home"
show_home_in_nav = true
nav_links = ""
@@ -66,6 +67,7 @@ footer="made with <a href=\"https://kewt.krzak.org\">kewt</a>"
dir_indexes="true"
single_file_index="true"
flatten="false"
order=""
home_name="Home"
show_home_in_nav="true"
nav_links=""
@@ -125,6 +127,7 @@ load_config() {
dir_indexes) dir_indexes="$val" ;;
single_file_index) single_file_index="$val" ;;
flatten) flatten="$val" ;;
order) order="$val" ;;
home_name) home_name="$val" ;;
show_home_in_nav) show_home_in_nav="$val" ;;
nav_links) nav_links="$val" ;;

View File

@@ -8,7 +8,7 @@ generate_nav() {
if [ -n "$posts_dir" ] && [ -d "$1/$posts_dir" ]; then
find_cmd="$find_cmd && echo \"$1/$posts_dir/index.md\""
fi
eval "$find_cmd" | sort -u | AWK_SRC="$1" AWK_SINGLE_FILE_INDEX="$single_file_index" AWK_FLATTEN="$flatten" AWK_HOME_NAME="$home_name" AWK_SHOW_HOME_IN_NAV="$show_home_in_nav" AWK_DINFO="$dinfo" awk -f "$awk_dir/generate_sidebar.awk"
eval "$find_cmd" | sort -u | AWK_SRC="$1" AWK_SINGLE_FILE_INDEX="$single_file_index" AWK_FLATTEN="$flatten" AWK_ORDER="$order" AWK_HOME_NAME="$home_name" AWK_SHOW_HOME_IN_NAV="$show_home_in_nav" AWK_DINFO="$dinfo" awk -f "$awk_dir/generate_sidebar.awk"
}
escape_html_text() {
printf '%s' "$1" | sed \
@@ -34,7 +34,6 @@ parse_frontmatter() {
fm_description=""
fm_content_warning=""
fm_tags=""
fm_priority=""
while IFS='=' read -r _fk _fv; do
case "$_fk" in
title) fm_title="$_fv" ;;
@@ -43,7 +42,6 @@ parse_frontmatter() {
description) fm_description="$_fv" ;;
content_warning) fm_content_warning="$_fv" ;;
tags) fm_tags="$_fv" ;;
priority) fm_priority="$_fv" ;;
esac
done < "$_fm_out"
rm -f "$_fm_out"

View File

@@ -1,6 +1,3 @@
---
priority = 0
---
# Hello!
![the greatest drawing of a blobfish in the world](blobfish.bmp)

View File

@@ -1,6 +1,3 @@
---
priority = 2
---
# Depths
This is a custom index for a directory

View File

@@ -1,6 +1,5 @@
---
title = "Configuration"
priority = 2
---
# Configuration
@@ -14,6 +13,7 @@ draft_by_default = false
dir_indexes = true
single_file_index = true
flatten = false
order = ""
home_name = "Home"
show_home_in_nav = true
nav_links = ""
@@ -49,6 +49,7 @@ include_cw_pages_in_search = false
- `dir_indexes` - generate directory index pages when missing `index.md`
- `single_file_index` - if a directory has one markdown file and no `index.md`, use that file as `index.html`
- `flatten` - flatten sidebar directory levels
- `order` - comma separated file/directory name list to order the sidebar (alphabetical by default)
- `home_name` - text for the home link in navigation (default: "Home")
- `show_home_in_nav` - show home link in navigation (default: true)
- `nav_links` - comma separated extra nav links, as bare URLs or Markdown links like `[Label](https://example.com)`

View File

@@ -1,6 +1,5 @@
---
title = "Embeds"
priority = 5
---
# Embeds

View File

@@ -1,6 +1,5 @@
---
title = "Frontmatter"
priority = 4
---
# Frontmatter
@@ -13,7 +12,6 @@ date = "2026-03-23 11:32"
draft = false
description = "A short page summary"
tags = "example, tutorial"
priority = 10
---
```
- `title` - overrides the page title, post name in index links, and RSS `<title>`.
@@ -22,4 +20,3 @@ priority = 10
- `description` - page description, used for Open Graph `og:description` meta tag.
- `tags` - comma separated list of tags. Used for tag index generation when `generate_tags` is enabled in `site.conf`.
- `content_warning` - if set, creates an interstitial warning page that the user must click through. If set to `true` uses a generic warning, otherwise uses your string.
- `priority` - numeric value for ordering. Lower values sort first in the sidebar and directory indexes. Falls back to alphabetical/date ordering when not set or when items share the same priority.

View File

@@ -1,6 +1,5 @@
---
title = "Documentation"
priority = 0
---
# Documentation

View File

@@ -1,6 +1,5 @@
---
title = "Installation"
priority = 0
---
# Installation

View File

@@ -1,6 +1,5 @@
---
title = "Markdown Extensions"
priority = 7
---
# Markdown Extensions

View File

@@ -1,6 +1,5 @@
---
title = "Quickstart"
priority = 1
---
# Quickstart

View File

@@ -1,6 +1,5 @@
---
title = "Templates"
priority = 8
---
# Templates

View File

@@ -1,6 +1,5 @@
---
title = "Theming"
priority = 6
---
# Theming
@@ -14,8 +13,10 @@ priority = 6
| Kewt Light | `kewt-light` | Light |
| Nord | `nord` | Dark |
| Nord Light | `nord-light` | Light |
| Monokai | `mono` | Dark |
| Monokai Light | `mono-light` | Light |
| Monokai | `monokai` | Dark |
| Monokai Light | `monokai-light` | Light |
| Grayscale | `grayscale` | Dark |
| Grayscale Light | `grayscale-light` | Light |
| One Dark | `onedark` | Dark |
| One Light | `onelight` | Light |
| Rose Pine | `rosepine` | Dark |

View File

@@ -1,6 +1,5 @@
---
title = "Usage"
priority = 3
---
# Usage

View File

@@ -1,6 +1,5 @@
---
title = "Heaven"
priority = 3
content_warning = "This page may contain CSS"
---
# Heaven

View File

@@ -1,7 +1,3 @@
---
title = "Home"
priority = 0
---
# _kewt_
### Pronounced "cute"
@@ -18,7 +14,7 @@ It's meant to be a static site generator, like _[kew](https://github.com/uint23/
## Features
- No dependencies
- Frontmatter support (title, date, draft, description, priority)
- Frontmatter support (title, date, draft, description)
- Supports many embed types
- Automatic css variable replacement for older browsers
- Automatic inlining and embedding of many filetypes with `\![link]` or `\![alt](link)`

View File

@@ -9,6 +9,7 @@ display_logo = false
display_title = true
logo_as_favicon = false
favicon = "favicon.ico"
order = "Home, docs, depths, heaven"
home_name = "Home"
show_home_in_nav = true
nav_links = ""

View File

@@ -0,0 +1,27 @@
:root {
--bg: #fafaf8;
--bg-deep: #f0efe8;
--fg: #272822;
--fg-muted: #8f8e84;
--fg-link: #5c8a1e;
--fg-heading: #272822;
--code-bg: #f0efe8;
--code-border: #cccbc2;
--code-fg: #272822;
--code-sel: #5c8a1e;
--code-prop: #c41e6a;
--code-val: #7a3ee0;
--code-var: #2e8faf;
--code-com: #8f8e84;
--adm-note-bg: #edf4f7;
--adm-note-border: #2e8faf;
--adm-tip-bg: #eef7ed;
--adm-tip-border: #5c8a1e;
--adm-important-bg: #f2eef7;
--adm-important-border: #7a3ee0;
--adm-warning-bg: #f7f5ed;
--adm-warning-border: #b0a01e;
--adm-caution-bg: #f7edee;
--adm-caution-border: #c41e6a;
--thead-bg: #f0efe8;
}

27
styles/monokai.root.css Normal file
View File

@@ -0,0 +1,27 @@
:root {
--bg: #272822;
--bg-deep: #1e1f1c;
--fg: #f8f8f2;
--fg-muted: #75715e;
--fg-link: #a6e22e;
--fg-heading: #f8f8f2;
--code-bg: #1e1f1c;
--code-border: #49483e;
--code-fg: #f8f8f2;
--code-sel: #a6e22e;
--code-prop: #f92672;
--code-val: #ae81ff;
--code-var: #66d9ef;
--code-com: #75715e;
--adm-note-bg: #272822;
--adm-note-border: #66d9ef;
--adm-tip-bg: #272822;
--adm-tip-border: #a6e22e;
--adm-important-bg: #272822;
--adm-important-border: #ae81ff;
--adm-warning-bg: #272822;
--adm-warning-border: #e6db74;
--adm-caution-bg: #272822;
--adm-caution-border: #f92672;
--thead-bg: #1e1f1c;
}