first commit
This commit is contained in:
commit
55f17cf6f0
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
_site
|
||||||
|
_cache
|
||||||
|
.DS_Store
|
5
_cms.ts
Normal file
5
_cms.ts
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
import lumeCMS from "lume/cms/mod.ts";
|
||||||
|
|
||||||
|
const cms = lumeCMS();
|
||||||
|
|
||||||
|
export default cms;
|
63
_config.ts
Normal file
63
_config.ts
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
import lume from "lume/mod.ts";
|
||||||
|
import jsx from "lume/plugins/jsx.ts";
|
||||||
|
import mdx from "lume/plugins/mdx.ts";
|
||||||
|
import robots from "lume/plugins/robots.ts";
|
||||||
|
import sitemap from "lume/plugins/sitemap.ts";
|
||||||
|
import tailwindcss from "lume/plugins/tailwindcss.ts";
|
||||||
|
import postcss from "lume/plugins/postcss.ts";
|
||||||
|
import readingInfo from "lume/plugins/reading_info.ts";
|
||||||
|
import nunjucks from "lume/plugins/nunjucks.ts";
|
||||||
|
import date from "lume/plugins/date.ts";
|
||||||
|
import shiki from "https://deno.land/x/lume_shiki/mod.ts";
|
||||||
|
|
||||||
|
import tailwindConfig from "./tailwind.config.ts";
|
||||||
|
|
||||||
|
import Mono from "./src/_components/Mono.tsx";
|
||||||
|
import InlineIcon from "./src/_components/InlineIcon.tsx";
|
||||||
|
import VertSpacer from "./src/_components/VertSpacer.tsx";
|
||||||
|
|
||||||
|
const site = lume({
|
||||||
|
src: "./src",
|
||||||
|
});
|
||||||
|
|
||||||
|
site.use(
|
||||||
|
readingInfo({
|
||||||
|
extensions: [".md", ".mdx", ".njk"],
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
site.use(jsx());
|
||||||
|
site.use(
|
||||||
|
shiki({
|
||||||
|
highlighter: {
|
||||||
|
langs: ["c", "bash", "typescript", "javascript", "go", "rust"],
|
||||||
|
themes: ["github-dark"],
|
||||||
|
},
|
||||||
|
theme: "github-dark",
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
site.use(
|
||||||
|
mdx({
|
||||||
|
components: {
|
||||||
|
Mono: Mono,
|
||||||
|
InlineIcon: InlineIcon,
|
||||||
|
VertSpacer: VertSpacer,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
site.use(robots());
|
||||||
|
site.use(sitemap());
|
||||||
|
site.use(
|
||||||
|
tailwindcss({
|
||||||
|
extensions: [".mdx", ".jsx", ".tsx", ".md", ".html", ".njx", ".vto"],
|
||||||
|
options: tailwindConfig,
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
site.use(postcss());
|
||||||
|
site.use(nunjucks());
|
||||||
|
site.use(date());
|
||||||
|
|
||||||
|
site.copy("fonts", "fonts");
|
||||||
|
site.copy("favicon.png", "favicon.png");
|
||||||
|
site.copy("pictures", "pictures");
|
||||||
|
|
||||||
|
export default site;
|
18
deno.json
Normal file
18
deno.json
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"imports": {
|
||||||
|
"lume/": "https://deno.land/x/lume@v2.5.0/"
|
||||||
|
},
|
||||||
|
"tasks": {
|
||||||
|
"lume": "echo \"import 'lume/cli.ts'\" | deno run -A -",
|
||||||
|
"build": "deno task lume",
|
||||||
|
"serve": "deno task lume -s"
|
||||||
|
},
|
||||||
|
"compilerOptions": {
|
||||||
|
"types": [
|
||||||
|
"lume/types.ts"
|
||||||
|
],
|
||||||
|
"jsx": "react-jsx",
|
||||||
|
"jsxImportSource": "npm:react",
|
||||||
|
"jsxImportSourceTypes": "npm:@types/react"
|
||||||
|
}
|
||||||
|
}
|
16
src/_components/InlineIcon.tsx
Normal file
16
src/_components/InlineIcon.tsx
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
export interface InlineIconProps {
|
||||||
|
src: string;
|
||||||
|
alt: string | undefined;
|
||||||
|
style: any | undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function InlineIcon({ src, alt, style }: InlineIconProps) {
|
||||||
|
return (
|
||||||
|
<img
|
||||||
|
src={src}
|
||||||
|
className="inline h-[1.4em] w-[1.4em] align-text-bottom"
|
||||||
|
alt={alt}
|
||||||
|
style={style}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
9
src/_components/Mono.tsx
Normal file
9
src/_components/Mono.tsx
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
export interface MonoProps {
|
||||||
|
children: HTMLElement[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function Mono({ children }: MonoProps) {
|
||||||
|
return (
|
||||||
|
<span className="p-[4px] font-mono bg-bg-soft text-sm li">{children}</span>
|
||||||
|
);
|
||||||
|
}
|
3
src/_components/VertSpacer.tsx
Normal file
3
src/_components/VertSpacer.tsx
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
export default function VertSpacer() {
|
||||||
|
return <div className="mt-[8px] mb-[8px]"></div>;
|
||||||
|
}
|
1
src/_components/inlineMonospace.vto
Normal file
1
src/_components/inlineMonospace.vto
Normal file
@ -0,0 +1 @@
|
|||||||
|
<span class="p-[5px] font-mono bg-bg-soft">{{ content }}</span>
|
52
src/_includes/base.vto
Normal file
52
src/_includes/base.vto
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<title>{{ title }}</title>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="icon" href="/favicon.png">
|
||||||
|
<meta name="color-scheme" content="light dark" />
|
||||||
|
<meta property="og:type" content="profile">
|
||||||
|
<meta property="og:title" content="{{ title }}">
|
||||||
|
<meta property="og:image" content="https://gravatar.com/avatar/9dcc6fc1513be7249727613a0999b907?size=256">
|
||||||
|
<meta name="description" content="{{ description }}">
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="/styles.css"/>
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Germania+One&display=swap" rel="stylesheet">
|
||||||
|
|
||||||
|
<script defer src="https://anal.over.rest/script.js" data-website-id="24ec91a8-4cda-4d93-a79f-f9330baa2fff"></script>
|
||||||
|
</head>
|
||||||
|
<body class="w-full m-0 bg-bg-0 text-fg-0 font-sans min-h-screen">
|
||||||
|
<header class="px-5 py-4 ml-auto mr-auto flex flex-col items-center bg-bg-hard">
|
||||||
|
<div class="relative max-w-full w-[60rem] flex justify-between">
|
||||||
|
<div>Lain {{ comp.inlineMonospace({ content: "@systemxplore" }) }}</div>
|
||||||
|
<div>
|
||||||
|
{{ if isHomePage }}
|
||||||
|
<span class="px-2 font-bold text-fg-currentPage">whoami</span>
|
||||||
|
{{ else }}
|
||||||
|
<a class="px-2 header-links" href="/">whoami</a>
|
||||||
|
{{ /if }}
|
||||||
|
{{ if isBlogPage }}
|
||||||
|
<span class="px-2 font-bold text-fg-currentPage">blog</span>
|
||||||
|
{{ else }}
|
||||||
|
<a class="px-2 header-links" href="/blog">blog</a>
|
||||||
|
{{ /if }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<main class="px-4 py-1 ml-auto mr-auto flex flex-col items-center flex-1">
|
||||||
|
<div class="relative max-w-full w-[60rem]">
|
||||||
|
{{ content }}
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
{{ if showFooter }}
|
||||||
|
<footer class="px-4 py-4 ml-auto mr-auto flex flex-col items-center bg-bg-hard text-fg-dark text-s font-mono">
|
||||||
|
<div class="relative max-w-full w-[60rem]">
|
||||||
|
site built with <3 using <a href="https://lume.land">lume.land</a>. source code available <a href="https://github.com/x3lfyn/pfckws-ng">here</a>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
{{ endif }}
|
||||||
|
</body>
|
||||||
|
</html>
|
14
src/_includes/blog.njk
Normal file
14
src/_includes/blog.njk
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
layout: base.vto
|
||||||
|
isBlogPage: true
|
||||||
|
showFooter: true
|
||||||
|
---
|
||||||
|
|
||||||
|
<div class="font-serif">
|
||||||
|
|
||||||
|
<h1>{{ title }}</h1>
|
||||||
|
|
||||||
|
<div class="flex flex-row mb-4 text-fg-dark font-mono">published on {{ date | date("DATE") }}, {{ readingInfo.words }} words, {{ readingInfo.minutes }} mins to read</div>
|
||||||
|
|
||||||
|
{{ content | safe }}
|
||||||
|
</div>
|
25
src/blog/hello.mdx
Normal file
25
src/blog/hello.mdx
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
---
|
||||||
|
layout: base.vto
|
||||||
|
title: Hello World
|
||||||
|
date: 2024-01-01
|
||||||
|
isBlogPage: true
|
||||||
|
description: First blog post
|
||||||
|
showFooter: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Hello World
|
||||||
|
|
||||||
|
This is my first blog post using the pfckws-ng theme for Lume.
|
||||||
|
|
||||||
|
## Code Example
|
||||||
|
|
||||||
|
```bash
|
||||||
|
echo "Hello from mybio!"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- Dark theme
|
||||||
|
- Minimal design
|
||||||
|
- Syntax highlighting
|
||||||
|
- Responsive layout
|
22
src/blog/index.njk
Normal file
22
src/blog/index.njk
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
---
|
||||||
|
layout: base.vto
|
||||||
|
title: blog | mybio
|
||||||
|
isBlogPage: true
|
||||||
|
description: blog posts
|
||||||
|
showFooter: false
|
||||||
|
---
|
||||||
|
|
||||||
|
<h1>Blog</h1>
|
||||||
|
<br />
|
||||||
|
|
||||||
|
{% for post in search.pages() %}
|
||||||
|
{% if post.url.indexOf("/blog/") === 0 and post.url !== "/blog/" %}
|
||||||
|
<h4 class="my-1">
|
||||||
|
<a href="{{ post.url }}">{{ post.title }}</a>
|
||||||
|
</h4>
|
||||||
|
<div class="font-mono text-sm m-0 text-fg-dark">
|
||||||
|
{{ post.date | date("MMMM dd, yyyy") }}
|
||||||
|
</div>
|
||||||
|
<p class="my-1">{{ post.description }}</p>
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
BIN
src/favicon.png
Normal file
BIN
src/favicon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 120 B |
BIN
src/fonts/FantasqueSansMono-Bold.woff2
Normal file
BIN
src/fonts/FantasqueSansMono-Bold.woff2
Normal file
Binary file not shown.
BIN
src/fonts/FantasqueSansMono-BoldItalic.woff2
Normal file
BIN
src/fonts/FantasqueSansMono-BoldItalic.woff2
Normal file
Binary file not shown.
BIN
src/fonts/FantasqueSansMono-Italic.woff2
Normal file
BIN
src/fonts/FantasqueSansMono-Italic.woff2
Normal file
Binary file not shown.
BIN
src/fonts/FantasqueSansMono-Regular.woff2
Normal file
BIN
src/fonts/FantasqueSansMono-Regular.woff2
Normal file
Binary file not shown.
18
src/index.mdx
Normal file
18
src/index.mdx
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
layout: base.vto
|
||||||
|
title: whoami | mybio
|
||||||
|
isHomePage: true
|
||||||
|
description: personal website
|
||||||
|
showFooter: false
|
||||||
|
---
|
||||||
|
|
||||||
|
**he/him**, developer from <span className="location">Moscow, Russia</span>
|
||||||
|
|
||||||
|
interested in backend development, system administration and security.
|
||||||
|
|
||||||
|
<div style={{height: '0.3rem'}}></div>
|
||||||
|
|
||||||
|
### **contacts:**
|
||||||
|
- email: [me@example.com](mailto:me@example.com)
|
||||||
|
- telegram: [@username](https://t.me/username)
|
||||||
|
- github: [@username](https://github.com/username)
|
99
src/styles.css
Normal file
99
src/styles.css
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
@tailwind base;
|
||||||
|
@tailwind components;
|
||||||
|
@tailwind utilities;
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: Fantasque;
|
||||||
|
src: url(fonts/FantasqueSansMono-Bold.woff2);
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: Fantasque;
|
||||||
|
src: url(fonts/FantasqueSansMono-Regular.woff2);
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: Fantasque;
|
||||||
|
src: url(fonts/FantasqueSansMono-Italic.woff2);
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: Fantasque;
|
||||||
|
src: url(fonts/FantasqueSansMono-BoldItalic.woff2);
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre,
|
||||||
|
html {
|
||||||
|
-ms-overflow-style: none;
|
||||||
|
scrollbar-width: none;
|
||||||
|
}
|
||||||
|
pre::-webkit-scrollbar,
|
||||||
|
html::-webkit-scrollbar {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
@import url("https://fonts.googleapis.com/css2?family=Roboto+Slab:wght@100..900&display=swap");
|
||||||
|
@import url("https://fonts.googleapis.com/css2?family=Inter+Tight:ital,wght@0,100..900;1,100..900&display=swap");
|
||||||
|
|
||||||
|
.header-links {
|
||||||
|
text-decoration: underline;
|
||||||
|
text-decoration-style: solid;
|
||||||
|
text-decoration-skip-ink: all;
|
||||||
|
text-decoration-thickness: 2px;
|
||||||
|
text-underline-offset: 2px;
|
||||||
|
color: theme("colors.fg.link") !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
:link {
|
||||||
|
color: #00ff00;
|
||||||
|
}
|
||||||
|
:visited {
|
||||||
|
color: #00cc00;
|
||||||
|
}
|
||||||
|
a:hover {
|
||||||
|
color: #00aa00;
|
||||||
|
}
|
||||||
|
a {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
p,
|
||||||
|
ul {
|
||||||
|
margin-top: 8px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
padding: 1rem;
|
||||||
|
border-radius: 20px;
|
||||||
|
border: 2px dashed #00ff00;
|
||||||
|
overflow-x: scroll;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
li {
|
||||||
|
line-height: 150%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.location {
|
||||||
|
font-family: "Germania One", system-ui;
|
||||||
|
font-size: 1.1rem;
|
||||||
|
color: #00ff00;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
color: #00ff00;
|
||||||
|
}
|
||||||
|
|
||||||
|
strong {
|
||||||
|
color: #00cc00;
|
||||||
|
}
|
29
tailwind.config.ts
Normal file
29
tailwind.config.ts
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
import forms from "npm:@tailwindcss/forms";
|
||||||
|
import typography from "npm:@tailwindcss/typography";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
theme: {
|
||||||
|
fontFamily: {
|
||||||
|
sans: ["Inter", "sans-serif"],
|
||||||
|
mono: ["Fantasque", "monospace"],
|
||||||
|
serif: ["Roboto Slab", "serif"],
|
||||||
|
},
|
||||||
|
colors: {
|
||||||
|
bg: {
|
||||||
|
hard: "#0a0a0a",
|
||||||
|
soft: "#1a1a1a",
|
||||||
|
0: "#0f0f0f",
|
||||||
|
},
|
||||||
|
fg: {
|
||||||
|
0: "#00ff00",
|
||||||
|
link: "#00cc00",
|
||||||
|
currentPage: "#00aa00",
|
||||||
|
dark: "#008800",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
plugins: [typography],
|
||||||
|
corePlugins: {
|
||||||
|
preflight: false,
|
||||||
|
},
|
||||||
|
};
|
Loading…
x
Reference in New Issue
Block a user