Squashed commit of the following:
commit f97a703e0da24e9c98caad7c48cb5882471abdb1 Author: Ivan Dimitrov <ivan@idimitrov.dev> Date: Fri Dec 15 06:42:21 2023 +0200 fix build error commit dc759d9e3db46cb77cad34e72472c08553211c1c Author: Ivan Dimitrov <ivan@idimitrov.dev> Date: Thu Dec 14 18:05:53 2023 +0200 birthday easter egg maybe not working at all but whatever commit 60dbe3ffe9da67abdf3f1dc2bb3f5c0c5bf86643 Author: Ivan Dimitrov <ivan@idimitrov.dev> Date: Fri Dec 8 17:47:33 2023 +0200 newlines commit 1a7230c4d784077e4156fba4cb017cdc24391e42 Author: Ivan Dimitrov <ivan@idimitrov.dev> Date: Fri Dec 8 17:46:50 2023 +0200 links commit e1b9e5b00890f9b35e7052a8b5b12b711bfe0911 Author: Ivan Dimitrov <ivan@idimitrov.dev> Date: Fri Dec 1 15:49:52 2023 +0200 add public key and some svg shadow commit b5dfb5bfab7d4fdd3bbbfe6457a776533f69730c Author: Ivan Dimitrov <ivan@idimitrov.dev> Date: Wed Nov 29 16:32:17 2023 +0200 make it lighter commit b065b62975af24de7fd89717ea55ea67984c1b0e Author: Ivan Dimitrov <ivan@idimitrov.dev> Date: Wed Nov 29 15:58:10 2023 +0200 formatting commit bb5bd2e5f16b637680075f89e85b0f6e99851734 Author: Ivan Dimitrov <ivan@idimitrov.dev> Date: Wed Nov 29 15:57:22 2023 +0200 metadata and some optimizations commit 3d1fd8a2fa4882bbfefcf19d47df18b44d3962f9 Author: Ivan Dimitrov <ivan@idimitrov.dev> Date: Wed Nov 29 15:38:28 2023 +0200 sitemap and robots commit 327f4b7f43b6936f4b0f9dce595837faeb1ac9bf Author: Ivan Dimitrov <ivan@idimitrov.dev> Date: Wed Nov 29 10:06:47 2023 +0200 flake update commit 16e08c84c691f8bc69b5e56a2efe37d384be943b Author: Ivan Dimitrov <ivan@idimitrov.dev> Date: Tue Nov 28 19:11:41 2023 +0200 flake update commit a7eb0513e6fb22eacaa365f37ad4482272e9bc4d Author: Ivan Dimitrov <ivan@idimitrov.dev> Date: Sun Nov 26 12:59:41 2023 +0200 set build inputs to only node commit 59776102f521e20dbede3edb022305d26e69c539 Author: Ivan Dimitrov <ivan@idimitrov.dev> Date: Sun Nov 26 12:55:12 2023 +0200 making the site run on nixos
This commit is contained in:
parent
c178ca98e7
commit
180e38ab65
@ -1,5 +1,11 @@
|
|||||||
This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
|
This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
|
||||||
|
|
||||||
|
DNS: idimitrov.dev
|
||||||
|
|
||||||
|
I2P: s7zr3m6jvhiu6feourmgccxvxbrlnfbugxcn2m45ms44t24q2zgq.b32.i2p
|
||||||
|
|
||||||
|
TOR: http://sxfx23zafag4lixkb4s6zwih7ga5jnzfgtgykcerd354bvb6u7alnkid.onion
|
||||||
|
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
First, run the development server:
|
First, run the development server:
|
||||||
|
24
flake.lock
24
flake.lock
@ -130,11 +130,11 @@
|
|||||||
"systems": "systems_3"
|
"systems": "systems_3"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1700381416,
|
"lastModified": 1701244257,
|
||||||
"narHash": "sha256-aRPRwB6Wq7IeqAzYBfmOvmJhBL8vtWLinBzC2unIdFI=",
|
"narHash": "sha256-rJHTSJlDa0gkJubwdsNKZHQe0Is54Uk1f2chTYTxnO4=",
|
||||||
"owner": "ivandimitrov8080",
|
"owner": "ivandimitrov8080",
|
||||||
"repo": "flake-ide",
|
"repo": "flake-ide",
|
||||||
"rev": "2bb917c7b939e00166ef3a04ced321313036e0ce",
|
"rev": "1f702a622d51814e8a11f72f389eff73239c1082",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@ -145,11 +145,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1700108881,
|
"lastModified": 1701141680,
|
||||||
"narHash": "sha256-+Lqybl8kj0+nD/IlAWPPG/RDTa47gff9nbei0u7BntE=",
|
"narHash": "sha256-qaPcwKI0RR6mxfn4sMrHEjjDl6VCEPUTRZhN+OFB6zg=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "7414e9ee0b3e9903c24d3379f577a417f0aae5f1",
|
"rev": "4469e22700c47792f93daa882786d36f9bf8bc2a",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@ -184,11 +184,11 @@
|
|||||||
"pre-commit-hooks": "pre-commit-hooks"
|
"pre-commit-hooks": "pre-commit-hooks"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1700240304,
|
"lastModified": 1701194385,
|
||||||
"narHash": "sha256-nR5Ot2nN0msfGD1Vj76/4zb6+5ksJ28gfsit/BhK/oA=",
|
"narHash": "sha256-35s/DHukB+qddspQHT1+QjJvWVAOhX1lZYhRLPKepXE=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "nixvim",
|
"repo": "nixvim",
|
||||||
"rev": "440c449c0a13f7864bb8406baf19f4e9f61abc55",
|
"rev": "fda9e1e9a478c8dbe14cc7e2d8ff1db82619e515",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@ -239,11 +239,11 @@
|
|||||||
"nixpkgs-stable": "nixpkgs-stable"
|
"nixpkgs-stable": "nixpkgs-stable"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1699271226,
|
"lastModified": 1700064067,
|
||||||
"narHash": "sha256-8Jt1KW3xTjolD6c6OjJm9USx/jmL+VVmbooADCkdDfU=",
|
"narHash": "sha256-1ZWNDzhu8UlVCK7+DUN9dVQfiHX1bv6OQP9VxstY/gs=",
|
||||||
"owner": "cachix",
|
"owner": "cachix",
|
||||||
"repo": "pre-commit-hooks.nix",
|
"repo": "pre-commit-hooks.nix",
|
||||||
"rev": "ea758da1a6dcde6dc36db348ed690d09b9864128",
|
"rev": "e558068cba67b23b4fbc5537173dbb43748a17e8",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
17
flake.nix
17
flake.nix
@ -51,6 +51,23 @@
|
|||||||
${tmuxConfig}
|
${tmuxConfig}
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
packages.${system}.default = pkgs.buildNpmPackage rec {
|
||||||
|
buildInputs = with pkgs; [ nodejs_20 ];
|
||||||
|
pname = "idimitrov.dev";
|
||||||
|
version = "0.0.1";
|
||||||
|
src = ./.;
|
||||||
|
npmDepsHash = "sha256-DtnXn7/FP9Ccc5qXKQezi9StKOnhZnqVSbz0HJ3TQ0g=";
|
||||||
|
postInstall = ''
|
||||||
|
mkdir -p $out/bin/
|
||||||
|
cp -r ./.next/standalone/* $out/
|
||||||
|
cp -r ./.next/standalone/.* $out/
|
||||||
|
cp -r ./.next/static $out/.next/
|
||||||
|
cp -r ./public $out/
|
||||||
|
rm -rf $out/lib
|
||||||
|
echo "${pkgs.nodejs_20}/bin/node $out/server.js" > $out/bin/$pname
|
||||||
|
chmod +x $out/bin/$pname
|
||||||
|
'';
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
/** @type {import('next').NextConfig} */
|
/** @type {import('next').NextConfig} */
|
||||||
const nextConfig = {
|
const nextConfig = {
|
||||||
output: "export"
|
output: "standalone",
|
||||||
|
images: { unoptimized: true }
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = nextConfig
|
module.exports = nextConfig
|
||||||
|
6086
package-lock.json
generated
Normal file
6086
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
52
public/pgp.txt
Normal file
52
public/pgp.txt
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
|
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
|
||||||
|
6zqS+1KfisZGORlLHR9MDijZxOSPT/PUCFr5l8c=
|
||||||
|
=HoX6
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----
|
@ -11,6 +11,7 @@ import CopyButton from "$components/copy-button";
|
|||||||
import { getText } from "$lib/react";
|
import { getText } from "$lib/react";
|
||||||
import { Prism as SyntaxHighlighter } from "react-syntax-highlighter";
|
import { Prism as SyntaxHighlighter } from "react-syntax-highlighter";
|
||||||
import codeStyle from "react-syntax-highlighter/dist/esm/styles/prism/coldark-dark";
|
import codeStyle from "react-syntax-highlighter/dist/esm/styles/prism/coldark-dark";
|
||||||
|
import { Metadata } from "next";
|
||||||
|
|
||||||
type Params = {
|
type Params = {
|
||||||
slug: string[];
|
slug: string[];
|
||||||
@ -20,6 +21,14 @@ type Props = {
|
|||||||
params: Params;
|
params: Params;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export async function generateMetadata({ params }: Props): Promise<Metadata> {
|
||||||
|
const { data } = getContent(params.slug);
|
||||||
|
return {
|
||||||
|
title: data.title,
|
||||||
|
description: data.goal || "Software development notes",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
export async function generateStaticParams(): Promise<Params[]> {
|
export async function generateStaticParams(): Promise<Params[]> {
|
||||||
return getAllPaths().map(p => ({ slug: p.split("/") }));
|
return getAllPaths().map(p => ({ slug: p.split("/") }));
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import { faEnvelope } from "@fortawesome/free-solid-svg-icons";
|
import { faEnvelope, faFile, faLock } from "@fortawesome/free-solid-svg-icons";
|
||||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
|
import Link from "next/link";
|
||||||
|
|
||||||
const email = "ivan@idimitrov.dev";
|
const email = "ivan@idimitrov.dev";
|
||||||
const mailto = `mailto:${email}`;
|
const mailto = `mailto:${email}`;
|
||||||
@ -9,6 +10,9 @@ const Contact = () => (
|
|||||||
<a aria-label={mailto} href={mailto}>
|
<a aria-label={mailto} href={mailto}>
|
||||||
<FontAwesomeIcon className="w-14 h-14" icon={faEnvelope} />
|
<FontAwesomeIcon className="w-14 h-14" icon={faEnvelope} />
|
||||||
</a>
|
</a>
|
||||||
|
<Link aria-label="GPG public key" href="/pgp.txt">
|
||||||
|
<FontAwesomeIcon className="w-14 h-14" mask={faFile} icon={faLock} transform={"shrink-10 right-2 down-4"} />
|
||||||
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
@ -27,5 +27,9 @@ main {
|
|||||||
}
|
}
|
||||||
|
|
||||||
svg {
|
svg {
|
||||||
@apply hover:text-sky-400 transition duration-200 ease-in;
|
@apply transition duration-200 ease-in;
|
||||||
|
}
|
||||||
|
svg:hover {
|
||||||
|
@apply text-sky-400;
|
||||||
|
filter: drop-shadow(0px 0px 20px #38bdf8);
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
import "./globals.css";
|
import "./globals.css";
|
||||||
import Navbar from "$components/navbar";
|
import Navbar from "$components/navbar";
|
||||||
import type { Metadata } from "next";
|
import type { Metadata } from "next";
|
||||||
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
|
import { faCakeCandles, faSquareFull } from "@fortawesome/free-solid-svg-icons";
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: "Ivan Dimitrov",
|
title: "Ivan Dimitrov",
|
||||||
@ -8,12 +10,21 @@ export const metadata: Metadata = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export default function RootLayout({ children }: { children: React.ReactNode }) {
|
export default function RootLayout({ children }: { children: React.ReactNode }) {
|
||||||
|
let today = new Date();
|
||||||
return (
|
return (
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<body>
|
<body>
|
||||||
<main>
|
<main>
|
||||||
<Navbar />
|
<Navbar />
|
||||||
{children}
|
{children}
|
||||||
|
{today.getDate() === new Date(today.getFullYear(), 12, 17).getDate() && (
|
||||||
|
<div className="absolute bottom-14 right-14">
|
||||||
|
<div className="flex flex-col">
|
||||||
|
<FontAwesomeIcon mask={faSquareFull} className="w-20 h-20 text-neutral-950 bg-gradient-to-t from-slate-950 via-red-700 to-yellow-400" icon={faCakeCandles} />
|
||||||
|
<span>It's my birthday.</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
</main>
|
</main>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
11
src/app/robots.ts
Normal file
11
src/app/robots.ts
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import { MetadataRoute } from "next";
|
||||||
|
|
||||||
|
export default function robots(): MetadataRoute.Robots {
|
||||||
|
return {
|
||||||
|
rules: {
|
||||||
|
userAgent: "*",
|
||||||
|
allow: "/",
|
||||||
|
},
|
||||||
|
sitemap: "https://idimitrov.dev/sitemap.xml",
|
||||||
|
};
|
||||||
|
}
|
35
src/app/sitemap.ts
Normal file
35
src/app/sitemap.ts
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
import { getAllContent } from "$lib/content";
|
||||||
|
import { MetadataRoute } from "next";
|
||||||
|
|
||||||
|
export default function sitemap(): MetadataRoute.Sitemap {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
url: "https://idimitrov.dev/",
|
||||||
|
lastModified: new Date(),
|
||||||
|
changeFrequency: "weekly",
|
||||||
|
priority: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
url: "https://idimitrov.dev/cases",
|
||||||
|
lastModified: new Date(),
|
||||||
|
changeFrequency: "weekly",
|
||||||
|
priority: 0.8,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
url: "https://idimitrov.dev/contact",
|
||||||
|
lastModified: new Date(),
|
||||||
|
changeFrequency: "weekly",
|
||||||
|
priority: 0.5,
|
||||||
|
},
|
||||||
|
...getAllContent()
|
||||||
|
.map(c => c.data)
|
||||||
|
.map(d => {
|
||||||
|
return {
|
||||||
|
url: `https://idimitrov.dev${d.slug}`,
|
||||||
|
lastModified: new Date(),
|
||||||
|
changeFrequency: "weekly",
|
||||||
|
priority: d.priority || 0.8,
|
||||||
|
} as any;
|
||||||
|
}),
|
||||||
|
];
|
||||||
|
}
|
@ -4,15 +4,21 @@ import path from "path";
|
|||||||
|
|
||||||
export const baseDir = "./_content/";
|
export const baseDir = "./_content/";
|
||||||
|
|
||||||
|
const contentMap: Record<string, GrayMatterFile<string>> = {};
|
||||||
|
|
||||||
export const getContent = (slug: string[]): GrayMatterFile<string> => {
|
export const getContent = (slug: string[]): GrayMatterFile<string> => {
|
||||||
let p = path.join(baseDir);
|
let p: string = path.join(baseDir);
|
||||||
slug.forEach(s => {
|
slug.forEach(s => {
|
||||||
p = path.join(p, s);
|
p = path.join(p, s);
|
||||||
});
|
});
|
||||||
const file = fs.readFileSync(p, "utf8");
|
if (!contentMap[p]) {
|
||||||
const m = matter(file);
|
const file = fs.readFileSync(p, "utf8");
|
||||||
m.data.slug = `/c/${slug.join("/")}`;
|
const m = matter(file);
|
||||||
return m;
|
m.data.slug = `/c/${slug.join("/")}`;
|
||||||
|
contentMap[p] = m;
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
return contentMap[p];
|
||||||
};
|
};
|
||||||
|
|
||||||
const getAllPathsRecursive = (base = baseDir): string[] => {
|
const getAllPathsRecursive = (base = baseDir): string[] => {
|
||||||
|
Loading…
Reference in New Issue
Block a user