WEBVTT

00:00:00.000 --> 00:00:02.180
if someone wants to use lazy or whatever i am

00:00:02.180 --> 00:00:04.799
again this is like do whatever you want i'm not

00:00:04.799 --> 00:00:06.839
the boss i'm not like your editor mom or dad

00:00:06.839 --> 00:00:08.960
right like i'm not going to come like knocking

00:00:08.960 --> 00:00:11.000
on your door saying how dare like so people will

00:00:11.000 --> 00:00:13.259
do is they'll say okay local foo equals require

00:00:13.259 --> 00:00:18.859
my plugin dot sub module dot foo right and i

00:00:18.859 --> 00:00:21.719
understand people do this because this is if

00:00:21.719 --> 00:00:27.429
you're writing like rust or or JavaScript, right?

00:00:27.510 --> 00:00:29.750
This is what you do. You import modules at the

00:00:29.750 --> 00:00:32.409
top levels that you can refer to them by a shorthand

00:00:32.409 --> 00:00:34.729
in your function. But in Lua, what this does

00:00:34.729 --> 00:00:38.469
is that when your code is executed, you are calling

00:00:38.469 --> 00:00:41.530
this require here as soon as the script is executed.

00:00:41.710 --> 00:00:44.390
It's not happening when you call doStuff. It's

00:00:44.390 --> 00:00:48.789
happening when the file is loaded. So this is

00:00:48.789 --> 00:00:52.070
an area, this is, I think, one reason that this

00:00:52.070 --> 00:00:54.250
has been more of a problem in Lua is just because

00:00:54.859 --> 00:00:56.780
People naturally want to do this pattern. And

00:00:56.780 --> 00:01:01.000
again, I understand why. But that ends up hurting

00:01:01.000 --> 00:01:03.960
the lazy loading, right? Because you're not lazy

00:01:03.960 --> 00:01:05.980
loading it now. You're loading it up front instead

00:01:05.980 --> 00:01:07.859
of on demand. If you're listening to this as

00:01:07.859 --> 00:01:10.000
a podcast, remember that it was originally recorded

00:01:10.000 --> 00:01:12.099
as a video. If you're not following along, you

00:01:12.099 --> 00:01:13.900
can go to my YouTube channel. My username is

00:01:13.900 --> 00:01:15.900
Linkarzu. And if you want to support me to keep

00:01:15.900 --> 00:01:18.159
this podcast going, you can donate in Ko -fi.

00:01:18.280 --> 00:01:19.640
I'm going to leave a link in the description.

00:01:19.939 --> 00:01:21.799
All right? So let's get started with this chapter

00:01:21.799 --> 00:01:26.930
then. Hey, Greg. How's it going? Hey, Christian.

00:01:27.189 --> 00:01:30.310
Good. Glad to be here. Yeah, second time you're

00:01:30.310 --> 00:01:32.930
in the channel. The previous time was with TJ,

00:01:33.209 --> 00:01:40.329
CT, and Josh. Yeah, the new event for CMAX. That

00:01:40.329 --> 00:01:44.310
was a good time. Yeah, they actually had a call

00:01:44.310 --> 00:01:49.849
with an EMAX power user, I would say, or contributor.

00:01:50.409 --> 00:01:54.129
His name is Brot. Everyone talks about Proud.

00:01:54.189 --> 00:01:57.650
Have you heard about him by any chance? No? I'm

00:01:57.650 --> 00:01:59.590
not super tuned into the Emacs world, though.

00:01:59.930 --> 00:02:04.150
No? Yeah. Pretty interesting conversation. So

00:02:04.150 --> 00:02:07.790
really appreciate that you're here, Greg. Thank

00:02:07.790 --> 00:02:10.270
you very much for your time. It's Friday. What

00:02:10.270 --> 00:02:13.050
time is it where you're at, by the way? It's

00:02:13.050 --> 00:02:16.090
6 p .m. I'm in central time in the U .S. Oh,

00:02:16.110 --> 00:02:19.949
okay. So the reason we're doing this call is

00:02:19.949 --> 00:02:23.849
just to get to know Greg's... workflow and talk

00:02:23.849 --> 00:02:28.990
about neovim ghosty a lot of other other topics

00:02:28.990 --> 00:02:32.370
okay so just to give a little bit of context

00:02:32.370 --> 00:02:36.530
would you mind sharing who you are like are you

00:02:36.530 --> 00:02:39.009
a neovim maintainer ghosty maintainer just hear

00:02:39.009 --> 00:02:44.409
about you overall sure um i'm i'm greg i go by

00:02:44.409 --> 00:02:47.810
gp anders online a common misconception is that

00:02:47.810 --> 00:02:51.500
my last name is actually anders not anders I

00:02:51.500 --> 00:02:54.460
have the P in there as my middle initial. The

00:02:54.460 --> 00:02:56.259
reason for that, actually, is because back in

00:02:56.259 --> 00:03:00.000
2015, circa 2015, when I was trying to buy a

00:03:00.000 --> 00:03:03.060
domain name, I, of course, looked for ganders

00:03:03.060 --> 00:03:06.759
.com first, and it was taken. But GP Anders was

00:03:06.759 --> 00:03:09.400
available, so I just took it, and I've been GP

00:03:09.400 --> 00:03:12.740
Anders ever since. So your last name is Anders,

00:03:13.000 --> 00:03:16.139
right? Yeah. Okay. That's right. Okay. People

00:03:16.139 --> 00:03:19.560
think it's Panders. yeah yeah on uh we have like

00:03:19.560 --> 00:03:23.639
a little you know neo them chat uh where like

00:03:23.639 --> 00:03:26.280
the maintainers and some contributors hang out

00:03:26.280 --> 00:03:30.539
online and my nickname on there is panders or

00:03:30.539 --> 00:03:34.419
just people cases soon that's my last name um

00:03:34.419 --> 00:03:37.680
anyway the i guess most of your watchers would

00:03:37.680 --> 00:03:40.360
probably if they know me would know me as uh

00:03:40.360 --> 00:03:43.639
as a new core maintainer the role that i've had

00:03:43.639 --> 00:03:49.180
for almost four years since late 2021 or so.

00:03:50.599 --> 00:03:54.460
My contributions in NeoVim are pretty broad and

00:03:54.460 --> 00:03:57.340
have varied over time in terms of how active

00:03:57.340 --> 00:03:59.819
I've been. But I've worked on everything from

00:03:59.819 --> 00:04:04.759
the LSP client, tree sitter improvements, to

00:04:04.759 --> 00:04:07.460
kind of some small features like editor config

00:04:07.460 --> 00:04:11.500
integration. One thing that I'm particularly

00:04:11.500 --> 00:04:15.580
really proud of is the new file type implementation

00:04:15.580 --> 00:04:19.300
was something that I helped contribute to originally

00:04:19.300 --> 00:04:22.839
the project local configuration that NeoVim has

00:04:22.839 --> 00:04:24.259
now. We can talk about that actually later because

00:04:24.259 --> 00:04:26.600
I think that's kind of an interesting, semi -interesting

00:04:26.600 --> 00:04:32.220
story, but allowing you to have XRC files, what

00:04:32.220 --> 00:04:34.019
they're called. It's like files within a project

00:04:34.019 --> 00:04:39.060
that you can run in a secure way. Yeah, but kind

00:04:39.060 --> 00:04:41.180
of all over. But my biggest area of focus, though,

00:04:41.240 --> 00:04:42.939
I guess, in NeoVim is kind of in the terminal

00:04:42.939 --> 00:04:45.480
area. So both NeoVim is a better terminal. And

00:04:45.480 --> 00:04:48.560
then the fact that NeoVim itself doesn't have

00:04:48.560 --> 00:04:52.240
to be, but often is, a 2E application, an application

00:04:52.240 --> 00:04:56.980
that runs in the terminal. So we have to understand

00:04:56.980 --> 00:05:00.959
the terminal as an ecosystem, or excuse me, as

00:05:00.959 --> 00:05:03.939
a platform, and what features we have available

00:05:03.939 --> 00:05:05.639
and how we can take advantage of those. So those

00:05:05.639 --> 00:05:08.660
have been... That's the area that I enjoy contributing

00:05:08.660 --> 00:05:11.639
most and I think I've spent the most time contributing

00:05:11.639 --> 00:05:15.839
to over the last couple years. Okay, and on the

00:05:15.839 --> 00:05:18.680
ghosty side? The ghosty side, yeah. I joined

00:05:18.680 --> 00:05:25.620
the ghosty beta back in 2023, I want to say.

00:05:25.779 --> 00:05:30.279
It was relatively early stages then. I will totally

00:05:30.279 --> 00:05:31.879
admit I was shameless about it. I joined the

00:05:31.879 --> 00:05:34.139
Discord and said, hey, I'm a NeoVim contributor.

00:05:34.500 --> 00:05:37.759
I would love to try ghosty. And Mitchell used

00:05:37.759 --> 00:05:41.399
the power. I did. I don't do that often. And

00:05:41.399 --> 00:05:43.639
to be honest, there's not many scenarios in life

00:05:43.639 --> 00:05:45.939
where any of them gets me a ticket into anything.

00:05:46.060 --> 00:05:49.000
Right. So this was one of the only possibly the

00:05:49.000 --> 00:05:52.199
only time that will ever happen. But Mitchell

00:05:52.199 --> 00:05:57.680
is a new user. And so he let me invite. And at

00:05:57.680 --> 00:06:00.699
the time, there was still a lot of low hanging

00:06:00.699 --> 00:06:02.759
fruit in terms of features and things that needed

00:06:02.759 --> 00:06:06.220
to get done. And so I just started sending PRs.

00:06:06.480 --> 00:06:10.199
And for a very brief period, I was one of the

00:06:10.199 --> 00:06:13.579
top three contributors, although my activity

00:06:13.579 --> 00:06:17.019
in the past year has declined substantially.

00:06:17.439 --> 00:06:21.459
I still hang out in the Discord and try to be

00:06:21.459 --> 00:06:24.459
useful where I can, but I've definitely kind

00:06:24.459 --> 00:06:29.079
of taken a backseat there. Okay. And how did

00:06:29.079 --> 00:06:30.819
you get started with all this? Would you mind

00:06:30.819 --> 00:06:33.449
sharing a little bit about your background? Did

00:06:33.449 --> 00:06:36.269
you start with computers early in life? Did you

00:06:36.269 --> 00:06:40.670
go to school and it was computer oriented? Or

00:06:40.670 --> 00:06:46.110
how did your love for what IT overall started?

00:06:48.550 --> 00:06:52.029
Computers in general, I was a child of the 90s

00:06:52.029 --> 00:06:54.430
and early aughts. My brother and I played a ton

00:06:54.430 --> 00:06:56.810
of video games. So we were familiar with computers

00:06:56.810 --> 00:06:59.589
in that sense. We were the family technicians,

00:06:59.750 --> 00:07:03.110
right? DVD player won't start. I mean, I'm old

00:07:03.110 --> 00:07:05.589
enough to where the VHS player is working, right?

00:07:05.769 --> 00:07:09.670
How do we hook that stuff up? That's more like

00:07:09.670 --> 00:07:11.509
electronics, I guess, and not much computers.

00:07:11.850 --> 00:07:14.430
My first experience to actual computer programming

00:07:14.430 --> 00:07:17.470
was when I was a teenager, and I was really at

00:07:17.470 --> 00:07:20.569
the time into World of Warcraft. And one thing

00:07:20.569 --> 00:07:27.269
you can do in WoW is write these UI mods to affect

00:07:27.269 --> 00:07:29.970
the way that the user interface looks and stuff.

00:07:30.700 --> 00:07:33.560
And that's all done in Lua, which is kind of

00:07:33.560 --> 00:07:39.079
funny now. I didn't write a lot of Lua from U

00:07:39.079 --> 00:07:41.639
of M now. So I started writing these UI mods

00:07:41.639 --> 00:07:44.579
for World of Warcraft, and that was the first

00:07:44.579 --> 00:07:48.540
code I ever wrote. So Lua was my very first language,

00:07:48.699 --> 00:07:51.180
which is kind of funny now in hindsight. But

00:07:51.180 --> 00:07:53.339
after that, I didn't study computer science in

00:07:53.339 --> 00:07:55.339
school. I majored in electrical engineering.

00:07:57.230 --> 00:07:59.449
I think we had one semester of programming in

00:07:59.449 --> 00:08:05.310
C++, but I went through all of my undergrad not

00:08:05.310 --> 00:08:08.149
expecting to be a programmer. I didn't think

00:08:08.149 --> 00:08:10.009
of myself as a programmer or as a software engineer.

00:08:10.430 --> 00:08:12.209
I didn't really know what I wanted to do. I just

00:08:12.209 --> 00:08:13.769
figured I would do something in engineering,

00:08:13.889 --> 00:08:16.610
but I wasn't sure what that would be. And then

00:08:16.610 --> 00:08:21.110
when I graduated, I don't really understand how

00:08:21.110 --> 00:08:23.029
this happened, but I interviewed this company

00:08:23.029 --> 00:08:25.050
that was like a technology consulting firm, and

00:08:25.050 --> 00:08:29.620
they did a bunch of Web development stuff. And

00:08:29.620 --> 00:08:32.299
I got hired there. So I remember actually in

00:08:32.299 --> 00:08:37.399
my technical interview, the interviewer asked

00:08:37.399 --> 00:08:40.379
me how well I knew JavaScript. And I told him

00:08:40.379 --> 00:08:44.639
that I had done a little bit of Java in school.

00:08:45.299 --> 00:08:48.580
Is that the same thing? Or is that similar? Which

00:08:48.580 --> 00:08:51.000
obviously anyone who knows about those languages,

00:08:51.139 --> 00:08:53.600
that's laughable to even ask that. But that's

00:08:53.600 --> 00:08:55.519
the level where I was when I interviewed here.

00:08:56.139 --> 00:08:58.000
But I guess I did it well enough in my other

00:08:58.000 --> 00:08:59.720
interviews that they figured, okay, this guy

00:08:59.720 --> 00:09:03.259
can learn on the job, and they hired me. So I

00:09:03.259 --> 00:09:05.679
went to Code Academy and a bunch of that stuff

00:09:05.679 --> 00:09:08.860
and learned JavaScript and HTML and CSS and stuff.

00:09:09.399 --> 00:09:14.100
So yeah, that was my first job in 2015. I was

00:09:14.100 --> 00:09:18.000
22 years old. I was writing Java. It was very

00:09:18.000 --> 00:09:23.080
enterprise web stuff. So Java... Java Spring

00:09:23.080 --> 00:09:26.700
on the back end. The front end was JavaScript

00:09:26.700 --> 00:09:31.879
pages, JSPs, which is such a gross old technology.

00:09:32.799 --> 00:09:36.320
At the time, the hot new thing was Angular. Angular

00:09:36.320 --> 00:09:39.159
1 was the cool thing that the cool kids were

00:09:39.159 --> 00:09:41.200
doing. React wasn't even a thing at the time.

00:09:43.120 --> 00:09:46.960
So I did that for about a year, and it took me

00:09:46.960 --> 00:09:49.179
about that long to realize that that's not what

00:09:49.179 --> 00:09:52.919
I wanted to do. So I left that job and went and

00:09:52.919 --> 00:09:56.120
got a master's degree in aerospace engineering

00:09:56.120 --> 00:10:00.220
as a way to kind of thinking at the time, okay,

00:10:00.299 --> 00:10:02.899
I want to go work for like SpaceX or NASA or

00:10:02.899 --> 00:10:04.480
something, right? Like that was like the dream

00:10:04.480 --> 00:10:08.039
job. Since we're swapping embarrassing interview

00:10:08.039 --> 00:10:11.899
stories, before I went to grad school, I tried

00:10:11.899 --> 00:10:14.759
applying. I applied to SpaceX for one of their

00:10:14.759 --> 00:10:16.899
like flight control software positions or something.

00:10:17.240 --> 00:10:20.990
And it was, the job was for C++. At the job that

00:10:20.990 --> 00:10:23.490
I had, we didn't do any C++. It was JavaScript

00:10:23.490 --> 00:10:27.830
pretty much almost exclusively. And in the technical

00:10:27.830 --> 00:10:29.789
interview, not even the technical interview,

00:10:29.870 --> 00:10:32.350
it was like the screen call for this job. The

00:10:32.350 --> 00:10:35.309
interviewer asked me, she was like, I just had

00:10:35.309 --> 00:10:37.889
six basic C++ questions. This is just to make

00:10:37.889 --> 00:10:39.879
sure. And then we'll go through the next part.

00:10:40.240 --> 00:10:42.299
She asked me the first three questions and every

00:10:42.299 --> 00:10:44.320
single one of them I had to say, I don't know

00:10:44.320 --> 00:10:46.179
the answer to that. I literally didn't even know.

00:10:46.259 --> 00:10:48.419
I couldn't even guess. And she stopped the screen

00:10:48.419 --> 00:10:50.279
call halfway through. I was like, okay, I think

00:10:50.279 --> 00:10:53.559
we have what we need. So I was so embarrassed.

00:10:53.840 --> 00:10:56.879
I literally could not have done worse. I didn't

00:10:56.879 --> 00:10:59.460
even get a single question right. So I was like,

00:10:59.519 --> 00:11:03.259
okay, I'm not going to get into this job as I

00:11:03.259 --> 00:11:07.960
am now. I need to go get more training. Going

00:11:07.960 --> 00:11:10.860
to graduate school and getting a master's was

00:11:10.860 --> 00:11:15.519
kind of a hack. Okay, so my thinking was, and

00:11:15.519 --> 00:11:17.299
this ended up working out and being true, if

00:11:17.299 --> 00:11:21.299
you want to pivot your career, so at the time

00:11:21.299 --> 00:11:22.840
I was doing web tech, right, and I wanted to

00:11:22.840 --> 00:11:28.039
do embedded aerospace stuff, right? But if I

00:11:28.039 --> 00:11:29.879
were to just apply for a job, I'm not qualified,

00:11:30.000 --> 00:11:34.340
and I'm being interviewed and hired as an experienced

00:11:34.340 --> 00:11:36.399
candidate with no experience, so I don't even

00:11:36.399 --> 00:11:39.759
get considered. But if you go through school,

00:11:39.899 --> 00:11:42.419
through college, and then apply, you're hired

00:11:42.419 --> 00:11:45.659
as a recent grad. And they don't care if you

00:11:45.659 --> 00:11:48.019
don't have experience. So that was kind of like

00:11:48.019 --> 00:11:51.419
my workaround for not having experience. I just

00:11:51.419 --> 00:11:53.879
went to grad school. And I was fortunate enough

00:11:53.879 --> 00:11:56.700
to have it covered with scholarships and stuff.

00:11:58.100 --> 00:12:00.179
And then when I went and applied for jobs, even

00:12:00.179 --> 00:12:01.759
though I didn't have relevant experience, I mean,

00:12:01.779 --> 00:12:06.009
I had some, given the academic background. But

00:12:06.009 --> 00:12:07.309
they didn't care that I didn't have experience,

00:12:07.450 --> 00:12:11.049
right? Because I was a recent grad. So I did

00:12:11.049 --> 00:12:12.909
not go and work for SpaceX. I went instead and

00:12:12.909 --> 00:12:15.450
worked for Sandia National Labs in Albuquerque.

00:12:16.070 --> 00:12:18.529
I did work on space stuff, though. I worked on

00:12:18.529 --> 00:12:22.629
electronics for satellites. That was a super

00:12:22.629 --> 00:12:24.629
interesting job. I ended up getting a top -secret

00:12:24.629 --> 00:12:28.529
security clearance and everything. So I was working

00:12:28.529 --> 00:12:31.350
with FPGAs, writing super low -level embedded

00:12:31.350 --> 00:12:35.220
code. One thing that... me and some other co

00:12:35.220 --> 00:12:37.899
-workers spent a lot of time working on was this

00:12:37.899 --> 00:12:40.740
heterogeneous, the fancy name is like a heterogeneous

00:12:40.740 --> 00:12:42.700
computing platform, right? And what that means

00:12:42.700 --> 00:12:45.539
is you're on an electronics platform that has

00:12:45.539 --> 00:12:50.940
maybe like a GPU and a CPU, or in our case, it

00:12:50.940 --> 00:12:55.519
was a CPU and then your FPGA stuff. And we ended

00:12:55.519 --> 00:12:58.090
up implementing something kind of like CUDA,

00:12:58.250 --> 00:13:00.950
for your viewers that are familiar with CUDA,

00:13:01.090 --> 00:13:05.250
where you can accelerate some algorithms by offloading

00:13:05.250 --> 00:13:08.169
it off of the CPU onto dedicated GPU hardware.

00:13:08.490 --> 00:13:11.210
In our case, it wasn't a GPU. It was an FPGA.

00:13:11.389 --> 00:13:13.750
So we had these really, really intense image

00:13:13.750 --> 00:13:16.750
processing algorithms that we needed to perform

00:13:16.750 --> 00:13:19.330
really, really fast on relatively low power hardware.

00:13:19.769 --> 00:13:24.230
So we implemented these algorithms in the FPGA,

00:13:24.389 --> 00:13:28.820
parts of them anyway. I apologize for my dog

00:13:28.820 --> 00:13:31.019
barking. It's fine. It's fine. Hopefully that's

00:13:31.019 --> 00:13:35.220
not too annoying. But anyway, and then we would,

00:13:35.220 --> 00:13:38.000
on the CPU part, we would write the code such

00:13:38.000 --> 00:13:40.500
that, like, that really, we could, like, parallelize

00:13:40.500 --> 00:13:42.240
stuff onto the FPGA and then get the result back

00:13:42.240 --> 00:13:44.399
out. So we ended up, like, recreating, like,

00:13:44.399 --> 00:13:47.100
a poor man's queue from scratch, which was super

00:13:47.100 --> 00:13:49.340
interesting. I learned a ton from that. And we

00:13:49.340 --> 00:13:52.100
applied for a patent and got it patented. So

00:13:52.100 --> 00:13:55.720
I do have one patent under my name from working

00:13:55.720 --> 00:13:59.590
there. But I really enjoyed that job, but I did

00:13:59.590 --> 00:14:02.570
not enjoy having a security clearance at all.

00:14:02.710 --> 00:14:06.769
So after about five years, I left that and went

00:14:06.769 --> 00:14:09.750
and worked for a startup called Reliable Robotics

00:14:09.750 --> 00:14:13.710
that was working on autonomous aircraft. So little

00:14:13.710 --> 00:14:16.389
cargo planes that fly themselves. That was also

00:14:16.389 --> 00:14:19.389
embedded focused. Loved that job. Great people,

00:14:19.490 --> 00:14:23.840
good company. But I had an opportunity. through

00:14:23.840 --> 00:14:27.500
a competence that worked at Cloudflare. They

00:14:27.500 --> 00:14:29.919
let me know that they were looking for a role

00:14:29.919 --> 00:14:33.980
and position, and it was too tempting to pass

00:14:33.980 --> 00:14:37.080
up. So I ended up taking that, moving to Cloudflare

00:14:37.080 --> 00:14:39.580
a little over, or almost a year ago. Actually,

00:14:39.600 --> 00:14:41.440
it'll be a year in just a couple weeks. It's

00:14:41.440 --> 00:14:44.240
my first anniversary at Cloudflare. So I've been

00:14:44.240 --> 00:14:47.139
there ever since. Yeah, that's the short version,

00:14:47.259 --> 00:14:49.980
the quick version of my professional history,

00:14:50.080 --> 00:14:57.980
anyway. I guess in terms of open source stuff,

00:14:58.259 --> 00:15:01.639
yeah, I got involved in that. Actually, I don't

00:15:01.639 --> 00:15:03.320
know. You can edit this part out. I'm going to

00:15:03.320 --> 00:15:04.759
take a break to see if you have any questions

00:15:04.759 --> 00:15:06.860
for me. I've been talking for a long time. Did

00:15:06.860 --> 00:15:12.259
it affect you when they rejected you in SpaceX?

00:15:12.679 --> 00:15:17.019
Did it affect you? Did something happen or not

00:15:17.019 --> 00:15:21.159
at all? It did affect me. I mean, I was super

00:15:21.159 --> 00:15:24.500
embarrassed. I felt really ashamed for a couple

00:15:24.500 --> 00:15:26.779
of days. I can laugh about it now. I'm not embarrassed

00:15:26.779 --> 00:15:30.679
to tell the story, partially because I know C++

00:15:30.679 --> 00:15:34.059
much, much better now. And I would totally breeze

00:15:34.059 --> 00:15:36.059
through that interview today. So I don't mind

00:15:36.059 --> 00:15:39.419
sharing a failure in the past now that it's been

00:15:39.419 --> 00:15:42.159
a few years. But no, at the time, it was brutal.

00:15:42.539 --> 00:15:45.120
I mean, I don't know that I'd ever failed at

00:15:45.120 --> 00:15:49.950
anything that badly before. it was very humbling

00:15:49.950 --> 00:15:52.289
for sure. And I think I was very discouraged

00:15:52.289 --> 00:15:56.769
by that. Like I was like, yeah, that definitely

00:15:56.769 --> 00:16:01.629
was kind of a motivation killer, but not permanent,

00:16:01.809 --> 00:16:04.610
thankfully. But yeah, it was pretty demotivating

00:16:04.610 --> 00:16:06.629
for a little while. Yeah, you moved on. That's

00:16:06.629 --> 00:16:09.409
great. Yeah. You were going to continue with

00:16:09.409 --> 00:16:11.509
open source as well, right? You want to share

00:16:11.509 --> 00:16:16.470
your background history there? Sure. Yeah. Let's

00:16:16.470 --> 00:16:19.649
see. When I was at that first job at that technology

00:16:19.649 --> 00:16:22.110
consulting firm, I'll talk about my editor history

00:16:22.110 --> 00:16:25.549
too, I guess. The big one at the time was Adam.

00:16:25.730 --> 00:16:29.090
Adam was the really popular one. So folks that

00:16:29.090 --> 00:16:30.990
paid attention to editors over time will know

00:16:30.990 --> 00:16:34.610
Adam as the precursor, spiritual precursor in

00:16:34.610 --> 00:16:38.309
a sense to VS Code and also in a sense to Zed

00:16:38.309 --> 00:16:41.289
because the same people that started Adam went

00:16:41.289 --> 00:16:45.840
on to start TreeSitter and today Zed. But at

00:16:45.840 --> 00:16:49.659
the time, Atom was the big one. But I also learned

00:16:49.659 --> 00:16:54.360
Vim, the basics of Vim. I didn't use it as my

