Andrey Listopadov

Projects that I made or worked on

I do a lot of stuff, and that’s primarily the reason why I decided to create this blog, so I could keep my thoughts a bit more organized and occasionally write about stuff I’ve built. Below are some projects of mine in arbitrary order, some of which I consider finished, and some of which are still in the phase of active development. You can think of this as a portfolio of sorts if you want, though I wouldn’t call it that.

Libraries

Fennel

  • fennel-proto-repl-protocol - a protocol powering fennel-proto-repl in the fennel-mode Emacs package.
  • async.fnl - A core.async port for Fennel.
  • fnl-http - a clj-http-inspired HTTP/1.1 client with asynchronous interface through async.fnl.
  • fennel-test - a Clojure-inspired unit testing library for Fennel.
  • json.fnl - JSON parser with support for custom encoders and NULL handling.
  • uuid.fnl - UUIDv4 generator
  • reader.fnl - create streams for reading data.
  • lazy-seq - lazy sequence manipulation library for Fennel and Lua.
  • itable - immutable table library for Lua and Fennel.
  • fennel-cljlib - a general-purpose library for the Fennel language that brings functions and macros from Clojure’s core namespace. It integrates both lazy-seq and itable to provide an experience very similar to what you can get from Clojure.
  • cfn - write C functions directly in Fennel source code. deprecated
  • fennel-async - an experimental library for asynchronous programming in Fennel. deprecated (in favor of async.fnl).
  • with-debugger - a (proof of concept) step debugger for Fennel. deprecated
  • fennel-conditions - CL’s condition system for Fennel. deprecated.
  • fennel-defn - Clojure-like defn macro for Fennel. deprecated (merged into fennel-cljlib)

Utilities

Lua

Clojure

Games

Most of my games can be found at andreyorst.itch.io.

  • Brick Game with a Twist - an entry to the first Fennel game jam.
  • Game1 - a small demo of a platformer I tried to make during my personal game jam challenge.
  • Game3 - an attempt at making a shoot-em-up game in TIC-80.

Tech

These are not games per say, just some projects I made in game engines.

Text editors

Emacs

My main text editor, which I use both to write code, this blog, notes, agenda, mail, and other stuff. My configuration is quite extensive, and I’m trying to extract useful stuff from it into packages:

  • isayt.el - indent s-expressions as you type. Basically does what the name says.
  • region-bindings.el - not to be confused with region-bindings-mode. This is another implementation of the same feature, which works better for my use cases. It was a part of my config for a long time, but I decided to move it into a separate package.
  • common-lisp-modes.el - a mode for enabling common modes for various Lisps.
  • blog.el - helper package for working with this blog.
  • fennel-mode - major mode for the Fennel language. I’m a co-maintainer of this package.
  • require-fennel.el - extend Emacs with Fennel.
  • gnome-proxy.el - monitors GNOME Proxy settings and updates required variables. deprecated
  • infinite.el - experimental windowing system with infinite workspace. deprecated
  • ob-fennel - Org Babel support for the Fennel language. deprecated (merged to fennel-mode)

Kakoune

I’ve used this text editor for some time, heavily configured it, and developed this set of plugins over time:

Vim

I’ve used Vim (and NeoVim) for a very long time, and it was my first experience with a hackable text editor. The following plugins were originally meant for personal use, but I’ve published them anyway.

Other stuff

There are more projects I made, mostly for fun:

  • GRScheme - a small scheme-like interpreter in Rust.
  • time-control - a CLI app I made as a practice with GraalVM, and used for a while to keep track of how much time I spent on various activities. It was built in a rush, so it’s not the greatest example of my Clojure skills.
  • CljLox - an interpreter from the first half of the Crafting Interpreters book implemented in Clojure. It features a fully immutable and extendable parser, tokenizer, and interpreter.
  • ZigLox - a bytecode VM from the second half of the Crafting Interpreters book implemented in Zig.

I also post some of my music videos on YouTube, mainly covers, but I try to create original music as well.

I have a few Telegram channels, one for my guitar endeavors, and one for my attempts at making pixel art.