Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
98419ec3b9
|
|||
|
d3e9866ff7
|
@@ -29,7 +29,7 @@ jobs:
|
|||||||
- name: Setup Hugo
|
- name: Setup Hugo
|
||||||
uses: peaceiris/actions-hugo@v2
|
uses: peaceiris/actions-hugo@v2
|
||||||
with:
|
with:
|
||||||
hugo-version: '0.134.3'
|
hugo-version: '0.124.1'
|
||||||
extended: true
|
extended: true
|
||||||
- name: Install elm-land and node packages
|
- name: Install elm-land and node packages
|
||||||
run: npm install
|
run: npm install
|
||||||
|
|||||||
@@ -9,5 +9,3 @@
|
|||||||
/temp
|
/temp
|
||||||
/blog/public
|
/blog/public
|
||||||
/blog/node_modules
|
/blog/node_modules
|
||||||
.idea
|
|
||||||
.vscode
|
|
||||||
|
|||||||
@@ -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.
|
|
||||||
@@ -1839,7 +1839,3 @@ video {
|
|||||||
padding-bottom: 7rem;
|
padding-bottom: 7rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.highlight pre {
|
|
||||||
padding: 1em;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -6,3 +6,16 @@ window.remark_config = {
|
|||||||
no_footer: true,
|
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.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## 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**.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
*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.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### 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/)
|
|
||||||
@@ -1,142 +1,23 @@
|
|||||||
---
|
---
|
||||||
title: Everything on my Pi
|
title: Everything on my Pi
|
||||||
date: 2024-04-29T10:47:00
|
date: 2023-10-01T10:47:00
|
||||||
category: raspi
|
category: raspi
|
||||||
image: /images/big-raspberry-pi.webp
|
tags: [raspi, linux, pi, raspbian, debian, ubuntu, server, docker]
|
||||||
description: A list of everything I have installed on my Raspberry Pi 5 and 4B.
|
image: "/images/big-raspberry-pi.webp"
|
||||||
tags:
|
description: "A list of everything I have installed on my Raspberry Pi 4B."
|
||||||
|
|
||||||
- raspi
|
|
||||||
- linux
|
|
||||||
- pi
|
|
||||||
- raspbian
|
|
||||||
- debian
|
|
||||||
- ubuntu
|
|
||||||
- server
|
|
||||||
- docker
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
I always wanted to have my self-hosted server when I was in college. Never had enough money to do much until recently.
|
I always wanted to have my self-hosted server when I was in college. Never had enough money to do much
|
||||||
So after I got my first job, I have invested moderately (heavily ;)) in gadgets and stuff. And one of my most prized
|
until recently. So after I got my first job, I have invested moderately (heavily actually ;)) in gadgets and stuff. And one
|
||||||
possession is my Raspberry Pi 4 and Raspberry Pi 5. I have been using it for a while now, and I have installed many
|
of my most prized possession is my Raspberry Pi 4. I have been using it for a while now, and I have
|
||||||
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
|
installed many useful things on it. So I thought I would share it with everyone. This is a list of
|
||||||
Pi.
|
everything I have on my Pi.
|
||||||
|
|
||||||
## Hardware and Specifications
|
## 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/)
|
- [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 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/)
|
- [Rpi shop Raspberry pi 4 case Model B Acrylic case with Fan + heatsink Included](https://amzn.eu/d/8vvwkfg)
|
||||||
- [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/)
|
|
||||||
|
|
||||||
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
|
I already had a good quality ethernet cable, so I didn't have to buy one.
|
||||||
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.
|
|
||||||
|
|||||||
@@ -43,18 +43,3 @@ taxonomies:
|
|||||||
permalinks:
|
permalinks:
|
||||||
tags: "/posts/tags/:slug"
|
tags: "/posts/tags/:slug"
|
||||||
category: "/posts/category/: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,6 +1,6 @@
|
|||||||
{{ define "main" }}
|
{{ define "main" }}
|
||||||
<div
|
<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">
|
<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>
|
<h1 class="text-5xl font-bold mb-6 mt-12 text-center">{{ .Title }}</h1>
|
||||||
|
|
||||||
@@ -34,10 +34,12 @@
|
|||||||
{{ end }}
|
{{ end }}
|
||||||
<p> {{ .Summary | truncate 250 }}</p>
|
<p> {{ .Summary | truncate 250 }}</p>
|
||||||
</a>
|
</a>
|
||||||
|
<a href="" target="_blank">
|
||||||
<span class="flex flex-wrap py-6 space-x-2">
|
<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 }}">
|
<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>
|
{{ .Params.Category }}</a>
|
||||||
</span>
|
</span>
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
@@ -65,10 +67,12 @@
|
|||||||
<p> {{ .Summary | truncate 150 }}</p>
|
<p> {{ .Summary | truncate 150 }}</p>
|
||||||
|
|
||||||
</a>
|
</a>
|
||||||
|
<a href="" target="_blank">
|
||||||
<span class="flex flex-wrap py-6 space-x-2">
|
<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 }}">
|
<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>
|
{{ .Params.Category }}</a>
|
||||||
</span>
|
</span>
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<div class="min-h-screen flex flex-col justify-center relative overflow-hidden">
|
<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="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">
|
<div class="bg-neutral-900 md:-mx-8 lg:-mx-16 px-8 py-1">
|
||||||
|
|
||||||
{{ partial "header.html" . }}
|
{{ partial "header.html" . }}
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 938 KiB After Width: | Height: | Size: 952 KiB |
|
Before Width: | Height: | Size: 170 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 217 KiB |
|
Before Width: | Height: | Size: 185 KiB |
|
Before Width: | Height: | Size: 2.5 MiB |
|
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 2.2 MiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 598 KiB |
|
Before Width: | Height: | Size: 275 KiB After Width: | Height: | Size: 8.2 MiB |
|
Before Width: | Height: | Size: 540 KiB |
|
Before Width: | Height: | Size: 2.4 MiB After Width: | Height: | Size: 2.4 MiB |
@@ -13,4 +13,4 @@
|
|||||||
# status = 200
|
# status = 200
|
||||||
|
|
||||||
[build.environment]
|
[build.environment]
|
||||||
HUGO_VERSION = "0.134.3"
|
HUGO_VERSION = "0.124.1"
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@tailwindcss/typography": "^0.5.8",
|
"@tailwindcss/typography": "^0.5.8",
|
||||||
"elm-land": "^0.20.1",
|
"elm-land": "^0.19.5",
|
||||||
"tailwindcss": "^3.2.4"
|
"tailwindcss": "^3.2.4"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"npm": "^10.6.0"
|
"npm": "^9.3.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 5.9 KiB |
|
After Width: | Height: | Size: 1.1 MiB |
|
After Width: | Height: | Size: 689 KiB |
|
After Width: | Height: | Size: 687 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 95 KiB |
|
After Width: | Height: | Size: 7.8 KiB |
|
After Width: | Height: | Size: 191 KiB |
|
After Width: | Height: | Size: 53 KiB |
|
After Width: | Height: | Size: 92 KiB |
|
After Width: | Height: | Size: 105 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 105 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 117 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 72 KiB |
|
After Width: | Height: | Size: 7.0 KiB |
|
After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 203 KiB |
|
After Width: | Height: | Size: 1.1 MiB |
|
After Width: | Height: | Size: 486 KiB |
|
After Width: | Height: | Size: 8.2 MiB |
|
After Width: | Height: | Size: 318 KiB |
|
After Width: | Height: | Size: 1.1 MiB |
|
After Width: | Height: | Size: 676 KiB |
|
After Width: | Height: | Size: 488 KiB |
|
After Width: | Height: | Size: 424 KiB |
|
After Width: | Height: | Size: 869 KiB |
|
After Width: | Height: | Size: 70 KiB |
|
After Width: | Height: | Size: 486 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 181 KiB |
|
After Width: | Height: | Size: 7.7 KiB |
|
After Width: | Height: | Size: 2.4 MiB |
|
After Width: | Height: | Size: 89 KiB |
|
After Width: | Height: | Size: 166 KiB |
@@ -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 |
@@ -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 |
@@ -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+kZiVP6Q4sZoqUCFrkfObkYvf+8uz0TjCx/9Bv8Jgw=" crossorigin="anonymous">
|
||||||
|
|
||||||
|
|
||||||
|
<script src="/js/main.4a337dba599406f415cd073f12ed1cf19160c6c16bd482947d6f87e6f5d81d22.js" integrity="sha256-SjN9ulmUBvQVzQc/Eu0c8ZFgxsFr1IKUfW+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>
|
||||||