00:16:54.360 --> 00:16:57.899
main editor, but I knew it well enough to navigate

00:16:57.899 --> 00:17:01.960
around and edit files and stuff. When I was in

00:17:01.960 --> 00:17:05.160
grad school, I was writing a lot of C++, and

00:17:05.160 --> 00:17:06.940
I started doing some research. Okay, what's the

00:17:06.940 --> 00:17:10.160
best IDE for doing C++? This was still at the

00:17:10.160 --> 00:17:12.700
time. I don't think VS Code had swallowed the

00:17:12.700 --> 00:17:16.690
world. So I didn't just default to VS Code. So

00:17:16.690 --> 00:17:18.329
I was doing some research on what's the best

00:17:18.329 --> 00:17:21.890
IDE for C++. And people talked about, there were

00:17:21.890 --> 00:17:27.009
some mentions of NetBeans and CLion. And I tried

00:17:27.009 --> 00:17:29.670
both and didn't really click with either. But

00:17:29.670 --> 00:17:31.390
then there was some Stack Overflow comment that

00:17:31.390 --> 00:17:33.369
was like, just use Vim. Vim is perfect for it.

00:17:33.509 --> 00:17:35.630
And I was like, OK, I guess I could consider

00:17:35.630 --> 00:17:38.890
it. And that was the moment, basically, where

00:17:38.890 --> 00:17:42.150
I started using Vim full time. uh from from then

00:17:42.150 --> 00:17:45.670
on so i you know installed some plugins uh it's

00:17:45.670 --> 00:17:47.250
actually kind of crazy to think how far it's

00:17:47.250 --> 00:17:49.390
come since then at the time lsp wasn't a thing

00:17:49.390 --> 00:17:52.750
so if you wanted completion in vim there was

00:17:52.750 --> 00:17:54.809
this plugin called you complete me which i think

00:17:54.809 --> 00:17:58.849
is still around uh and it uses like a third like

00:17:58.849 --> 00:18:02.009
a separate process and i think it's like written

00:18:02.009 --> 00:18:04.690
in python to talk to i actually don't know how

00:18:04.690 --> 00:18:08.119
it works it's black it's pretty fancy but at

00:18:08.119 --> 00:18:09.880
the time i remember installing that and it blowing

00:18:09.880 --> 00:18:11.900
my mind like the fact that i could i could have

00:18:11.900 --> 00:18:15.140
auto completion and vin was like it was like

00:18:15.140 --> 00:18:19.839
unreal to me it was like insane um and then after

00:18:19.839 --> 00:18:22.579
that i just i kept just kept using kept using

00:18:22.579 --> 00:18:25.859
them uh so i i used basically just regular vim

00:18:25.859 --> 00:18:29.460
for for a long time i think i try like looked

00:18:29.460 --> 00:18:32.599
at NeoVim, but if I used it, I basically used

00:18:32.599 --> 00:18:35.180
it as if it were Vim without really understanding

00:18:35.180 --> 00:18:37.700
what the differences were. And it was around

00:18:37.700 --> 00:18:39.759
this time that my very, very first contribution

00:18:39.759 --> 00:18:43.559
to NeoVim was made, and it had to do with a Python

00:18:43.559 --> 00:18:48.440
provider or something. Like PyInf, I don't know,

00:18:48.460 --> 00:18:51.480
something really archaic and lame like that.

00:18:53.480 --> 00:18:57.960
And then, let's see. and then i don't remember

00:18:57.960 --> 00:18:59.559
oh you know what it was it was it was around

00:18:59.559 --> 00:19:02.519
the time that neovim the neovim 0 .5 release

00:19:02.519 --> 00:19:04.319
came out and there's a lot of hype around it

00:19:04.319 --> 00:19:07.039
i don't know how i heard about it but this was

00:19:07.039 --> 00:19:10.460
like okay the lsp client is coming out of you

00:19:10.460 --> 00:19:12.759
know it's going to be shipped lua is like a first

00:19:12.759 --> 00:19:15.660
class citizen there's all this buzz and hype

00:19:15.660 --> 00:19:17.980
around the 0 .5 release and so i finally went

00:19:17.980 --> 00:19:20.099
and looked at it and i was like all right like

00:19:20.099 --> 00:19:22.720
this looks like I can see enough differences

00:19:22.720 --> 00:19:25.259
between old Vim, regular Vim, and NeoVim now

00:19:25.259 --> 00:19:27.559
to be like, okay, it's worth switching and taking

00:19:27.559 --> 00:19:29.779
advantage of some of this new stuff. So that

00:19:29.779 --> 00:19:34.140
was when I made the switch to NeoVim. And then...

00:19:34.140 --> 00:19:39.059
I have a question for you. How easy is it to

00:19:39.059 --> 00:19:43.400
debug C++ in NeoVim? Do you do any debugging

00:19:43.400 --> 00:19:48.920
at all or no? I don't do it in NeoVim. there

00:19:48.920 --> 00:19:51.539
is like the debug adapter protocol and a fellow

00:19:51.539 --> 00:19:54.259
a co -maintainer of new event maintains the plug

00:19:54.259 --> 00:19:57.279
-in for that uh matthias is his name i'm i'm

00:19:57.279 --> 00:19:58.799
not even trying to pronounce his last name because

00:19:58.799 --> 00:20:03.099
i'm 100 say it wrong uh i think it's like fusenegger

00:20:03.099 --> 00:20:06.160
i think it's it's like german or austrian so

00:20:06.160 --> 00:20:08.779
i'm not sure i pronounce it sorry matthias uh

00:20:08.779 --> 00:20:10.859
but he maintains that the plug -in i have tried

00:20:10.859 --> 00:20:13.980
it i have never really been able to get comfortable

00:20:13.980 --> 00:20:15.920
with the debugging inside of the event thing

00:20:15.920 --> 00:20:20.440
c plus plus and c has gdb and lldb which for

00:20:20.440 --> 00:20:24.759
me work great so i just use that and it's i'm

00:20:24.759 --> 00:20:26.740
perfectly happy with it so i don't have any complaints

00:20:26.740 --> 00:20:30.960
there gdb is kind of like neovim in the sense

00:20:30.960 --> 00:20:32.619
that it's a power tool it has a pretty steep

00:20:32.619 --> 00:20:35.640
learning curve but like once you get a little

00:20:35.640 --> 00:20:37.559
bit up the learning curve and get past the initial

00:20:37.559 --> 00:20:40.920
discomfort and scary like the fear of using it

00:20:40.920 --> 00:20:43.700
it's just an extraordinarily powerful tool and

00:20:43.700 --> 00:20:46.900
it's that's also like vim is scriptable so you

00:20:46.900 --> 00:20:50.519
can make it do anything you want um so no i'm

00:20:50.519 --> 00:20:53.559
i'm a big gdb could be better for sure like it's

00:20:53.559 --> 00:20:55.900
not it's not perfect and there are other debuggers

00:20:55.900 --> 00:21:01.119
that um improve upon the experience but i generally

00:21:01.119 --> 00:21:05.019
speaking if i can use gdb i'm pretty happy and

00:21:05.019 --> 00:21:07.839
i can usually find get what i need out of it

00:21:07.839 --> 00:21:11.849
oh okay now would you mind sharing a little bit

00:21:11.849 --> 00:21:14.490
about the new of him history i don't know if

00:21:14.490 --> 00:21:17.490
you know the history about it or not but i didn't

00:21:17.490 --> 00:21:20.890
know that lua was not a thing back in the back

00:21:20.890 --> 00:21:24.250
in the day any of him i had a call with um the

00:21:24.250 --> 00:21:27.230
harper language server creator and i think he's

00:21:27.230 --> 00:21:29.410
the one that told me that before lua and i was

00:21:29.410 --> 00:21:32.150
like before lua was there any of him without

00:21:32.150 --> 00:21:35.589
lua do you know anything about that a little

00:21:35.589 --> 00:21:37.650
bit i wasn't around then so i can't speak from

00:21:37.650 --> 00:21:40.250
experience it's just what i've just read myself

00:21:41.079 --> 00:21:44.160
The project was initially started by a guy named

00:21:44.160 --> 00:21:47.160
Thiago Silva, who's no longer involved. He's

00:21:47.160 --> 00:21:49.039
still around. I sometimes see his comments on

00:21:49.039 --> 00:21:53.559
Hacker News. He's still in the community. Where

00:21:53.559 --> 00:21:56.880
is he from? I want to say, I'm pretty sure he's

00:21:56.880 --> 00:21:59.799
from Brazil. Okay, yeah, because the real terminal

00:21:59.799 --> 00:22:02.720
maintainer said in the call that I had with him

00:22:02.720 --> 00:22:05.880
that Neobim was started by some Brazil guys,

00:22:06.119 --> 00:22:09.559
correct? Yeah, at least Thiago is from Brazil.

00:22:09.579 --> 00:22:13.450
I don't know. by his co -conspirators. The lore

00:22:13.450 --> 00:22:16.269
is that there were some patches that were sent

00:22:16.269 --> 00:22:18.609
to the Vim dev mailing list about adding some

00:22:18.609 --> 00:22:23.670
support for async and job control. And the patch

00:22:23.670 --> 00:22:27.009
proposers were not happy with how long it was

00:22:27.009 --> 00:22:30.910
taking. This is where, I guess, opinions on what

00:22:30.910 --> 00:22:33.200
happened. very and you can find like the thread

00:22:33.200 --> 00:22:35.339
on the vim dev mailing list there's not like

00:22:35.339 --> 00:22:37.039
any drama i'm trying to make it sound like there

00:22:37.039 --> 00:22:39.259
was just some something juicy happened but essentially

00:22:39.259 --> 00:22:41.460
that was kind of where the fork occurred is i

00:22:41.460 --> 00:22:43.460
think some people were frustrated with the development

00:22:43.460 --> 00:22:46.259
process of vim that there was a single bus factor

00:22:46.259 --> 00:22:50.799
in bram uh development was slow because nothing

00:22:50.799 --> 00:22:54.579
got done unless bran was involved so the the

00:22:55.180 --> 00:22:57.539
The creation of NeoVim was partially spawned

00:22:57.539 --> 00:22:59.759
by wanting to add new features and also wanting

00:22:59.759 --> 00:23:03.140
to change the contribution model, which it has

00:23:03.140 --> 00:23:06.720
done successfully. And somewhat ironically, Vim

00:23:06.720 --> 00:23:11.759
has also done now the same thing. But yes, in

00:23:11.759 --> 00:23:14.420
the early days, Vim and NeoVim were extremely

00:23:14.420 --> 00:23:17.480
similar. Some of the earliest things NeoVim did

00:23:17.480 --> 00:23:23.279
from Vim was introduce some third -party libraries

00:23:23.279 --> 00:23:26.400
instead of doing vim is almost almost entirely

00:23:26.400 --> 00:23:30.160
homegrown it's very much like an nih thing right

00:23:30.160 --> 00:23:32.859
and i think that's because it was bram mulinar's

00:23:32.859 --> 00:23:36.339
pet project his baby right so he for him it was

00:23:36.339 --> 00:23:39.339
fun he wanted to do all this stuff himself uh

00:23:39.339 --> 00:23:41.460
but it was it made maintenance really hard and

00:23:41.460 --> 00:23:43.259
the code the code base was a little bit messy

00:23:43.259 --> 00:23:46.880
so one of the first things that the new product

00:23:46.880 --> 00:23:50.940
did was to take out some of the the custom vim

00:23:50.940 --> 00:23:53.349
stuff and replace it with well -established third

00:23:53.349 --> 00:23:57.089
-party libraries. So NeoVim uses libuv, the same

00:23:57.089 --> 00:24:00.789
event loop library that Node .js uses, to do

00:24:00.789 --> 00:24:03.190
its event loop management. That was one of the

00:24:03.190 --> 00:24:06.250
first things that NeoVim did. NeoVim wrote and

00:24:06.250 --> 00:24:10.390
replaced its own VimScript parser. NeoVim's VimScript

00:24:10.390 --> 00:24:13.190
parser is different from Vim's. NeoVim has a

00:24:13.190 --> 00:24:16.329
different state management file. So NeoVim has

00:24:16.329 --> 00:24:19.410
a file called shada, or shared data. which is

00:24:19.410 --> 00:24:21.970
what keeps track of... But when you exit NeoVim

00:24:21.970 --> 00:24:24.509
and start it back up, NeoVim remembers some things,

00:24:24.589 --> 00:24:27.410
like marks and history. All that is stored in

00:24:27.410 --> 00:24:29.589
this shared data file, and that is different

00:24:29.589 --> 00:24:31.950
from Vim. So there's a lot of stuff that changed

00:24:31.950 --> 00:24:37.750
early on. Some features, like the ink command

00:24:37.750 --> 00:24:41.890
feature, where if you write a substitute command,

00:24:42.029 --> 00:24:45.289
like colon S or whatever, you see it happen live

00:24:45.289 --> 00:24:47.869
before you press enter. That was a feature that

00:24:47.869 --> 00:24:51.119
NeoVim... added, like one of the very first things

00:24:51.119 --> 00:24:52.559
it added. So yeah, there was a lot of stuff even

00:24:52.559 --> 00:24:56.200
before Lua. So Vim also supports Lua, by the

00:24:56.200 --> 00:24:58.440
way. So Vim supports a number of different languages

00:24:58.440 --> 00:25:00.079
through these different interfaces. But it's

00:25:00.079 --> 00:25:04.759
all done through these hooks, I guess is kind

00:25:04.759 --> 00:25:08.119
of a way to describe it. And Vim calls them interfaces,

00:25:08.519 --> 00:25:12.019
like a language interface. And people would use

00:25:12.019 --> 00:25:13.880
these to write plugins. So there were a lot of

00:25:13.880 --> 00:25:17.019
plugins written in Python for Vim. using this

00:25:17.019 --> 00:25:18.880
Python interface. But it was always kind of a

00:25:18.880 --> 00:25:22.359
pain in the ass because it wasn't guaranteed

00:25:22.359 --> 00:25:24.079
that your version... Vim had all these different

00:25:24.079 --> 00:25:26.920
compile flags, right? So you could enable or

00:25:26.920 --> 00:25:29.519
disable features at compile time. And if your

00:25:29.519 --> 00:25:31.500
version of Vim that you got from your distribution

00:25:31.500 --> 00:25:34.660
or whatever was compiled without Python support,

00:25:34.940 --> 00:25:36.660
you were out of luck. You couldn't do anything

00:25:36.660 --> 00:25:38.579
about it. You had to go recompile Vim yourself.

00:25:39.299 --> 00:25:41.539
So it had to be compiled with Python and compiled

00:25:41.539 --> 00:25:44.819
with Ruby support and Lua support. So NeoVim

00:25:44.819 --> 00:25:46.299
also did away with all that, and it has this

00:25:46.299 --> 00:25:48.039
concept of remote plugins instead, and using

00:25:48.039 --> 00:25:51.079
message pack RPC is another difference between

00:25:51.079 --> 00:25:55.900
regular Vim and NeoVim. But Vim supports Lua

00:25:55.900 --> 00:25:58.160
through this Lua interface, although, again,

00:25:58.240 --> 00:26:00.880
it has to be compiled in, and it's kind of a

00:26:00.880 --> 00:26:05.519
mess. NeoVim did the same thing at first, supported

00:26:05.519 --> 00:26:08.799
Lua in a slightly more robust way, but there

00:26:08.799 --> 00:26:10.779
are a lot of things you still couldn't do in

00:26:10.779 --> 00:26:17.990
Lua. in the 0 .5 release lua became like um a

00:26:17.990 --> 00:26:21.890
much more prominent like you could use it for

00:26:21.890 --> 00:26:23.509
your init file you use it for plug -in files

00:26:23.509 --> 00:26:27.509
um like that whole like being able to require

00:26:27.509 --> 00:26:32.289
modules really easily became much easier to do

00:26:32.289 --> 00:26:35.309
so yeah the 0 .5 release was where lua became

00:26:35.309 --> 00:26:39.430
like lua today neoman and lua is like they go

00:26:39.430 --> 00:26:42.190
hand in hand But the vast majority of Neonium

00:26:42.190 --> 00:26:44.750
users write their configuration Lua, but that

00:26:44.750 --> 00:26:47.430
wasn't always the case in the early days. And

00:26:47.430 --> 00:26:51.130
what are your thoughts on Lua? I know, I already

00:26:51.130 --> 00:26:53.829
know, but for people that don't know, how do

00:26:53.829 --> 00:26:57.569
you feel about Lua? I think Lua is a great example

00:26:57.569 --> 00:26:59.529
of the design philosophy of doing a lot with

00:26:59.529 --> 00:27:03.150
a little. So Lua has very few concepts to understand.

00:27:03.490 --> 00:27:07.089
As far as data types, there's numbers, strings,

00:27:07.470 --> 00:27:11.119
tables, and functions. And I think that's it.

00:27:11.279 --> 00:27:14.160
So there's no difference between an array and

00:27:14.160 --> 00:27:17.079
a dict or a map, right? It's all just tables.

00:27:17.539 --> 00:27:19.579
Its standard library is also very small. And

00:27:19.579 --> 00:27:21.220
the reason it's designed this way is because

00:27:21.220 --> 00:27:23.180
Lua is designed to be an embedded language. This

00:27:23.180 --> 00:27:26.819
is why it was there in World of Warcraft back

00:27:26.819 --> 00:27:29.319
when I was a teenager, is because it's so small

00:27:29.319 --> 00:27:31.240
and easy to embed into other applications. It's

00:27:31.240 --> 00:27:33.099
very common and very popular in video games.

00:27:33.259 --> 00:27:35.240
It's popular in editors, right? It's popular

00:27:35.240 --> 00:27:37.759
in any environment where you want to provide

00:27:37.759 --> 00:27:40.799
scripting capability without... pulling in like

00:27:40.799 --> 00:27:44.160
a huge heavy language so lua is intentionally

00:27:44.160 --> 00:27:47.259
small it's designed to be small and it's able

00:27:47.259 --> 00:27:51.380
to do quite a bit with that um the flip side

00:27:51.380 --> 00:27:54.099
of that though is there are trade -offs and the

00:27:54.099 --> 00:27:57.599
trade -offs are there are some really nasty edge

00:27:57.599 --> 00:28:00.799
cases and foot guns there are some language features

00:28:00.799 --> 00:28:04.359
that to me are inexplicably missing like lua

00:28:04.359 --> 00:28:07.440
has no continue keyword if you're writing a loop

00:28:08.059 --> 00:28:10.819
and you want to go to the next iteration of the

00:28:10.819 --> 00:28:13.519
loop, you can't write continue. It doesn't exist,

00:28:13.799 --> 00:28:19.680
which is just bonkers to me. But I also don't

00:28:19.680 --> 00:28:24.279
particularly like... Another gripe I have with

00:28:24.279 --> 00:28:27.079
Lua is that it defaults to global variables.

00:28:27.180 --> 00:28:30.240
So if you write x equals 3, you've just defined

00:28:30.240 --> 00:28:32.660
a global variable called x. If you want to define

00:28:32.660 --> 00:28:36.539
a variable scoped... to the lexical scope you

00:28:36.539 --> 00:28:39.519
have to write the keyword local which is not

00:28:39.519 --> 00:28:41.759
a huge deal but in terms of language design right

00:28:41.759 --> 00:28:44.099
you want to optimize you want to make it easy

00:28:44.099 --> 00:28:45.980
to do the right thing and hard to do the wrong

00:28:45.980 --> 00:28:48.400
thing and that's an example of where lua does

00:28:48.400 --> 00:28:51.359
the opposite um and then yeah i said this in

00:28:51.359 --> 00:28:53.480
our last discussion but i also just find lua

00:28:53.480 --> 00:28:56.859
aesthetically very i don't like looking at it

00:28:56.859 --> 00:28:59.660
i just think aesthetically lua is super ugly

00:28:59.660 --> 00:29:03.240
i hate looking at lua I don't particularly like

00:29:03.240 --> 00:29:07.299
enjoying writing. It's kind of a weird complaint,

00:29:07.460 --> 00:29:09.380
right? But there's some code when you look at

00:29:09.380 --> 00:29:12.259
it, and it just kind of flows, right? It's visually

00:29:12.259 --> 00:29:17.480
appealing to look at. You can see the way the

00:29:17.480 --> 00:29:19.640
code flows, and it's really easy to kind of...

00:29:19.640 --> 00:29:22.900
Lua is not like that. It's a very imperative

00:29:22.900 --> 00:29:27.640
language. It does have functions as first class

00:29:27.640 --> 00:29:29.819
values, which is nice. So you can do some functional

00:29:29.819 --> 00:29:33.059
stuff. But even the syntax for defining functions

00:29:33.059 --> 00:29:37.079
is very verbose. So you don't see a lot of that

00:29:37.079 --> 00:29:38.980
kind of code written in Lua because it's just

00:29:38.980 --> 00:29:45.759
not very nice to write or to look at. Yeah, I

00:29:45.759 --> 00:29:48.929
don't know. I have mixed feelings about it. I

00:29:48.929 --> 00:29:50.710
think you can do a whole lot worse than Lua,

00:29:50.829 --> 00:29:53.829
right? Like, most of the time, I'm not going

00:29:53.829 --> 00:29:56.970
to complain about seeing Lua. But if I get to

00:29:56.970 --> 00:29:59.589
choose, I'm probably not going to choose Lua.

00:29:59.710 --> 00:30:02.690
That's what I was going to ask. What do you think

00:30:02.690 --> 00:30:05.690
could have been, you know, a replacement for

00:30:05.690 --> 00:30:09.730
Lua? Well, I think, well, I should clarify. For

00:30:09.730 --> 00:30:12.930
Neobim's design goals, what it wants to achieve,

00:30:13.069 --> 00:30:15.230
I think Lua is the right choice. Especially with

00:30:15.230 --> 00:30:18.119
the existence of LuaJIT. which for those who

00:30:18.119 --> 00:30:21.660
don't know, LuaJIT is an implementation of Lua

00:30:21.660 --> 00:30:27.960
5 .1. So Lua, like C or Go, is a specification.

00:30:28.539 --> 00:30:32.440
There's this manual that says this language does

00:30:32.440 --> 00:30:35.259
this, right? And then there are different implementations

00:30:35.259 --> 00:30:38.380
of the specification. The people that designed

00:30:38.380 --> 00:30:42.660
Lua are from a university called PUC, P -U -C,

00:30:42.839 --> 00:30:46.160
in Rio de Janeiro. which I've been to, actually,

00:30:46.279 --> 00:30:50.519
funnily enough. And that's what we call PUC Lua,

00:30:50.640 --> 00:30:53.180
P -U -C Lua. That's like the out -of -the -box

00:30:53.180 --> 00:30:56.440
original standard Lua. But then there's a guy

00:30:56.440 --> 00:30:59.140
named Mike Paul who started this project called

00:30:59.140 --> 00:31:02.779
Lua JIT, where JIT here means just -in -time

00:31:02.779 --> 00:31:05.180
in terms of just -in -time compilers, which I

00:31:05.180 --> 00:31:07.359
won't go into or explain. People can look that

00:31:07.359 --> 00:31:09.480
up if they don't know what that means. But it's

00:31:09.480 --> 00:31:12.400
an alternative implementation of the Lua 5 .1

00:31:12.400 --> 00:31:16.039
language specification. that is very, very fast.

00:31:17.099 --> 00:31:21.579
Much, much faster than Puke Lua. So this is great

00:31:21.579 --> 00:31:24.859
for projects like Neovan that want something

00:31:24.859 --> 00:31:29.200
that's small, that won't bloat the editor by

00:31:29.200 --> 00:31:31.480
including it, by embedding it, and also very,

00:31:31.579 --> 00:31:35.059
very fast. So with the existence of LuaJIT, if

00:31:35.059 --> 00:31:37.980
you're embedding a language into your application,

00:31:38.579 --> 00:31:44.019
Lua is usually a very, very good choice. So I

00:31:44.019 --> 00:31:45.140
don't think I would have chosen anything different

00:31:45.140 --> 00:31:47.460
for any of them specifically. I just mean if

00:31:47.460 --> 00:31:51.099
I'm writing code for a pet project or something,

00:31:51.220 --> 00:31:56.400
and I'm choosing a scripting language, I probably

00:31:56.400 --> 00:31:58.559
wouldn't pick Lua for myself. That's all that

00:31:58.559 --> 00:32:03.119
I meant. Okay. Okay, but that's the reason in

00:32:03.119 --> 00:32:04.940
our last conversation that you mentioned that

00:32:04.940 --> 00:32:07.259
you use Fennel, right? So would you mind explaining

00:32:07.259 --> 00:32:09.779
what Fennel is for people that don't know what

00:32:09.779 --> 00:32:11.940
it is? You're sharing your screen at any time.

00:32:12.039 --> 00:32:14.460
So if you want to jump to your screen, you just

00:32:14.460 --> 00:32:17.700
let me know and it's easier that way. Yeah, I

00:32:17.700 --> 00:32:20.960
just pull up the Fennel website. If people want

00:32:20.960 --> 00:32:24.900
to see that, it's at fenneling .org. But Fennel

00:32:24.900 --> 00:32:30.359
is a Lisp that compiles. or trans files, I guess,

00:32:30.500 --> 00:32:38.900
into Lua. So I'm a fan of Lisp. In my own time,

00:32:38.980 --> 00:32:40.900
because I mentioned earlier, I didn't study computer

00:32:40.900 --> 00:32:43.380
science in university. I studied electrical engineering.

00:32:43.640 --> 00:32:46.079
So I've done a lot of self -study just on my

00:32:46.079 --> 00:32:50.279
own time. And one textbook that I worked through

00:32:50.279 --> 00:32:55.240
was called The Structure and Interpretation of

00:32:55.240 --> 00:32:56.740
Computer Programs. I think that's what it's called,

00:32:56.819 --> 00:33:01.079
the SICP. which you can find for free online,

00:33:01.259 --> 00:33:07.539
by the way. I highly recommend reading it if

00:33:07.539 --> 00:33:11.700
anyone hasn't. But yeah, here's the PDF. And

00:33:11.700 --> 00:33:15.859
in this textbook, they use Scheme. So they use

00:33:15.859 --> 00:33:19.099
Scheme to teach these fundamentals of programming.

00:33:19.779 --> 00:33:23.440
And Scheme, we talked earlier about how Lua is

00:33:23.440 --> 00:33:25.680
a language that does a lot with a little. I think

00:33:25.680 --> 00:33:28.720
Scheme is even more so. Scheme has even less

00:33:28.720 --> 00:33:33.099
syntax than Lua. It's an extremely simple, minimal

