1
0
mirror of https://github.com/avinal/avinal.github.io.git synced 2026-07-04 15:50:08 +05:30

2 Commits

Author SHA1 Message Date
avinal 98419ec3b9 reduce image size
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>

rh-pre-commit.version: 2.2.0
rh-pre-commit.check-secrets: ENABLED
2024-03-31 11:27:36 +05:30
avinal d3e9866ff7 update website
Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>

rh-pre-commit.version: 2.2.0
rh-pre-commit.check-secrets: ENABLED
2024-03-31 11:10:43 +05:30
76 changed files with 1899 additions and 1986 deletions
+1 -1
View File
@@ -29,7 +29,7 @@ jobs:
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: '0.134.3'
hugo-version: '0.124.1'
extended: true
- name: Install elm-land and node packages
run: npm install
-2
View File
@@ -9,5 +9,3 @@
/temp
/blog/public
/blog/node_modules
.idea
.vscode
-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.
+1 -5
View File
@@ -1838,8 +1838,4 @@ video {
.lg\:pb-28 {
padding-bottom: 7rem;
}
}
.highlight pre {
padding: 1em;
}
}
+13
View File
@@ -6,3 +6,16 @@ window.remark_config = {
no_footer: true,
};
!(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);
@@ -1,166 +0,0 @@
---
category: article
date: 2024-11-30T23:47:00
description: Plant your lilies, and let them teach you how to grow.
image: /images/soul-lily.webp
tags:
- Lily
- Despair
- Patience
- Gardening
- Plant
- Heart
title: How to grow Lilies?
---
Lilies, they say, are symbols of peace. But peace is not given; it is cultivated. Lilies demand
effort, patience, and faith - a willingness to confront the barren soil and nurture it back to life.
What follows is a guide to growing Lilies and a journey into a soul's quiet reckoning with despair.
## What Once Was and Will be Again
The garden was barren, its silence oppressive. The earth, dry and unyielding, clung stubbornly to
its lifelessness as though it had forgotten how to nurture, how to hope. It stood as a monument to
neglect, an expanse of quiet despair that seemed to whisper, Nothing will ever grow here again.
And yet, something stirred - a faint whisper beneath the desolation, an inkling that even the most
forsaken soil might still hold secrets of renewal. It was not certainty but a quiet rebellion
against despair, a defiant act of belief. The decision to grow lilies was made not with confidence
but with trembling hands, as if planting these flowers might coax life back into the hollow spaces
of the heart.
## From Ashes, We Rise
To grow lilies, one must first break the earth. Not gently, but with purpose—plunging the spade into
the hardened crust, forcing it to yield. Each strike dislodges fragments of the past: shards of what
was once beautiful, tangled roots of pain buried so deep they have become part of the soil.
The work is relentless. The ground resists, clutching its dead weight as though afraid of what might
take its place. But with each motion, the soil begins to soften. The air fills with the earthy scent
of transformation, a quiet promise that the past does not have to dictate the future.
This is where the lilies begin—not with planting, but with clearing. The garden must first be
emptied of its grief to make room for something new. It is an act of defiance and of hope, to
believe that this barren soil can one day cradle life again.
## Between a Rock and a Lily
The bulbs are unremarkable, their appearance betraying nothing of what they might become. Holding
them feels strange, as if they are too fragile to survive. And yet, there is a quiet power within
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.
## Tend the Flame, Not the Ash
The lilies require consistency. The soil must be tended to every day, watered with steady hands.
Some days, the water feels heavy in your palms, as if the weight of the act might be too much to
bear. But you do it anyway, knowing that without this care, the lilies cannot thrive.
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.*
## This Too Shall Bloom
One day, the soil breaks open - not with a flourish, but with the quietest of gestures. A tiny green
sprout emerges, barely noticeable, a sliver of life against the vastness of the earth.
To the untrained eye, it is nothing. To you, it is everything. This fragile sprout is proof that
something is happening beneath the surface, that your labor was not in vain. It is the first sign of
life returning, the first whisper of hope finding its voice.
But the sprout is not strong. It bends with the wind, threatened by the weight of even a single
raindrop. Your instinct may be to shield it, to protect it from every possible harm. But lilies do
not grow in safety. They grow in resilience.
![Glimpse of the Lilies](/images/growing-lilies.jpg)
## The Idea is Not to Abandon Ever...Never
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
drought stretches on, you water the soil with your own tears if you must.
Each act, no matter how small, is a promise to the lilies: *I will not abandon you*.
## Bloom Where None Thought Possible
And then, when you least expect it, the bloom arrives. It begins as a tightly closed bud, hesitant
to reveal itself. Slowly, it unfurls, each petal a story of quiet perseverance. The bloom is
breathtaking, not for its extravagance, but for its purity.
Its beauty is unlike anything you imagined. It is not extravagant or loud, but it holds a quiet
majesty. The petals, soft and delicate, seem to hum with a silent strength. This bloom is not just a
flower—it is the culmination of every act of care, every moment of faith, every drop of water given
when it felt like too much.
The bloom reminds you that peace is not a permanent state but a transient gift. It must be cherished
in its moment, for its impermanence is part of its beauty.
## The Most Dangerous Thing About Me
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.
## Faith Buried, Faith Unfurled
To grow lilies is to embark on a journey of transformation. It is not about the flowers themselves
but about what they symbolize—a return to life, a reclaiming of hope. The barren garden, once a
place of despair, becomes a sanctuary.
The lilies do not erase the struggles that came before them. The soil still bears the scars of its
past, and the storms will come again. But the garden is no longer defined by its emptiness. It is
defined by its capacity to grow.
And so the lilies teach you their final lesson: Growth is not a destination but a process. It is a
daily choice to clear the debris, plant the bulbs, and tend to the garden—even when it feels like
nothing is happening. It is a faith that, with time and care, the lilies will bloom again.
## This is not my Recipe
I didn't write this. Or maybe I did. But I don't remember planting these thoughts. They feel
foreign, like letters rearranged while I wasn't looking, like whispers heard through the hum of the
wind.
I think they've always been here, whispering just below the surface, tugging at my hands when I
wasn't looking. They know things about me that I haven't told anyone. Things I've hidden. Things
I've forgotten.
Do you feel it too? The hum beneath the words, the tremor that isn't mine? It's as if the garden
remembers something I don't. It isn't just soil. It's memory. It's pain. It's despair. It's rebirth.
I wrote this, but I didn't write this. These aren't my words. But they're mine now, whether I wanted
them or not.
## Meet my Lilies
And finally meet my most beautiful lilies. I have named them **Blood Demon Lily** and **Light Mode
Lily**.
![My Lilies](/images/my-lilies.jpg)
Plant your lilies, and let them teach you how to grow.
@@ -1,231 +0,0 @@
---
category: blogs
date: 2024-06-07T02:47:00
description: In January, I started switching to terminal-based tools and just
recently, I was able to use my terminal for most of my development work.
This blog highlights what tools I am using and for what purposes.
image: /images/dog-using-terminal.jpg
tags:
- terminal
- zellij
- neovim
- tmux
- zoxide
- lazygit
- fzf
- atuin
- alacritty
- starship
- toolbox
- toolbx
- gh
- zsh
- oh-my-zsh
- cli
- stow
title: "Echoes from the Shell: The Tools That Talk Back"
---
I started programming on a Windows machine about 6 years ago. I had just joined
college and had little clue about what tools to use and where to start. Slowly
I learnt new things and knowing more tools from friends, seniors, blogs and
YouTube. One thing was pretty common, almost everyone was recommending a Linux
based OS. I wasn't completely ready to switch, so I started using WSL2. WSL2
with Visual Studio Code were my daily driver for everything programming for
next 2.5 years.
## Linux loading
I got selected into Google Summer of Code in 2021 and the project I was
contributing to runs solely on Linux. So I finally left Windows and started
using Ubuntu. I was also a part of GLUG (GNU/Linux Users Group) in my college,
and that was one of the factors that motivated me to move. I used Ubuntu and
VS Code for next 1 year.
The next significant change to my setup came in 2022 January when I joined Red Hat
as an Intern. And the first task given to me was "Remove everything on your
ThinkPad and install Fedora". I used it for few months and then I switched to
Fedora on my personal laptop as well. After using Fedora for 2.5 years now, I
want to say Fedora is simply an excellent choice for students and developers
alike (until you intend to use Arch and burn the world).
## My current setup
![Glimpse into the terminal](/images/terminal-workspace.png)
*Note: Open the image in a new tab for better viewing.*
Currently, I am using Fedora 40 with Sway Window Manager and tons of terminal
based tools. Just to be clear, I am not a keyboard nerd, but it does get my
work done faster and non-intrusively. I use a mouse for a fair share of my work
(I own [Logitech MX Master 3s](https://avinal.space/posts/blogs/configuring-logitech-mouse-on-fedora/)).
I will now be explaining what tools I use and why I prefer them. You can
get additional information about them by simply an internet search as they are pretty
famous.
This is not a blog about replicating the exact setup. So I will omit the
obvious tools, i.e. ZSH, plugins etc. Rather, I will enlist the major tools.
I am going to divide my tools in few categories:
- Tools I use for development
- Enhancing Terminal capabilities
- Miscellaneous
## Tools I use for development
This will be a trivial section, there are thousands of articles and videos
on the internet that cover this topic. I am just going to add my two paise.
### Neovim
Well, I know. You are going to say "yeah, expected". But IIWII. I started using
Neovim as my primary development tool in January this year. It was a little hard
to get used to it, but once I got familiar it feels like a breeze. I switched
from VS Code because of how bloated it is getting. I do not want a superfast
editor with outstanding benchmarks and awesome features and customizability.
Those are secondary, but most of all, I don't like being distracted. With all the
new things getting into VS Code it felt like, just too many features than I
need. I totally love VS Code, it was my daily drive for 5 years but
I felt I needed something minimal, and minimal it is.
I did some hopping from one config to another in the last 5 months and finally, I
decided to configure it myself using kickstart repository and it works better
than ever. I am still learning how to get most out of it.
- [Neovim](https://neovim.io/)
- [kickstart-modular.nvim](https://github.com/dam9000/kickstart-modular.nvim)
- [Carbonfox from Nightfox.nvim theme](https://github.com/EdenEast/nightfox.nvim?tab=readme-ov-file#carbonfox)
- [My configuration](https://github.com/avinal/dotfiles/tree/main/.config/nvim)
### Lazygit
When I moved from VS Code to Neovim, the one thing I missed most was a GUI
git extension. Although I use git CLI for most of my VCS work, but having a
visual display is helpful, especially for browsing changes and going through
commit history. VS Code git extension is a great tool and lazygit almost
replaces that for me. It has exactly those features that I generally use.
Plus it is configurable, the default configuration is more than enough for
most including me.
- [Lazygit](https://github.com/jesseduffield/lazygit)
### GitHub CLI
Many people have mixed opinion about this tool. For me, it works best for
what I generally do. And no, it doesn't replace git for me, I treat it like
a snippet tool that does few things with minimal effort, which would otherwise
take multiple commands using git. Additionally, most of the development work
I do go to GitHub, so it helps with that as well.
I mostly use it to clone, gist, creating pull requests, navigating issues,
checking out pull request branches, creating new repositories, and sometimes
for getting workflow status/logs. I strongly recommend it if you are eager to do
more from your terminal.
- [GitHub CLI](https://cli.github.com/)
## Enhancing Terminal capabilities
This category is focused on supercharging the default terminal with advanced
capabilities like better prompt, multiplexing, configurable layouts, session
management etc.
### Alacritty
What is wrong with Gnome terminal? Nothing. It is fantastic and I still use it
for many tasks. When it comes to configuring your terminal and actually being
able to reuse your configuration across machines, alacritty simply stands out.
It has tons of configurations and I loved using it, so I switched to it.
- [Alacritty](https://alacritty.org/)
- [GitHub Monaspace Argon font](https://monaspace.githubnext.com/)
- [My configuration](https://github.com/avinal/dotfiles/blob/main/.config/alacritty/alacritty.toml)
### Zellij
This one is interesting and new. I started using tmux as most people do when
they want to increase the density of work in a single terminal. It works and
is configurable as well. But there are some shortcomings for tmux. It does not
let you save a layout and the session management is basic. If you restart, you
will probably lose your setup.
Zellij address these problems and includes many new features on top of it.
You can create a layout in advance and also define what commands should be run
on start. There is a native plugin system and you can write plugins in most
languages that compile to WebAssembly. The configuration is human-friendly
and you can have multiple configuration files.
Initially, most users face issues with zellij default key bindings because of
their conflicts with Neovim. I choose to use different leader keys for
different tools. Here is the setup I use after getting recommendation on Reddit.
- Neovim: Ctrl
- Sway WM: OS Key/Command/Win Key
- Zellij: Alt
I also heavily modified the default key bindings as I saw fit. The tool is in
active development with numerous features planned.
- [Zellij](https://zellij.dev/)
- [Zellij vs Tmux](https://github.com/zellij-org/zellij/discussions/1701#discussioncomment-3517152)
- [My configuration](https://github.com/avinal/dotfiles/tree/main/.config/zellij)
### Atuin
I have covered Atuin before in my [last post](https://avinal.space/posts/raspi/everything-on-my-pi/#atuin).
So this will be a brief mention here. Atuin helps you sync your command
history across machines and provides excellent filtering and retrieval. If you
need a backup of your command history, Atuin is a way to go.
- [Atuin](https://atuin.sh/)
- [My configuration](https://github.com/avinal/dotfiles/blob/main/.config/atuin/config.toml)
## Miscellaneous
This section focuses on the tools that aren't very common but they rather
are unique in their own way, and you can get extra superpowers.
### Toolbx
This is more like a virtual terminal environment where you can install tools and
packages without adding them to the host OS. For example, if you are testing
some software, or want to build a project but don't want to install in your
machine. Or even having multiple independent environment and multiple distros
to develop your projects. I find this tool very useful. If you have such use
cases, give it a try.
- [Toolbx](https://containertoolbx.org/)
### Fzf
fzf is a companion tool that provides you fuzzy finding capabilities for a lot of
common CLI tools. You can use it in a plethora of ways and the integration with
tools are countless. It also comes with an interactive interface. This is a tool
which I want to say, you will understand only when you use it.
- [fzf](https://junegunn.github.io/fzf/)
### zoxide
zoxide brands itself as a smarter cd command, and this is precisely what it does.
It remembers where you often go and helps you get there faster next time. It
uses an impressive algorithm internally to rank the suggestions based on your
use.
- [zoxide](https://github.com/ajeetdsouza/zoxide)
## Echos
Here is the list of all other tools and plugins I didn't discuss, but they
are a useful part of my daily work.
- [Zsh](https://www.zsh.org/)
- [Oh My Zsh](https://ohmyz.sh/)
- [Starship](https://starship.rs/)
- [telescope.nvim](https://github.com/nvim-telescope/telescope.nvim)
- [mason.nvim](https://github.com/williamboman/mason.nvim)
- [lazy.nvim](https://github.com/folke/lazy.nvim)
- [GNU Stow](https://www.gnu.org/software/stow/)
Please leave a comment, if you like reading this blog, or it helped you find a
good tool.
@@ -1,247 +0,0 @@
---
category: blogs
date: 2024-09-22T05:47:00
description: Privacy is just like hope. It is the quintessential human delusion,
simultaneously the source of your greatest strength and your greatest weakness.
This post outlines my switch to GrapheneOS and my experiences so far.
image: /images/grapheneos-kill-bloat.webp
tags:
- grapheneos
- privacy
- degoogle
- android
- pixel
- google
- security
title: "GrapheneOS Saga: The Privacy-Centric Midlife Crisis"
---
In **The Matrix Resurrections**, Morpheus says *Not all seek to control. Just as not all wish to be
free*. The ever-increasing cases of privacy invading technology and the number of people sprinting
to adopting them reflects the quotes in its entirety. It is true that in the modern world it is
nearly impossible to have control of your complete data. But with few changes, you can decide how
much one has access to your data. Do remember once anything is on internet, it is forever.
## My Smartphone Journey
I got my first smartphone in 2014. It
was [Samsung Galaxy Star Pro](https://www.gsmarena.com/samsung_galaxy_star_pro_s7260-5749.php), a
very basic budget smartphone with Android 4.1. I used it until mid-2019, then for a few months I
used ASUS ZenPhone Go. It belonged to my friend. This also means I have never used 3G on smartphone.
It was a direct jump from 2G to 4G.
My first good smartphone
was [Nokia 6.1 Plus](https://www.gsmarena.com/nokia_6_1_plus_(nokia_x6)-9178.php). Excellent build
quality, clean OS with decent performance. Camera quality was surprisingly excellent considering
that it had almost no AI-based processing. Nokia can be a market leader in smartphone, but it seems
either they don't care much or they aren't putting much effort. I had to leave this phone in a year
because of severe charging port issue. Other than that it is still one of my most favourite
smartphone.
Then I bought [Google Pixel 4a](https://www.gsmarena.com/google_pixel_4a-10123.php) in January of
2021. First gadget bought with my first earning. Pixel 4 and 5 series are my most favourite
smartphones still. These are ergonomic and handy phones without many bells and whistles. The design
is nice with good performance and clean OS. After these, things started going bad.
My current smartphone is [Google Pixel 7a](https://www.gsmarena.com/google_pixel_7a-12170.php)
bought in 2023. It is good, but for the price I would expect a little more. Takes excellent photos
and the performance is decent. The stock OS is unfortunately not as clean as it used to be.
## Why GrapheneOS?
Before I can explain why I choose GrapheneOS, I should explain what I need. It can vary person to
person and phone to phone. But the keywords are the same, privacy, security, performance and
control.
### What I Do Not Need on My Smartphone
This is a very opinionated list of things I do not want on my phone. This is in part inspired by
privacy and performance concerns. A lot of it comes from my way of interacting with smartphone.
- AI: It is wonderful in quantities in which wine can be enjoyed. Too much of it and the phones
behaves exactly like a drunken, too much talk but very little of it makes any sense.
- Apps I will never use: Every smartphone comes with some set of preinstalled applications. Some of
them as crucial for the phone to function normally. Some of them are useful but may have an
alternative. And others neither crucial nor useful. And on most phones you cannot even
uninstall/disable them. It makes no sense to keep two apps with same functions or apps with no
functions.
- Spyware/Malware/Adware/Bloatware: On many smartphones these are intentionally installed. OK, maybe
not the first two, but definitely the next two. Most of the Chinese smartphones are riddled with
Adware and Bloatware, probably the reason why they are so cheap. They are privacy nightmares and
eat up your performance and battery.
- Inability to control permissions: A smartphone is a huge data generator and gatherer. If wrong
entities have access to it, they may use it for nefarious purposes. One of the shocking example
is [How Facebook was able to track location using accelerometer](https://www.cpomagazine.com/data-privacy/facebooks-use-of-alternate-location-tracking-methods-to-circumvent-apple-privacy-protections-expands-to-accelerometer-data/).
So I would like to oversee what permissions each application has.
- Gimmicks: IYKYK
I still want my phone to be usable and have regular updates. I want it to perform close to what it
was designed for.
### It just makes sense
Once you are clear that what you do not want on your smartphone, GrapheneOS immediately makes sense.
I can achieve everything listed above and more. I actually researched and planned for almost a year
before I finally installed it. Now that I have done it, I think there is no going back.
## Installing using Fedora
GrapheneOS can be installed using WebUSB or via command line. Both are simple, but WebUSB is
simpler. Since Fedora is not in
the [supported OS](https://grapheneos.org/install/web#prerequisites). WebUSB may not work, for me,
it didn't. So I opened my favourite tool, the terminal and started
typing. [Installation via CLI](https://grapheneos.org/install/cli) works flawlessly as long as you
follow it step by step. There are few extra steps you might need for Fedora, that I will be
explaining here:
1. Install these packages:
```bash
sudo dnf install android-tools
```
2. Follow the official instructions up
to [OEM unlocking and booting into bootloader](https://grapheneos.org/install/cli#booting-into-the-bootloader-interface)
3. Check if fastboot can detect your device
```bash
sudo fastboot devices
```
4. After that, you can continue following the instructions. Use `sudo`.
Wait patiently, as it takes some time and there is not much interactive response. Be sure that the
process has ended successfully before you disconnect your phone.
## First Impressions
The onboarding was short and clean. No account logins, no spooky agreements to accept. Once you set
up your phone, it should feel like a minimal installation of any Linux distros, few necessaries
preinstalled apps and nothing else.
In GrapheneOS all apps are sandboxed, no matter what is its origin. They have similar permission
scopes and no app is treated as royalty. On stock Android, some Google apps have system level
access, which they absolutely don't need for function. Unlike most custom OS available, GrapheneOS
is a completely de-Googled OS. You can see a detailed
comparison [here](https://eylenburg.github.io/android_comparison.htm). This means you should be just
fine without any Google Apps at all.
## Getting It To Speed
I wanted to retain my ease of use and most of previous apps. Some of them may be privacy invading
but with newly gained superpowers, I should be able to control them. I do use a fair share of Google
Apps as well as FOSS applications.
![Fully Configured GrapheneOS - Lockscreen, HomeScreen and Apps Menu](/images/grapheneos-looks.webp)
### My daily drivers
These are everyday applications, like calendar, payment and banking apps, maps, messaging, phone,
contacts, browser, email etc. To install apps from the Play Store, you will need to install Play
Services first. This is easy, just go to the App Store and install them.
### Enhancers
There are few apps, mostly FOSS, that I use to improve my experience. In no particular order (its
alphabetic):
- [AdGuard Home Manager](https://github.com/JGeek00/adguard-home-manager): An AdGuard Home client
app, that lets me quickly control and manage my self-hosted AdGuard Home installation.
- [Aegis](https://getaegis.app/): Probably the best 2FA apps that is also FOSS. Compared to popular
options like Google Authenticator, it encrypts your token at rest, lets you import and export as
well as take encrypted backups.
- [Immich](https://immich.app/): A FOSS and self-hosted Google Photos replacement. Except editing,
it has everything you may need in a media backup app. Even more features are being added
regularly.
- [Insular](https://secure-system.gitlab.io/Insular/): I use this to enable a separate work profile
where I keep all my less used or data hungry applications. When not in use, I can just pause them,
and it saves battery as well as enhances privacy.
- [Lawnchair](https://lawnchair.app/): To be frank, I am unable to find a launcher that fits to my
liking. My favorite launcher is still the OP Nokia Lumia launcher. Lawnchair is a Pixel launcher
replacement with a lot more features and customizations. I use it
with [Arcticons](https://arcticons.com/).
- [ServerBox](https://github.com/LollipopKit/flutter_server_box): I use this to keep an eye on my
servers and even make small updates via ssh.
- [Tailscale](https://tailscale.com/): Three of the apps mentioned above will be unusable if not for
Tailscale. In layman terms, it is a p2p VPN that tricks all the participating devices like they
are connected in same local network. So you can access your remote servers and data without ever
exposing them to internet. Additionally, it also redirects your DNS request to a custom server (
like AdGuard Home) or even make one of your devices act as exit node.
## Things I Loved
New OS, new experiences and new things to love. There are many things that made me say _**Wow**_,
but I will point out the most significant changes in my smartphone experience.
### Game-changers
- Google Pixels are known for churning out good performance out of comparatively less powerful
hardware. With recent AI outbreak, Google and other organizations are putting too much of it even
in places, that makes little sense. GrapheneOS is clean from all that bloat, not even the
Assistant. If I really need it, I can install specific applications.
- Battery life improvement is the biggest visible change I observed. I am now getting around 25%
more screen time than before with similar uses.
- I can now decide what permission each app has as well as stop their access to network completely
without relying on a third party app. You also get fine control for your location data as well as
activity indicator.
- As I mention in my first point, Pixels have good performance, but GrapheneOS takes it to another
level. My phone feels significantly faster. This should be expected since you no longer have bloat
apps running in background.
### Little things
- You can archive any installed application instead of removing them. This makes sure that you don't
have to set up again but still get rid of them in practice.
- Ability to install apps in user profiles without any App Store installation.
- The usual things, you can see the complete list of improvements/new things
on [GrapheneOS features](https://grapheneos.org/features) page.
## Things That Went Wrong
Yes, not everything is great with GrapheneOS. There were some downsides, some failures as well loss
of data. I backed up all my data before making the switch and still got a few things wrong.
### Horribly Wrong :(
- I lost my WhatsApp data completely. I am still a bit sad about it. This happened because WhatsApp
couldn't detect active backup on my Google Drive and decided to start new. This is a scary example
of how dependent everything is on Google, if WhatsApp had allowed independent backup, this would
not have happened. I did find a probable fix, but after I lost my data. You can use _Transfer
Chats_ feature of WhatsApp to transfer between phones. But you need two phones with latest
versions of WhatsApp, so not possible for me anyway. There was a lot of not-important data, few
important and some which I wanted to remove but couldn't. So the destiny decided it for me, it
seems.
- GrapheneOS doesn't have a great backup solution. It uses an implementation of Seedvault, which is
secure but not reliable at all. Most of the time it simply doesn't work. Except USB backup,
nothing worked for me. That also means you have to regularly take manual backup.
### Manageable
- All banking apps worked, except PayTM. After some research, I found that it is not GrapheneOS
fault. It seems PayTM hardcoded application used for webview. The usual _Android System Webview_
is not available neither installable on GrapheneOS since it uses its own implementation. It is
okay, because I always use a different payment app.
- Getting location to work was a little tricky. The first few attempts completely failed. GrapheneOS
uses something called _Reroute location request to OS_ which limits when and how Play Services can
access location. A great privacy feature, but it took some time to work.
## Things I am missing
- Reliable backups would be a major missing. The GrapheneOS seems to be working on it, but it may
take time.
- Some of the features are not latest compared to Stock Android or even completely missing, i.e.
Wallpaper Chooser, Extreme Battery Saver, Digital Wellbeing, pausing of apps. I understand that
these may not be a priority for the team, so it's okay.
- I loved _Now Playing_ feature on Pixel, it is not available.
- Although GrapheneOS is extremely minimal, there are still apps you cannot remove. The preinstalled
apps for dialer, contacts and cameras are simple and do the work, but the UI is pretty outdated,
and they do not have many features. So I installed alternatives, but I cannot remove them. Some of
them can be disabled though.
- There are few UI issues that need fixing. Not anything critical, but sometimes it bothers.
## References
- [GrapheneOS Website](https://grapheneos.org/)
- [Comparison of Android ROMs](https://eylenburg.github.io/android_comparison.htm)
- [Installation using Fedora - Forum](https://discuss.grapheneos.org/d/359-fedora-to-install-grapheneos/4)
- [The Matrix Resurrections](https://www.imdb.com/title/tt10838180/)
+12 -131
View File
@@ -1,142 +1,23 @@
---
title: Everything on my Pi
date: 2024-04-29T10:47:00
date: 2023-10-01T10:47:00
category: raspi
image: /images/big-raspberry-pi.webp
description: A list of everything I have installed on my Raspberry Pi 5 and 4B.
tags:
- raspi
- linux
- pi
- raspbian
- debian
- ubuntu
- server
- docker
tags: [raspi, linux, pi, raspbian, debian, ubuntu, server, docker]
image: "/images/big-raspberry-pi.webp"
description: "A list of everything I have installed on my Raspberry Pi 4B."
---
I always wanted to have my self-hosted server when I was in college. Never had enough money to do much until recently.
So after I got my first job, I have invested moderately (heavily ;)) in gadgets and stuff. And one of my most prized
possession is my Raspberry Pi 4 and Raspberry Pi 5. I have been using it for a while now, and I have installed many
useful things on both of them. So I thought I would share it with everyone. This is a list of everything I have on my
Pi.
I always wanted to have my self-hosted server when I was in college. Never had enough money to do much
until recently. So after I got my first job, I have invested moderately (heavily actually ;)) in gadgets and stuff. And one
of my most prized possession is my Raspberry Pi 4. I have been using it for a while now, and I have
installed many useful things on it. So I thought I would share it with everyone. This is a list of
everything I have on my Pi.
## Hardware and Specifications
- [Raspberry Pi 5 8GB Model](https://www.raspberrypi.com/products/raspberry-pi-5/)
- [Raspberry Pi 4B 8GB Model](https://www.raspberrypi.org/products/raspberry-pi-4-model-b/)
- [Samsung 64GB EVO Plus microSDXC U1 Class 10](https://www.samsung.com/us/computing/memory-storage/memory-cards/evo-plus---adapter-microsdxc-64gb-mb-mc64ka-am/)
- [Raspberry Pi 15W USB-C Power Supply](https://www.raspberrypi.com/products/type-c-power-supply/)
- [Raspberry Pi 27W USB-C Power Supply](https://www.raspberrypi.com/products/27w-power-supply/)
- [Samsung SSD 970 EVO Plus 500GB](https://www.samsung.com/us/computing/memory-storage/solid-state-drives/ssd-970-evo-plus-nvme-m-2-500gb-mz-v7s500b-am/)
- [WD Blue SA510 SATA SSD M.2 2280](https://www.westerndigital.com/en-in/products/internal-drives/wd-blue-sa510-sata-m-2-ssd?sku=WDS500G3B0B)
- [Pimoroni NVMe Base for Raspberry Pi 5](https://shop.pimoroni.com/products/nvme-base?variant=41219587178579)
- [PiBOX NVMe SSD Enclosure](https://pibox.in/product/nvme-m2-enclosure-pibox-india-nvme-ssd-enclosure-usb-3-2-10gbps-tool-free-m-2-nvme-case-pci-e-nvme-reader-usb-c-supports-m-bm-keys-2230-2242-2260-2280-ssds-powerful-jm583-chipset/)
- [Rpi shop Raspberry pi 4 case Model B Acrylic case with Fan + heatsink Included](https://amzn.eu/d/8vvwkfg)
I already had a good quality ethernet cables and micro SD cards lying around. You may ask if I am using SSD then why use
a SD Card. The simple answer is that I am using an SSD for storing everything, but all the OS functions are still run on
the SD card. In an unlikely event, I can just pull out the SSD and plug it in a different machine to access my data.
## Applications I am hosting
I won't be going into many details about my configurations in this post. I will probably cover them in separate posts.
Here I will put a list of all the applications I am hosting and what I use them for.
I am using [Tailscale](https://tailscale.com/) to connect to my servers. They are locked down for access without
Tailscale network. There is an open source alternative called [Headscale](https://github.com/juanfont/headscale) as
well, but I haven't given much though of self-hosting them yet. For server management I am
using [RunTipi](https://runtipi.io/). It uses docker compose to manage all application install.
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
easy, and you can install clients on Android and iOS. You can also use a CLI import tool to upload all your media
easily. You get most of the Google Photos feature expect the editing tools. The project is in active development and the
feature set is increasing day-by-day. You can see a comparision with other FOSS
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
applications but either they are too [complex](https://www.firefly-iii.org/) or paid. If you still decide to use them
most of them don't fit well with Indian users, simply because they were not planned with such users in mind. Nothing
wrong there but mindset and habits of users matters a lot in such kind of applications. This application became my
immediate favorite once I installed. There are many thing this application gets right. First of them is the ease to
use UI and use of India specific terms and inspired from Indian spending habits. There is a bit of learning curve since
this application builds on top of [Plain Text Accouting](https://plaintextaccounting.org/), but it starts making sense
once you learn it. The developer is an experienced Software engineer from India. This will work for most of the world
but for Indian users this is a must-have if you are looking for such application. I wish it can have an android app as
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
personal use it was easy to set up. It has all the necessary features but is not bloated. The UI is good and it also
supports CalDAV. An Android application is still in progress but you can utilize CardDAV with applications
like [DavX5](https://www.davx5.com/) or [Tasks.org](https://tasks.org/). You can also create teams and have
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
Atuin comes in. Atuin replaces your existing shell history with a SQLite database, and records additional context for
your commands. Additionally, it provides optional and fully encrypted synchronisation of your history between machines,
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,
CI/CD, team collaboration etc. I have not been actively using it. But I plan to host my personal projects here.
### 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
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
a command line application or as a web application. This application is distributed as a single binary, which means it
can be installed and used easily. There is a third party Android app as well. You can get
it [here](https://f-droid.org/en/packages/com.desarrollodroide.pagekeeper/).
## What is missing
I am still searching apps for a general purpose file server and ebook management. A lot of people have suggested and I
have also tried Nextcloud for file storage. I also believe it is the best open source alternative, but deep down it
feels laggy and too much bloated for personal use. I would prefer something very minimal that solely works as a file
server and explore and nothing else. Similarly, with ebooks, Calibre is good, but it feels outdated.
If you do have some great suggestions, please put them in comments down below. You can use GitHub sign in or put an
anonymous comment.
I already had a good quality ethernet cable, so I didn't have to buy one.
-15
View File
@@ -43,18 +43,3 @@ taxonomies:
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
+6 -2
View File
@@ -1,6 +1,6 @@
{{ define "main" }}
<div
class="prose prose-invert mx-auto prose-lg prose-a:decoration-cyan-500 hover:prose-a:decoration-pink-500 text-white">
class="prose prose-invert mx-auto lg: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>
@@ -34,10 +34,12 @@
{{ end }}
<p> {{ .Summary | truncate 250 }}</p>
</a>
<a href="" target="_blank">
<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>
</a>
</div>
</div>
{{ end }}
@@ -65,14 +67,16 @@
<p> {{ .Summary | truncate 150 }}</p>
</a>
<a href="" target="_blank">
<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>
</a>
</div>
</div>
{{ end }}
</div>
</div>
</section>
{{ end }}
{{ end }}
+2 -2
View File
@@ -2,7 +2,7 @@
<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="prose prose-invert mx-auto lg: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" . }}
@@ -29,4 +29,4 @@
{{ partial "comments.html" . (dict "taxonomy" "tags" "page" .) }}
</div>
</div>
{{ end }}
{{ end }}
+1 -18
View File
@@ -1,18 +1 @@
<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>
<div id="remark42" class="md:p-4 mb-16"></div>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 938 KiB

After

Width:  |  Height:  |  Size: 952 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 185 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 598 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 275 KiB

After

Width:  |  Height:  |  Size: 8.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 540 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 MiB

After

Width:  |  Height:  |  Size: 2.4 MiB

+1 -1
View File
@@ -13,4 +13,4 @@
# status = 200
[build.environment]
HUGO_VERSION = "0.134.3"
HUGO_VERSION = "0.124.1"
+1663 -1140
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -1,10 +1,10 @@
{
"devDependencies": {
"@tailwindcss/typography": "^0.5.8",
"elm-land": "^0.20.1",
"elm-land": "^0.19.5",
"tailwindcss": "^3.2.4"
},
"dependencies": {
"npm": "^10.6.0"
"npm": "^9.3.1"
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 689 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 687 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 486 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 318 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 676 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 488 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 424 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 869 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 486 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

+96 -1
View File
@@ -1 +1,96 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="65" height="60" shape-rendering="crispEdges"><style type="text/css">@keyframes col{0%{fill:#ee67a4}12.5%{fill:violet}25%{fill:indigo}37.5%{fill:#00f}50%{fill:#35beb8}62.5%{fill:green}75%{fill:#ff0}87.5%{fill:orange}}@keyframes rcol{0%{fill:#35beb8}12.5%{fill:#00f}25%{fill:indigo}37.5%{fill:violet}50%{fill:#ee67a4}62.5%{fill:red}75%{fill:orange}87.5%{fill:#ff0}}.color{-webkit-animation:col 300s linear infinite;-moz-animation:col 300s linear infinite;-o-animation:col 300s linear infinite;animation:col 300s linear infinite}.rcolor{-webkit-animation:rcol 300s linear infinite;-moz-animation:rcol 300s linear infinite;-o-animation:rcol 300s linear infinite;animation:rcol 300s linear infinite}</style><symbol id="logo" viewBox="0 -60 65 60"><path d="M60-60H0V0h60z" class="st0 color"/><path d="M60-41h-5v10h5z" class="st1"/><path d="M65-41h-5v10h5z" class="st2 rcolor"/></symbol><use id="XMLID_14_" width="65" height="60" y="-60" overflow="visible" transform="scale(1 -1)" xlink:href="#logo"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="65" height="60"
shape-rendering="crispEdges"><style type="text/css">
.color {
-webkit-animation: col 300s linear infinite;
-moz-animation: col 300s linear infinite;
-o-animation: col 300s linear infinite;
animation: col 300s linear infinite;
}
@keyframes col {
0% {
fill: #EE67A4;
}
12.5% {
fill: violet;
}
25% {
fill: indigo;
}
37.5% {
fill: blue;
}
50% {
fill: #35BEB8
}
62.5% {
fill: green;
}
75% {
fill: yellow;
}
87.5% {
fill: orange;
}
100% {
fill: red;
}
}
.rcolor {
-webkit-animation: rcol 300s linear infinite;
-moz-animation: rcol 300s linear infinite;
-o-animation: rcol 300s linear infinite;
animation: rcol 300s linear infinite;
}
@keyframes rcol {
0% {
fill: #35BEB8;
}
12.5% {
fill: blue;
}
25% {
fill: indigo;
}
37.5% {
fill: violet;
}
50% {
fill: #EE67A4;
}
62.5% {
fill: red;
}
75% {
fill: orange;
}
87.5% {
fill: yellow;
}
100% {
fill: green;
}
}
</style><symbol id="logo" viewBox="0 -60 65 60"><path class="st0 color" d="M60-60H0V0h60z" /><path class="st1" d="M60-41h-5v10h5z" /><path class="st2 rcolor" d="M65-41h-5v10h5z" /></symbol><use xlink:href="#logo" width="65" height="60" id="XMLID_14_" y="-60" transform="scale(1 -1)" overflow="visible" /></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

+5 -1
View File
@@ -1 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="65" height="60" shape-rendering="crispEdges"><style type="text/css">.st0{fill:#ee67a4}.st1{fill:#231f20}.st2{fill:#35beb8}</style><symbol id="logo" viewBox="0 -60 65 60"><path d="M60-60H0V0h60z" class="st0"/><path d="M60-41h-5v10h5z" class="st1"/><path d="M65-41h-5v10h5z" class="st2"/></symbol><use id="XMLID_14_" width="65" height="60" y="-60" overflow="visible" transform="scale(1 -1)" xlink:href="#logo"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="65" height="60" shape-rendering="crispEdges"><style type="text/css"><![CDATA[
.st0{fill:#EE67A4;}
.st1{fill:#231F20;}
.st2{fill:#35BEB8;}
]]></style><symbol id="logo" viewBox="0 -60 65 60"><path class="st0" d="M60-60H0V0h60z"/><path class="st1" d="M60-41h-5v10h5z"/><path class="st2" d="M65-41h-5v10h5z"/></symbol><use xlink:href="#logo" width="65" height="60" id="XMLID_14_" y="-60" transform="scale(1 -1)" overflow="visible"/></svg>

Before

Width:  |  Height:  |  Size: 505 B

After

Width:  |  Height:  |  Size: 527 B

+96
View File
@@ -0,0 +1,96 @@
<!DOCTYPE html>
<html lang="en-us"
dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Post 3 | My New Hugo Site</title>
<link rel="stylesheet" href="/css/main.min.abe9198953fa438b19a2a50216b91f39b918bdffbcbb3d138c2c7ff41bfc260c.css" integrity="sha256-q&#43;kZiVP6Q4sZoqUCFrkfObkYvf&#43;8uz0TjCx/9Bv8Jgw=" crossorigin="anonymous">
<script src="/js/main.4a337dba599406f415cd073f12ed1cf19160c6c16bd482947d6f87e6f5d81d22.js" integrity="sha256-SjN9ulmUBvQVzQc/Eu0c8ZFgxsFr1IKUfW&#43;H5vXYHSI=" crossorigin="anonymous"></script>
</head>
<body class="bg-neutral-800">
<main class="container mx-auto">
<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 lg: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">
<header class="relative">
<img class="object-cover w-full h-60 sm:h-96 brightness-50" src="https://example.org/" alt="Post 3">
<h1 class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 text-center w-full text-white">Post 3</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>
|
<time datetime="2023-03-15T11:00:00-07:00">March 15, 2023</time>
<span>| 133 words</span>
<span>| ~1 min</span>
</span>
</header>
<article>
<p>Occaecat aliqua consequat laborum ut ex aute aliqua culpa quis irure esse magna dolore quis. Proident fugiat labore eu laboris officia Lorem enim. Ipsum occaecat cillum ut tempor id sint aliqua incididunt nisi incididunt reprehenderit. Voluptate ad minim sint est aute aliquip esse occaecat tempor officia qui sunt. Aute ex ipsum id ut in est velit est laborum incididunt. Aliqua qui id do esse sunt eiusmod id deserunt eu nostrud aute sit ipsum. Deserunt esse cillum Lorem non magna adipisicing mollit amet consequat.</p>
<p><img src="bryce-canyon.jpg" alt="Bryce Canyon National Park"></p>
<p>Sit excepteur do velit veniam mollit in nostrud laboris incididunt ea. Amet eu cillum ut reprehenderit culpa aliquip labore laborum amet sit sit duis. Laborum id proident nostrud dolore laborum reprehenderit quis mollit nulla amet veniam officia id id. Aliquip in deserunt qui magna duis qui pariatur officia sunt deserunt.</p>
</article>
<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>
<i class="px-3 py-1 m-1 rounded-sm bg-cyan-500 text-gray-900">#red</i>
<i class="px-3 py-1 m-1 rounded-sm bg-cyan-500 text-gray-900">#green</i>
<i class="px-3 py-1 m-1 rounded-sm bg-cyan-500 text-gray-900">#blue</i>
</span>
</div>
</div>
<div id="remark42" class="md:p-4 mb-16"></div>
</div>
</div>
<footer>
<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">
<a class="underline decoration-cyan-500 hover:decoration-pink-500 text-xl" href="https://avinal.space">Home</a>
<a class="underline decoration-cyan-500 hover:decoration-pink-500 text-xl" href="https://avinal.space/pages/about-me">About</a>
<a class="underline decoration-cyan-500 hover:decoration-pink-500 text-xl" href="https://avinal.space/posts">Blog</a>
<a class="underline decoration-cyan-500 hover:decoration-pink-500 text-xl" href="https://avinal.space/pages/projects">Projects</a>
<a class="underline decoration-cyan-500 hover:decoration-pink-500 text-xl" href="https://github.com/avinal">GitHub</a>
</div>
</div>
</footer>
</main>
</body>
</html>