tangled
alpha
login
or
join now
anirudh.fi
/
site
3
fork
atom
my website at https://anirudh.fi
3
fork
atom
overview
issues
pulls
pipelines
all: clean up and migrate to tailwind
anirudh.fi
10 months ago
6ccf8197
9c0da0e7
verified
This commit was signed with the committer's
known signature
.
anirudh.fi
SSH Key Fingerprint:
SHA256:cz35vdbiWEzCNEfuL9fMC2JVIhtXavXBHrRjv8gxpAk=
+287
-410
28 changed files
expand all
collapse all
unified
split
.gitignore
bin
serve.sh
config.yaml
flake.lock
flake.nix
input.css
pages
photos
budapest-winter-2024.yaml
static
bluesky.svg
cc.svg
fedi.svg
git.svg
gpg.txt
honk.svg
rss.svg
syntax.css
webring.svg
white.svg
tailwind.config.js
templates
blog.html
index.html
page.html
partials
footer.html
head.html
nav.html
photoindex.html
photos.html
reading.html
text.html
+1
.gitignore
···
4
4
.direnv
5
5
.aider*
6
6
.env
7
7
+
static/styles/tw.css
+1
-1
bin/serve.sh
···
16
16
trap "kill_vite" INT
17
17
18
18
"$vite" serve &
19
19
-
find pages/ static/ templates/ | entr "$vite" build --drafts
19
19
+
find input.css tailwind.config.js pages/ static/ templates/ | entr "$vite" build --drafts
20
20
21
21
trap SIGINT
+4
-3
config.yaml
···
1
1
title: Anirudh Oppiliappan
2
2
-
# note the trailing slash!
3
2
url: "https://anirudh.fi/"
4
3
description: ""
5
4
author:
6
6
-
name: "Anirudh Oppiliappan"
7
7
-
email: "anirudh@oppiliappan.com"
5
5
+
name: "Anirudh Oppiliappan"
6
6
+
email: "anirudh@oppiliappan.com"
8
7
defaultTemplate: text.html
8
8
+
preBuild:
9
9
+
- tailwindcss -i input.css -o static/styles/tw.css
+12
-12
flake.lock
···
2
2
"nodes": {
3
3
"nixpkgs": {
4
4
"locked": {
5
5
-
"lastModified": 1737316331,
6
6
-
"narHash": "sha256-Gev1DE6Or+xzTIiTRrvnmVyUHj6x/Gtk6EO4iJJ58So=",
5
5
+
"lastModified": 1748204564,
6
6
+
"narHash": "sha256-eSYjZMXGo7BGaaREt9LdGKCUEobIwvvb9/2OjpEhWxI=",
7
7
"owner": "nixos",
8
8
"repo": "nixpkgs",
9
9
-
"rev": "20d2e6da70836953b778f6cd95e9312e65391ef9",
9
9
+
"rev": "7ed13552a51b57aab87896737cbef2853aa684d7",
10
10
"type": "github"
11
11
},
12
12
"original": {
···
41
41
"nixpkgs": "nixpkgs_2"
42
42
},
43
43
"locked": {
44
44
-
"lastModified": 1737316691,
45
45
-
"narHash": "sha256-EUo4/8wpIF8ZposFbH+d77c2wDzR8/oGA2qE7nVDo+Y=",
46
46
-
"owner": "icyphox",
47
47
-
"repo": "go-vite",
48
48
-
"rev": "39b8d08cf911e22d238d5b30f18434a346c02733",
49
49
-
"type": "github"
44
44
+
"lastModified": 1745387732,
45
45
+
"narHash": "sha256-CdHBCqAzRynF39kDEktFNtYgD5f7vFIkKFupPIZhORY=",
46
46
+
"ref": "refs/heads/master",
47
47
+
"rev": "a64168bad0f8492be51dbb22991e12f2607ec3e2",
48
48
+
"revCount": 92,
49
49
+
"type": "git",
50
50
+
"url": "https://tangled.sh/@icyphox.sh/vite"
50
51
},
51
52
"original": {
52
52
-
"owner": "icyphox",
53
53
-
"repo": "go-vite",
54
54
-
"type": "github"
53
53
+
"type": "git",
54
54
+
"url": "https://tangled.sh/@icyphox.sh/vite"
55
55
}
56
56
}
57
57
},
+3
-1
flake.nix
···
2
2
description = "site";
3
3
4
4
inputs.nixpkgs.url = "github:nixos/nixpkgs";
5
5
-
inputs.vite.url = "github:icyphox/go-vite";
5
5
+
inputs.vite.url = "git+https://tangled.sh/@icyphox.sh/vite";
6
6
7
7
outputs =
8
8
{ self
···
34
34
pkgs.gnumake
35
35
pkgs.entr
36
36
pkgs.awscli2
37
37
+
pkgs.tailwindcss_4
37
38
];
38
39
};
39
40
}
40
41
);
42
42
+
41
43
42
44
apps = forAllSystems (
43
45
system:
+150
input.css
···
1
1
+
@import "tailwindcss";
2
2
+
3
3
+
@layer base {
4
4
+
@theme {
5
5
+
--color-cyan: #509c93;
6
6
+
--color-light: #fff9eb;
7
7
+
--color-light-gray: #fceccc;
8
8
+
--color-medium-gray: #e6dcd1;
9
9
+
--color-mediumer-gray: #d8cbbe;
10
10
+
--color-gray: #776e63;
11
11
+
--color-dark: #4a443d;
12
12
+
--color-darker: #2a261f;
13
13
+
--color-warm: #fffdf5;
14
14
+
--color-fg: #100f0f;
15
15
+
--color-selection: rgba(143, 105, 213, 0.2);
16
16
+
17
17
+
--color-dark-light: #2a261f;
18
18
+
--color-dark-light-gray: #4a443d;
19
19
+
--color-dark-medium-gray: #6b635a;
20
20
+
--color-dark-gray: #d3cec1;
21
21
+
--color-dark-fg: #fff6e3;
22
22
+
--color-dark-dark: #e6dcd1;
23
23
+
--color-dark-darker: #fff9eb;
24
24
+
--color-dusk: #100f0f;
25
25
+
--color-dark-selection: rgba(80, 156, 147, 0.2);
26
26
+
27
27
+
--breakpoint-md: 400px;
28
28
+
}
29
29
+
30
30
+
h1 {
31
31
+
@apply text-2xl;
32
32
+
@apply font-medium;
33
33
+
@apply pt-4 pb-3;
34
34
+
}
35
35
+
36
36
+
h2 {
37
37
+
@apply text-xl;
38
38
+
@apply font-normal;
39
39
+
@apply text-darker;
40
40
+
@apply pt-4 pb-3;
41
41
+
}
42
42
+
43
43
+
::selection {
44
44
+
@apply bg-selection;
45
45
+
@apply dark:bg-dark-selection;
46
46
+
}
47
47
+
48
48
+
html {
49
49
+
@apply bg-warm dark:bg-dusk;
50
50
+
@apply text-fg dark:text-dark-fg;
51
51
+
}
52
52
+
53
53
+
main {
54
54
+
@apply text-base p-0 font-normal;
55
55
+
@apply text-base/relaxed;
56
56
+
article {
57
57
+
@apply py-5;
58
58
+
p {
59
59
+
@apply py-2;
60
60
+
}
61
61
+
strong {
62
62
+
@apply font-medium;
63
63
+
}
64
64
+
65
65
+
ul {
66
66
+
@apply list-disc;
67
67
+
@apply mx-8 my-2;
68
68
+
@apply marker:text-mediumer-gray;
69
69
+
}
70
70
+
71
71
+
ol {
72
72
+
counter-reset: counter;
73
73
+
li {
74
74
+
counter-increment: counter;
75
75
+
}
76
76
+
@apply list-decimal;
77
77
+
@apply mx-8 my-2;
78
78
+
@apply marker:text-gray;
79
79
+
}
80
80
+
81
81
+
code {
82
82
+
@apply bg-light text-[0.9rem];
83
83
+
}
84
84
+
pre {
85
85
+
@apply bg-light p-4 my-2 overflow-x-auto overflow-y-hidden;
86
86
+
}
87
87
+
88
88
+
.footnotes {
89
89
+
hr {
90
90
+
@apply border-t border-light-gray pt-6 mt-6;
91
91
+
}
92
92
+
}
93
93
+
94
94
+
.footnotes > ol li {
95
95
+
@apply flex items-center gap-3;
96
96
+
}
97
97
+
98
98
+
.footnotes > ol li::before {
99
99
+
@apply content-[counter(counter)];
100
100
+
@apply rounded-full text-center leading-4 text-light bg-cyan;
101
101
+
@apply w-4 h-4 text-xs inline-block flex-shrink-0;
102
102
+
}
103
103
+
104
104
+
.footnote-ref a {
105
105
+
@apply no-underline text-light rounded-full text-center bg-cyan border-b-0;
106
106
+
@apply w-3 h-3 text-[0.6rem] leading-3 inline-block;
107
107
+
}
108
108
+
109
109
+
.footnotes > ol li p {
110
110
+
@apply m-0 leading-4;
111
111
+
}
112
112
+
113
113
+
.footnote-return {
114
114
+
@apply border-b-0 text-cyan ml-auto;
115
115
+
}
116
116
+
117
117
+
.footnote-return:hover {
118
118
+
@apply border-b-0 text-cyan ml-auto;
119
119
+
}
120
120
+
121
121
+
.footnotes ol li:not(:last-child) {
122
122
+
@apply pb-8;
123
123
+
}
124
124
+
}
125
125
+
}
126
126
+
127
127
+
body {
128
128
+
@apply max-w-[655px];
129
129
+
@apply px-4 pt-8 pb-80;
130
130
+
@apply my-4 mx-auto;
131
131
+
}
132
132
+
133
133
+
a {
134
134
+
@apply text-darker dark:text-gray;
135
135
+
@apply border-b border-medium-gray hover:border-gray;
136
136
+
}
137
137
+
138
138
+
img {
139
139
+
@apply max-w-full;
140
140
+
@apply w-full;
141
141
+
@apply block;
142
142
+
@apply mx-auto my-[10px_auto_4px_auto];
143
143
+
@apply rounded-md;
144
144
+
}
145
145
+
146
146
+
.row {
147
147
+
@apply flex flex-col md:flex-row items-center justify-between;
148
148
+
@apply gap-4 md:gap-2;
149
149
+
}
150
150
+
}
+1
-1
pages/photos/budapest-winter-2024.yaml
···
6
6
camera: Canon EOS 55
7
7
lens: 50mm f/1.8
8
8
film: Mira 400 and Lomo 400
9
9
-
date: 2024-02-01
9
9
+
date: "2024-02-01"
10
10
11
11
defaults:
12
12
width: 1000
-3
static/bluesky.svg
···
1
1
-
<svg width="568" height="501" viewBox="0 0 568 501" fill="none" xmlns="http://www.w3.org/2000/svg">
2
2
-
<path d="M123.121 33.6637C188.241 82.5526 258.281 181.681 284 234.873C309.719 181.681 379.759 82.5526 444.879 33.6637C491.866 -1.61183 568 -28.9064 568 57.9464C568 75.2916 558.055 203.659 552.222 224.501C531.947 296.954 458.067 315.434 392.347 304.249C507.222 323.8 536.444 388.56 473.333 453.32C353.473 576.312 301.061 422.461 287.631 383.039C285.169 375.812 284.017 372.431 284 375.306C283.983 372.431 282.831 375.812 280.369 383.039C266.939 422.461 214.527 576.312 94.6667 453.32C31.5556 388.56 60.7778 323.8 175.653 304.249C109.933 315.434 36.0535 296.954 15.7778 224.501C9.94525 203.659 0 75.2916 0 57.9464C0 -28.9064 76.1345 -1.61183 123.121 33.6637Z" fill="black"/>
3
3
-
</svg>
-18
static/cc.svg
···
1
1
-
<?xml version="1.0" encoding="iso-8859-1"?>
2
2
-
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
3
3
-
viewBox="0 0 96 96" style="enable-background:new 0 0 96 96;" xml:space="preserve">
4
4
-
<g>
5
5
-
<path style="fill:#030104;" d="M47.358,0.004C20.85,0.357-0.351,22.133,0.004,48.641c0.354,26.507,22.129,47.71,48.637,47.354
6
6
-
c26.506-0.354,47.71-22.129,47.354-48.638C95.642,20.85,73.862-0.352,47.358,0.004z M48.506,85.892
7
7
-
c-20.928,0.279-38.119-16.459-38.398-37.388C9.829,27.578,26.567,10.387,47.493,10.107C68.42,9.828,85.61,26.564,85.891,47.492
8
8
-
C86.17,68.421,69.432,85.61,48.506,85.892z M36.254,56.132c-2.027,0-3.562-0.738-4.602-2.219c-1.041-1.479-1.559-3.45-1.559-5.915
9
9
-
c0-5.42,2.053-8.131,6.16-8.131c0.82,0,1.711,0.273,2.668,0.82c0.957,0.549,1.766,1.508,2.424,2.875l6.16-3.203
10
10
-
c-2.463-4.436-6.545-6.654-12.24-6.654c-3.889,0-7.104,1.287-9.648,3.861c-2.547,2.574-3.822,6.051-3.822,10.432
11
11
-
c0,4.491,1.262,7.997,3.779,10.517s5.834,3.777,9.941,3.777c2.572,0,4.928-0.645,7.062-1.93c2.135-1.287,3.807-3.053,5.012-5.299
12
12
-
l-5.67-2.876C40.825,54.817,38.936,56.132,36.254,56.132z M62.786,56.132c-2.027,0-3.561-0.738-4.6-2.219
13
13
-
c-1.041-1.479-1.561-3.45-1.561-5.915c0-5.42,2.053-8.131,6.16-8.131c0.875,0,1.793,0.273,2.75,0.82
14
14
-
c0.959,0.549,1.768,1.508,2.426,2.875l6.076-3.203c-2.41-4.436-6.461-6.654-12.156-6.654c-3.889,0-7.105,1.287-9.652,3.861
15
15
-
c-2.545,2.574-3.816,6.051-3.816,10.432c0,4.491,1.244,7.997,3.736,10.517c2.49,2.52,5.818,3.777,9.98,3.777
16
16
-
c2.518,0,4.846-0.645,6.98-1.93c2.135-1.287,3.832-3.053,5.094-5.299l-5.75-2.876C67.358,54.817,65.467,56.132,62.786,56.132z"/>
17
17
-
</g>
18
18
-
</svg>
-21
static/fedi.svg
···
1
1
-
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
2
-
<!-- Created with Inkscape (http://www.inkscape.org/) -->
3
3
-
4
4
-
<svg
5
5
-
width="26.45833mm"
6
6
-
height="25.582479mm"
7
7
-
viewBox="0 0 26.458331 25.582479"
8
8
-
version="1.1"
9
9
-
id="svg1"
10
10
-
xml:space="preserve"
11
11
-
xmlns="http://www.w3.org/2000/svg"
12
12
-
xmlns:svg="http://www.w3.org/2000/svg"><defs
13
13
-
id="defs1" /><g
14
14
-
id="layer1"
15
15
-
transform="translate(-87.047916,-131.23333)"><g
16
16
-
id="g66"
17
17
-
transform="matrix(0.74021505,0,0,0.74021505,452.38455,-3.3651489)"
18
18
-
style="stroke-width:1.35096"><path
19
19
-
id="path140"
20
20
-
style="-inkscape-font-specification:'Fungal @grow=542,TCHK=321';stroke-linecap:square;stroke-linejoin:round"
21
21
-
d="m -476.94278,181.83699 v 1.05836 l 0.43493,6.90588 -5.76304,-3.82923 -0.91664,-0.52918 -1.26012,2.18235 0.91594,0.52918 6.19867,3.07595 -6.19867,3.07664 -0.91594,0.52918 1.26012,2.18305 0.91594,-0.52918 5.76374,-3.82993 -0.43493,6.90588 v 1.05836 h 2.52024 v -1.05836 l -0.43494,-6.90588 5.76374,3.82993 0.91594,0.52918 1.26012,-2.18305 -0.91594,-0.52918 -6.19797,-3.07664 6.19797,-3.07595 0.91594,-0.52918 -1.26012,-2.18235 -0.91594,0.52918 -5.76374,3.82923 0.43494,-6.90588 v -1.05836 z m -9.10707,15.77349 v 1.05836 l 0.43493,6.90518 -5.76304,-3.82923 -0.91664,-0.52918 -1.26012,2.18304 0.91664,0.52918 6.19797,3.07595 -6.19797,3.07665 -0.91664,0.52918 1.26012,2.18304 0.91664,-0.52918 5.76304,-3.82992 -0.43493,6.90587 v 1.05836 h 2.52093 v -1.05836 l -0.43493,-6.90587 5.76304,3.82992 0.91664,0.52918 1.26012,-2.18304 -0.91664,-0.52918 -6.19797,-3.07665 6.19797,-3.07595 0.91664,-0.52918 -1.26012,-2.18304 -0.91664,0.52918 -5.76304,3.82923 0.43493,-6.90518 v -1.05836 z m 18.21414,0 v 1.05836 l 0.43493,6.90588 -5.76374,-3.82993 -0.91664,-0.52918 -1.26012,2.18304 0.91664,0.52918 6.19728,3.07595 -6.19728,3.07665 -0.91664,0.52918 1.26012,2.18304 0.91664,-0.52918 5.76374,-3.82992 -0.43493,6.90587 v 1.05836 h 2.52024 v -1.05836 l -0.43494,-6.90587 5.76304,3.82992 0.91664,0.52918 1.26012,-2.18304 -0.91664,-0.52918 -6.19727,-3.07665 6.19727,-3.07595 0.91664,-0.52918 -1.26012,-2.18304 -0.91664,0.52918 -5.76304,3.82923 0.43494,-6.90518 v -1.05836 z" /></g></g></svg>
-52
static/git.svg
···
1
1
-
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
2
-
<!-- Created with Inkscape (http://www.inkscape.org/) -->
3
3
-
4
4
-
<svg
5
5
-
xmlns:dc="http://purl.org/dc/elements/1.1/"
6
6
-
xmlns:cc="http://creativecommons.org/ns#"
7
7
-
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
8
-
xmlns:svg="http://www.w3.org/2000/svg"
9
9
-
xmlns="http://www.w3.org/2000/svg"
10
10
-
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
11
-
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
12
-
id="svg2"
13
13
-
version="1.1"
14
14
-
inkscape:version="0.91 r13725"
15
15
-
xml:space="preserve"
16
16
-
width="114.8625"
17
17
-
height="114.8625"
18
18
-
viewBox="0 0 114.8625 114.8625"
19
19
-
sodipodi:docname="Git-Icon-Black.svg"><metadata
20
20
-
id="metadata8"><rdf:RDF><cc:Work
21
21
-
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
22
22
-
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
23
23
-
id="defs6" /><sodipodi:namedview
24
24
-
pagecolor="#ffffff"
25
25
-
bordercolor="#666666"
26
26
-
borderopacity="1"
27
27
-
objecttolerance="10"
28
28
-
gridtolerance="10"
29
29
-
guidetolerance="10"
30
30
-
inkscape:pageopacity="0"
31
31
-
inkscape:pageshadow="2"
32
32
-
inkscape:window-width="702"
33
33
-
inkscape:window-height="480"
34
34
-
id="namedview4"
35
35
-
showgrid="false"
36
36
-
inkscape:zoom="2.0546305"
37
37
-
inkscape:cx="57.431252"
38
38
-
inkscape:cy="57.431252"
39
39
-
inkscape:window-x="0"
40
40
-
inkscape:window-y="25"
41
41
-
inkscape:window-maximized="0"
42
42
-
inkscape:current-layer="g10" /><g
43
43
-
id="g10"
44
44
-
inkscape:groupmode="layer"
45
45
-
inkscape:label="ink_ext_XXXXXX"
46
46
-
transform="matrix(1.25,0,0,-1.25,0,114.8625)"><g
47
47
-
id="g12"
48
48
-
transform="scale(0.1,0.1)"><path
49
49
-
d="M 901.547,500.352 500.355,901.527 c -23.093,23.11 -60.566,23.11 -83.691,0 L 333.363,818.211 439.039,712.535 c 24.559,8.293 52.723,2.727 72.293,-16.847 19.688,-19.696 25.207,-48.102 16.699,-72.75 L 629.887,521.094 c 24.648,8.496 53.066,3.004 72.754,-16.711 27.5,-27.492 27.5,-72.059 0,-99.574 -27.52,-27.516 -72.078,-27.516 -99.61,0 -20.683,20.703 -25.801,51.097 -15.312,76.582 l -95,94.992 0,-249.969 c 6.699,-3.32 13.027,-7.742 18.613,-13.312 27.5,-27.497 27.5,-72.059 0,-99.598 -27.5,-27.488 -72.09,-27.488 -99.57,0 -27.5,27.539 -27.5,72.101 0,99.598 6.797,6.789 14.668,11.925 23.066,15.363 l 0,252.281 c -8.398,3.438 -16.25,8.531 -23.066,15.367 -20.828,20.821 -25.84,51.395 -15.157,76.977 L 292.426,777.285 17.3281,502.211 c -23.10544,-23.129 -23.10544,-60.602 0,-83.711 L 418.539,17.3242 c 23.098,-23.10545 60.559,-23.10545 83.691,0 L 901.547,416.641 c 23.117,23.113 23.117,60.605 0,83.711"
50
50
-
style="fill:#100f0d;fill-opacity:1;fill-rule:nonzero;stroke:none"
51
51
-
id="path14"
52
52
-
inkscape:connector-curvature="0" /></g></g></svg>
-60
static/gpg.txt
···
1
1
-
-----BEGIN PGP PUBLIC KEY BLOCK-----
2
2
-
3
3
-
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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
WzyRdTzIWMJQk8RnoGIXIiw2F7NkCcZhhZFf6xtiXc4eNHkDbUvc5KK6HK5ZaPqA
14
14
-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
-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
-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
-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
-
wWIi8VccjoqT+W94xdTEBQJdVDBjGx0Ac3dpdGNoIHRvIHBlcnNvbmFsIGRvbWFp
19
19
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
vlY02Eqa8Cs2tdUchNurHM3/jL2wvTpAPG9gAiapeKhYYm4GK4nay68htiTXWI2V
36
36
-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
-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
-
pBZLS9b24QYrouoCMa5jQovRhTFtr0K7b1EPJcx8u2LaD+VEbCoZGOb58ZMOU1Hi
39
39
-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
-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
-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
-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
-
GO1UUk6qEcs9s/SD47qfE+wxbpIA6QSo0ZyQ83PAb6kDtQjhibF9x9kWp2xEm2Oa
44
44
-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
-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
-
uXZoskxCV5F0l/XNDDC6cqtXS/Y6CLkBDQRZ/GHQAQgAvZ423gfhwidyiQ+ybDfj
47
47
-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
-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
-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
-
i4Xoj2k6fj8V9P6njsEn0FgnL2HHEWgWJXU5MvLK9ylfqphY06MftmEVZWinrblB
51
51
-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
-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
-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
-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
-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
-
cfDRybivjKPDErCF7G2n+8Z6QQrU3jib4BBhmztiXOqfuvefOYMS+jAlTgOOtXoI
57
57
-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
-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
59
59
-
=hrUE
60
60
-
-----END PGP PUBLIC KEY BLOCK-----
-29
static/honk.svg
···
1
1
-
<?xml version="1.0" standalone="no"?>
2
2
-
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
3
3
-
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
4
4
-
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
5
5
-
width="128.000000pt" height="128.000000pt" viewBox="0 0 128.000000 128.000000"
6
6
-
preserveAspectRatio="xMidYMid meet">
7
7
-
8
8
-
<g transform="translate(0.000000,128.000000) scale(0.100000,-0.100000)"
9
9
-
fill="#000000" stroke="none">
10
10
-
<path d="M0 640 l0 -640 640 0 640 0 0 640 0 640 -640 0 -640 0 0 -640z m550
11
11
-
470 c0 -14 -9 -21 -37 -25 -92 -15 -83 8 -83 -200 l0 -185 220 0 220 0 0 185
12
12
-
c0 208 9 185 -82 200 -29 4 -38 11 -38 25 0 19 8 20 190 20 182 0 190 -1 190
13
13
-
-20 0 -14 -9 -21 -37 -25 -21 -3 -48 -8 -60 -11 l-23 -4 0 -414 0 -414 60 -7
14
14
-
c55 -6 60 -9 60 -31 l0 -24 -190 0 -190 0 0 24 c0 22 5 25 60 31 l60 7 0 199
15
15
-
0 199 -220 0 -220 0 0 -199 0 -199 60 -7 c55 -6 60 -9 60 -31 l0 -24 -190 0
16
16
-
-190 0 0 24 c0 22 5 25 60 31 l60 7 0 414 0 414 -22 4 c-13 3 -40 8 -60 11
17
17
-
-29 4 -38 11 -38 25 0 19 8 20 190 20 182 0 190 -1 190 -20z m210 -672 l1 -53
18
18
-
24 28 c13 15 32 27 41 27 13 0 12 -4 -6 -18 -26 -21 -22 -45 11 -80 l20 -22
19
19
-
-26 0 c-15 0 -25 6 -25 14 0 7 -7 19 -15 26 -12 10 -16 9 -21 -5 -4 -10 -1
20
20
-
-21 7 -26 9 -5 -10 -9 -51 -9 -39 0 -60 4 -52 9 9 5 12 22 9 50 -5 48 -10 56
21
21
-
-32 48 -19 -8 -21 -93 -2 -100 6 -3 -4 -6 -23 -6 -23 0 -30 2 -21 8 9 6 12 24
22
22
-
10 60 l-4 52 45 -3 45 -3 3 -52 c3 -45 6 -53 23 -53 17 0 19 7 19 74 0 50 -4
23
23
-
76 -12 79 -7 3 -3 6 10 6 20 1 22 -4 22 -51z m-192 -10 c16 -16 16 -80 0 -96
24
24
-
-7 -7 -26 -12 -43 -12 -40 0 -55 16 -55 60 0 44 15 60 55 60 17 0 36 -5 43
25
25
-
-12z"/>
26
26
-
<path d="M500 406 c-13 -35 4 -79 28 -74 13 3 17 13 17 48 0 35 -4 45 -17 48
27
27
-
-12 2 -21 -6 -28 -22z"/>
28
28
-
</g>
29
29
-
</svg>
-3
static/rss.svg
···
1
1
-
<svg width="1536" height="1536" xmlns="http://www.w3.org/2000/svg">
2
2
-
<path d="M384 1344c0 106-86 192-192 192S0 1450 0 1344s86-192 192-192 192 86 192 192zm512 123c1 18-5 35-17 48-12 14-29 21-47 21H697c-33 0-60-25-63-58-29-305-271-547-576-576-33-3-58-30-58-63V704c0-18 7-35 21-47 11-11 27-17 43-17h5c213 17 414 110 565 262 152 151 245 352 262 565zm512 2c1 17-5 34-18 47-12 13-28 20-46 20h-143c-34 0-62-26-64-60C1104 895 641 432 60 398c-34-2-60-30-60-63V192c0-18 7-34 20-46 12-12 28-18 44-18h3c350 18 679 165 927 414 249 248 396 577 414 927z"/>
3
3
-
</svg>
-74
static/syntax.css
···
1
1
-
/* Background */ .bg { background-color: #ffffff }
2
2
-
/* PreWrapper */ .chroma { background-color: #ffffff; }
3
3
-
/* Error */ .chroma .err { color: #a61717; background-color: #e3d2d2 }
4
4
-
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
5
5
-
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; }
6
6
-
/* LineHighlight */ .chroma .hl { background-color: #e5e5e5 }
7
7
-
/* LineNumbersTable */ .chroma .lnt { white-space: pre; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
8
8
-
/* LineNumbers */ .chroma .ln { white-space: pre; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
9
9
-
/* Line */ .chroma .line { display: flex; }
10
10
-
/* Keyword */ .chroma .k { color: #000000; font-weight: bold }
11
11
-
/* KeywordConstant */ .chroma .kc { color: #000000; font-weight: bold }
12
12
-
/* KeywordDeclaration */ .chroma .kd { color: #000000; font-weight: bold }
13
13
-
/* KeywordNamespace */ .chroma .kn { color: #000000; font-weight: bold }
14
14
-
/* KeywordPseudo */ .chroma .kp { color: #000000; font-weight: bold }
15
15
-
/* KeywordReserved */ .chroma .kr { color: #000000; font-weight: bold }
16
16
-
/* KeywordType */ .chroma .kt { color: #222222; font-weight: bold }
17
17
-
/* NameAttribute */ .chroma .na { color: #509c93 }
18
18
-
/* NameBuiltin */ .chroma .nb { color: #509c93 }
19
19
-
/* NameBuiltinPseudo */ .chroma .bp { color: #999999 }
20
20
-
/* NameClass */ .chroma .nc { color: #666666; font-weight: bold }
21
21
-
/* NameConstant */ .chroma .no { color: #509c93 }
22
22
-
/* NameDecorator */ .chroma .nd { color: #3c5d5d; font-weight: bold }
23
23
-
/* NameEntity */ .chroma .ni { color: #509c93 }
24
24
-
/* NameException */ .chroma .ne { color: #444444; font-weight: bold }
25
25
-
/* NameFunction */ .chroma .nf { color: #444444; font-weight: bold }
26
26
-
/* NameLabel */ .chroma .nl { color: #444444; font-weight: bold }
27
27
-
/* NameNamespace */ .chroma .nn { color: #555555 }
28
28
-
/* NameTag */ .chroma .nt { color: #444444}
29
29
-
/* NameVariable */ .chroma .nv { color: #509c93 }
30
30
-
/* NameVariableClass */ .chroma .vc { color: #509c93 }
31
31
-
/* NameVariableGlobal */ .chroma .vg { color: #509c93 }
32
32
-
/* NameVariableInstance */ .chroma .vi { color: #509c93 }
33
33
-
/* LiteralString */ .chroma .s { color: #509c93 }
34
34
-
/* LiteralStringAffix */ .chroma .sa { color: #509c93 }
35
35
-
/* LiteralStringBacktick */ .chroma .sb { color: #509c93 }
36
36
-
/* LiteralStringChar */ .chroma .sc { color: #509c93 }
37
37
-
/* LiteralStringDelimiter */ .chroma .dl { color: #509c93 }
38
38
-
/* LiteralStringDoc */ .chroma .sd { color: #509c93 }
39
39
-
/* LiteralStringDouble */ .chroma .s2 { color: #509c93 }
40
40
-
/* LiteralStringEscape */ .chroma .se { color: #509c93 }
41
41
-
/* LiteralStringHeredoc */ .chroma .sh { color: #509c93 }
42
42
-
/* LiteralStringInterpol */ .chroma .si { color: #509c93 }
43
43
-
/* LiteralStringOther */ .chroma .sx { color: #509c93 }
44
44
-
/* LiteralStringRegex */ .chroma .sr { color: #009926 }
45
45
-
/* LiteralStringSingle */ .chroma .s1 { color: #509c93 }
46
46
-
/* LiteralStringSymbol */ .chroma .ss { color: #990073 }
47
47
-
/* LiteralNumber */ .chroma .m { color: #509c93 }
48
48
-
/* LiteralNumberBin */ .chroma .mb { color: #509c93 }
49
49
-
/* LiteralNumberFloat */ .chroma .mf { color: #509c93 }
50
50
-
/* LiteralNumberHex */ .chroma .mh { color: #509c93 }
51
51
-
/* LiteralNumberInteger */ .chroma .mi { color: #509c93 }
52
52
-
/* LiteralNumberIntegerLong */ .chroma .il { color: #509c93 }
53
53
-
/* LiteralNumberOct */ .chroma .mo { color: #509c93 }
54
54
-
/* Operator */ .chroma .o { color: #000000; font-weight: bold }
55
55
-
/* OperatorWord */ .chroma .ow { color: #000000; font-weight: bold }
56
56
-
/* Comment */ .chroma .c { color: #999988; font-style: italic }
57
57
-
/* CommentHashbang */ .chroma .ch { color: #999988; font-style: italic }
58
58
-
/* CommentMultiline */ .chroma .cm { color: #999988; font-style: italic }
59
59
-
/* CommentSingle */ .chroma .c1 { color: #999988; font-style: italic }
60
60
-
/* CommentSpecial */ .chroma .cs { color: #999999; font-weight: bold; font-style: italic }
61
61
-
/* CommentPreproc */ .chroma .cp { color: #999999; font-weight: bold; font-style: italic }
62
62
-
/* CommentPreprocFile */ .chroma .cpf { color: #999999; font-weight: bold; font-style: italic }
63
63
-
/* GenericDeleted */ .chroma .gd { color: #000000; background-color: #ffdddd }
64
64
-
/* GenericEmph */ .chroma .ge { color: #000000; font-style: italic }
65
65
-
/* GenericError */ .chroma .gr { color: #aa0000 }
66
66
-
/* GenericHeading */ .chroma .gh { color: #999999 }
67
67
-
/* GenericInserted */ .chroma .gi { color: #000000; background-color: #ddffdd }
68
68
-
/* GenericOutput */ .chroma .go { color: #888888 }
69
69
-
/* GenericPrompt */ .chroma .gp { color: #555555 }
70
70
-
/* GenericStrong */ .chroma .gs { font-weight: bold }
71
71
-
/* GenericSubheading */ .chroma .gu { color: #aaaaaa }
72
72
-
/* GenericTraceback */ .chroma .gt { color: #aa0000 }
73
73
-
/* GenericUnderline */ .chroma .gl { text-decoration: underline }
74
74
-
/* TextWhitespace */ .chroma .w { color: #bbbbbb }
-13
static/webring.svg
···
1
1
-
<svg class="vector" width="300px" height="300px" xmlns="http://www.w3.org/2000/svg" baseProfile="full" version="1.1" style="fill:none;stroke:black;stroke-width:28px;stroke-linecap:square;">
2
2
-
<g transform="translate(0,30)">
3
3
-
<g transform="translate(150,150),rotate(120,0,0)">
4
4
-
<path d="M0,-60 a60,60 0 1,0 0,120 l100,0"></path>
5
5
-
</g>
6
6
-
<g transform="translate(150,150),rotate(240,0,0)">
7
7
-
<path d="M0,-60 a60,60 0 1,0 0,120 l100,0"></path>
8
8
-
</g>
9
9
-
<g transform="translate(150,150),rotate(0,0,0)">
10
10
-
<path d="M0,-60 a60,60 0 1,0 0,120 l100,0"></path>
11
11
-
</g>
12
12
-
</g>
13
13
-
</svg>
-33
static/white.svg
···
1
1
-
<?xml version="1.0" standalone="no"?>
2
2
-
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
3
3
-
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
4
4
-
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
5
5
-
width="619.000000pt" height="619.000000pt" viewBox="0 0 619.000000 619.000000"
6
6
-
preserveAspectRatio="xMidYMid meet">
7
7
-
<metadata>
8
8
-
Created by potrace 1.16, written by Peter Selinger 2001-2019
9
9
-
</metadata>
10
10
-
<g transform="translate(0.000000,619.000000) scale(0.100000,-0.100000)"
11
11
-
fill="#000000" stroke="none">
12
12
-
<path d="M583 4666 c4 -10 9 -28 12 -39 8 -36 105 -457 120 -522 8 -33 26
13
13
-
-109 40 -170 14 -60 37 -157 50 -215 14 -58 36 -154 51 -215 29 -127 59 -255
14
14
-
79 -340 8 -33 37 -159 65 -280 74 -320 77 -330 89 -327 16 3 1091 853 1091
15
15
-
862 0 5 -1446 1147 -1564 1235 -30 23 -38 25 -33 11z"/>
16
16
-
<path d="M4819 4055 c-436 -344 -795 -628 -797 -633 -3 -9 1069 -860 1089
17
17
-
-864 12 -3 15 7 89 327 28 121 57 247 65 280 20 85 50 213 79 340 15 61 37
18
18
-
157 51 215 13 58 36 155 50 215 14 61 32 137 40 170 8 33 37 159 65 280 27
19
19
-
121 54 236 60 254 5 19 8 36 7 38 -2 1 -361 -279 -798 -622z"/>
20
20
-
<path d="M2244 3239 c-176 -138 -323 -255 -328 -260 -8 -7 1171 -1749 1184
21
21
-
-1749 13 0 1192 1742 1184 1749 -5 5 -152 122 -328 260 l-318 251 -538 0 -538
22
22
-
0 -318 -251z"/>
23
23
-
<path d="M1150 2373 c-338 -267 -626 -494 -639 -504 -13 -11 -22 -21 -20 -23
24
24
-
2 -2 83 -25 179 -50 96 -25 209 -54 250 -65 41 -11 127 -33 190 -50 63 -16
25
25
-
158 -41 210 -54 52 -14 176 -46 275 -72 99 -26 212 -55 250 -65 181 -48 310
26
26
-
-81 415 -109 63 -16 178 -46 255 -66 248 -65 360 -94 362 -91 2 2 -1099 1621
27
27
-
-1111 1633 -1 1 -278 -217 -616 -484z"/>
28
28
-
<path d="M3877 2043 c-306 -449 -556 -818 -554 -819 2 -3 115 26 362 91 77 20
29
29
-
192 50 255 66 105 28 234 61 415 109 39 10 151 39 250 65 99 26 223 58 275 72
30
30
-
52 13 147 38 210 54 63 17 149 39 190 50 41 11 154 40 250 65 170 44 188 50
31
31
-
179 57 -5 5 -1251 988 -1264 998 -6 5 -226 -308 -568 -808z"/>
32
32
-
</g>
33
33
-
</svg>
+30
tailwind.config.js
···
1
1
+
module.exports = {
2
2
+
content: ["./templates/**/*.html", "./pages/**/*.md"],
3
3
+
darkMode: "media",
4
4
+
theme: {
5
5
+
container: {
6
6
+
padding: "2rem",
7
7
+
center: true,
8
8
+
screens: {
9
9
+
sm: "500px",
10
10
+
md: "600px",
11
11
+
lg: "800px",
12
12
+
xl: "1000px",
13
13
+
"2xl": "1200px",
14
14
+
},
15
15
+
},
16
16
+
extend: {
17
17
+
fontFamily: {
18
18
+
sans: ["--apple-system", "system-ui", "sans-serif", "ui-sans-serif"],
19
19
+
},
20
20
+
typography: {
21
21
+
DEFAULT: {
22
22
+
css: {
23
23
+
maxWidth: "75ch",
24
24
+
},
25
25
+
},
26
26
+
},
27
27
+
},
28
28
+
},
29
29
+
plugins: [require("@tailwindcss/typography")],
30
30
+
};
+25
-20
templates/blog.html
···
2
2
<html lang=en>
3
3
<head>
4
4
{{ template "partials/head.html" }}
5
5
-
<link rel="alternate" type="application/rss+xml" title="RSS" href="https://icyphox.sh/blog/feed.xml">
5
5
+
<link rel="alternate" type="application/rss+xml" title="RSS" href="https://anirudh.fi/blog/feed.xml">
6
6
<meta name="description" content="{{ index .Meta "subtitle" }}">
7
7
</head>
8
8
···
11
11
</title>
12
12
<body>
13
13
<main>
14
14
-
<div class="sidenav">
14
14
+
<div>
15
15
{{ template "partials/nav.html" }}
16
16
</div>
17
17
+
18
18
+
<article>
17
19
<h1>{{ index .Meta "title" }}</h1>
18
20
{{ .Body }}
19
21
20
20
-
<section class="posts">
21
21
-
<ul>
22
22
-
{{ $posts := .Extra }}
23
23
-
{{ range $posts }}
24
24
-
<li>
25
25
-
<div class="post">
26
26
-
<a href=/{{ .Meta.slug }}>{{ .Meta.title }}</a>
27
27
-
{{ if .Meta.draft }}
28
28
-
(<span class="draft">draft</span>)
29
29
-
{{ end }}
30
30
-
<p class="subtitle">{{ .Meta.subtitle }}</p>
31
31
-
</div>
32
32
-
{{ $dateStr := .Meta.date }}
33
33
-
{{ $date := parsedate $dateStr }}
34
34
-
<div class="index-date">{{ $date.Format "02 Jan, 2006" }}</div>
35
35
-
</li>
36
36
-
{{ end }}
37
37
-
</ul>
22
22
+
<section class="mt-12">
23
23
+
<ul class="m-0 p-0">
24
24
+
{{ $posts := .Extra }}
25
25
+
{{ range $posts }}
26
26
+
<li class="list-none py-2">
27
27
+
<div class="flex md:flex-row flex-col justify-between">
28
28
+
<div>
29
29
+
<a href=/{{ .Meta.slug }}>{{ .Meta.title }}</a>
30
30
+
{{ if .Meta.draft }}
31
31
+
(<span class="text-red-200">draft</span>)
32
32
+
{{ end }}
33
33
+
<p class="text-gray">{{ .Meta.subtitle }}</p>
34
34
+
</div>
35
35
+
{{ $dateStr := .Meta.date }}
36
36
+
{{ $date := parsedate $dateStr }}
37
37
+
<div class="index-date text-gray lowercase">{{ $date.Format "02 Jan, 2006" }}</div>
38
38
+
</div>
39
39
+
</li>
40
40
+
{{ end }}
41
41
+
</ul>
38
42
</section>
43
43
+
</article>
39
44
</main>
40
45
<footer>
41
46
{{ template "partials/footer.html" }}
+11
-11
templates/index.html
···
13
13
{{ template "partials/nav.html" }}
14
14
</div>
15
15
<article>
16
16
-
<section class="tagline">
16
16
+
<section class="my-12 py-12 border-b border-light-gray">
17
17
{{ .Body }}
18
18
</section>
19
19
20
20
-
<hr>
21
21
-
22
22
-
<section class="posts">
23
23
-
<h2>writing</h2>
24
24
-
<ul>
20
20
+
<section>
21
21
+
<h2 class="pb-6">writing</h2>
22
22
+
<ul class="m-0 p-0">
25
23
{{ $posts := .Extra.blog }}
26
24
{{ range slice $posts 0 3 }}
27
27
-
<li>
28
28
-
<div class="post">
25
25
+
<li class="list-none py-2">
26
26
+
<div class="flex md:flex-row flex-col justify-between">
27
27
+
<div>
29
28
<a href=/{{ .Meta.slug }}>{{ .Meta.title }}</a>
30
29
{{ if .Meta.draft }}
31
30
(<span class="draft">draft</span>)
32
31
{{ end }}
33
33
-
<p class="subtitle">{{ .Meta.subtitle }}</p>
32
32
+
<p class="text-gray">{{ .Meta.subtitle }}</p>
34
33
</div>
35
34
{{ $dateStr := .Meta.date }}
36
35
{{ $date := parsedate $dateStr }}
37
37
-
<div class="index-date">{{ $date.Format "02 Jan, 2006" }}</div>
36
36
+
<div class="text-gray lowercase">{{ $date.Format "02 Jan, 2006" }}</div>
37
37
+
</div>
38
38
</li>
39
39
{{ end }}
40
40
</ul>
41
41
-
<a style="border-bottom: unset;" href="/blog/"><span>more →</span></a>
41
41
+
<a class="border-b-0" href="/blog/"><span>more →</span></a>
42
42
</section>
43
43
</article>
44
44
</main>
+1
-1
templates/page.html
···
13
13
{{ template "partials/nav.html" }}
14
14
</div>
15
15
<article align="left">
16
16
-
<h1>{{ index .Meta "title" }}</h1>
16
16
+
<h1 class="">{{ index .Meta "title" }}</h1>
17
17
{{ .Body }}
18
18
</article>
19
19
</main>
+7
-9
templates/partials/footer.html
···
1
1
-
<hr>
2
2
-
3
3
-
<div class="footer">
4
4
-
<p class="muted">
5
5
-
Follow via <a href="/blog/feed.xml">RSS</a>,
6
6
-
<a href="https://x.com/icyphox">X</a>,
7
7
-
<a href="https://bsky.app/profile/icyphox.sh">Bluesky</a>,
8
8
-
and <a href="/about#contact">more</a>.
9
9
-
</p>
1
1
+
<div class="border-t border-light-gray pt-6 mt-6">
2
2
+
<p class="text-gray">
3
3
+
Follow via <a class="text-cyan border-b border-b-cyan" href="/blog/feed.xml">RSS</a>,
4
4
+
<a class="border-b border-b-cyan text-cyan" href="https://bsky.app/profile/icyphox.sh">Bluesky</a>,
5
5
+
<a class="border-b border-b-cyan text-cyan" href="https://x.com/icyphox">X</a>, and
6
6
+
<a class="border-b border-b-cyan text-cyan" href="/about#contact">more</a>.
7
7
+
</p>
10
8
</div>
+1
-1
templates/partials/head.html
···
1
1
-
<link rel="stylesheet" href="/static/style.css" type="text/css" />
1
1
+
<link rel="stylesheet" href="/static/styles/tw.css" type="text/css" />
2
2
<meta name="viewport" content="initial-scale=1,width" />
3
3
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
4
4
<meta charset="UTF-8" />
+4
-3
templates/partials/nav.html
···
1
1
-
<nav>
2
2
-
<div class="logo">
1
1
+
<nav class="flex items-center justify-between w-full">
2
2
+
<div class="flex-shrink-0">
3
3
<a href="/">
4
4
<svg
5
5
+
class="max-h-10 max-w-10 fill-fg"
5
6
version="1.0"
6
7
xmlns="http://www.w3.org/2000/svg"
7
8
width="619.000000pt"
···
46
47
</svg>
47
48
</a>
48
49
</div>
49
49
-
<ul>
50
50
+
<ul class="flex space-x-3">
50
51
<li><a href="/reading">reading</a></li>
51
52
<li><a href="/photos">photos</a></li>
52
53
<li><a href="/about">about</a></li>
+8
-6
templates/photoindex.html
···
27
27
<article align="left">
28
28
<h1>{{ .Meta.title }}</h1>
29
29
{{ .Body }}
30
30
-
<section class="posts">
31
31
-
<ul>
30
30
+
<section class="mt-12">
31
31
+
<ul class="m-0 p-0">
32
32
{{ $posts := .Extra }}
33
33
{{ range $posts }}
34
34
-
<li>
35
35
-
<div class="post">
34
34
+
<li class="list-none py-2">
35
35
+
<div class="flex md:flex-row flex-col justify-between">
36
36
+
<div>
36
37
<a href=/photos/{{ .Meta.slug }}>{{ .Meta.title }} — {{ .Meta.season }}</a>
37
37
-
<p class="subtitle">{{ .Meta.camera }} · {{ .Meta.lens }} · {{ .Meta.film }}</p>
38
38
+
<p class="text-gray">{{ .Meta.camera }} · {{ .Meta.lens }} · {{ .Meta.film }}</p>
38
39
</div>
39
40
{{ $dateStr := .Meta.date }}
40
41
{{ $date := parsedate $dateStr }}
41
41
-
<div class="index-date">{{ $date.Format "02 Jan, 2006" }}</div>
42
42
+
<div class="text-gray lowercase">{{ $date.Format "02 Jan, 2006" }}</div>
43
43
+
</div>
42
44
</li>
43
45
{{ end }}
44
46
</ul>
+3
-9
templates/photos.html
···
3
3
<head>
4
4
{{ template "partials/head.html" }}
5
5
<meta name="description" content="{{ index .Meta "subtitle" }}">
6
6
-
<style>
7
7
-
h1 {
8
8
-
margin: 0px;
9
9
-
padding: 0px;
10
10
-
}
11
11
-
</style>
12
6
</head>
13
7
<title>
14
8
{{ .Meta.title }} ({{ .Meta.season }}) — {{ .Cfg.Title }}
15
9
</title>
16
10
<body>
17
11
<main>
18
18
-
<div class="sidenav">
12
12
+
<div>
19
13
{{ template "partials/nav.html" }}
20
14
</div>
21
15
<article align="left">
22
16
<h1>{{ .Meta.title }} — {{ .Meta.season }}</h1>
23
17
<h2 class="subtitle"> {{ .Meta.camera }} · {{ .Meta.lens }} · {{ .Meta.film }} </h2>
24
24
-
<div class="image-grid">
18
18
+
<div class="columns-1 md:columns-2">
25
19
{{ $photos := .Yaml.photos }}
26
20
{{ $d := .Yaml.defaults }}
27
21
{{ range $photos }}
28
22
<a href="https://cdn.icyphox.sh/{{ . }}">
29
29
-
<img src="https://cdn.icyphox.sh/fit?url=http://files.garage.koti.lan/{{ . }}&width={{ $d.width }}&height={{ $d.height }}" />
23
23
+
<img class="object-cover relative w-full mb-3" src="https://cdn.icyphox.sh/fit?url=http://files.garage.koti.lan/{{ . }}&width={{ $d.width }}&height={{ $d.height }}" />
30
24
</a>
31
25
{{- end }}
32
26
</div>
+14
-12
templates/reading.html
···
20
20
{{- range $i, $yearMap := $books }}
21
21
{{- range $year, $books := $yearMap }}
22
22
<h2>{{ $year }}</h2>
23
23
-
<section class="book-posts">
24
24
-
<ul>
25
25
-
{{- range $book := $books }}
26
26
-
<li>
27
27
-
<div class="post">
28
28
-
<a href="{{ $book.link }}">{{ $book.name }}</a>
29
29
-
<p class="subtitle author">{{ $book.author }}</p>
30
30
-
</div>
31
31
-
<span class="status">{{ $book.status }}</span>
32
32
-
</li>
33
33
-
{{- end }}
34
34
-
</ul>
23
23
+
<section class="mt-4">
24
24
+
<ul class="m-0 p-0">
25
25
+
{{- range $book := $books }}
26
26
+
<li class="list-none py-2">
27
27
+
<div class="flex md:flex-row flex-col justify-between">
28
28
+
<div>
29
29
+
<a href="{{ $book.link }}">{{ $book.name }}</a>
30
30
+
<p class="text-gray">{{ $book.author }}</p>
31
31
+
</div>
32
32
+
<span class="text-gray lowercase">{{ $book.status }}</span>
33
33
+
</div>
34
34
+
</li>
35
35
+
{{- end }}
36
36
+
</ul>
35
37
</section>
36
38
{{- end }}
37
39
{{- end }}
+11
-14
templates/text.html
···
9
9
</title>
10
10
<body>
11
11
<main>
12
12
-
<div class="sidenav">
12
12
+
<div>
13
13
{{ template "partials/nav.html" }}
14
14
</div>
15
15
-
<article align="left">
16
16
-
<section class="post-date">
15
15
+
<article>
16
16
+
<section class="text-gray lowercase">
17
17
{{ $dateStr := index .Meta "date" }}
18
18
{{ $date := parsedate $dateStr }}
19
19
{{ $date.Format "02 Jan, 2006" }}
20
20
</section>
21
21
22
22
-
23
23
-
{{ if eq .Meta.draft "true" }}
24
24
-
<h1 class="title">{{ index .Meta "title" }} <span class="draft">[draft]</span></h1>
25
25
-
{{ else }}
26
26
-
<h1 class="title">{{ index .Meta "title" }}</h1>
27
27
-
{{ end }}
28
28
-
<h2 class="subtitle">{{ index .Meta "subtitle" }}</h2>
22
22
+
<section>
23
23
+
<h1 class="-mb-4">{{ index .Meta "title" }} {{ if eq .Meta.draft "true" }}
24
24
+
<span class="text-base text-red-400">[draft]</span>{{ end }}
25
25
+
</h1>
26
26
+
<h2 class="text-gray">{{ index .Meta "subtitle" }}</h2>
27
27
+
<div class="mt-12">
29
28
{{ .Body }}
30
30
-
31
31
-
<p class="muted" align="center">Questions or comments?
32
32
-
Send an
33
33
-
<a href="mailto:x@icyphox.sh?Subject=Re: {{ index .Meta "title" }}">email</a>.
29
29
+
</div>
30
30
+
</section>
34
31
</article>
35
32
</main>
36
33
<footer>