Julia Evans
@b0rk.jvns.ca
41K followers 320 following 6.7K posts
programming and exclamation marks blog: jvns.ca zines: wizardzines.com
Posts Media Videos Starter Packs
b0rk.jvns.ca
thanks these are very good helix posts, learned about some great features
b0rk.jvns.ca
thanks, I appreciate having that to refer to if I end up going back to neovim!
b0rk.jvns.ca
fixed that one too, thanks!
b0rk.jvns.ca
here are some notes based on a very vague memory of my attempts to set this up 5 months ago: gist.github.com/jvns/b1dba4e...
b0rk.jvns.ca
my issues with vim.lsp.config may have been related to refusing to have any Lua code in my neovim config, not sure. I still only use a .vimrc
b0rk.jvns.ca
i’ll try to come up with some notes! i did try vim.lsp.config unsuccessfully but I don’t remember what happened, I can try to dig it up.

I’ve kind of given up on trying out new vim plugins unless there’s an “obvious” contender that everyone agrees is the best so i didn’t try any search alternatives
b0rk.jvns.ca
notes on switching to Helix from vim jvns.ca/blog/2025/10...
b0rk.jvns.ca
watching this was such a fun way to learn a little about Ethernet
tracketpacer.bsky.social
what happens if u cut 4 wires out of an ethernet cable & then plug it into yr PC
b0rk.jvns.ca
it's silly because "this is why it feels good to me to do those things" was right there
b0rk.jvns.ca
I use Affinity Designer right now! I used to use the Notability ipad app before that, and the Squid Android app before that
b0rk.jvns.ca
meet the terminal emulator wizardzines.com/comics/meet-...

(from The Secret Rules of the Terminal, out now! (wizardzines.com/zines/termin...)
your terminal emulator has two main jobs

    turn your actions (typing & clicking) into bytes and send them
    receive bytes and display them visually

Illustration of a terminal emulator, with a winking cursor face, and a program, represented by a box with a smiley face. The program has a heart above it, and there are arrows going back and forth between them labelled “bytes”
a little bit of history

it’s called an “emulator” because in the 80s a “terminal” was a separate machine from the computer

Illustration of a bulky old monitor, with a keyboard attached with a spiral cord, and a wire running to a panl of buttons and displays, labelld “mainframe”. There are arrows going back and forth between them labelled “bytes”

We still use the same 80s protocol!
what are these “bytes”?

the bytes are either:

    text (like cat blah.txt)
    escape codes (for example to tell the terminal what colour to display the text in)
    control characters example Ctrl+C is the byte 3)

it’s in charge of copy and paste

your terminal emulator lets you select text and copy/paste it (usually with Ctrl+Shift+C (Linux) or Cmd+C (Mac))

(copy & paste tips on page 18!)
it manages colours and fonts!

some terminal emulators come with a big theme library of different colourschemes!

if yours doesn’t, this site has colourschemes for many terminal emulators: iterm2colorschemes.com
fun fact: how Ctrl-X gets translated to bytes

Ctrl-A => 1
Ctrl-B => 2
...
Ctrl-Z => 26

Ctrl is the only modifier key I trust in the terminal, all of the others can work differently depending on the situation
b0rk.jvns.ca
ah yeah I imported some tweets from Twitter using
@en.blueark.app and it causes more confusion than I'd like. If you click on it you can see the "original" date it was posted (in 2013)
b0rk.jvns.ca
haha i’m going to tell everyone that’s the reason
b0rk.jvns.ca
it's in there! :)
b0rk.jvns.ca
added a cheat sheet to the official Git website

(with a lot of help from other folks who work on the website)

git-scm.com/cheat-sheet
Git Cheat Sheet
git-scm.com
b0rk.jvns.ca
TERM

wizardzines.com/comics/term/

(from "The Secret Rules of the Terminal", out now! wizardzines.com/zines/termin...)
different terminal emulators use different escape codes

terminal emulator 1: if you print out ESC[2J I’ll clear the screen!

terminal emulator 2: for me it’s ESC[HESC[J!
your system has a database called “terminfo” with escape codes in it

how if plays out when you press Ctrl+L to clear the screen:

program, with a little heart over it, thinking:
ah, she wants fo clear the screen! I’ll look up how to do that in the terminfo database…

(on my machine, the database is in /usr/share/terminfo)

program: ESC[HESC[J

terminal emulator, thinking: ok, clearing the screen!
how programs know what terminal you’re using: TERM

your terminal emulator sets the TERM environment variable when it starts

fun fact: terminal emulators often say they’re “xterm-256color” even if they’re not
this can break when SSHing into an old system with a new terminal emulator

(in a VERY annoying way)

happy little stick fiture: I am using ghostty

program, with a little heart over it: NOPE never heard of it
some ways to fix TERM

    install the terminfo file for your terminal emulator on the system
    use a different terminal emulator
    just set TERM=xterm-256color, it’ll often sort of work
b0rk.jvns.ca
finally (after literally everyone else *) I got my print copy of The Secret Rules of the Terminal!

wizardzines.com/zines/termin...

(* or I hope after literally everyone else, please send us a support email if you didn't get your preordered copy yet!)
The Secret Rules of the Terminal, by Julia Evans - The cover illustration depicts three people doing arcane terminal magic in a temple with a smoking censer in the background. Each of the three people has curly brown hair and light brown skin. They are all wearing dresses, billowing cloaks, and utility belts with keyboard symbols on them. The one on the left holds a palette of paints and a brush. The one on the right has a staff with a $ symbol on it and a starfish at the top. The one in the centre has a sword and is reading from a book whose cover says “>_” and “./”, which rests on a lectern with a smiling snake wrapped around it.
b0rk.jvns.ca
meet the TTY driver

wizardzines.com/comics/meet-...

(from "The Secret Rules of the Terminal", out now!)
the TTY driver is the most obscure part of the system

You almost never need to think about it, but when I’ve wanted to do something weird (like put a terminal in a web browser) understanding the driver is SO USEFUL
when you start your terminal emulator, it asks the OS to create a “pseudoterminal pair” which is a pair of two files

terminal emulator <-> TTY <-> TTY driver <-> TTY <-> program
a “TTY” is the program’s side of the pair

programs use it to:

    communicate with the terminal emulator by reading/writing bytes
    configure the TTY driver (more on the next page!)

Run tty fo see the current TTY!
the TTY driver is why Ctrl+C does the same thing relatively consistently

program: you press Ctrl+C, I send a signal!
well, unless the program tells me it wants the raw bytes!
some things the TTY driver is in charge of

(you might think “these are unrelated” and you’d be right)

    storing the terminal window’s size
    sending a SIGHUP signal when you close your terminal
    a basic mode for entering text called “canonical mode”
    pausing the output and confusing you when you press Ctrl+S
    tracking which process is in the “foreground” and sending what you type there
b0rk.jvns.ca
oops, should be fixed now, thanks! (minus some DNS caching issues which might take a while to resolve)