repositories / dotfiles
dotfiles
bugabingas dorkfiles
owned by admin
nugu/site.nu
Rawdef to-divs [] {
select 0 |
transpose name value |
each { | color |
$"
<div class='color_rect' style='background-color: ($color.value)'>
<span class='color_name grow' onclick='copy\(\"($color.value)\"\)'>($color.name) ($color.value)</span>
</div>"
} |
str join (char newline)
}
def make-code-block-divs [] {
'
<pre><code>
<span class="keyword">package</span> <span class="package">com.orga.my.package</span>;
<span class="keyword">import</span> java.util.<span class="type">List</span>;
<span class="keyword">import</span> java.util.<span class="type">Map</span>;
<span class="keyword">import</span> java.util.<span class="type">Optional</span>;
<span class="keyword">import</span> org.springframework.stereotype.<span class="type">Service</span>;
<span class="keyword">import</span> jakarta.validation.constraints.<span class="type">NotNull</span>;
<span class="comment">// DemoService: A chaotic showcase of every Java keyword and type</span>
<span class="annotation">@Service</span>
<span class="keyword">public</span> <span class="keyword">final</span> <span class="keyword">class</span> <span class="class-name">DemoService</span> <span class="keyword">implements</span> <span class="type">DemoInterface</span> {
<span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="type">String</span> CONSTANT = <span class="string">"CONST"</span>;
<span class="keyword">private</span> <span class="keyword">transient</span> <span class="keyword">volatile</span> <span class="type">int</span> counter = 0;
<span class="keyword">private</span> <span class="type">Map</span><<span class="type">Long</span>, <span class="type">Double</span>> cache;
<span class="comment">// Enum for no reason other than to flex</span>
<span class="keyword">public</span> <span class="keyword">enum</span> <span class="class-name">Mode</span> { ON, OFF }
<span class="comment">// Record because Java loves new toys</span>
<span class="keyword">public</span> <span class="keyword">record</span> <span class="class-name">Data</span>(<span class="type">byte</span> b, <span class="type">short</span> s) {}
<span class="keyword">public</span> <span class="keyword">synchronized</span> <span class="type">void</span> demo(<span class="annotation">@NotNull</span> <span class="type">Object</span> obj) <span class="keyword">throws</span> <span class="type">Exception</span> {
<span class="keyword">assert</span> obj != <span class="literal">null</span> : <span class="string">"Obj is null, you fool"</span>;
<span class="keyword">var</span> value = <span class="keyword">new</span> <span class="type">Data</span>((<span class="type">byte</span>) 1, (<span class="type">short</span>) 2);
<span class="keyword">if</span> (obj <span class="keyword">instanceof</span> <span class="type">String</span> str) {
<span class="keyword">switch</span> (str) {
<span class="keyword">case</span> <span class="string">"test"</span> -> { <span class="keyword">yield</span> <span class="literal">true</span>; }
<span class="keyword">default</span> -> { <span class="keyword">yield</span> <span class="literal">false</span>; }
}
}
<span class="keyword">else</span> {
<span class="keyword">for</span> (<span class="type">int</span> i = 0; i < 10; i++) {
<span class="keyword">continue</span>;
}
}
<span class="keyword">while</span> (counter < 5) {
<span class="keyword">try</span> {
<span class="keyword">double</span> result = Math.random();
<span class="keyword">if</span> (result > 0.5) <span class="keyword">break</span>;
} <span class="keyword">catch</span> (<span class="type">Exception</span> e) {
<span class="keyword">throw</span> <span class="keyword">new</span> <span class="type">RuntimeException</span>(<span class="string">"Chaos"</span>, e);
} <span class="keyword">finally</span> {
counter++;
}
}
<span class="keyword">synchronized</span> (<span class="keyword">this</span>) {
cache.put(1L, 42.0);
}
<span class="keyword">return</span>;
}
<span class="comment">// Abstract method in an interface for no reason</span>
<span class="keyword">interface</span> <span class="class-name">DemoInterface</span> {
<span class="keyword">abstract</span> <span class="type">void</span> pointless();
}
<span class="comment">// Module stuff because Java wants to be fancy</span>
<span class="keyword">module</span> demo.module {
<span class="keyword">requires</span> java.base;
<span class="keyword">exports</span> com.orga.my.package;
<span class="keyword">provides</span> <span class="type">DemoInterface</span> <span class="keyword">with</span> <span class="class-name">DemoService</span>;
}
}
</code></pre>
'
}
export def html [ theme: string ] {
let palette = ( open $"output/($theme).toml" | get palette )
let palette_colors = ( $palette | reject content ui )
let content_colors = ( $palette | get content )
let ui_colors = ( $palette | get ui )
let global_color_divs = ( $palette_colors | to-divs )
let content_color_divs = ( $content_colors | to-divs )
let ui_color_divs = ( $ui_colors | to-divs )
let code_block_divs = make-code-block-divs
let backdrop = if $theme == "dark" { "black" } else { "white" }
let normal = if $theme == "dark" { "white" } else { "black" }
$"
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
</head>
<script>
function copy\(color\) {
navigator.clipboard.writeText\(color\);
alert\('Copied ' + color + ' into clipboard!'\);
}
</script>
<style>
:root {
background-color: ($backdrop);
}
h1, h2 {
font-family: serif;
color: ($normal);
}
h1::before {
content: '# ';
}
h2::before {
content: '## ';
}
.grid {
display: grid;
grid-template-columns: auto auto auto;
grid-template-rows: auto auto auto;
column-gap: 16px;
row-gap: 16px;
padding: 8px;
}
.color_rect {
width: 100%;
height: 300px;
border: ($normal) 5px solid;
border-radius: 8px;
display: inline-flex;
}
.color_name {
font-family: monospace;
font-weight: bold;
font-size: smaller;
color: ($backdrop);
opacity: 0.66;
border-radius: 8px;
background-color: ($normal);
padding: 8px;
place-self: end;
}
.grow {
transition: all .2s ease-in-out;
}
.grow:hover {
cursor: pointer;
border: ($normal) 2px solid;
transform: scale\(1.666\);
z-index: 999;
}
pre {
max-width: 800px;
margin: 20px auto;
padding: 15px;
border-radius: 8px;
box-shadow: 0 2px 5px rgba\(0, 0, 0, 0.5);
background: ($palette.content.backdrop);
color: ($palette.content.normal);
font-family: 'Cousine', 'Consolas', monospace;
font-size: 16px;
line-height: 1.5;
overflow-x: auto;
tab-size: 2;
}
code {
display: block;
}
.code-block {
max-width: 800px;
margin: 20px auto;
padding: 15px;
border-radius: 8px;
box-shadow: 0 4px 8px rgba\(142, 142, 142, 0.3);
border: 1px solid #999999;
line-height: 1.5;
overflow-x: auto;
tab-size: 2;
}
.keyword { color: ($palette.content.minor); }
.string { color: ($palette.content.focus); font-style: italic; }
.comment { color: ($palette.content.important_global); font-weight: bold; }
.class-name { color: ($palette.content.important_local); }
.package { color: ($palette.content.minor); }
.type { color: ($palette.content.important_local); }
.literal { color: ($palette.content.focus); }
.annotation { color: ($palette.content.minor); }
</style>
<h1>nugu color palette</h1>
<h2>global colors</h2>
<div class='grid'>
($global_color_divs)
</div>
<h2>content colors</h2>
<div class='grid'>
($content_color_divs)
</div>
<h2>ui colors</h2>
<div class='grid'>
($ui_color_divs)
</div>
<h2>syntax example</h2>
<div class='code-block'>
($code_block_divs)
</div>
</html>
"
}