first commit

This commit is contained in:
Lain Iwakura 2025-07-25 22:24:48 +03:00
commit 55f17cf6f0
No known key found for this signature in database
GPG Key ID: C7C18257F2ADC6F8
21 changed files with 2652 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
_site
_cache
.DS_Store

5
_cms.ts Normal file
View File

@ -0,0 +1,5 @@
import lumeCMS from "lume/cms/mod.ts";
const cms = lumeCMS();
export default cms;

63
_config.ts Normal file
View 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
View 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"
}
}

2275
deno.lock generated Normal file

File diff suppressed because it is too large Load Diff

View 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
View 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>
);
}

View File

@ -0,0 +1,3 @@
export default function VertSpacer() {
return <div className="mt-[8px] mb-[8px]"></div>;
}

View File

@ -0,0 +1 @@
<span class="p-[5px] font-mono bg-bg-soft">{{ content }}</span>

52
src/_includes/base.vto Normal file
View 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
View 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
View 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
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 B

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

18
src/index.mdx Normal file
View 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
View 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
View 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,
},
};