00:33:33.099 --> 00:33:38.259
language. It's a Lisp language. And I went through

00:33:38.259 --> 00:33:41.099
this book and was doing the exercises, and I

00:33:41.099 --> 00:33:44.599
kind of just fell in love with the concept of

00:33:44.599 --> 00:33:47.839
Lisp and how much you could do and represent

00:33:47.839 --> 00:33:51.640
with this extremely primitive language. All you

00:33:51.640 --> 00:33:55.650
have is just Lisp. a couple of other syntax things,

00:33:55.829 --> 00:33:59.670
but it's all just, it's all just like just lists,

00:33:59.710 --> 00:34:02.750
right? Lisp stands for list processor. So I think

00:34:02.750 --> 00:34:04.730
that fundamental data structure and Lisp is just

00:34:04.730 --> 00:34:07.309
a list. So I really came to enjoy Lisp. I know

00:34:07.309 --> 00:34:09.010
it's controversial. A lot of people look at it

00:34:09.010 --> 00:34:10.809
and they don't get it. And they think it's ridiculous

00:34:10.809 --> 00:34:12.869
and ugly and they make jokes about parentheses,

00:34:13.010 --> 00:34:15.630
which I get it, right? Like I totally understand

00:34:15.630 --> 00:34:18.050
that, but to me it just clicked, right? I really

00:34:18.050 --> 00:34:20.940
enjoyed it. So when I found out there was, a

00:34:20.940 --> 00:34:24.280
Lisp language I compiled to Lua, I was very interested

00:34:24.280 --> 00:34:27.480
and I started kind of experimenting with integrating

00:34:27.480 --> 00:34:32.639
it into NeoVim. But yeah, that's what I use now.

00:34:32.820 --> 00:34:34.860
I obviously still write a lot of Lua because

00:34:34.860 --> 00:34:38.739
anything that I'm contributing to NeoVim itself

00:34:38.739 --> 00:34:43.280
is in Lua. Like my .files or whatever, I just

00:34:43.280 --> 00:34:45.980
write it all in Fennel. In Fennel, okay. You

00:34:45.980 --> 00:34:50.750
also mentioned... The Neovim team. I had a question.

00:34:50.849 --> 00:34:54.889
How does it work? Like the Neovim core team,

00:34:55.010 --> 00:34:58.510
how big is it? How easy is it to reach agreements

00:34:58.510 --> 00:35:02.469
in the team? How is the mechanics? How are the

00:35:02.469 --> 00:35:04.369
mechanics in the team? How is the relationship?

00:35:04.670 --> 00:35:06.889
How does all that work? Who takes the calls?

00:35:07.090 --> 00:35:11.269
Is it one person mainly or is it the group? Or

00:35:11.269 --> 00:35:14.280
do you want to share anything about that? Yeah,

00:35:14.320 --> 00:35:17.000
I can talk about that. It's pretty loosely structured

00:35:17.000 --> 00:35:23.179
and informal. I should caveat, just in case there

00:35:23.179 --> 00:35:25.699
are any other core team members watching, that

00:35:25.699 --> 00:35:28.239
nothing I say is authoritative, right? I'm just

00:35:28.239 --> 00:35:31.500
talking about my experience. But we kind of loosely

00:35:31.500 --> 00:35:35.619
follow a BDFL model, which is Benevolent Dictator

00:35:35.619 --> 00:35:40.300
for Life. Justin Keyes is our Benevolent Dictator.

00:35:40.750 --> 00:35:44.469
he has been involved with the project since if

00:35:44.469 --> 00:35:47.809
not the very beginning very very near the beginning

00:35:47.809 --> 00:35:51.070
so he's been around for a long time and he's

00:35:51.070 --> 00:35:53.769
he's kind of he's the person that if an executive

00:35:53.769 --> 00:35:56.690
decision needs to be made in most cases justin

00:35:56.690 --> 00:35:58.349
will make it but justin also is not around all

00:35:58.349 --> 00:36:01.050
the time he'll have prolonged periods of absences

00:36:01.050 --> 00:36:06.730
for whatever reason right and so when he's gone

00:36:06.730 --> 00:36:10.840
frankie's moving so There are multiple people

00:36:10.840 --> 00:36:13.460
that are able to merge PRs. That's what we call

00:36:13.460 --> 00:36:15.420
the core team. Anyone that has the ability to

00:36:15.420 --> 00:36:18.440
merge a PR is generally the core team. And the

00:36:18.440 --> 00:36:21.300
team is kind of loosely structured into areas

00:36:21.300 --> 00:36:28.880
of expertise and preference. So for me personally,

00:36:29.019 --> 00:36:30.719
that's pretty much anything that involves the

00:36:30.719 --> 00:36:33.920
TUI or the terminal, I will almost always review

00:36:33.920 --> 00:36:36.400
those PRs or handle those issues. That's not

00:36:36.400 --> 00:36:38.880
to say other people can't. I don't own it. It's

00:36:38.880 --> 00:36:42.159
not mine. But that's because that's my both area

00:36:42.159 --> 00:36:45.579
of interest and area where I just have more relatively

00:36:45.579 --> 00:36:48.599
more expertise. That's something that I tend

00:36:48.599 --> 00:36:51.000
to be more involved with. Whereas we have other

00:36:51.000 --> 00:36:53.380
people that spend a lot more time working on

00:36:53.380 --> 00:36:55.900
LSP stuff. You know, they're very familiar with

00:36:55.900 --> 00:37:00.320
the LSP specification, what other what other

00:37:00.320 --> 00:37:03.099
editors do, what other what's happening in the

00:37:03.099 --> 00:37:05.360
ecosystem. Right. And so they're just they're

00:37:05.360 --> 00:37:07.940
more. they're better equipped to handle those

00:37:07.940 --> 00:37:12.039
questions and PRs. But again, anyone can do anything,

00:37:12.139 --> 00:37:16.320
right? So I've made PRs and contributions to

00:37:16.320 --> 00:37:19.800
LSP, to LSP client, even though I don't consider

00:37:19.800 --> 00:37:24.579
myself part of the LSP team necessarily. So that's

00:37:24.579 --> 00:37:28.199
kind of loosely how it works. I would say the

00:37:28.199 --> 00:37:32.880
other person besides Justin that is maybe a de

00:37:32.880 --> 00:37:38.349
facto BDFL is is Bjorn, which I apologize if

00:37:38.349 --> 00:37:41.849
I say that wrong. He's beefreddle on GitHub and

00:37:41.849 --> 00:37:46.590
on Element or Matrix. But he's next to Justin,

00:37:46.690 --> 00:37:48.869
I think, has probably been around the longest

00:37:48.869 --> 00:37:51.929
and has touched most parts of the code. And he's

00:37:51.929 --> 00:37:53.550
kind of like the wizard when it comes to anything

00:37:53.550 --> 00:37:57.010
with the UIs and the really low -level fundamentals

00:37:57.010 --> 00:38:02.210
of NeoVim, like the way that buffers are represented

00:38:02.210 --> 00:38:06.840
in memory. like this data structure called mem

00:38:06.840 --> 00:38:09.079
file right and there's all this code that has

00:38:09.079 --> 00:38:12.260
to do with ui decorations like virtual text and

00:38:12.260 --> 00:38:15.739
the way that we neofm has this concept of x marks

00:38:15.739 --> 00:38:17.900
as we call them like all this stuff that's like

00:38:17.900 --> 00:38:20.960
low -level plumbing is kind of uh beef rattle's

00:38:20.960 --> 00:38:25.900
area of expertise uh i won't go through a name

00:38:25.900 --> 00:38:27.539
on everyone right because i'll almost certainly

00:38:27.539 --> 00:38:28.860
forget somebody i don't want to hurt anyone's

00:38:28.860 --> 00:38:31.159
feelings but uh i would say i would say aside

00:38:31.159 --> 00:38:33.679
from justin beef is probably like our our um

00:38:34.619 --> 00:38:37.420
our next personnel, like, if we need an executive

00:38:37.420 --> 00:38:40.719
decision to be made. But usually it's, like,

00:38:40.820 --> 00:38:45.079
we usually defer to expertise, right? So if there's,

00:38:45.119 --> 00:38:46.860
like, a question about the two -year terminal

00:38:46.860 --> 00:38:50.719
stuff, that is a decision that we usually, I

00:38:50.719 --> 00:38:52.440
can make the executive decision on that, just,

00:38:52.480 --> 00:38:55.440
again, because of my own experience in that area.

00:38:56.739 --> 00:38:59.440
You asked about how many people there are? I

00:38:59.440 --> 00:39:03.090
don't know off the top of my head. I could count,

00:39:03.210 --> 00:39:04.670
but no one wants to sit here and watch me count.

00:39:04.789 --> 00:39:07.369
If I had to guess, I would say between 8 and

00:39:07.369 --> 00:39:13.630
10. Okay. People that are active. And we've had

00:39:13.630 --> 00:39:16.590
people in the past that were very active and

00:39:16.590 --> 00:39:18.650
then have kind of drifted away for whatever reason.

00:39:20.030 --> 00:39:23.269
But there is a kernel of people that have been

00:39:23.269 --> 00:39:26.079
around. over for for many years now at this point

00:39:26.079 --> 00:39:28.559
um but it's all it's all very informal and loose

00:39:28.559 --> 00:39:30.380
right now that's one reason i think why people

00:39:30.380 --> 00:39:32.960
stick around is because if it ever stops being

00:39:32.960 --> 00:39:35.500
fun like we kind of joke that neo event practice

00:39:35.500 --> 00:39:37.679
is fun driven development which i think is a

00:39:37.679 --> 00:39:40.420
term that surely someone else has made up but

00:39:40.420 --> 00:39:43.179
all of us are here because it's a hobby i think

00:39:43.179 --> 00:39:46.599
there's maybe one or two people in the core team

00:39:46.599 --> 00:39:49.139
that do that that do it full -time that get paid

00:39:49.139 --> 00:39:51.510
to do it But the vast majority of the core team

00:39:51.510 --> 00:39:54.869
do it as a hobby, on a volunteer basis. So we

00:39:54.869 --> 00:39:56.989
all do it for fun. And if it ever stops being

00:39:56.989 --> 00:39:59.789
fun, you kind of just take a break, right? Just

00:39:59.789 --> 00:40:03.369
unsubscribe from notifications, stop checking

00:40:03.369 --> 00:40:05.530
chat for a little bit, and then you just come

00:40:05.530 --> 00:40:07.929
back whenever it's on spot again. But I think

00:40:07.929 --> 00:40:10.989
because we kind of have that culture, it helps

00:40:10.989 --> 00:40:12.730
with longevity, right? Because you'll have people

00:40:12.730 --> 00:40:16.289
take breaks for weeks or months, but they can

00:40:16.289 --> 00:40:18.349
always just come right back, right? And so I've

00:40:18.349 --> 00:40:21.630
done that, even. um at different different periods

00:40:21.630 --> 00:40:25.170
is it just no ski part of the core team in in

00:40:25.170 --> 00:40:28.289
folky i don't know how to pronounce folky's name

00:40:28.289 --> 00:40:30.809
at all neither of them are part of the core team

00:40:30.809 --> 00:40:34.190
we have this um we have like a second so we so

00:40:34.190 --> 00:40:36.670
outside of the core team we have another the

00:40:36.670 --> 00:40:39.849
vip members i guess yeah like we call them at

00:40:39.849 --> 00:40:41.429
least i used to be called padawans i think we

00:40:41.429 --> 00:40:43.710
renamed the group but these are people that are

00:40:43.710 --> 00:40:45.989
members of the neo him organization on github

00:40:45.989 --> 00:40:49.889
so they have the ability to um like triage issues

00:40:49.889 --> 00:40:54.090
and stuff and they are involved in some like

00:40:54.090 --> 00:40:57.349
internal real -time chats that we have but they

00:40:57.349 --> 00:41:03.570
don't necessarily have the commit flag um so

00:41:03.570 --> 00:41:06.869
uh yeah evgeny is obviously an incredible contributor

00:41:06.869 --> 00:41:15.489
he's done a lot for the event but he's not I'm

00:41:15.489 --> 00:41:17.650
wondering if I'm misremembering. I'm wondering

00:41:17.650 --> 00:41:19.449
if he is part of the core team or not. Maybe

00:41:19.449 --> 00:41:23.170
he is. I could have just lied by accident. I'm

00:41:23.170 --> 00:41:26.250
not sure. I'm not sure if he is or not. He may

00:41:26.250 --> 00:41:30.769
be. I don't actually remember. But in any case,

00:41:30.909 --> 00:41:33.809
Folky is not. I know that for sure. Folky is

00:41:33.809 --> 00:41:38.130
actually not super involved in terms of like...

00:41:38.670 --> 00:41:42.289
the chats that we have. He does come in occasionally,

00:41:42.469 --> 00:41:45.630
but Foki mostly does his own thing. He'll sometimes

00:41:45.630 --> 00:41:49.429
get involved in GitHub chats and rarely get involved

00:41:49.429 --> 00:41:52.750
in our Matrix discussions, but not very often.

00:41:53.969 --> 00:41:57.550
Yeah, people were concerned as he disappears

00:41:57.550 --> 00:42:00.710
for quite a few months and then just appears.

00:42:00.789 --> 00:42:03.150
Yeah, I think he's retired, right? Like he's

00:42:03.150 --> 00:42:06.750
early retired and he just is like living his

00:42:06.750 --> 00:42:10.260
life. So I think he's just like off doing awesome

00:42:10.260 --> 00:42:12.619
stuff most of the time whenever he's gone. And

00:42:12.619 --> 00:42:14.880
then he comes back, contributes to his distro

00:42:14.880 --> 00:42:17.480
and his plugins and all that stuff and just takes

00:42:17.480 --> 00:42:20.500
a break again, I guess, right? Yeah, I think

00:42:20.500 --> 00:42:26.559
that's the deal. Okay, now talking about Folky,

00:42:26.719 --> 00:42:29.559
right? In our conversation previously, you mentioned

00:42:29.559 --> 00:42:35.539
that you use your own configuration to just install

00:42:35.539 --> 00:42:38.559
your plugins, basically. So you're not into plugin

00:42:38.559 --> 00:42:41.699
managers. Do you want to elaborate on that a

00:42:41.699 --> 00:42:49.239
little bit? Part of it for me is it's fun to

00:42:49.239 --> 00:42:55.320
do this stuff myself. So I'll look it up. I will

00:42:55.320 --> 00:42:58.579
a lot of times try to write code to implement

00:42:58.579 --> 00:43:02.099
a feature in NeoVim myself before using a plugin.

00:43:02.219 --> 00:43:04.840
That's one reason why I don't have that many

00:43:04.840 --> 00:43:07.360
plugins. There are some exceptions. Like, I really

00:43:07.360 --> 00:43:10.679
don't want to write my own, like, file picker

00:43:10.679 --> 00:43:14.800
thing, right? So I just use Afghani's from mini

00:43:14.800 --> 00:43:19.159
.invent. I really don't want to write, like,

00:43:19.159 --> 00:43:21.159
my own. I actually have thought about doing my

00:43:21.159 --> 00:43:23.980
own snippets engine, but I haven't done that.

00:43:24.059 --> 00:43:25.800
So I use, like, a snippets plugin for that. But

00:43:25.800 --> 00:43:28.579
for other things, I'll just do it myself. So

00:43:28.579 --> 00:43:29.920
I've, like, written a lot of tree server code.

00:43:31.039 --> 00:43:33.920
Like, I don't use it anymore because it was kind

00:43:33.920 --> 00:43:36.989
of flaky. but i might pull it back at some point

00:43:36.989 --> 00:43:38.849
because i kind of miss it but there's this plugin

00:43:38.849 --> 00:43:41.130
called like tree sitter context right where it

00:43:41.130 --> 00:43:44.849
shows you if the the beginning of a function

00:43:44.849 --> 00:43:47.050
is off of your screen and your cursor is inside

00:43:47.050 --> 00:43:49.530
of a function it shows you like the function

00:43:49.530 --> 00:43:51.889
signature a little floating window so you can

00:43:51.889 --> 00:43:54.389
see what the fucking signature is even if it's

00:43:54.389 --> 00:43:56.349
not on your screen there's a plugin that does

00:43:56.349 --> 00:43:58.809
that that's now maintained by lewis who's another

00:43:58.809 --> 00:44:02.150
core member but i was like i bet i can do that

00:44:02.150 --> 00:44:04.659
myself so i was I just wrote my own version.

00:44:05.300 --> 00:44:07.199
It's not like a pride thing. It's not like, oh,

00:44:07.300 --> 00:44:09.579
I think I can do it better. It's just like, okay,

00:44:09.699 --> 00:44:12.219
if I don't have, like when I'm writing it for

00:44:12.219 --> 00:44:14.380
myself, I don't have to support a thousand different

00:44:14.380 --> 00:44:16.599
use cases. I don't have to have all these configuration

00:44:16.599 --> 00:44:19.099
options. I can just make it do exactly what I

00:44:19.099 --> 00:44:21.280
want because I'm the only user. And when you

00:44:21.280 --> 00:44:23.679
have that, you can make things a lot smaller

00:44:23.679 --> 00:44:27.119
and a lot simpler. So code that is like potentially

00:44:27.119 --> 00:44:29.920
thousands of lines for a generic plugin that's

00:44:29.920 --> 00:44:32.210
meant to be used by everybody. can be maybe a

00:44:32.210 --> 00:44:34.170
couple hundred lines of code if it's just for

00:44:34.170 --> 00:44:38.510
you. So it's almost like a challenge. How can

00:44:38.510 --> 00:44:41.449
I do this myself and make it as simple and minimal

00:44:41.449 --> 00:44:44.170
as possible if I just keep it to my own constraints?

00:44:44.909 --> 00:44:46.389
So it was the same thing with the package manager.

00:44:46.730 --> 00:44:51.190
I didn't always use my own. I used Vimplug back

00:44:51.190 --> 00:44:53.829
when I was using Vim, and then Minpack was another

00:44:53.829 --> 00:44:58.889
one. And then when I switched to NeoVim, I used

00:44:58.889 --> 00:45:03.550
Packer for a little bit. Packer is now dead.

00:45:03.769 --> 00:45:05.750
It's not maintained anymore. But for a long time,

00:45:05.789 --> 00:45:09.130
Packer was the go -to package manager for Nuvem.

00:45:09.829 --> 00:45:13.050
And I always had a little bit of discomfort with

00:45:13.050 --> 00:45:14.889
it because it had all this extra stuff. You could

00:45:14.889 --> 00:45:19.969
compile your plugin list, which I still don't

00:45:19.969 --> 00:45:21.269
really understand what that means. But there

00:45:21.269 --> 00:45:24.250
was this command like Packer compile. And it

00:45:24.250 --> 00:45:26.070
had all these hooks for lazy loading and stuff.

00:45:26.759 --> 00:45:29.340
And both as a user, I remember thinking like,

00:45:29.400 --> 00:45:32.480
this just feels too complicated. And as a maintainer,

00:45:32.480 --> 00:45:34.880
seeing how many issues were caused by people

00:45:34.880 --> 00:45:39.159
doing all this fancy extraneous stuff, it really

00:45:39.159 --> 00:45:41.239
turned me off from the whole thing. I was like,

00:45:41.260 --> 00:45:45.460
this is just too complex for me. So I was like,

00:45:45.500 --> 00:45:48.460
a plugin manager doesn't need to do much. It

00:45:48.460 --> 00:45:51.900
just needs to essentially call git clone. And

00:45:51.900 --> 00:45:54.079
that's it, right? Because NeoVim knows how to

00:45:54.079 --> 00:45:56.250
load plugins itself. you just put it in the right

00:45:56.250 --> 00:45:58.670
directory and it gets loaded automatically all

00:45:58.670 --> 00:46:01.449
i have to do is get cloned to some path and what

00:46:01.449 --> 00:46:04.170
about the lazy loading like that's the thing

00:46:04.170 --> 00:46:06.769
that you know lazy does that loading on certain

00:46:06.769 --> 00:46:11.250
events and uh that's so i'll well okay so okay

00:46:11.250 --> 00:46:16.449
i have thoughts about this i'll say vim figured

00:46:16.449 --> 00:46:18.949
out lazy loading before any of them even existed

00:46:19.869 --> 00:46:22.409
Like Vim plugins, well -written Vim plugins,

00:46:22.590 --> 00:46:24.230
if you look at T -PoP plugins, for instance,

00:46:24.369 --> 00:46:28.349
most of them, anyway, they are auto -loaded,

00:46:28.349 --> 00:46:31.809
is the term Vim uses. So they are not loaded

00:46:31.809 --> 00:46:34.150
until they're needed, until the function is called.

00:46:34.670 --> 00:46:38.510
And Vim, a plugin can be written to do this without

00:46:38.510 --> 00:46:41.329
any help from a plugin manager. The plugin itself,

00:46:41.590 --> 00:46:44.989
right? So the plugin creator. So the idea is,

00:46:45.130 --> 00:46:48.250
the way that a Vim plugin works is just a directory

00:46:48.250 --> 00:46:50.480
with some files. with some subdirectories and

00:46:50.480 --> 00:46:53.980
some files. Any file under a directory called

00:46:53.980 --> 00:46:59.019
plugin gets interpreted and executed on startup.

00:46:59.480 --> 00:47:02.760
And then any file that's under a directory called

00:47:02.760 --> 00:47:08.059
autoload gets called on demand. And I'm talking

00:47:08.059 --> 00:47:09.480
about just old school Vim plugins right now.

00:47:10.320 --> 00:47:13.940
So a well -written Vim plugin has extremely minimal

00:47:13.940 --> 00:47:16.659
amount of code in this plugin directory. Maybe

00:47:16.659 --> 00:47:23.639
it defines a couple of plug key maps that users

00:47:23.639 --> 00:47:26.760
can then remap, or it might define some commands.

00:47:27.260 --> 00:47:29.900
But it doesn't define any functions. It doesn't

00:47:29.900 --> 00:47:33.400
do anything. So this code should take milliseconds,

00:47:33.920 --> 00:47:37.000
like sub -milliseconds to execute. It's very

00:47:37.000 --> 00:47:40.460
minimal. And then all your beefy code is in this

00:47:40.460 --> 00:47:42.579
autoload directory. So not until the user actually

00:47:42.579 --> 00:47:44.539
calls it does that code get loaded and executed.

00:47:45.239 --> 00:47:47.739
So the same concept exists in Lua. Instead of

00:47:47.739 --> 00:47:49.300
an autoload directory, you have it in the Lua

00:47:49.300 --> 00:47:52.019
directory and you call require or whatever. But

00:47:52.019 --> 00:47:54.760
what was happening in the NeoVim ecosystem with

00:47:54.760 --> 00:47:58.900
many Lua plugins was a couple of things. One

00:47:58.900 --> 00:48:02.380
was the proliferation of this setup pattern where

00:48:02.380 --> 00:48:06.139
to load a plugin, you would call require myplugin

00:48:06.139 --> 00:48:09.460
.setup. And what that would do is then call a

00:48:09.460 --> 00:48:12.320
bunch of these other modules. So you're executing

00:48:12.320 --> 00:48:15.250
tons and tons and tons of code. And the instructions

00:48:15.250 --> 00:48:18.050
for these plugins would tell you to do this on

00:48:18.050 --> 00:48:20.150
startup. And so people were seeing these plugins

00:48:20.150 --> 00:48:23.050
slow down their startup times. And just because

00:48:23.050 --> 00:48:26.150
they were, to be frank, written poorly, they

00:48:26.150 --> 00:48:28.449
weren't taking advantage of the mechanisms that

00:48:28.449 --> 00:48:32.150
Neo then gave it to run effectively. So what

00:48:32.150 --> 00:48:34.090
a plugin should do, if it wants to lazy load,

00:48:34.269 --> 00:48:39.010
is write the minimal, as little as possible as

00:48:39.010 --> 00:48:42.730
you can in this plugin file. And then everything

00:48:42.730 --> 00:48:45.510
else goes in your require, and you just call

00:48:45.510 --> 00:48:48.090
that when you need it. Another problem that you

00:48:48.090 --> 00:48:50.110
see is, and this is understandable, I understand

00:48:50.110 --> 00:48:52.630
why people do this, but let's say I have this,

00:48:52.730 --> 00:48:55.510
I'm writing a plugin file. I don't want to have

00:48:55.510 --> 00:48:58.070
to write require, I'm sharing my screen right

00:48:58.070 --> 00:49:01.769
now, just in case. People don't want to write

00:49:01.769 --> 00:49:05.449
require, let's say I have my function do stuff,

00:49:05.769 --> 00:49:12.099
and my plugin has this I got a lot to require

00:49:12.099 --> 00:49:16.659
require my plugin got sub modules, you know dot

00:49:16.659 --> 00:49:21.940
who dot You know do stuff Right, like that's

00:49:21.940 --> 00:49:23.960
a lot to write. So people will do is to say okay

00:49:23.960 --> 00:49:28.760
local foo equals require my plug -in sub module

00:49:28.760 --> 00:49:32.000
dot foo right and I understand we'll do this

00:49:32.000 --> 00:49:36.980
because this is if you're writing like rust or

00:49:36.980 --> 00:49:40.969
or JavaScript, right? This is what you do. You

00:49:40.969 --> 00:49:43.590
import modules at the top level so that you can

00:49:43.590 --> 00:49:45.230
refer to them by a shorthand in your function.

00:49:45.750 --> 00:49:47.789
But in Lua, what this does is that when your

00:49:47.789 --> 00:49:51.349
code is executed, you are calling this require

00:49:51.349 --> 00:49:54.150
here as soon as the script is executed. It's

00:49:54.150 --> 00:49:56.869
not happening when you call doStuff. It's happening

00:49:56.869 --> 00:50:01.510
when the file is loaded. So this is an area,

00:50:01.670 --> 00:50:04.809
this is, I think, one reason that this has been

00:50:04.809 --> 00:50:07.340
more of a problem in Lua is just because People

00:50:07.340 --> 00:50:09.300
naturally want to do this pattern. And again,

00:50:09.380 --> 00:50:14.659
I understand why. But that ends up hurting the

00:50:14.659 --> 00:50:16.300
lazy loading, right? Because you're not lazy

00:50:16.300 --> 00:50:18.300
loading it now. You're loading it up front instead

00:50:18.300 --> 00:50:20.460
of on demand. So what you should do is instead

00:50:20.460 --> 00:50:23.539
something like this. But that's obviously a pain

00:50:23.539 --> 00:50:28.079
to write. So I get why people don't do it. Anyway,

