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-replin the fennel-mode Emacs package. - async.fnl - A
core.asyncport 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
NULLhandling. - 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-seqanditableto 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
defnmacro for Fennel.deprecated(merged into fennel-cljlib)
Utilities
Lua
- lua-inst - A simple implementation of ISO 8601 date parser for Lua.
- interpolation.lua - a small string interpolation library providing Python-like f-strings.
- ImmutableRedBlackTree.lua - a copy-on-write immutable red-black tree implementation.
- reduced.lua - library to terminate
reduceearly.
Clojure
- pipeline-extras - extra functions for clojure.core.async that provide a fix for the ASYNC-163 bug in the
pipeline-asyncfunction. - cheat-json - cheating JSON parser.
- braille-plot - plot things using Braille fonts.
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.
- - basic raycasting engine in ClojureScript. Post link.
- LÖVE Raymarching - an example implementation of the raymarching algorithm done in Fennel language using LÖVE2D game engine. Post link.
- LÖVE F.A.B.R.I.K. - implementation of Forward and Backward Reaching Inverse Kinematics algorithm in Fennel using LÖVE game engine.
- - implementation of the WFC algorithm for world generation in ClojureScript. Post link.
- AABB Slopes - implementing slopes in AABB collisions.
- PI-Physics - computing PI via perfectly elastic collisions
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:
- plug.kak - a plugin manager for Kakoune.
- fzf.kak - a fzf integration plugin.
- smarttab.kak - Vim’s smarttab feature.
- powerline.kak - a status line plugin with themes and contextual behavior.
- langmap.kak - a plugin to toggle keyboard layout for insert mode only.
- pmanage.kak - plugin to spawn and manage background processes.
- tagbar.kak - a code outline view with Ctags.
- kaktree - an integrated file tree explorer with Tmux support.
- base16-gruvbox.kak - unofficial base16 variant of gruvbox color theme.
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.
- SimpleSnippets.vim - a small and fast snippet manager and template engine.
- SimpleClangFormat.vim - a clang-format integration plugin.
- SimpleWorkspaces.vim - Visual Studio Code-inspired workspaces for Vim.
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.