1
0
mirror of https://github.com/avinal/avinal.github.io.git synced 2026-07-03 23:30:09 +05:30

feat: use new theme for the website

Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>

rh-pre-commit.version: 2.3.2
rh-pre-commit.check-secrets: ENABLED
This commit is contained in:
2025-01-01 23:39:45 +05:30
parent 1bb34a512a
commit 62efd95607
140 changed files with 78 additions and 10518 deletions
+1
View File
@@ -11,3 +11,4 @@
/blog/node_modules
.idea
.vscode
public
+3
View File
@@ -0,0 +1,3 @@
[submodule "themes/box-box"]
path = themes/box-box
url = https://github.com/avinal/box-box.git
-27
View File
@@ -1,27 +0,0 @@
# build everything for production
all: css build
@echo "--- production build finished"
# build only css for production
css:
@echo "--- building tailwind css"
npx tailwindcss -i ./src/input.css -o ./static/main.css --minify
# compile only elm for production
build:
@echo "--- compiling elm land project"
npx elm-land build
hugo --source blog --destination ../dist --minify
# compile and watch for dev
elm-serve:
npx elm-land server
# build css and watch
css-serve:
npx tailwindcss -i ./src/input.css -o ./static/main.css --watch
# clean
clean:
rm -rf dist
rm -rf blog/public
-21
View File
@@ -1,21 +0,0 @@
MIT License
Copyright (c) 2023 Avinal Kumar
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
-5
View File
@@ -1,5 +0,0 @@
+++
title = '{{ replace .File.ContentBaseName "-" " " | title }}'
date = {{ .Date }}
draft = true
+++
File diff suppressed because it is too large Load Diff
-541
View File
@@ -1,541 +0,0 @@
/*
! tailwindcss v3.3.6 | MIT License | https://tailwindcss.com
*/
/*
1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
*/
*,
::before,
::after {
box-sizing: border-box;
/* 1 */
border-width: 0;
/* 2 */
border-style: solid;
/* 2 */
border-color: #e5e7eb;
/* 2 */
}
::before,
::after {
--tw-content: '';
}
/*
1. Use a consistent sensible line-height in all browsers.
2. Prevent adjustments of font size after orientation changes in iOS.
3. Use a more readable tab size.
4. Use the user's configured `sans` font-family by default.
5. Use the user's configured `sans` font-feature-settings by default.
6. Use the user's configured `sans` font-variation-settings by default.
*/
html {
line-height: 1.5;
/* 1 */
-webkit-text-size-adjust: 100%;
/* 2 */
-moz-tab-size: 4;
/* 3 */
-o-tab-size: 4;
tab-size: 4;
/* 3 */
font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
/* 4 */
font-feature-settings: normal;
/* 5 */
font-variation-settings: normal;
/* 6 */
}
/*
1. Remove the margin in all browsers.
2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
*/
body {
margin: 0;
/* 1 */
line-height: inherit;
/* 2 */
}
/*
1. Add the correct height in Firefox.
2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
3. Ensure horizontal rules are visible by default.
*/
hr {
height: 0;
/* 1 */
color: inherit;
/* 2 */
border-top-width: 1px;
/* 3 */
}
/*
Add the correct text decoration in Chrome, Edge, and Safari.
*/
abbr:where([title]) {
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
}
/*
Remove the default font size and weight for headings.
*/
h1,
h2,
h3,
h4,
h5,
h6 {
font-size: inherit;
font-weight: inherit;
}
/*
Reset links to optimize for opt-in styling instead of opt-out.
*/
a {
color: inherit;
text-decoration: inherit;
}
/*
Add the correct font weight in Edge and Safari.
*/
b,
strong {
font-weight: bolder;
}
/*
1. Use the user's configured `mono` font-family by default.
2. Use the user's configured `mono` font-feature-settings by default.
3. Use the user's configured `mono` font-variation-settings by default.
4. Correct the odd `em` font sizing in all browsers.
*/
code,
kbd,
samp,
pre {
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
/* 1 */
font-feature-settings: normal;
/* 2 */
font-variation-settings: normal;
/* 3 */
font-size: 1em;
/* 4 */
}
/*
Add the correct font size in all browsers.
*/
small {
font-size: 80%;
}
/*
Prevent `sub` and `sup` elements from affecting the line height in all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
/*
1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
3. Remove gaps between table borders by default.
*/
table {
text-indent: 0;
/* 1 */
border-color: inherit;
/* 2 */
border-collapse: collapse;
/* 3 */
}
/*
1. Change the font styles in all browsers.
2. Remove the margin in Firefox and Safari.
3. Remove default padding in all browsers.
*/
button,
input,
optgroup,
select,
textarea {
font-family: inherit;
/* 1 */
font-feature-settings: inherit;
/* 1 */
font-variation-settings: inherit;
/* 1 */
font-size: 100%;
/* 1 */
font-weight: inherit;
/* 1 */
line-height: inherit;
/* 1 */
color: inherit;
/* 1 */
margin: 0;
/* 2 */
padding: 0;
/* 3 */
}
/*
Remove the inheritance of text transform in Edge and Firefox.
*/
button,
select {
text-transform: none;
}
/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Remove default button styles.
*/
button,
[type='button'],
[type='reset'],
[type='submit'] {
-webkit-appearance: button;
/* 1 */
background-color: transparent;
/* 2 */
background-image: none;
/* 2 */
}
/*
Use the modern Firefox focus style for all focusable elements.
*/
:-moz-focusring {
outline: auto;
}
/*
Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
*/
:-moz-ui-invalid {
box-shadow: none;
}
/*
Add the correct vertical alignment in Chrome and Firefox.
*/
progress {
vertical-align: baseline;
}
/*
Correct the cursor style of increment and decrement buttons in Safari.
*/
::-webkit-inner-spin-button,
::-webkit-outer-spin-button {
height: auto;
}
/*
1. Correct the odd appearance in Chrome and Safari.
2. Correct the outline style in Safari.
*/
[type='search'] {
-webkit-appearance: textfield;
/* 1 */
outline-offset: -2px;
/* 2 */
}
/*
Remove the inner padding in Chrome and Safari on macOS.
*/
::-webkit-search-decoration {
-webkit-appearance: none;
}
/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Change font properties to `inherit` in Safari.
*/
::-webkit-file-upload-button {
-webkit-appearance: button;
/* 1 */
font: inherit;
/* 2 */
}
/*
Add the correct display in Chrome and Safari.
*/
summary {
display: list-item;
}
/*
Removes the default spacing and border for appropriate elements.
*/
blockquote,
dl,
dd,
h1,
h2,
h3,
h4,
h5,
h6,
hr,
figure,
p,
pre {
margin: 0;
}
fieldset {
margin: 0;
padding: 0;
}
legend {
padding: 0;
}
ol,
ul,
menu {
list-style: none;
margin: 0;
padding: 0;
}
/*
Reset default styling for dialogs.
*/
dialog {
padding: 0;
}
/*
Prevent resizing textareas horizontally by default.
*/
textarea {
resize: vertical;
}
/*
1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
2. Set the default placeholder color to the user's configured gray 400 color.
*/
input::-moz-placeholder, textarea::-moz-placeholder {
opacity: 1;
/* 1 */
color: #9ca3af;
/* 2 */
}
input::placeholder,
textarea::placeholder {
opacity: 1;
/* 1 */
color: #9ca3af;
/* 2 */
}
/*
Set the default cursor for buttons.
*/
button,
[role="button"] {
cursor: pointer;
}
/*
Make sure disabled buttons don't get the pointer cursor.
*/
:disabled {
cursor: default;
}
/*
1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
This can trigger a poorly considered lint error in some tools but is included by design.
*/
img,
svg,
video,
canvas,
audio,
iframe,
embed,
object {
display: block;
/* 1 */
vertical-align: middle;
/* 2 */
}
/*
Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
*/
img,
video {
max-width: 100%;
height: auto;
}
/* Make elements with the HTML hidden attribute stay hidden by default */
[hidden] {
display: none;
}
*, ::before, ::after {
--tw-border-spacing-x: 0;
--tw-border-spacing-y: 0;
--tw-translate-x: 0;
--tw-translate-y: 0;
--tw-rotate: 0;
--tw-skew-x: 0;
--tw-skew-y: 0;
--tw-scale-x: 1;
--tw-scale-y: 1;
--tw-pan-x: ;
--tw-pan-y: ;
--tw-pinch-zoom: ;
--tw-scroll-snap-strictness: proximity;
--tw-gradient-from-position: ;
--tw-gradient-via-position: ;
--tw-gradient-to-position: ;
--tw-ordinal: ;
--tw-slashed-zero: ;
--tw-numeric-figure: ;
--tw-numeric-spacing: ;
--tw-numeric-fraction: ;
--tw-ring-inset: ;
--tw-ring-offset-width: 0px;
--tw-ring-offset-color: #fff;
--tw-ring-color: rgb(59 130 246 / 0.5);
--tw-ring-offset-shadow: 0 0 #0000;
--tw-ring-shadow: 0 0 #0000;
--tw-shadow: 0 0 #0000;
--tw-shadow-colored: 0 0 #0000;
--tw-blur: ;
--tw-brightness: ;
--tw-contrast: ;
--tw-grayscale: ;
--tw-hue-rotate: ;
--tw-invert: ;
--tw-saturate: ;
--tw-sepia: ;
--tw-drop-shadow: ;
--tw-backdrop-blur: ;
--tw-backdrop-brightness: ;
--tw-backdrop-contrast: ;
--tw-backdrop-grayscale: ;
--tw-backdrop-hue-rotate: ;
--tw-backdrop-invert: ;
--tw-backdrop-opacity: ;
--tw-backdrop-saturate: ;
--tw-backdrop-sepia: ;
}
::backdrop {
--tw-border-spacing-x: 0;
--tw-border-spacing-y: 0;
--tw-translate-x: 0;
--tw-translate-y: 0;
--tw-rotate: 0;
--tw-skew-x: 0;
--tw-skew-y: 0;
--tw-scale-x: 1;
--tw-scale-y: 1;
--tw-pan-x: ;
--tw-pan-y: ;
--tw-pinch-zoom: ;
--tw-scroll-snap-strictness: proximity;
--tw-gradient-from-position: ;
--tw-gradient-via-position: ;
--tw-gradient-to-position: ;
--tw-ordinal: ;
--tw-slashed-zero: ;
--tw-numeric-figure: ;
--tw-numeric-spacing: ;
--tw-numeric-fraction: ;
--tw-ring-inset: ;
--tw-ring-offset-width: 0px;
--tw-ring-offset-color: #fff;
--tw-ring-color: rgb(59 130 246 / 0.5);
--tw-ring-offset-shadow: 0 0 #0000;
--tw-ring-shadow: 0 0 #0000;
--tw-shadow: 0 0 #0000;
--tw-shadow-colored: 0 0 #0000;
--tw-blur: ;
--tw-brightness: ;
--tw-contrast: ;
--tw-grayscale: ;
--tw-hue-rotate: ;
--tw-invert: ;
--tw-saturate: ;
--tw-sepia: ;
--tw-drop-shadow: ;
--tw-backdrop-blur: ;
--tw-backdrop-brightness: ;
--tw-backdrop-contrast: ;
--tw-backdrop-grayscale: ;
--tw-backdrop-hue-rotate: ;
--tw-backdrop-invert: ;
--tw-backdrop-opacity: ;
--tw-backdrop-saturate: ;
--tw-backdrop-sepia: ;
}
-8
View File
@@ -1,8 +0,0 @@
window.remark_config = {
host: "https://remark42.avinal.space",
site_id: "remark",
show_rss_subscription: false,
theme: 'dark',
no_footer: true,
};
-5
View File
@@ -1,5 +0,0 @@
---
date: "2023-01-01T08:00:00-07:00"
draft: false
title: Home
---
-60
View File
@@ -1,60 +0,0 @@
baseURL: 'https://avinal.space/'
languageCode: en-us
title: Fedoraemon
menus:
main:
- name: Home
pageRef: /
weight: 10
- name: Posts
pageRef: /posts
weight: 20
- name: Tags
pageRef: /tags
weight: 30
module:
hugoVersion:
extended: false
min: 0.116.0
params:
showWordCount: true
showReadingTime: true
toc: true
numberedSubtitles: true
navs:
- name: Home
link: https://avinal.space
- name: About
link: https://avinal.space/pages/about-me
- name: Blog
link: https://avinal.space/posts
- name: Projects
link: https://avinal.space/pages/projects
- name: GitHub
link: https://github.com/avinal
disableKinds: ["home", "taxonomy"]
taxonomies:
category: category
tag: tags
permalinks:
tags: "/posts/tags/:slug"
category: "/posts/category/:slug"
markup:
highlight:
anchorLineNos: false
# codeFences: true
guessSyntax: false
lineNoStart: 1
# lineNos: true
# lineNumbersInTable: true
noClasses: true
noHl: false
style: base16-snazzy
goldmark:
renderer:
unsafe: true
@@ -1,3 +0,0 @@
<h{{ .Level }} id="{{ .Anchor | safeURL }}">{{ .Text | safeHTML }}
<a href="#{{ .Anchor | safeURL }}">#</a>
</h{{ .Level }}>
-18
View File
@@ -1,18 +0,0 @@
<!DOCTYPE html>
<html lang="{{ or site.Language.LanguageCode site.Language.Lang }}"
dir="{{ or site.Language.LanguageDirection `ltr` }}">
<head>
{{ partial "head.html" . }}
</head>
<body class="bg-neutral-800">
<main class="container mx-auto">
{{ block "main" . }}{{ end }}
<footer>
{{ partial "footer.html" . }}
</footer>
</main>
</body>
</html>
-7
View File
@@ -1,7 +0,0 @@
{{ define "main" }}
{{ .Content }}
{{ range site.RegularPages }}
<h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
{{ .Summary }}
{{ end }}
{{ end }}
-78
View File
@@ -1,78 +0,0 @@
{{ define "main" }}
<div
class="prose prose-invert mx-auto prose-lg prose-a:decoration-cyan-500 hover:prose-a:decoration-pink-500 text-white">
<div class="md:-mx-8 lg:-mx-16 px-8 py-1">
<h1 class="text-5xl font-bold mb-6 mt-12 text-center">{{ .Title }}</h1>
{{ .Content }}
</div>
</div>
<section class="text-gray-100">
<div class="max-w-6xl p-6 mx-auto space-y-6 sm:space-y-12 mb-16">
{{ range first 1 .Pages }}
<div
class="block max-x-sm gap-3 mx-auto sm:max-w-full group hover:no-underline focus:no-underline lg:grid lg:grid-cols-12 bg-neutral-900">
<a class="lg:col-span-7" href="{{ .RelPermalink }}">
<img class="object-cover w-full h-64 rounded sm:h-96 lg:col-span-7" src="{{ .Params.Image | absURL }}"
alt="{{ .LinkTitle }}">
</a>
<div class="p-6 space-y-2 lg:col-span-5">
<a href="{{ .RelPermalink }}">
<h3 class="text-2xl font-semibold sm:text-4xl group-hover:underline group-focus:underline">{{ .LinkTitle }}
</h3>
{{ $dateMachine := .Date | time.Format "2006-01-02T15:04:05-07:00" }}
{{ $dateHuman := .Date | time.Format ":date_long" }}
<time datetime="{{ $dateMachine }}" class="text-gray-400">{{ $dateHuman }}</time>
{{ if gt .ReadingTime 1 }}
{{ .Scratch.Set "timeUnit" "mins" }}
{{ else }}
{{ .Scratch.Set "timeUnit" "min" }}
{{ end }}
{{ if .Site.Params.showReadingTime }}
<span class="text-gray-400"> | ~{{.ReadingTime}} {{ .Scratch.Get "timeUnit" }}</span>
{{ end }}
<p> {{ .Summary | truncate 250 }}</p>
</a>
<span class="flex flex-wrap py-6 space-x-2">
<a class="px-3 py-1 m-1 rounded-sm hover:underline bg-pink-400 text-gray-900 font-bold" href="/posts/category/{{ .Params.Category }}">
{{ .Params.Category }}</a>
</span>
</div>
</div>
{{ end }}
<div class="grid justify-center grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3">
{{ range after 1 .Pages }}
<div class="max-w-sm mx-auto group hover:no-underline focus:no-underline bg-neutral-900">
<a href="{{ .RelPermalink }}">
<img class="object-cover w-full h-44 rounded" src="{{ .Params.Image | absURL }}" alt="{{ .LinkTitle }}">
</a>
<div class="p-6 space-y-2">
<a href="{{ .RelPermalink }}">
<h3 class="text-2xl font-semibold group-hover:underline group-focus:underline">{{ .LinkTitle }}</h3>
{{ $dateMachine := .Date | time.Format "2006-01-02T15:04:05-07:00" }}
{{ $dateHuman := .Date | time.Format ":date_long" }}
<time datetime="{{ $dateMachine }}" class="text-gray-400">{{ $dateHuman }}</time>
{{ if gt .ReadingTime 1 }}
{{ .Scratch.Set "timeUnit" "mins" }}
{{ else }}
{{ .Scratch.Set "timeUnit" "min" }}
{{ end }}
{{ if .Site.Params.showReadingTime }}
<span class="text-gray-400"> | ~{{.ReadingTime}} {{ .Scratch.Get "timeUnit" }}</span>
{{ end }}
<p> {{ .Summary | truncate 150 }}</p>
</a>
<span class="flex flex-wrap py-6 space-x-2">
<a class="px-3 py-1 m-1 rounded-sm hover:underline bg-pink-400 text-gray-900 font-bold" href="/posts/category/{{ .Params.Category }}">
{{ .Params.Category }}</a>
</span>
</div>
</div>
{{ end }}
</div>
</div>
</section>
{{ end }}
-32
View File
@@ -1,32 +0,0 @@
{{ define "main" }}
<div class="min-h-screen flex flex-col justify-center relative overflow-hidden">
<div class="relative w-full bg-neutral md:max-w-3xl md:mx-auto lg:max-w-4xl lg:pb-28">
<div class="prose prose-invert mx-auto prose-lg prose-a:decoration-cyan-500 hover:prose-a:decoration-pink-500">
<div class="bg-neutral-900 md:-mx-8 lg:-mx-16 px-8 py-1">
{{ partial "header.html" . }}
<article>
{{ if cond (ne .Params.toc nil) .Params.toc .Site.Params.toc }}
{{ if ne .TableOfContents "<nav id=\"TableOfContents\"></nav>" }}
<details class="open:bg-neutral-800 open:border open:rounded open:border-cyan-700 ">
<summary>
<b>In this post, we'll take a look at:</b>
</summary>
<div class="toc {{ if .Site.Params.numberedSubtitles }}numbered-subtitles{{ end }} ">{{ .TableOfContents }}
</div>
</details>
{{ end }}
{{ end }}
{{ .Content }}
</article>
{{ partial "terms.html" (dict "taxonomy" "tags" "page" .) }}
</div>
</div>
{{ partial "comments.html" . (dict "taxonomy" "tags" "page" .) }}
</div>
</div>
{{ end }}
-18
View File
@@ -1,18 +0,0 @@
<script>
!(function (e, n) {
for (var o = 0; o < e.length; o++) {
var r = n.createElement("script"),
c = ".js",
d = n.head || n.body;
"noModule" in r
? ((r.type = "module"), (c = ".mjs"))
: (r.async = !0),
(r.defer = !0),
(r.src = remark_config.host + "/web/" + e[o] + c),
d.appendChild(r);
}
})(remark_config.components || ["embed"], document);
</script>
<div id="remark42" class="md:p-4 mb-16"></div>
-8
View File
@@ -1,8 +0,0 @@
<div class="fixed bottom-0 left-0 bg-neutral-900 p-3 w-full border-t border-cyan-500">
<div class="mx-auto flex justify-center space-x-6 text-gray-400">
{{ range .Site.Params.navs }}
<a class="underline decoration-cyan-500 hover:decoration-pink-500 text-xl" href="{{ .link | safeURL }}">{{ .name
}}</a>
{{ end }}
</div>
</div>
-28
View File
@@ -1,28 +0,0 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title itemprop="name">{{ if .IsHome }}{{ site.Title }}{{ else }}{{ printf "%s | %s" .Title site.Title }}{{ end }}
</title>
{{ if eq .Section "posts" }}
<meta property="og:title" content="{{ .Title }} | {{ .Site.Title }}" />
<meta name="twitter:title" content="{{ .Title }} | {{ .Site.Title }}" />
<meta itemprop="name" content="{{ .Title }} | {{ .Site.Title }}" />
<meta name="application-name" content="{{ .Title }} | {{ .Site.Title }}" />
<meta property="og:site_name" content="{{ .Site.Params.sitename }}" />
<meta name="description" content="{{ .Params.description }}" />
<meta itemprop="description" content="{{ .Params.description }}" />
<meta property="og:description" content="{{ .Params.description }}" />
<meta name="twitter:description" content="{{ .Params.description }}" />
{{ with .Params.image }}
<meta itemprop="image" content="{{ . | absURL }}" />
<meta property="og:image" content="{{ . | absURL }}" />
<meta name="twitter:image" content="{{ . | absURL }}" />
<meta name="twitter:image:src" content="{{ . | absURL }}" />
{{ else }}
<meta itemprop="image" content="{{ .Site.Params.ogimage | absURL }}" />
<meta property="og:image" content="{{ .Site.Params.ogimage | absURL }}" />
<meta name="twitter:image" content="{{ .Site.Params.ogimage | absURL }}" />
<meta name="twitter:image:src" content="{{ .Site.Params.ogimage | absURL }}" />
{{ end }}
{{ end }}
{{ partialCached "head/css.html" . }}
{{ partialCached "head/js.html" . }}
-9
View File
@@ -1,9 +0,0 @@
{{- with resources.Get "css/main.css" }}
{{- if eq hugo.Environment "development" }}
<link rel="stylesheet" href="{{ .RelPermalink }}">
{{- else }}
{{- with . | minify | fingerprint }}
<link rel="stylesheet" href="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous">
{{- end }}
{{- end }}
{{- end }}
-12
View File
@@ -1,12 +0,0 @@
{{- with resources.Get "js/main.js" }}
{{- if eq hugo.Environment "development" }}
{{- with . | js.Build }}
<script src="{{ .RelPermalink }}"></script>
{{- end }}
{{- else }}
{{- $opts := dict "minify" true }}
{{- with . | js.Build $opts | fingerprint }}
<script src="{{ .RelPermalink }}" integrity="{{- .Data.Integrity }}" crossorigin="anonymous"></script>
{{- end }}
{{- end }}
{{- end }}
-25
View File
@@ -1,25 +0,0 @@
<header class="relative">
<img class="object-cover w-full h-60 sm:h-96 brightness-50" src="{{ .Params.Image | absURL }}" alt="{{ .Title }}">
<h1 class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 text-center w-full text-white">{{ .Title }}</h1>
<span class="absolute bottom-1/4 left-1/2 -translate-x-1/2 text-base font-sans oldstyle-nums text-center w-full">
<a class="font-bold no-underline hover:text-pink-500" href="/">Avinal Kumar</a>
|
{{ $dateMachine := .Date | time.Format "2006-01-02T15:04:05-07:00" }}
{{ $dateHuman := .Date | time.Format ":date_long" }}
<time datetime="{{ $dateMachine }}">{{ $dateHuman }}</time>
{{ if .Site.Params.showWordCount }}
<span>| {{ .WordCount }} words</span>
{{ end }}
{{ if gt .ReadingTime 1 }}
{{ .Scratch.Set "timeUnit" "mins" }}
{{ else }}
{{ .Scratch.Set "timeUnit" "min" }}
{{ end }}
{{ if .Site.Params.showReadingTime }}
<span>| ~{{.ReadingTime}} {{ .Scratch.Get "timeUnit" }}</span>
{{ end }}
</span>
</header>
-51
View File
@@ -1,51 +0,0 @@
{{- /*
Renders a menu for the given menu ID.
@context {page} page The current page.
@context {string} menuID The menu ID.
@example: {{ partial "menu.html" (dict "menuID" "main" "page" .) }}
*/}}
{{- $page := .page }}
{{- $menuID := .menuID }}
{{- with index site.Menus $menuID }}
<nav>
<ul>
{{- partial "inline/menu/walk.html" (dict "page" $page "menuEntries" .) }}
</ul>
</nav>
{{- end }}
{{- define "partials/inline/menu/walk.html" }}
{{- $page := .page }}
{{- range .menuEntries }}
{{- $attrs := dict "href" .URL }}
{{- if $page.IsMenuCurrent .Menu . }}
{{- $attrs = merge $attrs (dict "class" "active" "aria-current" "page") }}
{{- else if $page.HasMenuCurrent .Menu .}}
{{- $attrs = merge $attrs (dict "class" "ancestor" "aria-current" "true") }}
{{- end }}
{{- $name := .Name }}
{{- with .Identifier }}
{{- with T . }}
{{- $name = . }}
{{- end }}
{{- end }}
<li>
<a
{{- range $k, $v := $attrs }}
{{- with $v }}
{{- printf " %s=%q" $k $v | safeHTMLAttr }}
{{- end }}
{{- end -}}
>{{ $name }}</a>
{{- with .Children }}
<ul>
{{- partial "inline/menu/walk.html" (dict "page" $page "menuEntries" .) }}
</ul>
{{- end }}
</li>
{{- end }}
{{- end }}
-22
View File
@@ -1,22 +0,0 @@
{{- /*
For a given taxonomy, renders a list of terms assigned to the page.
@context {page} page The current page.
@context {string} taxonomy The taxonony.
@example: {{ partial "terms.html" (dict "taxonomy" "tags" "page" .) }}
*/}}
{{- $page := .page }}
{{- $taxonomy := .taxonomy }}
{{- with $page.GetTerms $taxonomy }}
{{- $label := (index . 0).Parent.LinkTitle }}
<span class="flex flex-wrap py-6 space-x-2 border-t border-gray-500">
<!-- <a class="px-3 py-1 m-1 rounded-sm hover:underline bg-pink-400 text-gray-900 font-bold" href="/category/"></a> -->
{{- range . }}
<a class="px-3 py-1 m-1 rounded-sm bg-cyan-500 text-gray-900" href="{{ .RelPermalink }}">#{{ .LinkTitle }}</a>
{{- end }}
</span>
{{- end }}
-545
View File
@@ -1,545 +0,0 @@
/*
! tailwindcss v3.3.6 | MIT License | https://tailwindcss.com
*/
/*
1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
*/
*,
::before,
::after {
box-sizing: border-box;
/* 1 */
border-width: 0;
/* 2 */
border-style: solid;
/* 2 */
border-color: #e5e7eb;
/* 2 */
}
::before,
::after {
--tw-content: '';
}
/*
1. Use a consistent sensible line-height in all browsers.
2. Prevent adjustments of font size after orientation changes in iOS.
3. Use a more readable tab size.
4. Use the user's configured `sans` font-family by default.
5. Use the user's configured `sans` font-feature-settings by default.
6. Use the user's configured `sans` font-variation-settings by default.
*/
html {
line-height: 1.5;
/* 1 */
-webkit-text-size-adjust: 100%;
/* 2 */
-moz-tab-size: 4;
/* 3 */
-o-tab-size: 4;
tab-size: 4;
/* 3 */
font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
/* 4 */
font-feature-settings: normal;
/* 5 */
font-variation-settings: normal;
/* 6 */
}
/*
1. Remove the margin in all browsers.
2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
*/
body {
margin: 0;
/* 1 */
line-height: inherit;
/* 2 */
}
/*
1. Add the correct height in Firefox.
2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
3. Ensure horizontal rules are visible by default.
*/
hr {
height: 0;
/* 1 */
color: inherit;
/* 2 */
border-top-width: 1px;
/* 3 */
}
/*
Add the correct text decoration in Chrome, Edge, and Safari.
*/
abbr:where([title]) {
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
}
/*
Remove the default font size and weight for headings.
*/
h1,
h2,
h3,
h4,
h5,
h6 {
font-size: inherit;
font-weight: inherit;
}
/*
Reset links to optimize for opt-in styling instead of opt-out.
*/
a {
color: inherit;
text-decoration: inherit;
}
/*
Add the correct font weight in Edge and Safari.
*/
b,
strong {
font-weight: bolder;
}
/*
1. Use the user's configured `mono` font-family by default.
2. Use the user's configured `mono` font-feature-settings by default.
3. Use the user's configured `mono` font-variation-settings by default.
4. Correct the odd `em` font sizing in all browsers.
*/
code,
kbd,
samp,
pre {
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
/* 1 */
font-feature-settings: normal;
/* 2 */
font-variation-settings: normal;
/* 3 */
font-size: 1em;
/* 4 */
}
/*
Add the correct font size in all browsers.
*/
small {
font-size: 80%;
}
/*
Prevent `sub` and `sup` elements from affecting the line height in all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
/*
1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
3. Remove gaps between table borders by default.
*/
table {
text-indent: 0;
/* 1 */
border-color: inherit;
/* 2 */
border-collapse: collapse;
/* 3 */
}
/*
1. Change the font styles in all browsers.
2. Remove the margin in Firefox and Safari.
3. Remove default padding in all browsers.
*/
button,
input,
optgroup,
select,
textarea {
font-family: inherit;
/* 1 */
font-feature-settings: inherit;
/* 1 */
font-variation-settings: inherit;
/* 1 */
font-size: 100%;
/* 1 */
font-weight: inherit;
/* 1 */
line-height: inherit;
/* 1 */
color: inherit;
/* 1 */
margin: 0;
/* 2 */
padding: 0;
/* 3 */
}
/*
Remove the inheritance of text transform in Edge and Firefox.
*/
button,
select {
text-transform: none;
}
/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Remove default button styles.
*/
button,
[type='button'],
[type='reset'],
[type='submit'] {
-webkit-appearance: button;
/* 1 */
background-color: transparent;
/* 2 */
background-image: none;
/* 2 */
}
/*
Use the modern Firefox focus style for all focusable elements.
*/
:-moz-focusring {
outline: auto;
}
/*
Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
*/
:-moz-ui-invalid {
box-shadow: none;
}
/*
Add the correct vertical alignment in Chrome and Firefox.
*/
progress {
vertical-align: baseline;
}
/*
Correct the cursor style of increment and decrement buttons in Safari.
*/
::-webkit-inner-spin-button,
::-webkit-outer-spin-button {
height: auto;
}
/*
1. Correct the odd appearance in Chrome and Safari.
2. Correct the outline style in Safari.
*/
[type='search'] {
-webkit-appearance: textfield;
/* 1 */
outline-offset: -2px;
/* 2 */
}
/*
Remove the inner padding in Chrome and Safari on macOS.
*/
::-webkit-search-decoration {
-webkit-appearance: none;
}
/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Change font properties to `inherit` in Safari.
*/
::-webkit-file-upload-button {
-webkit-appearance: button;
/* 1 */
font: inherit;
/* 2 */
}
/*
Add the correct display in Chrome and Safari.
*/
summary {
display: list-item;
}
/*
Removes the default spacing and border for appropriate elements.
*/
blockquote,
dl,
dd,
h1,
h2,
h3,
h4,
h5,
h6,
hr,
figure,
p,
pre {
margin: 0;
}
fieldset {
margin: 0;
padding: 0;
}
legend {
padding: 0;
}
ol,
ul,
menu {
list-style: none;
margin: 0;
padding: 0;
}
/*
Reset default styling for dialogs.
*/
dialog {
padding: 0;
}
/*
Prevent resizing textareas horizontally by default.
*/
textarea {
resize: vertical;
}
/*
1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
2. Set the default placeholder color to the user's configured gray 400 color.
*/
input::-moz-placeholder, textarea::-moz-placeholder {
opacity: 1;
/* 1 */
color: #9ca3af;
/* 2 */
}
input::placeholder,
textarea::placeholder {
opacity: 1;
/* 1 */
color: #9ca3af;
/* 2 */
}
/*
Set the default cursor for buttons.
*/
button,
[role="button"] {
cursor: pointer;
}
/*
Make sure disabled buttons don't get the pointer cursor.
*/
:disabled {
cursor: default;
}
/*
1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
This can trigger a poorly considered lint error in some tools but is included by design.
*/
img,
svg,
video,
canvas,
audio,
iframe,
embed,
object {
display: block;
/* 1 */
vertical-align: middle;
/* 2 */
}
/*
Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
*/
img,
video {
max-width: 100%;
height: auto;
}
/* Make elements with the HTML hidden attribute stay hidden by default */
[hidden] {
display: none;
}
*, ::before, ::after {
--tw-border-spacing-x: 0;
--tw-border-spacing-y: 0;
--tw-translate-x: 0;
--tw-translate-y: 0;
--tw-rotate: 0;
--tw-skew-x: 0;
--tw-skew-y: 0;
--tw-scale-x: 1;
--tw-scale-y: 1;
--tw-pan-x: ;
--tw-pan-y: ;
--tw-pinch-zoom: ;
--tw-scroll-snap-strictness: proximity;
--tw-gradient-from-position: ;
--tw-gradient-via-position: ;
--tw-gradient-to-position: ;
--tw-ordinal: ;
--tw-slashed-zero: ;
--tw-numeric-figure: ;
--tw-numeric-spacing: ;
--tw-numeric-fraction: ;
--tw-ring-inset: ;
--tw-ring-offset-width: 0px;
--tw-ring-offset-color: #fff;
--tw-ring-color: rgb(59 130 246 / 0.5);
--tw-ring-offset-shadow: 0 0 #0000;
--tw-ring-shadow: 0 0 #0000;
--tw-shadow: 0 0 #0000;
--tw-shadow-colored: 0 0 #0000;
--tw-blur: ;
--tw-brightness: ;
--tw-contrast: ;
--tw-grayscale: ;
--tw-hue-rotate: ;
--tw-invert: ;
--tw-saturate: ;
--tw-sepia: ;
--tw-drop-shadow: ;
--tw-backdrop-blur: ;
--tw-backdrop-brightness: ;
--tw-backdrop-contrast: ;
--tw-backdrop-grayscale: ;
--tw-backdrop-hue-rotate: ;
--tw-backdrop-invert: ;
--tw-backdrop-opacity: ;
--tw-backdrop-saturate: ;
--tw-backdrop-sepia: ;
}
::backdrop {
--tw-border-spacing-x: 0;
--tw-border-spacing-y: 0;
--tw-translate-x: 0;
--tw-translate-y: 0;
--tw-rotate: 0;
--tw-skew-x: 0;
--tw-skew-y: 0;
--tw-scale-x: 1;
--tw-scale-y: 1;
--tw-pan-x: ;
--tw-pan-y: ;
--tw-pinch-zoom: ;
--tw-scroll-snap-strictness: proximity;
--tw-gradient-from-position: ;
--tw-gradient-via-position: ;
--tw-gradient-to-position: ;
--tw-ordinal: ;
--tw-slashed-zero: ;
--tw-numeric-figure: ;
--tw-numeric-spacing: ;
--tw-numeric-fraction: ;
--tw-ring-inset: ;
--tw-ring-offset-width: 0px;
--tw-ring-offset-color: #fff;
--tw-ring-color: rgb(59 130 246 / 0.5);
--tw-ring-offset-shadow: 0 0 #0000;
--tw-ring-shadow: 0 0 #0000;
--tw-shadow: 0 0 #0000;
--tw-shadow-colored: 0 0 #0000;
--tw-blur: ;
--tw-brightness: ;
--tw-contrast: ;
--tw-grayscale: ;
--tw-hue-rotate: ;
--tw-invert: ;
--tw-saturate: ;
--tw-sepia: ;
--tw-drop-shadow: ;
--tw-backdrop-blur: ;
--tw-backdrop-brightness: ;
--tw-backdrop-contrast: ;
--tw-backdrop-grayscale: ;
--tw-backdrop-hue-rotate: ;
--tw-backdrop-invert: ;
--tw-backdrop-opacity: ;
--tw-backdrop-saturate: ;
--tw-backdrop-sepia: ;
}
.block {
display: block;
}
-3
View File
@@ -1,3 +0,0 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
-10
View File
@@ -1,10 +0,0 @@
/** @type {import('tailwindcss').Config} */
module.exports = {
content: ["../content/**/*.md", "../layouts/**/*.html"],
theme: {
extend: {},
},
// darkMode: 'class',
plugins: [require("@tailwindcss/typography")],
}
-20
View File
@@ -1,20 +0,0 @@
name: Space Bar
license: MIT
licenselink: 'https://github.com/owner/repo/LICENSE'
description: Theme description
homepage: 'https://github.com/owner/repo'
demosite: 'https://owner.github.io/repo'
tags:
- blog
- company
features:
- some
- awesome
- features
author:
name: Avinal Kumar
homepage: 'https://avinal.space'
original:
author: Name of original author
homepage: Website of original author
repo: 'https://github.com/owner/repo'
+12
View File
@@ -0,0 +1,12 @@
---
date: "2023-01-01T08:00:00-07:00"
draft: false
title: Home
---
I am a Software Engineer II at Red Hat, specializing in hybrid cloud engineering.
I have been involved with Google's Summer of Code and Google Season of Docs
programs as a mentor and contributor to Open Source for many years. For fun,
I like to play around with cutting-edge areas of computer science; at the
moment, I'm learning about Elm. GNU/Linux and free/open-source software are
two of my favorite things
@@ -0,0 +1,24 @@
---
category: article
date: 2024-10-10T03:47:00
description: The Big Red Ants
image: /images/ants.webp
tags:
- ants
- sav
title: Ephemeral Lament in Temporal Decay
---
There is about 3 hours left until I can see my first morning twilight in the new revolution. There is little sound of wind blowing but it is faint like if I ask them to stop, they will. If you are not careful enough this silence can be very noisy.
Lament is an elusive specter, a whisper of sorrow that slips through our fingers like sand. It is neither a crescendo nor a silence; instead, it weaves itself into the fabric of our existence, intertwining with the threads of fleeting joy and lingering regret. As time unfurls, it morphs, presenting a kaleidoscope of emotions that dance in and out of focus, challenging the very essence of memory and feeling.
Faces once familar now contribute to the darkness all around me. The screen, once alight with messages, now lies dormant, a graveyard of unspoken words. In these voids, nostalgia and anguish intertwine, creating a tapestry of emotions that suffocates and sustains simultaneously. Each reminder of their absence stirs a deep yearning, a longing for what was, yet it compels me to confront the stark reality of isolation.
Within this tempest of thought, an internal monologue unfolds, an endless loop of contemplation that spirals into itself. I grapple with the contradictions that paint my existence: the flicker of hope buried beneath layers of despair, the fleeting joy that dances just out of reach. Like shadows flickering in candlelight, these emotions tease my consciousness, merging and separating in a chaotic ballet. It is a relentless struggle, the mind ensnared in a web of unarticulated feelings, each thread woven tighter by the weight of unexpressed sorrow.
Time, in its capriciousness, warps and distorts, leaving me adrift in an ocean of temporal confusion. Seconds stretch into hours, a torturous dragging of moments that cling like cobwebs to my psyche, while other hours flash by unnoticed, a blur of mundane existence. I am haunted by the imagery of decay—the crumbling walls of memory, the fading echoes of laughter. Each recollection erodes like sandcastles washed away by relentless tides, yet the remnants remain, forming the contours of my fractured emotional landscape.
In the maelstrom, glimpses of clarity emerge, ethereal and brief, like sunlight piercing through a stormy sky. For an instant, I grasp a sense of purpose, a flicker of motivation igniting within me, only to be enveloped again by the shadows of my thoughts. These fleeting moments serve as reminders of what could be, yet they dissipate too quickly, leaving behind a more profound ache in their wake. The contrasts are stark; the euphoria of realization juxtaposed with the heaviness of returning emotions, a reminder that solace is ephemeral.
@@ -52,7 +52,6 @@ them—a promise waiting to be fulfilled.
Planting them is an act of faith and surrender, a quiet conversation between the gardener and the
earth. Each bulb is placed with care, its position a deliberate choice. It is not enough to bury
them; they must be cradled, surrounded by soil that is ready to nurture them.
And then comes the waiting. Beneath the surface, where no eyes can see, the bulbs begin their secret
work. It is a reminder that growth often begins in the darkness, in spaces where no light reaches.
@@ -65,7 +64,6 @@ bear. But you do it anyway, knowing that without this care, the lilies cannot th
The sunlight is capricious. Some days, it floods the garden, bathing it in warmth. Other days, it
hides behind thick clouds, forcing the lilies to stretch toward a light they cannot see. But they
adapt. Lilies have a way of finding what they need, even in the absence of abundance.
This daily ritual of watering and watching is its own form of prayer. Each drop of water, each
fleeting moment of sunlight, whispers to the lilies: *Grow, even if it feels impossible. Grow, even
when no one is watching.*
@@ -90,7 +88,6 @@ not grow in safety. They grow in resilience.
The garden is never free from trials. Storms roll in, their winds threatening to uproot what little
has begun to grow. Pests arrive uninvited, gnawing at leaves and stems as though testing your
resolve. The sun beats down mercilessly one day, only to disappear for weeks on end.
It is in these moments that you are tempted to despair, to abandon the garden and declare it a
failure. But lilies teach you that resilience is not about avoiding hardship; it is about enduring
it. When the storm passes, you clear the debris. When pests arrive, you remove them. When the
@@ -119,10 +116,8 @@ The most dangerous thing about me is that *I don't know how to give up*.
When the storms tore through, I stayed. When the roots clung to the earth like they had a right to
its emptiness, I dug deeper. Even when the soil screamed that nothing could ever grow here, I
refused to listen.
It's not resilience—it's defiance. A stubbornness that borders on recklessness. I don't know when to
stop, even when the odds mock me. Even when it hurts.
Maybe it's toxic. Maybe it's foolish. But here I am, hands in the dirt, refusing to abandon what
could still bloom.
@@ -1,6 +1,6 @@
---
title: Installing Fedora with automatic and custom partioning
date: 2023-01-19 23:02
date: 2023-01-19T23:02:00
category: blog
tags: [fedora, partioning]
image: ""
@@ -5,7 +5,7 @@ description: The project was to Create the VLC User Documentation for Android Mo
Port which was previously hosted on VLC wiki pages. The major portion of this was
to start everything from scratch including chapter separation, section organization.
image: /images/day-of-cone.webp
modified: 2020-12-31 23:19
modified: 2020-12-31T23:19:00
tags:
- vlc
- gsod
@@ -7,7 +7,7 @@ description: This blog is a descreptive account of the development of Minimal Te
blog]("https://avinal.space/posts/development/i-am-loving-it-redhat.html") to know
about these topics.
image: /images/development.webp
modified: 2022-03-07 22:47
modified: 2022-03-07T22:47:00
tags:
- tekton
- go
@@ -217,4 +217,4 @@ type SpaceTimeList struct {
### Attribution
- Photo by [Luca Bravo](https://unsplash.com/@lucabravo?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) on [Unsplash](https://unsplash.com/photos/XJXWbfSo2f0?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText).
@@ -53,7 +53,7 @@ I will be listing the applications in the decreasing order of my priority.
### Immich
| Website | Source | Category | Platforms | Similar |
|-------------------------------|------------------------------------------------|--------------------------|-------------------|---------------|
| ----------------------------- | ---------------------------------------------- | ------------------------ | ----------------- | ------------- |
| [Immich](https://immich.app/) | [GitHub](https://github.com/immich-app/immich) | Photos and Videos Backup | Web, Android, iOS | Google Photos |
Immich is the best open source and feature rich replacement to Google Photos. For starters the installation is very
@@ -65,7 +65,7 @@ alternatives [here](https://meichthys.github.io/foss_photo_libraries/).
### Paisa
| Website | Source | Category | Platforms | Similar |
|-----------------------------|---------------------------------------------------|----------------------------|-----------|------------------|
| --------------------------- | ------------------------------------------------- | -------------------------- | --------- | ---------------- |
| [Paisa](https://paisa.fyi/) | [GitHub](https://github.com/ananthakumaran/paisa) | Finance and Budget Manager | Web | Beancount,ledger |
It is really hard to keep track of all expenses from multiple accounts and credit cards. There are great solutions and
@@ -82,7 +82,7 @@ well. But the current web UI is more than enough.
### Vikunja
| Website | Source | Category | Platforms | Similar |
|--------------------------------|-----------------------------------------------|--------------|-----------|-----------------------|
| ------------------------------ | --------------------------------------------- | ------------ | --------- | --------------------- |
| [Vikunja](https://vikunja.io/) | [Gitea](https://kolaente.dev/vikunja/vikunja) | Todo, Kanban | Web | Google Tasks, Todoist |
There are many great open source todo and kanban applications, I have tested many of them and settled for Vikunja. For
@@ -94,7 +94,7 @@ different projects.
### Atuin
| Website | Source | Category | Platforms | Similar |
|----------------------------|--------------------------------------------|--------------------|-----------------------|------------|
| -------------------------- | ------------------------------------------ | ------------------ | --------------------- | ---------- |
| [Atuin](https://atuin.sh/) | [GitHub](https://github.com/atuinsh/atuin) | Shell History sync | Linux, MacOS, Android | zsh-histdb |
I have 4 servers and many devices, it is not often easy to get the similar commands on different machines. That is where
@@ -105,7 +105,7 @@ via an Atuin server.
### Gitea
| Website | Source | Category | Platforms | Similar |
|-----------------------------------|---------------------------------------------|------------------|-----------|---------------------------|
| --------------------------------- | ------------------------------------------- | ---------------- | --------- | ------------------------- |
| [Gitea](https://about.gitea.com/) | [GitHub](https://github.com/go-gitea/gitea) | Git hosting, VCS | Web | GitHub, BitBucket, GitLab |
Gitea is a GitHub replacement written in Go. It includes a lot of features from GitHub including package registry,
@@ -114,7 +114,7 @@ CI/CD, team collaboration etc. I have not been actively using it. But I plan to
### Paperless-ngx
| Website | Source | Category | Platforms | Similar |
|--------------------------------------------------|----------------------------------------------------------|----------------------------|--------------|----------|
| ------------------------------------------------ | -------------------------------------------------------- | -------------------------- | ------------ | -------- |
| [Paperless-ngx](https://docs.paperless-ngx.com/) | [GitHub](https://github.com/paperless-ngx/paperless-ngx) | Document Management System | Web, Android | Docspell |
This is a document management application where I can store my PDF/text documents (not ebooks). It has built in OCR and
@@ -123,7 +123,7 @@ other useful feature to organise and search through your documents.
### Shiori
| Website | Source | Category | Platforms | Similar |
|---------|-----------------------------------------------|------------------|----------------------------|--------------------|
| ------- | --------------------------------------------- | ---------------- | -------------------------- | ------------------ |
| - | [GitHub](https://github.com/go-shiori/shiori) | Bookmark Manager | Web, Linux, MacOS, Windows | LinkWarden, Pocket |
Shiori is a simple bookmarks manager written in the Go language. Intended as a simple clone of Pocket. You can use it as
-140
View File
@@ -1,140 +0,0 @@
{
"app": {
"elm": {
"development": {
"debugger": true
},
"production": {
"debugger": false
}
},
"env": [],
"html": {
"attributes": {
"html": {
"lang": "en",
"class": "bg-neutral-800"
},
"head": {},
"body": {}
},
"title": "Avinal Kumar | Personal Website",
"meta": [
{
"charset": "UTF-8"
},
{
"http-equiv": "X-UA-Compatible",
"content": "IE=edge"
},
{
"name": "viewport",
"content": "width=device-width, initial-scale=1.0"
},
{
"name": "msapplication-TileColor",
"content": "#da532c"
},
{
"name": "theme-color",
"content": "#ffffff"
},
{
"name": "title",
"content": "Avinal Kumar | Personal Website"
},
{
"name": "description",
"content": "I am a Software Engineer Associate at Red Hat, specialising in hybrid cloud engineering. I have been involved with Google's Summer of Code and Google Season of Docs programmes as a mentor and contributor to Open Source for many years. For fun, I like to play around with cutting-edge areas of computer science; at the moment, I'm learning about Elm. GNU/Linux and free/open-source software are two of my favourite things."
},
{
"property": "og:type",
"content": "website"
},
{
"property": "og:url",
"content": "https://avinal.space/"
},
{
"property": "og:title",
"content": "Avinal Kumar | Personal Website"
},
{
"property": "og:description",
"content": "I am a Software Engineer Associate at Red Hat, specialising in hybrid cloud engineering. I have been involved with Google's Summer of Code and Google Season of Docs programmes as a mentor and contributor to Open Source for many years. For fun, I like to play around with cutting-edge areas of computer science; at the moment, I'm learning about Elm. GNU/Linux and free/open-source software are two of my favourite things"
},
{
"property": "og:image",
"content": "https://avinal.space/images/avinal-meta.png"
},
{
"property": "twitter:card",
"content": "summary_large_image"
},
{
"property": "twitter:url",
"content": "https://avinal.space/"
},
{
"property": "twitter:title",
"content": "Avinal Kumar | Personal Website"
},
{
"property": "twitter:description",
"content": "I am a Software Engineer Associate at Red Hat, specialising in hybrid cloud engineering. I have been involved with Google's Summer of Code and Google Season of Docs programmes as a mentor and contributor to Open Source for many years. For fun, I like to play around with cutting-edge areas of computer science; at the moment, I'm learning about Elm. GNU/Linux and free/open-source software are two of my favourite things"
},
{
"property": "twitter:image",
"content": "https://avinal.space/images/avinal-meta.png"
}
],
"link": [
{
"defer rel": "stylesheet",
"href": "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.1/css/all.min.css",
"integrity": "sha512-MV7K8+y+gLIBoVD59lQIYicR65iaqukzvf/nwasF0nqhPay5w/9lJmVM2hMDcnK1OnMGCdVK+iQrJ7lzPJQd1w==",
"crossorigin": "anonymous",
"referrerpolicy": "no-referrer"
},
{
"rel": "stylesheet",
"href": "/main.css"
},
{
"rel": "apple-touch-icon",
"sizes": "180x180",
"href": "/apple-touch-icon.png"
},
{
"rel": "icon",
"type": "image/png",
"sizes": "32x32",
"href": "/favicon-32x32.png"
},
{
"rel": "icon",
"type": "image/png",
"sizes": "16x16",
"href": "/favicon-16x16.png"
},
{
"rel": "manifest",
"href": "/site.webmanifest"
},
{
"rel": "mask-icon",
"href": "/safari-pinned-tab.svg",
"color": "#5bbad5"
},
{
"rel": "canonical",
"href": "https://avinal.space"
}
],
"script": []
},
"router": {
"useHashRouting": false
}
}
}
-33
View File
@@ -1,33 +0,0 @@
{
"type": "application",
"source-directories": [
"src",
".elm-land/src"
],
"elm-version": "0.19.1",
"dependencies": {
"direct": {
"MaybeJustJames/yaml": "2.1.2",
"NoRedInk/elm-json-decode-pipeline": "1.0.1",
"elm/browser": "1.0.2",
"elm/core": "1.0.5",
"elm/html": "1.0.0",
"elm/http": "2.0.0",
"elm/json": "1.1.3",
"elm/parser": "1.1.0",
"elm/svg": "1.0.1",
"elm/time": "1.0.0",
"elm/url": "1.0.0"
},
"indirect": {
"elm/bytes": "1.0.8",
"elm/file": "1.0.5",
"elm/regex": "1.0.0",
"elm/virtual-dom": "1.0.3"
}
},
"test-dependencies": {
"direct": {},
"indirect": {}
}
}
+23
View File
@@ -0,0 +1,23 @@
baseURL: 'https://avinal.space/'
languageCode: 'en-us'
title: "Avinal's Website"
theme: 'box-box'
menus:
main:
- name: Home
pageRef: /
weight: 10
- name: Posts
pageRef: /posts
weight: 20
disableKinds: ["taxonomy"]
taxonomies:
category: category
permalinks:
category: "/posts/category/:slug"
ignoreLogs: 'warning-goldmark-raw-html'
+3 -13
View File
@@ -1,16 +1,6 @@
[build]
command = "make all"
publish = "dist"
command = "hugo"
publish = "public"
[[redirects]]
from = "/*"
to = "/index.html"
status = 200
# [[redirects]]
# from = "/posts/*"
# to = ""
# status = 200
[build.environment]
HUGO_VERSION = "0.134.3"
HUGO_VERSION = "0.140.1"
-4781
View File
File diff suppressed because it is too large Load Diff
-10
View File
@@ -1,10 +0,0 @@
{
"devDependencies": {
"@tailwindcss/typography": "^0.5.8",
"elm-land": "^0.20.1",
"tailwindcss": "^3.2.4"
},
"dependencies": {
"npm": "^10.6.0"
}
}
-30
View File
@@ -1,30 +0,0 @@
# My personal website
**description will be updated soon.**
## Resources
- <https://mambaui.com/>
- <https://codebeautify.org/jsonminifier>
- <https://codeshack.io/json-sorter/>
- <https://prismjs.com/index.html>
- <https://elm.land>
- <https://max.hn/thoughts/using-tailwind-css-in-elm-and-vscode>
- <https://tailwindcss.com/>
- <https://tailwind-elements.com/>
- <https://github.com/annaghi/elm-github-pages>
- <https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_custom_elements>
- <https://elm-lang.org/>
- <https://tailblocks.cc/>
- <https://wickedblocks.dev/>
- <https://merakiui.com/>
- https://www.pexels.com/photo/photo-of-person-typing-on-computer-keyboard-735911/
- https://www.pexels.com/photo/black-flat-screen-computer-monitor-1714208/
- https://wallpapercave.com/w/Bi9gfmV
- https://www.pexels.com/photo/close-up-photo-of-gaming-keyboard-2115257/
- https://www.pexels.com/photo/numbers-projected-on-face-5952651/
- https://www.pexels.com/photo/close-up-photo-of-plugged-cables-1624895/
- <a href="https://www.freepik.com/free-photo/hands-digital-universe-background_13301552.htm#query=technology%20wallpaper&position=17&from_view=keyword">Image by rawpixel.com</a> on Freepik
<a href="https://www.flaticon.com/free-icons/projectile" title="projectile icons">Projectile icons created by Eucalyp - Flaticon</a>
-59
View File
@@ -1,59 +0,0 @@
module Components.Footer exposing (..)
import Html exposing (Html)
import Html.Attributes exposing (class, href, src, target)
import Utils.Constants exposing (IconLink, Link, footerLinks)
import Html.Attributes exposing (rel)
singleLink : Link -> Html msg
singleLink link =
Html.a
[ href link.url
, class "underline decoration-cyan-500 hover:decoration-pink-500 text-xl"
, target "_blank"
, rel "noopener noreferrer"
]
[ Html.text link.text ]
iconedLink : IconLink -> Html msg
iconedLink iconLink =
Html.a [ href iconLink.url, class "hover:text-pink-500 inline-flex text-2xl p-3 no-underline" ]
[ Html.i [ class iconLink.icon ] []
]
footerLinksToSide : Html msg
footerLinksToSide =
Html.div [ class "fixed bottom-0 left-0 bg-neutral-900 p-4 w-full border-t border-cyan-500" ]
[ Html.div [ class "mx-auto flex justify-center space-x-6 text-gray-400" ]
(List.map singleLink <|
{ text = "Home", url = "/" }
:: footerLinks
)
]
iconLinkToCenter : Html msg
iconLinkToCenter =
Html.div [ class "flex justify-center flex-wrap" ] (List.map iconedLink Utils.Constants.iconLinks)
avatarAndLinks : Html msg
avatarAndLinks =
Html.div []
[ Html.div [ class "flex flex-col md:space-y-0 md:space-x-6 md:flex-row border-t border-neutral-700" ]
[ Html.img
[ class "self-center flex-shrink-0 w-24 h-24 border rounded-full md:justify-self-start"
, src "https://github.com/avinal.png"
]
[]
, Html.div [ class "flex flex-col self-center" ]
[ Html.h4 [ class "text-xl font-semibold sm:justify-self-start" ] [ Html.text "Avinal Kumar" ]
, Html.p [ class "text-gray-400" ]
[ Html.text "I am a Associate Software Engineer at Red Hat and I work for Hybrid Cloud Engineering. I contribute to Open Source projects and write blogs in tech and literature."
]
]
]
, Html.div [ class "flex justify-center align-center text-neutral-700 text-xl" ] (List.map iconedLink Utils.Constants.iconLinks)
]
-93
View File
@@ -1,93 +0,0 @@
module Layouts.Home exposing (Model, Msg, Props, layout)
import Components.Footer exposing (iconLinkToCenter)
import Effect exposing (Effect)
import Html exposing (Html)
import Html.Attributes exposing (class, href, target, rel)
import Layout exposing (Layout)
import Route exposing (Route)
import Shared
import Utils.Constants exposing (..)
import View exposing (View)
import Html.Attributes exposing (target)
type alias Props =
{}
layout : Props -> Shared.Model -> Route () -> Layout () Model Msg contentMsg
layout props shared route =
Layout.new
{ init = init
, update = update
, view = view
, subscriptions = subscriptions
}
-- MODEL
type alias Model =
{}
init : () -> ( Model, Effect Msg )
init _ =
( {}
, Effect.none
)
-- UPDATE
type Msg
= ReplaceMe
update : Msg -> Model -> ( Model, Effect Msg )
update msg model =
case msg of
ReplaceMe ->
( model
, Effect.none
)
subscriptions : Model -> Sub Msg
subscriptions model =
Sub.none
-- VIEW
view : { toContentMsg : Msg -> contentMsg, content : View contentMsg, model : Model } -> View contentMsg
view { toContentMsg, model, content } =
let
footerLinkToCenter : Link -> Html msg
footerLinkToCenter link =
Html.a
[ href link.url
, class "underline decoration-cyan-500 hover:decoration-pink-500 inline-flex text-xl p-3"
, target "_blank"
, rel "noopener noreferrer"
]
[ Html.text link.text ]
in
{ title = content.title
, body =
[ Html.section [ class "flex items-center justify-center flex-col h-screen text-gray-400" ]
[ Html.header [ class "object-cover object-center p-8" ] content.body
, iconLinkToCenter
, Html.div [ class "text-center text-xl p-2" ] [ Html.text "Avinal Kumar, Software Engineer II at Red Hat, Open Sourcerer" ]
, Html.footer [ class "flex justify-center flex-wrap" ]
(List.map footerLinkToCenter Utils.Constants.footerLinks)
]
]
}
-317
View File
@@ -1,317 +0,0 @@
module Pages.Home_ exposing (Model, Msg, page)
import Array exposing (Array)
import Effect exposing (Effect)
import Html exposing (Html)
import Html.Events exposing (onClick, onMouseLeave)
import Layouts
import Page exposing (Page)
import Route exposing (Route)
import Shared
import Svg exposing (..)
import Svg.Attributes as SA
import Svg.Events as SE
import Time
import Utils.Constants exposing (nameMatrix)
import View exposing (View)
page : Shared.Model -> Route () -> Page Model Msg
page _ _ =
Page.new
{ init = init
, update = update
, subscriptions = subscriptions
, view = view
}
|> Page.withLayout layout
-- LAYOUT
layout : Model -> Layouts.Layout Msg
layout _ =
Layouts.Home
{}
-- INIT
type Cell
= Alive
| Dead
type alias Universe a =
{ space : Array a
, width : Int
, height : Int
}
type alias Model =
{ universe : Universe Cell
, generations : Int
, generating : Bool
}
cellSize : Int
cellSize =
10
init : () -> ( Model, Effect Msg )
init () =
( { universe = bigBang 30 30 Dead
, generating = False
, generations = 0
}
, Effect.none
)
-- UPDATE
type Msg
= Ressurect Int Int
| NextGeneration
| LiveLife
| Apocalypse
update : Msg -> Model -> ( Model, Effect Msg )
update msg model =
case msg of
Ressurect x y ->
( { model
| universe =
buildRelationship model.universe
x
y
invertLife
}
, Effect.none
)
NextGeneration ->
let
universe =
nextGeneration model.universe
generations =
model.generations + 1
generating =
model.generating && universe /= model.universe
in
( { model
| universe = universe
, generations = generations
, generating = generating
}
, Effect.none
)
LiveLife ->
( { model | generating = not model.generating }
, Effect.none
)
Apocalypse ->
( { model | generating = False }
, Effect.none
)
-- SUBSCRIPTIONS
subscriptions : Model -> Sub Msg
subscriptions model =
if model.generating then
Time.every 500 (always NextGeneration)
else
Sub.none
-- VIEW
view : Model -> View Msg
view model =
{ title = "Welcome to my website"
, body = [ Html.div [ onClick LiveLife, onMouseLeave LiveLife ] [ universeSvg model ] ]
}
cellToSvg : Int -> Int -> Cell -> Svg Msg
cellToSvg x y cell =
let
isName =
if Array.get ((y - 12) * 24 + x - 3) nameMatrix == Just 1 && x >= 3 && x < 27 then
True
else
False
color =
case cell of
Alive ->
if isName then
"fill-cyan-500"
else
"fill-pink-500"
Dead ->
"fill-neutral-800"
in
rect
[ SA.x (String.fromInt (x * cellSize))
, SA.y (String.fromInt (y * cellSize))
, SA.width (String.fromInt cellSize)
, SA.height (String.fromInt cellSize)
, SA.class color
, SE.onMouseOver (Ressurect x y)
]
[]
universeSvg : Model -> Html Msg
universeSvg model =
let
svgWidth =
String.fromInt (model.universe.width * cellSize)
svgHeight =
String.fromInt (model.universe.height * cellSize)
in
svg
[ SA.width "150"
, SA.height "150"
, SA.viewBox ("0 0 " ++ svgWidth ++ " " ++ svgHeight)
, SA.class "stroke-0"
]
(stretchUniverseThin cellToSvg model.universe)
-- UTIL
bigBang : Int -> Int -> a -> Universe a
bigBang width height value =
{ space = Array.repeat (width * height) value
, width = width
, height = height
}
stretchUniverseThin : (Int -> Int -> a -> b) -> Universe a -> List b
stretchUniverseThin f universe =
Array.toIndexedList universe.space
|> List.map (\( i, cell ) -> f (modBy universe.width i) (i // universe.width) cell)
nextGeneration : Universe Cell -> Universe Cell
nextGeneration universe =
{ universe
| space =
Array.indexedMap
(decideFateOf universe)
universe.space
}
decideFateOf : Universe Cell -> Int -> Cell -> Cell
decideFateOf u i today =
let
aliveAtoms =
countLiveAtoms i u
in
case today of
Alive ->
if aliveAtoms < 2 || aliveAtoms > 3 then
Dead
else
Alive
Dead ->
if aliveAtoms == 3 then
Alive
else
Dead
buildRelationship : Universe a -> Int -> Int -> (a -> a) -> Universe a
buildRelationship universe x y fn =
case getUniverseAt x y universe of
Just cell ->
setUniverseAt x y (fn cell) universe
Nothing ->
universe
getUniverseAt : Int -> Int -> Universe a -> Maybe a
getUniverseAt x y u =
Array.get (y * u.width + x) u.space
setUniverseAt : Int -> Int -> a -> Universe a -> Universe a
setUniverseAt x y value u =
{ u | space = Array.set (y * u.width + x) value u.space }
countLiveAtoms : Int -> Universe Cell -> Int
countLiveAtoms i universe =
let
above =
i - universe.width
below =
i + universe.width
coordinate =
[ above - 1
, above
, above + 1
, i - 1
, i + 1
, below - 1
, below
, below + 1
]
in
coordinate
|> List.filter
(\n ->
abs
(modBy universe.width n - modBy universe.width i)
<= 1
)
|> List.map (\c -> universe.space |> Array.get c)
|> List.filter (\c -> c == Just Alive)
|> List.length
invertLife : Cell -> Cell
invertLife cell =
case cell of
Alive ->
Dead
Dead ->
Alive
-19
View File
@@ -1,19 +0,0 @@
module Pages.Meet exposing (page)
import Components.Footer exposing (footerLinksToSide)
import Html
import Html.Attributes exposing (class, id)
import View exposing (View)
page : View msg
page =
{ title = "Schedule a meet with me"
, body =
[ Html.div [ class "flex items-center justify-center flex-col h-screen m-2" ]
[ Html.node "cal-com" [ id "calcom-widget", class "w-full p-2" ] []
]
, Html.div [ class "py-16" ] []
, footerLinksToSide
]
}
-20
View File
@@ -1,20 +0,0 @@
module Pages.NotFound_ exposing (page)
import Html exposing (Html)
import Html.Attributes exposing (class, href)
import Utils.Utils exposing (errorView)
import View exposing (View)
page : View msg
page =
{ title = "Not Found"
, body =
[ Html.div [ class "min-h-screen flex flex-col justify-center relative overflow-hidden" ]
[ Html.div [ class "relative w-full bg-neutral md:max-w-3xl md:mx-auto lg:max-w-4xl lg:pb-28 space-2" ]
[ errorView "Couldn't find what you are looking for. Please check back later"
, Html.a [ class "float-right bg-transparent mr-auto hover:bg-pink-600 text-cyan-500 hover:text-white rounded border py-2 px-4 border-cyan-500 mt-2", href "/" ] [ Html.text "Return to Home!" ]
]
]
]
}
-172
View File
@@ -1,172 +0,0 @@
module Pages.Pages.AboutMe exposing (Model, Msg, page)
import Components.Footer exposing (footerLinksToSide)
import Effect exposing (Effect)
import Html exposing (Html)
import Html.Attributes exposing (class, datetime, href, src)
import Http
import Page exposing (Page)
import Route exposing (Route)
import Shared
import Utils.JsonResume exposing (Education, Resume, Work, resumeDecoder)
import Utils.Utils exposing (getFormattedDate)
import View exposing (View)
import Components.Footer exposing (iconLinkToCenter)
page : Shared.Model -> Route () -> Page Model Msg
page _ _ =
Page.new
{ init = init
, update = update
, view = view
, subscriptions = subscriptions
}
-- INIT
type alias Model =
{ resume : Maybe Resume
, error : Maybe String
}
init : () -> ( Model, Effect Msg )
init () =
let
cmd : Cmd Msg
cmd =
Http.get
{ url = "/resume/resume.json"
, expect = Http.expectJson GotResume resumeDecoder
}
in
( { resume = Nothing, error = Nothing }, Effect.sendCmd cmd )
-- UPDATE
type Msg
= GotResume (Result Http.Error Resume)
update : Msg -> Model -> ( Model, Effect Msg )
update msg model =
case msg of
GotResume (Ok resume) ->
( { model | resume = Just resume }, Effect.none )
GotResume (Err err) ->
( { model | error = Just (Utils.Utils.errorToString err) }, Effect.none )
-- SUBSCRIPTIONS
subscriptions : Model -> Sub Msg
subscriptions model =
Sub.none
-- VIEW
view : Model -> View msg
view model =
{ title = "About Me"
, body =
let
experience : List Work -> Html msg
experience workList =
Html.ol [ class "relative border-l border-cyan-700" ]
(List.map
(\work ->
Html.li [ class "mb-10 ml-6 " ]
[ Html.span [ class "absolute flex items-center justify-center w-6 h-6 bg-pink-600 ring-pink-900 rounded-full -left-3 ring-8" ]
[ Html.text <| String.left 1 work.name ]
, Html.h3 [ class "flex items-center mb-1 text-xl font-semibold" ] [ Html.text <| work.position ++ " at " ++ work.name ]
, Html.time [ class "block mb-2 text font-normal leading-none text-gray-500", datetime work.startDate ]
[ Html.text <| getFormattedDate work.startDate False ++ " - " ++ getFormattedDate work.endDate False ]
, Html.p [ class "mb-4 text-base font-normal text-gray-400" ] [ Html.text work.summary ]
, Html.p [ class "mb-4 text-lg font-normal text-gray-300" ] [ Html.text work.description ]
, Html.p [ class "mb-4 text-lg font-normal text-gray-300 ml-8" ] [ listThings work.highlights ]
]
)
workList
)
education : List Education -> Html msg
education eduList =
Html.ol [ class "relative border-l border-cyan-700" ]
(List.map
(\edu ->
Html.li [ class "mb-10 ml-6" ]
[ Html.span [ class "absolute flex items-center justify-center w-6 h-6 bg-pink-600 ring-pink-900 rounded-full -left-3 ring-8" ]
[ Html.text <| String.left 1 edu.institution ]
, Html.h3 [ class "flex items-center mb-1 text-xl font-semibold" ] [ Html.text <| edu.studyType ++ " at " ++ edu.institution ]
, Html.time [ class "block mb-2 text font-normal leading-none text-gray-500", datetime edu.startDate ]
[ Html.text <| getFormattedDate edu.startDate False ++ " - " ++ getFormattedDate edu.endDate False ]
, Html.p [ class "mb-4 text-base font-normal text-gray-400" ] [ Html.text edu.area ]
]
)
eduList
)
in
case model.resume of
Just resume ->
[ Html.section []
[ Html.div [ class "text-white" ]
[ Html.div [ class "container mx-auto flex flex-col items-start xl:flex-row my-12 xl:my-24" ]
[ Html.div [ class "flex flex-col w-full sticky xl:top-36 xl:w-2/3 mt-2 xl:mt-12 px-8" ]
[ Html.img [ class "w-full h-80 object-cover mx-auto mb-4", src resume.basics.image ] []
, Html.p [ class "text-5xl lg:text-6xl 2xl:text-7xl leading-normal md:leading-relaxed" ] [ Html.text resume.basics.name ]
, Html.p [ class "lg:text-xl md:text-md text-base text-cyan-500 uppercase tracking-lppse mb-2" ] [ Html.text resume.basics.label ]
, Html.p [ class "md:text-base text-gray-50 mb-4 lg:text-xl" ] [ Html.text resume.basics.summary ]
, iconLinkToCenter
]
, Html.div [ class "flex-row" ]
[ Html.div [ class "ml-0 md:ml-12 lg:w-3/3 sticky" ]
[ Html.div [ class "container mx-auto w-full h-full" ]
[ Html.div [ class "relative wrap overflow-hidden p-10 h-full" ]
[ experience resume.work ]
]
]
, Html.div [ class "ml-0 md:ml-12 lg:w-3/3 sticky" ]
[ Html.div [ class "container mx-auto w-full h-full" ]
[ Html.h2 [ class "text-xl ml-2 text-cyan-500" ] [ Html.text "Education" ]
, Html.div [ class "relative wrap overflow-hidden p-10 h-full" ]
[ education resume.education ]
]
]
]
]
]
]
, footerLinksToSide
]
Nothing ->
[]
}
-- simply list things
listThings : List String -> Html msg
listThings things =
Html.ul []
(List.map
(\thing ->
Html.li [ class "list-disc" ] [ Html.text thing ]
)
things
)
-95
View File
@@ -1,95 +0,0 @@
module Pages.Pages.Projects exposing (Model, Msg, page)
import Dict exposing (Dict)
import Effect exposing (Effect)
import Html exposing (div, img, section)
import Html.Attributes exposing (class, src)
import Page exposing (Page)
import Route exposing (Route)
import Route.Path
import Shared
import View exposing (View)
page : Shared.Model -> Route () -> Page Model Msg
page _ _ =
Page.new
{ init = init
, update = update
, subscriptions = subscriptions
, view = view
}
-- INIT
type alias Model =
{}
init : () -> ( Model, Effect Msg )
init () =
( {}
, Effect.replaceRoute { path = Route.Path.NotFound_, query = Dict.empty, hash = Nothing }
)
-- UPDATE
type Msg
= ExampleMsgReplaceMe
update : Msg -> Model -> ( Model, Effect Msg )
update msg model =
case msg of
ExampleMsgReplaceMe ->
( model
, Effect.none
)
-- SUBSCRIPTIONS
subscriptions : Model -> Sub Msg
subscriptions _ =
Sub.none
-- VIEW
view : Model -> View Msg
view _ =
{ title = "My Projects"
, body =
[ section [ class "overflow-hidden" ]
[ div
[ class "px-5 py-2 mx-auto lg:pt-24 lg:px-32" ]
[ div [ class "flex flex-wrap -m-1 md:-m-2" ]
(List.repeat 8
(div [ class "flex flex-wrap w-1/2" ]
(List.repeat 2
(div
[ class "w-full p-1 md:p-2" ]
[ img
[ src "https://opengraph.githubassets.com/string/avinal/blowfish"
, class "block object-cover object-center w-full h-full rounded-lg"
]
[]
]
)
)
)
)
]
]
]
}
-212
View File
@@ -1,212 +0,0 @@
module Utils.Constants exposing (..)
import Array exposing (Array)
import Html exposing (Html)
type alias Link =
{ url : String
, text : String
}
type alias IconLink =
{ url : String
, icon : String
}
type alias Job msg =
{ title : String
, company : String
, from : String
, to : String
, body : Html msg
}
footerLinks : List Link
footerLinks =
[ { text = "About", url = "/pages/about-me" }
, { text = "Blog", url = "https://avinal.space/posts" }
, { text = "Projects", url = "/pages/projects" }
, { text = "GSoC", url = "https://avinal.space/posts/category/gsoc" }
]
iconLinks : List IconLink
iconLinks =
[ { url = "https://github.com/avinal", icon = "fa-brands fa-github" }
, { url = "https://www.linkedin.com/in/avinal", icon = "fa-brands fa-linkedin" }
, { url = "https://twitter.com/Avinal_", icon = "fa-brands fa-twitter" }
, { url = "mailto:ripple@avinal.space", icon = "fa-solid fa-envelope" }
, { url = "/meet", icon = "fa-solid fa-video" }
]
months : Array String
months =
Array.fromList
[ "January"
, "February"
, "March"
, "April"
, "May"
, "June"
, "July"
, "August"
, "September"
, "October"
, "November"
, "December"
]
nameMatrix : Array Int
nameMatrix =
Array.fromList
[ 0
, 1
, 1
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 1
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 1
, 1
, 0
, 0
, 1
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 1
, 1
, 1
, 1
, 1
, 0
, 1
, 0
, 0
, 0
, 1
, 0
, 1
, 0
, 1
, 1
, 1
, 0
, 0
, 1
, 1
, 1
, 0
, 0
, 1
, 1
, 0
, 0
, 1
, 0
, 1
, 0
, 0
, 0
, 1
, 0
, 1
, 0
, 1
, 0
, 0
, 1
, 0
, 1
, 0
, 1
, 0
, 0
, 1
, 1
, 0
, 0
, 1
, 0
, 0
, 1
, 0
, 1
, 0
, 0
, 1
, 0
, 1
, 0
, 0
, 1
, 0
, 1
, 0
, 1
, 0
, 0
, 1
, 1
, 0
, 0
, 1
, 0
, 0
, 0
, 1
, 0
, 0
, 0
, 1
, 0
, 1
, 0
, 0
, 1
, 0
, 1
, 1
, 1
, 1
, 0
, 1
]
-435
View File
@@ -1,435 +0,0 @@
module Utils.JsonResume exposing (..)
import Json.Decode as Decode exposing (Decoder)
import Json.Decode.Pipeline exposing (optional, required)
-- Main Resume type
type alias Resume =
{ basics : Basics
, work : List Work
, volunteer : List Volunteer
, education : List Education
, awards : List Award
, certificates : List Certificate
, publications : List Publication
, skills : List Skill
, languages : List Language
, interests : List Interest
, references : List Reference
, projects : List Project
, meta : Meta
}
-- Basics
type alias Basics =
{ name : String
, label : String
, image : String
, email : String
, phone : String
, url : String
, summary : String
, location : Location
, profiles : List Profile
}
type alias Location =
{ address : String
, postalCode : String
, city : String
, countryCode : String
, region : String
}
type alias Profile =
{ network : String
, username : String
, url : String
}
-- Work
type alias Work =
{ name : String
, location : String
, description : String
, position : String
, url : String
, startDate : String
, endDate : String
, summary : String
, highlights : List String
}
-- Volunteer
type alias Volunteer =
{ organization : String
, position : String
, url : String
, startDate : String
, endDate : String
, summary : String
, highlights : List String
}
-- Education
type alias Education =
{ institution : String
, url : String
, area : String
, studyType : String
, startDate : String
, endDate : String
, score : String
, courses : List String
}
-- Awards
type alias Award =
{ title : String
, date : String
, awarder : String
, summary : String
}
-- Certificates
type alias Certificate =
{ name : String
, date : String
, url : String
, issuer : String
}
-- Publications
type alias Publication =
{ name : String
, publisher : String
, releaseDate : String
, url : String
, summary : String
}
-- Skills
type alias Skill =
{ name : String
, level : String
, keywords : List String
}
-- Languages
type alias Language =
{ language : String
, fluency : String
}
-- Interests
type alias Interest =
{ name : String
, keywords : List String
}
-- References
type alias Reference =
{ name : String
, reference : String
}
-- Projects
type alias Project =
{ name : String
, description : String
, highlights : List String
, keywords : List String
, startDate : String
, endDate : String
, url : String
, roles : List String
, entity : String
, type_ : String
}
-- Meta
type alias Meta =
{ canonical : String
, version : String
, lastModified : String
}
-- JSON Decoders
-- Resume Decoder
resumeDecoder : Decoder Resume
resumeDecoder =
Decode.succeed Resume
|> required "basics" basicsDecoder
|> required "work" (Decode.list workDecoder)
|> optional "volunteer" (Decode.list volunteerDecoder) []
|> required "education" (Decode.list educationDecoder)
|> optional "awards" (Decode.list awardDecoder) []
|> optional "certificates" (Decode.list certificateDecoder) []
|> optional "publications" (Decode.list publicationDecoder) []
|> optional "skills" (Decode.list skillDecoder) []
|> optional "languages" (Decode.list languageDecoder) []
|> optional "interests" (Decode.list interestDecoder) []
|> optional "references" (Decode.list referenceDecoder) []
|> optional "projects" (Decode.list projectDecoder) []
|> optional "meta" metaDecoder (Meta "" "" "")
-- Basics Decoder
basicsDecoder : Decoder Basics
basicsDecoder =
Decode.succeed Basics
|> required "name" Decode.string
|> required "label" Decode.string
|> optional "image" Decode.string ""
|> required "email" Decode.string
|> optional "phone" Decode.string ""
|> required "url" Decode.string
|> required "summary" Decode.string
|> optional "location" locationDecoder (Location "" "" "" "" "")
|> optional "profiles" (Decode.list profileDecoder) []
locationDecoder : Decoder Location
locationDecoder =
Decode.succeed Location
|> optional "address" Decode.string ""
|> optional "postalCode" Decode.string ""
|> required "city" Decode.string
|> required "countryCode" Decode.string
|> optional "region" Decode.string ""
profileDecoder : Decoder Profile
profileDecoder =
Decode.succeed Profile
|> required "network" Decode.string
|> required "username" Decode.string
|> required "url" Decode.string
workDecoder : Decoder Work
workDecoder =
Decode.succeed Work
|> required "name" Decode.string
|> optional "location" Decode.string ""
|> optional "description" Decode.string ""
|> required "position" Decode.string
|> optional "url" Decode.string ""
|> required "startDate" Decode.string
|> required "endDate" Decode.string
|> required "summary" Decode.string
|> optional "highlights" (Decode.list Decode.string) []
-- Volunteer Decoder
volunteerDecoder : Decoder Volunteer
volunteerDecoder =
Decode.succeed Volunteer
|> required "organization" Decode.string
|> required "position" Decode.string
|> required "url" Decode.string
|> required "startDate" Decode.string
|> required "endDate" Decode.string
|> required "summary" Decode.string
|> optional "highlights" (Decode.list Decode.string) []
-- Education Decoder
educationDecoder : Decoder Education
educationDecoder =
Decode.succeed Education
|> required "institution" Decode.string
|> optional "url" Decode.string ""
|> required "area" Decode.string
|> required "studyType" Decode.string
|> required "startDate" Decode.string
|> required "endDate" Decode.string
|> optional "score" Decode.string ""
|> optional "courses" (Decode.list Decode.string) []
-- Award Decoder
awardDecoder : Decoder Award
awardDecoder =
Decode.succeed Award
|> required "title" Decode.string
|> required "date" Decode.string
|> required "awarder" Decode.string
|> required "summary" Decode.string
-- Certificate Decoder
certificateDecoder : Decoder Certificate
certificateDecoder =
Decode.succeed Certificate
|> required "name" Decode.string
|> required "date" Decode.string
|> required "url" Decode.string
|> required "issuer" Decode.string
-- Publication Decoder
publicationDecoder : Decoder Publication
publicationDecoder =
Decode.succeed Publication
|> required "name" Decode.string
|> required "publisher" Decode.string
|> required "releaseDate" Decode.string
|> required "url" Decode.string
|> required "summary" Decode.string
-- Skill Decoder
skillDecoder : Decoder Skill
skillDecoder =
Decode.succeed Skill
|> required "name" Decode.string
|> optional "level" Decode.string ""
|> optional "keywords" (Decode.list Decode.string) []
-- Language Decoder
languageDecoder : Decoder Language
languageDecoder =
Decode.succeed Language
|> required "language" Decode.string
|> required "fluency" Decode.string
-- Interest Decoder
interestDecoder : Decoder Interest
interestDecoder =
Decode.succeed Interest
|> required "name" Decode.string
|> required "keywords" (Decode.list Decode.string)
-- Reference Decoder
referenceDecoder : Decoder Reference
referenceDecoder =
Decode.succeed Reference
|> required "name" Decode.string
|> required "reference" Decode.string
-- Project Decoder
projectDecoder : Decoder Project
projectDecoder =
Decode.succeed Project
|> required "name" Decode.string
|> required "description" Decode.string
|> optional "highlights" (Decode.list Decode.string) []
|> optional "keywords" (Decode.list Decode.string) []
|> required "startDate" Decode.string
|> optional "endDate" Decode.string ""
|> required "url" Decode.string
|> optional "roles" (Decode.list Decode.string) []
|> optional "entity" Decode.string ""
|> optional "type_" Decode.string ""
-- Meta Decoder
metaDecoder : Decoder Meta
metaDecoder =
Decode.succeed Meta
|> required "canonical" Decode.string
|> required "version" Decode.string
|> required "lastModified" Decode.string
-154
View File
@@ -1,154 +0,0 @@
module Utils.Utils exposing (..)
import Array
import Html exposing (Html)
import Html.Attributes exposing (class, href, target)
import Http exposing (Error(..))
import Parser exposing (..)
import Utils.Constants exposing (..)
type alias DateTime =
{ year : Int
, month : Int
, day : Int
, hour : Int
, minute : Int
}
getFormattedDate : String -> Bool -> String
getFormattedDate dateString time =
case Parser.run dateParser dateString of
Ok date ->
(Maybe.withDefault "Month" <| Array.get (date.month - 1) months)
++ " "
++ String.fromInt date.day
++ ", "
++ String.fromInt date.year
++ (if time then
", "
++ String.fromInt date.hour
++ ":"
++ String.fromInt date.minute
++ " IST"
else
""
)
Err _ ->
if time then
"Invalid date!!"
else
"Today"
dateParser : Parser DateTime
dateParser =
oneOf
[ succeed Tuple.pair
|= datePart
|= optional timePart
]
|> map toDateTime
datePart : Parser ( Int, Int, Int )
datePart =
succeed (\y m d -> ( y, m, d ))
|= int
|. token "-"
|. chompWhile (\c -> c == '0')
|= int
|. token "-"
|. chompWhile (\c -> c == '0')
|= int
timePart : Parser ( Int, Int )
timePart =
succeed (\h m -> ( h, m ))
|. token "T"
|. chompWhile (\c -> c == '0')
|= int
|. token ":"
|. chompWhile (\c -> c == '0')
|= int
|. chompUntilEndOr "\n"
|. end
toDateTime : ( ( Int, Int, Int ), Maybe ( Int, Int ) ) -> DateTime
toDateTime ( ( y, m, d ), maybeTime ) =
case maybeTime of
Just ( h, min ) ->
DateTime y m d h min
Nothing ->
DateTime y m d 0 0
optional : Parser a -> Parser (Maybe a)
optional parser =
oneOf
[ succeed Just |= parser
, succeed Nothing
]
categoryNtags : String -> List String -> Html msg
categoryNtags category tags =
Html.span [ class "flex flex-wrap py-6 space-x-2" ]
(Html.a [ class "px-3 py-1 m-1 rounded-sm hover:underline bg-pink-400 text-gray-900 font-bold", href <| "/posts/" ++ category, target "_blank" ]
[ Html.text category
]
:: List.map
(\tag ->
Html.i [ class "px-3 py-1 m-1 rounded-sm hover:underline bg-cyan-500 text-gray-900" ]
[ Html.text <| "#" ++ tag
]
)
tags
)
contentUrl : { category : String, post : String } -> String
contentUrl { category, post } =
"/content/posts/" ++ category ++ "/" ++ post ++ ".md"
errorToString : Http.Error -> String
errorToString error =
case error of
BadUrl url ->
"The URL " ++ url ++ " was invalid"
Timeout ->
"Unable to reach the server, try again"
NetworkError ->
"Unable to reach the server, check your network connection"
BadStatus 500 ->
"The server had a problem, try again later"
BadStatus 400 ->
"Verify your information and try again"
BadStatus _ ->
"The content can't be found, please check your url"
BadBody errorMessage ->
errorMessage
errorView : String -> Html msg
errorView error =
Html.div
[ class "border border-red-400 text-red-700 px-4 py-3 rounded relative" ]
[ Html.strong [ class "text-red-400" ] [ Html.text "Something bad has happened!" ]
, Html.br [] []
, Html.text ("Error: " ++ error)
]
-76
View File
@@ -1,76 +0,0 @@
module View exposing
( View, map
, none, fromString
, toBrowserDocument
)
{-|
@docs View, map
@docs none, fromString
@docs toBrowserDocument
-}
import Browser
import Html exposing (Html)
import Html.Attributes exposing (class)
import Route exposing (Route)
import Shared.Model
type alias View msg =
{ title : String
, body : List (Html msg)
}
{-| Used internally by Elm Land to create your application
so it works with Elm's expected `Browser.Document msg` type.
-}
toBrowserDocument :
{ shared : Shared.Model.Model
, route : Route ()
, view : View msg
}
-> Browser.Document msg
toBrowserDocument { view } =
{ title = view.title ++ " | Avinal's personal website"
, body =
[ Html.main_ [ class "container mx-auto bg-neutral-800" ]
view.body
]
}
{-| Used internally by Elm Land to connect your pages together.
-}
map : (msg1 -> msg2) -> View msg1 -> View msg2
map fn view =
{ title = view.title
, body = List.map (Html.map fn) view.body
}
{-| Used internally by Elm Land whenever transitioning between
authenticated pages.
-}
none : View msg
none =
{ title = "Avinal Kumar | Personal Website"
, body = []
}
{-| If you customize the `View` module, anytime you run `elm-land add page`,
the generated page will use this when adding your `view` function.
That way your app will compile after adding new pages, and you can see
the new page working in the web browser!
-}
fromString : String -> View msg
fromString moduleName =
{ title = moduleName
, body = []
}
-270
View File
@@ -1,270 +0,0 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
/* PrismJS 1.29.0
https://prismjs.com/download.html#themes=prism-okaidia&languages=markup+css+clike+javascript+bash+basic+brainfuck+c+cpp+cmake+diff+docker+elm+git+go+go-module+graphql+haskell+http+java+json+json5+jsonp+makefile+markdown+matlab+mermaid+powershell+protobuf+python+rest+rust+shell-session+sql+toml+typescript+vim+wasm+yaml&plugins=line-numbers+toolbar+match-braces+diff-highlight */
code[class*=language-],
pre[class*=language-] {
color: #f8f8f2;
background: 0 0;
text-shadow: 0 1px rgba(0, 0, 0, .3);
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
font-size: 1em;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.5;
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none
}
pre[class*=language-] {
padding: 1em;
margin: .5em 0;
overflow: auto;
border-radius: .3em
}
:not(pre)>code[class*=language-],
pre[class*=language-] {
background: #0b0b0b
}
:not(pre)>code[class*=language-] {
padding: .1em;
border-radius: .3em;
white-space: normal
}
.token.cdata,
.token.comment,
.token.doctype,
.token.prolog {
color: #8292a2
}
.token.punctuation {
color: #f8f8f2
}
.token.namespace {
opacity: .7
}
.token.constant,
.token.deleted,
.token.property,
.token.symbol,
.token.tag {
color: #f92672
}
.token.boolean,
.token.number {
color: #ae81ff
}
.token.attr-name,
.token.builtin,
.token.char,
.token.inserted,
.token.selector,
.token.string {
color: #a6e22e
}
.language-css .token.string,
.style .token.string,
.token.entity,
.token.operator,
.token.url,
.token.variable {
color: #f8f8f2
}
.token.atrule,
.token.attr-value,
.token.class-name,
.token.function {
color: #e6db74
}
.token.keyword {
color: #66d9ef
}
.token.important,
.token.regex {
color: #fd971f
}
.token.bold,
.token.important {
font-weight: 700
}
.token.italic {
font-style: italic
}
.token.entity {
cursor: help
}
pre[class*=language-].line-numbers {
position: relative;
padding-left: 3.8em;
counter-reset: linenumber
}
pre[class*=language-].line-numbers>code {
position: relative;
white-space: inherit
}
.line-numbers .line-numbers-rows {
position: absolute;
pointer-events: none;
top: 0;
font-size: 100%;
left: -3.8em;
width: 3em;
letter-spacing: -1px;
border-right: 1px solid #999;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none
}
.line-numbers-rows>span {
display: block;
counter-increment: linenumber
}
.line-numbers-rows>span:before {
content: counter(linenumber);
color: #999;
display: block;
padding-right: .8em;
text-align: right
}
div.code-toolbar {
position: relative
}
div.code-toolbar>.toolbar {
position: absolute;
z-index: 10;
top: .3em;
right: .2em;
transition: opacity .3s ease-in-out;
opacity: 0
}
div.code-toolbar:hover>.toolbar {
opacity: 1
}
div.code-toolbar:focus-within>.toolbar {
opacity: 1
}
div.code-toolbar>.toolbar>.toolbar-item {
display: inline-block
}
div.code-toolbar>.toolbar>.toolbar-item>a {
cursor: pointer
}
div.code-toolbar>.toolbar>.toolbar-item>button {
background: 0 0;
border: 0;
color: inherit;
font: inherit;
line-height: normal;
overflow: visible;
padding: 0;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none
}
div.code-toolbar>.toolbar>.toolbar-item>a,
div.code-toolbar>.toolbar>.toolbar-item>button,
div.code-toolbar>.toolbar>.toolbar-item>span {
color: #bbb;
font-size: .8em;
padding: 0 .5em;
background: #f5f2f0;
background: rgba(224, 224, 224, .2);
box-shadow: 0 2px 0 0 rgba(0, 0, 0, .2);
border-radius: .5em
}
div.code-toolbar>.toolbar>.toolbar-item>a:focus,
div.code-toolbar>.toolbar>.toolbar-item>a:hover,
div.code-toolbar>.toolbar>.toolbar-item>button:focus,
div.code-toolbar>.toolbar>.toolbar-item>button:hover,
div.code-toolbar>.toolbar>.toolbar-item>span:focus,
div.code-toolbar>.toolbar>.toolbar-item>span:hover {
color: inherit;
text-decoration: none
}
.token.punctuation.brace-hover,
.token.punctuation.brace-selected {
outline: solid 1px
}
.rainbow-braces .token.punctuation.brace-level-1,
.rainbow-braces .token.punctuation.brace-level-5,
.rainbow-braces .token.punctuation.brace-level-9 {
color: #e50;
opacity: 1
}
.rainbow-braces .token.punctuation.brace-level-10,
.rainbow-braces .token.punctuation.brace-level-2,
.rainbow-braces .token.punctuation.brace-level-6 {
color: #0b3;
opacity: 1
}
.rainbow-braces .token.punctuation.brace-level-11,
.rainbow-braces .token.punctuation.brace-level-3,
.rainbow-braces .token.punctuation.brace-level-7 {
color: #26f;
opacity: 1
}
.rainbow-braces .token.punctuation.brace-level-12,
.rainbow-braces .token.punctuation.brace-level-4,
.rainbow-braces .token.punctuation.brace-level-8 {
color: #e0e;
opacity: 1
}
pre.diff-highlight>code .token.deleted:not(.prefix),
pre>code.diff-highlight .token.deleted:not(.prefix) {
background-color: rgba(255, 0, 0, .1);
color: inherit;
display: block
}
pre.diff-highlight>code .token.inserted:not(.prefix),
pre>code.diff-highlight .token.inserted:not(.prefix) {
background-color: rgba(0, 255, 128, .1);
color: inherit;
display: block
}
-3
View File
@@ -1,3 +0,0 @@
import "./web-components/Calcom.js";
export const onReady = ({ app, env }) => { };
-55
View File
@@ -1,55 +0,0 @@
customElements.define(
"cal-com",
class extends HTMLElement {
constructor() {
super();
}
connectedCallback() {
(function (C, A, L) {
let p = function (a, ar) {
a.q.push(ar);
};
let d = C.document;
C.Cal =
C.Cal ||
function () {
let cal = C.Cal;
let ar = arguments;
if (!cal.loaded) {
cal.ns = {};
cal.q = cal.q || [];
d.head.appendChild(d.createElement("script")).src = A;
cal.loaded = true;
}
if (ar[0] === L) {
const api = function () {
p(api, arguments);
};
const namespace = ar[1];
api.q = api.q || [];
typeof namespace === "string"
? (cal.ns[namespace] = api) && p(api, ar)
: p(cal, ar);
return;
}
p(cal, ar);
};
})(window, "https://app.cal.com/embed/embed.js", "init");
Cal("init", { origin: "https://app.cal.com" });
Cal("inline", {
elementOrSelector: "#calcom-widget",
calLink: "avinal",
});
Cal("ui", {
theme: "dark",
styles: {
branding: { brandColor: "#009fb1" },
},
hideEventTypeDetails: false,
});
console.log("These errors are not produced by the Elm app :)");
}
}
);

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 1.3 MiB

Before

Width:  |  Height:  |  Size: 938 KiB

After

Width:  |  Height:  |  Size: 938 KiB

Before

Width:  |  Height:  |  Size: 6.6 MiB

After

Width:  |  Height:  |  Size: 6.6 MiB

Before

Width:  |  Height:  |  Size: 1.4 MiB

After

Width:  |  Height:  |  Size: 1.4 MiB

Before

Width:  |  Height:  |  Size: 95 KiB

After

Width:  |  Height:  |  Size: 95 KiB

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

Before

Width:  |  Height:  |  Size: 721 KiB

After

Width:  |  Height:  |  Size: 721 KiB

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 53 KiB

Before

Width:  |  Height:  |  Size: 92 KiB

After

Width:  |  Height:  |  Size: 92 KiB

Before

Width:  |  Height:  |  Size: 105 KiB

After

Width:  |  Height:  |  Size: 105 KiB

Before

Width:  |  Height:  |  Size: 170 KiB

After

Width:  |  Height:  |  Size: 170 KiB

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Before

Width:  |  Height:  |  Size: 521 KiB

After

Width:  |  Height:  |  Size: 521 KiB

Some files were not shown because too many files have changed in this diff Show More