00:50:28.179 --> 00:50:33.219
so people started writing plugins using these

00:50:33.219 --> 00:50:35.679
patterns. And people noticed that their startup

00:50:35.679 --> 00:50:39.099
times were getting slower. And then plugin managers

00:50:39.099 --> 00:50:41.639
then recreated this concept of lazy loading that

00:50:41.639 --> 00:50:44.840
already existed in Neobim. And now that responsibility

00:50:44.840 --> 00:50:46.940
was on the plugin manager, which has increased,

00:50:47.079 --> 00:50:50.500
added more complexity because now we're loading

00:50:50.500 --> 00:50:52.320
these plugins at different points instead of

00:50:52.320 --> 00:50:55.579
loading them up front and letting Neobim do the

00:50:55.579 --> 00:50:58.739
lazy loading as necessary. So I was just like,

00:50:58.820 --> 00:51:00.820
whatever, I'm not going to. So I'm also like

00:51:00.820 --> 00:51:03.210
very, very. picky about the plugins I install.

00:51:03.469 --> 00:51:05.570
I read the source code, and I'm like, if you're

00:51:05.570 --> 00:51:07.869
putting a bunch of... If you're going to slow

00:51:07.869 --> 00:51:09.309
down my startup time because it's not written

00:51:09.309 --> 00:51:14.989
well, I'm not going to install it. Any plugin

00:51:14.989 --> 00:51:18.469
that requires me to call .setup, I almost always

00:51:18.469 --> 00:51:23.789
will not use it. But many .envim is the one exception

00:51:23.789 --> 00:51:27.239
to this. Evgeny knows how I feel about this.

00:51:27.300 --> 00:51:28.760
We've talked about this a lot. We've kind of

00:51:28.760 --> 00:51:31.900
just agreed to disagree, basically. You couldn't

00:51:31.900 --> 00:51:34.400
convince him. I couldn't convince him. He has

00:51:34.400 --> 00:51:36.739
counter -arguments. If he's watching this, he

00:51:36.739 --> 00:51:38.920
will probably... He will probably. He's shaking

00:51:38.920 --> 00:51:44.000
his fist. He's not representing the counter -arguments.

00:51:44.179 --> 00:51:48.219
But the code I have for many, I do make exceptions.

00:51:48.920 --> 00:51:51.260
I'd call... Well, this is kind of hard to read

00:51:51.260 --> 00:51:53.920
because it has a macro, but I do call setup.

00:51:54.459 --> 00:51:58.139
for mini .inven. So I make an exception for Evgeny,

00:51:58.159 --> 00:52:01.760
but I also trust him. I know his plugins are

00:52:01.760 --> 00:52:04.380
written well, so I always make an exception there.

00:52:05.139 --> 00:52:07.079
Anyway, that's kind of like my mini rant. So

00:52:07.079 --> 00:52:09.679
we were talking about package managers. Yeah,

00:52:09.699 --> 00:52:11.159
so they kept getting increasingly complicated.

00:52:11.920 --> 00:52:14.960
And I don't mean to disparage, right? I'm not

00:52:14.960 --> 00:52:17.679
trying to... I don't mean to dunk on people or

00:52:17.679 --> 00:52:20.530
whatever. We're talking about... editor plugins,

00:52:20.769 --> 00:52:23.150
right? This is the lowest stakes thing possible

00:52:23.150 --> 00:52:25.070
to talk about. People can do whatever they want.

00:52:25.309 --> 00:52:29.449
It's for fun. But for my own personal taste,

00:52:29.650 --> 00:52:31.829
it was just too much. It was too complex. It

00:52:31.829 --> 00:52:34.250
was too much going on. So I was like, we don't

00:52:34.250 --> 00:52:38.190
need a lot here. I can do... I can satisfy what

00:52:38.190 --> 00:52:42.190
I need in a shell script. Like 100 lines of code,

00:52:42.289 --> 00:52:44.789
100 lines of shell. So that's what I did. That's

00:52:44.789 --> 00:52:47.349
all I use now. You know your way around NeoBIM

00:52:47.349 --> 00:52:49.980
quite well. You created your own Package manager,

00:52:50.239 --> 00:52:53.099
we could say. But what about someone just joining

00:52:53.099 --> 00:52:55.099
from VS Code that is used to the marketplace

00:52:55.099 --> 00:52:57.059
or whatever that's called where you install the

00:52:57.059 --> 00:53:00.500
plugins, right? They're not going to write their

00:53:00.500 --> 00:53:03.760
own plugin manager. They will not know how to

00:53:03.760 --> 00:53:08.320
load plugins and all that stuff. So do you think

00:53:08.320 --> 00:53:12.679
a plugin manager like Lacey could be useful in

00:53:12.679 --> 00:53:16.840
that case? Someone completely new, right? Or

00:53:16.840 --> 00:53:20.039
what? What are your thoughts there? I do think

00:53:20.039 --> 00:53:22.500
having an easy -to -use... So this was a big

00:53:22.500 --> 00:53:25.360
motivation behind adding the package manager,

00:53:25.420 --> 00:53:27.420
the plugin manager, into having a native one

00:53:27.420 --> 00:53:30.420
in NeoVim, which we've been talking about Evgeny

00:53:30.420 --> 00:53:32.840
a lot, but that's something else he did. He upstreamed

00:53:32.840 --> 00:53:37.119
a version of his many .debs into NeoVim. So NeoVim

00:53:37.119 --> 00:53:42.820
has a package manager now called vim .pack. I

00:53:42.820 --> 00:53:45.539
don't know why that didn't work. Okay, it looks

00:53:45.539 --> 00:53:51.139
like my... There it is. So Newton has a package

00:53:51.139 --> 00:53:54.599
manager now. And a big reason for adding this,

00:53:54.719 --> 00:53:57.400
this was a thing that was talked about a lot

00:53:57.400 --> 00:54:00.480
over the years internally. Should we provide

00:54:00.480 --> 00:54:03.219
this? And it was never clear the answer was yes,

00:54:03.280 --> 00:54:05.400
right? Because it was like, okay, that's more

00:54:05.400 --> 00:54:07.679
code to maintain, right? We don't want to add

00:54:07.679 --> 00:54:10.280
everything under the sun, right? We have to have

00:54:10.280 --> 00:54:13.480
some... There should be some threshold or some

00:54:13.480 --> 00:54:15.159
barrier to what gets added, and it has to be

00:54:15.159 --> 00:54:18.019
a compelling reason. And the compelling reason,

00:54:18.119 --> 00:54:24.260
in my opinion, was that we were seeing, especially

00:54:24.260 --> 00:54:28.119
with LSP, right? Like for many, many years, the

00:54:28.119 --> 00:54:32.119
story was NeoVim has a built -in LSP client.

00:54:33.019 --> 00:54:38.019
And yet it was, for most users, almost a requirement

00:54:38.019 --> 00:54:41.000
to then install nvim -lsp -config. I mean, unless

00:54:41.000 --> 00:54:42.539
you were willing to write like a bunch of low

00:54:42.539 --> 00:54:45.469
code, you had to install. nvm -lsp -config, this

00:54:45.469 --> 00:54:48.289
plugin. And it wasn't a third -party plugin.

00:54:48.349 --> 00:54:49.750
It was under the NeoVim umbrella, but you still

00:54:49.750 --> 00:54:51.949
had to install it, right? It didn't come with

00:54:51.949 --> 00:54:55.389
NeoVim. So we were telling users, like, hey,

00:54:55.449 --> 00:54:58.769
NeoVim has LSP included. It comes out of the

00:54:58.769 --> 00:55:00.750
box. But that was kind of a lie, right? Because

00:55:00.750 --> 00:55:03.010
it really wasn't. You had to install NeoVim.

00:55:03.610 --> 00:55:05.230
If you're a brand new user coming from VS Code,

00:55:05.389 --> 00:55:07.409
you had to install NeoVim. And then you have

00:55:07.409 --> 00:55:09.789
to go install nvm -lsp -config. And it's like,

00:55:09.789 --> 00:55:11.800
how do you do that? Now I have to go learn about

00:55:11.800 --> 00:55:13.860
package plugin managers. Now I have to pick a

00:55:13.860 --> 00:55:16.300
plugin manager. And I have to learn how to install

00:55:16.300 --> 00:55:19.380
this plugin using this plugin. It's all this

00:55:19.380 --> 00:55:23.360
extra stuff. And this was contributing to this

00:55:23.360 --> 00:55:25.940
idea and this perception that NeoVim is really

00:55:25.940 --> 00:55:29.460
complicated and hard to set up, which is kind

00:55:29.460 --> 00:55:32.260
of fair. So that was a big motivating factor

00:55:32.260 --> 00:55:34.659
to upstream this, right? Because you want to

00:55:34.659 --> 00:55:37.099
be able to say, you can literally just write

00:55:37.099 --> 00:55:40.860
this code in your... in it .lua file and and

00:55:40.860 --> 00:55:42.679
that's all i have to do like for a brand new

00:55:42.679 --> 00:55:45.059
user from vs code just copy paste these few lines

00:55:45.059 --> 00:55:49.179
you're good to go and the addition of vim .pack

00:55:49.179 --> 00:55:53.960
gets us a lot closer to that reality now um if

00:55:53.960 --> 00:55:57.000
someone wants to use lazy or whatever i am again

00:55:57.000 --> 00:55:58.559
this is like do whatever you want i'm not the

00:55:58.559 --> 00:56:00.699
boss i'm not like your editor mom or dad right

00:56:00.699 --> 00:56:02.800
like i'm not going to come like knocking on your

00:56:02.800 --> 00:56:05.019
door saying how dare like I'm talking about my

00:56:05.019 --> 00:56:08.619
own personal preferences and stylistic preferences

00:56:08.619 --> 00:56:13.780
or whatever, but that's totally subjective. If

00:56:13.780 --> 00:56:16.440
using lazy or even one of these distributions

00:56:16.440 --> 00:56:21.760
like NVChat or LazyVim makes it easier, that's

00:56:21.760 --> 00:56:24.900
what you like to do, by all means. I know a ton

00:56:24.900 --> 00:56:27.400
of users use LazyVim, and Folky's done an amazing

00:56:27.400 --> 00:56:32.280
job with that. Folky's responsible for a lot

00:56:32.280 --> 00:56:34.969
of... NeoVim's user growth. I'm not going to

00:56:34.969 --> 00:56:39.110
pretend otherwise, right? So I think to me as

00:56:39.110 --> 00:56:41.269
a core team member, it is a little bit of an

00:56:41.269 --> 00:56:45.289
indication that we have work to do to make NeoVim

00:56:45.289 --> 00:56:51.929
itself, like the independent project, more approachable

00:56:51.929 --> 00:56:54.369
and beginner -friendly. I think we've come quite

00:56:54.369 --> 00:56:57.710
a long way there, especially with LSP over the

00:56:57.710 --> 00:56:59.849
last couple of versions, and vim .pack is going

00:56:59.849 --> 00:57:02.670
to get us even further on that road. But there's

00:57:02.670 --> 00:57:06.730
still there's still more we can do. Make things

00:57:06.730 --> 00:57:09.610
easier. This whole thing was like really made

00:57:09.610 --> 00:57:12.030
very clear to me when I helped a co -worker switch

00:57:12.030 --> 00:57:15.409
to any of them. And I was I was sitting with

00:57:15.409 --> 00:57:18.130
him like in person. I was there in the office

00:57:18.130 --> 00:57:21.550
next to him. And I was like having to like I

00:57:21.550 --> 00:57:24.269
was like feeling his frustration in person. And

00:57:24.269 --> 00:57:26.710
I was like felt guilty. I was like I was like

00:57:26.710 --> 00:57:28.949
this is partially my fault. This is so complicated.

00:57:29.090 --> 00:57:31.170
Right. like that there's all these steps involved

00:57:31.170 --> 00:57:33.849
and i was like almost like apologizing but after

00:57:33.849 --> 00:57:35.650
that experience i was like this has this has

00:57:35.650 --> 00:57:38.630
to get better like this is just not yeah it's

00:57:38.630 --> 00:57:41.230
not good enough when you install neovim you know

00:57:41.230 --> 00:57:43.989
default neovim you open it you see the black

00:57:43.989 --> 00:57:48.219
screen and it's like so what is this But if you

00:57:48.219 --> 00:57:50.539
watch videos and you watch LazyVim, you get that

00:57:50.539 --> 00:57:53.179
little dashboard that, you know, it's not useful

00:57:53.179 --> 00:57:55.599
at all because I just opened my picker when I

00:57:55.599 --> 00:57:58.460
have the dashboard open, my picker. But now I

00:57:58.460 --> 00:58:00.800
know about that. I think it's a little bit more

00:58:00.800 --> 00:58:04.320
friendly and more welcoming than just a default

00:58:04.320 --> 00:58:07.440
NeoVim screen. You're like, what am I supposed

00:58:07.440 --> 00:58:12.619
to do here, right? Yeah, this is pretty utilitarian.

00:58:13.630 --> 00:58:16.110
Yeah, but it's flexible. It gives you options,

00:58:16.309 --> 00:58:18.650
right? So it gives you the base, then you do

00:58:18.650 --> 00:58:20.789
whatever you want with it. Is that like the goal

00:58:20.789 --> 00:58:27.750
as well? Yeah, so that's a good question. I'll

00:58:27.750 --> 00:58:29.289
answer that a little bit more broadly, like in

00:58:29.289 --> 00:58:32.550
terms of general design philosophy. So NeoVim,

00:58:32.610 --> 00:58:35.710
I think kind of sits, there's a spectrum between

00:58:35.710 --> 00:58:40.429
editors that are pretty much stable, don't change

00:58:40.429 --> 00:58:43.239
a lot. their users are happy exactly how it is,

00:58:43.280 --> 00:58:48.179
to extremely experimental, cutting -edge early

00:58:48.179 --> 00:58:50.860
adopters. People want to use the hot new thing.

00:58:51.199 --> 00:58:54.639
So on one end, you have Vim, which is extremely

00:58:54.639 --> 00:58:58.219
stable and basically never makes any breaking

00:58:58.219 --> 00:59:00.880
changes. And when they do, their users are very

00:59:00.880 --> 00:59:03.840
upset about it. And then on the other side of

00:59:03.840 --> 00:59:06.300
the spectrum, you might have Helix, where Helix

00:59:06.300 --> 00:59:10.670
is used by a lot of people that are not afraid

00:59:10.670 --> 00:59:13.070
to try new things, or Capcom is another one,

00:59:13.150 --> 00:59:16.750
that want to try new ideas. NeoVim sits somewhere

00:59:16.750 --> 00:59:20.190
in the middle, where we are more than willing

00:59:20.190 --> 00:59:22.050
to, I shouldn't say more than willing, we're

00:59:22.050 --> 00:59:26.150
more willing than Vim to make changes, although

00:59:26.150 --> 00:59:29.769
we don't do that flippantly. We try to avoid

00:59:29.769 --> 00:59:32.929
that when we can. But we want to add new features,

00:59:33.110 --> 00:59:36.429
we want to improve defaults, understanding that

00:59:36.429 --> 00:59:41.210
doing so will break some users' workflows. At

00:59:41.210 --> 00:59:45.030
the same time, we also have a lot of this...

00:59:45.030 --> 00:59:49.070
We don't want to... We're not total revolutionaries,

00:59:49.110 --> 00:59:51.969
right? We also want to respect people that know

00:59:51.969 --> 00:59:55.429
Vim, have used Vim. We embrace our Vim heritage,

00:59:55.670 --> 01:00:00.630
so to speak. We are unapologetically a Vim fork,

01:00:00.809 --> 01:00:06.530
right? So there's some things that we... we do

01:00:06.530 --> 01:00:08.969
a little more cautiously because we want to maintain

01:00:08.969 --> 01:00:12.510
that minimalism that Vim is known for, the fast

01:00:12.510 --> 01:00:15.170
startup times. And of course, Helix is that too.

01:00:15.250 --> 01:00:17.650
Helix is very fast and minimal, and I think they've

01:00:17.650 --> 01:00:20.469
done a great job with their editor. But you do

01:00:20.469 --> 01:00:22.949
see a lot of people that struggle to move to

01:00:22.949 --> 01:00:25.809
Helix because they want to keep using the Vim

01:00:25.809 --> 01:00:30.849
bindings. Have you tried Helix? Sorry to interrupt

01:00:30.849 --> 01:00:33.869
you there. I have tried Helix. I think it's extremely

01:00:33.869 --> 01:00:37.730
well done. I'll say if in an alternative timeline,

01:00:38.050 --> 01:00:41.369
when I was just starting out with Vim, if Helix

01:00:41.369 --> 01:00:43.969
had existed at the time, I think it's very likely

01:00:43.969 --> 01:00:47.650
I would have just used Helix. I just have almost

01:00:47.650 --> 01:00:50.929
10 years, a decade under my belt using Vim at

01:00:50.929 --> 01:00:54.389
this point. And when I tried Helix, it didn't

01:00:54.389 --> 01:00:58.170
take me long to run into... like something I

01:00:58.170 --> 01:01:01.050
wanted to do but couldn't do. And I find the

01:01:01.050 --> 01:01:04.909
scriptability of NeoVim such a superpower now

01:01:04.909 --> 01:01:07.329
that not being able to do that would be, I would

01:01:07.329 --> 01:01:09.610
find, severely limiting. But I think that's what

01:01:09.610 --> 01:01:13.630
Helix users like. They don't want the scriptability.

01:01:13.829 --> 01:01:15.670
They don't want to have to install plugins, right?

01:01:15.750 --> 01:01:17.110
They like that everything is part of the core.

01:01:17.409 --> 01:01:19.710
Did you get used to visual mode in Helix? Because

01:01:19.710 --> 01:01:21.889
it's not visual mode, it's select mode or something

01:01:21.889 --> 01:01:25.190
like that. So did you get used to that? I didn't

01:01:25.190 --> 01:01:29.030
use it enough to get used to it, but I do think

01:01:29.030 --> 01:01:33.949
it's a good model. In hindsight, I wish Bill

01:01:33.949 --> 01:01:36.710
Joy, when he wrote VI, had done that instead

01:01:36.710 --> 01:01:41.449
of normal mode first or whatever that Vim has.

01:01:41.750 --> 01:01:44.769
I think modal editing in general is a huge improvement

01:01:44.769 --> 01:01:48.329
over the alternative. But being able to have

01:01:48.329 --> 01:01:52.780
visual mode first, I think, is probably... better

01:01:52.780 --> 01:01:57.039
than what Vim has. But ultimately, it what's

01:01:57.039 --> 01:01:58.579
going to be better for each person is what their

01:01:58.579 --> 01:02:03.980
muscle memory is used to. Right. So. Local. We

01:02:03.980 --> 01:02:06.199
learned to say about Helix, though, is I know

01:02:06.199 --> 01:02:09.300
that they are they either are about to or already

01:02:09.300 --> 01:02:14.880
have introduced scripting through using a list

01:02:14.880 --> 01:02:17.079
of some some scheme variant of all things, which

01:02:17.079 --> 01:02:21.199
is like targeted at me. it was very compelling

01:02:21.199 --> 01:02:25.760
to me but i do wonder when helix opens the door

01:02:25.760 --> 01:02:29.960
to scripting if the the reputation that helix

01:02:29.960 --> 01:02:32.760
has as just working and not having to install

01:02:32.760 --> 01:02:35.039
a bunch of plugins will persist right because

01:02:35.039 --> 01:02:36.960
once the door opens to plugins and scriptability

01:02:36.960 --> 01:02:39.820
then you have to start thinking about plug -in

01:02:39.820 --> 01:02:43.280
compatibility and people depending on plugins

01:02:43.280 --> 01:02:45.059
that are written by third parties that are not

01:02:45.059 --> 01:02:48.050
up to the same quality standard yep That are

01:02:48.050 --> 01:02:50.250
not going to be maintained, probably, and they're

01:02:50.250 --> 01:02:53.030
going to cause a lot of issues. So I'm curious

01:02:53.030 --> 01:02:56.610
to see if, I don't know, five years from now,

01:02:56.650 --> 01:02:58.889
ten years from now, if Helix is still around,

01:02:59.070 --> 01:03:02.570
if the situation is any better or worse than

01:03:02.570 --> 01:03:04.469
what NeoVim is today. That would be an interesting

01:03:04.469 --> 01:03:10.130
experiment. I also have experimented with Zed.

01:03:10.230 --> 01:03:13.090
It's hard not to, right? With how much hype it

01:03:13.090 --> 01:03:18.730
has. I think that itself is fine. I don't have

01:03:18.730 --> 01:03:22.449
any complaints about the editor. At this point,

01:03:22.469 --> 01:03:26.909
my development model is so built into being terminal

01:03:26.909 --> 01:03:31.469
first, shell first, but having my editor be outside

01:03:31.469 --> 01:03:36.110
of that just feels extremely limiting. I just

01:03:36.110 --> 01:03:39.510
couldn't get used to it. If I was dedicated and

01:03:39.510 --> 01:03:41.210
was like, I'm going to do this and I'm going

01:03:41.210 --> 01:03:43.869
to force myself to do it for seven days straight

01:03:43.869 --> 01:03:46.269
or something, I probably could adapt to it, but

01:03:46.269 --> 01:03:48.969
why? I don't know. I don't have a compelling

01:03:48.969 --> 01:03:51.670
reason to do that. That's something similar to

01:03:51.670 --> 01:03:53.969
what happened to me in Obsidian, you know, because

01:03:53.969 --> 01:03:57.130
I used Obsidian for my notes for a long time.

01:03:57.170 --> 01:04:00.369
I loved the tool, but then I tried NeoVim, then

01:04:00.369 --> 01:04:02.929
I jumped into the terminal full, you know, now

01:04:02.929 --> 01:04:06.780
I do my notes in NeoVim. So I... Cannot open

01:04:06.780 --> 01:04:08.559
another application because it's disruptive,

01:04:08.880 --> 01:04:11.099
right? It's like, man, so I have to go to this

01:04:11.099 --> 01:04:13.300
other application. It has different key bindings.

01:04:13.300 --> 01:04:15.239
It doesn't have all of my emotions and all that.

01:04:15.340 --> 01:04:20.079
So I guess something similar, right? Exactly.

01:04:20.159 --> 01:04:27.619
Yeah. Okay. And I was going to ask you. I see

01:04:27.619 --> 01:04:30.159
in Reddit that there's plugins, new plugins all

01:04:30.159 --> 01:04:32.880
the time that are being released. So, hey, I

01:04:32.880 --> 01:04:36.079
have this new file picker. I have this new whatever.

01:04:36.360 --> 01:04:38.719
What are your thoughts on all of these versions

01:04:38.719 --> 01:04:42.019
of plugins? Are you okay with a lot of plugins

01:04:42.019 --> 01:04:44.219
being created that you don't know if they're

01:04:44.219 --> 01:04:47.000
going to be maintained or not? They're fun projects

01:04:47.000 --> 01:04:49.480
for the people creating them. But do you have

01:04:49.480 --> 01:04:50.820
any thoughts, anything you want to share about

01:04:50.820 --> 01:04:53.760
that? I think it's great. I totally understand

01:04:53.760 --> 01:04:55.539
when people create something, wanting to share

01:04:55.539 --> 01:04:58.440
it. People should keep doing that, keep sharing

01:04:58.440 --> 01:05:02.659
it. And I think the NeoVim community, I don't

01:05:02.659 --> 01:05:04.880
spend a ton of time on the NeoVim subreddit,

01:05:04.980 --> 01:05:07.880
but from what I have, it seems like people are

01:05:07.880 --> 01:05:10.340
generally pretty supportive of people writing

01:05:10.340 --> 01:05:11.980
new plugins, right? So I think that's great.

01:05:12.079 --> 01:05:13.559
I think it's great that people can share stuff

01:05:13.559 --> 01:05:17.119
and get good feedback. I'll also say, if you're

01:05:17.119 --> 01:05:19.300
a plugin writer, it's okay to write stuff just

01:05:19.300 --> 01:05:23.320
for yourself. Not everything has to be on GitHub.

01:05:24.000 --> 01:05:27.309
Write your own. features in NeoVim that are just

01:05:27.309 --> 01:05:31.650
for you. Turn it into your editor. Writing plugins

01:05:31.650 --> 01:05:36.170
is not hard. You have to learn NeoVim's API,

01:05:36.570 --> 01:05:38.650
which, like anything, you have to learn your

01:05:38.650 --> 01:05:42.289
way around. If you're not used to it, it'll take

01:05:42.289 --> 01:05:43.889
some work because you'll be like, okay, I don't

01:05:43.889 --> 01:05:45.309
know how to do this. I have to find the right

01:05:45.309 --> 01:05:49.269
function to do it. You figure it out. If you're

01:05:49.269 --> 01:05:52.250
a professional software engineer, it's well,

01:05:52.250 --> 01:05:54.929
well, well within your capabilities to write.

01:05:55.320 --> 01:05:58.800
a plugin for neobim and remember that um like

01:05:58.800 --> 01:06:04.219
so i'll share my screen again um if if you're

01:06:04.219 --> 01:06:06.840
just a regular user you have your you know config

01:06:06.840 --> 01:06:10.079
.mv file that has your init .lua or your init

01:06:10.079 --> 01:06:12.320
.bin or whatever all you have to do to write

01:06:12.320 --> 01:06:15.780
your own plugin is write a file into the plugin

01:06:15.780 --> 01:06:19.659
directory call it my cool plugin whatever dot

01:06:19.659 --> 01:06:25.840
lua and write some code Okay? I just wrote a

01:06:25.840 --> 01:06:28.079
plugin. When I start, well, that was a bad example,

01:06:28.199 --> 01:06:31.699
but there it is. It printed hello world, right?

01:06:31.860 --> 01:06:35.519
That took me five seconds. Now, of course, writing

01:06:35.519 --> 01:06:37.420
a real plugin is a lot more work than that because

01:06:37.420 --> 01:06:40.340
you're not just going to print something. But

01:06:40.340 --> 01:06:45.679
my point is that it's really easy to modify NeoVim

01:06:45.679 --> 01:06:47.360
if you're a NeoVim user yourself. You don't have

01:06:47.360 --> 01:06:49.039
to rely on other people writing plugins for you.

01:06:49.159 --> 01:06:52.679
Just go to your config .config slash invent directory.

01:06:53.389 --> 01:06:55.550
and put something in the plugin folder. That's

01:06:55.550 --> 01:06:58.530
all you got to do. And make any of them your

01:06:58.530 --> 01:07:02.510
own. I have tons of files in here, all the different

