Lightweight dev tools.
Tags: programming, productivity, developer
Published: 2023-08-10 22:31:13

---
title: Lightweight dev tools.
published: true
description: Learning to live small.
tags: programming, productivity, developer
cover_image: https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y9k1z2do7k5qlfieemzy.jpg
---

I’ve been forcing myself to use a barely usable laptop for any couch coding I do because I have a puppy who likes to jump into my lap - regardless of whether there’s already something in it.

Usually I'd use a 15" MacBook Pro, but since both I and [my employer](https://alembic.com.au) would be pretty upset if it was damaged I've been using something with [a little lower stakes](https://laptoping.com/specs/product/lenovo-ideapad-100s-11/) that has been sitting unused on a shelf in my garage for quite a while.

It’s a bit of an interesting challenge and has forced me to re-examine some of my tool usage. I started by a minimal install of [Debian “bookworm”](https://www.debian.org/releases/bookworm/) with the [XFCE Desktop Environment](https://xfce.org/) which chews through much fewer resources than the default [GNOME 43 based environment](https://www.gnome.org/) (although more than [LXDE](https://www.lxde.org/) - but there still has to be room for aesthetics).

This is already a bit of a change because when I'm not using the MacBook Pro, I am using my desktop which has [Pop!_OS 22.04](https://pop.system76.com/) installed.

## Terminal emulator

I did find that XFCE’s terminal emulator was pretty slow, so I installed [Alacritty](https://alacritty.org/) - a lightweight terminal written in Rust. 

Alacritty doesn’t yet support ligatures, tabs or split panes - so be warned if that’s a show stopper for you. It does happily render [Nerd Font](https://www.nerdfonts.com/) symbols though.  Alacritty is so fast I also decided to make the switch from [iTerm2](https://iterm2.com/) on my mac.

## Shell environment

I’ve been using [oh-my-zsh](https://ohmyz.sh/) for years but over time more and more has been added to it (both by me and upstream) resulting in a great - but slow - experience.  Running it on a machine with so few resources was definitely not an option.

After a little research I came across [starship](https://starship.rs/) (also written in Rust) which is a “blazing-fast, and infinitely customizable prompt for any shell”. I deleted almost all of my `.zshrc`  and replaced it with `eval "$(starship init zsh)"`. I also had to manually add hooks for [`asdf`](https://asdf-vm.com/), [`direnv`](https://direnv.net/) and a couple of other tools that I had been relying on oh-my-zsh plugins for.

The result? Well I’m speechless. I had forgotten what it was like to have a near-instantaneous shell prompt.  I’ve switched my profile on all my machines to starship.

## Programming environment

I used to be a pretty heavy [Vim](https://www.vim.org/) user ([RIP Bram](https://groups.google.com/g/vim_announce/c/tWahca9zkt4?pli=1)), but when I started doing a lot of remote pairing with less experienced devs I realised that they were sometimes having trouble following along when I was driving.  Their experience was basically "click click click" _some text whizzes around the screen_.

So I made the switch to [Code](https://code.visualstudio.com/). I came for the accessibility and stayed for devcontainers, remote development and the language server protocol.  Again though, Code is a great tool but is built using web technologies and [Electron](https://www.electronjs.org/) and when loaded down with a full-suite of extensions it can feel sluggish on the most powerful of machines.

Here comes [Lapce](https://lapce.dev/); a "Lightning-fast and Powerful Code Editor" written in Rust (are you seeing a theme here?).  When they say "lightning-fast" they're not kidding.  Despite the website saying it's "pre-alpha" it has a surprisingly full feature set:

  * Tree-sitter based syntax highlighting
  * Remote development
  * Language server protocol
  * WASI-based plugin system

What's missing is mainly docs and plugins (and docs on how to write plugins).

The first codebase I opened was a Rust project and it's support for Rust is nothing short of incredible.  I guess it would be given that's where it originates.  It seemlessly integrated with `rust-analyser`, `cargo fmt`, etc and felt like a very mature offering.

Sadly, this isn't true for all languages.  I spend most of my days working on and with the [Ash project](https://ash-hq.org/) in [Elixir](https://elixir-lang.org/).  Whilst Lapce has syntax highlighting for Elixir there is [no language server plugin available yet](https://plugins.lapce.dev/search/elixir).  There are [at least](https://github.com/mayel/lapce-elixir-ls) [two](https://github.com/wingyplus/lapce-elixir) plugins in development, but given I can't figure out how to install them in my local editor to test them I can't speak to their quality.

I decided I can live without [elixir-ls](https://github.com/elixir-lsp/elixir-ls) when couching in return for having a usable editor.  When the plugin ecosystem and documentation matures I can see myself switching to using Lapce for my primary editor.

## Browser

For better or worse, I spend a lot of my time on the web.  Having a quick web browser is kind of important, but since I also seem to mostly write web applications I also need one that renders things in a conventional way.

This immediately rules out a bunch of lightweight browser options like [lynx](https://lynx.browser.org/) or [Dillo](https://www.dillo.org/).

I usually use [Firefox](https://www.mozilla.org/en-GB/firefox/new/) for general browsing and [Chromium](https://www.chromium.org/Home/) when I need the good dev tools.  I think I have to live with having Chromium installed for when I need it, but Firefox is just too weighty for this little machine.  I settled on [Falkon](https://apps.kde.org/falkon/) which is a nice balance between performance and standards.  It uses the Chromium renderer under the hood, so webpages usually look how I expect them to.  It is thankfully missing some much loved browser "features" such as submitting "http://localhost:4000" to a search engine rather than loading the page.

## Summary

Thanks for coming along on this little tour of lightweight dev tools.  I hope in my struggles to use a dumb old computer you have found something useful to speed up your computing life.