if someone wants to use lazy or whatever i am
again this is like do whatever you want i'm not
the boss i'm not like your editor mom or dad
right like i'm not going to come like knocking
on your door saying how dare like so people will
do is they'll say okay local foo equals require
my plugin dot sub module dot foo right and i
understand people do this because this is if
you're writing like rust or or JavaScript, right?
This is what you do. You import modules at the
top levels that you can refer to them by a shorthand
in your function. But in Lua, what this does
is that when your code is executed, you are calling
this require here as soon as the script is executed.
It's not happening when you call doStuff. It's
happening when the file is loaded. So this is
an area, this is, I think, one reason that this
has been more of a problem in Lua is just because
People naturally want to do this pattern. And
again, I understand why. But that ends up hurting
the lazy loading, right? Because you're not lazy
loading it now. You're loading it up front instead
of on demand. 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
Linkarzu. 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, Greg. How's it going? Hey, Christian.
Good. Glad to be here. Yeah, second time you're
in the channel. The previous time was with TJ,
CT, and Josh. Yeah, the new event for CMAX. That
was a good time. Yeah, they actually had a call
with an EMAX power user, I would say, or contributor.
His name is Brot. Everyone talks about Proud.
Have you heard about him by any chance? No? I'm
not super tuned into the Emacs world, though.
No? Yeah. Pretty interesting conversation. So
really appreciate that you're here, Greg. Thank
you very much for your time. It's Friday. What
time is it where you're at, by the way? It's
6 p .m. I'm in central time in the U .S. Oh,
okay. So the reason we're doing this call is
just to get to know Greg's... workflow and talk
about neovim ghosty a lot of other other topics
okay so just to give a little bit of context
would you mind sharing who you are like are you
a neovim maintainer ghosty maintainer just hear
about you overall sure um i'm i'm greg i go by
gp anders online a common misconception is that
my last name is actually anders not anders I
have the P in there as my middle initial. The
reason for that, actually, is because back in
2015, circa 2015, when I was trying to buy a
domain name, I, of course, looked for ganders
.com first, and it was taken. But GP Anders was
available, so I just took it, and I've been GP
Anders ever since. So your last name is Anders,
right? Yeah. Okay. That's right. Okay. People
think it's Panders. yeah yeah on uh we have like
a little you know neo them chat uh where like
the maintainers and some contributors hang out
online and my nickname on there is panders or
just people cases soon that's my last name um
anyway the i guess most of your watchers would
probably if they know me would know me as uh
as a new core maintainer the role that i've had
for almost four years since late 2021 or so.
My contributions in NeoVim are pretty broad and
have varied over time in terms of how active
I've been. But I've worked on everything from
the LSP client, tree sitter improvements, to
kind of some small features like editor config
integration. One thing that I'm particularly
really proud of is the new file type implementation
was something that I helped contribute to originally
the project local configuration that NeoVim has
now. We can talk about that actually later because
I think that's kind of an interesting, semi -interesting
story, but allowing you to have XRC files, what
they're called. It's like files within a project
that you can run in a secure way. Yeah, but kind
of all over. But my biggest area of focus, though,
I guess, in NeoVim is kind of in the terminal
area. So both NeoVim is a better terminal. And
then the fact that NeoVim itself doesn't have
to be, but often is, a 2E application, an application
that runs in the terminal. So we have to understand
the terminal as an ecosystem, or excuse me, as
a platform, and what features we have available
and how we can take advantage of those. So those
have been... That's the area that I enjoy contributing
most and I think I've spent the most time contributing
to over the last couple years. Okay, and on the
ghosty side? The ghosty side, yeah. I joined
the ghosty beta back in 2023, I want to say.
It was relatively early stages then. I will totally
admit I was shameless about it. I joined the
Discord and said, hey, I'm a NeoVim contributor.
I would love to try ghosty. And Mitchell used
the power. I did. I don't do that often. And
to be honest, there's not many scenarios in life
where any of them gets me a ticket into anything.
Right. So this was one of the only possibly the
only time that will ever happen. But Mitchell
is a new user. And so he let me invite. And at
the time, there was still a lot of low hanging
fruit in terms of features and things that needed
to get done. And so I just started sending PRs.
And for a very brief period, I was one of the
top three contributors, although my activity
in the past year has declined substantially.
I still hang out in the Discord and try to be
useful where I can, but I've definitely kind
of taken a backseat there. Okay. And how did
you get started with all this? Would you mind
sharing a little bit about your background? Did
you start with computers early in life? Did you
go to school and it was computer oriented? Or
how did your love for what IT overall started?
Computers in general, I was a child of the 90s
and early aughts. My brother and I played a ton
of video games. So we were familiar with computers
in that sense. We were the family technicians,
right? DVD player won't start. I mean, I'm old
enough to where the VHS player is working, right?
How do we hook that stuff up? That's more like
electronics, I guess, and not much computers.
My first experience to actual computer programming
was when I was a teenager, and I was really at
the time into World of Warcraft. And one thing
you can do in WoW is write these UI mods to affect
the way that the user interface looks and stuff.
And that's all done in Lua, which is kind of
funny now. I didn't write a lot of Lua from U
of M now. So I started writing these UI mods
for World of Warcraft, and that was the first
code I ever wrote. So Lua was my very first language,
which is kind of funny now in hindsight. But
after that, I didn't study computer science in
school. I majored in electrical engineering.
I think we had one semester of programming in
C++, but I went through all of my undergrad not
expecting to be a programmer. I didn't think
of myself as a programmer or as a software engineer.
I didn't really know what I wanted to do. I just
figured I would do something in engineering,
but I wasn't sure what that would be. And then
when I graduated, I don't really understand how
this happened, but I interviewed this company
that was like a technology consulting firm, and
they did a bunch of Web development stuff. And
I got hired there. So I remember actually in
my technical interview, the interviewer asked
me how well I knew JavaScript. And I told him
that I had done a little bit of Java in school.
Is that the same thing? Or is that similar? Which
obviously anyone who knows about those languages,
that's laughable to even ask that. But that's
the level where I was when I interviewed here.
But I guess I did it well enough in my other
interviews that they figured, okay, this guy
can learn on the job, and they hired me. So I
went to Code Academy and a bunch of that stuff
and learned JavaScript and HTML and CSS and stuff.
So yeah, that was my first job in 2015. I was
22 years old. I was writing Java. It was very
enterprise web stuff. So Java... Java Spring
on the back end. The front end was JavaScript
pages, JSPs, which is such a gross old technology.
At the time, the hot new thing was Angular. Angular
1 was the cool thing that the cool kids were
doing. React wasn't even a thing at the time.
So I did that for about a year, and it took me
about that long to realize that that's not what
I wanted to do. So I left that job and went and
got a master's degree in aerospace engineering
as a way to kind of thinking at the time, okay,
I want to go work for like SpaceX or NASA or
something, right? Like that was like the dream
job. Since we're swapping embarrassing interview
stories, before I went to grad school, I tried
applying. I applied to SpaceX for one of their
like flight control software positions or something.
And it was, the job was for C++. At the job that
I had, we didn't do any C++. It was JavaScript
pretty much almost exclusively. And in the technical
interview, not even the technical interview,
it was like the screen call for this job. The
interviewer asked me, she was like, I just had
six basic C++ questions. This is just to make
sure. And then we'll go through the next part.
She asked me the first three questions and every
single one of them I had to say, I don't know
the answer to that. I literally didn't even know.
I couldn't even guess. And she stopped the screen
call halfway through. I was like, okay, I think
we have what we need. So I was so embarrassed.
I literally could not have done worse. I didn't
even get a single question right. So I was like,
okay, I'm not going to get into this job as I
am now. I need to go get more training. Going
to graduate school and getting a master's was
kind of a hack. Okay, so my thinking was, and
this ended up working out and being true, if
you want to pivot your career, so at the time
I was doing web tech, right, and I wanted to
do embedded aerospace stuff, right? But if I
were to just apply for a job, I'm not qualified,
and I'm being interviewed and hired as an experienced
candidate with no experience, so I don't even
get considered. But if you go through school,
through college, and then apply, you're hired
as a recent grad. And they don't care if you
don't have experience. So that was kind of like
my workaround for not having experience. I just
went to grad school. And I was fortunate enough
to have it covered with scholarships and stuff.
And then when I went and applied for jobs, even
though I didn't have relevant experience, I mean,
I had some, given the academic background. But
they didn't care that I didn't have experience,
right? Because I was a recent grad. So I did
not go and work for SpaceX. I went instead and
worked for Sandia National Labs in Albuquerque.
I did work on space stuff, though. I worked on
electronics for satellites. That was a super
interesting job. I ended up getting a top -secret
security clearance and everything. So I was working
with FPGAs, writing super low -level embedded
code. One thing that... me and some other co
-workers spent a lot of time working on was this
heterogeneous, the fancy name is like a heterogeneous
computing platform, right? And what that means
is you're on an electronics platform that has
maybe like a GPU and a CPU, or in our case, it
was a CPU and then your FPGA stuff. And we ended
up implementing something kind of like CUDA,
for your viewers that are familiar with CUDA,
where you can accelerate some algorithms by offloading
it off of the CPU onto dedicated GPU hardware.
In our case, it wasn't a GPU. It was an FPGA.
So we had these really, really intense image
processing algorithms that we needed to perform
really, really fast on relatively low power hardware.
So we implemented these algorithms in the FPGA,
parts of them anyway. I apologize for my dog
barking. It's fine. It's fine. Hopefully that's
not too annoying. But anyway, and then we would,
on the CPU part, we would write the code such
that, like, that really, we could, like, parallelize
stuff onto the FPGA and then get the result back
out. So we ended up, like, recreating, like,
a poor man's queue from scratch, which was super
interesting. I learned a ton from that. And we
applied for a patent and got it patented. So
I do have one patent under my name from working
there. But I really enjoyed that job, but I did
not enjoy having a security clearance at all.
So after about five years, I left that and went
and worked for a startup called Reliable Robotics
that was working on autonomous aircraft. So little
cargo planes that fly themselves. That was also
embedded focused. Loved that job. Great people,
good company. But I had an opportunity. through
a competence that worked at Cloudflare. They
let me know that they were looking for a role
and position, and it was too tempting to pass
up. So I ended up taking that, moving to Cloudflare
a little over, or almost a year ago. Actually,
it'll be a year in just a couple weeks. It's
my first anniversary at Cloudflare. So I've been
there ever since. Yeah, that's the short version,
the quick version of my professional history,
anyway. I guess in terms of open source stuff,
yeah, I got involved in that. Actually, I don't
know. You can edit this part out. I'm going to
take a break to see if you have any questions
for me. I've been talking for a long time. Did
it affect you when they rejected you in SpaceX?
Did it affect you? Did something happen or not
at all? It did affect me. I mean, I was super
embarrassed. I felt really ashamed for a couple
of days. I can laugh about it now. I'm not embarrassed
to tell the story, partially because I know C++
much, much better now. And I would totally breeze
through that interview today. So I don't mind
sharing a failure in the past now that it's been
a few years. But no, at the time, it was brutal.
I mean, I don't know that I'd ever failed at
anything that badly before. it was very humbling
for sure. And I think I was very discouraged
by that. Like I was like, yeah, that definitely
was kind of a motivation killer, but not permanent,
thankfully. But yeah, it was pretty demotivating
for a little while. Yeah, you moved on. That's
great. Yeah. You were going to continue with
open source as well, right? You want to share
your background history there? Sure. Yeah. Let's
see. When I was at that first job at that technology
consulting firm, I'll talk about my editor history
too, I guess. The big one at the time was Adam.
Adam was the really popular one. So folks that
paid attention to editors over time will know
Adam as the precursor, spiritual precursor in
a sense to VS Code and also in a sense to Zed
because the same people that started Adam went
on to start TreeSitter and today Zed. But at
the time, Atom was the big one. But I also learned
Vim, the basics of Vim. I didn't use it as my
main editor, but I knew it well enough to navigate
around and edit files and stuff. When I was in
grad school, I was writing a lot of C++, and
I started doing some research. Okay, what's the
best IDE for doing C++? This was still at the
time. I don't think VS Code had swallowed the
world. So I didn't just default to VS Code. So
I was doing some research on what's the best
IDE for C++. And people talked about, there were
some mentions of NetBeans and CLion. And I tried
both and didn't really click with either. But
then there was some Stack Overflow comment that
was like, just use Vim. Vim is perfect for it.
And I was like, OK, I guess I could consider
it. And that was the moment, basically, where
I started using Vim full time. uh from from then
on so i you know installed some plugins uh it's
actually kind of crazy to think how far it's
come since then at the time lsp wasn't a thing
so if you wanted completion in vim there was
this plugin called you complete me which i think
is still around uh and it uses like a third like
a separate process and i think it's like written
in python to talk to i actually don't know how
it works it's black it's pretty fancy but at
the time i remember installing that and it blowing
my mind like the fact that i could i could have
auto completion and vin was like it was like
unreal to me it was like insane um and then after
that i just i kept just kept using kept using
them uh so i i used basically just regular vim
for for a long time i think i try like looked
at NeoVim, but if I used it, I basically used
it as if it were Vim without really understanding
what the differences were. And it was around
this time that my very, very first contribution
to NeoVim was made, and it had to do with a Python
provider or something. Like PyInf, I don't know,
something really archaic and lame like that.
And then, let's see. and then i don't remember
oh you know what it was it was it was around
the time that neovim the neovim 0 .5 release
came out and there's a lot of hype around it
i don't know how i heard about it but this was
like okay the lsp client is coming out of you
know it's going to be shipped lua is like a first
class citizen there's all this buzz and hype
around the 0 .5 release and so i finally went
and looked at it and i was like all right like
this looks like I can see enough differences
between old Vim, regular Vim, and NeoVim now
to be like, okay, it's worth switching and taking
advantage of some of this new stuff. So that
was when I made the switch to NeoVim. And then...
I have a question for you. How easy is it to
debug C++ in NeoVim? Do you do any debugging
at all or no? I don't do it in NeoVim. there
is like the debug adapter protocol and a fellow
a co -maintainer of new event maintains the plug
-in for that uh matthias is his name i'm i'm
not even trying to pronounce his last name because
i'm 100 say it wrong uh i think it's like fusenegger
i think it's it's like german or austrian so
i'm not sure i pronounce it sorry matthias uh
but he maintains that the plug -in i have tried
it i have never really been able to get comfortable
with the debugging inside of the event thing
c plus plus and c has gdb and lldb which for
me work great so i just use that and it's i'm
perfectly happy with it so i don't have any complaints
there gdb is kind of like neovim in the sense
that it's a power tool it has a pretty steep
learning curve but like once you get a little
bit up the learning curve and get past the initial
discomfort and scary like the fear of using it
it's just an extraordinarily powerful tool and
it's that's also like vim is scriptable so you
can make it do anything you want um so no i'm
i'm a big gdb could be better for sure like it's
not it's not perfect and there are other debuggers
that um improve upon the experience but i generally
speaking if i can use gdb i'm pretty happy and
i can usually find get what i need out of it
oh okay now would you mind sharing a little bit
about the new of him history i don't know if
you know the history about it or not but i didn't
know that lua was not a thing back in the back
in the day any of him i had a call with um the
harper language server creator and i think he's
the one that told me that before lua and i was
like before lua was there any of him without
lua do you know anything about that a little
bit i wasn't around then so i can't speak from
experience it's just what i've just read myself
The project was initially started by a guy named
Thiago Silva, who's no longer involved. He's
still around. I sometimes see his comments on
Hacker News. He's still in the community. Where
is he from? I want to say, I'm pretty sure he's
from Brazil. Okay, yeah, because the real terminal
maintainer said in the call that I had with him
that Neobim was started by some Brazil guys,
correct? Yeah, at least Thiago is from Brazil.
I don't know. by his co -conspirators. The lore
is that there were some patches that were sent
to the Vim dev mailing list about adding some
support for async and job control. And the patch
proposers were not happy with how long it was
taking. This is where, I guess, opinions on what
happened. very and you can find like the thread
on the vim dev mailing list there's not like
any drama i'm trying to make it sound like there
was just some something juicy happened but essentially
that was kind of where the fork occurred is i
think some people were frustrated with the development
process of vim that there was a single bus factor
in bram uh development was slow because nothing
got done unless bran was involved so the the
The creation of NeoVim was partially spawned
by wanting to add new features and also wanting
to change the contribution model, which it has
done successfully. And somewhat ironically, Vim
has also done now the same thing. But yes, in
the early days, Vim and NeoVim were extremely
similar. Some of the earliest things NeoVim did
from Vim was introduce some third -party libraries
instead of doing vim is almost almost entirely
homegrown it's very much like an nih thing right
and i think that's because it was bram mulinar's
pet project his baby right so he for him it was
fun he wanted to do all this stuff himself uh
but it was it made maintenance really hard and
the code the code base was a little bit messy
so one of the first things that the new product
did was to take out some of the the custom vim
stuff and replace it with well -established third
-party libraries. So NeoVim uses libuv, the same
event loop library that Node .js uses, to do
its event loop management. That was one of the
first things that NeoVim did. NeoVim wrote and
replaced its own VimScript parser. NeoVim's VimScript
parser is different from Vim's. NeoVim has a
different state management file. So NeoVim has
a file called shada, or shared data. which is
what keeps track of... But when you exit NeoVim
and start it back up, NeoVim remembers some things,
like marks and history. All that is stored in
this shared data file, and that is different
from Vim. So there's a lot of stuff that changed
early on. Some features, like the ink command
feature, where if you write a substitute command,
like colon S or whatever, you see it happen live
before you press enter. That was a feature that
NeoVim... added, like one of the very first things
it added. So yeah, there was a lot of stuff even
before Lua. So Vim also supports Lua, by the
way. So Vim supports a number of different languages
through these different interfaces. But it's
all done through these hooks, I guess is kind
of a way to describe it. And Vim calls them interfaces,
like a language interface. And people would use
these to write plugins. So there were a lot of
plugins written in Python for Vim. using this
Python interface. But it was always kind of a
pain in the ass because it wasn't guaranteed
that your version... Vim had all these different
compile flags, right? So you could enable or
disable features at compile time. And if your
version of Vim that you got from your distribution
or whatever was compiled without Python support,
you were out of luck. You couldn't do anything
about it. You had to go recompile Vim yourself.
So it had to be compiled with Python and compiled
with Ruby support and Lua support. So NeoVim
also did away with all that, and it has this
concept of remote plugins instead, and using
message pack RPC is another difference between
regular Vim and NeoVim. But Vim supports Lua
through this Lua interface, although, again,
it has to be compiled in, and it's kind of a
mess. NeoVim did the same thing at first, supported
Lua in a slightly more robust way, but there
are a lot of things you still couldn't do in
Lua. in the 0 .5 release lua became like um a
much more prominent like you could use it for
your init file you use it for plug -in files
um like that whole like being able to require
modules really easily became much easier to do
so yeah the 0 .5 release was where lua became
like lua today neoman and lua is like they go
hand in hand But the vast majority of Neonium
users write their configuration Lua, but that
wasn't always the case in the early days. And
what are your thoughts on Lua? I know, I already
know, but for people that don't know, how do
you feel about Lua? I think Lua is a great example
of the design philosophy of doing a lot with
a little. So Lua has very few concepts to understand.
As far as data types, there's numbers, strings,
tables, and functions. And I think that's it.
So there's no difference between an array and
a dict or a map, right? It's all just tables.
Its standard library is also very small. And
the reason it's designed this way is because
Lua is designed to be an embedded language. This
is why it was there in World of Warcraft back
when I was a teenager, is because it's so small
and easy to embed into other applications. It's
very common and very popular in video games.
It's popular in editors, right? It's popular
in any environment where you want to provide
scripting capability without... pulling in like
a huge heavy language so lua is intentionally
small it's designed to be small and it's able
to do quite a bit with that um the flip side
of that though is there are trade -offs and the
trade -offs are there are some really nasty edge
cases and foot guns there are some language features
that to me are inexplicably missing like lua
has no continue keyword if you're writing a loop
and you want to go to the next iteration of the
loop, you can't write continue. It doesn't exist,
which is just bonkers to me. But I also don't
particularly like... Another gripe I have with
Lua is that it defaults to global variables.
So if you write x equals 3, you've just defined
a global variable called x. If you want to define
a variable scoped... to the lexical scope you
have to write the keyword local which is not
a huge deal but in terms of language design right
you want to optimize you want to make it easy
to do the right thing and hard to do the wrong
thing and that's an example of where lua does
the opposite um and then yeah i said this in
our last discussion but i also just find lua
aesthetically very i don't like looking at it
i just think aesthetically lua is super ugly
i hate looking at lua I don't particularly like
enjoying writing. It's kind of a weird complaint,
right? But there's some code when you look at
it, and it just kind of flows, right? It's visually
appealing to look at. You can see the way the
code flows, and it's really easy to kind of...
Lua is not like that. It's a very imperative
language. It does have functions as first class
values, which is nice. So you can do some functional
stuff. But even the syntax for defining functions
is very verbose. So you don't see a lot of that
kind of code written in Lua because it's just
not very nice to write or to look at. Yeah, I
don't know. I have mixed feelings about it. I
think you can do a whole lot worse than Lua,
right? Like, most of the time, I'm not going
to complain about seeing Lua. But if I get to
choose, I'm probably not going to choose Lua.
That's what I was going to ask. What do you think
could have been, you know, a replacement for
Lua? Well, I think, well, I should clarify. For
Neobim's design goals, what it wants to achieve,
I think Lua is the right choice. Especially with
the existence of LuaJIT. which for those who
don't know, LuaJIT is an implementation of Lua
5 .1. So Lua, like C or Go, is a specification.
There's this manual that says this language does
this, right? And then there are different implementations
of the specification. The people that designed
Lua are from a university called PUC, P -U -C,
in Rio de Janeiro. which I've been to, actually,
funnily enough. And that's what we call PUC Lua,
P -U -C Lua. That's like the out -of -the -box
original standard Lua. But then there's a guy
named Mike Paul who started this project called
Lua JIT, where JIT here means just -in -time
in terms of just -in -time compilers, which I
won't go into or explain. People can look that
up if they don't know what that means. But it's
an alternative implementation of the Lua 5 .1
language specification. that is very, very fast.
Much, much faster than Puke Lua. So this is great
for projects like Neovan that want something
that's small, that won't bloat the editor by
including it, by embedding it, and also very,
very fast. So with the existence of LuaJIT, if
you're embedding a language into your application,
Lua is usually a very, very good choice. So I
don't think I would have chosen anything different
for any of them specifically. I just mean if
I'm writing code for a pet project or something,
and I'm choosing a scripting language, I probably
wouldn't pick Lua for myself. That's all that
I meant. Okay. Okay, but that's the reason in
our last conversation that you mentioned that
you use Fennel, right? So would you mind explaining
what Fennel is for people that don't know what
it is? You're sharing your screen at any time.
So if you want to jump to your screen, you just
let me know and it's easier that way. Yeah, I
just pull up the Fennel website. If people want
to see that, it's at fenneling .org. But Fennel
is a Lisp that compiles. or trans files, I guess,
into Lua. So I'm a fan of Lisp. In my own time,
because I mentioned earlier, I didn't study computer
science in university. I studied electrical engineering.
So I've done a lot of self -study just on my
own time. And one textbook that I worked through
was called The Structure and Interpretation of
Computer Programs. I think that's what it's called,
the SICP. which you can find for free online,
by the way. I highly recommend reading it if
anyone hasn't. But yeah, here's the PDF. And
in this textbook, they use Scheme. So they use
Scheme to teach these fundamentals of programming.
And Scheme, we talked earlier about how Lua is
a language that does a lot with a little. I think
Scheme is even more so. Scheme has even less
syntax than Lua. It's an extremely simple, minimal
language. It's a Lisp language. And I went through
this book and was doing the exercises, and I
kind of just fell in love with the concept of
Lisp and how much you could do and represent
with this extremely primitive language. All you
have is just Lisp. a couple of other syntax things,
but it's all just, it's all just like just lists,
right? Lisp stands for list processor. So I think
that fundamental data structure and Lisp is just
a list. So I really came to enjoy Lisp. I know
it's controversial. A lot of people look at it
and they don't get it. And they think it's ridiculous
and ugly and they make jokes about parentheses,
which I get it, right? Like I totally understand
that, but to me it just clicked, right? I really
enjoyed it. So when I found out there was, a
Lisp language I compiled to Lua, I was very interested
and I started kind of experimenting with integrating
it into NeoVim. But yeah, that's what I use now.
I obviously still write a lot of Lua because
anything that I'm contributing to NeoVim itself
is in Lua. Like my .files or whatever, I just
write it all in Fennel. In Fennel, okay. You
also mentioned... The Neovim team. I had a question.
How does it work? Like the Neovim core team,
how big is it? How easy is it to reach agreements
in the team? How is the mechanics? How are the
mechanics in the team? How is the relationship?
How does all that work? Who takes the calls?
Is it one person mainly or is it the group? Or
do you want to share anything about that? Yeah,
I can talk about that. It's pretty loosely structured
and informal. I should caveat, just in case there
are any other core team members watching, that
nothing I say is authoritative, right? I'm just
talking about my experience. But we kind of loosely
follow a BDFL model, which is Benevolent Dictator
for Life. Justin Keyes is our Benevolent Dictator.
he has been involved with the project since if
not the very beginning very very near the beginning
so he's been around for a long time and he's
he's kind of he's the person that if an executive
decision needs to be made in most cases justin
will make it but justin also is not around all
the time he'll have prolonged periods of absences
for whatever reason right and so when he's gone
frankie's moving so There are multiple people
that are able to merge PRs. That's what we call
the core team. Anyone that has the ability to
merge a PR is generally the core team. And the
team is kind of loosely structured into areas
of expertise and preference. So for me personally,
that's pretty much anything that involves the
TUI or the terminal, I will almost always review
those PRs or handle those issues. That's not
to say other people can't. I don't own it. It's
not mine. But that's because that's my both area
of interest and area where I just have more relatively
more expertise. That's something that I tend
to be more involved with. Whereas we have other
people that spend a lot more time working on
LSP stuff. You know, they're very familiar with
the LSP specification, what other what other
editors do, what other what's happening in the
ecosystem. Right. And so they're just they're
more. they're better equipped to handle those
questions and PRs. But again, anyone can do anything,
right? So I've made PRs and contributions to
LSP, to LSP client, even though I don't consider
myself part of the LSP team necessarily. So that's
kind of loosely how it works. I would say the
other person besides Justin that is maybe a de
facto BDFL is is Bjorn, which I apologize if
I say that wrong. He's beefreddle on GitHub and
on Element or Matrix. But he's next to Justin,
I think, has probably been around the longest
and has touched most parts of the code. And he's
kind of like the wizard when it comes to anything
with the UIs and the really low -level fundamentals
of NeoVim, like the way that buffers are represented
in memory. like this data structure called mem
file right and there's all this code that has
to do with ui decorations like virtual text and
the way that we neofm has this concept of x marks
as we call them like all this stuff that's like
low -level plumbing is kind of uh beef rattle's
area of expertise uh i won't go through a name
on everyone right because i'll almost certainly
forget somebody i don't want to hurt anyone's
feelings but uh i would say i would say aside
from justin beef is probably like our our um
our next personnel, like, if we need an executive
decision to be made. But usually it's, like,
we usually defer to expertise, right? So if there's,
like, a question about the two -year terminal
stuff, that is a decision that we usually, I
can make the executive decision on that, just,
again, because of my own experience in that area.
You asked about how many people there are? I
don't know off the top of my head. I could count,
but no one wants to sit here and watch me count.
If I had to guess, I would say between 8 and
10. Okay. People that are active. And we've had
people in the past that were very active and
then have kind of drifted away for whatever reason.
But there is a kernel of people that have been
around. over for for many years now at this point
um but it's all it's all very informal and loose
right now that's one reason i think why people
stick around is because if it ever stops being
fun like we kind of joke that neo event practice
is fun driven development which i think is a
term that surely someone else has made up but
all of us are here because it's a hobby i think
there's maybe one or two people in the core team
that do that that do it full -time that get paid
to do it But the vast majority of the core team
do it as a hobby, on a volunteer basis. So we
all do it for fun. And if it ever stops being
fun, you kind of just take a break, right? Just
unsubscribe from notifications, stop checking
chat for a little bit, and then you just come
back whenever it's on spot again. But I think
because we kind of have that culture, it helps
with longevity, right? Because you'll have people
take breaks for weeks or months, but they can
always just come right back, right? And so I've
done that, even. um at different different periods
is it just no ski part of the core team in in
folky i don't know how to pronounce folky's name
at all neither of them are part of the core team
we have this um we have like a second so we so
outside of the core team we have another the
vip members i guess yeah like we call them at
least i used to be called padawans i think we
renamed the group but these are people that are
members of the neo him organization on github
so they have the ability to um like triage issues
and stuff and they are involved in some like
internal real -time chats that we have but they
don't necessarily have the commit flag um so
uh yeah evgeny is obviously an incredible contributor
he's done a lot for the event but he's not I'm
wondering if I'm misremembering. I'm wondering
if he is part of the core team or not. Maybe
he is. I could have just lied by accident. I'm
not sure. I'm not sure if he is or not. He may
be. I don't actually remember. But in any case,
Folky is not. I know that for sure. Folky is
actually not super involved in terms of like...
the chats that we have. He does come in occasionally,
but Foki mostly does his own thing. He'll sometimes
get involved in GitHub chats and rarely get involved
in our Matrix discussions, but not very often.
Yeah, people were concerned as he disappears
for quite a few months and then just appears.
Yeah, I think he's retired, right? Like he's
early retired and he just is like living his
life. So I think he's just like off doing awesome
stuff most of the time whenever he's gone. And
then he comes back, contributes to his distro
and his plugins and all that stuff and just takes
a break again, I guess, right? Yeah, I think
that's the deal. Okay, now talking about Folky,
right? In our conversation previously, you mentioned
that you use your own configuration to just install
your plugins, basically. So you're not into plugin
managers. Do you want to elaborate on that a
little bit? Part of it for me is it's fun to
do this stuff myself. So I'll look it up. I will
a lot of times try to write code to implement
a feature in NeoVim myself before using a plugin.
That's one reason why I don't have that many
plugins. There are some exceptions. Like, I really
don't want to write my own, like, file picker
thing, right? So I just use Afghani's from mini
.invent. I really don't want to write, like,
my own. I actually have thought about doing my
own snippets engine, but I haven't done that.
So I use, like, a snippets plugin for that. But
for other things, I'll just do it myself. So
I've, like, written a lot of tree server code.
Like, I don't use it anymore because it was kind
of flaky. but i might pull it back at some point
because i kind of miss it but there's this plugin
called like tree sitter context right where it
shows you if the the beginning of a function
is off of your screen and your cursor is inside
of a function it shows you like the function
signature a little floating window so you can
see what the fucking signature is even if it's
not on your screen there's a plugin that does
that that's now maintained by lewis who's another
core member but i was like i bet i can do that
myself so i was I just wrote my own version.
It's not like a pride thing. It's not like, oh,
I think I can do it better. It's just like, okay,
if I don't have, like when I'm writing it for
myself, I don't have to support a thousand different
use cases. I don't have to have all these configuration
options. I can just make it do exactly what I
want because I'm the only user. And when you
have that, you can make things a lot smaller
and a lot simpler. So code that is like potentially
thousands of lines for a generic plugin that's
meant to be used by everybody. can be maybe a
couple hundred lines of code if it's just for
you. So it's almost like a challenge. How can
I do this myself and make it as simple and minimal
as possible if I just keep it to my own constraints?
So it was the same thing with the package manager.
I didn't always use my own. I used Vimplug back
when I was using Vim, and then Minpack was another
one. And then when I switched to NeoVim, I used
Packer for a little bit. Packer is now dead.
It's not maintained anymore. But for a long time,
Packer was the go -to package manager for Nuvem.
And I always had a little bit of discomfort with
it because it had all this extra stuff. You could
compile your plugin list, which I still don't
really understand what that means. But there
was this command like Packer compile. And it
had all these hooks for lazy loading and stuff.
And both as a user, I remember thinking like,
this just feels too complicated. And as a maintainer,
seeing how many issues were caused by people
doing all this fancy extraneous stuff, it really
turned me off from the whole thing. I was like,
this is just too complex for me. So I was like,
a plugin manager doesn't need to do much. It
just needs to essentially call git clone. And
that's it, right? Because NeoVim knows how to
load plugins itself. you just put it in the right
directory and it gets loaded automatically all
i have to do is get cloned to some path and what
about the lazy loading like that's the thing
that you know lazy does that loading on certain
events and uh that's so i'll well okay so okay
i have thoughts about this i'll say vim figured
out lazy loading before any of them even existed
Like Vim plugins, well -written Vim plugins,
if you look at T -PoP plugins, for instance,
most of them, anyway, they are auto -loaded,
is the term Vim uses. So they are not loaded
until they're needed, until the function is called.
And Vim, a plugin can be written to do this without
any help from a plugin manager. The plugin itself,
right? So the plugin creator. So the idea is,
the way that a Vim plugin works is just a directory
with some files. with some subdirectories and
some files. Any file under a directory called
plugin gets interpreted and executed on startup.
And then any file that's under a directory called
autoload gets called on demand. And I'm talking
about just old school Vim plugins right now.
So a well -written Vim plugin has extremely minimal
amount of code in this plugin directory. Maybe
it defines a couple of plug key maps that users
can then remap, or it might define some commands.
But it doesn't define any functions. It doesn't
do anything. So this code should take milliseconds,
like sub -milliseconds to execute. It's very
minimal. And then all your beefy code is in this
autoload directory. So not until the user actually
calls it does that code get loaded and executed.
So the same concept exists in Lua. Instead of
an autoload directory, you have it in the Lua
directory and you call require or whatever. But
what was happening in the NeoVim ecosystem with
many Lua plugins was a couple of things. One
was the proliferation of this setup pattern where
to load a plugin, you would call require myplugin
.setup. And what that would do is then call a
bunch of these other modules. So you're executing
tons and tons and tons of code. And the instructions
for these plugins would tell you to do this on
startup. And so people were seeing these plugins
slow down their startup times. And just because
they were, to be frank, written poorly, they
weren't taking advantage of the mechanisms that
Neo then gave it to run effectively. So what
a plugin should do, if it wants to lazy load,
is write the minimal, as little as possible as
you can in this plugin file. And then everything
else goes in your require, and you just call
that when you need it. Another problem that you
see is, and this is understandable, I understand
why people do this, but let's say I have this,
I'm writing a plugin file. I don't want to have
to write require, I'm sharing my screen right
now, just in case. People don't want to write
require, let's say I have my function do stuff,
and my plugin has this I got a lot to require
require my plugin got sub modules, you know dot
who dot You know do stuff Right, like that's
a lot to write. So people will do is to say okay
local foo equals require my plug -in sub module
dot foo right and I understand we'll do this
because this is if you're writing like rust or
or JavaScript, right? This is what you do. You
import modules at the top level so that you can
refer to them by a shorthand in your function.
But in Lua, what this does is that when your
code is executed, you are calling this require
here as soon as the script is executed. It's
not happening when you call doStuff. It's happening
when the file is loaded. So this is an area,
this is, I think, one reason that this has been
more of a problem in Lua is just because People
naturally want to do this pattern. And again,
I understand why. But that ends up hurting the
lazy loading, right? Because you're not lazy
loading it now. You're loading it up front instead
of on demand. So what you should do is instead
something like this. But that's obviously a pain
to write. So I get why people don't do it. Anyway,
so people started writing plugins using these
patterns. And people noticed that their startup
times were getting slower. And then plugin managers
then recreated this concept of lazy loading that
already existed in Neobim. And now that responsibility
was on the plugin manager, which has increased,
added more complexity because now we're loading
these plugins at different points instead of
loading them up front and letting Neobim do the
lazy loading as necessary. So I was just like,
whatever, I'm not going to. So I'm also like
very, very. picky about the plugins I install.
I read the source code, and I'm like, if you're
putting a bunch of... If you're going to slow
down my startup time because it's not written
well, I'm not going to install it. Any plugin
that requires me to call .setup, I almost always
will not use it. But many .envim is the one exception
to this. Evgeny knows how I feel about this.
We've talked about this a lot. We've kind of
just agreed to disagree, basically. You couldn't
convince him. I couldn't convince him. He has
counter -arguments. If he's watching this, he
will probably... He will probably. He's shaking
his fist. He's not representing the counter -arguments.
But the code I have for many, I do make exceptions.
I'd call... Well, this is kind of hard to read
because it has a macro, but I do call setup.
for mini .inven. So I make an exception for Evgeny,
but I also trust him. I know his plugins are
written well, so I always make an exception there.
Anyway, that's kind of like my mini rant. So
we were talking about package managers. Yeah,
so they kept getting increasingly complicated.
And I don't mean to disparage, right? I'm not
trying to... I don't mean to dunk on people or
whatever. We're talking about... editor plugins,
right? This is the lowest stakes thing possible
to talk about. People can do whatever they want.
It's for fun. But for my own personal taste,
it was just too much. It was too complex. It
was too much going on. So I was like, we don't
need a lot here. I can do... I can satisfy what
I need in a shell script. Like 100 lines of code,
100 lines of shell. So that's what I did. That's
all I use now. You know your way around NeoBIM
quite well. You created your own Package manager,
we could say. But what about someone just joining
from VS Code that is used to the marketplace
or whatever that's called where you install the
plugins, right? They're not going to write their
own plugin manager. They will not know how to
load plugins and all that stuff. So do you think
a plugin manager like Lacey could be useful in
that case? Someone completely new, right? Or
what? What are your thoughts there? I do think
having an easy -to -use... So this was a big
motivation behind adding the package manager,
the plugin manager, into having a native one
in NeoVim, which we've been talking about Evgeny
a lot, but that's something else he did. He upstreamed
a version of his many .debs into NeoVim. So NeoVim
has a package manager now called vim .pack. I
don't know why that didn't work. Okay, it looks
like my... There it is. So Newton has a package
manager now. And a big reason for adding this,
this was a thing that was talked about a lot
over the years internally. Should we provide
this? And it was never clear the answer was yes,
right? Because it was like, okay, that's more
code to maintain, right? We don't want to add
everything under the sun, right? We have to have
some... There should be some threshold or some
barrier to what gets added, and it has to be
a compelling reason. And the compelling reason,
in my opinion, was that we were seeing, especially
with LSP, right? Like for many, many years, the
story was NeoVim has a built -in LSP client.
And yet it was, for most users, almost a requirement
to then install nvim -lsp -config. I mean, unless
you were willing to write like a bunch of low
code, you had to install. nvm -lsp -config, this
plugin. And it wasn't a third -party plugin.
It was under the NeoVim umbrella, but you still
had to install it, right? It didn't come with
NeoVim. So we were telling users, like, hey,
NeoVim has LSP included. It comes out of the
box. But that was kind of a lie, right? Because
it really wasn't. You had to install NeoVim.
If you're a brand new user coming from VS Code,
you had to install NeoVim. And then you have
to go install nvm -lsp -config. And it's like,
how do you do that? Now I have to go learn about
package plugin managers. Now I have to pick a
plugin manager. And I have to learn how to install
this plugin using this plugin. It's all this
extra stuff. And this was contributing to this
idea and this perception that NeoVim is really
complicated and hard to set up, which is kind
of fair. So that was a big motivating factor
to upstream this, right? Because you want to
be able to say, you can literally just write
this code in your... in it .lua file and and
that's all i have to do like for a brand new
user from vs code just copy paste these few lines
you're good to go and the addition of vim .pack
gets us a lot closer to that reality now um if
someone wants to use lazy or whatever i am again
this is like do whatever you want i'm not the
boss i'm not like your editor mom or dad right
like i'm not going to come like knocking on your
door saying how dare like I'm talking about my
own personal preferences and stylistic preferences
or whatever, but that's totally subjective. If
using lazy or even one of these distributions
like NVChat or LazyVim makes it easier, that's
what you like to do, by all means. I know a ton
of users use LazyVim, and Folky's done an amazing
job with that. Folky's responsible for a lot
of... NeoVim's user growth. I'm not going to
pretend otherwise, right? So I think to me as
a core team member, it is a little bit of an
indication that we have work to do to make NeoVim
itself, like the independent project, more approachable
and beginner -friendly. I think we've come quite
a long way there, especially with LSP over the
last couple of versions, and vim .pack is going
to get us even further on that road. But there's
still there's still more we can do. Make things
easier. This whole thing was like really made
very clear to me when I helped a co -worker switch
to any of them. And I was I was sitting with
him like in person. I was there in the office
next to him. And I was like having to like I
was like feeling his frustration in person. And
I was like felt guilty. I was like I was like
this is partially my fault. This is so complicated.
Right. like that there's all these steps involved
and i was like almost like apologizing but after
that experience i was like this has this has
to get better like this is just not yeah it's
not good enough when you install neovim you know
default neovim you open it you see the black
screen and it's like so what is this But if you
watch videos and you watch LazyVim, you get that
little dashboard that, you know, it's not useful
at all because I just opened my picker when I
have the dashboard open, my picker. But now I
know about that. I think it's a little bit more
friendly and more welcoming than just a default
NeoVim screen. You're like, what am I supposed
to do here, right? Yeah, this is pretty utilitarian.
Yeah, but it's flexible. It gives you options,
right? So it gives you the base, then you do
whatever you want with it. Is that like the goal
as well? Yeah, so that's a good question. I'll
answer that a little bit more broadly, like in
terms of general design philosophy. So NeoVim,
I think kind of sits, there's a spectrum between
editors that are pretty much stable, don't change
a lot. their users are happy exactly how it is,
to extremely experimental, cutting -edge early
adopters. People want to use the hot new thing.
So on one end, you have Vim, which is extremely
stable and basically never makes any breaking
changes. And when they do, their users are very
upset about it. And then on the other side of
the spectrum, you might have Helix, where Helix
is used by a lot of people that are not afraid
to try new things, or Capcom is another one,
that want to try new ideas. NeoVim sits somewhere
in the middle, where we are more than willing
to, I shouldn't say more than willing, we're
more willing than Vim to make changes, although
we don't do that flippantly. We try to avoid
that when we can. But we want to add new features,
we want to improve defaults, understanding that
doing so will break some users' workflows. At
the same time, we also have a lot of this...
We don't want to... We're not total revolutionaries,
right? We also want to respect people that know
Vim, have used Vim. We embrace our Vim heritage,
so to speak. We are unapologetically a Vim fork,
right? So there's some things that we... we do
a little more cautiously because we want to maintain
that minimalism that Vim is known for, the fast
startup times. And of course, Helix is that too.
Helix is very fast and minimal, and I think they've
done a great job with their editor. But you do
see a lot of people that struggle to move to
Helix because they want to keep using the Vim
bindings. Have you tried Helix? Sorry to interrupt
you there. I have tried Helix. I think it's extremely
well done. I'll say if in an alternative timeline,
when I was just starting out with Vim, if Helix
had existed at the time, I think it's very likely
I would have just used Helix. I just have almost
10 years, a decade under my belt using Vim at
this point. And when I tried Helix, it didn't
take me long to run into... like something I
wanted to do but couldn't do. And I find the
scriptability of NeoVim such a superpower now
that not being able to do that would be, I would
find, severely limiting. But I think that's what
Helix users like. They don't want the scriptability.
They don't want to have to install plugins, right?
They like that everything is part of the core.
Did you get used to visual mode in Helix? Because
it's not visual mode, it's select mode or something
like that. So did you get used to that? I didn't
use it enough to get used to it, but I do think
it's a good model. In hindsight, I wish Bill
Joy, when he wrote VI, had done that instead
of normal mode first or whatever that Vim has.
I think modal editing in general is a huge improvement
over the alternative. But being able to have
visual mode first, I think, is probably... better
than what Vim has. But ultimately, it what's
going to be better for each person is what their
muscle memory is used to. Right. So. Local. We
learned to say about Helix, though, is I know
that they are they either are about to or already
have introduced scripting through using a list
of some some scheme variant of all things, which
is like targeted at me. it was very compelling
to me but i do wonder when helix opens the door
to scripting if the the reputation that helix
has as just working and not having to install
a bunch of plugins will persist right because
once the door opens to plugins and scriptability
then you have to start thinking about plug -in
compatibility and people depending on plugins
that are written by third parties that are not
up to the same quality standard yep That are
not going to be maintained, probably, and they're
going to cause a lot of issues. So I'm curious
to see if, I don't know, five years from now,
ten years from now, if Helix is still around,
if the situation is any better or worse than
what NeoVim is today. That would be an interesting
experiment. I also have experimented with Zed.
It's hard not to, right? With how much hype it
has. I think that itself is fine. I don't have
any complaints about the editor. At this point,
my development model is so built into being terminal
first, shell first, but having my editor be outside
of that just feels extremely limiting. I just
couldn't get used to it. If I was dedicated and
was like, I'm going to do this and I'm going
to force myself to do it for seven days straight
or something, I probably could adapt to it, but
why? I don't know. I don't have a compelling
reason to do that. That's something similar to
what happened to me in Obsidian, you know, because
I used Obsidian for my notes for a long time.
I loved the tool, but then I tried NeoVim, then
I jumped into the terminal full, you know, now
I do my notes in NeoVim. So I... Cannot open
another application because it's disruptive,
right? It's like, man, so I have to go to this
other application. It has different key bindings.
It doesn't have all of my emotions and all that.
So I guess something similar, right? Exactly.
Yeah. Okay. And I was going to ask you. I see
in Reddit that there's plugins, new plugins all
the time that are being released. So, hey, I
have this new file picker. I have this new whatever.
What are your thoughts on all of these versions
of plugins? Are you okay with a lot of plugins
being created that you don't know if they're
going to be maintained or not? They're fun projects
for the people creating them. But do you have
any thoughts, anything you want to share about
that? I think it's great. I totally understand
when people create something, wanting to share
it. People should keep doing that, keep sharing
it. And I think the NeoVim community, I don't
spend a ton of time on the NeoVim subreddit,
but from what I have, it seems like people are
generally pretty supportive of people writing
new plugins, right? So I think that's great.
I think it's great that people can share stuff
and get good feedback. I'll also say, if you're
a plugin writer, it's okay to write stuff just
for yourself. Not everything has to be on GitHub.
Write your own. features in NeoVim that are just
for you. Turn it into your editor. Writing plugins
is not hard. You have to learn NeoVim's API,
which, like anything, you have to learn your
way around. If you're not used to it, it'll take
some work because you'll be like, okay, I don't
know how to do this. I have to find the right
function to do it. You figure it out. If you're
a professional software engineer, it's well,
well, well within your capabilities to write.
a plugin for neobim and remember that um like
so i'll share my screen again um if if you're
just a regular user you have your you know config
.mv file that has your init .lua or your init
.bin or whatever all you have to do to write
your own plugin is write a file into the plugin
directory call it my cool plugin whatever dot
lua and write some code Okay? I just wrote a
plugin. When I start, well, that was a bad example,
but there it is. It printed hello world, right?
That took me five seconds. Now, of course, writing
a real plugin is a lot more work than that because
you're not just going to print something. But
my point is that it's really easy to modify NeoVim
if you're a NeoVim user yourself. You don't have
to rely on other people writing plugins for you.
Just go to your config .config slash invent directory.
and put something in the plugin folder. That's
all you got to do. And make any of them your
own. I have tons of files in here, all the different
stuff. One thing I have is in these file type
-specific plugins, like for C, for example. I
don't write a lot of C today, but I have in the
past. And one thing that I have to do... is I
have this function that I wrote called setPath.
And it's in a Lua module, so I call require.
Okay, so that is in this ft .c file. And I won't
walk through all this code. That's not the point
here. But all this does is it looks in the current
directory to see if there's a compilecommands
.json file. If there is, it reads it into NeoVim,
parses it as JSON, reads through it, and sets
the path option. And path is used to find files
and stuff using GF and other things. And this
is, I don't know, it's like, my point of sharing
that example is I had this idea. I'm like, oh,
wouldn't it be useful? Wouldn't it be cool if
I could just have NeoVim automatically read and
parse these compile commands dot JSON files and
have it automatically set the path option in
NeoVim? i was like yeah that would be cool so
i just went and did it right like that that's
the point i'm trying to make is if you have an
idea of something that you want your editor to
do just like you have the power to do it that's
like the amazing thing about about uh having
a scriptable editor is that it's this it's this
malleable thing that you can modify and and change
to your will so i encourage people to do that
share it by all means if you want to if you think
it's useful for other people share it but i mentioned
this earlier too if you don't share it and make
it just for your use cases and just for your
needs and you're the only user, you can do whatever
you want. You can make breaking changes. You
don't have to support configuration options,
right? You don't have to write good error messages.
Just write exactly the code that you need and
it'll be a lot more fun too. Now, would you like
or would you mind sharing about the NeoVim plugin
manager that you mentioned? Like I use LazyVim
and I use the Lazy. and been plugin manager of
course right so um how do i install plugins in
this thing because i didn't even know about that
to be honest so i i just called a shell script
called pack up pack update was the idea uh but
um again i won't walk through the code but essentially
all it does is here i can oh no Is this the one
that was released in Neobim that you just talked
about? Oh, that makes more sense. I was like,
I can just talk about mine if you want, but it's
okay. Yeah, so this is called BIMPACK. So there's
a big warning here, work in progress. This is
only on the master branch, so people that are
running it. So it's not released yet, right?
Not released yet, no. There's some examples here.
To be honest, I actually haven't... used it yet.
I reviewed the PR when it went in, but I'm not
the most qualified person to talk about how it
works. But the syntax here is probably fairly
familiar to anyone who's used other plugin managers.
But compared to lazy .mvim, it's substantially
similar. There's no lazy loading. You can't say
load on when I execute this hook or something.
All it does is clone some repos to a certain
path. So you rely on the plugin creator to write
it correctly so that it loads at the right time,
right? It kind of depends. If the plugin you're
using says you have to call a .setup or whatever,
then you're going to have to call the setup function.
That's the way the plugin expects to be loaded.
And if you want to do that... If you want to
defer that until a certain event, then you'll
either have to write the lazy loading code yourself
or keep using lazy .invent. So this is my admonition
to plugin writers everywhere. If you're writing
a plugin, you should be doing the lazy loading
yourself. Don't rely on the plugin manager to
do it for you. Stop using .setup, for instance.
But yeah, so Evgeny wrote this. This is based
on his mini .debs package manager. I think it's
a little bit simplified. I wish I could give
you a demo, but I don't use it right now. So
I can't actually give you a demo using it. Yeah,
maybe when it's released and it's part of Neobim.
It's in beta, it seems, right now, correct? Yeah.
Okay. Yeah. Okay. Yeah. No worries. Thanks. Talking
about... Extensibility, NeoVim extensibility.
I mentioned Prat, you know, I had the call with
him yesterday. He's a huge representative of
the Emacs community, right? And Emacs users like
extending their, what is Emacs, operating system
or whatever it is, right? To do basically everything
for them. And I like that about NeoVim because...
images is a big part of my workflow. For my blog
post, I like pasting images, you know, from my
clipboard into NuVim. I like converting them
into different formats. AVIF is the format that
I choose, but I can convert them to any other
format using ImageMagick, a plugin, you know,
that I use, ImageClip .nvim. And I can view images
in NuVim as well now. So I really like that extensibility.
I have heard that there's a few folks that are
not into that because it seems like Neovim is
becoming into Emacs or something like that. What
are your thoughts there? Anything you want to
share? I think that's a compliment. I think Emacs'
superpower has always been how acceptable it
is and how powerful it is as a platform. If Neovim
is becoming that, then that's a good thing as
far as I'm concerned. I mean, it's up to the
user, right? When you install NeoVim from your
package manager or something, it automatically
downloads and installs all this other stuff.
It's only there if you choose to install it.
So I don't really take that as a serious criticism.
I guess someone would say that. Because NeoVim
at its base is still very minimal. It has a lot
of stuff that Vim doesn't have. So there are
some Vim people that don't like NeoVim because
they think even out of the box it does too much.
But that's fine. Not everyone has to like everything.
We have a certain design philosophy and idea
of what we want to get them to be, and that's
not for everyone. And that's totally fine. We
don't have to appease the whole world. But if
that's you, then feel free to stick to Vim or
Ed or whatever it is that you use. But I think
a lot of people do find the extensibility to
be really powerful. I'm one of them, for sure.
Okay. Okay, awesome. Now, also in the previous
conversation, you mentioned about auto -updates.
So you're not into auto -updating your plugins
during startup, right? No, I'm definitely not.
I definitely don't do that. I do update NeoVim
almost every day. Like, it's one of the things
that I do in the morning. Like, when I'm logging
into my work computer, I'll update NeoVim basically
every day. But that's because I'm, like, as a
maintainer, right? Like, that's part of, I can
think of that as part of my maintainer duties.
finding issues so I can fix them. But I don't
necessarily advise that for... Actually, I would
advise against doing that for most people. Unless
you actively want to be involved in the development
process, I would say do not daily drive the master
branch. I don't update... I hardly update my
plugins ever. Actually, if I were to run this,
I probably have a bajillion updates. Okay, so
Stippy, I'm going to say no to all these, but
all these plugins have updates. This one has
87 new commits since I updated it last. So it's
been a while. But no, I don't, I mean, for the
same reason that people pin their dependencies
in production environments, right? updating stuff
every single day. This does frustrate me because
you see online people complaining that NeoVM
is so unstable. It breaks all the time. And a
lot of times you also see these people are also
updating, have dozens of plugins installed that
are updating them frequently. And sometimes worse,
there was a period of time where a lot of our
users were daily driving the master branch. So
I'm like, of course it's going to be unstable.
You're asking for it to be unstable. If you're
on the development branch, even if you're not,
even if you're on a release, but you have a bunch
of plugins and you're updating them frequently,
plugins... Tag releases are not very common in
the Neoven plugin ecosystem. Pretty much every
plugin out there, with some exceptions, just
are on head. And when you run update, you just
are updating to head on all of them. And a lot
of plugins try to support... NeoVim had and NeoVim
releases, sometimes not successfully. So yeah,
of course, if you want NeoVim to be stable, do
the same thing you do with any other software
you want to be stable. Pin your dependencies,
pin your plugins. But I don't know, people don't
want to do that. Yeah. What about like incremental
updates, right? Because if you update right now,
probably you're going to have a lot of changes.
If you update all of your plugins, do you update
one at a time or do you just, when you decide
to update all of them at once and see what breaks?
When I do update, I usually update them all at
the same time. I don't run into issues caused
by plugins very often though. And again, it's
partly because I'm pretty picky about plugins
I install. Like, I use Fugitive. I just saw this
because it was here. Like, I trust Tim Pope.
Like, Tim Pope is extraordinarily talented. I
usually feel like I can update Fugitive with
very little fear that something's gonna break.
And Vimlet is another one that's written by Matthias,
who I talked about earlier. Same thing. Like,
he's... he's a new core member like i have a
lot of faith and trust in his ability to write
a good plugin so i'm not that i also don't have
a lot of fear and then the other one is mini
diamond and same with with evgeny um but usually
i don't update unless i have a reason to right
like right now my editor when i use it to actually
write code it's fine the way it is yeah So I
kind of goes against what I was saying about
how I update NeoBIM every single day. So I'm
kind of contradicting myself. But again, that's
just because I'm involved with the development
of it. If I weren't, then I wouldn't do that.
Okay, yeah. I was under the impression that update
your plugins because of maybe security reasons
or something. I have no idea. Like the security
critical updates that you get in Linux and all
that stuff. But now that you guys talk about
it, TJ and you, I'm like, because I update on
startup, the plugins, just the plugins, right?
And sometimes they have breaking changes. So
if they're released, it's good. I just pin them
to the previous version and I just deal with
that another day, you know, when I have the time.
But yeah, honestly, I don't think there's a reason
then to auto -update the plugin. Because if they
work, they work, right? So why would you want
to update? Unless there's a feature that was
developed that you're interested in, it would
make sense to update then, right? Yeah. If you
have a lot of plugins, then it's hard to keep
track of all of them and see what features there
are. So I understand why people do it. I'm just
saying, my point is that you kind of have to
make a trade -off, right? Either between constantly
updating and getting the newest stuff. Or stability.
You can't usually have it both ways. Yeah, definitely.
Okay. One other point I want to make. You mentioned
the security updates thing. For Linux or something,
definitely. For NeoVim, I want to be really clear
about this. NeoVim has basically zero concept
of security with plugins. So it's very... Installing
a plugin, you are installing... untrusted code
that can do anything. You're going to execute
code on your computer. It's not sandboxed. It
can do anything. It's going to run as your user.
It can read your SSH private keys and write them
to a server. There's nothing stopping it from
doing that. I don't know personally of any examples
of people installing malware in a Vim plugin.
I imagine that's not the most fruitful target
for an attacker. um but that is important to
remember that when it comes to security it's
possible so that's another reason to be careful
about what plugins you install and when do you
update them makes sense yeah i trust volky you
know volky is my filter so yeah if a plugin makes
it to lazy vim i'm like okay so it's approved
by folky i trust them so um yeah i don't install
you know random plugins that i just find out
there in the wild But yeah, try to keep your
plugins minimal and install from people that
you really trust, basically, right? That's my
advice, whatever it's worth. Okay, yeah, makes
sense. It won't work for everybody, but... Yeah,
and why Ghosty? Moving on to something else.
Why did you decide to go with Ghosty? Why did
you decide to start contributing in Ghosty? Yeah,
you can't talk about Nevo without talking about
terminals, right? So I've used most terminals.
So I started with iTerm2 on Mac OS. And then
at various points, I've tried Alacrity, Giddy,
Westerm. I used ST even for a little while. The
only one I've never really used full -time was
Foot, only because it was on Linux only. At the
time that I was using Linux primarily at work,
Foot didn't exist. It was like Wayland. It's
not just Linux only. It's Wayland only. There
was never a period where I was only using Wayland
and also wouldn't use Foot. But I was using iTerm2.
I like iTerm2 because it's a native Mac app.
It feels like a Mac application, which I like.
That's important to me. Aesthetically, the UI,
the user experience, the way it works, it just
feels like it's integrated. It feels like it's
a... Because it is. It's like a native Mac application.
No other terminal does that. Aside from Ghosty,
but at the time. No other terminal does that.
If you use something like Kitty, like it uses...
Kitty's great, by the way. I know nothing but
respect for Kitty and Wester and Lackerty. They're
all great. They do different things. Kitty's
tabs are not Mac OS tabs. Like, there's kitty
draws its own tabs. Western draws its own tabs.
Alacrity is kind of... Alacrity doesn't have
any of its own stuff. It doesn't have tabs. It
doesn't have any UI stuff. So it kind of feels
like a native app, I guess, because it's just
like a box. Alacrity is fine. I don't honestly
remember why I moved back to iTerm2, but I was
pretty happy with iTerm2, and that's what I was
using at the time. uh and then i saw mitchell
give a talk about ghosty and i was interested
in ghosty because we were in zig and i've i've
been following zig since 2017 or something like
that 2019. so for a long time i really like zig
i'm a big fan of the language i think it has
a bright future i've done i've written some stuff
in it myself um and when i saw that he was writing
this term limelighter in zig that also really
cared about being cross -platform and feeling
like a native app on each of its different target
platforms, that to me was like, oh, wow, that
sounds great. So that was when I first learned
about it and became interested in it and joined
the Discord shortly after. And like I said earlier,
I begged for an invite. And then why I stayed
with it, I think before GoSee, I never really
contributed to A terminal emulator. Yeah, so
that was kind of new for me. Because I knew Zig,
it was approachable to me. I wasn't scared of
digging into it. And there were things that weren't
implemented. I also had to learn Swift because
a lot of the stuff that I contributed were UI
changes and all that was and still is in Swift
because it's all done in a native Mac app. So
I had to learn Swift to add some stuff, which
was kind of interesting because that was kind
of fun to learn something new. But yeah, that
was what kept me around was being able to contribute
to it, to the project in meaningful ways, right?
Not just fixing typos or something, but actually
adding real features. And then having both sides
of the puzzle, or not the puzzle, but being able
to implement a feature in Ghosty and then use
it and test it in NeoVim was intoxicating, right?
It was just so fun. uh to be able to be on both
sides so um that was that was also the reason
why i um kept kept going to contribute stuff
mental credit too i think mitchell did a really
good job of being open to contributors and creating
a really healthy environment especially early
on um so i don't know just made it easy made
it easy to contribute and stick around um yeah
i i wrote a i wrote a blog post about ghosty
being native because i mentioned that's really
important to me like i care about that and but
this is back when ghosty was still in beta there's
all this hype around it which i personally hated
i hated all the hype like it was people were
like people were like debasing themselves to
count me in i created a couple videos Which,
I mean, I definitely, you know, I joined the
Discord and asked for an invite, so I'm guilty
myself, right? But the hype definitely kind of
grew out of control. But when people were talking
about why people are so excited about Ghostie,
they would talk about performance, or they would
talk about font rendering or ligatures, which
is, I said that because, like, I don't care about
that at all. I don't care about ligatures. I
don't really care about font rendering. So it
was just funny to see people care so much about
the stuff that, to me, was not important. But
what was important to me and what I thought goes
to the most distinguishing feature was that it
was native, both on macOS and on GTK. It uses
native GTK APIs, and it feels like, aside from
GNOME Terminal or Texas or however you say it,
it's like the most GTK terminal there is. which
obviously I know on Linux, not everyone uses
GTK, not everyone likes GTK, but if you're using
GNOME, Ghosty feels like it belongs there, which
is awesome. I think it's awesome. And so I wrote
this about why I cared about that, what that
even means. And I think it got some attention,
so hopefully people understood what that meant.
But that is the reason why I continue to use
it, and I'm very happy with it, and I don't anticipate.
not using it because of that native integration
and as well as how fast it is. It implements
a lot of cutting edge. So compared to iTerm,
iTerm is also native. iTerm also is really good
about implementing new features. The author of
iTerm is a guy named George Nachman, I think
is his last name. And he also does a lot of new
stuff, and he works with Neon sometimes. And
so iTerm also has some cutting -edge stuff. But
iTerm is not fast, unfortunately. It's pretty
slow. So Ghosty kind of beats iTerm for me there
in that it has the other two features and also
is a lot faster. Did you like iTerm's configuration,
the way of configuring it? Maybe it's a skill
issue on my side, but... I had to go into the
GUI and do stuff in the GUI, and I didn't like
that. Yeah, I was in the GUI. Yeah, so I never
managed my iTerm config in my .files or anything.
So I'd also prefer that about ghosties. It's
text -based config. Although, I know that there
are plans to add a GUI config editor to ghostie.
It just doesn't exist yet. My ghostie config
is also pretty simple. I don't have a lot in
there. OK. But you can still, even if the GUI
comes along, you can still configure it via the
config file, right? Yeah, that'll always be an
option. I think that's one reason why the GUI
hasn't been done yet. It's not that it's hard
to write the GUI. It's that it's hard to design
around it. How do we support a GUI and also support
having a version -controlled file that people
can manage? And is the GUI actually needed? Like,
being honest. No, no, it's definitely not needed.
It's just some people want it. Oh. Like you won't
ever need to use it if you don't want to. Okay.
Yeah, that was my question. Like why a GUI? But
I guess users want it basically, right? So that's
why. Yeah. Yeah. And the one thing Ghosty doesn't
have that I miss, that I wish it had, is the
search feature. And this is like the most requested
feature. It has like the most upvotes on GitHub.
It's one of the oldest open issues. But it's
also like, it's not, it's absolutely non -trivial
to implement. So it's basically, Mitchell has
basically said that he wants to do it. What do
you mean? The search feature, what is it? Like
being able to, like if I have all this text on
my screen, let me just click. Oh. I have all
this text and I want to press command F and search
for text on the screen. Oh, I see. I can't do
that. So it's not available. Okay. So what I
do now is Ghosty does have a feature to write.
the screen to a file so i open that in the oven
and then i can search in here so that i mean
that kind of works it works well enough it's
not perfect but what are your thoughts on your
your thoughts on tmux by the way because i don't
miss that because i I use tmux, and I get it.
It's like using another terminal inside the terminal.
There's a lot of people against tmux. What are
your thoughts personally on tmux? I don't have
anything against tmux. I used tmux for a long
time. My tmux config file is pretty fancy, actually.
I have a ton of stuff in here. I use tmux. Actually,
it's funny. Talking about that history of terminals,
I didn't talk about tmux. For a long time, I
didn't actually care what terminal I used because
I was like, I just use Tmux. So whether it's
Alacrity or Kitty or whatever, it doesn't really
matter. I actually remember now, that was the
reason I switched to iTerm is because iTerm supported
features that didn't work. I think it was the...
That's what it was. I'm remembering now. It was
the Kitty Keyword Protocol. It has a bunch of
different names, but the Kitty Keyword Protocol
or CSIU or whatever. For anyone who doesn't know,
I'll do a real brief terminal history lesson.
But the way that historically keys, like when
you press a key that's communicated to your terminal,
it's all in ASCII, right? And if you look at
the way that control characters are sent, it's
like if you press control, like, okay, so let's
look at the ASCII table here. I is 49, ASCII
49. And when you press, or I should still get
lowercase i, I think. Anyway, the point is that
when you press control and i, that gets sent
as a different character, the same as tab. So
you can see this even today in Neva. If I press
tab, I see, I don't know if you can see that,
but it says control i. I press tab. Another one
is enter. If I press enter, you see control m.
So this all has to do with historical baggage,
right? The way that certain keys were represented
when you hold the control key. So for a long,
long, long time, it was the case that applications
in the terminal couldn't distinguish control
I from tab or control M from enter. And they
couldn't see control and number keys. So you
couldn't press like control one or control two.
So in an application like Vim, those keys are
just not available to be mapped. So there are
a couple of different attempts at solving this,
and the one that has stuck and has been implemented
pretty extensively now is the one proposed by
the kitty of COVID. So it's today called the
Kitty Keyword Protocol, although it's sometimes
also called CSIU for other historical reasons.
But when I learned about this feature, I termed
support of it, support of the subset of it anyway,
and I wanted to use it, but TMUX didn't. Tmux
kind of supports, halfway supports it, but not
in a way that really works. At least at the time.
Things might have changed. So I always relied
on Tmux to do things like having different sessions,
different projects, window management, having
a persistent session where I could close my journal
and reopen it and pick it right where I left
off. I loved Tmux. So switching to Tmux -less
iTurn was tough for me. And I switched to iTurn
both because it had that feature and because
it had tabs. in splits which um i needed to replace
tmux so ghosty also has this so i'm if you know
i i can i can make tabs and splits in ghosty
but if i didn't have that i would still use tmux
i do still use tmux whenever i'm like ssh into
a server or something though super valuable there
but no i don't have anything against tmux i understand
the criticisms of it about how it um I mean,
I can speak from experience, right? Like working
on Neobim, I have users say like, hey, this doesn't
work. I'm using Tmux. I'm like, okay, we'd like
to do a workaround for Tmux or I have to explain
why it doesn't work in Tmux because, right? Like
it's also for most users, most of our users like
don't, like the terminal, the concept of terminals
is really confusing. It's not at all clear, right?
Like you talk about TTYs and PTYs and like most
people are like their eyes glaze over. They have
no idea what that means. so like they don't really
understand like when something goes wrong is
the problem with the shell is it with tmux is
it with the terminal emulator is it with neodym
right like it could be any of this and for someone
who spends a lot of time working on this stuff
i can usually understand what's going wrong where
but your average user doesn't know that uh and
and tmux kind of introduces another layer into
that or something in the middle yeah yeah i remember
having That issue with Tmux. I wanted to send
control enter because in Emacs, I was doing another
video with someone else and he pressed control
enter and that created another heading, a markdown,
well, an org heading below the heading that he
had. And I was like, I want to do that, right?
So control enter. But I use Tmux. I don't remember.
I have it documented somewhere, you know, but
ghosty. Tmux and NeoVim had to play nicely together
so that my control enter made it all the way
to NeoVim through Tmux, right? It's an additional
layer. It works today in most cases. Most terminals
today support the KDE Keyword Protocol. Most
interactive terminal applications today support
it. Even Vim now supports it. So it's mostly
a solved problem today, but that was an issue
for a long time. Okay, okay. Now, you also mentioned
other editors. You said, what are your thoughts
on this other one, Cursor? Have you tried Cursor?
Any experience with it? No, I haven't tried it.
I've been hesitant to try any of the AI stuff.
Yeah, what are your thoughts on AI? I don't know.
I'm skeptical. Slightly pessimistic. I guess
outside of the world of software engineering,
I'm a little bit more pessimistic in the sense
that I think it will be and already is being
used to just inundate the world with low -effort
garbage and misinformation and trash and slop,
right, is the new word for it. It's happening
in music. It's happening in digital art. It's
happening in videos. It's happening in text.
It feels like we are making this trade -off where
people are trading, having to use their brains,
which I get it. Using your brain is really hard
work. It doesn't always feel good. But in exchange,
we're losing a lot of valuable output from that.
And so I'm generally pretty negative about it.
In the context of software engineering, I'm a
little bit more open -minded, I guess. I'll say
thus far, my use of AI tools has been strictly
in the web UI chat prompts. So I don't use it
at all for personal stuff. If I'm hacking on
a side project or something, outside of for a
joke or for a meme or just to see out of curiosity.
But I don't actually use it to actually do to
do anything for fun because my my my thinking
there is like I enjoy programming like when I'm
doing it for fun. It's because the whole the
the writing the code, thinking about the problem,
how do I how do I solve the problem in code?
How do I write the code that solves the problem
in a way that is efficient and fast and easy
to read and and just satisfying to look at is
all part of the puzzle. And it's part of. the
fun. Solving that problem is why I'm doing it.
If I didn't enjoy doing that, I wouldn't be doing
it in the first place. So why would I offload
that to AI? That's how I feel about there. I
talked to a guy recently that was much more enthusiastic
about AI. And I understand where our disconnect
was. Because for him, the fun thing is getting
his projects up. He wants to spin up a server
that does X, Y, and Z so he can build this other
thing. like for him the coding is this nuisance
that he's trying to get around whereas for me
it's like when i'm coding like it's for fun uh
so i understand why like having this tool that
does the coding for him because he doesn't like
to do it i understand why he's why he likes it
uh but for for personal stuff i haven't used
it at all at work i use it a little bit we have
like gemini at work and i've used the um the
web Just the web chat thing. But even there,
I basically use it in the same way that I would
use Stack Overflow. And I found that the more
domain expertise I have, either in a language
or in a particular problem, the less useful I
find AI. I find it pretty useful, actually, when
I'm writing in a language I don't know. So I've
never written TypeScript until I started at Cloudflare.
And I now write a lot of TypeScript. And I still
have questions like, how do I do this in TypeScript,
right? And so I'll just ask Gemini, literally,
how do I do this in TypeScript? And it's great
in TypeScript because there's literally billions
of lines of TypeScript on the internet that it's
trained on. So it's great at that. How do you
know, though, that it's great? I try it and it
works. And sometimes, if I'm skeptical of the
answer it gives me, which I usually am, I'll
cross -reference it to a documentation or something.
But usually it's like a syntax question. I want
to write some type that has this property. How
would I do that? And it gives it to me. And I'll
try it. And if it doesn't compile, then it doesn't
work. And that has happened. I was trying to
solve some problem in TypeScript recently. And
I was thinking about it. And I was trying. I
was like, there's got to be a better way to do
this. And so I went to Gemini and asked. And
it gave me an answer that was wrong. I knew it
was wrong. Even before I tried it, I could see
that it was wrong. And I told it, and this is
like classic LLM, right? I told it it was wrong
and said, oh, you're right. I'm sorry about that.
And it gave me a new answer. That was still wrong.
And this wasn't even like a particularly hard
problem. This is like a leet code style question.
And I was like, I have experiences like that
all the time where I'm just like, it's just frustrating.
It's just like more waste of my time, more than
it helps me. We, I do. I do know some people
that I really respect that really like the agent
-style tools, like Cloud Code or something. And
they speak really highly of it. They use them
a lot. I haven't tried those myself. We are starting
a pilot at work where we can start experimenting
with that. Maybe I'll try it soon. But I don't
know. I, this is an area where I feel like a
cranky old man, or I'm just like, I just want
to be set in my ways. Like I know how to do my
job today. And I'm like, I'm like, everything's
changing or Shakespeare's like clouds. Right.
And I don't know, but I also find the discourse
around it to be extremely exhausting. Right.
Like the number of times I've read that. either
you have to use it now or you'll be left behind
right is I just I just roll my eyes at that now
that there are people that are like oh it's it's
here to stay so you got to figure it out you
got to start using it I'm like okay I don't know
I'm kind of like I'm just going to keep doing
my job the day that all the AI people start like
outpacing me to the point where like I'm being
left behind I'm like, I'll notice it. And then
it's like, okay, I guess I better pick it up.
But that day has not come yet. I'm still extremely
productive and very good at my job. I think so
anyway. Doing it the old -fashioned way. So I
haven't felt extremely motivated to change anything
there. But we'll see. I'm trying to keep an open
mind about it. Okay. At least in the context
of coding stuff. Okay. And no experience with
Cursor. That's the one that I'm kind of curious
about. But again, I think about leaving the terminal
and it's going to be like a completely new environment,
similar to what happened with Obsidian. I'm like,
I'm not going to enjoy it. I think, I don't know.
I'm going to feel a disconnect, I think, you
know. Yeah. I do know Cloud Code is like a terminal
based one. So if I were to try one, it's probably
the one I would do. I haven't tried it, but I
will. I could have, I could have, if you could
even like have Neoman running and then. have
it in your Neovan terminal, right? Like, I don't
know. I have no idea how you'd use cloud code.
Cloud code, whatever. How do I write? How do
I do this? I don't actually know what the syntax
is, but you can have it running in a window in
Neovan, even, which would be kind of cool. And
it reads, like, your entire project, or...? I
think so. I think it spins up some... I'm, like,
so not qualified to talk about this, but my understanding
is, like, it spins up a process and runs in your
directory and has all the context of all the
source code and everything. That's cool. Interesting.
I'll have to give it a try. I have not released
AI related content because I still use ChatGPT,
you know, copy paste and review there and paste
back into my terminal. But I will see. I wanted
to ask you as well. Let's talk about OS. What
is your favorite OS, your preferred one? And
why? What are your experiences with other operating
systems as well? I've used all the big three.
I grew up using Windows. I used Windows exclusively
until all the way through college. So it wasn't
until my first job, that first job I talked about
earlier, the web dev job. When I started there,
they gave me a Mac. I didn't ask for a Mac. They
gave me. Yeah, same happened to me. And I liked
it. I was like, I don't know. All through college,
I sneered at the Apple users. I was like, oh,
you guys with your expensive laptops, you all
think you're so artsy and unique. The Starbucks.
Right. But the irony, right? I was being snobbish
about people being snobbish, which is hypocritical.
I didn't realize at the time. But yeah, I got
a Mac and I was like, oh, I actually really like
this. And I never went back to Windows again.
And I haven't touched Windows since. The only
time I've ever used Windows since then is like
on the very rare occasions when I have to debug
some NeoVim issuing Windows. And I always hate
that. That's like my nightmare scenario is when
you open a PR NeoVim and the one failing test
is Windows. I'm like, no, please, no, not Windows.
Hey, let me ask you before we continue here.
How is that experience? Because I have never
installed NeoVim on Windows. Like, is it a native?
NeoVim experience, like not through WSL, right?
Because you could run it in WSL, but you're basically
running in Linux, right? So is there a native
Windows NeoVim package and does it work? How
compatible is it? Yeah, no, it works. It works.
It runs in Windows Terminal or I think even like
the cmd .exe thing. It runs in PowerShell. Like
we have our build system supports Windows. It
requires Visual Studio. to which is like the
compiler on windows to it to build it or have
to install like mngw or whatever but no it works
it's a huge pain in the ass to do at least for
me because i'm not like a windows user but you
can do it um and can you there there are some
plugins work and all that stuff i think so to
be honest i haven't actually like used neoman
like like really used it on windows i've only
built it to try to debug stuff but there are
some really weird So we were talking earlier
about how the terminal is confusing to a lot
of users. It's even more so on Windows because
Windows has to emulate the TTY layer that Unix
uses. So we were talking earlier about how there's
all these different layers, Tmux, your terminal,
right? On Windows, you're going through a whole
emulation layer. And that messes a bunch of stuff
up. So we have tests in our test suite in NeoVim
that we just skip on Windows because they literally
don't work. on Windows because they go through
this emulation layer. Yeah, so it does work.
I know we have users that use Windows. They're
in the minority for sure. I will say if one of
your users or viewers is watching this who's
a Windows user and likes NeoVim and wants to
contribute, we are in desperate need of someone
to own, be our Windows person on the NeoVim team.
So if any ambitious viewers are like, I want
to be on the NeoVim core team, if you come in,
can be our Windows person, that would be a really
easy way to get in. What are the requirements?
What are you looking for in a person? Generally,
in the past, when people have been moved into
the core team, it's a history of good contributions,
understanding the development process, good issue
triaging, being able to respond to issues and
understand Being able to identify what the problem
is and solve them. It's not formal. There's no
application process or anything. Usually when
we see people that are consistently helpful and
stick around, then we're like, hey, should we
add them? Yeah, let's do it. We don't do it for
everybody because not everyone sticks around
for a long time. But if people are consistent,
then we usually will add them to that helper
group. And then if someone is in the helper group
long enough, then they will often get... moved
in to the core team. But I just feel like if
someone were to come in and start solving a bunch
of Windows problems, that would get noticed for
sure and be very valuable. I'll create a clip
out of this and share it as a separate video.
Like a NeoVim Windows logo and catchy title.
We'll see what happens. Maybe someone shows up.
And you were talking about operating systems.
Sorry, I interrupted you there. Yeah, I was talking
about how I switched to using a Mac right after
college, and I've used a Mac ever since as my
personal computer. And I've used... I do own
a desktop PC that I use for just playing games,
and that runs Venora. It runs Linux. And I use
Linux at work. So I also spend a good amount
of time on Linux. Linux is fine. It's not...
I think it really depends on the hardware is
what I've been my experience. So like on my desktop
PC, Linux is pretty, pretty reliable and pretty
stable. There's some issues. I did have an issue
where for like months when I was spent, like
put the desktop to sleep, it wouldn't come back
on. It would like wouldn't wake up. So I had
like force powered off. And so I got into the
habit of just like shutting it down when I was
done, which was super annoying. And I, I like
totally by luck happened to learn. that this
is because of a bug in the Bluetooth driver.
So if I disable Bluetooth before suspending,
then it would work, and it would come back online,
which is just such a Linux thing, right? It's
like, where's your Linux bingo card? Bluetooth
issues? Wake from suspend issues? Yeah, all I
needed was an audio bug. And on my work laptop,
I have a Dell laptop I use at work that runs
Ubuntu, and I do have audio issues there. So
my bingo card is all checked. No, I think, I
mean, when I do use Linux, I just use GNOME.
I don't use a window manager or anything. I just
use GNOME. It's pretty similar to macOS, so I
like it. I like the way it looks. It looks pretty
to me. I'm happy with it. I don't do anything
fancy there. But I definitely prefer macOS. I
know that's like heresy in the open source world,
but I'm happy with it. It works. It does what
I need it to do. It looks nice. I just had to
sell my soul to a couple. Okay. What are your
thoughts? I also have an iPhone. We talked about
this earlier, but I'm completely Apple -billed.
I have an iPhone. I have AirPods. I have an Apple
Watch. I have an iPad. I have an Apple TV. I
have all the Apple crap. No, I don't have the
TV. But consistently, I'm going to sound like
a fanboy here, but I really believe this. Consistently,
in my experience, the Apple products just are
usually the best in their category. The MacBook
laptop, I will die on this deal, is the best
laptop on the market. I think that for the price,
the price per performance, price per watt, whatever,
the MacBook Air... is the best laptop. It's the
laptop I would recommend to anybody. You can
get one for under $1 ,000. The battery life is
incredible. The display is incredible. The build
quality is amazing. It has no fan. It's completely
silent. You will not get a better laptop for
the same cost as a MacBook Air. Now, there are
some people that just hate macOS, so they won't
even consider it. But hardware -wise, that's
a hell of a buy -on. the air i love my airpods
right i know i'm gonna sound like a fanboy i
already said that once but they just work so
well right i i used my very first smartphone
was an android this is a long time ago back in
in the like 2008 or something um but i had like
an htc android thing and my first two smartphones
were both androids and then i switched to an
iphone at the time it was like the iphone 4 or
something And it was so much better. It was night
and day. Once I got the iPhone, I was like, oh
my gosh, I can't believe how much better this
is. It was faster. It was smoother. The battery
life was better. And so I've used an iPhone ever
since then. That was even before I switched to
Mac. I was using Windows at the time. Same thing
with Apple TV. Before I had an Apple TV, we had
the Roku. We tried the Amazon Fire Stick, and
they were all trash. They all sucked. And then
we got the Apple TV and it just, so I'm like,
I'm like someone, please pull me out of my Apple
addiction and make a better product. So I don't
have to keep using Apple stuff. But, uh, but
then Apple, the way that Apple gets you, of course,
is everything integrates so well, right? Like
that, uh, I was thinking about this the other
day, people talk about the walled garden. Like
that's the metaphor they use to describe Apple.
And they use it in a negative term that I talk
about Apple's a walled garden. And when people
talk about that in the negative term, they're
emphasizing the walls. They're saying you're
blocked in, you're walled in. But what they forget
is the garden part. Like if you've ever been
in a walled garden, it's actually pretty nice.
You're in a nice little garden. You have these
nice walls around you keeping it quiet. And it's
beautiful, right? Like, yeah, there are walls,
but there's also this beautiful garden that I'm
enjoying. So yeah, I'm in the walled garden for
sure. But it's better, you know, I'm enjoying
the garden at least. Are there any plans then
to leave that card in? No. I mean, if iMessage
ever works on Linux, that would be a big step.
And if I could ever find a laptop that competed
with the MacBook on noise, battery life, performance,
build quality, camera quality. And the operating
system, macOS. I mean, I like macOS. It's not
perfect, but I like... I know with the upcoming
macOS release, there's been a lot of memes about
the new liquid glass. I haven't tried it, so
I don't really have any opinions on it. But aside
from that, up until now, anyway, I've generally
been pretty happy with the aesthetic design decisions
of Apple. I like it. On Linux, I'm also pretty
happy with GNOME. If I switched to GNOME, I think
I would be okay with that. I used to make fun
of... It's nice to just... On Mac OS, things
just work. I open my laptop when it's been closed
for two weeks on my desk, and it's actually been
asleep, and I open the lid, the screen comes
on immediately, and the battery is still 80 %
charged. That is not the case with my Linux laptop.
The fan on this thing, I don't think it even
has a fan. I have a MacBook Pro, so it might
have a small fan. It sounds, when I'm doing a
call with four guests, I'm pushing it. The CPU
is at 80 % and it requires a lot because I have
a MacBook Pro as well, an M4. And that's when
I hear the fan, but it's really loud. I'm sorry,
it's really low. Nothing compared to a Windows
airplane. Yeah, so I never have any audio issues.
My headphones always just connect and just work.
Do you have a problem when your headphones are
connected to the phone and you want them to connect
to the computer? Do you have a shortcut or how
do you do it? Because sometimes they stay connected
to the phone. There's an application called,
I don't remember, but I have a key map, right?
So if I type a key, it connects them to my computer.
and i can switch the audio source because sometimes
they stay connected to the phone for some reason
right so so in my experience with the airpods
this is one thing that's really nice about the
integration everything right between the iphone
and the laptop let's say i'm using my airpods
with my iphone and then i and i open my laptop
i get a little notification that says i've detected
airpods and i can click connect if i want them
to switch to my macbook But if I don't click
that, it doesn't switch. Oh, with that AirBody,
you use an application called AirBody something.
No, this is just all native. And then the AirPods
are also pretty good about intelligently switching.
So let's say the reverse situation. I have them
connected to my MacBook. And then I pull out
my phone and I want to play a video on my phone.
It's like... Somehow it knows that because now
audio is playing on my phone, it will automatically
switch the AirPods to connect to my phone instead.
And then as soon as I go back to my laptop and
start playing audio from my laptop again, it'll
switch back to my... So the AirPods are really...
That's the kind of stuff that keeps you hooked,
right? That integration that works really well.
Yeah. Yeah. I used to make fun of Android...
No, iPhone users, because I was an Android user.
I have been all my life, you know? And I was
like, iPhone. So why do you need an iPhone? Because
there's this image that you have of iPhone users,
right? Then I started with Mac OS. Then I got
the iPhone. I loved it. You know, the integration
between the two devices. It's like, man, the
shared clipboard. I tried that. The shared clipboard
is awesome. Yeah. Oh, it's so great, man. I love
that feature. What do people think? What do the
rest of the people think? Especially in our community,
you know, NeoVim, Terminals, all that stuff.
What do others think about your love for Apple?
Because most of them, are they most of them Windows?
Or how are things there? On the NeoVim team,
it's split. We have about half of the people
use... Actually, no, it's not split even. I think
there's only a few of us that use... Mac OS and
the rest use Linux. I think I might be. So I
will say on the core team, I'm maybe the only,
I think Justin's the other one. There are not
very many Americans. So I'm one of only one or
two Americans. We have a lot of people that live
in Europe. And so just based on that, like the
iPhone just alone is much less common in Europe.
So I think I'm like the only iPhone user. But
we have a few other Mac users. I don't know.
I've kind of just accepted the fact that liking
Apple is a controversial, or not liking Apple,
liking Apple products is a controversial, unpopular
opinion in the open source world. And I've just
embraced it. I'm like, whatever. I don't care.
It's funny because I live these two separate
lives because outside of the open source world,
in like the tech community people that i know
in real life i definitely live in like a little
bubble but like basically everyone i know has
an iphone like it's it's very rare to meet someone
or to that i will text someone that has an android
so it's it's very it's very opposite like this
very contrasting would you like to talk about
your keyboard um what do you use for keyboard
i use a uh Let me pull the picture. I have it
here on my desk, obviously, but it must be easier
to pull the picture. But I use the Keychron Q11.
Let's see. Is it right here? Oh, it's a split.
Split keyboard, yes. I'm on the split keyboard
game, and I probably will be for the rest of
my life. I love it. Using a normal keyboard now,
once you get used to a split keyboard, like that,
having your arms so close, it just feels awkward
to me now. The split is awesome. Before this,
I tried the Moonlander, the ZSA Moonlander. It's
this guy. And a lot of people love this thing.
And if you go online and search for it, do some
research. That's the recommendation. That one,
the Glove 80, or the one that Prime uses? Yeah.
Prime uses, I think, one of the Kinesis ones.
I tried this and I did not like it and I I there's
an expensive keyboard I returned it you have
to pay the return shipping to Taiwan which is
expensive so like it's it's expensive to return
but it just was not a fit for me and I tried
so hard like I really wanted to like it because
people speak so highly of it but I found I did
not like the ortho linear oh you don't like it
No, and I couldn't find any reliable research
or sources that suggested that it's actually
better. It's just different. I think people like
it because it's more logical, but unless I see
a study that tells me otherwise, I'm not convinced
that it's any better for you ergonomically. I'm
a pretty good touch typist on a QWERTY keyboard.
I can type over 100 words per minute pretty easily.
So anything that messed with my touch typing,
I really didn't like. And then I didn't like
the thumb clusters. They actually ended up giving
me more pain because I ended up making this motion
a lot, right? Yep. And that in turn ended up
triggering something in my forearm muscle. So
it was like this ironic situation where... using
the Moodlander was causing me more pain than
just using a regular keyboard. I also didn't
really like that. So the concept of having layers,
I think, is cool. But I didn't like not having
easy access to certain keys. So obviously, there's
no function keys on here. I think even like arrow
keys, you have to activate a layer to use arrow
keys. Or they're in a weird position. And I think
there are some others too. I don't remember off
the top of my head now, but just looking at this
picture, it's like maybe I think the escape is
in a weird place. Anyway, the point is, it just
felt weird to me. And what I came to realize
about myself is, you know what? I just like the
staggered QWERTY layout. I have no problems with
it. I like having function keys. And so when
I found this one, I was like, this is perfect.
I don't need the numpad. It has function keys,
has the staggered QWERTY layout, and it's split
and it's mechanical and it's programmable. It
still uses QMK or what it's called. Yeah. You
can still program it. So I still have a layer.
I have a symbol layer so I can press a key and
I can type in like parentheses and stuff without
having to stretch my hand. That was the one thing
I took away from using the Moonlander. But yeah.
I'm very happy with this keyboard. If this keyboard
broke, I would just go buy another one. I use
red keys because I know people are going to ask.
Red keys? Okay. The Gateron Pro Reds. Those are
soft. I had the Pro Reds in the Glove 80. I didn't
like them because these are MX switches. I don't
know about switches. I don't know about anything
keyboards related, but these are MX. They're
bigger switches, right? The ones that I use are
Chalks. They're smaller. I didn't like the Pro
Reds. They were clanky. I don't know. Yeah, I
think I would also like the low -profile ones.
If Keychron made a version of this with low -profile
keys, I would buy it immediately. I wouldn't
even think about it. But they don't. The deep
keys don't bother me. I would prefer the shallower
ones, but I can live with these. Did you ever
use the Magic Keyboard, Apple's Magic Keyboard,
the external one? I think I have used it, but
I've never used it a lot. Like it's my primary
keyboard. No. I don't own one. That was my favorite
keyboard. But like you said, having the hands
like this, pretty close, you know? Yeah. Hurt
my forearm. I know. Man, if Apple get me to buy
another product, if they made... The Magic Keyboard
split version? Yeah. That's by far the best keyboard
I have used. And I know people are going to hate
this because I have a Glove 80. For people that
don't know, I just don't have a regular keyboard.
I have this one. But I still prefer the feeling
of the external Magic Keyboard because it's pretty
soft. I could type really fast on that thing.
But it's not split. I hate that. Now, I got used
to the ortholinear. piece but it took me a while
it took me some time i hated typed in the the
b uh character right b as in boy because it's
it's it's hard to get used to it did you ever
get used to yeah i think i was it was either
the b or the n the b and the n yeah it sucks
where i felt like i was having to stretch so
much further yeah that was another thing i was
like this just feels worse this doesn't feel
better this feels worse so no the the day that
i the day that i decided like i really fought
it because i really really wanted to like the
moon lander but the day that i like made the
decision was like no i i'm not going to keep
it i just felt like so much relief it was like
i just knew it was the right choice so no i just
stick to the i just stick to a staggered qwerty
that's that's all i need and i i should say too
like i don't really other than like the usual
rsi stuff that every professional computer person
has to be aware of i don't have any real issues
so Obviously, people that do have to make different
decisions, but I don't have to worry about that,
at least not right now anyway. So on that, the
split keyboard is all I need. Yep. Do you use
the arrows or not at all on your keyboard? I'm
sure that I do use them, but not a ton. Obviously,
using them, I don't use them much. Have you heard
about this application kind of in macOS that
allows you to use spin motions everywhere? It's
not open source. The code is not publicly available.
It's a paid application. So that's a big no -go
for a lot of people because, you know, you don't
know what's going on. And it's sensitive stuff
that it has access to. Yeah. I know there's...
You're not talking about Karabiner, are you?
No, I use Carabiner. Carabiner is open source,
I think. Yeah, Carabiner is open source. I think
Carabiner can do that. I think I might have even
experimented with it. No, I don't know. I just
kind of use the default most of the time. Yeah.
No, this kind of allows you to enter normal mode.
in any application like in your email right you're
typing an email you press kj you enter normal
mode and you can navigate around then you jump
into insert mode normal mode it uses the mac
os um accessibility api oh yeah discord slack
basically everywhere use them that navigation
layer in insert normal mode visual mode as well
not perfect but um it's it's kind of nice especially
you know if you're used to to NeoVim or Vim stuff,
actually. All right, I haven't tried it, but
I'll check it out. What's it called? Kind of
Vim. Let me see. I had a call with that guy.
It's a French guy. Let me share my screen. I'll
show it to you. Where's my screen? Here. This
kind of Vim mode. So just to give you an example.
Let me see. What can I bring up? I don't want
to show my email. Discord. I can bring up Discord
here. So here I have Discord and I'm just going
to jump to aerospace, but better here. Are you
able to see Discord there? Yeah. How do I zoom
in? Just move this a little bit to the side.
there why so mean oh okay there there there so
if I type something here if I oh you cannot see
because of these this green thing there let me
move it around okay so if I type this and if
I press KJ here applications in the background
turn like dark, darker, that tells me that I'm
in normal mode. So I can type B here and I can
just type in the VE, you know, or CE. I can change
this, you know, and just edit stuff that way.
JK, normal mode, you know, so it's useful for
emails, for Discord, Slack, that type of thing.
Oh, nice. Do you use any window manager? Any?
No. I've tried them in the past. I used i3 for
a little bit when I was on Linux. It was fine.
I liked it. I didn't feel like I loved it enough.
I never got hooked on it, I guess. I did try
some macOS ones, but I don't really like any
of them. No, I don't know. I actually, I like
just like the floating windows, like the floating
window thing. I don't need my windows to be tiled.
And I know some people have like really sophisticated,
like power user configurations with their time
and demand your setups. I think that's great.
It looks awesome. I don't know. I don't like
I think about like the amount of time and effort
it would take to set that up. Yep. I just don't
feel that motivated to do it because I don't
know. It doesn't sound fun for me right now.
it's not fun then i'm probably not gonna find
the time for it any final words any final stuff
that you want that you want to talk about um
this is super fun thanks for having me uh i hope
um i i mentioned this last time um and i'll repeat
it i'm you know super honored to be on the new
vim team uh it never feels like a chore it always
feels extremely satisfying to know that we have
so many users that enjoy it and christian and
i were talking earlier about how you and i were
talking earlier about how um neovim has been
like the most admired editor in the stack overflow
survey for like five years in a row now which
is awesome like that's so cool that people love
it so much so i'm i just feel honored to be a
part of it i don't have any plans to stop i'll
always you know We need to be involved in some
capacity for the foreseeable future. So, yeah.
And just pop into the Matrix chat and say, hi,
we have an off -topic channel that people can
jump into. And it truly is off -topic. We are
actually kind of strict about that. If you come
into the off -topic channel and start asking
questions about NeoVim, we'll tell you to leave
and go to the on -topic channel. So most of the
core team hangs out in there. Yeah. I don't have
anything else to add. All right. Awesome, Greg.
I just want to say thanks for your time. Thanks
for showing up, you know, and sharing with all
of us. Going to be editing the video and sharing
it, you know, in the next couple of days. So
thank you very much, man. Yeah, thanks a lot,
Christian, for organizing this. This was fun.
Yep. No worries. Whenever you want to talk about
something, reach out and we can create a video.
If you want to demo something about NeoVim. I
don't have a large audience, but at least we
get, you know, a couple of users. Yeah, it's
more than I have. Right, Greg. Appreciate it,
man. Have a great day. Notice how I was able
to jump to this Tmux session here. And the reason
you're here is because I want to thank the different
YouTube members. You should be able to see their
names listed here. The first CEO that joined
Webto3, webto3 .com. We have three executive
producers and the other YouTube members. I also
want to thank the people that have donated in
Ko -fi. If you like my videos, remember that
you can consider becoming a member. That is what
helps keep the channel going. Remember that if
you like this video, give it a thumbs up. That
just tells YouTube that the video is interesting
for other people. Leave comments. Watch the entire
thing because that increases the average view
time. And the more view time a video has, the
more YouTube shows it to other people. So yeah,
every view counts. Every view helps. Every comment,
every like. support the channel however you can