My replicable personal computing setup
Simply run the below command on the new computer to be adopted:
/bin/bash -c "$(curl https://raw.githubusercontent.com/myTerminal/dotfiles/master/bootstrap)"
OR the lazy version
/bin/bash -c "$(curl https://gh.myterminal.me/setup)"
For macOS, the shell needs to be changed from Zsh to Bash and there needs to be a sudo xcode-select --install before anything else.
Software setup for multiple operating platforms is included and it is performed if a known OS is detected.
To start the setup, run the following command in a terminal running bash: (provided forge was fetched as a part of the init)
.setup/start
| Void | macOS |
| Base | Void | MacOS |
| Package managers | xbps, flatpak | (native), Homebrew, Cask |
| Bootloader | grub, os-prober | (native) |
| Encryption | cryptsetup, cryfs | –, cryfs |
| Process authorization | polkit | (native) |
| Message bus system | dbus | – |
| UEFI management | efibootmgr | – |
| Interface | tmux | tmux |
| Shell | fish | fish |
| File system tools | fd, lsd, bat, ncdu | fd, lsd, bat, ncdu |
| Text Searcher | ripgrep | ripgrep |
| Fuzzy finder | fzf | fzf |
| Text editor | GNU Emacs, vim | GNU Emacs^ |
| Audio player | mpv | mpv |
| Spell checker | Aspell | Aspell |
| GNU Make | make | make |
| SCM | Git, Tig | Git*, Tig |
| File manager | – | – |
| Archive managers | zip, unzip, 7zip, unrar | (native), 7zip, unrar |
| Process management | btop, psmisc | btop |
| Disk management | udisks, smartmontools | udisks, smartmontools |
| Network tools | networkmanager, bind-utils, tailscale | – |
| Communication tool | WeeChat | WeeChat |
| Language runtimes | Node.js, sbcl | Node.js, sbcl |
| Hardware | brightnessctl, acpi, fprintd | – |
| System clock | chrony | – |
| Filesystem tools | btrfs-progs, ntfs-3g, dosfstools, mtools, exfat-utils | – |
| Mobile device | android-platform-tools | android-platform-tools |
| Cron daemon | cronie | (native) |
| TTS | piper | piper |
| Large-Language model | ollama, fabric | ollama, fabric |
| Misc | rlwrap, sed, jq, fastfetch, wget, curl, socat, ssh, avahi | rlwrap, sed, jq, curl, socat, fastfetch, avahi |
| Void (Xorg) | Void (Wayland) | macOS |
| Desktop utils | xdg-utils, xdg-desktop-portal | xdg-utils, xdg-desktop-portal | – |
| Display server | Xorg | – | (native) |
| Display drivers | (machine-dependent) | (machine-dependent) | (native) |
| Display manager | – | – | (native) |
| Screen color temperature | sct | gammastep | (native) |
| Onscreen keyboard | onboard | ?? | – |
| Compositor | picom | – | (native) |
| Graphical environments | i3 | sway | (native) |
| Status bar | i3status | waybar | (native) |
| Output manager | xrandr | wlr-randr, wdisplays | (native) |
| Lockscreen | i3lock, xs-lock | swaylock | (native) |
| Wallpaper manager | feh | swaybg | (native) |
| Application launcher | Rofi | fuzzel | (native) |
| Dock | – | – | (native) |
| Desktop widgets | [pending] | [pending] | (native) |
| Desktop theme | Obsidian | Obsidian | (native) |
| Icon packs | Obsidian | Obsidian | (native) |
| Mouse cursor | Bibata | Bibata | (native) |
| Terminal | rxvt | foot | Terminal (native), Alacritty |
| Clipboard helper | xsel | wl-clipboard | pbcopy/pbpaste (native) |
| Notification daemon | dunst | mako | (native) |
| Disk management | udiskie, GParted | udiskie, GParted^, gsmartcontrol | Disk Utility (native), Mounty, gsmartcontrol |
| File managers | thunar (with gvfs) | thunar (with gvfs) | Finder (native) |
| File sync client | Syncthing | Syncthing | Syncthing |
| File/folder compare | Meld | Meld | Meld |
| Note-taking interface | logseq | logseq | logseq |
| Web browsers | LibreWolf, Chromium, Mullvad Browser, Tor Browser | LibreWolf, Chromium, Mullvad Browser, Tor Browser | LibreWolf, Chromium, Mullvad Browser, Tor Browser |
| Password manager | KeePassXC | KeePassXC | KeePassXC |
| Email clients | Betterbird | Betterbird^ | Mail (native) |
| eBook reader | calibre | calibre | calibre |
| Messengers | Schildi, signal, telegram-desktop | Schildi^, signal, telegram-desktop | Schildi, signal, telegram-desktop |
| Cloud storage clients | pCloud | pCloud^ | pCloud |
| Torrent client | Transmission | Transmission | Transmission |
| REST client | Postman | Postman^ | Postman |
| Virtualization | Virt-Manager | Virt-Manager | VirtualBox |
| Office suite | LibreOffice | LibreOffice | LibreOffice |
| Bluetooth interface | blueman | blueman | (native) |
| Drawing tool | krita | krita | krita |
| Picture viewers | Shotwell | Shotwell | Preview (native), XNView MP |
| Picture editor | GIMP, darktable | GIMP, darktable^ | GIMP, darktable |
| Audio player | Clementine | Clementine | Clementine |
| Audio frontend | pavucontrol | pavucontrol | (native) |
| Audio backend | GStreamer, pipewire, easyeffects | GStreamer, pipewire, easyeffects | LAME, FFmpeg |
| Audio editor | Audacity | Audacity | Audacity |
| Video player | VLC | VLC^ | VLC |
| Video editor | HandBrake, Blender | HandBrake, Blender | HandBrake, Blender |
| YouTube video downloader | yt-dlp | yt-dlp | yt-dlp |
| Multimedia tool | KODI | KODI | KODI |
| Screenshot tool | flameshot | grim, slurp, swappy | (native) |
| Screencast tool | OBS Studio, peek | OBS Studio^, ?? | OBS Studio, LICEcap |
| Keystroke echoing tool | – | ?? | keycastr |
| Startup disk creators | balenaEtcher | balenaEtcher^ | balenaEtcher |
| Gaming clients | Steam, lutris | Steam^, lutris | Steam, Origin, Sony Remote Play |
| Misc | numlockx, qFlipper | numlockx, qFlipper^ | qFlipper |
* - in-built, ** - through web-client, ^ - through XWayland
What started as a home for my Emacs config, collided with a spreadsheet containing a collection of software packages, quickly began to shift its shape, soon turning into a comprehensive dotfiles project to host configuration for much more than just Emacs. The majority of it still mostly comprised of Emacs configuration, so to make things simpler, I decided to extract it into an independent project of its own. At one point, I even extracted the setup scripts into their separate projects here and then later here. Maintaining it was still tricky with its complex arrangement of configuration files for four operating platforms at once at one point in time! What you see now is an attempt to keep only what is relevant to my primary setup across all my active workstation. This helps make updates less painful and effortless.
I still keep scripts around macOS around as it gave me a fresh perspective during my four years exclusively using an Apple computer. It also serves as a reference for work computers that barely align with my preferred setup. Finally, it also allows me to continuously compare my custom setup with a fully functional operating system like macOS and fill in the gaps iteratively.
There still is some inseparable residue related to other platforms. This might either eventually disappear, or otherwise bring in more complexity in the future, leading to another project branching out of this one.
This setup also follows the following principles:
- Lean: It should contain only the software that I need, with minimal to no tolerance for bloat. There’s only one software for one thing, with exceptions, of course, and I run regular optimizations to make sure that is the case. It could be either replacing a tool with a better alternative, or one from within the operating system itself, or dropping it altogether.
- Reproducible: I should be able to reproduce the same setup on as many machines as I need to, at any point in time, as many times as I need or want, with minimal to no manual configuration. This means not only the fetching of software is scripted, but also configuration and often execution.
- Composable: The elements of the setup should be interchangeable with other alternatives when a better-suited one is identified. Usually, following the UNIX philosophy (which is to have a tool for one job only) helps, with exceptions like Emacs.
- Portable: The setup should be portable such that (a) it should self-contain all other assets like code libraries, multimedia files, etc., with minimal to no external dependency, and (b) it should not contain elements bound to a particular Linux distribution, potentially preventing it from working elsewhere.
- Well-Documented: The entire setup should contain sufficient documentation for my future self.
- Missing alternative for peek in Wayland
- onboard doesn’t work in Wayland
- No screen recording tools in Wayland
- Broken sharing in Wayland
- No way to set Numlock for Wayland
- Wallpaper doesn’t randomize after Wayland load
- Need to set shell colors in Wayland?