davideisinger.com

My personal website
Log | Files | Refs | README

veronicaexplains-net-sk5zao.txt (17153B)


      1 [1] Veronica Explains
      2 
      3   • [4]About
      4   • [5]FAQ
      5   • [6]Contact
      6   • [7]RSS
      7 
      8 [9]Sign in [10]Subscribe
      9 [11]intentional tech
     10 
     11 It's time to talk about my writerdeck
     12 
     13 [12] vkc
     14 
     15 [13]vkc
     16 
     17 23 May 2026 — 10 min read
     18 [14] Share
     19 A picture of a laptop with a tty screen running vim, the screen is filled with
     20 the words from a video script.
     21 
     22 tldr:
     23 
     24   • I installed console-only Debian on an old laptop (no desktop OS at all)
     25   • I added some packages to make it work better for writing:
     26       □ network-manager for connecting to hotspots while I'm away
     27       □ kmscon for custom fonts and more than 16 colors in the tty
     28       □ tmux for a nice status bar and rudimentary screen tiling, as well as
     29         acpi and light for battery and backlight details, respectively
     30       □ neovim as my editor and vim-vimwiki to give myself a personal wiki
     31       □ syncthing to sync and backup my work
     32 
     33 I have an attention problem.
     34 
     35 A couple of weeks ago, I decided to convert my old laptop into a [15]writerdeck
     36 , a dedicated writing device free from the distractions of the modern internet.
     37 
     38 Lots of folks build really elaborate offline devices for this, and I'd love to
     39 do that... someday. Right now I have no shortage of projects and the point is
     40 to get writing, so I used what I had: a six-year-old laptop which still runs
     41 great, has plenty of power, but isn't getting much use anymore.
     42 
     43 Crucially, this laptop has an excellent keyboard, and a matte screen, which
     44 makes it awesome to type on for long stretches, and functional enough in the
     45 daylight (I like to sit outside with my dog and write). It's also a [16]
     46 System76 Galago Pro (not sponsored), which means it's already Linux friendly
     47 and has great support in the kernel.
     48 
     49 Setting up a tty instead of a desktop
     50 
     51 Now, you could certainly just use a regular desktop OS and keep it offline,
     52 although that's easier said than done. I don't think you can fully remove the
     53 browsers from a modern Mac or Windows PC. At least not in a supported way.
     54 
     55 Of course, I'm a Linux user, and I have any number of options. I could have
     56 gone with a simple desktop or window manager and just not installed a browser,
     57 but I wanted something that really broke the desktop OS muscle memory and
     58 forced me into thinking about my words with intention.
     59 
     60 I opted for a tty-based setup, using [17]Debian (Trixie at the time of
     61 writing). Console only- no x11 or Wayland, no desktop getting in my way.
     62 
     63 Installing Debian is easy enough. I use the text-based installer mode, and for
     64 this writerdeck, I opted to skip full-disk encryption (there's nothing on this
     65 device that isn't going to be public anyway).
     66 
     67 Folks always tell me they get hung up on things because they don't set
     68 themselves up with sudo on Debian. If you're coming from Mint or Ubuntu or
     69 virtually any other desktop-oriented distro, this could trip you up. If you
     70 want to use sudo for admin tasks, skip adding a root password. That'll disable
     71 root and set you up as a sudo user.
     72 
     73 A Debian TUI installer screen showing the "set up users and passwords" dialog
     74 (for setting a root password).Leave this blank if you want to use a sudo user!
     75 A lot of folks don't know about this quirk and get into trouble if they're
     76 coming from other distros.
     77 
     78 On the desktop setup screen, I chose to remove all desktop features, because
     79 again, I want this thing to be a minimal device. Just me and the words, no GUI
     80 getting in my way.
     81 
     82 A Debian TUI installer screen showing the "software selection" dialog (for
     83 installing a desktop environment).I removed the selection for "Debian desktop
     84 environment" and "GNOME" here. This way it's just a tty.
     85 
     86 When things wrap up, you'll be greeted with a bland console login. Perfect
     87 place to get started.
     88 
     89 A Debian tty login prompt. Black background with a login prompt in small white
     90 text.It's boring. Perfect.
     91 
     92 Installing network-manager
     93 
     94 After signing in for the first time and making sure I was up-to-date with a
     95 quick sudo apt update and a sudo apt upgrade, I chose to replace the regular
     96 network stack with the network-manager package. Mainly to get access to the
     97 very good curses tool nm-tui for connecting to networks.
     98 
     99 nm-tui is a thousand times easier than editing config files for setting up
    100 network devices. And while I will be working mostly offline with this device
    101 when I'm away from home, I do appreciate the ability to connect it to the
    102 network to back up files should the need arise.
    103 
    104 After installing network-manager with sudo apt install network-manager, you can
    105 use nm-tui to scan for available Wi-Fi networks and get hooked up. Depending on
    106 your hardware, you might also have WAN access here. Pretty cool.
    107 
    108 A network manager TUI screen. It's a curses screen that offers a small amount
    109 of network configuration options.Having a TUI for networking is a nice
    110 quality-of-life improvement.
    111 
    112 Installing neovim and kmscon
    113 
    114 I couldn't wait any longer, I installed neovim as soon as I could with sudo apt
    115 install neovim. I didn't want to edit with nano. Nothing personal, I'm just a
    116 vim user all the way now.
    117 
    118 Normally I use traditional vim but I opted for neovim as I'm trying to get to
    119 know it a bit more.
    120 
    121 Then, I installed kmscon, which for Debian Trixie needed to be added from
    122 backports.
    123 
    124 First, I updated my Debian source list by editing the file at /etc/apt/
    125 sources.list to add the following two lines:
    126 
    127 deb http://deb.debian.org/debian/ trixie-backports main contrib non-free non-free-firmware
    128 deb-src http://deb.debian.org/debian/ trixie-backports main contrib non-free non-free-firmware
    129 
    130 A quick sudo apt update and then I can simply run sudo apt install -t
    131 trixie-backports kmscon. This will install the kmscon package from backports,
    132 as well as its dependencies, and set it to automatically start on boot. Next
    133 reboot, you'll see the familiar tty, but now it's scalable with ctrl-plus and
    134 ctrl-minus, like most modern web browsers.
    135 
    136 From here, I have a totally functional writerdeck. I could be done here and be
    137 reasonably satisfied with an offline, pleasant writing experience. But I wanted
    138 a few more nicities which I've grown accustomed to.
    139 
    140 tmux for multiplexing and a pretty status bar
    141 
    142 Next, I installed tmux for basic terminal tiling and a pretty status bar. This
    143 is packaged for Debian (and virtually everyone else), and is installed with
    144 sudo apt install tmux.
    145 
    146 I also installed acpi for battery details, and light to control the screen
    147 backlight. You can install these at the same time with sudo apt install acpi
    148 light. I set these up in my .tmux.conf file, which is kept in your home
    149 directory. Here's how I used them.
    150 
    151 ACPI for battery readouts
    152 
    153 Once the acpi package is installed, you should be able to see your battery with
    154 acpi -b (assuming your laptop has a battery which is detected with acpi, which
    155 has worked so far on every laptop I've tried in my house).
    156 
    157 So, to get the specific percentage and nothing more, you can pipe acpi -b into
    158 grep like so:
    159 
    160 acpi -b | grep -m1 -o -P '.{0,2}%'
    161 
    162 This grep is a bit hard to understand, so let's break it down:
    163 
    164   • -m1 says stop reading the file after one line. I did this because some
    165     laptops I've used have multiple batteries, and I only care about the
    166     primary battery. You can probably leave this out if acpi -b only returns a
    167     single line.
    168   • -o prints only the matched parts of the line. I don't want a large printout
    169     with the remaining time. You might!
    170   • -P interprets the pattern as a Perl-compatible regular expression. Then '.
    171     {0,2}%' gets us the percent sign and the two numbers preceding the percent.
    172     (This won't show "100%" but I can live with that, because this laptop
    173     doesn't get there anymore.)
    174 
    175 I wanted to replace the default details in the tmux status bar with a battery
    176 readout, so I do so with the following in my .tmux.conf:
    177 
    178 # give me a battery readout instead of the time
    179 set-window-option -g status-right "#(acpi -b | grep -m1 -o -P '.{0,2}%')"
    180 
    181 Light for brightness
    182 
    183 Next, we can use the very simple light command we installed earlier to control
    184 the brightness. On my laptop, F8 and F9 have brightness indicators printed on
    185 the keys, so it's a perfect fit.
    186 
    187 light -U 10 decreases the brightness by ten percent, and light -A 10 increases
    188 it.
    189 
    190 So, to bind F8 and F9 to decrease/increase brightness control, I simply add
    191 this to my .tmux.conf:
    192 
    193 # keybinding for brightness
    194 bind -n F8 run-shell 'light -U 10' # decrease
    195 bind -n F9 run-shell 'light -A 10' # increase
    196 
    197 Now, next time I start tmux, I'll have brightness controls. Very neat!
    198 
    199 Additional tmux customization
    200 
    201 Lastly, I like the status line for tmux at the top of the screen, because
    202 neovim puts a status line at the bottom of the screen. That's achieved by
    203 adding set -g status-position top to the .tmux.conf file.
    204 
    205 Also, I have a habit of specifying the color. I think it's green by default but
    206 I set it anyway (I might change it in the future, who knows) with set -g
    207 status-style bg=green.
    208 
    209 So, my final tmux.conf looks like this:
    210 
    211 # bar position and color
    212 set -g status-position top
    213 set -g status-style bg=green
    214 
    215 # keybinding for brightness
    216 bind -n F8 run-shell 'light -U 10' # decrease
    217 bind -n F9 run-shell 'light -A 10' # increase
    218 
    219 # give me a battery readout instead of the time
    220 set-window-option -g status-right "#(acpi -b | grep -m1 -o -P '.{0,2}%')"
    221 
    222 This isn't a tmux lesson, but by default, to do a split, you use Ctrl-B to
    223 break out of regular mode and into the tmux command mode, and then the % key to
    224 split vertically, or " to split horizontally. Ctrl-B, then an arrow will move
    225 your focus between panes.
    226 
    227 Someday, I'll do a formal tmux lesson. Moving on!
    228 
    229 neovim and vimwiki
    230 
    231 I know a lot of folks won't want to use neovim or vim, opting instead for emacs
    232 or helix or micro or nano or blammo or something else I didn't mention (but
    233 someone's about to).
    234 
    235 That's great. I'm happy for you. I'm a vim user though, so that's what I set
    236 up.
    237 
    238 neovim includes some reasonably great colorschemes which you can try out with
    239 the :colorscheme option. I chose blue, which fit my retro vibe just fine, but
    240 you could pick anything you want or even write one yourself from scratch.
    241 
    242 I added that to my .config/nvim/init.vim file with colorscheme blue, and I also
    243 added set linebreak so that way words would wrap to the next line (I don't
    244 normally do this on my desktop but this thing's one job is writing).
    245 
    246 Lastly, I set up vimwiki, which I already covered in a separate [18]blog post.
    247 The only thing that's changed is instead of installing vimwiki with a plugin,
    248 on Trixie it's packaged, so you can install it with sudo apt install
    249 vim-vimwiki.
    250 
    251 Installing Syncthing
    252 
    253 I set up syncthing according to the [19]Syncthing docs, which are pretty good
    254 and I won't repeat those too much here.
    255 
    256 I set up syncthing to connect my writerdeck's vimwiki folder to my server's
    257 writing folder, which is a subdirectory inside another, more private vimwiki
    258 setup. I do it this way so that if there's sensitive notes in my desktop
    259 vimwiki, they don't sync to the writerdeck. If I had encryption on this device,
    260 I wouldn't mind that though, and I might set up password-based LUKS encryption
    261 just to gain access to my vimwiki diary on the writerdeck.
    262 
    263 The one place where I strayed from a stock syncthing setup is that because I
    264 don't have a desktop with a traditional browser, I had to set my syncthing web
    265 GUI to be [20]listening on all addresses instead of just 127.0.0.1. I don't
    266 love this approach, but again, this thing has nothing private on it. A better
    267 way would be to set up a SOCKS proxy and connect that way, but that's a topic
    268 for a future post.
    269 
    270 Setting it up to autologin
    271 
    272 The last thing I did to make this writerdeck my own was to set up automatic
    273 login.
    274 
    275 I want to be able to open this up and start writing quickly- autologin is a
    276 simple way to get there.
    277 
    278 Autologin with kmscon
    279 
    280 Because I installed kmscon, this is pretty easy, just update the (gasp) systemd
    281 service with sudo systemctl edit [email protected].
    282 
    283 Then, I just added the following:
    284 
    285 [Service]
    286 ExecStart=
    287 ExecStart=/usr/bin/kmscon --login -- /bin/login -f my_username_goes_here
    288 
    289 This tells kmscon to start what comes after the -- after --login. In my case,
    290 that's the default /bin/login program with the parameter -f and then my
    291 username.
    292 
    293 Launching tmux on boot
    294 
    295 After kmscon signs me in, I want tmux to automatically launch into vimwiki. But
    296 only if I'm on the main tty (the default virtual terminal).
    297 
    298 I can do this easily by adding a small bash if/then to my .bashrc:
    299 
    300 # Launch tmux if we aren't already running tmux and we're in the default tty
    301 if [ -z "${TMUX}" ] && [ $(tty) == "/dev/pts/0" ]; then
    302         exec tmux new-session -d 'vim -c VimwikiIndex' \; attach
    303 fi
    304 
    305 This works by checking to make sure we're not in tmux already (which would be
    306 recursive and bad), and it also makes sure we're in the first virtual tty. If
    307 those two conditions are met, then it launches a new tmux session with the
    308 command vim -c VimwikiIndex (which tells vim to connect to the Vimwiki index).
    309 It then attaches to that session.
    310 
    311 After using it for a few projects, I love it.
    312 
    313 I've had this thing going for a week or so now, and I've used it to write this
    314 blog post, the script for the companion video, and another future script I'm
    315 working up right now. And it's awesome.
    316 
    317 I may extend this idea with a spell checker, or perhaps set up a "writerdeck
    318 terminal" in my workspace using an old 486, to really bring myself back to a
    319 more intentional experience (with an even better keyboard!).
    320 
    321 The point is to write more, and to be less distracted doing so. I have always
    322 struggled immensely with the fact that the browser nags at me. I get
    323 notifications about apps needing my attention. My music player tells me the
    324 next song we're playing. It's all very convenient, and very distracting.
    325 
    326 I'm trying to be more intentional with my tech choices. I want devices that do
    327 one thing really well, and that when I'm done with that one thing, I can put
    328 them away, and do something else. I don't want everything to follow me around
    329 everywhere.
    330 
    331 If that's you, maybe you would benefit from a writerdeck. For me, it's been
    332 great. :)
    333 
    334 Update: This got a lot of attention and I wrote a [21]follow-up blog post
    335 answering questions from the internet.
    336 
    337 Read more
    338 
    339 [22] It's me, holding a laptop with a blue screen and lots of text in front of
    340 my face. The words "writerdeck FAQ" are superimposed to my side.
    341 
    342 Writerdeck: FAQ
    343 
    344 Folks have been asking me questions about my writerdeck setup. Here, I attempt
    345 to answer them.
    346 
    347 28 May 2026
    348 [23] A close-up of my smiling face, holding a phone with the GrapheneOS logo on
    349 it and the word "FAQ".
    350 
    351 Living with GrapheneOS: FAQ
    352 
    353 Over the last three years I've had a lot of folks ask me questions about using
    354 GrapheneOS. Let's answer them!
    355 
    356 04 Mar 2026
    357 [24] The four members of The Stop Bits sitting on a couch. Superimposed is the
    358 date "Feb 14, 2026" and the words "VCF SoCal // Orange, CA".
    359 
    360 Upcoming performance + quick housekeeping note
    361 
    362 I will be at VCF SoCal this Saturday, February 14, 2026, in Orange, CA, US!
    363 
    364 09 Feb 2026
    365 [25] A heavily dithered screenshot of the front page of veronicaexplains.net,
    366 which says "subscribing is awesome and so are you", and a "subscribe" field
    367 with an example email address in it.
    368 
    369 Wait, veronicaexplains.net?
    370 
    371 My website is now using Ghost instead of WordPress, and that means you can get
    372 me in your inbox. Everyone loves emails, right?
    373 
    374 05 Feb 2026
    375 Veronica Explains
    376 
    377   • [26]Sign up
    378   • [27]"AI" disclosure
    379   • [28]FAQ
    380 
    381 Powered by [29]Ghost
    382 
    383 Veronica Explains
    384 
    385 Linux mom, vintage tech enthusiast, nerdy musician.
    386 
    387 [30][                    ] Subscribe Email sent
    388 
    389 [38]Mastodon verification link [39]GoToSocial verification link
    390 
    391 References:
    392 
    393 [1] https://veronicaexplains.net/
    394 [4] https://veronicaexplains.net/about/
    395 [5] https://veronicaexplains.net/faq/
    396 [6] https://veronicaexplains.net/contact/
    397 [7] https://veronicaexplains.net/rss/
    398 [9] https://veronicaexplains.net/my-first-writerdeck/#/portal/signin
    399 [10] https://veronicaexplains.net/my-first-writerdeck/#/portal/signup
    400 [11] https://veronicaexplains.net/tag/intentional-tech/
    401 [12] https://veronicaexplains.net/author/vkc/
    402 [13] https://veronicaexplains.net/author/vkc/
    403 [14] https://veronicaexplains.net/my-first-writerdeck/#/share
    404 [15] https://www.writerdeck.org/?ref=veronicaexplains.net
    405 [16] https://system76.com/?ref=veronicaexplains.net
    406 [17] https://debian.org/?ref=veronicaexplains.net
    407 [18] https://veronicaexplains.net/vimwiki-101/
    408 [19] https://docs.syncthing.net/intro/getting-started.html?ref=veronicaexplains.net#getting-started
    409 [20] https://docs.syncthing.net/intro/getting-started.html?ref=veronicaexplains.net#getting-started
    410 [21] https://veronicaexplains.net/writerdeck-faq/
    411 [22] https://veronicaexplains.net/writerdeck-faq/
    412 [23] https://veronicaexplains.net/grapheneos-faq/
    413 [24] https://veronicaexplains.net/2026-vcf-socal-announcement/
    414 [25] https://veronicaexplains.net/launching-ghost-on-new-domain/
    415 [26] https://veronicaexplains.net/my-first-writerdeck/#/portal/
    416 [27] https://veronicaexplains.net/ai-disclosure/
    417 [28] https://veronicaexplains.net/faq/
    418 [29] https://ghost.org/
    419 [38] https://linuxmom.net/@vkc
    420 [39] https://explains.social/@veronica