If you're listening to this as a podcast, remember
that it was originally recorded as a video. If
you're not following along, you can go to my
YouTube channel. My username is Linkarsu. And
if you want to support me to keep this podcast
going, you can donate in Ko -Fi. I'm going to
leave a link in the description. All right, so
let's get started with this chapter then. Hey
everyone, I have a guest today. Hi Fish, he's
a Neobim plugin maintainer. Hey Hi Fish, how's
it going? Oh, it's going well. Hello Linkaru.
Yeah, I don't even know. What should I call you?
I don't know how to pronounce it. That's in theory
how you should pronounce it. My name is Christian,
by the way. So you can call me however you want.
Yeah, that's fine. Okay, Christian's fine. Yeah.
So for the people that don't know what's happening,
I created a post a few days ago in Reddit. This
post. I just want to know more about... people
that create plugins in the NeoVim community,
right? So a few people have reached out. HiFish
is the first one. So we're going to go over the
plugin that he created. The plugin is the one
that I'm showing on the screen right now. Would
you mind just letting us know a little bit more
about what this plugin is about, HiFish? Yeah,
so it's basically a rainbow delimiter. The name
says it all. When you have source code, you've
got delimiters, which are usually parentheses.
And I want to color them in different colors
so that those that belong together have the same
color. The outer ones are, let's say, red, and
then the next level is yellow, and the next level
is blue. And then you can see all at a glance
which delimiters belong together. Parentheses
are the most common ones, but it also works for
curly braces or even things like HTML tags. Oh,
you mind showing us on your screen how it looks
so I can have a better idea? Of course. Let me
switch to my terminal. Yep. So can you see my
terminal now? Yep, I can see it. Okay, I've prepared
some sample files which I also use in my testing.
So if we go to end -to -end. No, sorry. Highlight.
Samples. So we'll start using some Lua code.
Yeah, so we can see the symbols there. Okay.
So if I scroll down, for example, here you can
see these parentheses. And then you can see these
matching pairs all have the same color. And it
also works for these curly braces if you have
Lua tables, function arguments. And we can go
further. So if I go to HTML, for example, you
can see that matching HTML tags also have the
same color. So the other ones are red. Then we
get yellow. and blue and so on. And what's pretty
cool is you can see the angle brackets and the
name of the tag are colored. But for example,
these attributes retain their original color.
So it doesn't look like a unicorn just puked
over your screen. Or maybe it looks, but it's
not all unicorn puke. So the name of the tag
that made that, is that colored by your plugin
as well? Exactly. So you see all the text which
are on this level, meta, title, style, and so
on, are colored by rainbow diameters. And if
we go to body, body is yellow because it's one
level above. But then if you go one level down
to P, HR, P, and so on, these are blue again.
And below blue, we have orange. So the link is
orange. Yeah. It also works for XML, for example.
XML. Same thing. So I think I just copied over
the text. So the idea is just to find stuff faster,
right? Visually. Exactly. Okay, I get it. Now,
where does it get... Because I don't have a color
scheme. I don't use a color scheme. I use my
own colors. Do you... Does it get the colors,
like the highlights from the color scheme that
you have applied? Or are they static colors that
you configure on the plugin? Actually, no. You
would need to define highlight groups. I have
provided some defaults, which I consider reasonable
for most color schemes. But obviously, if you
are using Solarize like I am, you are going to
need a Solarize color scheme. You need color
definitions for your color scheme, which are
matching. So it's all in the configuration. You
can look it up. There's also a manual. So all
you need to do is define regular NeoWim highlight
groups. And if your plugin already supports rainbow
delimiters, it will just work out of the box.
Okay. We'll see what happens. I'm going to...
We will try to go over this at the end of the...
of the call. I will install the plugin by the
end. I will try to set it up and see if I have
any questions I'll be asking you and all that
stuff. Is there something else you want to show
before we get to know you a little bit better?
Yeah, I wanted to talk about how the configuration
is done because this is not an original plugin
by myself. I actually forked an existing plugin.
So if we go to readme. I think I... And what
happened with the original plugin, by the way?
Yeah, here it is. So Enwin TreeSitter. No, this
one is... Okay, I can't find it right now. But
anyway, the short story is the previous maintainer
wrote the Rainbow Delimiters plugin, and it did
most of what I did, mine does, but it did it
differently. So he was trying to make it very
general, so it would work with any language.
And the problem is that's simply not how TreeSitter
works. So you had a lot of edge cases where it
didn't quite work for certain languages. You
would have weird delimiters, like parentheses,
for example, would not be delimiters, but in
other languages they would be. And so you got
highlighting, which you didn't want, or you didn't
get highlighting, which you did want. And so
eventually he just wrote in his readme that he
had given up. And I was like, okay. I was trying
hanging around on it anyway. So I figured, you
know, I might as well try making my own. And
the original version, I think, yeah, here it
is. So, yeah, it was called nvntsrainbow2 because
his was nvntsrainbow. So this was the original
name. And then I had a major rewrite to make
certain changes. And then... I renamed it to
Rainbow Delimiters because, you know. You didn't
want to have, like, a number at the end there,
right? Yeah, a number is part of it, but also
I don't like plugins which start with nvim because
when I'm trying to use tab completion, if I've
got 10 different plugins which all start with
nvim, I have to first tab through those to get
to the actual completion. Whereas if it's called
Rainbow, I mean... How many plugins do I have
to start with Rainbow? Yeah, true. It's a personal
thing. Yeah. And one of my changes was you could
configure the strategy which is used. So if we
go back to the Lua file, or Lua. Oh no, let me
switch to Common Lisp, which looks more impressive.
So you see all these delimiters are highlighted
right now. And for some people, this might be
too colorful. So you can change in your configuration.
So this is right now my NeoWim config. You can
change which strategy is used. So if I say common
lisp equals rainbow delimiters dot strategy dot
local, what's going to happen is if I... Exit,
and then invent test, highlight sample, common
list, regular list. You see only the context
where my cursor currently is highlighted. So
all these delimiters are left as they are. And
if I move down here, now this context is highlighted.
Just the function where your cursor is in? Exactly.
So you see this block? This context is currently
containing my cursor. And then only this context,
its children and its ancestors are highlighted.
So, for example, you can see here 0p. This part
is not highlighted. This part is not highlighted
because right now I'm in this context. Okay.
And all of this is using TreeSitter? Exactly.
So I was using a Rainbow Delimiter plugin still
when I was using Vim. But the problem is it was
using regular expressions and regular expressions
can get quite janky. And in order to make regular
expressions work properly, you would have to
effectively write an entire parser for each language
which you support. So you might as well just
use TreeSitter because that's what TreeSitter
actually is. It's a parser. Interesting. Okay.
So that's the way that it works. The downside
of this is I need to add support for each language
individually. If we look at the configuration,
the queries, so these are all the languages which
we support. So if there's a new language and
you want rainbow delimiters for it, you have
to open a pull request and then we can work for
it together. Oh, I see. That's the downside of
TreeSitter. The original author tried to make
it generic so it would work for every language,
but it was causing more problems than it was
solving. I decided, you know, it kind of sucks,
but it's like, this is all you have to write
to support a language. So it's not hard. Oh,
it's not a lot. Okay. Yeah. So it's really easy.
So basically you just define the pattern and
then you define what's the delimiter. And yeah,
that's it. It's just for some languages, like
let's say, for example, Python, there's a lot
of delimiters. You see, there's a lot of redundancy.
For example, you have generator expression and
parameters. They look exactly the same, but they
have different names in the syntax tree. So syntax
tree, for those who don't know, is if you do
the expect tree, you can get the structure of
your source code as this tree of nodes. And even
though to our human eyes, these look exactly
the same because it's us. regular parentheses
and some content to trees that are completely
different things. So you need to write every
single thing which can be considered a delimiter.
Interesting. Okay. I have been playing around
with this tree. What did you type tree inspect?
What was the command? Yeah, inspect tree. Inspect
tree. And then you get the structure of your
code as a tree structure. So top most program
and then you see there's a comment on the left
hand side. You can see. highlighted part and
then you can inspect your source code interesting
yeah um i'm not an even expert at all you know
i barely know a few things about neovim but i
like managing my markdown headings in a certain
way so um i was um capturing no not capturing
capturing is not the word like just identifying
my markdown headings using regular expressions
in the past but i switched recently to using
tree sitter it's not complicated but i kind of
get the idea of what you're trying to say just
because i did that with tree sitter otherwise
i would be completely lost but it's good to know
that that's the way how you manage this and how
difficult is it to to maintain to do you get
a lot of requests for new languages yeah i do
get free uh from time to time requests for new
languages or sometimes parser has changed then
these names are different and then i have to
go and update these oftentimes people will actually
submit pull requests so i don't have to do all
the work myself because there's so many languages
and many of them i don't know myself so okay
if someone comes and tells me oh i want support
for gleam i'm like okay pr welcome i don't know
gleam i've never used it i have no intention
of learning it so I have nothing against Gleam.
If you want to support it, you'll have to help
me out on this one. Help me help you. Yeah, it's
a lot of work. That's one of the questions that
I have on the list of questions that I ask. How
does it feel to be an open source maintainer,
especially for Neobim? Do you have any thoughts
around that? Is it a lot of work? Is it a lot
of burden? Do you get a lot of... i mean it depends
on one hand it's pretty cool to be able to make
something which people actually like and which
people want to use and i tell myself i'm an egoist
i just did it for myself because i want to use
it but you know when it's 11 p .m and i'm still
pouring over source code because some language
because some language i'm never going to use
yeah it's not really Just for me, but I'm also
using it as a learning opportunity. For example,
testing is a topic which testing in NeoWim is
a bit more complicated than testing in, for example,
Python, because you're testing an application
which is running. So you're testing a separate
NeoWim. You're not just testing code. And I've
actually written a couple of blog posts about
testing. specifically for rainbow delimiters
because i make a change and then i just eyeball
it looks fine i publish and then a couple of
hours later i get an issue because i broke something
and that part is really annoying and it's just
a waste of everyone's time so testing is a topic
i'm kind of big on when it comes to near wind
plugins at least okay have you had bad experiences
with users how is uh the support aspect of it
in github like i haven't had bad experiences
i mean when it comes to open source there's the
saying if you didn't pay for it you're the product
but in open source it would be more accurate
to say if i didn't play for it you're the qa
team so i mean you get what you paid for and
sometimes i just have to say i don't know can't
help you works on my end I'm sorry. It's not
even about time. I mean, there are a couple of
issues which are open because I haven't had time
to look into them, but sometimes it's just I
can't reproduce it. And, you know, if you can
help me out, that would be cool, but it's not
exactly priority. So, yeah. I mean, there's also
GitHub Sponsor, but the problem with GitHub Sponsor
is you would have to sponsor a lot of money to
make it possible where I could take, let's say,
turn my day job into a part -time and be a maintainer
for a day per week. And it's just not feasible.
So I try to use automated testing to catch as
many errors and I try my best. you know maybe
it's good maybe it's not you'll be the judge
but all in all i think it's pretty rewarding
and quite fun so i don't hate it yeah it's cool
do you feel that you're gonna continue maintaining
this for quite a lot a lot more time or you're
like i'm getting to the point in which i just
don't care about this tool anymore i'm not into
neobim anymore i'm just yeah I mean, it could
happen anytime. I could just say, you know, Emacs
is pretty cool. I'm switching to Emacs and then
all my plugins would become abandoned because
I have no motivation to maintain them myself.
But I don't see myself quitting any of them anytime
soon because as far as editors go, this one is
perfect for me, at least. For the time being.
Yeah. I thought about Obsidian that way. Obsidian
is the tool that I use for note -taking. I used
to talk to my wife about Obsidian, man. I don't
know, multiple times a day. If I found a new
plugin or something that I found amazing, I used
to tell her she doesn't give a crap about it.
She doesn't even remember. But I don't know.
It was like therapy for me, I think. And now
I don't even use Obsidian anymore. I haven't
used Obsidian in months. So I hope that that
doesn't happen with Niobe and me personally,
you know, because. I love NeoVim. I haven't been
using it for too long, for like a year maybe.
But we'll see. Who knows, right? How long have
you been using NeoVim? It might be around seven
years, give or take. I don't know. I was first
using Vim before switching to NeoVim. One problem
with Vim at the time was you couldn't do anything
asynchronously. So if you had a linter... You
couldn't do live linting because otherwise on
every key press, your editor would freeze for
a second or two to run the linter. So you had
to do something like only run the linter on save.
Oh, I see. Which wasn't ideal, but it was more
usable than having it freeze your editor on every
keystroke. And then I was actually pretty close
to switching to Emacs because of this. And then
I discovered NeoVim and I was like, oh, NeoVim,
that looks cool. They're trying to do async stuff,
adding it to Vim. And then I switched. It was
before Lua or any of the other fancy stuff. Async
support was the big one and remote plugins. And
yeah, it was basically just Vim, different. You
could do stuff which you couldn't do in Vim.
And so it was a very easy switch to make. I thought
Lua had started with NeoVim, so it didn't? No,
no. Lua came in version 0 .4, if I remember correctly.
When I switched to NeoVim, they were still at
version 0 .1. They had just recently had their
first release. Oh, interesting. I think Lua was
on the roadmap, if I recall correctly, from the
start, but it was not yet implemented. But don't
quote me on this one. Yeah, but it keeps me...
I don't quite remember the time. Gives me a general
idea. Yeah, it's kind of weird to think that
Lua was... There was a time when Lua was not
a first -class language of NeoWim. Yeah. So for
how long have you been using NeoWim then? Seven
years Wim and NeoWim? No, I meant seven years
Wim and NeoWim together. So Wim maybe for a year
and then since then NeoWim. Why did you decide
to get started with Vim in the first place? Well,
the reason I got started with Vim was because
of servers, right? You usually SSH into a server.
You needed to edit a file. Vim was there, right?
So I didn't like it. I tried it for like three,
four times and I said, no. F this. I'll just
use Nano when I SSH into a device. And I always
use Nano. I didn't like Vim. But one day I just
decided. this thing is not gonna defeat me and
i gave it a try another try another try and it
finally stuck how did it happen in your case
so my first experience with him was uh i needed
to edit some file and i read some guide on the
internet and was like oh yeah just type vi vim
in your terminal and then the file name and then
you can edit it and i was not much of a terminal
person back then terminal was like you know if
you have to do use it but i knew cd and pwd and
cat maybe just a couple of commands and anyway
i typed in vim and my reaction was pretty much
everyone's first reaction to vim which was oh
god how do i get out of this none of the keys
make any sense yeah uh what am i doing why would
anyone in his right mind use such an awful editor
it's completely backwards So and then, yes, some
time passed. I was an IDE user back then. And
I was actually doing some, I was playing around
with Unity game engine. And Unity came with its
own IDE called Xamarin Studio, which is this
like C sharp IDE. And the user interface is written
in C sharp as well. So it's not native. And back
then I was on Mac OS or OS 10 as they were calling
it. And if you know one thing about Mac users,
they are very, very picky when it comes to GUI
toolkits. So if it's not Cocoa, it's trash. And
so this was also my attitude back then, and it
would probably still be my attitude now if I
was still on a Mac. And I just didn't like their
IDE. So I was looking around, is there some different,
better IDE? And there was something like from
JetBrains, which I now know is Rider. But it
wasn't Cocoa either. So I was like, okay, if
there's nothing better, is there something worse?
Obviously, people are doing software development
without IDEs as well. So maybe there's some sort
of terminal stuff. Like if I cannot go to the
high end, I'm going to go all the way to the
deep end. So it came down to Emacs or Vim. And
Emacs had this weird stuff like Lisp, which is
like... an awful language has all these parentheses
and like why would anyone use a language like
this and i was like okay i will give vim a try
and i did remember my first experience but i
was like okay this time i'm actually going to
learn it And fortunately, Vim has a built -in
tutorial. So I just typed in Vim tutorial in
my terminal. And 30 minutes later, I was like,
oh, yeah, this is actually, it makes sense. It's
like you're talking to your editor in a language.
So it's not just arbitrary keystrokes, which
you need to remember. There's some sort of logic
to it. And it's pretty cool because after a while,
you aren't even thinking about what you're pressing.
You're just, you're thinking. I want to do this
thing and your fingers move automatically on
their own. And it just happens. It's like, it's
like having your text editor wired to your brain
directly. Well, that's, I fell in love with Vim
keys. That's the idea. That's, but when you first
try, I remember I also did that Vim tutor. I
think it is right. The one that comes in Vim
and it was painful because I was really slow,
man. just switch between normal mode and insert
mode it was painful and I was like okay I get
it it's a good idea but it sucks I cannot type
fast now I hate typing in word or I hate typing
in the browser or in reddit if I don't have the
motion so it's I don't know it's really strange
Yeah, VI motions are great. Now, my problem was
not the mental model of insert mode and switching
around. My problem was that I didn't know how
to touch type back then. I somehow got away without
touch typing for the most part. I was still a
university student, so I wasn't a programmer
at work because that would have been really awkward.
But yeah, I was like, okay, I guess I should...
learn how to touch type finally and yeah it took
a week or so but yeah i mean i got a hang of
it and now i cannot even imagine writing the
old way because the old way was i would look
at my keyboard and just press keys using whatever
finger was happened to be near the key and then
i would look up and see all the typos i had made
and then i would corrected those typos and then
i would switch back to the keyboard as i had
this diving motion all the time and yeah it's
just awful i don't recommend it yeah yeah yeah
just just learn touch typing to yourself a favor
for everyone yeah how many words do you type
per minute now oh i don't know i'm not a fast
typer because you know when you're programming
typing your typing speed is not really relevant
because most of your time will be spent either
moving stuff around or thinking or reading yeah
and i also have auto completion and snippets
so i don't think that typing speed really matters
much for programmers yeah for writing articles
and stuff like that i do think it matters you
know because i oh yeah definitely yeah for writing
notes because it would slow me down a lot if
my fingers couldn't follow my my thoughts well
i'm not a fast typer you know i don't think that
i'm extremely fast but you know 90 100 that's
i think my average around there and it's decent
enough it allows me to type what i need now that
we're here if i don't know if you're looking
at my screen or not but i'm on the i'm not sure
i can switch to your screen okay yeah so you
mentioned keyboard You mentioned something about
a keyboard. Which one do you use? We're going
to go over the topics, not in a specific order.
I'm just going to be jumping through them. Do
you use a split keyboard or what do you use?
I use a mechanical keyboard. It's a Keychron
K1, which is a low profile keyboard. I used to
use the Apple aluminum keyboard, the flat one,
and I really like the slow profile. But the problem
is because because the keys are very low, it
started to hurt my fingers. So I had really bad
pain. I could barely type anything. And I had
no idea it was because of the keyboard. I went
to several doctors, had several tests done. All
tests were negative. Yeah, that's my keyboard.
This one. Okay. Yeah. And then I had heard about
these mechanical keyboards, which are supposedly
really good for people who are doing lots of
typing. And I just bought a mechanical keyboard,
not this one, a cheaper one. Tried it, and within
a couple of days, all my pain was gone. So yeah,
if you're typing a lot, do yourself a favor and
invest in a good keyboard. I use blue switches
because they work for me, but brown switches
are fine as well. I even take my keyboard to
the office because I just really like the feel
of typing on it. And what do your co -workers
think about the noise that you're making all
over the place? It's one of those horrible open
space offices, so my keyboard is probably the
least noisy thing in there. Oh, okay. So it's
not that bad then. Yeah, I mean, there's worse
sounds in that office. Yeah, it's a very interesting
point that you touched there because... i'm a
big fan of the apple keyboard the magic keyboard
as well man i love that keyboard because like
you said it's flat you know it lays on your desk
your fingers are basically on the desk but the
position of the hands they're too tight to close
together right so i started experiencing forearm
pain and i couldn't type for too long i was worried
and i was like what the hell is going on um I
got scared you know because that's what I do
the most typing stuff and the computer is basically
what I do the entire day so I just decided to
start looking into these mechanical keyboards
I went with the Glove 80 you know which is a
split one is this one here I didn't know which
one to get but um I ended up in this one the
pain has gone from the forearm definitely I just
don't like the switches too much. I like the
switches in the Apple Magic Keyboard because
they were really soft. These are soft as well,
but I don't know. I just kind of miss it, but
I cannot use it anymore because the pain is going
to come back for sure. Yeah, I know what you
mean. Yeah, just to be clear, I mentioned Keychron.
I don't have much experience with mechanical
keyboards, so it's not like I'm saying this is
the best one or anything. It's just what I use.
Yeah, me neither. Maybe there are better ones,
but maybe they're not, so I don't have any frame
of reference. But I like it. Yeah, same thing
here. This is the first mechanical keyboard I
got. I didn't know which one to get. I just got
this one, and it's okay. I guess it's decent,
but I don't know about keyboards. at all i don't
have a point of comparison like you like you
mentioned yeah yep and um have you thought about
split keyboards or no uh i did consider them
but you know i i picked this one up it works
i don't have any pain in my wrists for for now
so i don't really see a reason to switch as long
as the keyboard is working but i do like like
the idea so i'm not opposed to it okay interesting
to try one to try one okay you mentioned that
you were a heavy mac os user so my guess is of
course you didn't switch to windows unless you're
developing games or something so what are you
on right now what's your operating system at
the moment my operating system is void linux
which is a rolling release distro so rolling
release means you install it once and then you
keep continually updating it every day or every
couple of days but there are no like release
versions so there's no void linux 2025 void linux
2026 and also so you just keep updating it there's
just updates then yeah you just update and keep
it running forever and how does it go with breaking
changes do you experience any Rarely. So there
have been a couple of times, a few times, I can
count them on one hand total, whereas usually
it was some packaging error or something, but
those changes are rare. So maybe configuration
can change, for example, when switching to Pipewire,
which is obviously not the same as Pulse Audio,
but you do get notified in advance. There's also
an RSS feed, so you can stay ahead of time. It's
not something I would run on a server, but for
a regular workstation, it's fine. Your desktop,
okay, for your personal computer. How long have
you been using Void Linux? It might be, I don't
know, five years or so. Five years? Quite a while.
And why didn't you just jump to whatever everyone
jumps to, which is Arch or something else? Why
did you choose Void Linux? I did actually choose
Ubuntu first. when I switched to Linux. Not necessarily
because Ubuntu is the best one, but my thought
was, I'm switching to a different operating system,
so I might as well switch to something everyone
else or a lot of other people are using. Yeah,
a lot of documentation. Yeah, lots of documentation
and lots of help on the internet. And yeah, it
was fine at first. The problem is packages are
pretty old on Ubuntu. For a good reason, but
on the desktop, I wanted something more recent.
So when my computer broke, I had to reinstall
the operating system anyway, and I figured I
might as well try a different one. Then I switched
to Void. Void Linux. And why did you leave macOS?
Yeah, I was a Mac user for around 10 years. The
problem was my Mac was getting outdated. It wouldn't
receive any software updates anymore for security.
And obviously, you can't run a computer with
an outdated operating system and have it connected
to the internet. So I had to switch to something
else anyway. And I was looking at the state of
macOS. And at that time, at least, they weren't
really innovating much. And the only innovation
was just more integration with iOS devices, which
I didn't have any. inching more and more towards
free software as opposed to proprietary software.
And my operating system was really the only proprietary
software I had still running. And that's the
least one you want to be proprietary because
everything else is running on top of it. So Linux
just made the most sense. Okay. So you're not
going back then to the roots. You're staying
in Linux, right? Probably for the foreseeable
future, I might maybe to open BSD or something.
I'm not much of an operating system or distro
hopping guy. I find something that works for
me and I stay on it. So I do have a couple of
issues with a void, but you're going to have
issues with everything. So it's nothing I'm losing
sleep over where I'm saying I really need to
switch right now or soon. Are you, I don't know,
Have you been at companies where you're forced
to use Mac or they allow you to use Linux, whatever
you want to use? I have been fortunate enough
to every company has allowed me to use Linux.
Oh, really? So far. Yeah. I did have to ask at
first during the job interview, what operating
system do you allow us to use? Some companies,
they really don't care. And some companies do,
for example, a current employer. They let me
use Ubuntu, but it has to be Ubuntu and it has
to be managed by IT. So they don't let me just
bring my USB stick and plug it to my laptop and
install whatever I want. But it's fine. I have
root access. I can install all the packages I
really need to. So there's just compliance reasons
they need to. You can't do anything you want.
So you kind of do your driver stuff or network
stuff, which I wouldn't want to do anyway on
a work laptop. But you can install NeoVim in
all the packages? Yeah, for example. Yeah, exactly.
So Ubuntu's repository NeoVim is pretty outdated,
but I can compile from source and then install
it myself. So that part works. Okay, interesting.
And what are your thoughts on Windows? Windows
was actually the first operating system I used,
which was Windows 98. Then later ME, which came
with my new computer. I absolutely hated it because
it would blue screen of death all the time. And
then I had XP, which was okay, but I never really
liked Windows much. It has always been a slop
operating system to me. What everyone uses is
not particularly good. It has pretty bad documentation,
at least for users. I don't know how it's for
developers, but yeah, I didn't like it much.
So when I switched to Apple, it was like day
and night difference. Documentation was actually
good. The software was really nice to use. The
settings were much more intuitive. I just liked
it all around better. Okay. Yeah, I've been...
No, I have not been thinking about switching
to Linux. Everyone keeps telling me that I should
try Linux. and i guess there's no going back
once i go to linux i'm not coming back to mac
os unless i'm forced to do it in a you know at
a company or something but i know that it takes
a lot of time it's not just turn the computer
on and no man no it'll take me a lot of time
because it's not just neobim my neobim config
is in my dot files i can easily you know have
it on any operating system it doesn't matter
but it's just the rest of the tools but uh Yeah,
I mean, I can understand if you have a certain
workflow, which we are used to, things are going
to be different. I don't think they're going
to be harder, because for certain stuff like
software development, I think Linux and even
macOS are actually easier than Windows, because
on macOS, there's like, here's what we have decided
for you, but we have carved out a certain niche.
where you can play around with just don't mess
around with the operating system and system packages
because then you're in trouble but everything
else is just fine and it's a unix underneath
and linux yeah even more so so um but when it
comes to windows i do know some people who are
doing windows software development on windows
and yeah it's kind of a pain because you have
to find your operating system yeah at least And
maybe it's just because of how IT has set it
up at work. But for me, it's just like, oh, I'm
going to sudo apt install this thing and the
other people have to go through IT. And even
for free software, which has no license restrictions
and it's just ridiculous. Yeah. I think I'm the
only one using Linux in my department and I'm
not the one who's having the least, the fewest
computer problems. Oh, and that brings a good
question that I always want to ask. How do people
understand your passion for open source, for
NeoVim? When you talk to your co -workers, do
they feel the same? Like, oh yeah, man, NeoVim
is the best. Or you're the only one, basically
the only person at the entire company that enjoys
it and that understands this? I am actually currently
the only one using NeoVim. Other people use VS
Code or Spyder. I don't really go around talking
much about text editors because, you know, it's
the text editor. That is text. It's not that
exciting. And I think the best way to promote
NeoVim, if you really want to promote it, is
not to talk about it. It's just to use it. And
if people see you use it and you're doing really
cool stuff, you're really quickly editing text
and you've got LSP, auto -completion, you can
debug it. stuff in it you can open any file type
and it just works i think that's going to be
to leave a much better impression than if you
go around telling everyone oh neo is so great
i can do all this cool stuff look at me pressing
all these keys and i type in this completely
random looking sequence of letters and then stuff
happens you you start sounding like a weirdo
yeah yeah about open source and that one's a
bit different because NeoWim is just a tool.
And if you have a different tool which you prefer,
that's fine by me. I don't really care. If you
want to use Emacs, that's cool. But when it comes
to open source and free software, there's a big
difference because open source and free software
to me is about control. Control giving control
to the user instead of having someone else dictate
to you what you are allowed to do. So part of
the reason I switched to from Mac to Linux was
precisely because Linux is open source. It's
free software. I don't really trust big tech
and especially not Microsoft, but I don't think
Apple is much better. And the only reason Mac
OS was at least claiming to be more privacy friendly
and all was because Apple didn't have all the
leverage. So even if they were to data mine their
users, they would just get less useful data than
Microsoft. especially with iDevices, things have
changed and Apple is much more prominent. Maybe
not on the Mac side, but definitely on the iOS,
mobile phone and tablet side. And yeah, I have
a question for you. What happens when you share
your screen at work? Do you ever need to share
your screen and edit files? Do they follow what's
happening? Do they ask? What is that? What are
you doing? What's happening? Do they get lost?
No, I haven't had anyone get lost so far. No
one has commented. I mean, they know I use NeoVim
and it's this terminal editor, but I've never
drawn attention to it. No one has ever asked
anything. I did have a previous job where I had
a coworker. I had just started out and he did
use NeoVim, but he was using it mostly like mostly
vanilla. So he had never seen language servers
and debug adapter protocol. And then when I had
autocompletion, he was blown away. And then when
he could see diagnostics from the language server,
it was amazing. And then I started the debug
and he was like, whoa, I had no idea you can
do that in NeoVim. So he had his mind blown.
So you converted him? No, he was using NeoVim,
but not for professional development, just as
a basic text editor. Okay. Okay, interesting.
And he ended up switching to Emacs eventually.
Emacs. We lost him. I installed Emacs like, I
don't know, two weeks ago. There's a guy in YouTube,
Joshua Blaze. I just wanted to try Emacs because
everyone talks about Emacs. And I was like, I
don't want to put in the hours. I don't want
to do the research and all that. So I just need
someone that teaches me and guides me through
the process. So I installed Emacs. I have created
a few videos about it. You know, org mode is
something that I have. wanting to try for a long
time i haven't i cannot make a decision yet so
far neovim is i don't know what works the best
for me and markdown but um i don't know do you
have any thoughts on emacs have you you know
the old saying emacs is a great operating system
but it lacks a good text editor i saw a comment
Yeah, I've never actually used Emacs much. I
have installed it. I tried using it and then
these weird key combinations and then you have
to press all these weird key chords. It just
didn't work for me. I tried evil mode, but then
it's like, okay, what's the point? I might just
use the real thing. Yeah. I mean, if it works
for you, whatever. I don't think it's worth arguing
about text editors. The only thing I don't want
to, I don't want someone else to force me to
use a certain exit. So if I'm at work, that's
when someone tells me, you have to use the same
ID as everyone else. I'm like, nope, I'm using
my own. Yeah, definitely no, for sure. Fortunately,
it's really bad in Java because you have this
like, everyone has to use IntelliJ mentality.
But when it comes to Python, which is my day
job language, Because there has never been a
really popular IDE. There's obviously PyCharm,
but it came later. And so it's pretty common
for people to use just whatever they want. And
you keep your editor settings or your linter
settings and all in plain text files. And then
your editor can just read those and use them.
Okay, so you use full lineage of them, even debugging
and all stuff in Python and works just fine.
Exactly. Okay, I tried. um what is it uh lsp
rough i don't know why i was having some sort
of issues it was like freezing when i exited
a py file a python file it just froze for a few
seconds i don't know what was happening so i
just switched to a different one what do you
use do you use rough or what's the other one
i don't remember uh no i use pi lsp if you just
search the web for python lsp server you're going
to find it And what's cool about it is that it's
modular. So it provides the bare minimum. And
then there's a bunch of plugins which you can
add. And some of these plugins are included by
default. But you can also add, for example, if
you want to use Raph as your linter, I think
there's a plugin. Yeah, that's the first one.
This one, okay. So if you scroll down a bit.
Yeah, for example, let's say you want static
type checking. So Python is a dynamically typed
language, but you can also provide type annotations,
and then a type checker can check those statically.
So this one is not included by default, but there's
a plugin, PyLSP MyPy. It might actually be listed
if you scroll down. Let's see if I search here,
MyPy. Yeah, there it is. So you can add it as
a plugin, and then you get also static type checks.
Right in your editor, so your editor can show
you when you've made a type error. Okay, interesting.
I don't do Python professionally, you know, but
if I ever do, and if I have questions, it's good
to know. And I will probably reach out and ask
for help, you know. Yeah, you can see in the
list, the last point is rough, Python LSP rough.
So if you want to use rough as your linter, you
can install that plugin. I haven't tried it myself,
but it's probably going to work. okay wonderful
all right all right so let's see what else do
we have here in the topics do you like any sort
of um video games or not at all oh yeah sure
i do like video games i've noticed over time
my change has switched from long rpgs and so
to more arcade like games where you can just
sit down for a couple of minutes play have fun
see how far you can make it and then move on
with life What's the game that you have been
playing lately, or the last one you played? Let
me see... Streets of Rage 4. Yeah, that's fun.
So Streets of Rage 1, 2 and 3 were these Sega
Mega Drive games. Like side -scrolling beta maps,
you walk from left to right and you beat up people.
And yeah, it was pretty fun. And then they made
a new one a couple of years ago. completely modern
but they still retain the same basic gameplay
so you don't have any sort of bloat and rpg elements
and all this stuff is just pure old school walk
from left to right and then beat enemies up okay
this one the one shown on the screen yeah that's
the one okay okay interesting um what else do
you like um reading any books yeah um i've booked
um What I find cool is there's a site called
Project Gutenberg. They have e -books of all
these old classics which are public domain now.
And what I do like is Takes and Book, which is
popular. So there's a lot of, how do I put it,
movie adaptations and so on of certain works.
Like, for example, Frankenstein. Everyone knows
the castle, the lightning, bowls, the younger
villagers, pitchforks and torches. um the hunchback
assistant and then he frankenstein goes like
it's alive it's alive and it's fun to read the
book because the book is nothing like that there's
none of that in the book and instead frankenstein
he constantly faints and has to go on long walks
to recover and he's such a wimp it's it's funny
to see the difference between what pop culture
thinks and what the original is okay so this
is the one that you were mentioning Yeah, that's
the one, Project Gutenberg. It's a really cool
project. You can read it on an e -reader, you
can get it as a PDF or HTML, and it's great.
One book I really enjoyed was The Count of Monte
Cristo, because there are movie adaptations,
but they all try to fit the entire plot into
one movie. But you need to write Monte Cristo's
two words. that's the one by alexandre dimas
yeah it's a really long book it's actually three
novels so it was published in three parts and
it gets really intense amazing so i absolutely
recommend it to anyone but just you you should
know what you're getting yourself into okay it's
quite a read and so you can see the epub is like
80 megabytes for text i can imagine So you just
read them in a Kindle or what? Your phone? I
read them on my phone because I don't have a
tablet, but obviously a tablet would be better.
There's a great app called Librera. Let me just
look up the name. You can show it on your screen
if you want to. Yeah. Let me see if I can find
it. Just let me know when you're ready to share
your screen. Yeah, you can share it. I've got
it now. So it's on F -Droid and the F -Droid
repository. It's just an e -book reader. And
what I like is it has all the options it needs
to have for an e -book reader and none more and
none fewer. So yeah, here are some screenshots.
So you have your library. You can read your book
in various formats. You can change the color
and it's just great. So instead of doom scrolling
in Twitter and all that, stuff you just decide
to read that's what you decide to invest your
time on right yeah um i do have to admit i don't
read yeah when i can find the time so when i'm
on the train ride or something like that okay
okay but it definitely does beat doom scrolling
yeah yeah i wish i could you know just be disciplined
and do it you know no Twitter beats me and the
rest of social media and all that stuff. It's
complicated. I found a great trick. You can set
your web browser to delete cookies every time
you close it. So if your cookies are deleted,
you get logged out. And then if you want to comment
on Reddit or doom scroll on Twitter, you have
to log in. And then there's the much bigger hurdle
you have to get over. And then you're only going
to log in if you actually have something useful
to do. And if you just like scrolling because
I want to rot my brain, you're not going to do
it. Oh yeah, for sure. Okay. And you have to
brain rot responsibly. Yeah. Yeah. I'm not too
responsible. I'm not too disciplined, but I'll,
I don't know. I have to come up with something
because I just burn a lot of time, waste a lot
of time in things that don't, you know, that.
that i shouldn't and where people can find you
where in your github repo is that um yeah i don't
have social media yeah i don't have social media
but i do have a github i also have a gitlab it's
the same name just replace github with gitlab
and if there's anything you want to post any
issue you want to raise or discussion you want
to start for one of my plugins you can open so
it's in the okay so you have more than one plugin
then uh yeah i do have a couple of plugins but
rainbow delivery is the most popular one um yeah
this one okay i see okay okay wonderful right
and um how do you take notes i'm just jumping
between topics it's not making too much sense
but do you take notes which tool do you use neo
vim or something else yeah any of them i don't
have any fancy setup i just open a new terminal,
type in nvim, write down my notes, and that's
it. Markdown. I prefer restructured text, but
it's essentially the same. Oh, okay. So what
is the extension like? Do you create the file
as file1 .md? I really don't have any fancy systems.
I just write on whatever name. file name comes
into my mind it's nothing sophisticated okay
okay you just want to capture the the notes exactly
exactly or i use pen and paper as well often
okay but again just scrap paper nothing fancy
okay and um i don't know about linux window managers
but for the audience if there's someone watching
this what window manager do you use on linux
Okay, I do have a setup, which in the past I
would have absolutely recommended it, but I can
no longer recommend it. So what I'm doing is
I'm using KDE Plasma as my desktop environment
and BSPWM as my window manager. So BSP stands
for Binary Space Partitioning Window Manager.
But if you search for BSPWM, you're going to
find it. And the reason is I have a particular
need. I've got an impinger in my right shoulder.
which is to say the space between in inside the
joint is too small and my tendon tends to rub
against the bone i can do most everyday activities
or i can do all everyday activities everyone
else i'm not disabled however if i do something
which provokes the condition i'm going to have
a lot of pain and one thing which does provoke
the condition is switching between keyboard and
mouse So what I need is an environment which
can be operated both using a mouse and a keyboard
equally well. And most desktop environments are
geared around using the mouse. And most Tadding
with No Matches setups are geared around using
the keyboard. And combining these two allows
me to do most of my work without switching. So
if I've got my hand on my mouse, I can do a lot
of stuff. You know what? You can switch to my
screen and then I can show you what I mean. I've
got these panels on the side. And for example,
I can open here my window manager. Right, in
action. Exactly. So you see the tie link is from
BSPWM, but all these panels are from Plasma.
So these are KDE panels. So you see I've got
all my applications at hand here. I've got my
global menu because I'm a former Mac user. I
think global menus are superior in every way.
And so, for example, if I want to see my downloads,
I can click this widget here. I have my desktop,
my trash bin. I need to start GIMP. I click here.
So you can see I'm doing a lot of stuff using
just my mouse. So I won't close this window.
I do go to the menu or I can use this dock here
on the right -hand side. But I can also... use
um i'm going to move to my keyboard and now um
i should open a new terminal okay ah okay the
cable had gotten had gotten loose so you can
see i can create a new window i can move stuff
around so like let's say i want to open my file
browser i use super and space to open this k
runner menu and i type now dolphin to open my
file manager i move windows around with my keyboard
so this is all bspwm doing stuff so you can see
how i can manage my windows i can move to a different
desktop i could move for example my terminal
to my second desktop so press here and then see
it's on my second desktop now so and this allows
me to minimize the switching between keyboard
and Now, obviously, if I want to do something
with image editing, I will have to switch to
my mouse. But then I'm going to remain on my
mouse for image editing. I'm not going to do
image editing using my keyboard. And this is
a setup which used to work very well. But then
Plasma updated to version 6. And now it's all
Wayland. And the problem with Wayland is... So
in the past, when you used... Maybe I should
provide some context. So on Linux, there are
two different display servers. So Linux by default
is pure tech space, pure tech space. So there's
a package called X11, which gives the operating
system graphical capabilities. So you can have
a desktop, you can have widgets, icons, windows,
and all that stuff. And X11 has gotten pretty
old. And the new one is Wayland. And it's not
like Wayland is just a new version of X11. Wayland
is completely different from the ground up and
it's intentional. And unfortunately, because
of how Wayland works, you cannot mix and match
components like you can on X11. On X11, you have
this monolithic server and then you can add your
own compositor, you can add your own window manager
and panels and all this stuff. But on Wayland,
it's much more concentrated. So either you use...
a tiling compositor like Hyperland or Riva, or
you're using KDE Plasma. And I cannot combine
these two. And there are a couple of bugs on
the X11 side of Plasma. For example, you can
see if I hover over this clock, there should
be a tooltip. um above my window but if you look
closely it's actually behind my window so the
z order z axis is all messed up and i cannot
turn my screen off if i do turn my screen off
to save energy to save power when i turn it back
on the desktop will be all messed up and unusable
and the menu for shutting down so if i click
press here there should be like an overlay and
then when i press it again um the machine will
shut down this one doesn't work either so i have
to use my terminal and type sudo power off to
turn it off which i mean it's not the worst thing
in the world it's just annoying but the other
two are real problems so i haven't yet found
a good solution what i would love to be able
to do is use a composer like hyperland or river
and then use all these plasma panels on top of
it and then i would have my stream set up again
and maybe it will be possible in the future but
not for now and what do you think about single
app on the screen because you mentioned vsp i'm
on mac os and um i use a window manager let me
just show you my screen real quick okay and um
i don't know if you know the primogen or not
but i watched the video that he created in which
in which he talked about how he used i3 right
so i said interesting i like the idea of having
a single application on the screen at a time
right so i did my research and um i found this
window manager in mac os called yapai it gives
you two modes one of them is um bsp and the other
one is um stack mode right so stack mode is what
i have on the screen i have the browser you know
on the main area like this part here right the
where the browser is This on the right hand side
is the padding section of the of the window manager.
Right. So I only have and I like keeping that
that application there because I don't know,
I use it quite often. Right. But I have just
one thing on the screen at a time. If I switch
to YouTube, for example, that's the only one
there. Right. Or if I switch to the terminal
or to the browser. What are your thoughts on
something like that? Because I do get BSP, it's
nice, but you have to be managing applications,
right? Because otherwise, all of them open in
the same desktop, right? So if you open GIMP,
you have to move it to a different desktop and
all that stuff. What are your thoughts on that?
Yeah, there's something called monocle mode in
BSPWM, which is similar to what you're describing
right now. I never got the hang of it. So I'm
using regular binary space partitioning where
I open GIMP and then my screen is cut in half
and then I move it to a new desktop if I want
to. It works for me. Is it the best? I don't
know. Maybe, maybe not. I don't care. But you
got used to the tiles already, right? You find
them useful. Yeah. Yeah. Okay. Interesting. Okay.
And I noticed that the terminal that you were
using is Alacrity. Is there a reason why you
haven't switched to anything else? Yeah, not
really. What I do like about Electricity is its
VIA mode. I can show you what I mean. So if I
open Electricity and then I do like, I don't
know, something that's going to produce lots
of output like XBPS query, I don't know, SQL
or something. so you see there's a lot of output
and now i could use my mouse to select text but
as i said i don't want to use my mouse i want
to be or i don't want to have to use my mouse
i want to be able to use my keyboard because
when i'm using a terminal my hands are already
on the keyboard so i press a shortcut and now
if you look closely my cursor has changed its
shape and now i can move around the cursor using
bi keys i can select text And I can press, for
example, Y to copy this text. And I can then,
now it's on my clipboard, so I can do XBPS show.
And I'm like, okay. So I really like this VI
mode. I don't know if other editors can, other
terminals can do it. But for me, that's a killer
feature. And the other feature I like is that
electricity does support modern features, like,
for example, undercurls. Okay, let me try to
create something. So you see the grammar checker.
Yeah, I see it. The word checker doesn't recognize
this word, so it undercurls it. And before this
protocol was supported in Alacrity, it would
underline and then it would highlight the entire
word in pink, which again looks like Unicorn
Puke, but this one is much more. much more pleasant
so um yeah this is another reason why i like
electricity it does like some features like ligatures
but you know yeah i don't have it all i don't
use ligatures let me show you something real
quick i might use them if i had if i had the
ability but i don't and yeah it's like whatever
i do know ghosty is the new hot stuff uh i tried
it I mean, it's a terminal. It terminals like
it's not nothing special. And the big selling
point of Ghosty is that it's native. But unfortunately,
on Linux, native for the author means GNOME.
And I really don't like what GNOME is doing.
So that feature is completely mute for me. And
yeah, I'm not that impressed. I don't know. Maybe
I'll switch to it one day. I don't see any reason,
at least for now, that I would say I have to
switch to another terminal. The only reason,
you know, if you're looking at my screen, the
only reason why I switched to... I was using
anacrity and I was pretty happy because I don't
like tabs. I don't like anything. My terminal
should be just that, just a terminal. i don't
want anything else to be added to my terminal
right i never use the tabs that um ghosty provides
or western or other terminals because i don't
know i use tmux and that's something else that
i want to ask you about in a little while right
but the only reason why i switched to ghosty
well first it was um kitty Then it was Western.
And then I ended up in Ghosty. But this is mainly
the only reason why I'm in Ghosty at the moment.
It also works in Kitty and Western, right? So
image rendering, basically. And I couldn't do
that with Alacrity. Maybe it's possible nowadays.
I'm not quite sure. But that is the only reason
why I switched away from Alacrity. And what you
mentioned... When I'm in my terminal, yeah, and
I need to copy some text, I do it with Tmux.
I don't know who got the inspiration from who,
but Tmux has this called Copy Mode. You see the
little thingy on the right -hand side, on the
corner? I don't know if you're able to see that
there. Yeah, I can see it. Yeah, it's similar
to what it shows up in in electricity, right?
i can just copy stuff from the terminal i'm not
in neobim here right so same same thing using
bim motions and all that and uh yeah interesting
but what are your thoughts on tmux by the way
do you use tmux or no uh no i don't use it i
tried it once it was fine but i didn't like how
it would uh steal one of your keys from your
applications so it's by default if i remember
correctly control b and then control b is gone
control b is like the t -max key and it cannot
none of your other applications can read it and
that was annoying because i do use it in the
terminal a lot because of read line so when i
want to move my cursor back i don't use the arrow
keys Because then I would have to twist my wrist.
And control B is much easier to read, especially
if you have caps lock bound to control. And that's
the part I don't like about TMAX. I do have a
tiling window manager which does all the multiplexing
stuff. Not the multiplexing, the split windows
and stuff. Is that multiplexing? I don't know.
You know what I mean. Yeah, yeah. Okay. Okay.
So a tiling window manager does this part for
me and yeah, I don't miss it. Okay. And how do
you, uh, uh, what I wanted to say, um, sessions
and all this stuff, that's kind of cool, but
I don't need them. So if I had to use those,
I would probably use T max, but right now I don't
have to. Yeah. That was, that was going to be
my question. Like, um, do you use sessions? That's
one of the, Reasons. Well, that's actually the
main reason why I use tmux. I don't care about
the split paints It's just sessions, right? I
just like to switch in between different projects
Let's say that I want to go to my notes With
that single key map I can jump to them or if
I want to go to my that files or any other github
repo, you know Just like he press away. So I
define that kind of kind of useful and You mentioned
as well your IDE. We already covered this. It's
Neovim, of course. And do you use your own Neovim
distribution? Or you use your own config? Or
do you use a distribution? I use my own config
because, again, I come from Vim. And there have
been Vim distributions in the past, but they
were not very popular. It was only with Neovim,
especially with Lua. that we've seen this explosion
of distributions. And there's like a new, maybe
not so much nowadays, but there was a time when
like every week there would be a new JavaScript
framework and a new Neowin distribution. Okay.
I don't have a high opinion of those because
Neowin on its own is already a complex application.
And what a distribution is, it's basically someone
else's config. So you're taking... an already
complex application which you don't understand
fully. And then you're putting even more complexity
on top of it. It's like, what are you doing?
And I could understand it if it was a situation
like an IDE, you're starting a new job, you need
to be editing text, and then you need a working
setup right now. You don't have time to grow
your setup over the course of several months
or weeks. You need a working setup right now.
But for every language out there, there's already
an IDE which does provide this sort of thing.
So if you started a new Python job and you need
something right now, just pick PyCharm. I mean,
it already works out of the box. So the way I
did it, I first installed Vim and I didn't switch
immediately. I was first using it for small shell
scripts and configuration files. Then I would
identify what I needed. And then I would make
some small changes to my configuration and I
would grow it over time. But for heavy actual
programming, I was still using an IDE. Then over
time, I was finding myself more and more switching
towards Neovin. And eventually I just reached
the point where I didn't even need the IDE anymore.
And that was the point where I knew I had completely
completed the switch. I did make a mistake. Sorry.
i did make a mistake at the very beginning i
was searching the web for best vim plugins top
10 vim plugins and then i would just find all
this is like oh this looks cool this looks cool
this looks cool and i installed it installed
them all and then i i had this exact exact problem
i was trying to describe there my config was
i didn't understand what was going on yeah in
my config and then i i understood that You have
to sharpen your own saw as the author of Practical
Vim. It was Drew Neal. So maybe you've read his
book, Practical Vim. It was the book which helped
me. Yeah, it's actually a pretty good book. It's
quite old, but it's still relevant because it
doesn't deal with plugins and all. It does the
fundamentals of Vim, which are also still in
NeoVim. Anyway, he described it as sharpening
your own saw because you've got this tool Instead
of taking someone else's tool, you're modifying
the tool to suit your own personal needs. So
you're sharpening different parts of the tool
in different ways to make the ideal tool for
yourself. And I think this is one of the strengths
of Vim and NeoVim and other editors like Emacs,
where you shape the editor to suit yourself.
You don't adjust your own behavior to the editor.
You adjust the editor to you. Yeah, but... How
long does it take you to get there? That's the
point. And that's something that you brought
up as well, right? Let's say that you need to
start. Yeah, if you need to do it at work, just
don't start with NeoVM. Just use something that's
going to work right out of the gate, right? But
how long does it take you to set up your own
config? If you're just starting, I mean, it would
take me years, maybe not even months, years to...
you know set it up the way that i like it because
i don't know what i like and what i don't like
right a distribution allows me to see okay i
like how this is done i like this plugin i like
and i learn how things are done and then i can
use that information to maybe set up my own config
but if i start from scratch i wouldn't know what
i want you know yeah it's a good question because
do you ever know actually what you want no are
you is your configuration ever actually done
If you use that as your metric, you could say
that your Vim configuration is never done. You're
never going to be finished. Definitely, yeah.
For the rest of your life. But when the question
is, how long does it take to make a usable configuration?
Again, the question is, what is usable? And Vim
is out of the box pretty usable. If you just
want to use it as a terminal notepad, it's fine.
I mean, you don't have to do any configuration.
You can create your init .vim or init .lua, whichever
you prefer, leave it empty, and you've still
got a decent text editor. Now, you are probably
going to want to add some changes, like maybe
you prefer tabs for indentation and spaces for
alignment. It's one line. And then you find yourself
writing and you find, oh, escape is hard to reach.
I should maybe remap, I don't know, KJ to escape.
So you add another line. That's the one that
I use. And all this time, Do you use KJ as well?
I use KJ. Yeah. Exactly. Okay. And the point
is you keep growing your configuration and maybe
one day you're like, oh, I want to do Python
and I want to have this language server protocol
thing. And you could say that's a slightly more
involved setup. And how long is it going to take?
Like maybe a week. just for lsp it doesn't have
to be super fancy you're going to use features
the way they are off the box and it's fine and
sometime later like you could be two months later
you could say oh i want to have a fancy auto
completion plugin and then you add this one plugin
it's how long is it going to take like a day
two a weekend maybe the point is you don't have
to sit down and do it all in one sitting you
can spread it out over time What do you use for
completion? What is it called? CMP? You haven't
migrated to Blink? Not planning on? I don't know.
CMP works for me. One thing, there's going to
be inertia as your configuration grows. You're
going to find some local optimum where you're
like, okay, this works for me. I'm happy. Maybe
something else is better. but i don't feel the
need to change right now and you can keep the
setup for years and then maybe one day you've
got some free time and like okay let me try out
this blink thing if people like it and then you
set aside a couple of days you try it out maybe
like it you keep it if you don't like it you
switch back but it's not again it's not this
this thing where you need to sit down right now
and replicate your entire ide setup And that
would be, I think it would be quite a challenge.
And since your configuration is quite old, what
package manager do you use in U of M? Do you
use what was before LazyVim? What was it? Pacman?
No, no, no, it's not Pacman. It's Packer. What
is it? I don't remember anymore because I've
grown beyond package managers. What do you do?
I no longer use, I use Git submodules. I'm going
to show it to you. Yep, yep. So if you go to
cd .local share nvim site packages. So this one,
third party, is the one which I'm using for third
party packages. My plugins is for my plugins
because I don't use versioning for my plugins.
I just use them as they are. But if we switch
to third party. You can see there's these folders
start and opt. Can you make it a little bit bigger?
That's what she said. Yes, of course. Yeah. What's
interesting, if we go into .git modules. So this
is my package manager. My package manager is
git. So all these plugins, which I'm relying
on, are installed as git sub modules. I see.
And this folder, third -party, is just a regular
Git repository, which has a bunch of sub -modules.
Sub -modules inside. Okay. Yeah. And Vim will
find this directory automatically because I'm
using a standard NeoVim path, which is .local
-share, so data -home, and Vim -site -peg. And
then these names are arbitrary. So this is for
third -party plugins. This is for plugins I'm
not sure if I want to keep. I don't put them
here yet. And my own plugins. And how do you
update a package? I just wanted to come to it.
So one advantage is I can use Git to version
my configuration. So for example, you can see
in this one, I have removed metals and then I
had committed this change. So as far as updating,
there's this folder bin. And it contains small
shell scripts. We can take a look at it. So,
for example, update. This is how I update plugins.
And you update all of them at once or you just
go one at a time and decide how do you... So
the way git submodule update works is if I don't
specify anything, it will update all my submodules.
But if I specify any number of submodules, it
will just update those. So this is what this
variable does. It's a special shell variable.
which says whatever arguments have been passed
to the shell clip. Oh, okay. So you pass it as
an argument. Start, let's say, nvim -treesitter
or nvim -cmp. You see why I hate plugins which
start with nvim. Okay, I get it now. Yeah, so
please don't do that. Start, like, I don't know.
This one. So I can now update only these two.
Or if I don't give any arguments, it updates
all of them. I wouldn't even need a shell script
if I could remember the command. So I can just
type the command as it is. But, you know, it's
easier this way. For example, if I want to add
a package from GitHub, because GitHub is so common,
I just say add GitHub and then username and the
name of the plugin. And what it does, it splices
in the rest of the URL. Interesting. And the
question now is why? Why did you do it this way
and not with the package manager? So one reason
was I realized that package managers are not
doing anything else than using just Git submodules
or Git under the hood. So I figured I might as
well just use Git myself. And the other reason
is bootstrapping. If I'm moving to a new computer,
I want to get my text editor running. up as quickly
as possible. So if I use a package manager, I
would have to first install my text editor, then
somehow need to install the package manager first
before I get a usable text editor. I'm just skipping
this step right now because I can clone this
repository, do git submodules update checkout
to get all my plugins, and then my text editor
is working. So it's just cutting out one more
dependency. That is quite interesting. That is
quite interesting. All right. Thanks. Thanks
for sharing that. I'm pretty sure some people
is going to find that really interesting. I do
actually have a blog post on my blog about it.
Oh, really? You want to share your blog post?
Yeah, I can. Do you want me to put a link in
the chat or how do you want it? Yeah. Why don't
you show it on your screen and then you can send
me a link in the chat and I'm going to put it
in the video description. But if you want to
show it on your screen. Yeah, I'm sharing my
screen right now. Let's see. What was it? Submodules?
Plugin? Oh yeah, here it is. December 2021, that's
when I switched. Managing Vim subplugins without
a plugin manager. The same thing applies to Vim
and NeoVim as well, so I just wrote it for Vim.
But I was using NeoVim at that point already.
And yeah, you can read through it. I'm explaining
how the old, very old days used to work because
before we had plugin managers, you had to manage
your plugins all by yourself and you would dump
all the files into one common directory and then
it was impossible to untangle them again. And
then it explains how Vim package managers solved
this problem by putting different plugins in
different folders and then using the runtime
path setting. And then it explains Vim's native
package system, which is built in. and then so
all this is just build up to how i'm using this
native package management system to use git sub
modules to be yeah clever okay wonderful yeah
i'll definitely add that in the in the video
do you want me to send you the link and yes please
send me the link in the chat so that i can just
once i upload the video i upload the links i'll
put that link to your to the plugin and to your
to your blog post i noticed the file explorer
that you were using in neofim which one was it
and why are you using that one oh it's not true
as old it predates neofim it works for me no
particular reason okay it's just what you're
used to basically yeah exactly and your color
scheme what is it It's Solarized. I've kind of
gotten bored of it, but every other color scheme
I tried is more straining to the eyes. I keep
coming back to Solarized eventually. Mine is
painful for a lot of people because it's too
bright. But what about Groovebox? Groovebox is
another color scheme that my grandpa would use,
like I usually say. What do you think about that
one? I did try it once. I didn't like it as much
as Solarized, so I switched back to Solarized.
Actually, I should correct myself. What I'm using
is not Solarized, but Salinized, which is basically
almost the same, except for some minor adjustments
to the colors to make it, I don't know, supposedly
more pleasant to the eyes. I don't know. I kind
of like it slightly better than Solarized, but
it's basically the same thing. Okay, wonderful.
And what do you use to push to... whatever version
and control system you use to github or whatever
you use just git commands or do you use a tool
like lazy git or something i do use git uh from
the command line because that's how i learned
it i i used to be a big gui user back then when
i learned git but the problem with guis is they
present you all the options at once and it was
just overwhelming for a complex system like git
and then i tried learning i figured i might I
would have an easier time first learning it in
the terminal because that's the canonical way
of using Git. And then I thought I had learned
how to use it in the terminal. I was like, okay,
well, this works fine. I don't need GUIs anymore.
I do use Fugitive in Vim and NeoVim because sometimes
having a GUI is actually nice because I can stage
files by just pressing a key. So I move the cursor
on the file name and then I press key. and then
staged so that one's nice as well but it's just
these two okay okay wonderful and do you use
ai or not at all what are your thoughts on ai
uh not at all yeah i've been thinking about ai
recently because i talked someone to who does
actually use ai successfully um so until recently
my opinion of ai was it's slop and it sucks But
obviously it does fulfill a need people seem
to have. And I'm not just talking about beginners
who don't know how to program and then like,
oh, I'll have the machine do it for me and then
I don't have to learn it. That's a bad attitude
to have. But even people who are skilled programmers
are apparently getting some value from AI. And
I've been trying to think about what exactly
is the value of AI. I think it's the idea of
having a more expressive language, because at
least personally, I don't enjoy writing code.
I do enjoy thinking about problems and creating
useful things, but the process itself is not
what's enjoyable. So anything that can help me
write less code is good. Now, the problem with
AI is twofold. First of all, you're using a very
imprecise input language, so it's natural English.
whatever language the regular human language
is. And human languages are ambiguous. So this
is one problem. And now you have to fight your
AI because your AI can misunderstand you and
does the wrong thing. And now you have to argue
with a machine, which is absurd, pretty absurd.
But, you know, what is the alternative? So the
alternative would be some very strict, formalized
language, at which point you're back to programming
languages. And the other problem I see is you
are giving your input in one language, but the
output is another language. It's code. So if
we imagine the AI being a compiler, which takes
an input from one language and then translates
it to a different language, it would be like,
imagine if you could only write C, but save only
assembly code. So you wrote some C code, but
then the output is assembly. And then when you
want to keep editing your program, you no longer
have the original C code. You just have assembly
code. So you have to figure out what the assembly
does and then talk to your compiler again in
C. It's quite a mess. I think there has to be
a better solution than the fuzziness and the
loss of source code that's AI. i think we need
to rethink programming languages to be more expressive
i'm working as a web developer and i hate writing
javascript and i think a lot of people hate writing
javascript because most of the time i'm trying
to do something really simple which should be
built into the ecosystem so what really what
i do want to do is i want to declare what i want
so i don't i want to say make me a sandwich i
don't want to say go to the kitchen or um take
cut two slices of bread open the fridge take
out some cheese like some sort of snippets right
like you give it a snippet exactly and it'll
do exactly what you want it to do but snippets
again have the same They don't have the ambiguity
problem of a natural language, but they do have
the source code loss problem. Because if I type
a snippet and it outputs 20 lines of JavaScript,
the original snippet is gone. So now I have 20
lines of JavaScript. And in web development,
there's two pretty cool libraries called HTMX
and AlpineJS. And what they allow you to do is
you express what you want to happen, not how
you want it to happen. in the form in the form
of javascript of html attributes so for example
you have a button and you want some text to update
so um let me switch to lpjs and i can show you
the example yep yep i'm gonna switch to your
screen right now so there should be a demo somewhere
okay here's the button so you press the button
And then a number gets incremented, and then
the text adjusts. So this is all I'm trying to
do. Now, it's not hard to write this in JavaScript,
but you have to write a lot of glue code and
very imperative code, which go to the kitchen,
cut two slices of bread, open the fridge, take
out some cheese. I don't want to do this sort
of thing. And what Alpine does, it says, okay,
I define a variable. This variable exists. I
define a side effect on my button. The side effect
is increment the variable. And I define the text
of this span element is whatever this variable
is. Exactly. So it's very declarative where I'm
saying these are the things I want to have, not
how I want. I don't have to write all the low
level logic. And this example is pretty trivial,
but you could, for example, imagine having like
some sidebar. and a button to toggle the sidebar.
I don't want to write all the code to find the
ID of the sidebar and then hook it up to a button
and then have some sort of variable. All I want
to have is a button, and this button toggles
a variable, and the state of the sidebar, whether
it's shown or hidden, depends on this variable.
So really, all I want is these three lines. And
no AI is going to be more concise than... this
and i think the real value is so how do you put
it i would say if you have to reach to for ai
your tools are not sufficiently good enough you
need better tools or you need a better language
now obviously um i can say that but i need to
write this code right now i cannot wait five
years for someone to create something like alpine
js or i don't know maybe not five years but like
half a year or whatever i need to solve this
problem like right now so i do understand why
ai does have value for people but it should be
treated as a stopgap solution okay nice thanks
for sharing I absolutely recommend Alpine .js.
It's pretty cool. So if you are doing web development
and you find yourself having to use one of those
heavy frontend frameworks like React, give Alpine
.js a try. How does NeoBeam work with JavaScript?
Do you have any issues? Works just fine? Works
fine for me. There's a language server out there.
I set it up. As I said, I don't like writing
JavaScript. I want to write as little JavaScript
as possible. So for the amount I'm writing, I
would be fine even without a language server.
Okay, wonderful. All right. I did actually use
Write React at a previous job, and there's a
lot of good language server support even for
heavy stuff like React. Okay, so you don't need
to use a dedicated IDE. It all works fine. No.
Okay, wonderful. Yeah. are you working on any
other projects besides the plugin and your blog
post anything else you want to share uh nothing
particularly for showing off i'm currently learning
elixir because it's a really cool interesting
language which has a lot of properties which
other languages are have to fight to bolt on
it's built in into elixir and airline and in
general i'm doing web dev stuff i've already
mentioned hd max and alpine there's a new library
called data star which tries to do what both
of these are doing in one and it claims to be
more lightweight so definitely something to worth
looking at looking into okay okay thanks for
sharing that um do you have any favorite cli
tools I don't care if they're 2Es or CLI tools,
whatever is on the terminal. For me, it's just
a CLI tool. Do you have any that you want to
name? Neovim, obviously. And yeah, all the Unix
stuff like Org and so on. But if I had to pick
something that's not standard, I would mention
JQ, which is sort of like a small language for
processing JSON files. So let's say you have
an HTTP JSON API. you get some massive JSON response
and you only care about a certain section of
it. If you had to open the JSON in your text
editor, you would have to dig around through
it, use some search and so on. But JQ is a small
language that lets you specify exactly what you
want. And then it runs through over the JSON
and gives you exactly what you asked. Like grep
for JSON, right? yeah exactly the problem with
grep is it works on lines and json is structured
data it's not just lines of text and for example
in order to save space the server might put all
the json on one line and then you can forget
about grep but jq actually understands the json
structure okay wonderful do you have any favorite
applications on void linux besides like desktop
applications like regular yeah not really i mean
i like free tube if you want to watch youtube
without all the bloat and advertising that's
nice um trying to look through my application
see if there's anything yeah the regular kde
stuff i like kde but no i don't think there's
anything particularly interesting i'm doing most
of my work in the terminal because i'm a pro
programmer yeah i figured yeah and do you have
any favorite neovim plugins besides yours yours
doesn't count yeah i do like neotest which is
a plugin for running tests inside neovim so you
you want to show you yep yeah so if i try type
neotest uh what was it summary yeah So I get
this panel. It zooms out slightly. And then I
get this tree view of all my tests. And let's
say I want to run this test. I press a key. There's
a reason it's all red. So you see, I'll get all
these checkmarks and I can open individual tests.
So let's say I want to break this one. Now I
rerun the tests and now I get an error. I can
open the report. And what's cool is I can also
set a watch. So you can see there's an eye icon
now. And if I edit my test and save the file,
it will rerun those tests automatically. So I
don't have to switch and manually run them. so
if you like to do a lot of testing or even test
driven development this is a really indispensable
plugin and i do actually use a lot of testing
at my work at day job and even for rainbow delimiter
so you can see there's a lot of tests going on
here because it's a large plugin yeah you want
to have lots of automated tests okay okay neo
test is one of them and do you have any other
favorite ones Let's say I do like Fugitive, the
Git plugin. You know what? Let me go through
all my plugins and see if there's an interesting
one. So Fugitive. uh telescope yeah telescope
everyone else telescope that's one that's nice
uh there's lots of these quality of life like
for example to auto insert matching the limiters
so i don't have to close my parentheses okay
uh yeah snippets obviously snippets are really
useful use them yeah i like this one because
it's like it's this um file browser and you're
um buffer dear wish from justin from neovim maintainer
oh yeah this one is great uh window manager mode
so normally let's say let me let me open a couple
of windows you have to press double control w
and then another key to do something and if you
want to resize windows you're like control w
underscore control w underscore and you resize
your window one line or one i don't even remember
yeah one line at a time so what this plugin does
is i can press the key binding now you see down
below it says win and now i'm like in some window
manager mode so i'm not no longer pressing ctrl
w and instead i'm using vi keys to navigate and
like i can do shift and hjkl to resize my windows
i can swap windows yeah so this one is really
handy because um i don't have to press as many
keys so it's oh let's see and these are just
vim splits right these are just neo vim splits
yeah these are windows we don't call them split
we call them windows okay uh yeah but they're
regular windows okay yeah obviously dub so nvim
dub for debugging this is a big one and w i for
uh Do you have your config publicly in your .files,
or is that private? Yes, I do. It's public. You
can look at it. It might not be useful for you,
or maybe it is. It's mostly just pick the parts
you like, but please don't copy it, because it
works for me. It might not work for you. Oh,
no. Just for folks that are watching. Yeah, certainly.
If you're curious. It should be nvenconfig. Yeah,
that's the one. So it's on GitLab. I don't know
if there's a GitHub mirror. License is MIT, but
you don't have to give attribution. I should
eventually realize it under the unlicensed. If
there's anything you like, just copy -paste it.
Okay. All right. Thanks for sharing that. Last
question that I have here. Do you have a home
lab? What are your thoughts on home labs you
like? Home labs are pretty cool, but I don't
have one. It would be cool to have one. I just
can't figure out which hardware to buy. There's
a lot of stuff and I'm not much of a hardware
guy. I'm afraid of buying the wrong thing because
when you have software and you pick the wrong
software, it's like, okay, I didn't pay for it.
Whatever, I lost some time, but who cares. But
when you buy hardware, first of all, you bought
the wrong thing, and now you have this thing
collecting dust in your closet. Just annoying.
What I have switched to in the recent years is
these microcomputers, which are the really small
ones. These ones, have you seen them? No, I'm
not familiar. How expensive are these? You can
get them on eBay used, of course, right? And
not too expensive. It depends on the RAM and
CPU that you get, right? But for example, I have
three of those. I'm sorry that this is white.
It's probably burning your eyes. But I have...
I'll be fine. I have three. I don't have enough
memory anymore. This one is 64. the other two
are 32 gigs each one for for what you get if
i would get a server with 64 gigs of ram i would
need to spend thousands of dollars you know but
these are quite decent they're not supposed to
handle 64 gigs of ram because the manual says
that they support up to up to 32 but they work
fine right so you can upgrade them quite easily
and um yeah i think if i would start with the
home lab i did start with the raspberry pi but
that became not too useful too fast you know
because the resources that you get you're gonna
try to run a lot of stuff so it's not gonna be
enough so if i would start today with the home
lab i would definitely go with one of these not
a huge desk uh computer like the the big ones
because one too much power two a lot of noise
i don't know these are perfect i think for a
home lab that's just my personal opinion of course
yeah yeah i'll keep it in mind yeah and uh finally
i just want to quickly go over your plugin if
that's okay with you over by what I want to quickly
go over your plugin. I want to install it and
just... Oh, plugin. Yeah, your plugin. So let
me switch here to my .files. You can see my screen,
right? Yeah. Okay. Let me go to the plugins.
I'm just going to use one of these. Rainbow delimiters,
right? okay i'm just gonna get rid of all this
okay so what do i have to do just as someone
installing the plugin for the first time then
uh the first thing you're going to do is read
the readme and if you have trouble then it means
i need to fix something all right install it
like any other new plugin tree sitter parser
for each language i do have those okay so i don't
know how you install neovim plugins but whatever
method you use it should work out of the box
okay just raider installation right let's see
exactly gonna grab this i don't like it when
plugins put instructions for like five different
plugin managers because um when i see that It's
just noise. And when there's noise, my brain
skips over it. And if there's actually useful
information, like some extra step you need to
do, it gets lost in all that noise. So what I
do is just say, install it like any other plugins.
And then if there's anything additional, I put
it in a second sentence. That way, this important
information does not get lost among all the noise.
So these are defaults. It says here that no configuration
is needed. Exactly. Okay, so this comes by default
already, right? Yes. Okay, let me see then. I'm
just going to quit out of NeoVim. Well, basically
restart it. Let me see if I get the cutters now.
Okay. and is it colored in yeah i can't see it
yep is it too small i know uh and it's fuzzy
so oh yeah i can see now the right the premise
is different than the curly brace yep yep they
are colored now and it's using my i don't know
i have a weird um color scheme so but it's picking
up those colors right that's that's exactly what
i see okay Yeah, all of them have colors. Let
me see if I open, for example, another file.
Yeah, this has colors. You can see, for example,
Darwin, Linux, Star, those delimiters are not
highlighted because the plugin understands that
these are not actually delimiters. Oh, okay.
Because it uses TreeSitter. Okay. Interesting.
Okay. and uh do you have some html maybe i don't
think i have no i don't have uh or try json maybe
let's see i have some json here let's see yeah
this one json c i think it is yeah but i do see
the colors here as well yeah interesting okay
and try typing inspect uh try typing the command
inspect tree and i wonder if this one works yeah
you you do have colored parentheses now in three
sita queries as well okay i see all right wonderful
and for for people that want to modify the highlight
groups you have them listed here i think these
right yeah but you shouldn't read the readme
the readme is just a little teaser if you really
want to know how to customize the plugin you
should read the manual so if you switch to your
editor back and then help type help rainbow delimiters
rainbow dash delimiters help rainbow delimiters
this one yes so there's a pretty large manual
you don't have to read all the parts of obviously
but for different settings like colors strategies
you can even define your own queries for example
there's a file type which i don't support you
can define it first in your own configuration
before submitting a pull request or if you disagree
with me like do you have you have a different
opinion on what constitutes a rainbow delimiter
you can just write your own query and you don't
have to be beholden to my choices because i tried
to come up with with what i think is reasonable
but different people have different opinion okay
okay so everything is documented here then wonderful
here are the different highlight groups okay
all right yes you can redefine those or you can
define your own highlight groups if for example
you're color theme has already its own rainbow
colors you can swap those out okay wonderful
yes it's pretty simple pretty straightforward
then we covered a lot of stuff in the call i
ask a lot of questions that's like the goal of
these calls right so just to get to know the
the other person a little bit more right because
i don't know i like having these type of conversations
hope um you had some you know fun time with the
call oh yeah definitely yeah that's that's basically
it do you want to add anything before we finish
the call not really so yeah have fun and as you
said uh try reading documentation and if you're
still having trouble then open an issue because
i consider documentation that isn't clear or
has problems the same as having a bug so okay
great If there's anyone watching, if you like
this type of content, let me know. I'm going
to post this in the subreddit. Well, I'm going
to post this in the Neovim subreddit. Let's see
what people says about this. So again, thanks
for joining the call. Hi fish, right? Yeah. Thanks
for having me on. All right. So I'll see you
then. Till the next time. Yeah. Bye -bye.