01:07:02.510 --> 01:07:09.809
stuff. One thing I have is in these file type

01:07:09.809 --> 01:07:14.989
-specific plugins, like for C, for example. I

01:07:14.989 --> 01:07:17.329
don't write a lot of C today, but I have in the

01:07:17.329 --> 01:07:21.099
past. And one thing that I have to do... is I

01:07:21.099 --> 01:07:23.280
have this function that I wrote called setPath.

01:07:23.760 --> 01:07:27.519
And it's in a Lua module, so I call require.

01:07:28.039 --> 01:07:35.760
Okay, so that is in this ft .c file. And I won't

01:07:35.760 --> 01:07:38.380
walk through all this code. That's not the point

01:07:38.380 --> 01:07:41.460
here. But all this does is it looks in the current

01:07:41.460 --> 01:07:43.760
directory to see if there's a compilecommands

01:07:43.760 --> 01:07:47.980
.json file. If there is, it reads it into NeoVim,

01:07:48.079 --> 01:07:51.619
parses it as JSON, reads through it, and sets

01:07:51.619 --> 01:07:58.159
the path option. And path is used to find files

01:07:58.159 --> 01:08:01.840
and stuff using GF and other things. And this

01:08:01.840 --> 01:08:04.599
is, I don't know, it's like, my point of sharing

01:08:04.599 --> 01:08:06.579
that example is I had this idea. I'm like, oh,

01:08:06.599 --> 01:08:08.179
wouldn't it be useful? Wouldn't it be cool if

01:08:08.179 --> 01:08:10.639
I could just have NeoVim automatically read and

01:08:10.639 --> 01:08:13.059
parse these compile commands dot JSON files and

01:08:13.059 --> 01:08:15.679
have it automatically set the path option in

01:08:15.679 --> 01:08:17.930
NeoVim? i was like yeah that would be cool so

01:08:17.930 --> 01:08:19.909
i just went and did it right like that that's

01:08:19.909 --> 01:08:21.550
the point i'm trying to make is if you have an

01:08:21.550 --> 01:08:23.210
idea of something that you want your editor to

01:08:23.210 --> 01:08:26.670
do just like you have the power to do it that's

01:08:26.670 --> 01:08:29.890
like the amazing thing about about uh having

01:08:29.890 --> 01:08:33.689
a scriptable editor is that it's this it's this

01:08:33.689 --> 01:08:37.310
malleable thing that you can modify and and change

01:08:37.310 --> 01:08:39.270
to your will so i encourage people to do that

01:08:39.270 --> 01:08:41.350
share it by all means if you want to if you think

01:08:41.350 --> 01:08:43.829
it's useful for other people share it but i mentioned

01:08:43.829 --> 01:08:47.310
this earlier too if you don't share it and make

01:08:47.310 --> 01:08:49.390
it just for your use cases and just for your

01:08:49.390 --> 01:08:51.670
needs and you're the only user, you can do whatever

01:08:51.670 --> 01:08:54.090
you want. You can make breaking changes. You

01:08:54.090 --> 01:08:56.590
don't have to support configuration options,

01:08:56.770 --> 01:08:58.710
right? You don't have to write good error messages.

01:08:59.569 --> 01:09:02.310
Just write exactly the code that you need and

01:09:02.310 --> 01:09:05.989
it'll be a lot more fun too. Now, would you like

01:09:05.989 --> 01:09:09.090
or would you mind sharing about the NeoVim plugin

01:09:09.090 --> 01:09:12.010
manager that you mentioned? Like I use LazyVim

01:09:12.010 --> 01:09:16.260
and I use the Lazy. and been plugin manager of

01:09:16.260 --> 01:09:20.680
course right so um how do i install plugins in

01:09:20.680 --> 01:09:22.779
this thing because i didn't even know about that

01:09:22.779 --> 01:09:27.279
to be honest so i i just called a shell script

01:09:27.279 --> 01:09:34.199
called pack up pack update was the idea uh but

01:09:34.199 --> 01:09:37.300
um again i won't walk through the code but essentially

01:09:37.300 --> 01:09:42.260
all it does is here i can oh no Is this the one

01:09:42.260 --> 01:09:44.619
that was released in Neobim that you just talked

01:09:44.619 --> 01:09:47.760
about? Oh, that makes more sense. I was like,

01:09:47.859 --> 01:09:49.579
I can just talk about mine if you want, but it's

01:09:49.579 --> 01:09:54.340
okay. Yeah, so this is called BIMPACK. So there's

01:09:54.340 --> 01:09:56.359
a big warning here, work in progress. This is

01:09:56.359 --> 01:09:59.819
only on the master branch, so people that are

01:09:59.819 --> 01:10:01.819
running it. So it's not released yet, right?

01:10:01.920 --> 01:10:05.760
Not released yet, no. There's some examples here.

01:10:06.640 --> 01:10:09.890
To be honest, I actually haven't... used it yet.

01:10:10.010 --> 01:10:13.930
I reviewed the PR when it went in, but I'm not

01:10:13.930 --> 01:10:16.630
the most qualified person to talk about how it

01:10:16.630 --> 01:10:19.930
works. But the syntax here is probably fairly

01:10:19.930 --> 01:10:22.989
familiar to anyone who's used other plugin managers.

01:10:23.229 --> 01:10:27.310
But compared to lazy .mvim, it's substantially

01:10:27.310 --> 01:10:30.430
similar. There's no lazy loading. You can't say

01:10:30.430 --> 01:10:33.109
load on when I execute this hook or something.

01:10:33.510 --> 01:10:37.170
All it does is clone some repos to a certain

01:10:37.170 --> 01:10:45.140
path. So you rely on the plugin creator to write

01:10:45.140 --> 01:10:47.640
it correctly so that it loads at the right time,

01:10:47.720 --> 01:10:55.000
right? It kind of depends. If the plugin you're

01:10:55.000 --> 01:10:57.220
using says you have to call a .setup or whatever,

01:10:57.420 --> 01:11:01.340
then you're going to have to call the setup function.

01:11:01.500 --> 01:11:03.340
That's the way the plugin expects to be loaded.

01:11:03.819 --> 01:11:06.399
And if you want to do that... If you want to

01:11:06.399 --> 01:11:10.020
defer that until a certain event, then you'll

01:11:10.020 --> 01:11:12.159
either have to write the lazy loading code yourself

01:11:12.159 --> 01:11:21.380
or keep using lazy .invent. So this is my admonition

01:11:21.380 --> 01:11:24.340
to plugin writers everywhere. If you're writing

01:11:24.340 --> 01:11:25.899
a plugin, you should be doing the lazy loading

01:11:25.899 --> 01:11:27.920
yourself. Don't rely on the plugin manager to

01:11:27.920 --> 01:11:31.619
do it for you. Stop using .setup, for instance.

01:11:35.530 --> 01:11:38.850
But yeah, so Evgeny wrote this. This is based

01:11:38.850 --> 01:11:41.829
on his mini .debs package manager. I think it's

01:11:41.829 --> 01:11:44.109
a little bit simplified. I wish I could give

01:11:44.109 --> 01:11:47.909
you a demo, but I don't use it right now. So

01:11:47.909 --> 01:11:50.750
I can't actually give you a demo using it. Yeah,

01:11:50.850 --> 01:11:53.449
maybe when it's released and it's part of Neobim.

01:11:53.510 --> 01:11:55.989
It's in beta, it seems, right now, correct? Yeah.

01:11:56.590 --> 01:12:03.750
Okay. Yeah. Okay. Yeah. No worries. Thanks. Talking

01:12:03.750 --> 01:12:06.520
about... Extensibility, NeoVim extensibility.

01:12:06.960 --> 01:12:10.220
I mentioned Prat, you know, I had the call with

01:12:10.220 --> 01:12:14.100
him yesterday. He's a huge representative of

01:12:14.100 --> 01:12:18.159
the Emacs community, right? And Emacs users like

01:12:18.159 --> 01:12:22.600
extending their, what is Emacs, operating system

01:12:22.600 --> 01:12:25.800
or whatever it is, right? To do basically everything

01:12:25.800 --> 01:12:31.779
for them. And I like that about NeoVim because...

01:12:32.399 --> 01:12:35.520
images is a big part of my workflow. For my blog

01:12:35.520 --> 01:12:38.659
post, I like pasting images, you know, from my

01:12:38.659 --> 01:12:41.579
clipboard into NuVim. I like converting them

01:12:41.579 --> 01:12:44.359
into different formats. AVIF is the format that

01:12:44.359 --> 01:12:46.899
I choose, but I can convert them to any other

01:12:46.899 --> 01:12:50.100
format using ImageMagick, a plugin, you know,

01:12:50.140 --> 01:12:54.619
that I use, ImageClip .nvim. And I can view images

01:12:54.619 --> 01:13:01.100
in NuVim as well now. So I really like that extensibility.

01:13:02.279 --> 01:13:05.460
I have heard that there's a few folks that are

01:13:05.460 --> 01:13:10.000
not into that because it seems like Neovim is

01:13:10.000 --> 01:13:13.720
becoming into Emacs or something like that. What

01:13:13.720 --> 01:13:15.479
are your thoughts there? Anything you want to

01:13:15.479 --> 01:13:20.560
share? I think that's a compliment. I think Emacs'

01:13:20.680 --> 01:13:22.979
superpower has always been how acceptable it

01:13:22.979 --> 01:13:26.659
is and how powerful it is as a platform. If Neovim

01:13:26.659 --> 01:13:28.600
is becoming that, then that's a good thing as

01:13:28.600 --> 01:13:30.560
far as I'm concerned. I mean, it's up to the

01:13:30.560 --> 01:13:33.520
user, right? When you install NeoVim from your

01:13:33.520 --> 01:13:35.659
package manager or something, it automatically

01:13:35.659 --> 01:13:37.819
downloads and installs all this other stuff.

01:13:38.640 --> 01:13:40.539
It's only there if you choose to install it.

01:13:40.819 --> 01:13:44.039
So I don't really take that as a serious criticism.

01:13:44.239 --> 01:13:46.939
I guess someone would say that. Because NeoVim

01:13:46.939 --> 01:13:50.300
at its base is still very minimal. It has a lot

01:13:50.300 --> 01:13:52.479
of stuff that Vim doesn't have. So there are

01:13:52.479 --> 01:13:54.979
some Vim people that don't like NeoVim because

01:13:54.979 --> 01:13:56.899
they think even out of the box it does too much.

01:13:57.239 --> 01:13:59.279
But that's fine. Not everyone has to like everything.

01:14:01.330 --> 01:14:04.890
We have a certain design philosophy and idea

01:14:04.890 --> 01:14:06.170
of what we want to get them to be, and that's

01:14:06.170 --> 01:14:08.210
not for everyone. And that's totally fine. We

01:14:08.210 --> 01:14:10.810
don't have to appease the whole world. But if

01:14:10.810 --> 01:14:16.109
that's you, then feel free to stick to Vim or

01:14:16.109 --> 01:14:19.229
Ed or whatever it is that you use. But I think

01:14:19.229 --> 01:14:21.850
a lot of people do find the extensibility to

01:14:21.850 --> 01:14:24.710
be really powerful. I'm one of them, for sure.

01:14:25.869 --> 01:14:29.189
Okay. Okay, awesome. Now, also in the previous

01:14:29.189 --> 01:14:31.609
conversation, you mentioned about auto -updates.

01:14:32.029 --> 01:14:34.550
So you're not into auto -updating your plugins

01:14:34.550 --> 01:14:37.909
during startup, right? No, I'm definitely not.

01:14:38.050 --> 01:14:41.869
I definitely don't do that. I do update NeoVim

01:14:41.869 --> 01:14:44.369
almost every day. Like, it's one of the things

01:14:44.369 --> 01:14:46.829
that I do in the morning. Like, when I'm logging

01:14:46.829 --> 01:14:48.609
into my work computer, I'll update NeoVim basically

01:14:48.609 --> 01:14:50.729
every day. But that's because I'm, like, as a

01:14:50.729 --> 01:14:53.789
maintainer, right? Like, that's part of, I can

01:14:53.789 --> 01:14:56.050
think of that as part of my maintainer duties.

01:14:57.619 --> 01:15:04.319
finding issues so I can fix them. But I don't

01:15:04.319 --> 01:15:05.960
necessarily advise that for... Actually, I would

01:15:05.960 --> 01:15:07.800
advise against doing that for most people. Unless

01:15:07.800 --> 01:15:09.699
you actively want to be involved in the development

01:15:09.699 --> 01:15:14.079
process, I would say do not daily drive the master

01:15:14.079 --> 01:15:19.000
branch. I don't update... I hardly update my

01:15:19.000 --> 01:15:21.279
plugins ever. Actually, if I were to run this,

01:15:21.579 --> 01:15:26.880
I probably have a bajillion updates. Okay, so

01:15:26.880 --> 01:15:29.399
Stippy, I'm going to say no to all these, but

01:15:29.399 --> 01:15:35.060
all these plugins have updates. This one has

01:15:35.060 --> 01:15:44.640
87 new commits since I updated it last. So it's

01:15:44.640 --> 01:15:47.560
been a while. But no, I don't, I mean, for the

01:15:47.560 --> 01:15:51.779
same reason that people pin their dependencies

01:15:51.779 --> 01:15:56.189
in production environments, right? updating stuff

01:15:56.189 --> 01:15:59.229
every single day. This does frustrate me because

01:15:59.229 --> 01:16:01.930
you see online people complaining that NeoVM

01:16:01.930 --> 01:16:05.430
is so unstable. It breaks all the time. And a

01:16:05.430 --> 01:16:07.489
lot of times you also see these people are also

01:16:07.489 --> 01:16:11.029
updating, have dozens of plugins installed that

01:16:11.029 --> 01:16:14.210
are updating them frequently. And sometimes worse,

01:16:14.310 --> 01:16:17.949
there was a period of time where a lot of our

01:16:17.949 --> 01:16:21.260
users were daily driving the master branch. So

01:16:21.260 --> 01:16:22.840
I'm like, of course it's going to be unstable.

01:16:23.239 --> 01:16:25.399
You're asking for it to be unstable. If you're

01:16:25.399 --> 01:16:28.600
on the development branch, even if you're not,

01:16:28.680 --> 01:16:30.180
even if you're on a release, but you have a bunch

01:16:30.180 --> 01:16:31.479
of plugins and you're updating them frequently,

01:16:31.619 --> 01:16:36.779
plugins... Tag releases are not very common in

01:16:36.779 --> 01:16:39.340
the Neoven plugin ecosystem. Pretty much every

01:16:39.340 --> 01:16:41.779
plugin out there, with some exceptions, just

01:16:41.779 --> 01:16:45.159
are on head. And when you run update, you just

01:16:45.159 --> 01:16:47.340
are updating to head on all of them. And a lot

01:16:47.340 --> 01:16:51.050
of plugins try to support... NeoVim had and NeoVim

01:16:51.050 --> 01:16:54.590
releases, sometimes not successfully. So yeah,

01:16:54.630 --> 01:16:56.810
of course, if you want NeoVim to be stable, do

01:16:56.810 --> 01:16:58.250
the same thing you do with any other software

01:16:58.250 --> 01:17:01.050
you want to be stable. Pin your dependencies,

01:17:01.250 --> 01:17:04.449
pin your plugins. But I don't know, people don't

01:17:04.449 --> 01:17:09.270
want to do that. Yeah. What about like incremental

01:17:09.270 --> 01:17:11.510
updates, right? Because if you update right now,

01:17:11.550 --> 01:17:13.590
probably you're going to have a lot of changes.

01:17:13.770 --> 01:17:15.970
If you update all of your plugins, do you update

01:17:15.970 --> 01:17:18.170
one at a time or do you just, when you decide

01:17:18.170 --> 01:17:20.770
to update all of them at once and see what breaks?

01:17:22.510 --> 01:17:24.590
When I do update, I usually update them all at

01:17:24.590 --> 01:17:32.029
the same time. I don't run into issues caused

01:17:32.029 --> 01:17:36.319
by plugins very often though. And again, it's

01:17:36.319 --> 01:17:39.779
partly because I'm pretty picky about plugins

01:17:39.779 --> 01:17:42.319
I install. Like, I use Fugitive. I just saw this

01:17:42.319 --> 01:17:44.560
because it was here. Like, I trust Tim Pope.

01:17:45.100 --> 01:17:49.039
Like, Tim Pope is extraordinarily talented. I

01:17:49.039 --> 01:17:53.079
usually feel like I can update Fugitive with

01:17:53.079 --> 01:17:55.119
very little fear that something's gonna break.

01:17:58.340 --> 01:18:01.619
And Vimlet is another one that's written by Matthias,

01:18:01.619 --> 01:18:03.359
who I talked about earlier. Same thing. Like,

01:18:03.359 --> 01:18:06.500
he's... he's a new core member like i have a

01:18:06.500 --> 01:18:10.460
lot of faith and trust in his ability to write

01:18:10.460 --> 01:18:12.500
a good plugin so i'm not that i also don't have

01:18:12.500 --> 01:18:14.500
a lot of fear and then the other one is mini

01:18:14.500 --> 01:18:20.319
diamond and same with with evgeny um but usually

01:18:20.319 --> 01:18:22.100
i don't update unless i have a reason to right

01:18:22.100 --> 01:18:25.739
like right now my editor when i use it to actually

01:18:25.739 --> 01:18:31.060
write code it's fine the way it is yeah So I

01:18:31.060 --> 01:18:33.680
kind of goes against what I was saying about

01:18:33.680 --> 01:18:36.939
how I update NeoBIM every single day. So I'm

01:18:36.939 --> 01:18:40.000
kind of contradicting myself. But again, that's

01:18:40.000 --> 01:18:41.579
just because I'm involved with the development

01:18:41.579 --> 01:18:43.640
of it. If I weren't, then I wouldn't do that.

01:18:44.199 --> 01:18:48.520
Okay, yeah. I was under the impression that update

01:18:48.520 --> 01:18:51.239
your plugins because of maybe security reasons

01:18:51.239 --> 01:18:54.399
or something. I have no idea. Like the security

01:18:54.399 --> 01:18:58.279
critical updates that you get in Linux and all

01:18:58.279 --> 01:19:01.439
that stuff. But now that you guys talk about

01:19:01.439 --> 01:19:04.800
it, TJ and you, I'm like, because I update on

01:19:04.800 --> 01:19:08.380
startup, the plugins, just the plugins, right?

01:19:08.520 --> 01:19:11.079
And sometimes they have breaking changes. So

01:19:11.079 --> 01:19:14.420
if they're released, it's good. I just pin them

01:19:14.420 --> 01:19:16.500
to the previous version and I just deal with

01:19:16.500 --> 01:19:20.439
that another day, you know, when I have the time.

01:19:20.979 --> 01:19:25.920
But yeah, honestly, I don't think there's a reason

01:19:25.920 --> 01:19:30.380
then to auto -update the plugin. Because if they

01:19:30.380 --> 01:19:32.380
work, they work, right? So why would you want

01:19:32.380 --> 01:19:34.420
to update? Unless there's a feature that was

01:19:34.420 --> 01:19:37.300
developed that you're interested in, it would

01:19:37.300 --> 01:19:42.680
make sense to update then, right? Yeah. If you

01:19:42.680 --> 01:19:44.380
have a lot of plugins, then it's hard to keep

01:19:44.380 --> 01:19:46.420
track of all of them and see what features there

01:19:46.420 --> 01:19:49.960
are. So I understand why people do it. I'm just

01:19:49.960 --> 01:19:53.439
saying, my point is that you kind of have to

01:19:53.439 --> 01:19:56.140
make a trade -off, right? Either between constantly

01:19:56.140 --> 01:19:59.069
updating and getting the newest stuff. Or stability.

01:19:59.869 --> 01:20:04.029
You can't usually have it both ways. Yeah, definitely.

01:20:04.430 --> 01:20:08.270
Okay. One other point I want to make. You mentioned

01:20:08.270 --> 01:20:12.130
the security updates thing. For Linux or something,

01:20:12.270 --> 01:20:16.430
definitely. For NeoVim, I want to be really clear

01:20:16.430 --> 01:20:18.430
about this. NeoVim has basically zero concept

01:20:18.430 --> 01:20:22.470
of security with plugins. So it's very... Installing

01:20:22.470 --> 01:20:25.039
a plugin, you are installing... untrusted code

01:20:25.039 --> 01:20:27.039
that can do anything. You're going to execute

01:20:27.039 --> 01:20:30.520
code on your computer. It's not sandboxed. It

01:20:30.520 --> 01:20:32.760
can do anything. It's going to run as your user.

01:20:32.979 --> 01:20:35.340
It can read your SSH private keys and write them

01:20:35.340 --> 01:20:38.560
to a server. There's nothing stopping it from

01:20:38.560 --> 01:20:45.420
doing that. I don't know personally of any examples

01:20:45.420 --> 01:20:48.380
of people installing malware in a Vim plugin.

01:20:48.659 --> 01:20:51.859
I imagine that's not the most fruitful target

01:20:51.859 --> 01:20:55.390
for an attacker. um but that is important to

01:20:55.390 --> 01:20:58.229
remember that when it comes to security it's

01:20:58.229 --> 01:21:00.649
possible so that's another reason to be careful

01:21:00.649 --> 01:21:02.430
about what plugins you install and when do you

01:21:02.430 --> 01:21:06.010
update them makes sense yeah i trust volky you

01:21:06.010 --> 01:21:10.670
know volky is my filter so yeah if a plugin makes

01:21:10.670 --> 01:21:13.310
it to lazy vim i'm like okay so it's approved

01:21:13.310 --> 01:21:17.529
by folky i trust them so um yeah i don't install

01:21:17.529 --> 01:21:20.670
you know random plugins that i just find out

01:21:20.670 --> 01:21:25.060
there in the wild But yeah, try to keep your

01:21:25.060 --> 01:21:28.279
plugins minimal and install from people that

01:21:28.279 --> 01:21:33.020
you really trust, basically, right? That's my

01:21:33.020 --> 01:21:36.119
advice, whatever it's worth. Okay, yeah, makes

01:21:36.119 --> 01:21:38.420
sense. It won't work for everybody, but... Yeah,

01:21:38.539 --> 01:21:43.140
and why Ghosty? Moving on to something else.

01:21:43.220 --> 01:21:45.720
Why did you decide to go with Ghosty? Why did

01:21:45.720 --> 01:21:50.010
you decide to start contributing in Ghosty? Yeah,

01:21:50.010 --> 01:21:52.210
you can't talk about Nevo without talking about

01:21:52.210 --> 01:21:55.649
terminals, right? So I've used most terminals.

01:21:55.810 --> 01:21:59.829
So I started with iTerm2 on Mac OS. And then

01:21:59.829 --> 01:22:03.649
at various points, I've tried Alacrity, Giddy,

01:22:03.710 --> 01:22:10.569
Westerm. I used ST even for a little while. The

01:22:10.569 --> 01:22:12.409
only one I've never really used full -time was

01:22:12.409 --> 01:22:18.750
Foot, only because it was on Linux only. At the

01:22:18.750 --> 01:22:21.829
time that I was using Linux primarily at work,

01:22:22.090 --> 01:22:25.630
Foot didn't exist. It was like Wayland. It's

01:22:25.630 --> 01:22:28.149
not just Linux only. It's Wayland only. There

01:22:28.149 --> 01:22:31.130
was never a period where I was only using Wayland

01:22:31.130 --> 01:22:37.390
and also wouldn't use Foot. But I was using iTerm2.

01:22:37.710 --> 01:22:42.270
I like iTerm2 because it's a native Mac app.

01:22:42.310 --> 01:22:45.210
It feels like a Mac application, which I like.

01:22:45.289 --> 01:22:49.739
That's important to me. Aesthetically, the UI,

01:22:49.960 --> 01:22:51.760
the user experience, the way it works, it just

01:22:51.760 --> 01:22:53.979
feels like it's integrated. It feels like it's

01:22:53.979 --> 01:22:56.020
a... Because it is. It's like a native Mac application.

01:22:56.600 --> 01:22:59.619
No other terminal does that. Aside from Ghosty,

01:22:59.619 --> 01:23:01.279
but at the time. No other terminal does that.

01:23:01.539 --> 01:23:04.420
If you use something like Kitty, like it uses...

01:23:04.420 --> 01:23:06.720
Kitty's great, by the way. I know nothing but

01:23:06.720 --> 01:23:09.000
respect for Kitty and Wester and Lackerty. They're

01:23:09.000 --> 01:23:13.420
all great. They do different things. Kitty's

01:23:13.420 --> 01:23:17.420
tabs are not Mac OS tabs. Like, there's kitty

01:23:17.420 --> 01:23:19.659
draws its own tabs. Western draws its own tabs.

01:23:20.899 --> 01:23:24.180
Alacrity is kind of... Alacrity doesn't have

01:23:24.180 --> 01:23:26.220
any of its own stuff. It doesn't have tabs. It

01:23:26.220 --> 01:23:29.720
doesn't have any UI stuff. So it kind of feels

01:23:29.720 --> 01:23:32.920
like a native app, I guess, because it's just

01:23:32.920 --> 01:23:37.659
like a box. Alacrity is fine. I don't honestly

01:23:37.659 --> 01:23:41.000
remember why I moved back to iTerm2, but I was

01:23:41.000 --> 01:23:42.279
pretty happy with iTerm2, and that's what I was

01:23:42.279 --> 01:23:45.819
using at the time. uh and then i saw mitchell

01:23:45.819 --> 01:23:48.079
give a talk about ghosty and i was interested

01:23:48.079 --> 01:23:50.880
in ghosty because we were in zig and i've i've

01:23:50.880 --> 01:23:55.260
been following zig since 2017 or something like

01:23:55.260 --> 01:23:58.260
that 2019. so for a long time i really like zig

01:23:58.260 --> 01:24:00.260
i'm a big fan of the language i think it has

01:24:00.260 --> 01:24:02.979
a bright future i've done i've written some stuff

01:24:02.979 --> 01:24:06.960
in it myself um and when i saw that he was writing

01:24:06.960 --> 01:24:10.800
this term limelighter in zig that also really

01:24:10.800 --> 01:24:13.739
cared about being cross -platform and feeling

01:24:13.739 --> 01:24:16.380
like a native app on each of its different target

01:24:16.380 --> 01:24:18.579
platforms, that to me was like, oh, wow, that

01:24:18.579 --> 01:24:22.300
sounds great. So that was when I first learned

01:24:22.300 --> 01:24:25.199
about it and became interested in it and joined

01:24:25.199 --> 01:24:27.399
the Discord shortly after. And like I said earlier,

