Skip to content
← Go back

I hate setting up new Linux machines

Published: >

Table of Contents

Open Table of Contents

Explaining myself

The biggest friction I have nowadays when setting up new machines is not the configs but the binaries. Don’t get me wrong, I love pre-built binaries. Downloading your favourite gnu-rust-rewrite is pretty awesome the first time but how the hell do you keep them updated?

I am aware this is strictly a non-bleeding edge linux problem as distros like Arch have AUR that you can comfortably YOLO your binaries/build straight from source. But what about us Ubuntu boys?

The problem with apt

Everything is outdated. I wouldn’t trust apt with my life. I don’t even trust it enough to upgrade from 22.04 to 24.04. I remember being a wee lad half a decade ago and trying to go from 18.04 to 20.04. I lost everything.

It was definitely skill issues, it was also the over pollution of adding PPAs from random StackOverflow articles to get some random python program or dependency working or whatever I was trying to do with setting up fingerprint with my ThinkPad. Point is, it might werk but not for me. Holding onto old wounds is maybe a bit neurotic but I am getting too old for #TechGoneWrong moments.

I honestly wish we had things like scoop but for Linux. scoop is excellent. It does what you do when you grab those cute binaries from the release page but with discoverability through fuzzy search and simple install.

External Link Globe github/scoop

Manually😭

This is how I’ve been doing things, I’ve even written a script to use gh to check latest CLI - to fzf - to guessing the target triple and try to load. Mileage massively vary since for some reason I decided to use fzf and xhs as well as fish. So before I can even start getting binaries easily I need to get essential binaries before my other binaries.

I would occasionally run into issues where typical workflow on one machine doesn’t work for others (e.g. yazi not zoxide-ing when fzf version too old) then have to track how I’ve installed them .deb vs .appimage and eventually hitting the correct update path. This is a massive PITA if you couldn’t tell. Everytime, which bin this apt list --installed | fzf that. I feel like an old man yelling at the terminal. I would love to cut corners here but I don’t feel like letting getting rocked by the latest grok who roamed free in my home directory.

External Link Globe github/cli External Link Globe github/yazi External Link Globe github/zoxide External Link Globe github/fzf

Using eget

Life has become slightly easier, although still not perfect. Some repos don’t ship .appimage but .deb so you still have to go to your local bin folder and run the typical install command properly.

The problem is also that you have to remember not just the binary name but the author or the forked author of the new tool. I’ve dumped this into my dotfiles repo after doing a ranked history binary count then feed to LLM. I’m not sure that saved much time - I ended up having to check most of the repos anyway.

sharkdp/fd
cli/cli
ducaale/xh
BurntSushi/ripgrep
sharkdp/bat
zellij-org/zellij
casey/just
rclone/rclone
sharkdp/hyperfine
tldr-pages/tldr
twpayne/chezmoi
eza-community/eza
dandavison/delta
Aloxaf/silicon
charmbracelet/glow
junegunn/fzf
sigoden/aichat
jesseduffield/lazygit
ajeetdsouza/zoxide
sxyazi/yazi
sarub0b0/kubetui
rgwood/systemctl-tui
chmln/sd
mikefarah/yq
jqlang/jq
starship/starship
Schniz/fnm
neovim/neovim --tag=nightly

And don’t forget your eget.toml

[global]
target = "~/.local/bin"
upgrade_only = true

Final complaint I have is when you have an unobvious target triple in the release binary you have to sit there and resolve each conflict, this means selecting gnu-musl over and over again. But it’s better than visiting N release pages and dumping stuff into your /tmp/ - at least not manually.

External Link Globe github/eget

Now what?

Right, so now my Linux machine setups have become as simple as this many steps

wget url-to-eget-binary
mkdir -p ~/.local/bin
mv eget ~/.local/bin/
fish_add_path ~/.local/bin
cat ~/.config/binaries.txt | xargs -I{} -- eget {}

Beautiful job. I can’t wait to (not) enjoy setting up more machines.

Links

github/scoop - External Link Globe https://github.com/ScoopInstaller/Scoop
github/cli - External Link Globe https://github.com/cli/cli
github/yazi - External Link Globe https://github.com/sxyazi/yazi
github/zoxide - External Link Globe https://github.com/ajeetdsouza/zoxide
github/fzf - External Link Globe https://github.com/junegunn/fzf
github/eget - External Link Globe https://github.com/zyedidia/eget



Next Post
Recipe - Pad Kaprao for lazies