Published on : 2026-06-02 10:16
This is just something I wanted to make after seeying
VeronicaExplains's post about how she created her own
writer deck[1] using Debian and an old laptop she had.
(HTM) It's time to talk about my writerdeck - Veronica Explains.net
She also has a very nice video showing off her writer deck at:
(HTM) Writerdeck: my tty-only laptop for maximum focus (YouTube)
I really like her choice regarding tmux, vim, vimwiki and colors
but I really don't think Debian is the best option for a writer
deck as it installs some stuff you really don't need just for
text and distraction free writing. With Arch, we'll install only:
* a minimal system,
* tmux,
* vim,
* vimwiki[2],
* kmscon,
* syncthing,
* a nice font like JetBrains Mono,
* openssh and
* rsync as another backup option
Why I think my approach is better?
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
First of all, less bloat. I'm using Arch, btw! I added a few
improvements like autosaving files, a few useful keybindings for
vim and vimwiki and enabling the ssh daemon so you can use the
writer deck from another device. Half of this post was written
from my android phone connected to my WireGuard VPN at home,
logged in via ssh into the writer deck and, because we are using
tmux, it's like I'm using the laptop/writerdeck. Same keybinds,
same files and same colors. The only difference is the screen
size :). On my phone, I am using the Android app called Termius[3]
Links
‾‾‾‾‾
(HTM) [1]writerdeck
(HTM) [2]vimwiki
(HTM) [3]Termius
Screenshots and videos
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
If you like what you see in the screenshots and videos below of
my take on a writer deck using Arch Linux read on.
Screenshots
‾‾‾‾‾‾‾‾‾‾‾
(IMG) This post in Vimwiki
(IMG) Vimwiki Index opened in vim which is opened in tmux
(IMG) Vimwiki Diary Index
(IMG) The writer deck on my Android phone
Videos
‾‾‾‾‾‾
(BIN) Arch Linux writer deck boot ( Inside vm )
(BIN) Vimwiki features: tables and diary
These recordings are made inside a VM with the same settings.
Enough small talk, time for some commands :-)
Install a minimal Arch linux
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
Installing Arch Linux can be a pain but if you know what you're
doing it is quite easy. With just a few commands you have a
minimal system installed and ready to go.
(DIR) 🐧 Install Arch Linux Tutorial
You can follow the guide linked above to install a minimal Arch
on your device with this small modification: when you run the
pacstrap -K command install only what's needed for a writer deck
like the list below:
pacstrap -K /mnt base linux linux-firmware base-devel vim \
grub efibootmgr networkmanager tmux kmscon syncthing \
ttf-jetbrains-mono-nerd git rsync
As you can see I chose to install only the:
* base - minimal Arch userspace. Contains essential tools and
libraries required for a functional system.
* linux - the standard Arch Linux kernel.
* linux-firmware - firmware blobs needed by hardware such as
Wi-Fi adapters, GPUs, network cards, Bluetooth devices, etc.
* base-devel - development toolchain and build utilities
(e.g., gcc, make, patch, fakeroot).
* vim - the text editor which we're gonna use with vimwiki
* grub - bootloader that loads Linux at startup
* efibootmgr - utility for managing UEFI boot entries from Linux
Usually used when installing GRUB on UEFI systems.
* networkmanager - Provides the nmcli command-line tool to help
us get online for syncing.
* tmux - terminal multiplexer. Lets you create persistent
terminal sessions and split windows
* kmscon - Kernel Mode Setting Console. A modern replacement for
the Linux virtual console with better Unicode and font support.
It will provide a graphical-looking text console without
X11/Wayland for our writer deck.
* syncthing - peer-to-peer file synchronization service. Keeps
folders synchronized between computers without relying on a
central cloud provider.
* ttf-jetbrains-mono-nerd - JetBrains Mono Nerd Font. It includes
programming ligatures plus Nerd Font glyphs/icons used by many
terminal applications and prompts.
* git - needed to clone vimwiki repo. Also useful if you plan on
backing up your notes in a repository.
* rsync - optional backup
Once installed and rebooted you can use nmtui to connect to the
internet via Wi-Fi. If you plan on using a wired connection from
time to time you can skip this step.
Configure the writer deck
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
Here you'll find the alias I use, config and keybinding for vim
and config files for tmux, kmscon and syncthing.
Feel free to use and improve.
Only 1 alias needed
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
Edit your .bashrc file and add the code below:
# Vimwiki alias set to ww
alias ww='tmux new-session -A -s vimwiki "vim +VimwikiIndex"'
# Launch vimwiki at login
ww
As you can see ww will launch vim at the vikwiki index page
inside tmux. And since we have the ww alias we also run it from
this file. This way, when you login the vimwiki index page will
open in a tmux session called vimwiki.
tmux
‾‾‾‾
Create a tmux.conf inside the ~/.config/tmux/ directory with the
following content:
# Green bar with black text at the top
set -g status-position top
set -g status-style bg=green,fg=black
# Nothing on the left of the bar but we have date, time and
# battery percentage on the right
set -g status-left ""
# Make sure your battery is BAT0
set -g status-right "%d %b %Y %H:%M
#(cat /sys/class/power_supply/BAT0/capacity)%"
set -g default-terminal "tmux-256color"
# Modify keybindings: Ctrl + A will be the prefix
unbind C-b
set -g prefix C-a
bind-key C-a send-prefix
# Splitting windows
unbind %
bind | split-window -h -c "#{pane_current_path}"
unbind '"'
bind - split-window -v -c "#{pane_current_path}"
# History in tmux
set -g history-limit 50000
vim
‾‾‾
Inside your home folder create the .vimrc file and paste this in:
"Vimwiki requirements
set nocompatible
filetype plugin on
syntax on
"Set mapleader to SPACE
let mapleader = " "
"SPACE + cd opens netrw
nnoremap <leader>cd :Ex<CR>
"SPACE + dt creates diary note for today
nnoremap <leader>dt :VimwikiMakeDiaryNote<CR>
"SPACE + dg generates diary entries links in diary index
nnoremap <leader>dg :VimwikiDiaryGenerateLinks<CR>
"CTRL + up/down arrows browses diary entries
"Set colorscheme to default 'blue' or 'peachpuff' (bright)
colorscheme blue
nnoremap <leader>dd :colorscheme peachpuff<CR>
nnoremap <leader>dn :colorscheme blue<CR>
"Auto save file when text is modified in Normal Mode or the
"moment you press Esc to exit Insert Mode
autocmd TextChanged,InsertLeave * silent! update
It's a minimal config which sets the blue theme, you can
SPACE + cd to open up netrw and autosaves your documents. Make
sure to checkout all of vim's themes by typing :colorscheme + TAB
and choosing your prefered one. I prefer blue both day and night
somewhere outside and in need of a light theme I prefer peachpuff.
vimwiki
‾‾‾‾‾‾‾
Installing vimwiki is easy. Just a git clone inside the right
folder and we're done. No vim plugin manager!
git clone https://github.com/vimwiki/vimwiki.git \
/.vim/pack/plugins/start/vimwiki
vim -c 'helptags ~/.vim/pack/plugins/start/vimwiki/doc' -c \
quit
That's it. open vim (or use the alias ww created earlier) and
press SPACE + w + w. You should be asked to create the vimwiki
folder inside your home!
kmscon
‾‾‾‾‾‾
Setup kmscon to be the default TTY with the font we chose earlier:
JetBrains Mono. Edit /etc/kmscon/kmsconf.conf:
font-name=JetBrainsMono Nerd Font Mono
font-size=16
Let's also enable kmscon on TTY1.
sudo systemctl disable --now getty@tty1.service
sudo systemctl enable kmsconvt@tty1.service
Enable kmscon only on TTY1. Just in case anything breaks you can
still use your writer deck and fix things from another TTY. You
can switch to another TTY by pressing CTRL + ALT + F keys.
Example for TTY2:
CTRL + ALT + F2
Autologin
‾‾‾‾‾‾‾‾‾
sudo systemctl edit kmsconvt@tty1.service
Add this code above the line:
[Service]
ExecStart=
ExecStart=/usr/bin/kmscon --login --vt 1 --term xterm-256color
-- /bin/login -f sava
Replace sava with your username.
At this point a reboot is necessary. Reboot and see if kmscon has
taken over TTY1, your user is logged in and you have that awesome
JetBrains Mono Nerd font.
syncthing
‾‾‾‾‾‾‾‾‾
Syncthing is setup via the web interface which is accesible only
via localhost. To make the interface available from another
computer you have to edit the file and make it listen on all
interfaces by editing ~/.local/state/syncthing/config.xml and set
the address tag under gui to 0.0.0.0:
<gui enabled="true" tls="false" sendBasicAuthPrompt="false">
<address>0.0.0.0:8384</address>
</gui>
This way you can set up syncthing by using another computer that
has a browser :-). It's the only thing in this tutorial that
requires using another computer.
git
‾‾‾
Not much to setup for git. You can save your credentials and add
some aliases to make it easier to pull and push to the vimwiki
repo (if you choose to backup your vimwiki to a repository -
disregard git if you plan on using syncthing). The 2 posts below
have some great info about organizing your .bashrc and using
aliases:
(DIR) Using aliases for complex and daily terminal commands
(DIR) How I Organize My .bashrc with Imports
Other things you can do
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
SSH into the writer deck
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
I also installed openssh and enabled sshd. This way I can login
to the writer deck from another computer and continue my work
with the same settings, colors, keybindings and notes.
sudo pacman -S openssh
sudo systemctl enable --now sshd
Use rsync instead of syncthing or git
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
Rsync is also an awesome tool that you can use to sync your
notes/vimwiki between devices. You can add cronjobs to run rsync
from time to time or create an alias and run it whenever you want
to sync the vimwiki folder.
sudo pacman -S rsync
rsync -vr --update --delete -e ssh ~/vimwiki/ \
user@other-server:/path/on/other-server/
This will update all files if newer and also delete files no
longer present on the writer deck. Perfect sync :D
Setup SSH Keys
‾‾‾‾‾‾‾‾‾‾‾‾‾‾
If you plan on using rsync you'll have to enter the password for
the remote server every time you run rsync. You can setup ssh
keys and avoid passwords:
ssh-keygen
When prompted for a passphrase, press Enter twice to leave it
blank. Leaving it blank allows completely password-less access.
Then copy your ssh key to the other server with:
ssh-copy-id user@other-server-ip
Wow, this really is a long post. I tried explaining every step
the best way I can. Hope somebody reads it :-) ...
(DIR) Back to my phlog