dfsdf
This commit is contained in:
15
astro.config.mjs
Normal file
15
astro.config.mjs
Normal file
@@ -0,0 +1,15 @@
|
||||
// @ts-check
|
||||
import { defineConfig } from "astro/config";
|
||||
|
||||
import tailwind from "@astrojs/tailwind";
|
||||
|
||||
// https://astro.build/config
|
||||
export default defineConfig({
|
||||
integrations: [tailwind()],
|
||||
site: "https://vxheaven.cc",
|
||||
markdown: {
|
||||
shikiConfig: {
|
||||
theme: "kanagawa-dragon",
|
||||
},
|
||||
},
|
||||
});
|
||||
6913
package-lock.json
generated
Normal file
6913
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
20
package.json
Normal file
20
package.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"name": "minimal",
|
||||
"type": "module",
|
||||
"version": "0.0.1",
|
||||
"scripts": {
|
||||
"dev": "astro dev",
|
||||
"build": "astro build",
|
||||
"preview": "astro preview",
|
||||
"astro": "astro"
|
||||
},
|
||||
"dependencies": {
|
||||
"@astrojs/rss": "^4.0.11",
|
||||
"@astrojs/tailwind": "^6.0.2",
|
||||
"@tailwindcss/postcss": "^4.1.4",
|
||||
"astro": "^5.1.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@tailwindcss/typography": "^0.5.15"
|
||||
}
|
||||
}
|
||||
BIN
public/favicon.webp
Normal file
BIN
public/favicon.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 162 B |
BIN
public/fonts/gohu.woff2
Normal file
BIN
public/fonts/gohu.woff2
Normal file
Binary file not shown.
BIN
public/fonts/unifont.woff2
Normal file
BIN
public/fonts/unifont.woff2
Normal file
Binary file not shown.
17
src/components/GlobalLogo.astro
Normal file
17
src/components/GlobalLogo.astro
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
<pre
|
||||
class="flex justify-center text-center pt-48 leading-none overflow-hidden text-nowrap">
|
||||
▄██▄ ▄██▀ ▄█████▄ ▄████▄ ██▄ ▄██ ▄█████▄ ███▄ ▄██▀
|
||||
▌▐██ ██▌ ▄██ ▓█▌▐▀ ▀█▄ ▀██ ██▀ ▄██ ▓█▌▐██▀██ ██▐
|
||||
██▄▄██ ▐██▀████▀ ▄███▄█▓ ▀██ █▓▀ ▐██▀████▀ ██ ██ █▓
|
||||
███▀██ ▐██ ▄▓▌▐█▌ ▓▒ ▀▓▒▒▀ ▐██ ▄▓▌ ██ ██ ▓▒
|
||||
▐█▓ █▓▌ ▀██▄▄▓▒▀ ▐██▄▄▓▒░▄ ▀░▀ ▀██▄▄▓▒▀ ▄██ ▓▓▄▒░
|
||||
▓▒░ ▓▒░ ▐▀▀▀ ▐▀▀ ▀▀▌ ▐ ▐▀▀▀ ▄███ ▒▒▒░▌
|
||||
▐░▀ ▐▀ ▐▀▀ ▀░░▌
|
||||
▌ ▐
|
||||
|
||||
</pre>
|
||||
<!-- <p class="text-center pb-12">ᶻ 𝗓 𐰁</p> -->
|
||||
11
src/components/HomeFooter.astro
Normal file
11
src/components/HomeFooter.astro
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
<div class="flex flex-col max-w-auto m-auto items-center">
|
||||
<ul class="grid md:grid-cols-4 sm:flex gap-x-4">
|
||||
<li><span class="select-none">♱ </span><a tabindex="0" href="/archive" class="text-c_mauve decoration-dotted hover:underline hover:cursor-pointer overflow-hidden text-nowrap">Archive</a></li>
|
||||
<li><span class="select-none">𖹭 </span><a tabindex="0" href="/rss.xml" class="text-c_mauve decoration-dotted hover:underline hover:cursor-pointer overflow-hidden text-nowrap">Propaganda (RSS)</a></li>
|
||||
<li><span class="select-none">{} </span><a tabindex="0" href="https://github.com/" target="_blank" class="text-c_mauve decoration-dotted hover:underline hover:cursor-pointer overflow-hidden text-nowrap">Projects</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
28
src/layouts/Layout.astro
Normal file
28
src/layouts/Layout.astro
Normal file
@@ -0,0 +1,28 @@
|
||||
---
|
||||
import '../styles/global.css'
|
||||
---
|
||||
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.webp" />
|
||||
<meta name="generator" content={Astro.generator} />
|
||||
|
||||
<title>૮₍ • ᴥ • ₎ა</title>
|
||||
</head>
|
||||
<body class="font-unifont px-4 m-auto md:m-0 bg-c_crust text-c_text">
|
||||
<slot />
|
||||
</body>
|
||||
</html>
|
||||
|
||||
<style>
|
||||
html,
|
||||
body {
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
font-family: inherit;
|
||||
}
|
||||
</style>
|
||||
102
src/layouts/MarkdownPostLayout.astro
Normal file
102
src/layouts/MarkdownPostLayout.astro
Normal file
@@ -0,0 +1,102 @@
|
||||
---
|
||||
// pages/whatever.astro
|
||||
import Layout from "../layouts/Layout.astro";
|
||||
import GlobalLogo from "../components/GlobalLogo.astro";
|
||||
const { frontmatter } = Astro.props;
|
||||
---
|
||||
|
||||
<Layout>
|
||||
<GlobalLogo />
|
||||
<div class="mb-32">
|
||||
<div
|
||||
class="p-4 flex flex-col m-auto max-w-[700px] font-gohu leading-none
|
||||
prose-p:mb-4 prose-headings:my-1 prose-headings:text-xl prose-headings:font-bold prose-headings:text-c_mauve prose-ol:list-decimal prose-ol:list-inside
|
||||
prose-ol:mb-4 prose-ul:ml-4 prose-ul:list-disc prose-ul:mb-4 prose-ul:flex-col prose-hr:mt-8 prose-hr:mb-6 prose-hr:border-c_surface0
|
||||
prose-a:text-c_mauve prose-a:decoration-dotted hover:prose-a:underline prose-pre:my-4 prose-pre:py-4 prose-pre:px-4
|
||||
marker:text-c_mauve prose-code:font-gohu prose-img:my-4 prose-img:w-screen"
|
||||
>
|
||||
<a
|
||||
tabindex="0"
|
||||
href="../../"
|
||||
class="flex w-max text-c_mauve decoration-dotted hover:underline hover:cursor-pointer mb-4"
|
||||
>« Back<br /><br /></a
|
||||
>
|
||||
<h1 class="font-bold text-xl">
|
||||
{frontmatter.title}
|
||||
</h1>
|
||||
<article class="">
|
||||
<slot />
|
||||
</article>
|
||||
<p>~{frontmatter.author}</p>
|
||||
</div>
|
||||
</div>
|
||||
</Layout>
|
||||
|
||||
<style is:global>
|
||||
/* =========================
|
||||
Strong overrides for Tailwind Typography / Shiki / Astro codeblocks
|
||||
========================= */
|
||||
|
||||
/* Target the usual suspects:
|
||||
- Tailwind Typography uses .prose pre
|
||||
- Shiki / Astro often emit pre.ast-code or pre[class*="language-"]
|
||||
We make these global and high-specificity so they win.
|
||||
*/
|
||||
|
||||
html .prose pre,
|
||||
html .prose pre code,
|
||||
pre[class*="language-"],
|
||||
code[class*="language-"],
|
||||
pre.ast-code,
|
||||
.astro-code,
|
||||
.shiki pre,
|
||||
pre {
|
||||
/* allow wrapping of long lines */
|
||||
white-space: pre-wrap !important; /* allow wrapping while preserving whitespace */
|
||||
word-break: break-word !important; /* break long words/identifiers if needed */
|
||||
overflow-wrap: anywhere !important; /* extra aggressive wrap */
|
||||
max-width: 100% !important; /* don't overflow container */
|
||||
box-sizing: border-box !important;
|
||||
}
|
||||
|
||||
/* Keep block semantics for code content */
|
||||
html .prose pre code,
|
||||
pre[class*="language-"] > code {
|
||||
display: block !important;
|
||||
}
|
||||
|
||||
/* Keep a horizontal fallback for extremely long uninterrupted strings
|
||||
(URLs/base64/etc.), but wrapping will be used in most cases. */
|
||||
html .prose pre {
|
||||
overflow-x: auto !important;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
|
||||
/* Optional: nicer padding and visual treatment */
|
||||
html .prose pre {
|
||||
padding: 1rem !important;
|
||||
border-radius: 0.5rem !important;
|
||||
background-color: rgba(
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0.03
|
||||
) !important; /* tweak to taste or remove */
|
||||
}
|
||||
|
||||
/* Inline code (inside paragraphs) — keep the normal inline look, don't force wrap */
|
||||
html .prose code:not(pre code) {
|
||||
white-space: normal !important;
|
||||
overflow: visible !important;
|
||||
word-break: normal !important;
|
||||
}
|
||||
|
||||
/* If you're using tailwind's 'prose-sm' / modifiers or custom wrappers, increase specificity */
|
||||
html body .prose pre,
|
||||
html body .prose pre code {
|
||||
/* repeat important rules to be extra sure */
|
||||
white-space: pre-wrap !important;
|
||||
word-break: break-word !important;
|
||||
overflow-wrap: anywhere !important;
|
||||
}
|
||||
</style>
|
||||
44
src/pages/archive.astro
Normal file
44
src/pages/archive.astro
Normal file
@@ -0,0 +1,44 @@
|
||||
---
|
||||
import Layout from '../layouts/Layout.astro';
|
||||
import GlobalLogo from "../components/GlobalLogo.astro";
|
||||
const allPosts = Object.values(import.meta.glob('./posts/*.md', { eager: true }))
|
||||
.sort((a: any, b: any) => {
|
||||
const dateA = new Date(a.frontmatter.pubDate);
|
||||
const dateB = new Date(b.frontmatter.pubDate);
|
||||
return dateB - dateA; // Sort descending (newest first)
|
||||
});
|
||||
---
|
||||
|
||||
<Layout>
|
||||
<div class="text-center">
|
||||
<GlobalLogo/>
|
||||
<div class="flex flex-col max-w-[32rem] m-auto items-center border-4 border-double p-2 mb-12 border-c_text">
|
||||
<h5 class="flex justify-between">Archive:</h5>
|
||||
<ul class="w-full">
|
||||
{allPosts.map((post: any) =>
|
||||
<li class="flex w-full items-center text-nowrap">
|
||||
<a tabindex="0" class="text-c_mauve decoration-dotted hover:underline hover:cursor-pointer overflow-hidden text-nowrap" href={post.url}>
|
||||
{post.frontmatter.title}
|
||||
</a>
|
||||
<span class="dots overflow-hidden text-nowrap flex-grow"></span>
|
||||
<p class="flex">{post.frontmatter.author}</p>
|
||||
</li>
|
||||
)}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="flex m-auto text-left float left max-w-[32rem]">
|
||||
<a tabindex="0" href="../" class="flex w-max text-c_mauve decoration-dotted hover:underline hover:cursor-pointer mb-4">« Back</a>
|
||||
</div>
|
||||
</div>
|
||||
</Layout>
|
||||
|
||||
<script>
|
||||
// JavaScript to dynamically generate dots between the title and author
|
||||
document.querySelectorAll('.dots').forEach(span => {
|
||||
const parentWidth = span.parentElement.clientWidth;
|
||||
const titleWidth = span.previousElementSibling.offsetWidth;
|
||||
const authorWidth = span.nextElementSibling.offsetWidth;
|
||||
const dotsCount = Math.floor((parentWidth - titleWidth - authorWidth) / 8.25); // 8px per dot
|
||||
span.textContent = '.'.repeat(dotsCount);
|
||||
});
|
||||
</script>
|
||||
56
src/pages/index.astro
Normal file
56
src/pages/index.astro
Normal file
@@ -0,0 +1,56 @@
|
||||
---
|
||||
import Layout from "../layouts/Layout.astro";
|
||||
import GlobalLogo from "../components/GlobalLogo.astro";
|
||||
import HomeFooter from "../components/HomeFooter.astro";
|
||||
const allPosts = Object.values(
|
||||
import.meta.glob("./posts/*.md", { eager: true }),
|
||||
)
|
||||
.sort((a: any, b: any) => {
|
||||
const dateA = new Date(a.frontmatter.pubDate);
|
||||
const dateB = new Date(b.frontmatter.pubDate);
|
||||
return dateB - dateA; // Sort descending (newest first)
|
||||
})
|
||||
.slice(0, 5);
|
||||
---
|
||||
|
||||
<Layout>
|
||||
<div class="text-center font-unifont">
|
||||
<GlobalLogo />
|
||||
<div
|
||||
class="flex flex-col max-w-[32rem] m-auto items-center border-4 border-double p-2 mb-12 border-c_text"
|
||||
>
|
||||
<h5 class="flex justify-between">Latest Posts:</h5>
|
||||
<ul class="w-full">
|
||||
{
|
||||
allPosts.map((post: any) => (
|
||||
<li class="flex w-full items-center">
|
||||
<a
|
||||
tabindex="0"
|
||||
class="text-c_mauve decoration-dotted hover:underline hover:cursor-pointer overflow-hidden text-nowrap"
|
||||
href={post.url}
|
||||
>
|
||||
{post.frontmatter.title}
|
||||
</a>
|
||||
<span class="dots overflow-hidden text-nowrap flex-grow" />
|
||||
<p class="flex">{post.frontmatter.author}</p>
|
||||
</li>
|
||||
))
|
||||
}
|
||||
</ul>
|
||||
</div>
|
||||
<HomeFooter />
|
||||
</div>
|
||||
</Layout>
|
||||
|
||||
<script>
|
||||
// JavaScript to dynamically generate dots between the title and author
|
||||
document.querySelectorAll(".dots").forEach((span) => {
|
||||
const parentWidth = span.parentElement.clientWidth;
|
||||
const titleWidth = span.previousElementSibling.offsetWidth;
|
||||
const authorWidth = span.nextElementSibling.offsetWidth;
|
||||
const dotsCount = Math.floor(
|
||||
(parentWidth - titleWidth - authorWidth) / 8.25,
|
||||
); // 8px per dot
|
||||
span.textContent = ".".repeat(dotsCount);
|
||||
});
|
||||
</script>
|
||||
BIN
src/pages/posts/_assets/relearn-programming.png
Normal file
BIN
src/pages/posts/_assets/relearn-programming.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
189
src/pages/posts/relearning-programming-introduction.md
Normal file
189
src/pages/posts/relearning-programming-introduction.md
Normal file
@@ -0,0 +1,189 @@
|
||||
---
|
||||
layout: ../../layouts/MarkdownPostLayout.astro
|
||||
|
||||
title: 'Relearning Programming - Introduction'
|
||||
pubDate: 2025-06-24
|
||||
author: 'heaven'
|
||||
---
|
||||
|
||||

|
||||
|
||||
# Foreword
|
||||
Hey,
|
||||
I suck at coding - and that's why I decided to relearn programming. My language of choice is C++. I've been working with this language for a long time now, and it just grew on me like no other language did.
|
||||
|
||||
|
||||
# What Led Me Here
|
||||
I've been struggling with my problem solving + the core concepts of C++ itself. Even though I am aware of the fact that it's totally common to make mistakes, I've had the overwhelming feeling of frustration and "imposter syndrome". Every piece of information was
|
||||
floating around in my head with no structure. Toss in ADHD and boom. That's how you replicate the feeling.
|
||||
|
||||
I tolerated it for too long.
|
||||
|
||||
|
||||
# My Plan And Goals
|
||||
My goals with relearning programming and C++ is to start with the bare basics and thoroughly study and apply my knowledge with a modern approach to C++. During this journey I will make sure to deep dive into every concept where my skills are lacking. I will make sure to
|
||||
fully understand each assignment, each function call, each class and each line of code.
|
||||
|
||||
I will make sure to create plenty of small exercises & projects. The exercises give me the freedom to experiment with certain features and
|
||||
to puzzle together solutions, which then can be finally implemented into the projects. These projects can be small games, utility tools or
|
||||
simply just code snippets. Old C++ code repels me, so I’m sticking to C++20 for now and moving to C++23 soon.
|
||||
|
||||
Nearly everything I learn and code will be talked about in this series of blog posts. This will make sure that I summarize and explain
|
||||
the material in my own words. The length of the posts might vary. Sometimes I will talk about more than one concept in one post. Some
|
||||
concepts are too short to write a 500 word post about.
|
||||
|
||||
|
||||
# What This Series Will Look Like
|
||||
- Notes from studying C++ / programming concepts in my own words
|
||||
- Small exercises to experiment
|
||||
- Projects to apply what I've learned (Games, utilities, code snippets)
|
||||
- Mistakes I make along the way + solutions to them
|
||||
- Occasional rants, schizophrenia and dog pictures
|
||||
|
||||
# Starting Point
|
||||
Right now, I know a lot, but at the same time, I don't know anything. I struggle with the understanding of how everything is running
|
||||
under the hood. This is a crucial point to be aware of, because each decision you take has influence on the logic and performance of
|
||||
your program. Not to mention the cruciality of the architecture.
|
||||
|
||||
# Closing Thoughts
|
||||
I feel motivated and nervous at the same time. This will be a long, but quick journey. Beside me mentioning that I suck at programming
|
||||
and that "I don't know anything", I'm pretty sure that I'll profit of my past experience and knowledge.
|
||||
|
||||
I'm so hyped to show off my future projects and I'll try my best to entertain you via some text and images. It's quite hard to pull
|
||||
off, if I am being honest.
|
||||
|
||||
To my future me ever reading this: Do not fucking skip anything.
|
||||
|
||||
```cpp
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <filesystem>
|
||||
#include <unordered_map>
|
||||
|
||||
#include "raylib.h"
|
||||
#include "fmt/core.h"
|
||||
#include "fmt/color.h"
|
||||
|
||||
// Engine Imports
|
||||
#include "AssetHandle.hpp"
|
||||
#include "Utils.hpp"
|
||||
|
||||
namespace DREAM {
|
||||
template<typename T>
|
||||
struct AssetLoader;
|
||||
|
||||
template<>
|
||||
struct AssetLoader<Texture2D> {
|
||||
Texture2D load(const std::string& path) {
|
||||
std::string fullPath = Utils::buildFullPath(path);
|
||||
|
||||
Image tempImage = LoadImage(fullPath.c_str());
|
||||
|
||||
if (!IsImageValid(tempImage)) {
|
||||
fmt::print(
|
||||
fmt::emphasis::bold | fmt::fg(fmt::color::light_coral),
|
||||
"AssetLoader::load::IsImageValid: Failed to load image -> {} \n",
|
||||
path
|
||||
);
|
||||
return {};
|
||||
}
|
||||
|
||||
Texture2D tempTex = LoadTextureFromImage(tempImage);
|
||||
UnloadImage(tempImage);
|
||||
|
||||
if (!IsTextureValid(tempTex)) {
|
||||
fmt::print(
|
||||
fmt::emphasis::bold | fmt::fg(fmt::color::light_coral),
|
||||
"AssetLoader::load::IsTextureValid: Failed to load texture -> {} \n",
|
||||
path
|
||||
);
|
||||
return {};
|
||||
}
|
||||
|
||||
return tempTex;
|
||||
}
|
||||
|
||||
Texture2D get(AssetHandle handle, const std::unordered_map<AssetHandle, Texture2D>& map) {
|
||||
auto it = map.find(handle);
|
||||
|
||||
if (it != map.end()) {
|
||||
return it->second;
|
||||
}
|
||||
|
||||
fmt::print(
|
||||
fmt::emphasis::bold | fmt::fg(fmt::color::light_coral),
|
||||
"AssetManager::getTexture: Texture not found -> {} \n",
|
||||
handle.id
|
||||
);
|
||||
return {};
|
||||
}
|
||||
};
|
||||
|
||||
template<>
|
||||
struct AssetLoader<Font> {
|
||||
Font load(const std::string& path) {
|
||||
std::string fullPath = Utils::buildFullPath(path);
|
||||
|
||||
Font tempFont = LoadFont(fullPath.c_str());
|
||||
|
||||
if (!IsFontValid(tempFont)) {
|
||||
fmt::print(
|
||||
fmt::emphasis::bold | fmt::fg(fmt::color::light_coral),
|
||||
"AssetLoader::load::IsFontValid: Failed to load font -> {} \n",
|
||||
path
|
||||
);
|
||||
return {};
|
||||
}
|
||||
|
||||
return tempFont;
|
||||
}
|
||||
};
|
||||
|
||||
template<>
|
||||
struct AssetLoader<Sound> {
|
||||
Sound load(const std::string& path) {
|
||||
std::string fullPath = Utils::buildFullPath(path);
|
||||
|
||||
Sound tempSound = LoadSound(fullPath.c_str());
|
||||
|
||||
if (!IsSoundValid(tempSound)) {
|
||||
fmt::print(
|
||||
fmt::emphasis::bold | fmt::fg(fmt::color::light_coral),
|
||||
"AssetLoader::load::IsSoundValid: Failed to load sound -> {} \n",
|
||||
path
|
||||
);
|
||||
return {};
|
||||
}
|
||||
|
||||
return tempSound;
|
||||
}
|
||||
};
|
||||
|
||||
template<>
|
||||
struct AssetLoader<Music> {
|
||||
Music load(const std::string& path) {
|
||||
std::string fullPath = Utils::buildFullPath(path);
|
||||
|
||||
Music tempMusic = LoadMusicStream(fullPath.c_str());
|
||||
|
||||
if (!IsMusicValid(tempMusic)) {
|
||||
fmt::print(
|
||||
fmt::emphasis::bold | fmt::fg(fmt::color::light_coral),
|
||||
"AssetLoader::load::IsMusicValid: Failed to load music -> {} \n",
|
||||
path
|
||||
);
|
||||
return {};
|
||||
}
|
||||
|
||||
return tempMusic;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
*"Using no way as a way, having no limitation as limitation"</br>
|
||||
~ Bruce Lee*
|
||||
11
src/pages/rss.xml.js
Normal file
11
src/pages/rss.xml.js
Normal file
@@ -0,0 +1,11 @@
|
||||
import rss, { pagesGlobToRssItems } from '@astrojs/rss';
|
||||
|
||||
export async function GET(context) {
|
||||
return rss({
|
||||
title: 'heaven',
|
||||
description: 'Blog and co.',
|
||||
site: context.site,
|
||||
items: await pagesGlobToRssItems(import.meta.glob('./**/*.md')),
|
||||
customData: `<language>en-us</language>`,
|
||||
});
|
||||
}
|
||||
17
src/styles/global.css
Normal file
17
src/styles/global.css
Normal file
@@ -0,0 +1,17 @@
|
||||
@font-face {
|
||||
font-family: 'Unifont';
|
||||
src: url('/public/fonts/unifont.woff2') format('woff2');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Gohu';
|
||||
src: url('/public/fonts/gohu.woff2') format('woff2');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Unifont', sans-serif;
|
||||
}
|
||||
19
tailwind.config.mjs
Normal file
19
tailwind.config.mjs
Normal file
@@ -0,0 +1,19 @@
|
||||
/** @type {import('tailwindcss').Config} */
|
||||
export default {
|
||||
content: ["./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}"],
|
||||
theme: {
|
||||
extend: {
|
||||
fontFamily: {
|
||||
unifont: ["Unifont", "sans-serif"], // Use Unifont as the default sans font
|
||||
gohu: ["Gohu", "sans-serif"], // Use Unifont as the default sans font
|
||||
},
|
||||
colors: {
|
||||
c_mauve: "#a292a3",
|
||||
c_crust: "#0B0A0A",
|
||||
c_text: "#c5c9c5",
|
||||
c_surface0: "#2A2727",
|
||||
},
|
||||
},
|
||||
},
|
||||
plugins: [require("@tailwindcss/typography")],
|
||||
};
|
||||
5
tsconfig.json
Normal file
5
tsconfig.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"extends": "astro/tsconfigs/strict",
|
||||
"include": [".astro/types.d.ts", "**/*"],
|
||||
"exclude": ["dist"]
|
||||
}
|
||||
Reference in New Issue
Block a user