Pragmatic and minimal Void Linux builds using modern tools!
I need a system that:
- Gets me to my goals(passing exams, shipping and excel in my craft for infinite money).
- Is minimal(and, kind of elitist)1, so I can understand it.
- Uses sensible modern utilities by default.
- Has low overhead once it clicks and builds little fatigue while using it2.
- Takes no time installing and is unopinionated.
Is that you3? Great! Then read the rest.
- Pragmatism over ideology!
- Modernity(improving effectivness not following trends).
- Following the UNIX philosophy is preferred.
There are three builds available.
All of them made from the latest Void Linux rootfs with no modifications to base-system
nor base-devel
.
The minimal build adds:
- FAT and NTFS compatibility(meaning you can mount Windows NTFS partitions) and utilities.
- Microcode for your CPU and various free and proprietary(again, we are going for goals and pragmatism here, not ideology) drivers. 4
- Sensible selection of services installed and enabled(except for OpenSSH, Docker and some others)!
- Modern utilities replacing older ones(but nothing opinionated or flashy meaning fd instead of find and ripgrep instead of grep, but no eza instead of ls).
- The GNU C toolchain, Sqlite3 and Rizin for binary/process hacking.
- A Grub configuration that automatically detects other systems on the disk for a painless multi boot.
- The Noto fonts(including Chinese, Japanese, Korean and emojis) and a selection of popular, yet distinguishable fonts.
- Graphical drivers(GPU manufacturer based)
Tip
Some of the modern utilities are aliased to the older ones(e.g. find is aliased to fd for standard users).
The Xorg build adds:
- Packages for a Xorg minimal installation with a selection of utilities such as xclip and xrandr.
- Audio with pulseaudio
- Bluetooth with bluez.
You can install whatever you need on top of a build or even fork to make your own!
Want to get Neovim after installing the minimal build? Then just go ahead and xbps-install neovim
.
Tip
In the releases there is also the personal build which I made for myself and is opinionated!
For your system I recommend picking minimal or Xorg unless you agree with my additions completely.
- Components, a curated index of all the builds packages
- Documentation
- Alternatives and possible additions
This index excludes purely driver packages.
You want to see everything xbps-query -l
after installing or check out build.sh
- linux and kmod: kernel and modules utilities
- dracut: generates initramfs
- grub: bootloader
- os-prober: detects other operating systems installed
- efibootmgr: manages UEFI boot entries
- runit: init system
- bash: default shell
- xbps: package manager
- agetty: manages TTYs
- bluez: bluetooth
- cronie: cron implementation
- dhcpcd: network DHCP client
- ntpd, chrony and tzdata: time sync and timezones data
- openssh: secure remote shell
- iptables: firewall
- man(man-pages and mdocml) and info(textinfo): manual pages and gnu system info
- coreutils: GNU core utilities
- diffutils: GNU diff utilities
- binutils: GNU binary utilities
- e2fsprogs, btrfs-progs, xfsprogs and ntfs-3g: EXT4, BTRFS, XFS and NTFS utilities
- f2fs-tools, dosfstools, exfat-utils: FAT and EXFAT utilities
- wget: download utility supporting HTTP(S) and (S)FTP
- atool(with the gzip, tar, xz, 7zip, dpkg, unzip and unrar backends), archiving and unarchiving
- bc: basic calculator
- curl: powerful HTTP client
- ed: standard editor
- nvi: visual editor
- mg: fast and portable clone of the MicroEmacs editor
- ctags: tags generator
- ffmpeg: multimedia processing
- findutils: includes find and xargs
- fd: modern replacement for find
- grep: going to regular expressions
- ripgrep: modern replacement for grep
- sed: stream editor
- tmux: terminal multiplexer
- jq and yq: JSON and YAML processors
- rsync: fast and versatile remote copy utility
- rclone: file sync for cloud storage and more
- less: pager
- typst: modern typesetting system
- magic-wormhole: gets things from one computer to another
- openssl: TLS/SSL, cryptography and hashing
- procps-ng: process tools
- q: modern dig alternative
- qpdf: transforms PDF documents
- sudo: privilege escalation
- traceroute: network route tracing
- troff and groff: typesetting system used for manual pages
- util-linux: system utilities
- xxd: formats in octal, hexadecimal and binary
- base-files: essential system files
- dash: system POSIX shell linked to /usr/bin/sh
- file: what's that file type?
- which: shows the full of an executable
- gawk: GNU awk implementation
- gcc: GNU compiler collection
- gdb: GNU debugger
- make: build system
- cmake: cross platform build system
- bison: parser generator
- flex: lexer
- m4: macro processor
- git: version control system
- git-lfs: large file support for git
- github-cli: GitHub's official CLI
- iproute2 and iputils: network utilities
- iw, wpa_supplicant and wifi-firmware: wifi
- kbd: keyboard utilities
- pciutils: PCI utilities which I also use to detect and install the correct microcode and GPU drivers post installation
- rizin: binary exploitation, process hacking and reverse engineering
- rz-ghidra: the Ghidra decompiler plugin for rizin
- strace: traces syscalls
- ltrace: traces library calls
- shadow: users and groups
- sqlite: embeddable SQL database
- upx: compresses binaries
- void-artwork and removed-packages: artwork and cleanup scripts
- caddy: reverse proxy
- docker, docker-buildx and docker-compose: containers
- terraform: infrastructure as code
- ncurses: popular TUI library
- patch: applies diffs to source files
- pkg-config: retrieve information about installed libraries
- acpid: handles ACPI events
- autoconf: generates
configure
scripts from portable software builds - automake: creates template files for autoconf
- dbus: message bus system
- elogind: user logins, seats and power access
- ethtool: network hardware management
- eudev: device manager
- gettext: multi language utilities
- iana-etc: maps standard ports to protocols
- libgcc: gcc runtime library
- libtool: cross platform library linking and compilation
- texinfo: GNU documentation system
- tlp and tlp-rdw: power management for laptops
- usbutils: USB utilities
Use man
to access manual pages for most programs and info
to access GNU texinfo pages
- Void Linux is always worth a read
- Linux kernel for everything kernel related
- GNU project covers a lot of userland
Check out bookmarks.html from my dotfiles for a lot more.
For everything not included nor covered by this refer to the git
repository for whatever you are trying to understand better!
Here's an opinionated list based on my experiences.
Whenever you can't find something from the official repositories, grab a binary release and link it to somewhere in your $PATH or compile it yoursef!
Maybe you can find it in void-packages.
- linux-lts: Linux long term support which is going to be behind some versions
- linux-mainline: Linux mainline which is going to be ahead some versions
- linux-zen: a desktop optimized build
- zsh: another POSIX shell with plugins support
Note
As much as I love them, ex, vi or mg with ctags are not gonna be enough for most people.
These are all beloved and maintained editors5
- vim: Vi iMproved, a highly customizable modal editor using it's own language called VimScript,
- vis: a Vi inspired alternative using structural regular expressions like
sam
- neovim: a community
vim
community rewrite with Lua support and even more extensible - helix: a new take on modal editing
- emacs: a text editor and a lot more, interpreter for Emacs Lisp
- visual studio code: the most popular graphical editor from Microsoft using Electron
- zed: powerful Visual Studio Code competitor providing better performance made in Rust
Tip
In the repositories there's vim-x11
which has clipboard support and vim-huge
which has all the features.
Get emacs-x11
for Emacs with the graphical interface if you use that and check out Doom Emacs!
Highly recommend the proprietary version of Visual Studio Code or checking out codium
instead of vscode
in the repositories if you use that.
- Use
xbps-install -Syu
to upgrade the system, install packages and automatically confirm actions - Use
xbps-query -Rs
to search for packages in the repositories - Use
xbps-query -f package
to find out what files that package installs - Use
xbps-query -l
to list installed packages - Use
xbps-query -o /path/to/binary
to find out what package the binary is part of - Use
xbps-remove -Rf
to remove a package and it's dependencies
Warning
You can use use xbps-remove -RF
to remove packages without limitations on shared libraries or system packages and break things.
Meaning you can remove something from base-system
for example.
Don't do this unless you have a reason to, it's pretty cool that you can though!
- Comprehensive view of EVERYTHING that's been added to each build?
Readbuild.sh
, it's super easy! - How do I dive even deeper once I get comfy and master all the packages I need?
First off, impressive!
Now get better and better at your craft and excel or expand by touching on others.
I'd go for mastering an ASM reference, more binary or process hacking and getting acquainted with the Linux syscall table next.
Experienced C programmer and system internals type of guy? Why not try learning about the cloud with Go or learning functional programming with a language like Gleam?
The cloud is the first thing that came to mind because that's what I am doing right now, it's awesome, AWS a great place to start and then maybe Azure or Tencent.
Note
Again, check out my bookmarks from my dotfiles and if you are actively looking for resources like this you are probably a crazy knowledgeable person and a rich Developer, Engineer, Data Scientist, Cloud Architect or something like a big CEO/CTO.
Pass your exams, get certified, get employed, and build things if you aren't, also workout and take care of yourself, it's really hot when someone nerdy is also super fit and attractive.
Life can be awesome and self-improvement is great!
Sorry for getting out of topic, it's just what's on my mind.
These is the selection that's included on top of the Noto fonts
Tip
These are commercial alternatives which look great, but I will never pay for(probably)
To generate the ISOs you can just sh build.sh
on a Void Linux live or installation!
Refer to void-mklive for more details on this
# Minimal
./mkiso.sh -a x86_64 -b base \
-r "https://repo-fastly.voidlinux.org/current/nonfree" \
-- -k "us" -T "Void Linux" -o ../minimal.iso \
-p "void-repo-nonfree void-repo-multilib void-repo-multilib-nonfree" \
-p "$drivers $services $utilities $cloud $dev $fonts" \
-e /bin/bash \
-I ../custom \
-S "dhcpcd tlp dbus elogind" \
-C "vconsole.keymap=us"
Note
I install Go, Elixir and all of the other things I use on top of the Xorg build!
Please point out redundancy in the builds or mistakes in the README.
There's no enforcing of what packages should or should not be included, but we should discuss this!
For instance, would you like aria2 to be present?
Footnotes
-
Yes, this is a Linux kernel plus GNU userspace and a lot more meaning it's still gonna be challenging to understand fully compared to something like OpenBSD which has a way smaller codebase, but I feel like this is the best I can get without compromises which I will not take on anything. ↩
-
This is the true enemy we got as developers, we need to reduce overhead and that mental fatigue that slowly builds while we work! Here's a video from The Primeagen I really liked which touches on the topic. ↩
-
This system is not for someone who isn't passionate about computers and not motivated to read to get a deeper understanding. ↩
-
The moment you use a modern CPU on a non core/libre booted system, you are holding a non rooted phone with Google services on it(meaning you are a normal person btw), often open something like Discord and play games like Valorant with kernel level anti-cheats on the same or another computer I'd say the argument for the super secure privacy oriented free hacker system goes out the window. This system is secure and privacy oriented, but has to not be completely free, hope you get that, crying over a proprietary blob won't make your life better and gets cringe pretty quick. You can live and work with this knowing you are in control and can install anything you like and get to work, here is true pragmatism and long-term productivity gains. In fact, I am dual booting Windows 11 which I am going to need to take my AWS Solutions Architect Associate exam, I will delete the partitions right after, but you get my point! ↩
-
I use Vim and Codium and it feels comfy! ↩