01:24:28.060 --> 01:24:34.380
I begged for an invite. And then why I stayed

01:24:34.380 --> 01:24:39.800
with it, I think before GoSee, I never really

01:24:39.800 --> 01:24:46.970
contributed to A terminal emulator. Yeah, so

01:24:46.970 --> 01:24:50.149
that was kind of new for me. Because I knew Zig,

01:24:50.390 --> 01:24:54.909
it was approachable to me. I wasn't scared of

01:24:54.909 --> 01:24:58.670
digging into it. And there were things that weren't

01:24:58.670 --> 01:25:01.170
implemented. I also had to learn Swift because

01:25:01.170 --> 01:25:04.109
a lot of the stuff that I contributed were UI

01:25:04.109 --> 01:25:07.449
changes and all that was and still is in Swift

01:25:07.449 --> 01:25:10.699
because it's all done in a native Mac app. So

01:25:10.699 --> 01:25:12.079
I had to learn Swift to add some stuff, which

01:25:12.079 --> 01:25:13.600
was kind of interesting because that was kind

01:25:13.600 --> 01:25:15.819
of fun to learn something new. But yeah, that

01:25:15.819 --> 01:25:18.260
was what kept me around was being able to contribute

01:25:18.260 --> 01:25:20.960
to it, to the project in meaningful ways, right?

01:25:21.100 --> 01:25:23.119
Not just fixing typos or something, but actually

01:25:23.119 --> 01:25:28.279
adding real features. And then having both sides

01:25:28.279 --> 01:25:30.520
of the puzzle, or not the puzzle, but being able

01:25:30.520 --> 01:25:34.060
to implement a feature in Ghosty and then use

01:25:34.060 --> 01:25:37.039
it and test it in NeoVim was intoxicating, right?

01:25:37.119 --> 01:25:39.609
It was just so fun. uh to be able to be on both

01:25:39.609 --> 01:25:44.850
sides so um that was that was also the reason

01:25:44.850 --> 01:25:48.310
why i um kept kept going to contribute stuff

01:25:48.310 --> 01:25:51.409
mental credit too i think mitchell did a really

01:25:51.409 --> 01:25:53.590
good job of being open to contributors and creating

01:25:53.590 --> 01:25:55.630
a really healthy environment especially early

01:25:55.630 --> 01:26:00.390
on um so i don't know just made it easy made

01:26:00.390 --> 01:26:06.359
it easy to contribute and stick around um yeah

01:26:06.359 --> 01:26:08.560
i i wrote a i wrote a blog post about ghosty

01:26:08.560 --> 01:26:12.579
being native because i mentioned that's really

01:26:12.579 --> 01:26:15.640
important to me like i care about that and but

01:26:15.640 --> 01:26:18.000
this is back when ghosty was still in beta there's

01:26:18.000 --> 01:26:20.420
all this hype around it which i personally hated

01:26:20.420 --> 01:26:23.260
i hated all the hype like it was people were

01:26:23.260 --> 01:26:25.819
like people were like debasing themselves to

01:26:25.819 --> 01:26:29.170
count me in i created a couple videos Which,

01:26:29.170 --> 01:26:31.590
I mean, I definitely, you know, I joined the

01:26:31.590 --> 01:26:33.789
Discord and asked for an invite, so I'm guilty

01:26:33.789 --> 01:26:37.550
myself, right? But the hype definitely kind of

01:26:37.550 --> 01:26:40.930
grew out of control. But when people were talking

01:26:40.930 --> 01:26:43.869
about why people are so excited about Ghostie,

01:26:43.949 --> 01:26:47.409
they would talk about performance, or they would

01:26:47.409 --> 01:26:50.010
talk about font rendering or ligatures, which

01:26:50.010 --> 01:26:53.010
is, I said that because, like, I don't care about

01:26:53.010 --> 01:26:55.350
that at all. I don't care about ligatures. I

01:26:55.350 --> 01:26:57.960
don't really care about font rendering. So it

01:26:57.960 --> 01:26:59.880
was just funny to see people care so much about

01:26:59.880 --> 01:27:03.500
the stuff that, to me, was not important. But

01:27:03.500 --> 01:27:05.539
what was important to me and what I thought goes

01:27:05.539 --> 01:27:07.899
to the most distinguishing feature was that it

01:27:07.899 --> 01:27:12.520
was native, both on macOS and on GTK. It uses

01:27:12.520 --> 01:27:15.779
native GTK APIs, and it feels like, aside from

01:27:15.779 --> 01:27:18.739
GNOME Terminal or Texas or however you say it,

01:27:19.060 --> 01:27:23.840
it's like the most GTK terminal there is. which

01:27:23.840 --> 01:27:26.060
obviously I know on Linux, not everyone uses

01:27:26.060 --> 01:27:28.779
GTK, not everyone likes GTK, but if you're using

01:27:28.779 --> 01:27:33.119
GNOME, Ghosty feels like it belongs there, which

01:27:33.119 --> 01:27:36.840
is awesome. I think it's awesome. And so I wrote

01:27:36.840 --> 01:27:39.300
this about why I cared about that, what that

01:27:39.300 --> 01:27:43.340
even means. And I think it got some attention,

01:27:43.579 --> 01:27:45.119
so hopefully people understood what that meant.

01:27:45.279 --> 01:27:48.939
But that is the reason why I continue to use

01:27:48.939 --> 01:27:50.760
it, and I'm very happy with it, and I don't anticipate.

01:27:51.760 --> 01:27:56.560
not using it because of that native integration

01:27:56.560 --> 01:28:01.359
and as well as how fast it is. It implements

01:28:01.359 --> 01:28:05.460
a lot of cutting edge. So compared to iTerm,

01:28:05.539 --> 01:28:08.039
iTerm is also native. iTerm also is really good

01:28:08.039 --> 01:28:09.680
about implementing new features. The author of

01:28:09.680 --> 01:28:13.260
iTerm is a guy named George Nachman, I think

01:28:13.260 --> 01:28:17.069
is his last name. And he also does a lot of new

01:28:17.069 --> 01:28:19.369
stuff, and he works with Neon sometimes. And

01:28:19.369 --> 01:28:22.710
so iTerm also has some cutting -edge stuff. But

01:28:22.710 --> 01:28:25.050
iTerm is not fast, unfortunately. It's pretty

01:28:25.050 --> 01:28:29.430
slow. So Ghosty kind of beats iTerm for me there

01:28:29.430 --> 01:28:31.329
in that it has the other two features and also

01:28:31.329 --> 01:28:34.189
is a lot faster. Did you like iTerm's configuration,

01:28:34.550 --> 01:28:36.649
the way of configuring it? Maybe it's a skill

01:28:36.649 --> 01:28:39.180
issue on my side, but... I had to go into the

01:28:39.180 --> 01:28:41.899
GUI and do stuff in the GUI, and I didn't like

01:28:41.899 --> 01:28:44.539
that. Yeah, I was in the GUI. Yeah, so I never

01:28:44.539 --> 01:28:47.720
managed my iTerm config in my .files or anything.

01:28:48.399 --> 01:28:52.819
So I'd also prefer that about ghosties. It's

01:28:52.819 --> 01:28:55.359
text -based config. Although, I know that there

01:28:55.359 --> 01:29:01.800
are plans to add a GUI config editor to ghostie.

01:29:01.800 --> 01:29:04.119
It just doesn't exist yet. My ghostie config

01:29:04.119 --> 01:29:05.779
is also pretty simple. I don't have a lot in

01:29:05.779 --> 01:29:09.199
there. OK. But you can still, even if the GUI

01:29:09.199 --> 01:29:13.500
comes along, you can still configure it via the

01:29:13.500 --> 01:29:16.000
config file, right? Yeah, that'll always be an

01:29:16.000 --> 01:29:18.899
option. I think that's one reason why the GUI

01:29:18.899 --> 01:29:20.859
hasn't been done yet. It's not that it's hard

01:29:20.859 --> 01:29:23.340
to write the GUI. It's that it's hard to design

01:29:23.340 --> 01:29:27.399
around it. How do we support a GUI and also support

01:29:27.399 --> 01:29:29.880
having a version -controlled file that people

01:29:29.880 --> 01:29:33.359
can manage? And is the GUI actually needed? Like,

01:29:33.359 --> 01:29:36.520
being honest. No, no, it's definitely not needed.

01:29:36.989 --> 01:29:40.289
It's just some people want it. Oh. Like you won't

01:29:40.289 --> 01:29:42.970
ever need to use it if you don't want to. Okay.

01:29:42.989 --> 01:29:45.550
Yeah, that was my question. Like why a GUI? But

01:29:45.550 --> 01:29:48.550
I guess users want it basically, right? So that's

01:29:48.550 --> 01:29:51.729
why. Yeah. Yeah. And the one thing Ghosty doesn't

01:29:51.729 --> 01:29:57.010
have that I miss, that I wish it had, is the

01:29:57.010 --> 01:30:00.750
search feature. And this is like the most requested

01:30:00.750 --> 01:30:03.130
feature. It has like the most upvotes on GitHub.

01:30:03.229 --> 01:30:07.149
It's one of the oldest open issues. But it's

01:30:07.149 --> 01:30:10.069
also like, it's not, it's absolutely non -trivial

01:30:10.069 --> 01:30:12.569
to implement. So it's basically, Mitchell has

01:30:12.569 --> 01:30:14.569
basically said that he wants to do it. What do

01:30:14.569 --> 01:30:17.430
you mean? The search feature, what is it? Like

01:30:17.430 --> 01:30:19.069
being able to, like if I have all this text on

01:30:19.069 --> 01:30:24.189
my screen, let me just click. Oh. I have all

01:30:24.189 --> 01:30:26.409
this text and I want to press command F and search

01:30:26.409 --> 01:30:28.270
for text on the screen. Oh, I see. I can't do

01:30:28.270 --> 01:30:31.369
that. So it's not available. Okay. So what I

01:30:31.369 --> 01:30:33.810
do now is Ghosty does have a feature to write.

01:30:34.199 --> 01:30:37.220
the screen to a file so i open that in the oven

01:30:37.220 --> 01:30:40.020
and then i can search in here so that i mean

01:30:40.020 --> 01:30:43.159
that kind of works it works well enough it's

01:30:43.159 --> 01:30:46.880
not perfect but what are your thoughts on your

01:30:46.880 --> 01:30:49.340
your thoughts on tmux by the way because i don't

01:30:49.340 --> 01:30:52.500
miss that because i I use tmux, and I get it.

01:30:53.000 --> 01:30:56.100
It's like using another terminal inside the terminal.

01:30:56.380 --> 01:30:58.640
There's a lot of people against tmux. What are

01:30:58.640 --> 01:31:01.439
your thoughts personally on tmux? I don't have

01:31:01.439 --> 01:31:03.800
anything against tmux. I used tmux for a long

01:31:03.800 --> 01:31:08.060
time. My tmux config file is pretty fancy, actually.

01:31:08.220 --> 01:31:13.659
I have a ton of stuff in here. I use tmux. Actually,

01:31:13.760 --> 01:31:15.640
it's funny. Talking about that history of terminals,

01:31:15.739 --> 01:31:17.819
I didn't talk about tmux. For a long time, I

01:31:17.819 --> 01:31:19.779
didn't actually care what terminal I used because

01:31:19.779 --> 01:31:22.859
I was like, I just use Tmux. So whether it's

01:31:22.859 --> 01:31:25.039
Alacrity or Kitty or whatever, it doesn't really

01:31:25.039 --> 01:31:28.920
matter. I actually remember now, that was the

01:31:28.920 --> 01:31:31.100
reason I switched to iTerm is because iTerm supported

01:31:31.100 --> 01:31:36.920
features that didn't work. I think it was the...

01:31:36.920 --> 01:31:38.960
That's what it was. I'm remembering now. It was

01:31:38.960 --> 01:31:42.779
the Kitty Keyword Protocol. It has a bunch of

01:31:42.779 --> 01:31:44.279
different names, but the Kitty Keyword Protocol

01:31:44.279 --> 01:31:47.460
or CSIU or whatever. For anyone who doesn't know,

01:31:47.640 --> 01:31:50.500
I'll do a real brief terminal history lesson.

01:31:50.720 --> 01:31:55.659
But the way that historically keys, like when

01:31:55.659 --> 01:31:58.579
you press a key that's communicated to your terminal,

01:31:58.720 --> 01:32:02.960
it's all in ASCII, right? And if you look at

01:32:02.960 --> 01:32:07.720
the way that control characters are sent, it's

01:32:07.720 --> 01:32:10.800
like if you press control, like, okay, so let's

01:32:10.800 --> 01:32:15.119
look at the ASCII table here. I is 49, ASCII

01:32:15.119 --> 01:32:19.109
49. And when you press, or I should still get

01:32:19.109 --> 01:32:24.430
lowercase i, I think. Anyway, the point is that

01:32:24.430 --> 01:32:27.090
when you press control and i, that gets sent

01:32:27.090 --> 01:32:30.149
as a different character, the same as tab. So

01:32:30.149 --> 01:32:32.430
you can see this even today in Neva. If I press

01:32:32.430 --> 01:32:35.329
tab, I see, I don't know if you can see that,

01:32:35.470 --> 01:32:40.130
but it says control i. I press tab. Another one

01:32:40.130 --> 01:32:43.289
is enter. If I press enter, you see control m.

01:32:44.619 --> 01:32:46.800
So this all has to do with historical baggage,

01:32:46.920 --> 01:32:49.220
right? The way that certain keys were represented

01:32:49.220 --> 01:32:52.539
when you hold the control key. So for a long,

01:32:52.640 --> 01:32:55.439
long, long time, it was the case that applications

01:32:55.439 --> 01:32:57.420
in the terminal couldn't distinguish control

01:32:57.420 --> 01:33:02.199
I from tab or control M from enter. And they

01:33:02.199 --> 01:33:04.520
couldn't see control and number keys. So you

01:33:04.520 --> 01:33:06.319
couldn't press like control one or control two.

01:33:06.460 --> 01:33:09.840
So in an application like Vim, those keys are

01:33:09.840 --> 01:33:13.170
just not available to be mapped. So there are

01:33:13.170 --> 01:33:14.750
a couple of different attempts at solving this,

01:33:14.890 --> 01:33:19.590
and the one that has stuck and has been implemented

01:33:19.590 --> 01:33:23.210
pretty extensively now is the one proposed by

01:33:23.210 --> 01:33:26.729
the kitty of COVID. So it's today called the

01:33:26.729 --> 01:33:28.869
Kitty Keyword Protocol, although it's sometimes

01:33:28.869 --> 01:33:32.430
also called CSIU for other historical reasons.

01:33:32.949 --> 01:33:36.310
But when I learned about this feature, I termed

01:33:36.310 --> 01:33:38.310
support of it, support of the subset of it anyway,

01:33:38.470 --> 01:33:41.690
and I wanted to use it, but TMUX didn't. Tmux

01:33:41.690 --> 01:33:45.229
kind of supports, halfway supports it, but not

01:33:45.229 --> 01:33:48.569
in a way that really works. At least at the time.

01:33:48.710 --> 01:33:51.550
Things might have changed. So I always relied

01:33:51.550 --> 01:33:54.770
on Tmux to do things like having different sessions,

01:33:54.850 --> 01:33:57.329
different projects, window management, having

01:33:57.329 --> 01:33:59.210
a persistent session where I could close my journal

01:33:59.210 --> 01:34:00.550
and reopen it and pick it right where I left

01:34:00.550 --> 01:34:04.130
off. I loved Tmux. So switching to Tmux -less

01:34:04.130 --> 01:34:07.970
iTurn was tough for me. And I switched to iTurn

01:34:07.970 --> 01:34:09.390
both because it had that feature and because

01:34:09.390 --> 01:34:14.289
it had tabs. in splits which um i needed to replace

01:34:14.289 --> 01:34:18.689
tmux so ghosty also has this so i'm if you know

01:34:18.689 --> 01:34:22.770
i i can i can make tabs and splits in ghosty

01:34:22.770 --> 01:34:26.310
but if i didn't have that i would still use tmux

01:34:26.310 --> 01:34:28.729
i do still use tmux whenever i'm like ssh into

01:34:28.729 --> 01:34:32.229
a server or something though super valuable there

01:34:32.229 --> 01:34:35.130
but no i don't have anything against tmux i understand

01:34:35.130 --> 01:34:39.720
the criticisms of it about how it um I mean,

01:34:39.760 --> 01:34:42.560
I can speak from experience, right? Like working

01:34:42.560 --> 01:34:45.460
on Neobim, I have users say like, hey, this doesn't

01:34:45.460 --> 01:34:47.720
work. I'm using Tmux. I'm like, okay, we'd like

01:34:47.720 --> 01:34:50.100
to do a workaround for Tmux or I have to explain

01:34:50.100 --> 01:34:52.560
why it doesn't work in Tmux because, right? Like

01:34:52.560 --> 01:34:56.220
it's also for most users, most of our users like

01:34:56.220 --> 01:34:58.659
don't, like the terminal, the concept of terminals

01:34:58.659 --> 01:35:02.579
is really confusing. It's not at all clear, right?

01:35:02.659 --> 01:35:05.079
Like you talk about TTYs and PTYs and like most

01:35:05.079 --> 01:35:06.600
people are like their eyes glaze over. They have

01:35:06.600 --> 01:35:08.510
no idea what that means. so like they don't really

01:35:08.510 --> 01:35:11.470
understand like when something goes wrong is

01:35:11.470 --> 01:35:14.109
the problem with the shell is it with tmux is

01:35:14.109 --> 01:35:15.630
it with the terminal emulator is it with neodym

01:35:15.630 --> 01:35:18.590
right like it could be any of this and for someone

01:35:18.590 --> 01:35:20.149
who spends a lot of time working on this stuff

01:35:20.149 --> 01:35:23.189
i can usually understand what's going wrong where

01:35:23.189 --> 01:35:26.390
but your average user doesn't know that uh and

01:35:26.390 --> 01:35:29.590
and tmux kind of introduces another layer into

01:35:29.590 --> 01:35:32.470
that or something in the middle yeah yeah i remember

01:35:32.470 --> 01:35:36.029
having That issue with Tmux. I wanted to send

01:35:36.029 --> 01:35:39.869
control enter because in Emacs, I was doing another

01:35:39.869 --> 01:35:43.329
video with someone else and he pressed control

01:35:43.329 --> 01:35:47.529
enter and that created another heading, a markdown,

01:35:47.630 --> 01:35:49.909
well, an org heading below the heading that he

01:35:49.909 --> 01:35:52.329
had. And I was like, I want to do that, right?

01:35:52.850 --> 01:35:56.609
So control enter. But I use Tmux. I don't remember.

01:35:56.890 --> 01:35:58.989
I have it documented somewhere, you know, but

01:35:58.989 --> 01:36:03.569
ghosty. Tmux and NeoVim had to play nicely together

01:36:03.569 --> 01:36:07.210
so that my control enter made it all the way

01:36:07.210 --> 01:36:13.529
to NeoVim through Tmux, right? It's an additional

01:36:13.529 --> 01:36:16.649
layer. It works today in most cases. Most terminals

01:36:16.649 --> 01:36:21.430
today support the KDE Keyword Protocol. Most

01:36:21.430 --> 01:36:24.510
interactive terminal applications today support

01:36:24.510 --> 01:36:31.000
it. Even Vim now supports it. So it's mostly

01:36:31.000 --> 01:36:33.399
a solved problem today, but that was an issue

01:36:33.399 --> 01:36:38.979
for a long time. Okay, okay. Now, you also mentioned

01:36:38.979 --> 01:36:42.060
other editors. You said, what are your thoughts

01:36:42.060 --> 01:36:44.619
on this other one, Cursor? Have you tried Cursor?

01:36:44.659 --> 01:36:47.479
Any experience with it? No, I haven't tried it.

01:36:47.720 --> 01:36:51.020
I've been hesitant to try any of the AI stuff.

01:36:51.420 --> 01:36:57.189
Yeah, what are your thoughts on AI? I don't know.

01:36:57.229 --> 01:37:04.470
I'm skeptical. Slightly pessimistic. I guess

01:37:04.470 --> 01:37:10.250
outside of the world of software engineering,

01:37:10.529 --> 01:37:12.649
I'm a little bit more pessimistic in the sense

01:37:12.649 --> 01:37:16.090
that I think it will be and already is being

01:37:16.090 --> 01:37:18.710
used to just inundate the world with low -effort

01:37:18.710 --> 01:37:22.489
garbage and misinformation and trash and slop,

01:37:22.710 --> 01:37:25.010
right, is the new word for it. It's happening

01:37:25.010 --> 01:37:28.130
in music. It's happening in digital art. It's

01:37:28.130 --> 01:37:29.909
happening in videos. It's happening in text.

01:37:31.750 --> 01:37:37.270
It feels like we are making this trade -off where

01:37:37.270 --> 01:37:41.109
people are trading, having to use their brains,

01:37:41.310 --> 01:37:43.949
which I get it. Using your brain is really hard

01:37:43.949 --> 01:37:46.470
work. It doesn't always feel good. But in exchange,

01:37:46.590 --> 01:37:49.829
we're losing a lot of valuable output from that.

01:37:49.989 --> 01:37:52.529
And so I'm generally pretty negative about it.

01:37:53.490 --> 01:37:56.050
In the context of software engineering, I'm a

01:37:56.050 --> 01:38:00.510
little bit more open -minded, I guess. I'll say

01:38:00.510 --> 01:38:04.710
thus far, my use of AI tools has been strictly

01:38:04.710 --> 01:38:11.949
in the web UI chat prompts. So I don't use it

01:38:11.949 --> 01:38:14.229
at all for personal stuff. If I'm hacking on

01:38:14.229 --> 01:38:17.329
a side project or something, outside of for a

01:38:17.329 --> 01:38:20.369
joke or for a meme or just to see out of curiosity.

01:38:21.069 --> 01:38:22.810
But I don't actually use it to actually do to

01:38:22.810 --> 01:38:25.210
do anything for fun because my my my thinking

01:38:25.210 --> 01:38:28.750
there is like I enjoy programming like when I'm

01:38:28.750 --> 01:38:31.189
doing it for fun. It's because the whole the

01:38:31.189 --> 01:38:33.710
the writing the code, thinking about the problem,

01:38:33.850 --> 01:38:36.010
how do I how do I solve the problem in code?

01:38:36.189 --> 01:38:38.270
How do I write the code that solves the problem

01:38:38.270 --> 01:38:41.649
in a way that is efficient and fast and easy

01:38:41.649 --> 01:38:45.090
to read and and just satisfying to look at is

01:38:45.090 --> 01:38:48.000
all part of the puzzle. And it's part of. the

01:38:48.000 --> 01:38:51.300
fun. Solving that problem is why I'm doing it.

01:38:51.880 --> 01:38:53.800
If I didn't enjoy doing that, I wouldn't be doing

01:38:53.800 --> 01:38:55.500
it in the first place. So why would I offload

01:38:55.500 --> 01:38:59.319
that to AI? That's how I feel about there. I

01:38:59.319 --> 01:39:02.159
talked to a guy recently that was much more enthusiastic

01:39:02.159 --> 01:39:05.460
about AI. And I understand where our disconnect

01:39:05.460 --> 01:39:08.340
was. Because for him, the fun thing is getting

01:39:08.340 --> 01:39:12.220
his projects up. He wants to spin up a server

01:39:12.220 --> 01:39:14.060
that does X, Y, and Z so he can build this other

01:39:14.060 --> 01:39:17.739
thing. like for him the coding is this nuisance

01:39:17.739 --> 01:39:20.319
that he's trying to get around whereas for me

01:39:20.319 --> 01:39:23.680
it's like when i'm coding like it's for fun uh

01:39:23.680 --> 01:39:26.220
so i understand why like having this tool that

01:39:26.220 --> 01:39:27.760
does the coding for him because he doesn't like

01:39:27.760 --> 01:39:30.119
to do it i understand why he's why he likes it

01:39:30.119 --> 01:39:33.939
uh but for for personal stuff i haven't used

01:39:33.939 --> 01:39:37.180
it at all at work i use it a little bit we have

01:39:37.180 --> 01:39:40.819
like gemini at work and i've used the um the

01:39:40.819 --> 01:39:42.960
web Just the web chat thing. But even there,

01:39:43.020 --> 01:39:44.520
I basically use it in the same way that I would

01:39:44.520 --> 01:39:50.079
use Stack Overflow. And I found that the more

01:39:50.079 --> 01:39:52.739
domain expertise I have, either in a language

01:39:52.739 --> 01:39:54.699
or in a particular problem, the less useful I

01:39:54.699 --> 01:39:58.060
find AI. I find it pretty useful, actually, when

01:39:58.060 --> 01:40:01.279
I'm writing in a language I don't know. So I've

01:40:01.279 --> 01:40:03.779
never written TypeScript until I started at Cloudflare.

01:40:04.039 --> 01:40:06.420
And I now write a lot of TypeScript. And I still

01:40:06.420 --> 01:40:09.399
have questions like, how do I do this in TypeScript,

01:40:09.500 --> 01:40:11.640
right? And so I'll just ask Gemini, literally,

01:40:12.020 --> 01:40:13.779
how do I do this in TypeScript? And it's great

01:40:13.779 --> 01:40:15.859
in TypeScript because there's literally billions

01:40:15.859 --> 01:40:17.439
of lines of TypeScript on the internet that it's

01:40:17.439 --> 01:40:22.000
trained on. So it's great at that. How do you

01:40:22.000 --> 01:40:28.239
know, though, that it's great? I try it and it

01:40:28.239 --> 01:40:32.340
works. And sometimes, if I'm skeptical of the

01:40:32.340 --> 01:40:35.060
answer it gives me, which I usually am, I'll

01:40:35.060 --> 01:40:38.979
cross -reference it to a documentation or something.

01:40:39.640 --> 01:40:42.899
But usually it's like a syntax question. I want

01:40:42.899 --> 01:40:45.680
to write some type that has this property. How

01:40:45.680 --> 01:40:47.859
would I do that? And it gives it to me. And I'll

01:40:47.859 --> 01:40:50.619
try it. And if it doesn't compile, then it doesn't

01:40:50.619 --> 01:40:54.939
work. And that has happened. I was trying to

01:40:54.939 --> 01:40:56.640
solve some problem in TypeScript recently. And

01:40:56.640 --> 01:40:58.840
I was thinking about it. And I was trying. I

01:40:58.840 --> 01:41:01.079
was like, there's got to be a better way to do

