my website at https://anirudh.fi

all: clean up and migrate to tailwind

anirudh.fi 6ccf8197 9c0da0e7

verified
+287 -410
+1
.gitignore
··· 4 4 .direnv 5 5 .aider* 6 6 .env 7 + static/styles/tw.css
+1 -1
bin/serve.sh
··· 16 16 trap "kill_vite" INT 17 17 18 18 "$vite" serve & 19 - find pages/ static/ templates/ | entr "$vite" build --drafts 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 - # note the trailing slash! 3 2 url: "https://anirudh.fi/" 4 3 description: "" 5 4 author: 6 - name: "Anirudh Oppiliappan" 7 - email: "anirudh@oppiliappan.com" 5 + name: "Anirudh Oppiliappan" 6 + email: "anirudh@oppiliappan.com" 8 7 defaultTemplate: text.html 8 + preBuild: 9 + - tailwindcss -i input.css -o static/styles/tw.css
+12 -12
flake.lock
··· 2 2 "nodes": { 3 3 "nixpkgs": { 4 4 "locked": { 5 - "lastModified": 1737316331, 6 - "narHash": "sha256-Gev1DE6Or+xzTIiTRrvnmVyUHj6x/Gtk6EO4iJJ58So=", 5 + "lastModified": 1748204564, 6 + "narHash": "sha256-eSYjZMXGo7BGaaREt9LdGKCUEobIwvvb9/2OjpEhWxI=", 7 7 "owner": "nixos", 8 8 "repo": "nixpkgs", 9 - "rev": "20d2e6da70836953b778f6cd95e9312e65391ef9", 9 + "rev": "7ed13552a51b57aab87896737cbef2853aa684d7", 10 10 "type": "github" 11 11 }, 12 12 "original": { ··· 41 41 "nixpkgs": "nixpkgs_2" 42 42 }, 43 43 "locked": { 44 - "lastModified": 1737316691, 45 - "narHash": "sha256-EUo4/8wpIF8ZposFbH+d77c2wDzR8/oGA2qE7nVDo+Y=", 46 - "owner": "icyphox", 47 - "repo": "go-vite", 48 - "rev": "39b8d08cf911e22d238d5b30f18434a346c02733", 49 - "type": "github" 44 + "lastModified": 1745387732, 45 + "narHash": "sha256-CdHBCqAzRynF39kDEktFNtYgD5f7vFIkKFupPIZhORY=", 46 + "ref": "refs/heads/master", 47 + "rev": "a64168bad0f8492be51dbb22991e12f2607ec3e2", 48 + "revCount": 92, 49 + "type": "git", 50 + "url": "https://tangled.sh/@icyphox.sh/vite" 50 51 }, 51 52 "original": { 52 - "owner": "icyphox", 53 - "repo": "go-vite", 54 - "type": "github" 53 + "type": "git", 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 - inputs.vite.url = "github:icyphox/go-vite"; 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 + pkgs.tailwindcss_4 37 38 ]; 38 39 }; 39 40 } 40 41 ); 42 + 41 43 42 44 apps = forAllSystems ( 43 45 system:
+150
input.css
··· 1 + @import "tailwindcss"; 2 + 3 + @layer base { 4 + @theme { 5 + --color-cyan: #509c93; 6 + --color-light: #fff9eb; 7 + --color-light-gray: #fceccc; 8 + --color-medium-gray: #e6dcd1; 9 + --color-mediumer-gray: #d8cbbe; 10 + --color-gray: #776e63; 11 + --color-dark: #4a443d; 12 + --color-darker: #2a261f; 13 + --color-warm: #fffdf5; 14 + --color-fg: #100f0f; 15 + --color-selection: rgba(143, 105, 213, 0.2); 16 + 17 + --color-dark-light: #2a261f; 18 + --color-dark-light-gray: #4a443d; 19 + --color-dark-medium-gray: #6b635a; 20 + --color-dark-gray: #d3cec1; 21 + --color-dark-fg: #fff6e3; 22 + --color-dark-dark: #e6dcd1; 23 + --color-dark-darker: #fff9eb; 24 + --color-dusk: #100f0f; 25 + --color-dark-selection: rgba(80, 156, 147, 0.2); 26 + 27 + --breakpoint-md: 400px; 28 + } 29 + 30 + h1 { 31 + @apply text-2xl; 32 + @apply font-medium; 33 + @apply pt-4 pb-3; 34 + } 35 + 36 + h2 { 37 + @apply text-xl; 38 + @apply font-normal; 39 + @apply text-darker; 40 + @apply pt-4 pb-3; 41 + } 42 + 43 + ::selection { 44 + @apply bg-selection; 45 + @apply dark:bg-dark-selection; 46 + } 47 + 48 + html { 49 + @apply bg-warm dark:bg-dusk; 50 + @apply text-fg dark:text-dark-fg; 51 + } 52 + 53 + main { 54 + @apply text-base p-0 font-normal; 55 + @apply text-base/relaxed; 56 + article { 57 + @apply py-5; 58 + p { 59 + @apply py-2; 60 + } 61 + strong { 62 + @apply font-medium; 63 + } 64 + 65 + ul { 66 + @apply list-disc; 67 + @apply mx-8 my-2; 68 + @apply marker:text-mediumer-gray; 69 + } 70 + 71 + ol { 72 + counter-reset: counter; 73 + li { 74 + counter-increment: counter; 75 + } 76 + @apply list-decimal; 77 + @apply mx-8 my-2; 78 + @apply marker:text-gray; 79 + } 80 + 81 + code { 82 + @apply bg-light text-[0.9rem]; 83 + } 84 + pre { 85 + @apply bg-light p-4 my-2 overflow-x-auto overflow-y-hidden; 86 + } 87 + 88 + .footnotes { 89 + hr { 90 + @apply border-t border-light-gray pt-6 mt-6; 91 + } 92 + } 93 + 94 + .footnotes > ol li { 95 + @apply flex items-center gap-3; 96 + } 97 + 98 + .footnotes > ol li::before { 99 + @apply content-[counter(counter)]; 100 + @apply rounded-full text-center leading-4 text-light bg-cyan; 101 + @apply w-4 h-4 text-xs inline-block flex-shrink-0; 102 + } 103 + 104 + .footnote-ref a { 105 + @apply no-underline text-light rounded-full text-center bg-cyan border-b-0; 106 + @apply w-3 h-3 text-[0.6rem] leading-3 inline-block; 107 + } 108 + 109 + .footnotes > ol li p { 110 + @apply m-0 leading-4; 111 + } 112 + 113 + .footnote-return { 114 + @apply border-b-0 text-cyan ml-auto; 115 + } 116 + 117 + .footnote-return:hover { 118 + @apply border-b-0 text-cyan ml-auto; 119 + } 120 + 121 + .footnotes ol li:not(:last-child) { 122 + @apply pb-8; 123 + } 124 + } 125 + } 126 + 127 + body { 128 + @apply max-w-[655px]; 129 + @apply px-4 pt-8 pb-80; 130 + @apply my-4 mx-auto; 131 + } 132 + 133 + a { 134 + @apply text-darker dark:text-gray; 135 + @apply border-b border-medium-gray hover:border-gray; 136 + } 137 + 138 + img { 139 + @apply max-w-full; 140 + @apply w-full; 141 + @apply block; 142 + @apply mx-auto my-[10px_auto_4px_auto]; 143 + @apply rounded-md; 144 + } 145 + 146 + .row { 147 + @apply flex flex-col md:flex-row items-center justify-between; 148 + @apply gap-4 md:gap-2; 149 + } 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 - date: 2024-02-01 9 + date: "2024-02-01" 10 10 11 11 defaults: 12 12 width: 1000
-3
static/bluesky.svg
··· 1 - <svg width="568" height="501" viewBox="0 0 568 501" fill="none" xmlns="http://www.w3.org/2000/svg"> 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 - </svg>
-18
static/cc.svg
··· 1 - <?xml version="1.0" encoding="iso-8859-1"?> 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 - viewBox="0 0 96 96" style="enable-background:new 0 0 96 96;" xml:space="preserve"> 4 - <g> 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - </g> 18 - </svg>
-21
static/fedi.svg
··· 1 - <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 - <!-- Created with Inkscape (http://www.inkscape.org/) --> 3 - 4 - <svg 5 - width="26.45833mm" 6 - height="25.582479mm" 7 - viewBox="0 0 26.458331 25.582479" 8 - version="1.1" 9 - id="svg1" 10 - xml:space="preserve" 11 - xmlns="http://www.w3.org/2000/svg" 12 - xmlns:svg="http://www.w3.org/2000/svg"><defs 13 - id="defs1" /><g 14 - id="layer1" 15 - transform="translate(-87.047916,-131.23333)"><g 16 - id="g66" 17 - transform="matrix(0.74021505,0,0,0.74021505,452.38455,-3.3651489)" 18 - style="stroke-width:1.35096"><path 19 - id="path140" 20 - style="-inkscape-font-specification:'Fungal @grow=542,TCHK=321';stroke-linecap:square;stroke-linejoin:round" 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 - <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 - <!-- Created with Inkscape (http://www.inkscape.org/) --> 3 - 4 - <svg 5 - xmlns:dc="http://purl.org/dc/elements/1.1/" 6 - xmlns:cc="http://creativecommons.org/ns#" 7 - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 8 - xmlns:svg="http://www.w3.org/2000/svg" 9 - xmlns="http://www.w3.org/2000/svg" 10 - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" 11 - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" 12 - id="svg2" 13 - version="1.1" 14 - inkscape:version="0.91 r13725" 15 - xml:space="preserve" 16 - width="114.8625" 17 - height="114.8625" 18 - viewBox="0 0 114.8625 114.8625" 19 - sodipodi:docname="Git-Icon-Black.svg"><metadata 20 - id="metadata8"><rdf:RDF><cc:Work 21 - rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type 22 - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs 23 - id="defs6" /><sodipodi:namedview 24 - pagecolor="#ffffff" 25 - bordercolor="#666666" 26 - borderopacity="1" 27 - objecttolerance="10" 28 - gridtolerance="10" 29 - guidetolerance="10" 30 - inkscape:pageopacity="0" 31 - inkscape:pageshadow="2" 32 - inkscape:window-width="702" 33 - inkscape:window-height="480" 34 - id="namedview4" 35 - showgrid="false" 36 - inkscape:zoom="2.0546305" 37 - inkscape:cx="57.431252" 38 - inkscape:cy="57.431252" 39 - inkscape:window-x="0" 40 - inkscape:window-y="25" 41 - inkscape:window-maximized="0" 42 - inkscape:current-layer="g10" /><g 43 - id="g10" 44 - inkscape:groupmode="layer" 45 - inkscape:label="ink_ext_XXXXXX" 46 - transform="matrix(1.25,0,0,-1.25,0,114.8625)"><g 47 - id="g12" 48 - transform="scale(0.1,0.1)"><path 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 - style="fill:#100f0d;fill-opacity:1;fill-rule:nonzero;stroke:none" 51 - id="path14" 52 - inkscape:connector-curvature="0" /></g></g></svg>
-60
static/gpg.txt
··· 1 - -----BEGIN PGP PUBLIC KEY BLOCK----- 2 - 3 - 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 59 - =hrUE 60 - -----END PGP PUBLIC KEY BLOCK-----
-29
static/honk.svg
··· 1 - <?xml version="1.0" standalone="no"?> 2 - <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" 3 - "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> 4 - <svg version="1.0" xmlns="http://www.w3.org/2000/svg" 5 - width="128.000000pt" height="128.000000pt" viewBox="0 0 128.000000 128.000000" 6 - preserveAspectRatio="xMidYMid meet"> 7 - 8 - <g transform="translate(0.000000,128.000000) scale(0.100000,-0.100000)" 9 - fill="#000000" stroke="none"> 10 - <path d="M0 640 l0 -640 640 0 640 0 0 640 0 640 -640 0 -640 0 0 -640z m550 11 - 470 c0 -14 -9 -21 -37 -25 -92 -15 -83 8 -83 -200 l0 -185 220 0 220 0 0 185 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 - -20 0 -14 -9 -21 -37 -25 -21 -3 -48 -8 -60 -11 l-23 -4 0 -414 0 -414 60 -7 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 - 0 199 -220 0 -220 0 0 -199 0 -199 60 -7 c55 -6 60 -9 60 -31 l0 -24 -190 0 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 - -29 4 -38 11 -38 25 0 19 8 20 190 20 182 0 190 -1 190 -20z m210 -672 l1 -53 18 - 24 28 c13 15 32 27 41 27 13 0 12 -4 -6 -18 -26 -21 -22 -45 11 -80 l20 -22 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 - -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 - -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 - 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 - 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 - -7 -7 -26 -12 -43 -12 -40 0 -55 16 -55 60 0 44 15 60 55 60 17 0 36 -5 43 25 - -12z"/> 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 - -12 2 -21 -6 -28 -22z"/> 28 - </g> 29 - </svg>
-3
static/rss.svg
··· 1 - <svg width="1536" height="1536" xmlns="http://www.w3.org/2000/svg"> 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 - </svg>
-74
static/syntax.css
··· 1 - /* Background */ .bg { background-color: #ffffff } 2 - /* PreWrapper */ .chroma { background-color: #ffffff; } 3 - /* Error */ .chroma .err { color: #a61717; background-color: #e3d2d2 } 4 - /* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; } 5 - /* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; } 6 - /* LineHighlight */ .chroma .hl { background-color: #e5e5e5 } 7 - /* LineNumbersTable */ .chroma .lnt { white-space: pre; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f } 8 - /* LineNumbers */ .chroma .ln { white-space: pre; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f } 9 - /* Line */ .chroma .line { display: flex; } 10 - /* Keyword */ .chroma .k { color: #000000; font-weight: bold } 11 - /* KeywordConstant */ .chroma .kc { color: #000000; font-weight: bold } 12 - /* KeywordDeclaration */ .chroma .kd { color: #000000; font-weight: bold } 13 - /* KeywordNamespace */ .chroma .kn { color: #000000; font-weight: bold } 14 - /* KeywordPseudo */ .chroma .kp { color: #000000; font-weight: bold } 15 - /* KeywordReserved */ .chroma .kr { color: #000000; font-weight: bold } 16 - /* KeywordType */ .chroma .kt { color: #222222; font-weight: bold } 17 - /* NameAttribute */ .chroma .na { color: #509c93 } 18 - /* NameBuiltin */ .chroma .nb { color: #509c93 } 19 - /* NameBuiltinPseudo */ .chroma .bp { color: #999999 } 20 - /* NameClass */ .chroma .nc { color: #666666; font-weight: bold } 21 - /* NameConstant */ .chroma .no { color: #509c93 } 22 - /* NameDecorator */ .chroma .nd { color: #3c5d5d; font-weight: bold } 23 - /* NameEntity */ .chroma .ni { color: #509c93 } 24 - /* NameException */ .chroma .ne { color: #444444; font-weight: bold } 25 - /* NameFunction */ .chroma .nf { color: #444444; font-weight: bold } 26 - /* NameLabel */ .chroma .nl { color: #444444; font-weight: bold } 27 - /* NameNamespace */ .chroma .nn { color: #555555 } 28 - /* NameTag */ .chroma .nt { color: #444444} 29 - /* NameVariable */ .chroma .nv { color: #509c93 } 30 - /* NameVariableClass */ .chroma .vc { color: #509c93 } 31 - /* NameVariableGlobal */ .chroma .vg { color: #509c93 } 32 - /* NameVariableInstance */ .chroma .vi { color: #509c93 } 33 - /* LiteralString */ .chroma .s { color: #509c93 } 34 - /* LiteralStringAffix */ .chroma .sa { color: #509c93 } 35 - /* LiteralStringBacktick */ .chroma .sb { color: #509c93 } 36 - /* LiteralStringChar */ .chroma .sc { color: #509c93 } 37 - /* LiteralStringDelimiter */ .chroma .dl { color: #509c93 } 38 - /* LiteralStringDoc */ .chroma .sd { color: #509c93 } 39 - /* LiteralStringDouble */ .chroma .s2 { color: #509c93 } 40 - /* LiteralStringEscape */ .chroma .se { color: #509c93 } 41 - /* LiteralStringHeredoc */ .chroma .sh { color: #509c93 } 42 - /* LiteralStringInterpol */ .chroma .si { color: #509c93 } 43 - /* LiteralStringOther */ .chroma .sx { color: #509c93 } 44 - /* LiteralStringRegex */ .chroma .sr { color: #009926 } 45 - /* LiteralStringSingle */ .chroma .s1 { color: #509c93 } 46 - /* LiteralStringSymbol */ .chroma .ss { color: #990073 } 47 - /* LiteralNumber */ .chroma .m { color: #509c93 } 48 - /* LiteralNumberBin */ .chroma .mb { color: #509c93 } 49 - /* LiteralNumberFloat */ .chroma .mf { color: #509c93 } 50 - /* LiteralNumberHex */ .chroma .mh { color: #509c93 } 51 - /* LiteralNumberInteger */ .chroma .mi { color: #509c93 } 52 - /* LiteralNumberIntegerLong */ .chroma .il { color: #509c93 } 53 - /* LiteralNumberOct */ .chroma .mo { color: #509c93 } 54 - /* Operator */ .chroma .o { color: #000000; font-weight: bold } 55 - /* OperatorWord */ .chroma .ow { color: #000000; font-weight: bold } 56 - /* Comment */ .chroma .c { color: #999988; font-style: italic } 57 - /* CommentHashbang */ .chroma .ch { color: #999988; font-style: italic } 58 - /* CommentMultiline */ .chroma .cm { color: #999988; font-style: italic } 59 - /* CommentSingle */ .chroma .c1 { color: #999988; font-style: italic } 60 - /* CommentSpecial */ .chroma .cs { color: #999999; font-weight: bold; font-style: italic } 61 - /* CommentPreproc */ .chroma .cp { color: #999999; font-weight: bold; font-style: italic } 62 - /* CommentPreprocFile */ .chroma .cpf { color: #999999; font-weight: bold; font-style: italic } 63 - /* GenericDeleted */ .chroma .gd { color: #000000; background-color: #ffdddd } 64 - /* GenericEmph */ .chroma .ge { color: #000000; font-style: italic } 65 - /* GenericError */ .chroma .gr { color: #aa0000 } 66 - /* GenericHeading */ .chroma .gh { color: #999999 } 67 - /* GenericInserted */ .chroma .gi { color: #000000; background-color: #ddffdd } 68 - /* GenericOutput */ .chroma .go { color: #888888 } 69 - /* GenericPrompt */ .chroma .gp { color: #555555 } 70 - /* GenericStrong */ .chroma .gs { font-weight: bold } 71 - /* GenericSubheading */ .chroma .gu { color: #aaaaaa } 72 - /* GenericTraceback */ .chroma .gt { color: #aa0000 } 73 - /* GenericUnderline */ .chroma .gl { text-decoration: underline } 74 - /* TextWhitespace */ .chroma .w { color: #bbbbbb }
-13
static/webring.svg
··· 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 - <g transform="translate(0,30)"> 3 - <g transform="translate(150,150),rotate(120,0,0)"> 4 - <path d="M0,-60 a60,60 0 1,0 0,120 l100,0"></path> 5 - </g> 6 - <g transform="translate(150,150),rotate(240,0,0)"> 7 - <path d="M0,-60 a60,60 0 1,0 0,120 l100,0"></path> 8 - </g> 9 - <g transform="translate(150,150),rotate(0,0,0)"> 10 - <path d="M0,-60 a60,60 0 1,0 0,120 l100,0"></path> 11 - </g> 12 - </g> 13 - </svg>
-33
static/white.svg
··· 1 - <?xml version="1.0" standalone="no"?> 2 - <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" 3 - "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> 4 - <svg version="1.0" xmlns="http://www.w3.org/2000/svg" 5 - width="619.000000pt" height="619.000000pt" viewBox="0 0 619.000000 619.000000" 6 - preserveAspectRatio="xMidYMid meet"> 7 - <metadata> 8 - Created by potrace 1.16, written by Peter Selinger 2001-2019 9 - </metadata> 10 - <g transform="translate(0.000000,619.000000) scale(0.100000,-0.100000)" 11 - fill="#000000" stroke="none"> 12 - <path d="M583 4666 c4 -10 9 -28 12 -39 8 -36 105 -457 120 -522 8 -33 26 13 - -109 40 -170 14 -60 37 -157 50 -215 14 -58 36 -154 51 -215 29 -127 59 -255 14 - 79 -340 8 -33 37 -159 65 -280 74 -320 77 -330 89 -327 16 3 1091 853 1091 15 - 862 0 5 -1446 1147 -1564 1235 -30 23 -38 25 -33 11z"/> 16 - <path d="M4819 4055 c-436 -344 -795 -628 -797 -633 -3 -9 1069 -860 1089 17 - -864 12 -3 15 7 89 327 28 121 57 247 65 280 20 85 50 213 79 340 15 61 37 18 - 157 51 215 13 58 36 155 50 215 14 61 32 137 40 170 8 33 37 159 65 280 27 19 - 121 54 236 60 254 5 19 8 36 7 38 -2 1 -361 -279 -798 -622z"/> 20 - <path d="M2244 3239 c-176 -138 -323 -255 -328 -260 -8 -7 1171 -1749 1184 21 - -1749 13 0 1192 1742 1184 1749 -5 5 -152 122 -328 260 l-318 251 -538 0 -538 22 - 0 -318 -251z"/> 23 - <path d="M1150 2373 c-338 -267 -626 -494 -639 -504 -13 -11 -22 -21 -20 -23 24 - 2 -2 83 -25 179 -50 96 -25 209 -54 250 -65 41 -11 127 -33 190 -50 63 -16 25 - 158 -41 210 -54 52 -14 176 -46 275 -72 99 -26 212 -55 250 -65 181 -48 310 26 - -81 415 -109 63 -16 178 -46 255 -66 248 -65 360 -94 362 -91 2 2 -1099 1621 27 - -1111 1633 -1 1 -278 -217 -616 -484z"/> 28 - <path d="M3877 2043 c-306 -449 -556 -818 -554 -819 2 -3 115 26 362 91 77 20 29 - 192 50 255 66 105 28 234 61 415 109 39 10 151 39 250 65 99 26 223 58 275 72 30 - 52 13 147 38 210 54 63 17 149 39 190 50 41 11 154 40 250 65 170 44 188 50 31 - 179 57 -5 5 -1251 988 -1264 998 -6 5 -226 -308 -568 -808z"/> 32 - </g> 33 - </svg>
+30
tailwind.config.js
··· 1 + module.exports = { 2 + content: ["./templates/**/*.html", "./pages/**/*.md"], 3 + darkMode: "media", 4 + theme: { 5 + container: { 6 + padding: "2rem", 7 + center: true, 8 + screens: { 9 + sm: "500px", 10 + md: "600px", 11 + lg: "800px", 12 + xl: "1000px", 13 + "2xl": "1200px", 14 + }, 15 + }, 16 + extend: { 17 + fontFamily: { 18 + sans: ["--apple-system", "system-ui", "sans-serif", "ui-sans-serif"], 19 + }, 20 + typography: { 21 + DEFAULT: { 22 + css: { 23 + maxWidth: "75ch", 24 + }, 25 + }, 26 + }, 27 + }, 28 + }, 29 + plugins: [require("@tailwindcss/typography")], 30 + };
+25 -20
templates/blog.html
··· 2 2 <html lang=en> 3 3 <head> 4 4 {{ template "partials/head.html" }} 5 - <link rel="alternate" type="application/rss+xml" title="RSS" href="https://icyphox.sh/blog/feed.xml"> 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 - <div class="sidenav"> 14 + <div> 15 15 {{ template "partials/nav.html" }} 16 16 </div> 17 + 18 + <article> 17 19 <h1>{{ index .Meta "title" }}</h1> 18 20 {{ .Body }} 19 21 20 - <section class="posts"> 21 - <ul> 22 - {{ $posts := .Extra }} 23 - {{ range $posts }} 24 - <li> 25 - <div class="post"> 26 - <a href=/{{ .Meta.slug }}>{{ .Meta.title }}</a> 27 - {{ if .Meta.draft }} 28 - (<span class="draft">draft</span>) 29 - {{ end }} 30 - <p class="subtitle">{{ .Meta.subtitle }}</p> 31 - </div> 32 - {{ $dateStr := .Meta.date }} 33 - {{ $date := parsedate $dateStr }} 34 - <div class="index-date">{{ $date.Format "02 Jan, 2006" }}</div> 35 - </li> 36 - {{ end }} 37 - </ul> 22 + <section class="mt-12"> 23 + <ul class="m-0 p-0"> 24 + {{ $posts := .Extra }} 25 + {{ range $posts }} 26 + <li class="list-none py-2"> 27 + <div class="flex md:flex-row flex-col justify-between"> 28 + <div> 29 + <a href=/{{ .Meta.slug }}>{{ .Meta.title }}</a> 30 + {{ if .Meta.draft }} 31 + (<span class="text-red-200">draft</span>) 32 + {{ end }} 33 + <p class="text-gray">{{ .Meta.subtitle }}</p> 34 + </div> 35 + {{ $dateStr := .Meta.date }} 36 + {{ $date := parsedate $dateStr }} 37 + <div class="index-date text-gray lowercase">{{ $date.Format "02 Jan, 2006" }}</div> 38 + </div> 39 + </li> 40 + {{ end }} 41 + </ul> 38 42 </section> 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 - <section class="tagline"> 16 + <section class="my-12 py-12 border-b border-light-gray"> 17 17 {{ .Body }} 18 18 </section> 19 19 20 - <hr> 21 - 22 - <section class="posts"> 23 - <h2>writing</h2> 24 - <ul> 20 + <section> 21 + <h2 class="pb-6">writing</h2> 22 + <ul class="m-0 p-0"> 25 23 {{ $posts := .Extra.blog }} 26 24 {{ range slice $posts 0 3 }} 27 - <li> 28 - <div class="post"> 25 + <li class="list-none py-2"> 26 + <div class="flex md:flex-row flex-col justify-between"> 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 - <p class="subtitle">{{ .Meta.subtitle }}</p> 32 + <p class="text-gray">{{ .Meta.subtitle }}</p> 34 33 </div> 35 34 {{ $dateStr := .Meta.date }} 36 35 {{ $date := parsedate $dateStr }} 37 - <div class="index-date">{{ $date.Format "02 Jan, 2006" }}</div> 36 + <div class="text-gray lowercase">{{ $date.Format "02 Jan, 2006" }}</div> 37 + </div> 38 38 </li> 39 39 {{ end }} 40 40 </ul> 41 - <a style="border-bottom: unset;" href="/blog/"><span>more &RightArrow;</span></a> 41 + <a class="border-b-0" href="/blog/"><span>more &RightArrow;</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 - <h1>{{ index .Meta "title" }}</h1> 16 + <h1 class="">{{ index .Meta "title" }}</h1> 17 17 {{ .Body }} 18 18 </article> 19 19 </main>
+7 -9
templates/partials/footer.html
··· 1 - <hr> 2 - 3 - <div class="footer"> 4 - <p class="muted"> 5 - Follow via <a href="/blog/feed.xml">RSS</a>, 6 - <a href="https://x.com/icyphox">X</a>, 7 - <a href="https://bsky.app/profile/icyphox.sh">Bluesky</a>, 8 - and <a href="/about#contact">more</a>. 9 - </p> 1 + <div class="border-t border-light-gray pt-6 mt-6"> 2 + <p class="text-gray"> 3 + Follow via <a class="text-cyan border-b border-b-cyan" href="/blog/feed.xml">RSS</a>, 4 + <a class="border-b border-b-cyan text-cyan" href="https://bsky.app/profile/icyphox.sh">Bluesky</a>, 5 + <a class="border-b border-b-cyan text-cyan" href="https://x.com/icyphox">X</a>, and 6 + <a class="border-b border-b-cyan text-cyan" href="/about#contact">more</a>. 7 + </p> 10 8 </div>
+1 -1
templates/partials/head.html
··· 1 - <link rel="stylesheet" href="/static/style.css" type="text/css" /> 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 - <nav> 2 - <div class="logo"> 1 + <nav class="flex items-center justify-between w-full"> 2 + <div class="flex-shrink-0"> 3 3 <a href="/"> 4 4 <svg 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 - <ul> 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 - <section class="posts"> 31 - <ul> 30 + <section class="mt-12"> 31 + <ul class="m-0 p-0"> 32 32 {{ $posts := .Extra }} 33 33 {{ range $posts }} 34 - <li> 35 - <div class="post"> 34 + <li class="list-none py-2"> 35 + <div class="flex md:flex-row flex-col justify-between"> 36 + <div> 36 37 <a href=/photos/{{ .Meta.slug }}>{{ .Meta.title }} &mdash; {{ .Meta.season }}</a> 37 - <p class="subtitle">{{ .Meta.camera }} · {{ .Meta.lens }} · {{ .Meta.film }}</p> 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 - <div class="index-date">{{ $date.Format "02 Jan, 2006" }}</div> 42 + <div class="text-gray lowercase">{{ $date.Format "02 Jan, 2006" }}</div> 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 - <style> 7 - h1 { 8 - margin: 0px; 9 - padding: 0px; 10 - } 11 - </style> 12 6 </head> 13 7 <title> 14 8 {{ .Meta.title }} ({{ .Meta.season }}) &mdash; {{ .Cfg.Title }} 15 9 </title> 16 10 <body> 17 11 <main> 18 - <div class="sidenav"> 12 + <div> 19 13 {{ template "partials/nav.html" }} 20 14 </div> 21 15 <article align="left"> 22 16 <h1>{{ .Meta.title }} &mdash; {{ .Meta.season }}</h1> 23 17 <h2 class="subtitle"> {{ .Meta.camera }} · {{ .Meta.lens }} · {{ .Meta.film }} </h2> 24 - <div class="image-grid"> 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 - <img src="https://cdn.icyphox.sh/fit?url=http://files.garage.koti.lan/{{ . }}&width={{ $d.width }}&height={{ $d.height }}" /> 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 - <section class="book-posts"> 24 - <ul> 25 - {{- range $book := $books }} 26 - <li> 27 - <div class="post"> 28 - <a href="{{ $book.link }}">{{ $book.name }}</a> 29 - <p class="subtitle author">{{ $book.author }}</p> 30 - </div> 31 - <span class="status">{{ $book.status }}</span> 32 - </li> 33 - {{- end }} 34 - </ul> 23 + <section class="mt-4"> 24 + <ul class="m-0 p-0"> 25 + {{- range $book := $books }} 26 + <li class="list-none py-2"> 27 + <div class="flex md:flex-row flex-col justify-between"> 28 + <div> 29 + <a href="{{ $book.link }}">{{ $book.name }}</a> 30 + <p class="text-gray">{{ $book.author }}</p> 31 + </div> 32 + <span class="text-gray lowercase">{{ $book.status }}</span> 33 + </div> 34 + </li> 35 + {{- end }} 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 - <div class="sidenav"> 12 + <div> 13 13 {{ template "partials/nav.html" }} 14 14 </div> 15 - <article align="left"> 16 - <section class="post-date"> 15 + <article> 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 - 23 - {{ if eq .Meta.draft "true" }} 24 - <h1 class="title">{{ index .Meta "title" }} <span class="draft">[draft]</span></h1> 25 - {{ else }} 26 - <h1 class="title">{{ index .Meta "title" }}</h1> 27 - {{ end }} 28 - <h2 class="subtitle">{{ index .Meta "subtitle" }}</h2> 22 + <section> 23 + <h1 class="-mb-4">{{ index .Meta "title" }} {{ if eq .Meta.draft "true" }} 24 + <span class="text-base text-red-400">[draft]</span>{{ end }} 25 + </h1> 26 + <h2 class="text-gray">{{ index .Meta "subtitle" }}</h2> 27 + <div class="mt-12"> 29 28 {{ .Body }} 30 - 31 - <p class="muted" align="center">Questions or comments? 32 - Send an 33 - <a href="mailto:x@icyphox.sh?Subject=Re: {{ index .Meta "title" }}">email</a>. 29 + </div> 30 + </section> 34 31 </article> 35 32 </main> 36 33 <footer>