32 Commits

Author SHA1 Message Date
b4a98f936e Add a preprocessing script 2023-10-13 12:53:00 +03:00
e10433f84a Update css 2023-10-13 12:51:58 +03:00
3b0daa16cc Merge remote-tracking branch 'origin/tailwind' into tailwind 2023-04-28 15:58:44 +03:00
cc6f4661c7 Add a build manifest 2023-04-28 15:55:33 +03:00
48948ca623 Trial the skills 2023-04-27 22:03:38 +03:00
bb00c393a4 Start replacing the profile 2023-04-27 21:53:31 +03:00
06f95f0aa6 I had double projects set up for some reason 2023-04-25 21:41:30 +03:00
8fcf863e6a The post had some problems on a narrower screen 2023-04-25 21:38:48 +03:00
a732c620a8 Some padding 2023-04-25 21:35:58 +03:00
a1f344a510 Change contact address 2023-04-25 21:35:41 +03:00
933403e249 Comments 2023-04-25 21:30:09 +03:00
57096e5d06 Two git 2023-04-25 21:28:57 +03:00
b02f086730 Update navbar 2023-04-25 21:11:00 +03:00
50e664f70b Use the standalone cli for tailwind 2023-04-25 20:49:28 +03:00
169a870bf4 update gitignore 2023-04-25 20:33:59 +03:00
a92831002b Layout for project 2023-03-29 23:36:05 +03:00
54ef62707d Project list 2023-03-29 23:26:33 +03:00
12be909960 Post layout 2023-03-29 23:22:45 +03:00
9bd93a667f Border 2023-03-29 23:09:20 +03:00
f885399329 Navbar with tailwind 2023-03-29 23:03:19 +03:00
c1058994f3 Post listing? 2023-03-29 22:49:20 +03:00
23658182c2 Initial tailwind support 2023-03-29 21:50:50 +03:00
29deb31729 Get rid of keybase 2022-08-18 11:33:07 +03:00
a1be811d95 Update my profile 2022-08-18 11:31:46 +03:00
bd41cf2f64 Update deps 2022-08-18 11:26:12 +03:00
e48ec6ce3d Simplify the build setup 2022-08-18 11:24:36 +03:00
b46cf0bf15 Less overlays 2022-08-18 10:57:08 +03:00
3bc2738ef6 Replace easy-hls with haskell-language-server 2022-08-18 10:37:28 +03:00
69a1f4d921 Remove old key 2021-11-26 23:40:55 +02:00
a762b8b6fe Build first 2021-11-26 23:40:33 +02:00
394a511187 Update gpg key 2021-11-26 23:26:23 +02:00
a19640ec02 Deploying via ipfs? 2021-11-26 21:47:20 +02:00
27 changed files with 3096 additions and 415 deletions

9
.build.yml Normal file
View File

@ -0,0 +1,9 @@
image: nixos/unstable
environment:
NIX_CONFIG: "experimental-features = nix-command flakes"
sources:
- https@git.sr.ht/~masse/rauhala.info
tasks:
- build: |
cd rauhala.info
nix build

3
.gitignore vendored
View File

@ -3,3 +3,6 @@ _cache/
dist/ dist/
dist-newstyle/ dist-newstyle/
result* result*
.direnv
.envrc
node_modules

1
cabal.project Normal file
View File

