From: Lady Date: Sun, 30 Apr 2023 23:34:10 +0000 (-0700) Subject: Initial commit X-Git-Url: https://git.ladys.computer/Blog/commitdiff_plain/83bc234ec85eb999b0cf22776883611d98de329c?ds=sidebyside Initial commit --- 83bc234ec85eb999b0cf22776883611d98de329c diff --git a/#feed.rdf b/#feed.rdf new file mode 100644 index 0000000..94c1196 --- /dev/null +++ b/#feed.rdf @@ -0,0 +1,13 @@ + + Lady’s Weblog + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..84c3d5a --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.grass +%* +index.xhtml +feed.atom diff --git a/.rsync-filter b/.rsync-filter new file mode 100644 index 0000000..b238190 --- /dev/null +++ b/.rsync-filter @@ -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 index 0000000..91854b9 --- /dev/null +++ b/GNUmakefile @@ -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 index 0000000..ba28921 --- /dev/null +++ b/README.markdown @@ -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 index 0000000..1a6aefe --- /dev/null +++ b/index#entry.xhtml @@ -0,0 +1,19 @@ + + + + + +
+ Lady’s Computer: MY computer over YOUR internets +
+
+

Lady’s Weblog

+ + +
+ + + diff --git a/index#feed.xhtml b/index#feed.xhtml new file mode 100644 index 0000000..a121a34 --- /dev/null +++ b/index#feed.xhtml @@ -0,0 +1,15 @@ + + + + + +
+ Lady’s Computer: MY computer over YOUR internets +
+
+ +
+ + + diff --git a/style.css b/style.css new file mode 100644 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 }