]> Lady’s Gitweb - Blog/commitdiff
Initial commit
authorLady <redacted>
Sun, 30 Apr 2023 23:34:10 +0000 (16:34 -0700)
committerLady <redacted>
Sun, 30 Apr 2023 23:47:10 +0000 (16:47 -0700)
#feed.rdf [new file with mode: 0644]
.gitignore [new file with mode: 0644]
.rsync-filter [new file with mode: 0644]
GNUmakefile [new file with mode: 0644]
README.markdown [new file with mode: 0644]
index#entry.xhtml [new file with mode: 0644]
index#feed.xhtml [new file with mode: 0644]
style.css [new file with mode: 0644]

diff --git a/#feed.rdf b/#feed.rdf
new file mode 100644 (file)
index 0000000..94c1196
--- /dev/null
+++ b/#feed.rdf
@@ -0,0 +1,13 @@
+<awol:Feed
+       rdf:about="https://blog.ladys.computer"
+       xml:lang="en"
+       xmlns:awol="http://bblfish.net/work/atom-owl/2006-06-06/"
+       xmlns:dc11="http://purl.org/dc/elements/1.1/"
+       xmlns:foaf="http://xmlns.com/foaf/0.1/"
+       xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+>
+       <dc11:title>Lady’s Weblog</dc11:title>
+       <dc11:creator>
+               <foaf:Person foaf:name="Lady"/>
+       </dc11:creator>
+</awol:Feed>
diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..84c3d5a
--- /dev/null
@@ -0,0 +1,4 @@
+.grass
+%*
+index.xhtml
+feed.atom
diff --git a/.rsync-filter b/.rsync-filter
new file mode 100644 (file)
index 0000000..b238190
--- /dev/null
@@ -0,0 +1,10 @@
+-s .DS_Store
+-s .git
+-s .gitignore
+-s /GNUmakefile
+-s /.grass
+- /.rsync-filter
+-s README*
+-s #*
+-s %*
+-s index#*.xhtml
diff --git a/GNUmakefile b/GNUmakefile
new file mode 100644 (file)
index 0000000..91854b9
--- /dev/null
@@ -0,0 +1,55 @@
+SHELL = /bin/sh
+
+# © 2023 Lady [@ Lady’s Computer].
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+BEORN_VERSION = 0.1.0
+BEORN = https://git.ladys.computer/Beorn/blob_plain/$(BEORN_VERSION):/build.js
+
+# This Makefile requires rsync 3 or newer.
+RSYNC = rsync
+RSYNC_FLAGS = -Oclmrtvz
+RSYNC_OPTIONS =
+RSYNC_FILTER = .rsync-filter
+
+SOURCE_CHARSET = utf-8-mac
+
+DESTINATION_HOST = computer
+DESTINATION_PATH = lady/www
+DESTINATION = $(DESTINATION_HOST):$(DESTINATION_PATH)
+DESTINATION_CHARSET = utf-8
+
+RSYNC_OPTIONS =
+SOURCE_CHARSET = utf-8-mac
+DESTINATION_CHARSET = utf-8
+DESTINATION_HOST = computer
+DESTINATION_PATH = lady/blog
+DESTINATION = $(DESTINATION_HOST):$(DESTINATION_PATH)
+
+build:
+       deno run --allow-read=. --allow-write=. $(BEORN)
+       touch .grass
+
+ensure-build:
+       @if [ ! -f .grass ]; then echo 'Error: The website has not been built yet!' >&2; echo 'Run `make` before syncing.' >&2; exit 1; fi
+       @if buildtime=$$(stat -f '%m' .grass) && committime=$$(git log -1 --format='%ct' | awk '{print $$NF}') && [ "$$committime" -gt "$$buildtime" ]; then echo 'Error: A commit was made after the last build!' >&2; echo 'Run `make` before syncing.' >&2; exit 1; fi
+
+ensure-branch-up-to-date:
+       git fetch
+       @if ! git merge-base --is-ancestor @{u} HEAD; then echo 'Error: This branch is currently out‐of‐date!' >&2; echo 'Pull in changes with `git pull` before syncing.' >&2; exit 1; fi
+
+ensure-clean:
+       @if output=$$(git status --porcelain) && [ ! -z "$$output" ]; then echo 'Error: There are uncommitted changes!' >&2; echo 'Commit changes and run `make` before syncing.' >&2; exit 1; fi
+       @if output=$$(git status --porcelain) && [ ! -z "$$output" ]; then echo 'Error: There are uncommitted changes!' >&2; echo 'Commit changes and run `make` before syncing.' >&2; exit 1; fi
+
+dry-sync: ensure-clean ensure-branch-up-to-date ensure-build
+       $(RSYNC) $(RSYNC_FLAGS) --del --dry-run --filter=". $(RSYNC_FILTER)" --iconv=$(SOURCE_CHARSET),$(DESTINATION_CHARSET) $(RSYNC_OPTIONS) . $(DESTINATION)
+
+sync: ensure-clean ensure-branch-up-to-date ensure-build
+       $(RSYNC) $(RSYNC_FLAGS) --del --filter=". $(RSYNC_FILTER)" --iconv=$(SOURCE_CHARSET),$(DESTINATION_CHARSET) $(RSYNC_OPTIONS) . $(DESTINATION)
+       git push --force
+
+.PHONY: build dry-sync ensure-branch-up-to-date ensure-build ensure-clean sync;
diff --git a/README.markdown b/README.markdown
new file mode 100644 (file)
index 0000000..ba28921
--- /dev/null
@@ -0,0 +1,17 @@
+# Lady’s Blog
+
+This blog is manually built and updated with the aid of GNU Make (see
+`GNUmakefile`; requires `deno` as well as `rsync` >= 3). The commands
+are pretty simple…
+
+```sh
+make blog # builds the blog
+make dry-sync # optional; to see what will be updated
+make sync # syncs the changes and also updates the remote repo
+```
+
+`make dry-sync` and `make sync` will refuse to run if the working tree
+isn’t clean or if the last‐modified time of `.grass` is less than the
+commit time of the latest commit—this is to ensure that the remote
+repository and the built website don’t differ. `.grass` is touched each
+time the blog builds.
diff --git a/index#entry.xhtml b/index#entry.xhtml
new file mode 100644 (file)
index 0000000..1a6aefe
--- /dev/null
@@ -0,0 +1,19 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+       <link rel="stylesheet" type="text/css" href="/style.css"/>
+</head>
+<body>
+       <header>
+               <a href="https://www.ladys.computer/"><img alt="Lady’s Computer: MY computer over YOUR internets" src="https://www.ladys.computer/media/banner.png" width="468" height="60"/></a>
+       </header>
+       <main>
+               <header><p>Lady’s Weblog</p></header>
+<bjørn-content/>
+               <footer>
+                       <p><strong>Navigation:</strong> <a href="#">Top</a> ∣ <a href="https://blog.ladys.computer">Home</a></p>
+               </footer>
+       </main>
+       <footer>
+       </footer>
+</body>
+</html>
diff --git a/index#feed.xhtml b/index#feed.xhtml
new file mode 100644 (file)
index 0000000..a121a34
--- /dev/null
@@ -0,0 +1,15 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+       <link rel="stylesheet" type="text/css" href="/style.css"/>
+</head>
+<body>
+       <header>
+               <a href="https://www.ladys.computer/"><img alt="Lady’s Computer: MY computer over YOUR internets" src="https://www.ladys.computer/media/banner.png" width="468" height="60"/></a>
+       </header>
+       <main>
+<bjørn-content/>
+       </main>
+       <footer>
+       </footer>
+</body>
+</html>
diff --git a/style.css b/style.css
new file mode 100644 (file)
index 0000000..ca0996a
--- /dev/null
+++ b/style.css
@@ -0,0 +1,38 @@
+html{ Color: #E3E3E3; Background: #1A1A1A; Font-Family: Serif; Line-Height: 1.5 }
+body{ Display: Flow-Root; Box-Sizing: Border-Box; Margin: 0; Border: 1PX #000000 Solid; Min-Block-Size: 100VH; Color: #E3E3E3; Background: No-Repeat Radial-Gradient(Ellipse 64REM 96REM At Center, Transparent 32REM, #1A1A1A) Center / Cover, Repeating-Linear-Gradient(-45DEG, #3E3E3E00 0, #3E3E3E00 2PX, #3E3E3E7F 2.12PX, #3E3E3E7F 4.12PX, #3E3E3E00 4.24PX), #1A1A1A }
+body>header{ Padding-Block: 16PX; Border-Block-End: 3PX #2CB38D Double }
+body>header img{ Display: Block; Margin: Auto; Image-Rendering: Pixelated }
+body>footer{ Border-Block-Start: 3PX #2CB38D Double }
+main{ Display: Flow-Root; Margin: Auto; Border-Inline: 1PX #97596B Solid; Padding-Inline: 3CH; Max-Width: 43REM; Background: #1A1A1A }
+main>header>p,main>nav>header>h1{ Margin-Block: 1.5REM; Border: 2PX #700020 Solid; Padding-Inline: 1CH; Max-Inline-Size: Max-Content; Color: #700020; Background: #F3DEE3; Box-Shadow: 0 0 0 2PX #F3DEE3, 2PX 2PX 0 2PX #2CB38D, -2PX -2PX 0 2PX #700020; Font-Size: 1.5REM; Font-Style: Italic; Font-Weight: Normal }
+main>footer>p,main>nav>footer>p{ Display: Block; Margin-Block: 1.5REM; Margin-Inline: Auto; Border-Style: Solid; Border-Block-Color: #D6B7BF #2CB38D; Border-Inline-Color: #D6B7BF #2CB38D; Border-Width: 1PX; Padding-Inline: 1CH; Max-Inline-Size: Max-Content; Color: #700020; Background: #F3DEE3; Box-Shadow: 0 0 0 1PX #700020, Inset 0 0 0 1PX #700020 }
+main>nav>footer>p{ Margin-Inline: Auto 0 }
+nav ul[rel="http://bblfish.net/work/atom-owl/2006-06-06/entry"]{ All: Unset }
+main>article,nav li[resource]{ Display: Flow-Root; Position: Relative; Margin-Block: 3REM 1.5REM; Border-Inline-Start: 2PX #700020 Dotted; Padding-Block: 1REM; Padding-Inline: Calc(5REM + 2CH) 2CH; Color: #1A1A1A; Background: No-Repeat Radial-Gradient(Circle At 2REM 3.5REM, #700020 .725REM, Transparent .775REM) Top Left / 4REM 12REM, No-Repeat Linear-Gradient(To Left, #992244 1PX, Transparent 1PX) Left / 5REM, No-Repeat Linear-Gradient(To Top, #2CB38D 1PX, Transparent 1PX) Top / Auto 5REM, #F3DEE3; Box-Shadow: 3PX 3PX 0 1PX #000000 }
+main>article>header>h1,nav li[resource]>a{ Display: Flex; Align-Items: End; Margin-Block: -1REM 0; Padding-Block: .5REM; Block-Size: 4REM; Overflow: Auto; Font-Size: 1.5REM; Font-Style: Italic; Font-Weight: Inherit; Line-Height: 2REM }
+nav li[resource]>a>h3{ All: Unset }
+nav li[resource] p:has([rel="http://purl.org/dc/elements/1.1/creator"]){ Display: None }
+nav li[resource] [rel="http://purl.org/dc/elements/1.1/creator"]:First-Child::before{ Content: "A blogpost by " }
+nav li[resource] [rel="http://purl.org/dc/elements/1.1/creator"]:Last-Child::after{ Content: "." }
+#entry\.author{ Margin-Block-End: 0; Margin-Inline: -1CH; Border: Thin #700020 Solid; Padding-Inline: 1CH; Color: #000000; Background: #D6B7BF; Box-Shadow: -2PX -2PX #992244, -4PX -4PX #B38A96; Font-Style: Italic }
+#entry\.author::before{ Content: "A blogpost by " }
+#entry\.author::after{ Content: "." }
+#entry\.published,main>article #entry\.updated,nav li[resource] time[property="http://purl.org/dc/elements/1.1/date"]{ Position: Absolute; Inset-Block: -1REM Auto; Inset-Inline: 2CH Auto; Margin: 0; Border-Style: Solid; Border-Block-Color: #E7BD51 #9DFF9D; Border-Inline-Color: #E7BD51 #9DFF9D; Border-Width: 1PX; Padding-Inline: 1CH; Inline-Size: Max-Content; Max-Inline-Size: 80%; Color: #001B5F; Background: #F0E3C0; Box-Shadow: 0 0 0 1PX #8F6600, Inset 0 0 0 1PX #8F6600, -1CH 0 0 1PX #0040E1; Opacity: Calc(23 / 24) }
+main>article #entry\.updated{ Inset-Block: Auto -1REM; Inset-Inline: Auto 2CH; Border-Block-Color: #9DFF9D #E7BD51; Border-Inline-Color: #9DFF9D #E7BD51 }
+nav li[resource] time[property="http://purl.org/dc/elements/1.1/date"]::before{ Content: "Published: " }
+nav li[resource] time[property="http://purl.org/dc/elements/1.1/date"]::after{ Content: "." }
+#entry\.content,#entry\.rights,nav li[resource] div[property="http://purl.org/dc/elements/1.1/abstract"]{ Display: Flow-Root; Margin-Block: 0 -1REM; Margin-Inline: -2CH; Padding-Block: .25REM; Padding-Inline: 2CH; Background: #FFFFFFCF; Box-Shadow: Inset 0 0 0 .5CH #F3DEE3; Counter-Reset(P) }
+#entry\.content{ Position: Relative; Margin-Block-End: .5REM }
+#entry\.rights{ Margin-Block: .5REM; Border-Block: 1PX #686868 Solid; Color: #3E3E3E; Background: #E3E3E3; Box-Shadow: Inset 0 0 1CH #939393; Text-Align: Center }
+#entry\.rights>*{ Font-Size: Smaller }
+#entry\.content::before{ Position: Absolute; Inset-Block: .5CH; Inset-Inline-Start: -4REM; Border-Block: 1PX #97596B Dashed; Border-Inline-Start: 1PX #97596B Dashed; Border-Start-Start-Radius: 1CH; Border-End-Start-Radius: 1CH; Inline-Size: 1CH; Box-Shadow: Inset 0 0 0 1PX #F3DEE3, Inset -2PX 0 0 0 #F3DEE3, Inset 2PX 0 0 0 #B38A96; Content: "" }
+#entry\.content p{ Counter-Increment: P }
+#entry\.content p::before{ Position: Absolute; Inset-Inline-Start: -4REM; Inset-Inline-End: 100%; Margin-Block: -1PX; Margin-Inline: Auto; Border: 1PX Solid; Border-Radius: 50%; Padding-Inline: 1CH; Inline-Size: Max-Content; Color: #1F7D63; Text-Align: Center; Content: "¶" Counter(P) }
+nav li[resource] div[property="http://purl.org/dc/elements/1.1/abstract"]{ Padding-Inline-Start: 4CH }
+nav li[resource] div[property="http://purl.org/dc/elements/1.1/abstract"]::before{ Display: Block; Margin-Block: .5EM; Margin-Inline: -2CH 0; Font-Style: Italic; Font-Weight: Bold; Letter-Spacing: Calc(1EM / 18); Text-Decoration: Underline; Content: "Summary:" }
+blockquote{ Border-Block-Color: #8396A9 #373F47; Border-Inline-Color: #8396A9 #373F47; Border-Style: Solid; Padding: .5REM 1CH; Color: #001B5F; Background: #E3E3E3; Box-Shadow: -2PX -2PX #D8E3FF, 2PX 2PX #6B95FF; Font-Style: Italic }
+p{ Margin-Block: .5EM }
+:Any-Link{ Color: #3AE6B5 }
+main :Any-Link{ Color: #1F7D63 }
+main>footer :Any-Link{ Color: Inherit; Font-Style: Italic }
+main small{ Color: #700020 }
This page took 0.06167 seconds and 4 git commands to generate.