I gave a bit of my time today, to an attempt at packaging Starship for Guix. After having it on Nix for a while now, since it was a simple to setup prompt, with very sane defaults.

Simple to setup as just adding starship.enable = true; to the home configuration. Little did I know, this little maneuver was gonna cost me over 80k lines of Rust. The binary is almost the size of the entirety of Emacs-nox, with somewhere close to 700 transitive dependencies.

I knew it was a nontrivial Rust program, but never really realized, just how very nontrivial. Well, until I went to try and package it, since packaging brings out the truth from a piece of software.

I gave up after a few version collisions and such, which the automatic importer didn’t manage to solve. Not because I’d give up so easily, but because I reconsidered if it was really worth it. Am I really using all of this? Do I need to be notified that the directory I am in contains a C source file and immediately see the version of the compiler? No, I said to myself. So, I inspected how the prompt generation works, read through the manual, and rolled my own fairly quickly with a bit of help from a very convenient website.

=> Bash Prompt Generator

Obviously I don’t want to put a big block of Shell gibberish into my config, so I bound a few variables and it’s immediately quite a bit nicer and understandable.

(let* ((default-color "\\[\\e[0m\\]")
       (color
        (lambda (color text)
          (string-append
           (case color
             ((red) "\\[\\e[91m\\]")
             ((blue) "\\[\\e[96m\\]")
             ((pink) "\\[\\e[95m\\]")
             ((salmon) "\\[\\e[38;5;218m\\]")
             ((green) "\\[\\e[92m\\]"))
           text default-color)))
       (hostname "\\H")
       (pwd "\\w")
       (exit-status "$?")
       (jobs "\\j")
       (prompt "\\$")
       (git-branch "$(git branch 2>/dev/null | grep '\"'\"'*'\"'\"' | colrm 1 2)"))
  (mixed-text-file
   "bashrc-ps1"
   "PS1='\\n\\n"
   (color 'red hostname) "@" (color 'blue pwd) "\\n"
   "[" (color 'pink exit-status) "] {"
   (color 'salmon jobs) "} " (color 'green git-branch)
   "\\n" prompt " "
   "'"))

Going from this:

michal_atlas in 🌐 hydra in dotfiles on  master [!⇡] 
❯ 

To this:

hydra@~/cl/dotfiles
[127] {3} master
$ 

Obviously both with a bit of colour.

hydra@~/cl/dotfiles
[127] {3} master
$

The 127 and the 3 signify the exit code and number of background jobs respectively.

=> Song

The message today is not about bloat, please don’t take it that way, it’s about reconsidering what you need and want.

I am convinced there are people with so many confusing environments, platforms and projects, that Starship is entirely worthwhile.

But I am not that someone, and these 189 characters to me personally sufficiently replace the prior 2’281’795.

PS1='\n\n\[\e[91m\]\H\[\e[0m\]@\[\e[96m\]\w\[\e[0m\]\n[\[\e[95m\]$?\[\e[0m\]] {\[\e[38;5;218m\]\j\[\e[0m\]} \[\e[92m\]$(git branch 2>/dev/null | grep '"'"'*'"'"' | colrm 1 2)\[\e[0m\]\n\$ '

Especially for something that runs every time a prompt is to be shown to me.

Know what you run, even small adjustments can have massive but at first hidden implications.

Proxy Information
Original URL
gemini://michal_atlas.srht.site/posts/starship.gmi
Status Code
Success (20)
Meta
text/gemini
Capsule Response Time
138.143826 milliseconds
Gemini-to-HTML Time
0.458583 milliseconds

This content has been proxied by September (3851b).