01:41:01.079 --> 01:41:03.899
this. And so I went to Gemini and asked. And

01:41:03.899 --> 01:41:05.729
it gave me an answer that was wrong. I knew it

01:41:05.729 --> 01:41:07.510
was wrong. Even before I tried it, I could see

01:41:07.510 --> 01:41:09.390
that it was wrong. And I told it, and this is

01:41:09.390 --> 01:41:11.670
like classic LLM, right? I told it it was wrong

01:41:11.670 --> 01:41:13.350
and said, oh, you're right. I'm sorry about that.

01:41:13.390 --> 01:41:15.390
And it gave me a new answer. That was still wrong.

01:41:16.250 --> 01:41:17.949
And this wasn't even like a particularly hard

01:41:17.949 --> 01:41:19.890
problem. This is like a leet code style question.

01:41:20.510 --> 01:41:22.909
And I was like, I have experiences like that

01:41:22.909 --> 01:41:25.590
all the time where I'm just like, it's just frustrating.

01:41:26.529 --> 01:41:28.510
It's just like more waste of my time, more than

01:41:28.510 --> 01:41:33.500
it helps me. We, I do. I do know some people

01:41:33.500 --> 01:41:37.979
that I really respect that really like the agent

01:41:37.979 --> 01:41:42.180
-style tools, like Cloud Code or something. And

01:41:42.180 --> 01:41:44.619
they speak really highly of it. They use them

01:41:44.619 --> 01:41:49.680
a lot. I haven't tried those myself. We are starting

01:41:49.680 --> 01:41:51.939
a pilot at work where we can start experimenting

01:41:51.939 --> 01:41:55.779
with that. Maybe I'll try it soon. But I don't

01:41:55.779 --> 01:41:58.659
know. I, this is an area where I feel like a

01:41:58.659 --> 01:42:00.380
cranky old man, or I'm just like, I just want

01:42:00.380 --> 01:42:02.659
to be set in my ways. Like I know how to do my

01:42:02.659 --> 01:42:07.739
job today. And I'm like, I'm like, everything's

01:42:07.739 --> 01:42:10.119
changing or Shakespeare's like clouds. Right.

01:42:11.920 --> 01:42:14.060
And I don't know, but I also find the discourse

01:42:14.060 --> 01:42:16.380
around it to be extremely exhausting. Right.

01:42:16.420 --> 01:42:19.210
Like the number of times I've read that. either

01:42:19.210 --> 01:42:20.949
you have to use it now or you'll be left behind

01:42:20.949 --> 01:42:24.130
right is I just I just roll my eyes at that now

01:42:24.130 --> 01:42:26.149
that there are people that are like oh it's it's

01:42:26.149 --> 01:42:27.710
here to stay so you got to figure it out you

01:42:27.710 --> 01:42:29.909
got to start using it I'm like okay I don't know

01:42:29.909 --> 01:42:31.149
I'm kind of like I'm just going to keep doing

01:42:31.149 --> 01:42:33.930
my job the day that all the AI people start like

01:42:33.930 --> 01:42:37.529
outpacing me to the point where like I'm being

01:42:37.529 --> 01:42:40.529
left behind I'm like, I'll notice it. And then

01:42:40.529 --> 01:42:42.210
it's like, okay, I guess I better pick it up.

01:42:42.289 --> 01:42:45.770
But that day has not come yet. I'm still extremely

01:42:45.770 --> 01:42:47.909
productive and very good at my job. I think so

01:42:47.909 --> 01:42:51.550
anyway. Doing it the old -fashioned way. So I

01:42:51.550 --> 01:42:54.510
haven't felt extremely motivated to change anything

01:42:54.510 --> 01:42:57.609
there. But we'll see. I'm trying to keep an open

01:42:57.609 --> 01:43:00.069
mind about it. Okay. At least in the context

01:43:00.069 --> 01:43:03.649
of coding stuff. Okay. And no experience with

01:43:03.649 --> 01:43:06.449
Cursor. That's the one that I'm kind of curious

01:43:06.449 --> 01:43:09.539
about. But again, I think about leaving the terminal

01:43:09.539 --> 01:43:12.300
and it's going to be like a completely new environment,

01:43:12.560 --> 01:43:15.140
similar to what happened with Obsidian. I'm like,

01:43:15.279 --> 01:43:19.079
I'm not going to enjoy it. I think, I don't know.

01:43:20.000 --> 01:43:22.680
I'm going to feel a disconnect, I think, you

01:43:22.680 --> 01:43:26.779
know. Yeah. I do know Cloud Code is like a terminal

01:43:26.779 --> 01:43:28.619
based one. So if I were to try one, it's probably

01:43:28.619 --> 01:43:31.220
the one I would do. I haven't tried it, but I

01:43:31.220 --> 01:43:33.380
will. I could have, I could have, if you could

01:43:33.380 --> 01:43:35.829
even like have Neoman running and then. have

01:43:35.829 --> 01:43:38.010
it in your Neovan terminal, right? Like, I don't

01:43:38.010 --> 01:43:40.529
know. I have no idea how you'd use cloud code.

01:43:41.090 --> 01:43:43.489
Cloud code, whatever. How do I write? How do

01:43:43.489 --> 01:43:45.289
I do this? I don't actually know what the syntax

01:43:45.289 --> 01:43:48.369
is, but you can have it running in a window in

01:43:48.369 --> 01:43:50.090
Neovan, even, which would be kind of cool. And

01:43:50.090 --> 01:43:54.270
it reads, like, your entire project, or...? I

01:43:54.270 --> 01:43:56.390
think so. I think it spins up some... I'm, like,

01:43:56.390 --> 01:43:58.930
so not qualified to talk about this, but my understanding

01:43:58.930 --> 01:44:02.090
is, like, it spins up a process and runs in your

01:44:02.090 --> 01:44:03.829
directory and has all the context of all the

01:44:03.829 --> 01:44:06.760
source code and everything. That's cool. Interesting.

01:44:07.000 --> 01:44:09.859
I'll have to give it a try. I have not released

01:44:09.859 --> 01:44:13.560
AI related content because I still use ChatGPT,

01:44:13.640 --> 01:44:17.279
you know, copy paste and review there and paste

01:44:17.279 --> 01:44:22.460
back into my terminal. But I will see. I wanted

01:44:22.460 --> 01:44:28.420
to ask you as well. Let's talk about OS. What

01:44:28.420 --> 01:44:32.619
is your favorite OS, your preferred one? And

01:44:32.619 --> 01:44:35.859
why? What are your experiences with other operating

01:44:35.859 --> 01:44:39.140
systems as well? I've used all the big three.

01:44:39.520 --> 01:44:42.119
I grew up using Windows. I used Windows exclusively

01:44:42.119 --> 01:44:44.819
until all the way through college. So it wasn't

01:44:44.819 --> 01:44:47.579
until my first job, that first job I talked about

01:44:47.579 --> 01:44:49.939
earlier, the web dev job. When I started there,

01:44:49.979 --> 01:44:52.840
they gave me a Mac. I didn't ask for a Mac. They

01:44:52.840 --> 01:44:57.430
gave me. Yeah, same happened to me. And I liked

01:44:57.430 --> 01:44:59.409
it. I was like, I don't know. All through college,

01:44:59.489 --> 01:45:01.810
I sneered at the Apple users. I was like, oh,

01:45:01.829 --> 01:45:03.510
you guys with your expensive laptops, you all

01:45:03.510 --> 01:45:07.250
think you're so artsy and unique. The Starbucks.

01:45:08.170 --> 01:45:12.350
Right. But the irony, right? I was being snobbish

01:45:12.350 --> 01:45:15.050
about people being snobbish, which is hypocritical.

01:45:15.109 --> 01:45:18.430
I didn't realize at the time. But yeah, I got

01:45:18.430 --> 01:45:20.170
a Mac and I was like, oh, I actually really like

01:45:20.170 --> 01:45:21.829
this. And I never went back to Windows again.

01:45:22.069 --> 01:45:24.739
And I haven't touched Windows since. The only

01:45:24.739 --> 01:45:26.399
time I've ever used Windows since then is like

01:45:26.399 --> 01:45:30.680
on the very rare occasions when I have to debug

01:45:30.680 --> 01:45:33.420
some NeoVim issuing Windows. And I always hate

01:45:33.420 --> 01:45:35.579
that. That's like my nightmare scenario is when

01:45:35.579 --> 01:45:38.380
you open a PR NeoVim and the one failing test

01:45:38.380 --> 01:45:41.380
is Windows. I'm like, no, please, no, not Windows.

01:45:41.640 --> 01:45:44.060
Hey, let me ask you before we continue here.

01:45:44.279 --> 01:45:46.520
How is that experience? Because I have never

01:45:46.520 --> 01:45:49.420
installed NeoVim on Windows. Like, is it a native?

01:45:50.039 --> 01:45:53.640
NeoVim experience, like not through WSL, right?

01:45:53.760 --> 01:45:56.359
Because you could run it in WSL, but you're basically

01:45:56.359 --> 01:45:59.460
running in Linux, right? So is there a native

01:45:59.460 --> 01:46:01.899
Windows NeoVim package and does it work? How

01:46:01.899 --> 01:46:04.840
compatible is it? Yeah, no, it works. It works.

01:46:04.880 --> 01:46:08.239
It runs in Windows Terminal or I think even like

01:46:08.239 --> 01:46:13.680
the cmd .exe thing. It runs in PowerShell. Like

01:46:13.680 --> 01:46:16.140
we have our build system supports Windows. It

01:46:16.140 --> 01:46:20.029
requires Visual Studio. to which is like the

01:46:20.029 --> 01:46:23.770
compiler on windows to it to build it or have

01:46:23.770 --> 01:46:26.189
to install like mngw or whatever but no it works

01:46:26.189 --> 01:46:29.630
it's a huge pain in the ass to do at least for

01:46:29.630 --> 01:46:32.069
me because i'm not like a windows user but you

01:46:32.069 --> 01:46:36.569
can do it um and can you there there are some

01:46:36.569 --> 01:46:40.310
plugins work and all that stuff i think so to

01:46:40.310 --> 01:46:42.029
be honest i haven't actually like used neoman

01:46:42.029 --> 01:46:44.130
like like really used it on windows i've only

01:46:44.130 --> 01:46:47.270
built it to try to debug stuff but there are

01:46:47.270 --> 01:46:51.109
some really weird So we were talking earlier

01:46:51.109 --> 01:46:53.109
about how the terminal is confusing to a lot

01:46:53.109 --> 01:46:55.069
of users. It's even more so on Windows because

01:46:55.069 --> 01:46:59.750
Windows has to emulate the TTY layer that Unix

01:46:59.750 --> 01:47:02.609
uses. So we were talking earlier about how there's

01:47:02.609 --> 01:47:04.590
all these different layers, Tmux, your terminal,

01:47:04.689 --> 01:47:07.350
right? On Windows, you're going through a whole

01:47:07.350 --> 01:47:10.989
emulation layer. And that messes a bunch of stuff

01:47:10.989 --> 01:47:14.510
up. So we have tests in our test suite in NeoVim

01:47:14.510 --> 01:47:17.529
that we just skip on Windows because they literally

01:47:17.529 --> 01:47:19.449
don't work. on Windows because they go through

01:47:19.449 --> 01:47:22.289
this emulation layer. Yeah, so it does work.

01:47:22.390 --> 01:47:24.729
I know we have users that use Windows. They're

01:47:24.729 --> 01:47:28.270
in the minority for sure. I will say if one of

01:47:28.270 --> 01:47:30.609
your users or viewers is watching this who's

01:47:30.609 --> 01:47:33.470
a Windows user and likes NeoVim and wants to

01:47:33.470 --> 01:47:37.069
contribute, we are in desperate need of someone

01:47:37.069 --> 01:47:40.670
to own, be our Windows person on the NeoVim team.

01:47:40.949 --> 01:47:43.609
So if any ambitious viewers are like, I want

01:47:43.609 --> 01:47:46.069
to be on the NeoVim core team, if you come in,

01:47:46.409 --> 01:47:49.550
can be our Windows person, that would be a really

01:47:49.550 --> 01:47:53.489
easy way to get in. What are the requirements?

01:47:53.829 --> 01:47:59.270
What are you looking for in a person? Generally,

01:47:59.550 --> 01:48:01.670
in the past, when people have been moved into

01:48:01.670 --> 01:48:05.229
the core team, it's a history of good contributions,

01:48:05.470 --> 01:48:11.449
understanding the development process, good issue

01:48:11.449 --> 01:48:13.670
triaging, being able to respond to issues and

01:48:13.670 --> 01:48:20.760
understand Being able to identify what the problem

01:48:20.760 --> 01:48:23.119
is and solve them. It's not formal. There's no

01:48:23.119 --> 01:48:25.399
application process or anything. Usually when

01:48:25.399 --> 01:48:27.000
we see people that are consistently helpful and

01:48:27.000 --> 01:48:29.180
stick around, then we're like, hey, should we

01:48:29.180 --> 01:48:32.140
add them? Yeah, let's do it. We don't do it for

01:48:32.140 --> 01:48:33.279
everybody because not everyone sticks around

01:48:33.279 --> 01:48:35.840
for a long time. But if people are consistent,

01:48:36.199 --> 01:48:38.439
then we usually will add them to that helper

01:48:38.439 --> 01:48:40.619
group. And then if someone is in the helper group

01:48:40.619 --> 01:48:44.819
long enough, then they will often get... moved

01:48:44.819 --> 01:48:48.020
in to the core team. But I just feel like if

01:48:48.020 --> 01:48:50.819
someone were to come in and start solving a bunch

01:48:50.819 --> 01:48:54.000
of Windows problems, that would get noticed for

01:48:54.000 --> 01:48:57.039
sure and be very valuable. I'll create a clip

01:48:57.039 --> 01:48:59.479
out of this and share it as a separate video.

01:48:59.880 --> 01:49:04.859
Like a NeoVim Windows logo and catchy title.

01:49:05.800 --> 01:49:08.300
We'll see what happens. Maybe someone shows up.

01:49:09.239 --> 01:49:12.100
And you were talking about operating systems.

01:49:12.119 --> 01:49:16.399
Sorry, I interrupted you there. Yeah, I was talking

01:49:16.399 --> 01:49:20.000
about how I switched to using a Mac right after

01:49:20.000 --> 01:49:22.779
college, and I've used a Mac ever since as my

01:49:22.779 --> 01:49:27.399
personal computer. And I've used... I do own

01:49:27.399 --> 01:49:30.260
a desktop PC that I use for just playing games,

01:49:30.380 --> 01:49:34.260
and that runs Venora. It runs Linux. And I use

01:49:34.260 --> 01:49:38.479
Linux at work. So I also spend a good amount

01:49:38.479 --> 01:49:42.699
of time on Linux. Linux is fine. It's not...

01:49:43.200 --> 01:49:46.039
I think it really depends on the hardware is

01:49:46.039 --> 01:49:48.520
what I've been my experience. So like on my desktop

01:49:48.520 --> 01:49:51.539
PC, Linux is pretty, pretty reliable and pretty

01:49:51.539 --> 01:49:54.140
stable. There's some issues. I did have an issue

01:49:54.140 --> 01:49:57.619
where for like months when I was spent, like

01:49:57.619 --> 01:49:59.939
put the desktop to sleep, it wouldn't come back

01:49:59.939 --> 01:50:01.960
on. It would like wouldn't wake up. So I had

01:50:01.960 --> 01:50:04.220
like force powered off. And so I got into the

01:50:04.220 --> 01:50:05.819
habit of just like shutting it down when I was

01:50:05.819 --> 01:50:09.460
done, which was super annoying. And I, I like

01:50:09.460 --> 01:50:12.510
totally by luck happened to learn. that this

01:50:12.510 --> 01:50:14.970
is because of a bug in the Bluetooth driver.

01:50:15.289 --> 01:50:17.729
So if I disable Bluetooth before suspending,

01:50:17.810 --> 01:50:19.430
then it would work, and it would come back online,

01:50:19.649 --> 01:50:22.890
which is just such a Linux thing, right? It's

01:50:22.890 --> 01:50:25.069
like, where's your Linux bingo card? Bluetooth

01:50:25.069 --> 01:50:28.810
issues? Wake from suspend issues? Yeah, all I

01:50:28.810 --> 01:50:32.250
needed was an audio bug. And on my work laptop,

01:50:32.569 --> 01:50:34.850
I have a Dell laptop I use at work that runs

01:50:34.850 --> 01:50:37.170
Ubuntu, and I do have audio issues there. So

01:50:37.170 --> 01:50:43.479
my bingo card is all checked. No, I think, I

01:50:43.479 --> 01:50:47.720
mean, when I do use Linux, I just use GNOME.

01:50:47.760 --> 01:50:51.020
I don't use a window manager or anything. I just

01:50:51.020 --> 01:50:53.600
use GNOME. It's pretty similar to macOS, so I

01:50:53.600 --> 01:50:56.399
like it. I like the way it looks. It looks pretty

01:50:56.399 --> 01:51:00.380
to me. I'm happy with it. I don't do anything

01:51:00.380 --> 01:51:03.560
fancy there. But I definitely prefer macOS. I

01:51:03.560 --> 01:51:06.239
know that's like heresy in the open source world,

01:51:06.340 --> 01:51:09.220
but I'm happy with it. It works. It does what

01:51:09.220 --> 01:51:13.479
I need it to do. It looks nice. I just had to

01:51:13.479 --> 01:51:18.979
sell my soul to a couple. Okay. What are your

01:51:18.979 --> 01:51:23.220
thoughts? I also have an iPhone. We talked about

01:51:23.220 --> 01:51:25.239
this earlier, but I'm completely Apple -billed.

01:51:25.380 --> 01:51:29.319
I have an iPhone. I have AirPods. I have an Apple

01:51:29.319 --> 01:51:32.500
Watch. I have an iPad. I have an Apple TV. I

01:51:32.500 --> 01:51:36.760
have all the Apple crap. No, I don't have the

01:51:36.760 --> 01:51:40.550
TV. But consistently, I'm going to sound like

01:51:40.550 --> 01:51:42.829
a fanboy here, but I really believe this. Consistently,

01:51:42.829 --> 01:51:46.810
in my experience, the Apple products just are

01:51:46.810 --> 01:51:50.130
usually the best in their category. The MacBook

01:51:50.130 --> 01:51:53.850
laptop, I will die on this deal, is the best

01:51:53.850 --> 01:51:56.369
laptop on the market. I think that for the price,

01:51:56.470 --> 01:51:59.210
the price per performance, price per watt, whatever,

01:51:59.409 --> 01:52:03.069
the MacBook Air... is the best laptop. It's the

01:52:03.069 --> 01:52:04.930
laptop I would recommend to anybody. You can

01:52:04.930 --> 01:52:07.270
get one for under $1 ,000. The battery life is

01:52:07.270 --> 01:52:09.449
incredible. The display is incredible. The build

01:52:09.449 --> 01:52:12.029
quality is amazing. It has no fan. It's completely

01:52:12.029 --> 01:52:14.550
silent. You will not get a better laptop for

01:52:14.550 --> 01:52:17.029
the same cost as a MacBook Air. Now, there are

01:52:17.029 --> 01:52:18.949
some people that just hate macOS, so they won't

01:52:18.949 --> 01:52:23.810
even consider it. But hardware -wise, that's

01:52:23.810 --> 01:52:27.520
a hell of a buy -on. the air i love my airpods

01:52:27.520 --> 01:52:29.739
right i know i'm gonna sound like a fanboy i

01:52:29.739 --> 01:52:32.399
already said that once but they just work so

01:52:32.399 --> 01:52:34.800
well right i i used my very first smartphone

01:52:34.800 --> 01:52:37.239
was an android this is a long time ago back in

01:52:37.239 --> 01:52:41.279
in the like 2008 or something um but i had like

01:52:41.279 --> 01:52:44.579
an htc android thing and my first two smartphones

01:52:44.579 --> 01:52:47.220
were both androids and then i switched to an

01:52:47.220 --> 01:52:50.739
iphone at the time it was like the iphone 4 or

01:52:50.739 --> 01:52:54.390
something And it was so much better. It was night

01:52:54.390 --> 01:52:56.270
and day. Once I got the iPhone, I was like, oh

01:52:56.270 --> 01:52:57.810
my gosh, I can't believe how much better this

01:52:57.810 --> 01:53:01.010
is. It was faster. It was smoother. The battery

01:53:01.010 --> 01:53:03.130
life was better. And so I've used an iPhone ever

01:53:03.130 --> 01:53:05.109
since then. That was even before I switched to

01:53:05.109 --> 01:53:08.550
Mac. I was using Windows at the time. Same thing

01:53:08.550 --> 01:53:10.449
with Apple TV. Before I had an Apple TV, we had

01:53:10.449 --> 01:53:13.289
the Roku. We tried the Amazon Fire Stick, and

01:53:13.289 --> 01:53:15.470
they were all trash. They all sucked. And then

01:53:15.470 --> 01:53:17.609
we got the Apple TV and it just, so I'm like,

01:53:17.750 --> 01:53:20.850
I'm like someone, please pull me out of my Apple

01:53:20.850 --> 01:53:23.449
addiction and make a better product. So I don't

01:53:23.449 --> 01:53:26.130
have to keep using Apple stuff. But, uh, but

01:53:26.130 --> 01:53:27.970
then Apple, the way that Apple gets you, of course,

01:53:27.970 --> 01:53:30.350
is everything integrates so well, right? Like

01:53:30.350 --> 01:53:33.930
that, uh, I was thinking about this the other

01:53:33.930 --> 01:53:36.430
day, people talk about the walled garden. Like

01:53:36.430 --> 01:53:37.930
that's the metaphor they use to describe Apple.

01:53:38.409 --> 01:53:40.569
And they use it in a negative term that I talk

01:53:40.569 --> 01:53:43.010
about Apple's a walled garden. And when people

01:53:43.010 --> 01:53:44.789
talk about that in the negative term, they're

01:53:44.789 --> 01:53:47.430
emphasizing the walls. They're saying you're

01:53:47.430 --> 01:53:50.989
blocked in, you're walled in. But what they forget

01:53:50.989 --> 01:53:53.310
is the garden part. Like if you've ever been

01:53:53.310 --> 01:53:55.590
in a walled garden, it's actually pretty nice.

01:53:55.630 --> 01:53:57.270
You're in a nice little garden. You have these

01:53:57.270 --> 01:53:59.789
nice walls around you keeping it quiet. And it's

01:53:59.789 --> 01:54:02.630
beautiful, right? Like, yeah, there are walls,

01:54:02.869 --> 01:54:05.010
but there's also this beautiful garden that I'm

01:54:05.010 --> 01:54:07.710
enjoying. So yeah, I'm in the walled garden for

01:54:07.710 --> 01:54:10.649
sure. But it's better, you know, I'm enjoying

01:54:10.649 --> 01:54:13.659
the garden at least. Are there any plans then

01:54:13.659 --> 01:54:19.800
to leave that card in? No. I mean, if iMessage

01:54:19.800 --> 01:54:25.399
ever works on Linux, that would be a big step.

01:54:26.060 --> 01:54:29.920
And if I could ever find a laptop that competed

01:54:29.920 --> 01:54:35.260
with the MacBook on noise, battery life, performance,

01:54:35.560 --> 01:54:39.899
build quality, camera quality. And the operating

01:54:39.899 --> 01:54:44.119
system, macOS. I mean, I like macOS. It's not

01:54:44.119 --> 01:54:48.960
perfect, but I like... I know with the upcoming

01:54:48.960 --> 01:54:51.079
macOS release, there's been a lot of memes about

01:54:51.079 --> 01:54:55.260
the new liquid glass. I haven't tried it, so

01:54:55.260 --> 01:54:58.579
I don't really have any opinions on it. But aside

01:54:58.579 --> 01:55:02.760
from that, up until now, anyway, I've generally

01:55:02.760 --> 01:55:05.340
been pretty happy with the aesthetic design decisions

01:55:05.340 --> 01:55:11.359
of Apple. I like it. On Linux, I'm also pretty

01:55:11.359 --> 01:55:14.199
happy with GNOME. If I switched to GNOME, I think

01:55:14.199 --> 01:55:19.539
I would be okay with that. I used to make fun

01:55:19.539 --> 01:55:23.000
of... It's nice to just... On Mac OS, things

01:55:23.000 --> 01:55:27.680
just work. I open my laptop when it's been closed

01:55:27.680 --> 01:55:31.020
for two weeks on my desk, and it's actually been

01:55:31.020 --> 01:55:33.260
asleep, and I open the lid, the screen comes

01:55:33.260 --> 01:55:37.199
on immediately, and the battery is still 80 %

01:55:37.199 --> 01:55:41.020
charged. That is not the case with my Linux laptop.

01:55:42.060 --> 01:55:44.779
The fan on this thing, I don't think it even

01:55:44.779 --> 01:55:47.079
has a fan. I have a MacBook Pro, so it might

01:55:47.079 --> 01:55:51.340
have a small fan. It sounds, when I'm doing a

01:55:51.340 --> 01:55:54.899
call with four guests, I'm pushing it. The CPU

01:55:54.899 --> 01:55:57.460
is at 80 % and it requires a lot because I have

01:55:57.460 --> 01:56:00.260
a MacBook Pro as well, an M4. And that's when

01:56:00.260 --> 01:56:02.939
I hear the fan, but it's really loud. I'm sorry,

01:56:03.060 --> 01:56:05.300
it's really low. Nothing compared to a Windows

01:56:05.300 --> 01:56:11.189
airplane. Yeah, so I never have any audio issues.

01:56:11.310 --> 01:56:13.869
My headphones always just connect and just work.

01:56:14.590 --> 01:56:17.170
Do you have a problem when your headphones are

01:56:17.170 --> 01:56:19.430
connected to the phone and you want them to connect

01:56:19.430 --> 01:56:22.890
to the computer? Do you have a shortcut or how

01:56:22.890 --> 01:56:25.689
do you do it? Because sometimes they stay connected

01:56:25.689 --> 01:56:28.130
to the phone. There's an application called,

01:56:28.329 --> 01:56:30.869
I don't remember, but I have a key map, right?

01:56:30.909 --> 01:56:34.210
So if I type a key, it connects them to my computer.

01:56:34.840 --> 01:56:36.840
and i can switch the audio source because sometimes

01:56:36.840 --> 01:56:39.279
they stay connected to the phone for some reason

01:56:39.279 --> 01:56:43.039
right so so in my experience with the airpods

01:56:43.039 --> 01:56:44.840
this is one thing that's really nice about the

01:56:44.840 --> 01:56:46.619
integration everything right between the iphone

