NAME
levi - Levi van Daalen, software engineer from Dordrecht
SYNOPSIS
DESCRIPTION
I'm Levi, a software engineer from Dordrecht. At Notive I mostly write PHP, on eCommerce integrations with platforms like Shopify. At home it's mostly Zig, and my main project there is Oubliette, a dungeon crawler that's in the making.
I've played the trumpet since I was nine, which is how a language for writing music ended up on this page. I also really like taking photos, with my Olympus E-P7; the newest ones are under FILES.
This page is a man page. Scroll with j and k, search with /, or press q for a shell.
PROJECTS
- doka
- A small, fast photo editor for Linux that Claude Code can drive live. Edits never touch the original, and an export keeps every bit of the camera's metadata. See doka(1).
- oubliette
- My main project: a first-person crawl up out of the pit a village throws its dead into, made in Zig with raylib. It's in the making. See oubliette(6).
- codetta
- A small compiled language for writing music as code. A .coda file compiles to MIDI, and the editor plays it right in the browser; try the one under EXAMPLES. See codetta(1).
- bebop
- A web framework and ORM for Zig, inspired by Symfony. I mostly wrote it to learn how an ORM works, and the SQL underneath. See bebop(3).
- nvim
- My Neovim config, built on lazy.nvim. See nvim(5).
- json-parser
- A JSON parser in C, written to really understand C and managing memory by hand. See json-parser(3).
- sudoku
- Sudoku in the terminal, written in C++ to learn how a terminal app does its own rendering. See sudoku(6).
- wcpp
- wc(1), rewritten in C++ to learn how to write a command-line tool. See wcpp(1).
- InterpreterInCsharp
- An interpreter in C# for a small scripting language, written to learn how an interpreter works, with Thorsten Ball's Writing An Interpreter In Go as a guide. See InterpreterInCsharp(1).
- xadrez
- An album I made with friends during covid, as IGNIS: seven songs, with me on trumpet, flugelhorn and synth. See xadrez(7).
EXAMPLES
codetta play hello.coda open in the editor
tempo 92 time_signature 4/4 chord Amin = [A3 C4 E4] chord Fmaj = [F3 A3 C4] chord Cmaj = [G3 C4 E4] chord Gmaj = [G3 B3 D4] phrase changes = Amin.whole Fmaj.whole Cmaj.whole Gmaj.whole phrase roots = A2.whole F2.whole C3.whole G2.whole phrase hook = E5.quarter D5.eighth C5.eighth D5.half C5.quarter B4.quarter A4.half E5.quarter G5.quarter E5.quarter D5.quarter C5.half B4.half dynamic @0 mp dynamic @2 crescendo to f over 2 bars section intro = track harmony: changes arp x2 track bass: roots section verse = track lead: hook track chords: changes track bass: roots song = intro verse * 2
ENVIRONMENT
- LANG
- zig, c, typescript, python, php, flutter
- EDITOR
- nvim
- SHELL
- zsh
- OS
- cachyos, macos
- WM
- hyprland
- TERM
- kitty
- LIBS
- raylib, react, wasm, tone.js, libvips
- WEB
- laravel, vue, next.js, payload, vite
- CAMERA
- olympus e-p7