@ -0,0 +1 @@
packages: */*.cabal

33
flake.lock generated
View File

@ -1,32 +1,12 @@
{ {
"nodes": { "nodes": {
"easy-hls": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1637250802,
"narHash": "sha256-/crlHEVB148PGQLZCsHOR9L5qgvCAfRSocIoKgmMAhA=",
"owner": "jkachmar",
"repo": "easy-hls-nix",
"rev": "7c123399ef8a67dc0e505d9cf7f2c7f64f1cd847",
"type": "github"
},
"original": {
"owner": "jkachmar",
"repo": "easy-hls-nix",
"type": "github"
}
},
"flake-utils": { "flake-utils": {
"locked": { "locked": {
"lastModified": 1637014545, "lastModified": 1659877975,
"narHash": "sha256-26IZAc5yzlD9FlDT54io1oqG/bBoyka+FJk5guaX4x4=", "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=",
"owner": "numtide", "owner": "numtide",
"repo": "flake-utils", "repo": "flake-utils",
"rev": "bba5dcc8e0b20ab664967ad83d24d64cb64ec4f4", "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -37,11 +17,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1637841632, "lastModified": 1660646295,
"narHash": "sha256-QYqiKHdda0EOnLGQCHE+GluD/Lq2EJj4hVTooPM55Ic=", "narHash": "sha256-V4G+egGRc3elXPTr7QLJ7r7yrYed0areIKDiIAlMLC8=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "73369f8d0864854d1acfa7f1e6217f7d6b6e3fa1", "rev": "762b003329510ea855b4097a37511eb19c7077f0",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -53,7 +33,6 @@
}, },
"root": { "root": {
"inputs": { "inputs": {
"easy-hls": "easy-hls",
"flake-utils": "flake-utils", "flake-utils": "flake-utils",
"nixpkgs": "nixpkgs" "nixpkgs": "nixpkgs"
} }

View File

@ -4,39 +4,25 @@
inputs = { inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils"; flake-utils.url = "github:numtide/flake-utils";
easy-hls = {
url = "github:jkachmar/easy-hls-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
}; };
outputs = { self, nixpkgs, flake-utils, easy-hls }: outputs = { self, nixpkgs, flake-utils }:
{ {
overlay = final: prev: {
build-rauhala-info = final.haskellPackages.build-rauhala-info;
rauhala-info = final.callPackage ./rauhala.info { site = final.build-rauhala-info; };
haskellPackages = prev.haskellPackages.override ( old: {
overrides = final.lib.composeExtensions ( old.overrides or (_: _: {})) (f: p: {
build-rauhala-info = f.callPackage ./site {};
});
} );
};
} }
// //
flake-utils.lib.eachDefaultSystem (system: flake-utils.lib.eachDefaultSystem (system:
let let
pkgs = import nixpkgs { inherit system; overlays = [ self.overlay ]; }; pkgs = nixpkgs.legacyPackages.${system};
hp = pkgs.haskellPackages; tailwindcss-cli = pkgs.callPackage ./tailwind {};
hls = easy-hls.defaultPackage.${system}; hp = pkgs.haskellPackages.override ( old: {
overrides = pkgs.lib.composeExtensions ( old.overrides or (_: _: {})) (f: p: {
build-rauhala-info = f.callPackage ./site {};
});
} );
in in
rec { rec {
packages = { inherit (pkgs) build-rauhala-info rauhala-info; }; packages.rauhala-info = pkgs.callPackage ./rauhala.info { site = hp.build-rauhala-info; };
applications.build-rauhala-info = flake-utils.lib.mkApp {
drv = packages.build-rauhala-info;
exePath = "/bin/site";
};
defaultPackage = packages.rauhala-info; defaultPackage = packages.rauhala-info;
defaultApp = applications.build-rauhala-info;
devShell = hp.shellFor { devShell = hp.shellFor {
packages = h: [h.build-rauhala-info]; packages = h: [h.build-rauhala-info];
buildInputs = with pkgs; [ buildInputs = with pkgs; [
@ -44,7 +30,10 @@
cabal-install cabal-install
stylish-haskell stylish-haskell
entr entr
hls haskell-language-server
ipfs
tailwindcss-cli
]; ];
}; };
}); });

1433
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

5
package.json Normal file
View File

@ -0,0 +1,5 @@
{
"dependencies": {
"tailwindcss": "^3.3.0"
}
}

3
preprocess.sh Executable file
View File

@ -0,0 +1,3 @@
#!/usr/bin/env bash
tailwindcss -i tailwind.css -o rauhala.info/css/index.css

View File

@ -5,4 +5,4 @@ title: Contact
I live in Espoo Finland. You can contact me on any of the following services. I live in Espoo Finland. You can contact me on any of the following services.
- **Email**: mats.rauhala@iki.fi - **Email**: mats.rauhala@iki.fi
- **Mastodon**: MasseR@haskell.social - **Mastodon**: MasseR@rauhala.info

866
rauhala.info/css/index.css Normal file
View File

@ -0,0 +1,866 @@
/*
! tailwindcss v3.3.1 | MIT License | https://tailwindcss.com
*/
/*
1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
*/
*,
::before,
::after {
box-sizing: border-box;
/* 1 */
border-width: 0;
/* 2 */
border-style: solid;
/* 2 */
border-color: #e5e7eb;
/* 2 */
}
::before,
::after {
--tw-content: '';
}
/*
1. Use a consistent sensible line-height in all browsers.
2. Prevent adjustments of font size after orientation changes in iOS.
3. Use a more readable tab size.
4. Use the user's configured `sans` font-family by default.
5. Use the user's configured `sans` font-feature-settings by default.
6. Use the user's configured `sans` font-variation-settings by default.
*/
html {
line-height: 1.5;
/* 1 */
-webkit-text-size-adjust: 100%;
/* 2 */
-moz-tab-size: 4;
/* 3 */
-o-tab-size: 4;
tab-size: 4;
/* 3 */
font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
/* 4 */
font-feature-settings: normal;
/* 5 */
font-variation-settings: normal;
/* 6 */
}
/*
1. Remove the margin in all browsers.
2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
*/
body {
margin: 0;
/* 1 */
line-height: inherit;
/* 2 */
}
/*
1. Add the correct height in Firefox.
2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
3. Ensure horizontal rules are visible by default.
*/
hr {
height: 0;
/* 1 */
color: inherit;
/* 2 */
border-top-width: 1px;
/* 3 */
}
/*
Add the correct text decoration in Chrome, Edge, and Safari.
*/
abbr:where([title]) {
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
}
/*
Remove the default font size and weight for headings.
*/
h1,
h2,
h3,
h4,
h5,
h6 {
font-size: inherit;
font-weight: inherit;
}
/*
Reset links to optimize for opt-in styling instead of opt-out.
*/
a {
color: inherit;
text-decoration: inherit;
}
/*
Add the correct font weight in Edge and Safari.
*/
b,
strong {
font-weight: bolder;
}
/*
1. Use the user's configured `mono` font family by default.
2. Correct the odd `em` font sizing in all browsers.
*/
code,
kbd,
samp,
pre {
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
/* 1 */
font-size: 1em;
/* 2 */
}
/*
Add the correct font size in all browsers.
*/
small {
font-size: 80%;
}
/*
Prevent `sub` and `sup` elements from affecting the line height in all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
/*
1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
3. Remove gaps between table borders by default.
*/
table {
text-indent: 0;
/* 1 */
border-color: inherit;
/* 2 */
border-collapse: collapse;
/* 3 */
}
/*
1. Change the font styles in all browsers.
2. Remove the margin in Firefox and Safari.
3. Remove default padding in all browsers.
*/
button,
input,
optgroup,
select,
textarea {
font-family: inherit;
/* 1 */
font-size: 100%;
/* 1 */
font-weight: inherit;
/* 1 */
line-height: inherit;
/* 1 */
color: inherit;
/* 1 */
margin: 0;
/* 2 */
padding: 0;
/* 3 */
}
/*
Remove the inheritance of text transform in Edge and Firefox.
*/
button,
select {
text-transform: none;
}
/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Remove default button styles.
*/
button,
[type='button'],
[type='reset'],
[type='submit'] {
-webkit-appearance: button;
/* 1 */
background-color: transparent;
/* 2 */
background-image: none;
/* 2 */
}
/*
Use the modern Firefox focus style for all focusable elements.
*/
:-moz-focusring {
outline: auto;
}
/*
Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
*/
:-moz-ui-invalid {
box-shadow: none;
}
/*
Add the correct vertical alignment in Chrome and Firefox.
*/
progress {
vertical-align: baseline;
}
/*
Correct the cursor style of increment and decrement buttons in Safari.
*/
::-webkit-inner-spin-button,
::-webkit-outer-spin-button {
height: auto;
}
/*
1. Correct the odd appearance in Chrome and Safari.
2. Correct the outline style in Safari.
*/
[type='search'] {
-webkit-appearance: textfield;
/* 1 */
outline-offset: -2px;
/* 2 */
}
/*
Remove the inner padding in Chrome and Safari on macOS.
*/
::-webkit-search-decoration {
-webkit-appearance: none;
}
/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Change font properties to `inherit` in Safari.
*/
::-webkit-file-upload-button {
-webkit-appearance: button;
/* 1 */
font: inherit;
/* 2 */
}
/*
Add the correct display in Chrome and Safari.
*/
summary {
display: list-item;
}
/*
Removes the default spacing and border for appropriate elements.
*/
blockquote,
dl,
dd,
h1,
h2,
h3,
h4,
h5,
h6,
hr,
figure,
p,
pre {
margin: 0;
}
fieldset {
margin: 0;
padding: 0;
}
legend {
padding: 0;
}
ol,
ul,
menu {
list-style: none;
margin: 0;
padding: 0;
}
/*
Prevent resizing textareas horizontally by default.
*/
textarea {
resize: vertical;
}
/*
1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
2. Set the default placeholder color to the user's configured gray 400 color.
*/
input::-moz-placeholder, textarea::-moz-placeholder {
opacity: 1;
/* 1 */
color: #9ca3af;
/* 2 */
}
input::placeholder,
textarea::placeholder {
opacity: 1;
/* 1 */
color: #9ca3af;
/* 2 */
}
/*
Set the default cursor for buttons.
*/
button,
[role="button"] {
cursor: pointer;
}
/*
Make sure disabled buttons don't get the pointer cursor.
*/
:disabled {
cursor: default;
}
/*
1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
This can trigger a poorly considered lint error in some tools but is included by design.
*/
img,
svg,
video,
canvas,
audio,
iframe,
embed,
object {
display: block;
/* 1 */
vertical-align: middle;
/* 2 */
}
/*
Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
*/
img,
video {
max-width: 100%;
height: auto;
}
/* Make elements with the HTML hidden attribute stay hidden by default */
[hidden] {
display: none;
}
*, ::before, ::after {
--tw-border-spacing-x: 0;
--tw-border-spacing-y: 0;
--tw-translate-x: 0;
--tw-translate-y: 0;
--tw-rotate: 0;
--tw-skew-x: 0;
--tw-skew-y: 0;
--tw-scale-x: 1;
--tw-scale-y: 1;
--tw-pan-x: ;
--tw-pan-y: ;
--tw-pinch-zoom: ;
--tw-scroll-snap-strictness: proximity;
--tw-ordinal: ;
--tw-slashed-zero: ;
--tw-numeric-figure: ;
--tw-numeric-spacing: ;
--tw-numeric-fraction: ;
--tw-ring-inset: ;
--tw-ring-offset-width: 0px;
--tw-ring-offset-color: #fff;
--tw-ring-color: rgb(59 130 246 / 0.5);
--tw-ring-offset-shadow: 0 0 #0000;
--tw-ring-shadow: 0 0 #0000;
--tw-shadow: 0 0 #0000;
--tw-shadow-colored: 0 0 #0000;
--tw-blur: ;
--tw-brightness: ;
--tw-contrast: ;
--tw-grayscale: ;
--tw-hue-rotate: ;
--tw-invert: ;
--tw-saturate: ;
--tw-sepia: ;
--tw-drop-shadow: ;
--tw-backdrop-blur: ;
--tw-backdrop-brightness: ;
--tw-backdrop-contrast: ;
--tw-backdrop-grayscale: ;
--tw-backdrop-hue-rotate: ;
--tw-backdrop-invert: ;
--tw-backdrop-opacity: ;
--tw-backdrop-saturate: ;
--tw-backdrop-sepia: ;
}
::backdrop {
--tw-border-spacing-x: 0;
--tw-border-spacing-y: 0;
--tw-translate-x: 0;
--tw-translate-y: 0;
--tw-rotate: 0;
--tw-skew-x: 0;
--tw-skew-y: 0;
--tw-scale-x: 1;
--tw-scale-y: 1;
--tw-pan-x: ;
--tw-pan-y: ;
--tw-pinch-zoom: ;
--tw-scroll-snap-strictness: proximity;
--tw-ordinal: ;
--tw-slashed-zero: ;
--tw-numeric-figure: ;
--tw-numeric-spacing: ;
--tw-numeric-fraction: ;
--tw-ring-inset: ;
--tw-ring-offset-width: 0px;
--tw-ring-offset-color: #fff;
--tw-ring-color: rgb(59 130 246 / 0.5);
--tw-ring-offset-shadow: 0 0 #0000;
--tw-ring-shadow: 0 0 #0000;
--tw-shadow: 0 0 #0000;
--tw-shadow-colored: 0 0 #0000;
--tw-blur: ;
--tw-brightness: ;
--tw-contrast: ;
--tw-grayscale: ;
--tw-hue-rotate: ;
--tw-invert: ;
--tw-saturate: ;
--tw-sepia: ;
--tw-drop-shadow: ;
--tw-backdrop-blur: ;
--tw-backdrop-brightness: ;
--tw-backdrop-contrast: ;
--tw-backdrop-grayscale: ;
--tw-backdrop-hue-rotate: ;
--tw-backdrop-invert: ;
--tw-backdrop-opacity: ;
--tw-backdrop-saturate: ;
--tw-backdrop-sepia: ;
}
.container {
width: 100%;
}
@media (min-width: 640px) {
.container {
max-width: 640px;
}
}
@media (min-width: 768px) {
.container {
max-width: 768px;
}
}
@media (min-width: 1024px) {
.container {
max-width: 1024px;
}
}
@media (min-width: 1280px) {
.container {
max-width: 1280px;
}
}
@media (min-width: 1536px) {
.container {
max-width: 1536px;
}
}
.visible {
visibility: visible;
}
.absolute {
position: absolute;
}
.relative {
position: relative;
}
.inset-0 {
inset: 0px;
}
.mx-auto {
margin-left: auto;
margin-right: auto;
}
.mb-10 {
margin-bottom: 2.5rem;
}
.mr-10 {
margin-right: 2.5rem;
}
.mt-10 {
margin-top: 2.5rem;
}
.mt-3 {
margin-top: 0.75rem;
}
.flex {
display: flex;
}
.grid {
display: grid;
}
.hidden {
display: none;
}
.h-screen {
height: 100vh;
}
.w-1\/3 {
width: 33.333333%;
}
.w-full {
width: 100%;
}
.max-w-2xl {
max-width: 42rem;
}
.max-w-7xl {
max-width: 80rem;
}
.max-w-xl {
max-width: 36rem;
}
.shrink {
flex-shrink: 1;
}
.grid-cols-1 {
grid-template-columns: repeat(1, minmax(0, 1fr));
}
.flex-col {
flex-direction: column;
}
.items-start {
align-items: flex-start;
}
.items-center {
align-items: center;
}
.items-stretch {
align-items: stretch;
}
.justify-center {
justify-content: center;
}
.justify-between {
justify-content: space-between;
}
.gap-2 {
gap: 0.5rem;
}
.gap-x-4 {
-moz-column-gap: 1rem;
column-gap: 1rem;
}
.gap-x-8 {
-moz-column-gap: 2rem;
column-gap: 2rem;
}
.gap-y-16 {
row-gap: 4rem;
}
.rounded {
border-radius: 0.25rem;
}
.rounded-full {
border-radius: 9999px;
}
.border-b {
border-bottom-width: 1px;
}
.border-t {
border-top-width: 1px;
}
.border-gray-200 {
--tw-border-opacity: 1;
border-color: rgb(229 231 235 / var(--tw-border-opacity));
}
.bg-gray-500 {
--tw-bg-opacity: 1;
background-color: rgb(107 114 128 / var(--tw-bg-opacity));
}
.bg-gray-800 {
--tw-bg-opacity: 1;
background-color: rgb(31 41 55 / var(--tw-bg-opacity));
}
.bg-sky-200 {
--tw-bg-opacity: 1;
background-color: rgb(186 230 253 / var(--tw-bg-opacity));
}
.bg-white {
--tw-bg-opacity: 1;
background-color: rgb(255 255 255 / var(--tw-bg-opacity));
}
.p-1 {
padding: 0.25rem;
}
.p-2 {
padding: 0.5rem;
}
.px-3 {
padding-left: 0.75rem;
padding-right: 0.75rem;
}
.px-6 {
padding-left: 1.5rem;
padding-right: 1.5rem;
}
.py-2 {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
}
.py-24 {
padding-top: 6rem;
padding-bottom: 6rem;
}
.pt-10 {
padding-top: 2.5rem;
}
.text-2xl {
font-size: 1.5rem;
line-height: 2rem;
}
.text-lg {
font-size: 1.125rem;
line-height: 1.75rem;
}
.text-sm {
font-size: 0.875rem;
line-height: 1.25rem;
}
.text-xl {
font-size: 1.25rem;
line-height: 1.75rem;
}
.text-xs {
font-size: 0.75rem;
line-height: 1rem;
}
.font-bold {
font-weight: 700;
}
.font-medium {
font-weight: 500;
}
.font-semibold {
font-weight: 600;
}
.leading-6 {
line-height: 1.5rem;
}
.text-gray-200 {
--tw-text-opacity: 1;
color: rgb(229 231 235 / var(--tw-text-opacity));
}
.text-gray-300 {
--tw-text-opacity: 1;
color: rgb(209 213 219 / var(--tw-text-opacity));
}
.text-gray-500 {
--tw-text-opacity: 1;
color: rgb(107 114 128 / var(--tw-text-opacity));
}
.text-gray-900 {
--tw-text-opacity: 1;
color: rgb(17 24 39 / var(--tw-text-opacity));
}
.drop-shadow {
--tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / 0.1)) drop-shadow(0 1px 1px rgb(0 0 0 / 0.06));
filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}
.first\:border-none:first-child {
border-style: none;
}
.hover\:text-gray-400:hover {
--tw-text-opacity: 1;
color: rgb(156 163 175 / var(--tw-text-opacity));
}
.group:hover .group-hover\:block {
display: block;
}
.group:hover .group-hover\:text-gray-600 {
--tw-text-opacity: 1;
color: rgb(75 85 99 / var(--tw-text-opacity));
}
@media (min-width: 640px) {
.sm\:mt-16 {
margin-top: 4rem;
}
.sm\:py-32 {
padding-top: 8rem;
padding-bottom: 8rem;
}
.sm\:pt-16 {
padding-top: 4rem;
}
}
@media (min-width: 1024px) {
.lg\:mx-0 {
margin-left: 0px;
margin-right: 0px;
}
.lg\:max-w-none {
max-width: none;
}
.lg\:grid-cols-3 {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.lg\:px-8 {
padding-left: 2rem;
padding-right: 2rem;
}
}

View File

@ -5,18 +5,16 @@ title: Mats Rauhala
![](./images/profile.jpg) ![](./images/profile.jpg)
I'm a software developer from southern Finland. I'm currently working as a I'm a software developer from southern Finland. I'm currently working as a
Haskell developer at Relex Oy involved in an internal tool. I also have Haskell developer at Relex Oy. I also have experience with systems integrations
experience with systems integrations and backend web development. and backend web development.
I'm also an aviation enthusiast. I have a glider pilots license and a touring My [GPG key](./resources/0x9DE6E04ED1918118.txt)
motor glider pilots license (LAPL(S)+TMG).
My [GPG key](./resources/2104943D6033C.txt)
### Notable experience and interests ### Notable experience and interests
- **Relex Oy** - **Relex Oy**
- Working as a Senior Software Developer at Relex Oy - Working as a Lead Software Developer at Relex Oy
- Transitioned from day to day code to a role more close to an architect
- Three distinct products, all of which written in Haskell - Three distinct products, all of which written in Haskell
- Internal integration tool - Internal integration tool
- Relex Deploy 1, a tool for deploying the core product to hosts - Relex Deploy 1, a tool for deploying the core product to hosts

42
rauhala.info/profile.html Normal file
View File

@ -0,0 +1,42 @@
<div class="flex">
<div class="w-1/3 bg-sky-200">
<img class="rounded-full drop-shadow" src="./images/profile.jpg"/>
<div>
<div class="">
<h2 class="text-xl font-bold">Mats Rauhala</h2>
<h3 class="text-sm">Lead Software Developer</h3>
</div>
</div>
</div>
<div class="w-full">
<div>
<h2 class="text-xl">Working on</h2>
<!-- Skills -->
<!-- Take ideas from https://www.mockplus.com/blog/post/profile-page-design -->
<!-- XXX: Convert to alpine.js to remove some repetition? -->
<div class="p-1">
<button class="bg-gray-500 text-gray-200 rounded-full px-3 py-2 ">Haskell</button>
</div>
<div class="p-1">
<button class="bg-gray-500 text-gray-200 rounded-full px-3 py-2 ">Functional programming</button>
</div>
<div class="p-1">
<button class="bg-gray-500 text-gray-200 rounded-full px-3 py-2 ">Databases</button>
</div>
<div class="p-1">
<button class="bg-gray-500 text-gray-200 rounded-full px-3 py-2 ">Kubernetes</button>
</div>
</div>
<div>
<!-- Past experience -->
<!-- I'm thinking of something like closeable boxes for more information? -->
</div>
</div>
<div class="bg-sky-200 w-1/3">
<h2 class="text-lg font-medium">Biography</h2>
<p>A software developer from southern Finland<p>
<h2 class="text-lg font-medium">Location</h2>
Espoo, Finland
</div>
</div>

View File

@ -2,7 +2,6 @@
title: bidirectional title: bidirectional
github: https://github.com/MasseR/bidirectional github: https://github.com/MasseR/bidirectional
issues: https://github.com/MasseR/bidirectional/issues issues: https://github.com/MasseR/bidirectional/issues
badge: https://github.com/MasseR/bidirectional/workflows/Test/badge.svg
--- ---
Bidirectional serialization based on Lysxia's post on [Monadic profunctors for bidirectional programming](https://blog.poisson.chat/posts/2017-01-01-monadic-profunctors.html). Bidirectional serialization based on Lysxia's post on [Monadic profunctors for bidirectional programming](https://blog.poisson.chat/posts/2017-01-01-monadic-profunctors.html).

View File

@ -2,7 +2,6 @@
title: zettelkast title: zettelkast
github: https://github.com/MasseR/zettelkast github: https://github.com/MasseR/zettelkast
issues: https://github.com/MasseR/zettelkast/issues issues: https://github.com/MasseR/zettelkast/issues
badge: https://github.com/MasseR/zettelkast/workflows/Test/badge.svg
--- ---
Command-line tool for managing zettelkast documents. The tool primarily focuses Command-line tool for managing zettelkast documents. The tool primarily focuses

View File

@ -0,0 +1,514 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
AQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9
AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJico
KSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJ
ipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi
4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcI
CQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKR
obHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldY
WVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0
tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMB
AAIRAxEAPwCyTg0E0hNNJoAduo3UzNJmgCXdRuqLdS5oAl3UZqHNKDQBLmk3U0bm
PAJqUQSn+HH1oAaDS07ylXG6VfoKUvAo6Ox/KgBlOVHbopP4Ufago+WNR79aRrmR
v4yPpQBJ5D9ThR7mjy4h96XPsBVcyE9STTd2aALW+EHhCfqaQ3JH3VUfQVWzRuoA
laeRjyxpm4nrTM0ZoAXPvSE0lGaACikooAdmkJqb7Ow+8VX6mk2RL96Qn6CgCHNH
WpTJCg4j3f7xpv2plHyBV+goAFhkPOw/U04RcfM6j8c1A0zP95ifrUe7igC3iBOr
FvpxR50a/diGf9o5qpuozQMtG5fsQv8AujFMaQk8sT+NQbuetIXFAE2/FJ5gqBpQ
Opqu93GjYZ1H1NK4F8SDFJ5yjqa59tXW3lljdwW3fLg9ary6t+8HPWmB1IkB6U7N
YdjfGc/LWsHOKQE2aM1Fvpd1MRJuozUe6jdQA/dRmm5HrTSaAJM0VFmigCZnJ6k0
wvQTTD1oAUtmm5oNNNACk0maSigBc0E1DNMkERkkYKo7muZv/FD+Z5doAF/vkc0r
jOluLqK2j3zOFX3rmdS8Uk5jsxj/AGj/AErAvL+e8k/eyM+PWqpbB96B2LjatqDk
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
KWoXaAMg7ScUiU+ZWEw9sOMOTUl6ZwN31AbEnitrwb69W8wxHiQilEFMAUn0eWPV
pzLw9CHm+xryZ2/pLdGqaAoc2NUCtQnMbLmuoK20O04hLNzLay/J5rlponeVo6i0
ZrAae9p1UMOq1GlqUnvry5Ib1segir0S6oekelXi9ommIDWzhoGdGfqaSwQIQSLi
6K7dRN0dwSi6eltbUT5dtD1NYXRzIFJhdWhhbGEgKFdvcmsgYWRkcmVzcykgPG1h
dHMucmF1aGFsYUByZWxleHNvbHV0aW9ucy5jb20+iQJMBBMBCgA2FiEEldvmTC6m
TWsODIwvnebgTtGRgRgFAmEfo5cCGwMECwkIBwQVCgkIBRYCAwEAAh4BAheAAAoJ
EJ3m4E7RkYEYSSYP/1+euBleDqO0hEJ3GULsCoSKaocR0JjVC24ydbdrAH6476lv
9GK/XXGazusaTtB9c6+hWk7gby8vyl5V+6HR7oVsQOHuLN19yaPRc/Y9npmDMYL1
ekxzNgF5S1KP4P4pymCmSDB93MzMWKVVq48xfBULUDKs7nK5wsmhkVzBStWS/bvK
IqaMtvyxvv1QJe/N73yjseikp13k+NQx7O+O8tVlRZGq7egNOrNjNm3Qm5npUleG
FLzSUN7cEXvrK5foLYtv7JN9ew9To0Y+k7JRftuv8kTZl1WPslDyjtG2ckwQsus/
ElL7eKTZmmzVKWRpJ8h4NJQsbv3KVr2Fz2Z83VaLCZErWOvm1R03cRzVeqDp9js/
G4iuaTcrfNGdY5cUXdlLx8zYKdQP/skaZ1L2WfcrEJ/CaZuKAGhum81e1T/MgKYG
3ArZ0RNdtG3OJ2Ae/gVZN+28bH6AbVausdraP8alO8+UMLvIiUvEvzt7K2o8p5Av
6+YJ8CfnkuE68sQqZzHMdgu7VLApqIuIMuI/j9VJg345wVBqR07/xJ0PP6jODoHg
ZDPUS8QBFT86VevWYnptwPk5z32OTIpLcqkvgWqHZVTd3iAtZks09rlYgtA8Z/ec
5WtsYduR3+r/P1rn+GS/Ot7A0Q2fS0oW0dt6pzVkn3dbWrw8vLkLJKD5TUrttCVN
YXRzIFJhdWhhbGEgPG1hdHMucmF1aGFsYUBnbWFpbC5jb20+iQJMBBMBCgA2FiEE
ldvmTC6mTWsODIwvnebgTtGRgRgFAmEfo60CGwMECwkIBwQVCgkIBRYCAwEAAh4B
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
QhI/nB5QWaALtbgTQRN0qEGVSjA=
=/9Yv
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -1,176 +0,0 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
=VUWT
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -5,35 +5,46 @@
<meta http-equiv="x-ua-compatible" content="ie=edge"> <meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title>rauhala.info - $title$</title> <title>rauhala.info - $title$</title>
<link rel="stylesheet" href="/css/default.css" />
<link rel="stylesheet" href="/css/highlight.css"> <link rel="stylesheet" href="/css/highlight.css">
<link rel="stylesheet" href="/css/index.css">
</head> </head>
<body> <body>
<div class="h-screen">
<header> <header>
<!-- <div class="logo"> --> <nav class="flex bg-gray-800 text-gray-300 items-stretch text-lg width-full align-center justify-between">
<!-- <a href="/">rauhala.info</a> --> <ul class="flex gap-2 p-2">
<!-- </div> --> <li class="hover:text-gray-400"><a href="/">Home</a></li>
<nav> <li class="hover:text-gray-400"><a href="/posts.html">Posts</a></li>
<!-- Git logo from https://git-scm.com/downloads/logos --> <li class="hover:text-gray-400"><a href="/projects.html">Projects</a></li>
<!-- Logo by Jason Long --> </ul>
<a href="/">Home</a> <ul class="flex gap-2 p-2">
<a href="/posts.html">Posts</a> <li class="group">Git
<a href="/projects.html">Projects</a> <!-- Hide the dropdown by default, but make it visible on the parent hover
<a href="https://git.rauhala.info"><img src="/images/git_16.png" alt="git" /></a> see the 'group' on the toplevel
<a href="/contact.html">Contact</a> -->
<ul class="hidden bg-gray-800 text-gray-300 rounded p-2 group-hover:block absolute">
<li class="hover:text-gray-400"><a href="https://git.rauhala.info/MasseR">Gitea</a></li>
<li class="hover:text-gray-400"><a href="https://github.com/MasseR">GitHub</a></li>
</ul>
</li>
<li class="hover:text-gray-400"><a href="/contact.html">Contact</a></li>
</ul>
</nav> </nav>
</header> </header>
<main role="main"> <main role="main" class="">
<div> <div>
<h1>$title$</h1>
$body$ $body$
</div> </div>
</main> </main>
<footer> <footer class="">
Site proudly generated by <div class="flex justify-center">
<a href="http://jaspervdj.be/hakyll">Hakyll</a> <div>
Site proudly generated by <a href="http://jaspervdj.be/hakyll">Hakyll</a>
</div>
</div>
</footer> </footer>
</div>
</body> </body>
</html> </html>

View File

@ -1,7 +1,21 @@
<ul> <div class="bg-white py-24 sm:py-32">
<div class="mx-auto max-w-7xl px-6 lg:px-8">
$for(items)$ $for(items)$
<li> <div class="mx-auto mt-10 grid max-w-2xl grid-cols-1 gap-x-8 gap-y-16 first:border-none border-t border-gray-200 pt-10 sm:mt-16 sm:pt-16 lg:mx-0 lg:max-w-none lg:grid-cols-3">
<a href="$url$">$title$</a> - $date$ <article class="flex max-w-xl flex-col items-start justify-between">
</li> <div class="flex items-center gap-x-4 text-xs">
<time datetime="$date$" class="text-gray-500">$date$</time>
</div>
<div class="group relative">
<h3 class="mt-3 text-lg font-semibold leading-6 text-gray-900 group-hover:text-gray-600">
<a href="$url$">
<span class="absolute inset-0"></span>
$title$
</a>
</h3>
</div>
</article>
</div>
$endfor$ $endfor$
</ul> </div>
</div>

View File

@ -1,8 +1,15 @@
<article> <div class="container mx-auto mt-10 mb-10">
<section class="header"> <article class="max-w-xl flex-col items-start justify-center">
Posted on $date$ <div class="flex items-center gap-x-4 text-xs">
<time datetime="$date$" class="text-gray-500">$date$</time>
</div>
<div class="group relative">
<section class="text-2xl text-primary border-b">
$title$
</section> </section>
<section> <section>
$body$ $body$
</section> </section>
</div>
</article> </article>
</div>

View File

@ -1,11 +1,23 @@
<ul> <div class="bg-white py-24 sm:py-32">
<div class="mx-auto max-w-7xl px-6 lg:px-8">
$for(items)$ $for(items)$
<li> <div class="mx-auto mt-10 grid max-w-2xl grid-cols-1 gap-x-8 gap-y-16 first:border-none border-t border-gray-200 pt-10 sm:mt-16 sm:pt-16 lg:mx-0 lg:max-w-none lg:grid-cols-3">
<div class="projectlist"> <article class="flex max-w-xl flex-col items-start justify-between">
<a href="$url$">$title$</a> <div class="flex items-center gap-x-4 text-xs">
<a href="$github$">$if(badge)$<img src="$badge$" />$else$ Github $endif$</a> <time datetime="$date$" class="text-gray-500">$date$</time>
</div>
<div class="group relative">
<h3 class="mt-3 text-lg font-semibold leading-6 text-gray-900 group-hover:text-gray-600">
<a href="$url$">
<span class="absolute inset-0"></span>
$title$
</a>
<a href="$github$">$if(badge)$<img src="$badge$" />$else$$endif$</a>
</h3>
</div>
</article>
</div> </div>
</li>
$endfor$ $endfor$
</ul> </div>
</div>

View File

@ -1,12 +1,24 @@
<div class="sidebar-container"> <div class="container mx-auto mt-10 mb-10">
<article> <section class="relative flex">
<nav class="mr-10">
<ul>
<li><a href="$github$">Github</a></li>
<li><a href="$issues$">Issues</a></li>
$if(badge)$<img src="$badge$" />$endif$
</ul>
</nav>
<article class="flex max-w-xl flex-col items-start justify-center">
<div class="flex items-center gap-x-4 text-xs">
<time datetime="$date$" class="text-gray-500">$date$</time>
</div>
<div class="group relative">
<section class="text-2xl text-primary border-b">
$title$
</section>
<section> <section>
$body$ $body$
</section> </section>
</div>
</article> </article>
<div class="sidebar"> </section>
<a href="$github$">Github</a>
<a href="$issues$">Issues</a>
$if(badge)$<img src="$badge$" />$endif$
</div>
</div> </div>

View File

@ -1,111 +0,0 @@
==================================================================
https://keybase.io/masser
--------------------------------------------------------------------
I hereby claim:
* I am an admin of https://masser.keybase.pub
* I am masser (https://keybase.io/masser) on keybase.
* I have a public key ASD7WFMicMJhoArgnvPuR7Dc92WStIUWWXcyngnsTE_IaQo
To do so, I am signing this object:
{
"body": {
"key": {
"eldest_kid": "01202eb5d3b8d2fc63e4bc9c6edefb3a38f1043dfdc44a7268393951fe0ea5214cf00a",
"host": "keybase.io",
"kid": "0120fb58532270c261a00ae09ef3ee47b0dcf76592b485165977329e09ec4c4fc8690a",
"uid": "b01557931e13482e9e646593a64e9119",
"username": "masser"
},
"merkle_root": {
"ctime": 1580587604,
"hash": "890506579950548b2aa6fd0f35850b9fdb1d064786714f18515d0e3089cdc2458c5fe847d40ca71c2e021ca11677de055ac97804c53d1bef89432f88b57599d4",
"hash_meta": "104419595abc52918530f85495417faf35c7a5a608d6730bf53152dfa7288970",
"seqno": 14451686
},
"service": {
"entropy": "QIvRp0qNOIZFplyzXERiwp75",
"hostname": "masser.keybase.pub",
"protocol": "https:"
},
"type": "web_service_binding",
"version": 2
},
"client": {
"name": "keybase.io go client",
"version": "4.3.1"
},
"ctime": 1580587641,
"expire_in": 504576000,
"prev": "c99f66ba0bfa7ff6be736e24691c8007b0db41b6036b7f1e5f9335ab7f3550f4",
"seqno": 34,
"tag": "signature"
}
which yields the signature:
hKRib2R5hqhkZXRhY2hlZMOpaGFzaF90eXBlCqNrZXnEIwEg+1hTInDCYaAK4J7z7kew3PdlkrSFFll3Mp4J7ExPyGkKp3BheWxvYWTESpcCIsQgyZ9mugv6f/a+c24kaRyAB7DbQbYDa38eX5M1q381UPTEIH8FtgpzXt/JJxrhAYknW7xL4+K57JBJnbhFpXWAfEH5AgHCo3NpZ8RApEnmCcZApdOTf+XAHRbbgoysAZHfyTHamWC/BEHKuqEf/BlUFSxo6ASa/YC+Y2sMJfW2iRFlP2bs822TyJTBA6hzaWdfdHlwZSCkaGFzaIKkdHlwZQildmFsdWXEINm3yJdAbmbGJd03EnpuKVh2JzkI8WkngbWbAxbbR0MMo3RhZ80CAqd2ZXJzaW9uAQ==
And finally, I am proving ownership of this host by posting or
appending to this document.
View my publicly-auditable identity here: https://keybase.io/masser
===================================================================
https://keybase.io/masser
--------------------------------------------------------------------
I hereby claim:
* I am an admin of https://rauhala.info
* I am masser (https://keybase.io/masser) on keybase.
* I have a public key ASD7WFMicMJhoArgnvPuR7Dc92WStIUWWXcyngnsTE_IaQo
To do so, I am signing this object:
{
"body": {
"key": {
"eldest_kid": "01202eb5d3b8d2fc63e4bc9c6edefb3a38f1043dfdc44a7268393951fe0ea5214cf00a",
"host": "keybase.io",
"kid": "0120fb58532270c261a00ae09ef3ee47b0dcf76592b485165977329e09ec4c4fc8690a",
"uid": "b01557931e13482e9e646593a64e9119",
"username": "masser"
},
"merkle_root": {
"ctime": 1580591326,
"hash": "2b1b8c5e3de98e3e80ec4b4c28270066744d5d0982c23e4c13ec97d9311e32996b0cc39ab07f51a2418f833d3f03c0219c7ebd8cdc9c99ac09d3f88d0b6129d1",
"hash_meta": "0e85fd563e1159d6c5b32f5c424d4c97101c3a11346a0dad77bdbf043ca4f287",
"seqno": 14452336
},
"service": {
"entropy": "7UNm+4us1fZE3TRssgGatBC2",
"hostname": "rauhala.info",
"protocol": "https:"
},
"type": "web_service_binding",
"version": 2
},
"client": {
"name": "keybase.io go client",
"version": "4.3.1"
},
"ctime": 1580591336,
"expire_in": 504576000,
"prev": "ed5dd9b2571746743f37dd55f59235bd46d7f7de01a2bafba14b9c0929751aee",
"seqno": 35,
"tag": "signature"
}
which yields the signature:
hKRib2R5hqhkZXRhY2hlZMOpaGFzaF90eXBlCqNrZXnEIwEg+1hTInDCYaAK4J7z7kew3PdlkrSFFll3Mp4J7ExPyGkKp3BheWxvYWTESpcCI8Qg7V3ZslcXRnQ/N91V9ZI1vUbX994Borr7oUucCSl1Gu7EIJld9Pai+YxhSvZUIA+ZyzwEEbpy98uEqp975YKAEdz9AgHCo3NpZ8RAtksa9w0UQrwg8dPGEzahht+hY4QKQthbZ/yWuOSmfA3C5E1/KorbIEi+tcy5lkSJqNbZRSqBgpl9zerYw5bbAahzaWdfdHlwZSCkaGFzaIKkdHlwZQildmFsdWXEICy29OKKJc5LUELFLo8kW15N3zex43ussKLFeGLhTDapo3RhZ80CAqd2ZXJzaW9uAQ==
And finally, I am proving ownership of this host by posting or
appending to this document.
View my publicly-auditable identity here: https://keybase.io/masser
===================================================================================================================================

View File

@ -36,6 +36,7 @@ main = hakyllWith defaultConfiguration{ignoreFile = ignore} $ do
match "posts/*" $ do match "posts/*" $ do
route $ setExtension "html" route $ setExtension "html"
compile $ pandocCompiler compile $ pandocCompiler
>>= saveSnapshot "content"
>>= loadAndApplyTemplate "templates/post.html" postContext >>= loadAndApplyTemplate "templates/post.html" postContext
>>= loadAndApplyTemplate "templates/default.html" defaultContext >>= loadAndApplyTemplate "templates/default.html" defaultContext
>>= relativizeUrls >>= relativizeUrls
@ -43,12 +44,18 @@ main = hakyllWith defaultConfiguration{ignoreFile = ignore} $ do
match "projects/*" $ do match "projects/*" $ do
route $ setExtension "html" route $ setExtension "html"
compile $ pandocCompiler compile $ pandocCompiler
>>= saveSnapshot "content"
>>= loadAndApplyTemplate "templates/project.html" postContext >>= loadAndApplyTemplate "templates/project.html" postContext
>>= loadAndApplyTemplate "templates/default.html" defaultContext >>= loadAndApplyTemplate "templates/default.html" defaultContext
>>= relativizeUrls >>= relativizeUrls
match (fromList ["index.markdown", "contact.markdown"]) $ do match "profile.html" $ do
route $ constRoute "index.html"
compile $ getResourceBody
>>= loadAndApplyTemplate "templates/default.html" defaultContext
>>= relativizeUrls
match (fromList ["contact.markdown"]) $ do
route $ setExtension "html" route $ setExtension "html"
compile $ pandocCompiler compile $ pandocCompiler
>>= loadAndApplyTemplate "templates/default.html" defaultContext >>= loadAndApplyTemplate "templates/default.html" defaultContext
@ -97,7 +104,7 @@ archive Archive{..} = create [output] $ do
listField "items" context items listField "items" context items
<> constField "title" title <> constField "title" title
<> defaultContext <> defaultContext
items = recentFirst =<< loadAll input items = recentFirst =<< loadAllSnapshots input "content"
makeItem "" makeItem ""
>>= loadAndApplyTemplate template itemsContext >>= loadAndApplyTemplate template itemsContext
>>= loadAndApplyTemplate "templates/default.html" itemsContext >>= loadAndApplyTemplate "templates/default.html" itemsContext

33
support/deploy-rauhala-info.sh Executable file
View File

@ -0,0 +1,33 @@
#!@bash@/bin/bash
set -e
nix build .#rauhala-info
API=/ip4/127.0.0.1/tcp/5001
function upload() {
echo "Uploading.."
hash=$(ipfs --api $API add -r result/share --pin=false -Q)
}
function pin() {
echo "Pinning"
ipfs --api $API pin remote rm --service=pinata --cid="$hash"
ipfs --api $API pin remote add --service=pinata --name=rauhala.info "$hash"
}
function publish() {
echo "Updating name"
ipfs --api $API name publish --key=rauhala.info "$hash"
}
upload
pin &
publish &
wait

9
tailwind.config.js Normal file
View File

@ -0,0 +1,9 @@
/** @type {import('tailwindcss').Config} */
module.exports = {
content: [ "rauhala.info/**/{*.markdown,*.html}"],
theme: {
extend: {},
},
plugins: [],
}

3
tailwind.css Normal file
View File

@ -0,0 +1,3 @@
@tailwind base;
@tailwind components;
@tailwind utilities;

20
tailwind/default.nix Normal file
View File

@ -0,0 +1,20 @@
{ lib, stdenv, fetchurl }:
stdenv.mkDerivation rec {
pname = "tailwindcss-cli";
version = "3.3.1";
src = fetchurl {
url = "https://github.com/tailwindlabs/tailwindcss/releases/download/v${version}/tailwindcss-linux-x64";
sha256 = "sha256-i1ekM61t0SXR+iw9K9Z0y7cm3W4uQ4Kxodt/NK9fywg=";
};
dontUnpack = true;
dontStrip = true;
buildPhase = ''
cp $src tailwindcss
chmod u+x tailwindcss
'';
installPhase = ''
mkdir -p $out/bin
cp tailwindcss $out/bin/tailwindcss
'';
}