01:56:46.619 --> 01:56:50.079
and the laptop let's say i'm using my airpods

01:56:50.079 --> 01:56:53.239
with my iphone and then i and i open my laptop

01:56:53.239 --> 01:56:56.380
i get a little notification that says i've detected

01:56:56.380 --> 01:56:58.800
airpods and i can click connect if i want them

01:56:58.800 --> 01:57:00.800
to switch to my macbook But if I don't click

01:57:00.800 --> 01:57:03.380
that, it doesn't switch. Oh, with that AirBody,

01:57:03.460 --> 01:57:05.720
you use an application called AirBody something.

01:57:06.000 --> 01:57:10.880
No, this is just all native. And then the AirPods

01:57:10.880 --> 01:57:14.739
are also pretty good about intelligently switching.

01:57:15.140 --> 01:57:18.380
So let's say the reverse situation. I have them

01:57:18.380 --> 01:57:21.359
connected to my MacBook. And then I pull out

01:57:21.359 --> 01:57:23.520
my phone and I want to play a video on my phone.

01:57:24.000 --> 01:57:27.430
It's like... Somehow it knows that because now

01:57:27.430 --> 01:57:29.670
audio is playing on my phone, it will automatically

01:57:29.670 --> 01:57:31.949
switch the AirPods to connect to my phone instead.

01:57:32.310 --> 01:57:34.430
And then as soon as I go back to my laptop and

01:57:34.430 --> 01:57:36.949
start playing audio from my laptop again, it'll

01:57:36.949 --> 01:57:39.550
switch back to my... So the AirPods are really...

01:57:39.550 --> 01:57:42.130
That's the kind of stuff that keeps you hooked,

01:57:42.189 --> 01:57:44.609
right? That integration that works really well.

01:57:45.529 --> 01:57:49.869
Yeah. Yeah. I used to make fun of Android...

01:57:49.869 --> 01:57:53.210
No, iPhone users, because I was an Android user.

01:57:53.289 --> 01:57:55.310
I have been all my life, you know? And I was

01:57:55.310 --> 01:57:57.689
like, iPhone. So why do you need an iPhone? Because

01:57:57.689 --> 01:58:01.989
there's this image that you have of iPhone users,

01:58:02.310 --> 01:58:06.829
right? Then I started with Mac OS. Then I got

01:58:06.829 --> 01:58:08.850
the iPhone. I loved it. You know, the integration

01:58:08.850 --> 01:58:11.569
between the two devices. It's like, man, the

01:58:11.569 --> 01:58:14.069
shared clipboard. I tried that. The shared clipboard

01:58:14.069 --> 01:58:17.010
is awesome. Yeah. Oh, it's so great, man. I love

01:58:17.010 --> 01:58:20.810
that feature. What do people think? What do the

01:58:20.810 --> 01:58:25.090
rest of the people think? Especially in our community,

01:58:25.329 --> 01:58:27.250
you know, NeoVim, Terminals, all that stuff.

01:58:27.529 --> 01:58:29.729
What do others think about your love for Apple?

01:58:30.149 --> 01:58:32.689
Because most of them, are they most of them Windows?

01:58:32.869 --> 01:58:36.750
Or how are things there? On the NeoVim team,

01:58:36.789 --> 01:58:41.029
it's split. We have about half of the people

01:58:41.029 --> 01:58:44.229
use... Actually, no, it's not split even. I think

01:58:44.229 --> 01:58:48.619
there's only a few of us that use... Mac OS and

01:58:48.619 --> 01:58:51.199
the rest use Linux. I think I might be. So I

01:58:51.199 --> 01:58:56.720
will say on the core team, I'm maybe the only,

01:58:56.800 --> 01:58:58.979
I think Justin's the other one. There are not

01:58:58.979 --> 01:59:02.119
very many Americans. So I'm one of only one or

01:59:02.119 --> 01:59:04.539
two Americans. We have a lot of people that live

01:59:04.539 --> 01:59:08.340
in Europe. And so just based on that, like the

01:59:08.340 --> 01:59:11.659
iPhone just alone is much less common in Europe.

01:59:11.699 --> 01:59:14.069
So I think I'm like the only iPhone user. But

01:59:14.069 --> 01:59:16.170
we have a few other Mac users. I don't know.

01:59:16.229 --> 01:59:19.409
I've kind of just accepted the fact that liking

01:59:19.409 --> 01:59:22.369
Apple is a controversial, or not liking Apple,

01:59:22.449 --> 01:59:29.689
liking Apple products is a controversial, unpopular

01:59:29.689 --> 01:59:31.710
opinion in the open source world. And I've just

01:59:31.710 --> 01:59:34.090
embraced it. I'm like, whatever. I don't care.

01:59:34.670 --> 01:59:37.630
It's funny because I live these two separate

01:59:37.630 --> 01:59:41.689
lives because outside of the open source world,

01:59:42.189 --> 01:59:44.689
in like the tech community people that i know

01:59:44.689 --> 01:59:46.310
in real life i definitely live in like a little

01:59:46.310 --> 01:59:48.789
bubble but like basically everyone i know has

01:59:48.789 --> 01:59:52.430
an iphone like it's it's very rare to meet someone

01:59:52.430 --> 01:59:56.470
or to that i will text someone that has an android

01:59:56.470 --> 02:00:00.050
so it's it's very it's very opposite like this

02:00:00.050 --> 02:00:03.590
very contrasting would you like to talk about

02:00:03.590 --> 02:00:06.750
your keyboard um what do you use for keyboard

02:00:06.750 --> 02:00:11.800
i use a uh Let me pull the picture. I have it

02:00:11.800 --> 02:00:13.899
here on my desk, obviously, but it must be easier

02:00:13.899 --> 02:00:16.600
to pull the picture. But I use the Keychron Q11.

02:00:16.939 --> 02:00:21.340
Let's see. Is it right here? Oh, it's a split.

02:00:22.159 --> 02:00:24.819
Split keyboard, yes. I'm on the split keyboard

02:00:24.819 --> 02:00:26.760
game, and I probably will be for the rest of

02:00:26.760 --> 02:00:29.300
my life. I love it. Using a normal keyboard now,

02:00:29.460 --> 02:00:33.159
once you get used to a split keyboard, like that,

02:00:33.279 --> 02:00:36.680
having your arms so close, it just feels awkward

02:00:36.680 --> 02:00:41.550
to me now. The split is awesome. Before this,

02:00:41.670 --> 02:00:47.869
I tried the Moonlander, the ZSA Moonlander. It's

02:00:47.869 --> 02:00:51.850
this guy. And a lot of people love this thing.

02:00:53.829 --> 02:00:57.050
And if you go online and search for it, do some

02:00:57.050 --> 02:01:00.890
research. That's the recommendation. That one,

02:01:01.149 --> 02:01:04.470
the Glove 80, or the one that Prime uses? Yeah.

02:01:05.470 --> 02:01:07.310
Prime uses, I think, one of the Kinesis ones.

02:01:08.479 --> 02:01:13.619
I tried this and I did not like it and I I there's

02:01:13.619 --> 02:01:15.920
an expensive keyboard I returned it you have

02:01:15.920 --> 02:01:17.699
to pay the return shipping to Taiwan which is

02:01:17.699 --> 02:01:20.300
expensive so like it's it's expensive to return

02:01:20.300 --> 02:01:23.720
but it just was not a fit for me and I tried

02:01:23.720 --> 02:01:26.140
so hard like I really wanted to like it because

02:01:26.140 --> 02:01:29.939
people speak so highly of it but I found I did

02:01:29.939 --> 02:01:33.220
not like the ortho linear oh you don't like it

02:01:33.850 --> 02:01:37.649
No, and I couldn't find any reliable research

02:01:37.649 --> 02:01:40.649
or sources that suggested that it's actually

02:01:40.649 --> 02:01:43.329
better. It's just different. I think people like

02:01:43.329 --> 02:01:50.149
it because it's more logical, but unless I see

02:01:50.149 --> 02:01:53.109
a study that tells me otherwise, I'm not convinced

02:01:53.109 --> 02:01:57.689
that it's any better for you ergonomically. I'm

02:01:57.689 --> 02:02:00.050
a pretty good touch typist on a QWERTY keyboard.

02:02:00.590 --> 02:02:03.689
I can type over 100 words per minute pretty easily.

02:02:04.090 --> 02:02:06.390
So anything that messed with my touch typing,

02:02:06.590 --> 02:02:11.449
I really didn't like. And then I didn't like

02:02:11.449 --> 02:02:14.069
the thumb clusters. They actually ended up giving

02:02:14.069 --> 02:02:16.989
me more pain because I ended up making this motion

02:02:16.989 --> 02:02:23.270
a lot, right? Yep. And that in turn ended up

02:02:23.270 --> 02:02:25.670
triggering something in my forearm muscle. So

02:02:25.670 --> 02:02:29.279
it was like this ironic situation where... using

02:02:29.279 --> 02:02:31.560
the Moodlander was causing me more pain than

02:02:31.560 --> 02:02:35.399
just using a regular keyboard. I also didn't

02:02:35.399 --> 02:02:37.720
really like that. So the concept of having layers,

02:02:37.800 --> 02:02:42.039
I think, is cool. But I didn't like not having

02:02:42.039 --> 02:02:46.239
easy access to certain keys. So obviously, there's

02:02:46.239 --> 02:02:50.039
no function keys on here. I think even like arrow

02:02:50.039 --> 02:02:52.199
keys, you have to activate a layer to use arrow

02:02:52.199 --> 02:02:56.409
keys. Or they're in a weird position. And I think

02:02:56.409 --> 02:02:58.310
there are some others too. I don't remember off

02:02:58.310 --> 02:03:01.069
the top of my head now, but just looking at this

02:03:01.069 --> 02:03:05.630
picture, it's like maybe I think the escape is

02:03:05.630 --> 02:03:09.310
in a weird place. Anyway, the point is, it just

02:03:09.310 --> 02:03:11.350
felt weird to me. And what I came to realize

02:03:11.350 --> 02:03:15.649
about myself is, you know what? I just like the

02:03:15.649 --> 02:03:18.810
staggered QWERTY layout. I have no problems with

02:03:18.810 --> 02:03:21.539
it. I like having function keys. And so when

02:03:21.539 --> 02:03:23.520
I found this one, I was like, this is perfect.

02:03:23.699 --> 02:03:26.039
I don't need the numpad. It has function keys,

02:03:26.279 --> 02:03:29.500
has the staggered QWERTY layout, and it's split

02:03:29.500 --> 02:03:31.560
and it's mechanical and it's programmable. It

02:03:31.560 --> 02:03:36.020
still uses QMK or what it's called. Yeah. You

02:03:36.020 --> 02:03:38.119
can still program it. So I still have a layer.

02:03:38.239 --> 02:03:40.479
I have a symbol layer so I can press a key and

02:03:40.479 --> 02:03:43.159
I can type in like parentheses and stuff without

02:03:43.159 --> 02:03:45.319
having to stretch my hand. That was the one thing

02:03:45.319 --> 02:03:48.439
I took away from using the Moonlander. But yeah.

02:03:48.859 --> 02:03:50.539
I'm very happy with this keyboard. If this keyboard

02:03:50.539 --> 02:03:52.859
broke, I would just go buy another one. I use

02:03:52.859 --> 02:03:55.020
red keys because I know people are going to ask.

02:03:56.380 --> 02:04:01.500
Red keys? Okay. The Gateron Pro Reds. Those are

02:04:01.500 --> 02:04:04.039
soft. I had the Pro Reds in the Glove 80. I didn't

02:04:04.039 --> 02:04:07.300
like them because these are MX switches. I don't

02:04:07.300 --> 02:04:08.859
know about switches. I don't know about anything

02:04:08.859 --> 02:04:11.960
keyboards related, but these are MX. They're

02:04:11.960 --> 02:04:14.800
bigger switches, right? The ones that I use are

02:04:14.800 --> 02:04:19.859
Chalks. They're smaller. I didn't like the Pro

02:04:19.859 --> 02:04:23.359
Reds. They were clanky. I don't know. Yeah, I

02:04:23.359 --> 02:04:25.600
think I would also like the low -profile ones.

02:04:26.079 --> 02:04:30.779
If Keychron made a version of this with low -profile

02:04:30.779 --> 02:04:33.020
keys, I would buy it immediately. I wouldn't

02:04:33.020 --> 02:04:37.159
even think about it. But they don't. The deep

02:04:37.159 --> 02:04:41.579
keys don't bother me. I would prefer the shallower

02:04:41.579 --> 02:04:44.770
ones, but I can live with these. Did you ever

02:04:44.770 --> 02:04:48.149
use the Magic Keyboard, Apple's Magic Keyboard,

02:04:48.210 --> 02:04:51.529
the external one? I think I have used it, but

02:04:51.529 --> 02:04:55.930
I've never used it a lot. Like it's my primary

02:04:55.930 --> 02:05:01.210
keyboard. No. I don't own one. That was my favorite

02:05:01.210 --> 02:05:04.090
keyboard. But like you said, having the hands

02:05:04.090 --> 02:05:06.869
like this, pretty close, you know? Yeah. Hurt

02:05:06.869 --> 02:05:11.489
my forearm. I know. Man, if Apple get me to buy

02:05:11.489 --> 02:05:13.729
another product, if they made... The Magic Keyboard

02:05:13.729 --> 02:05:20.210
split version? Yeah. That's by far the best keyboard

02:05:20.210 --> 02:05:22.789
I have used. And I know people are going to hate

02:05:22.789 --> 02:05:24.670
this because I have a Glove 80. For people that

02:05:24.670 --> 02:05:26.590
don't know, I just don't have a regular keyboard.

02:05:26.810 --> 02:05:30.189
I have this one. But I still prefer the feeling

02:05:30.189 --> 02:05:33.430
of the external Magic Keyboard because it's pretty

02:05:33.430 --> 02:05:35.770
soft. I could type really fast on that thing.

02:05:36.510 --> 02:05:40.189
But it's not split. I hate that. Now, I got used

02:05:40.189 --> 02:05:44.930
to the ortholinear. piece but it took me a while

02:05:44.930 --> 02:05:47.869
it took me some time i hated typed in the the

02:05:47.869 --> 02:05:51.350
b uh character right b as in boy because it's

02:05:51.350 --> 02:05:55.189
it's it's hard to get used to it did you ever

02:05:55.189 --> 02:05:58.029
get used to yeah i think i was it was either

02:05:58.029 --> 02:06:01.350
the b or the n the b and the n yeah it sucks

02:06:01.350 --> 02:06:03.470
where i felt like i was having to stretch so

02:06:03.470 --> 02:06:05.409
much further yeah that was another thing i was

02:06:05.409 --> 02:06:07.289
like this just feels worse this doesn't feel

02:06:07.289 --> 02:06:09.949
better this feels worse so no the the day that

02:06:09.949 --> 02:06:12.729
i the day that i decided like i really fought

02:06:12.729 --> 02:06:14.390
it because i really really wanted to like the

02:06:14.390 --> 02:06:16.470
moon lander but the day that i like made the

02:06:16.470 --> 02:06:18.810
decision was like no i i'm not going to keep

02:06:18.810 --> 02:06:21.430
it i just felt like so much relief it was like

02:06:21.430 --> 02:06:24.510
i just knew it was the right choice so no i just

02:06:24.510 --> 02:06:26.789
stick to the i just stick to a staggered qwerty

02:06:26.789 --> 02:06:29.989
that's that's all i need and i i should say too

02:06:29.989 --> 02:06:32.489
like i don't really other than like the usual

02:06:32.489 --> 02:06:36.350
rsi stuff that every professional computer person

02:06:36.350 --> 02:06:38.189
has to be aware of i don't have any real issues

02:06:38.189 --> 02:06:41.479
so Obviously, people that do have to make different

02:06:41.479 --> 02:06:45.159
decisions, but I don't have to worry about that,

02:06:45.199 --> 02:06:47.739
at least not right now anyway. So on that, the

02:06:47.739 --> 02:06:51.140
split keyboard is all I need. Yep. Do you use

02:06:51.140 --> 02:06:56.260
the arrows or not at all on your keyboard? I'm

02:06:56.260 --> 02:07:01.319
sure that I do use them, but not a ton. Obviously,

02:07:01.579 --> 02:07:06.989
using them, I don't use them much. Have you heard

02:07:06.989 --> 02:07:09.710
about this application kind of in macOS that

02:07:09.710 --> 02:07:12.569
allows you to use spin motions everywhere? It's

02:07:12.569 --> 02:07:15.470
not open source. The code is not publicly available.

02:07:15.710 --> 02:07:18.069
It's a paid application. So that's a big no -go

02:07:18.069 --> 02:07:20.470
for a lot of people because, you know, you don't

02:07:20.470 --> 02:07:22.529
know what's going on. And it's sensitive stuff

02:07:22.529 --> 02:07:26.470
that it has access to. Yeah. I know there's...

02:07:26.470 --> 02:07:28.270
You're not talking about Karabiner, are you?

02:07:28.680 --> 02:07:30.640
No, I use Carabiner. Carabiner is open source,

02:07:30.659 --> 02:07:33.060
I think. Yeah, Carabiner is open source. I think

02:07:33.060 --> 02:07:35.159
Carabiner can do that. I think I might have even

02:07:35.159 --> 02:07:40.399
experimented with it. No, I don't know. I just

02:07:40.399 --> 02:07:42.979
kind of use the default most of the time. Yeah.

02:07:43.119 --> 02:07:47.340
No, this kind of allows you to enter normal mode.

02:07:48.250 --> 02:07:50.710
in any application like in your email right you're

02:07:50.710 --> 02:07:53.529
typing an email you press kj you enter normal

02:07:53.529 --> 02:07:55.949
mode and you can navigate around then you jump

02:07:55.949 --> 02:07:58.930
into insert mode normal mode it uses the mac

02:07:58.930 --> 02:08:03.810
os um accessibility api oh yeah discord slack

02:08:03.810 --> 02:08:07.390
basically everywhere use them that navigation

02:08:07.390 --> 02:08:10.949
layer in insert normal mode visual mode as well

02:08:10.949 --> 02:08:15.430
not perfect but um it's it's kind of nice especially

02:08:15.430 --> 02:08:19.170
you know if you're used to to NeoVim or Vim stuff,

02:08:19.390 --> 02:08:23.090
actually. All right, I haven't tried it, but

02:08:23.090 --> 02:08:25.510
I'll check it out. What's it called? Kind of

02:08:25.510 --> 02:08:29.770
Vim. Let me see. I had a call with that guy.

02:08:29.930 --> 02:08:33.109
It's a French guy. Let me share my screen. I'll

02:08:33.109 --> 02:08:39.229
show it to you. Where's my screen? Here. This

02:08:39.229 --> 02:08:46.250
kind of Vim mode. So just to give you an example.

02:08:46.810 --> 02:08:51.050
Let me see. What can I bring up? I don't want

02:08:51.050 --> 02:08:55.210
to show my email. Discord. I can bring up Discord

02:08:55.210 --> 02:09:00.729
here. So here I have Discord and I'm just going

02:09:00.729 --> 02:09:07.729
to jump to aerospace, but better here. Are you

02:09:07.729 --> 02:09:12.090
able to see Discord there? Yeah. How do I zoom

02:09:12.090 --> 02:09:15.710
in? Just move this a little bit to the side.

02:09:18.559 --> 02:09:29.100
there why so mean oh okay there there there so

02:09:29.100 --> 02:09:35.199
if I type something here if I oh you cannot see

02:09:35.199 --> 02:09:38.199
because of these this green thing there let me

02:09:38.199 --> 02:09:41.460
move it around okay so if I type this and if

02:09:41.460 --> 02:09:46.000
I press KJ here applications in the background

02:09:46.000 --> 02:09:49.479
turn like dark, darker, that tells me that I'm

02:09:49.479 --> 02:09:53.380
in normal mode. So I can type B here and I can

02:09:53.380 --> 02:09:59.039
just type in the VE, you know, or CE. I can change

02:09:59.039 --> 02:10:03.479
this, you know, and just edit stuff that way.

02:10:03.619 --> 02:10:08.439
JK, normal mode, you know, so it's useful for

02:10:08.439 --> 02:10:12.600
emails, for Discord, Slack, that type of thing.

02:10:14.380 --> 02:10:18.680
Oh, nice. Do you use any window manager? Any?

02:10:19.779 --> 02:10:24.739
No. I've tried them in the past. I used i3 for

02:10:24.739 --> 02:10:27.039
a little bit when I was on Linux. It was fine.

02:10:27.199 --> 02:10:33.960
I liked it. I didn't feel like I loved it enough.

02:10:34.159 --> 02:10:38.380
I never got hooked on it, I guess. I did try

02:10:38.380 --> 02:10:42.079
some macOS ones, but I don't really like any

02:10:42.079 --> 02:10:46.310
of them. No, I don't know. I actually, I like

02:10:46.310 --> 02:10:48.289
just like the floating windows, like the floating

02:10:48.289 --> 02:10:51.649
window thing. I don't need my windows to be tiled.

02:10:51.729 --> 02:10:53.649
And I know some people have like really sophisticated,

02:10:53.909 --> 02:10:56.909
like power user configurations with their time

02:10:56.909 --> 02:10:58.409
and demand your setups. I think that's great.

02:10:58.510 --> 02:11:00.850
It looks awesome. I don't know. I don't like

02:11:00.850 --> 02:11:03.510
I think about like the amount of time and effort

02:11:03.510 --> 02:11:06.029
it would take to set that up. Yep. I just don't

02:11:06.029 --> 02:11:09.569
feel that motivated to do it because I don't

02:11:09.569 --> 02:11:11.430
know. It doesn't sound fun for me right now.

02:11:11.720 --> 02:11:16.600
it's not fun then i'm probably not gonna find

02:11:16.600 --> 02:11:21.159
the time for it any final words any final stuff

02:11:21.159 --> 02:11:25.180
that you want that you want to talk about um

02:11:25.180 --> 02:11:28.399
this is super fun thanks for having me uh i hope

02:11:28.399 --> 02:11:32.300
um i i mentioned this last time um and i'll repeat

02:11:32.300 --> 02:11:34.880
it i'm you know super honored to be on the new

02:11:34.880 --> 02:11:39.060
vim team uh it never feels like a chore it always

02:11:39.060 --> 02:11:41.770
feels extremely satisfying to know that we have

02:11:41.770 --> 02:11:45.310
so many users that enjoy it and christian and

02:11:45.310 --> 02:11:48.449
i were talking earlier about how you and i were

02:11:48.449 --> 02:11:51.829
talking earlier about how um neovim has been

02:11:51.829 --> 02:11:54.189
like the most admired editor in the stack overflow

02:11:54.189 --> 02:11:56.529
survey for like five years in a row now which

02:11:56.529 --> 02:11:59.130
is awesome like that's so cool that people love

02:11:59.130 --> 02:12:02.350
it so much so i'm i just feel honored to be a

02:12:02.350 --> 02:12:06.270
part of it i don't have any plans to stop i'll

02:12:06.270 --> 02:12:08.699
always you know We need to be involved in some

02:12:08.699 --> 02:12:14.060
capacity for the foreseeable future. So, yeah.

02:12:15.100 --> 02:12:19.720
And just pop into the Matrix chat and say, hi,

02:12:19.739 --> 02:12:23.380
we have an off -topic channel that people can

02:12:23.380 --> 02:12:26.539
jump into. And it truly is off -topic. We are

02:12:26.539 --> 02:12:28.359
actually kind of strict about that. If you come

02:12:28.359 --> 02:12:29.739
into the off -topic channel and start asking

02:12:29.739 --> 02:12:31.279
questions about NeoVim, we'll tell you to leave

02:12:31.279 --> 02:12:36.460
and go to the on -topic channel. So most of the

02:12:36.460 --> 02:12:42.000
core team hangs out in there. Yeah. I don't have

02:12:42.000 --> 02:12:44.520
anything else to add. All right. Awesome, Greg.

02:12:44.979 --> 02:12:48.000
I just want to say thanks for your time. Thanks

02:12:48.000 --> 02:12:51.340
for showing up, you know, and sharing with all

02:12:51.340 --> 02:12:53.800
of us. Going to be editing the video and sharing

02:12:53.800 --> 02:12:56.420
it, you know, in the next couple of days. So

02:12:56.420 --> 02:12:59.220
thank you very much, man. Yeah, thanks a lot,

02:12:59.260 --> 02:13:00.520
Christian, for organizing this. This was fun.

02:13:00.739 --> 02:13:04.310
Yep. No worries. Whenever you want to talk about

02:13:04.310 --> 02:13:06.609
something, reach out and we can create a video.

02:13:06.670 --> 02:13:09.409
If you want to demo something about NeoVim. I

02:13:09.409 --> 02:13:11.850
don't have a large audience, but at least we

02:13:11.850 --> 02:13:15.869
get, you know, a couple of users. Yeah, it's

02:13:15.869 --> 02:13:19.829
more than I have. Right, Greg. Appreciate it,

02:13:19.829 --> 02:13:22.850
man. Have a great day. Notice how I was able

02:13:22.850 --> 02:13:26.100
to jump to this Tmux session here. And the reason

02:13:26.100 --> 02:13:28.859
you're here is because I want to thank the different

02:13:28.859 --> 02:13:31.819
YouTube members. You should be able to see their

02:13:31.819 --> 02:13:35.520
names listed here. The first CEO that joined

02:13:35.520 --> 02:13:39.279
Webto3, webto3 .com. We have three executive

02:13:39.279 --> 02:13:42.720
producers and the other YouTube members. I also

02:13:42.720 --> 02:13:44.699
want to thank the people that have donated in

02:13:44.699 --> 02:13:47.760
Ko -fi. If you like my videos, remember that

02:13:47.760 --> 02:13:50.699
you can consider becoming a member. That is what

02:13:50.699 --> 02:13:54.319
helps keep the channel going. Remember that if

02:13:54.319 --> 02:13:56.920
you like this video, give it a thumbs up. That

02:13:56.920 --> 02:14:00.439
just tells YouTube that the video is interesting

02:14:00.439 --> 02:14:04.539
for other people. Leave comments. Watch the entire

02:14:04.539 --> 02:14:08.119
thing because that increases the average view

02:14:08.119 --> 02:14:11.539
time. And the more view time a video has, the

02:14:11.539 --> 02:14:15.420
more YouTube shows it to other people. So yeah,

02:14:15.520 --> 02:14:18.859
every view counts. Every view helps. Every comment,

02:14:19.039 --> 02:14:22.960
every like. support the channel however you can
