Original of this post on my blog.
I wrote a comment on dev.to recently that gathered quite some attention; It was about my custom Arch system. I felt like it would be useful to give a 101 how-to guide so people that are interested can enjoy the process of building their own system as well.
Why building your own system ?
Knowledge
Building your own system forces you to know everything about it, therefore becoming a way better linux user (or even computer user). The knowledge I got this way was (and still is) extremely useful in my daily job.
Productivity
You will design the system according to your needs. Instead of adapting your workflow to the software, you will design the software to adapt to your workflow.
And armed with your new knowledge of Linux, you will be able to better deal with any bug or issue that inevitably arise when one use an operating system.
The joy of creation
It's rare to find such a great opportunity to build something that can be both beautiful, and useful. This will be a great opportunity to train your designing skills, both for the aesthetic and the UX/UI.
And the best part: you get to use this system everyday, all day, while you work or chill on your computer !
Why Arch Linux ?
Arch Linux is amazing. A lot of linux distributions have a goal to be more accessible to the mainstream user, and they succeed more or less at this.
Arch linux goes in the opposite direction. The philosophy of Arch can be summed up as such :
- Minimalism: Nothing is assumed of the user's needs.
- Not User-Friendly, but User-Centric: Things should not be made easy for beginners, things should be simple.
- Pragmatism: you don't want a system designed around an ideology, you want a system that works.
What does it look like ?
When you boot Arch Linux for the first time, you'll be greeted by this :
A simple command line. If you want more, you'll have to build it yourself.
What CAN it look like ?
There's the good part: since you start from nothing, nothing is stopping you from doing whatever you want with your computer. The only limit is your imagination. Here's the same system some time after:
Prettier, right ?
And I'm by no mean talented. If you want to see some true masterpieces, go check out the unixporn subreddit (Safe for work !)
What do I need to start ?
The only thing you need for this project is TIME. The worst thing that can happen (as far as I know) is that you end up stuck with a non-completely usable computer, which can be a problem if you need this computer for work. I personally spent about 2 weeks on my system before it was 100% functional (this amount of time will depend on your current linux skill).
If this is an impossibility, consider starting this project on a computer that you don't need for a while, on a dual boot, or on a virtual machine.
Your time will mostly be spent reading the Arch wiki, one of the most acclaimed resource on the whole web. It will tell you more or less everything you need to know.
But I don't want to dive right in, can I take some preparatory steps first ?
Sure ! Some things that can help you learn before :
- Switch to a user-friendly linux distribution. Some good choices are Linux Mint, or Manjaro (Manjaro is actually based on Arch !).
- Read books ! I would advise you to read "How Linux Works" (Brian Ward), an extremely interesting and detailed book about unix and linux. This will help you tremendously !
What are the steps for building my own system ?
I won't go into the details, I trust you to RTFM; however it will be useful to explain the general steps:
1/ Install Arch Linux on your computer, be greeted by the Command Line©
2/ Decide on which packages you want; Install them; Configure them.
3/ Configure the Arch Linux system itself, and voilà.
It's as "simple" as that. It all boils down to picking what you want for your system, and learning how to configure everything correctly.
For the configuration, you will obviously spend some time reading the documentation for Arch and for your packages (always check if your package have a page on the amazing Arch wiki).
For the choice of packages, I can give you some pointers (pun intended).
Some packages that might interest you
This list is just some of my personal's favorites. If you want to find other cool ideas, don't hesitate to check out the unixporn subreddit.
Which shell to use ?
The usual choices are Bash or Zsh. My personal choice is Zsh with oh-my-zsh installed, for an amazing shell experience.
A graphical server
The command line is nice and all, but it can't display Netflix ! So you will probably want more.
Most applications require that you install a graphical server.
I would advise to check out the X.Org window system. A possible alternative is Wayland, but it seems a bit too new and unpolished for a beginner user.
How to launch the graphical server ?
The Arch Wiki will tell you more about this, but basically you can configure your shell profile (.bash_profile or .zprofile) to launch the X server at startup.
Then you can configure xinit (in the .xinitrc file) to launch any programs you want at the start of the X graphical server. I use this for example to configure my laptop's touchpad.
Desktop environment or Tile window manager ?
Something great with building your own system: you get to ask yourself questions that few people do.
If you ever used a computer, you probably used a Desktop environment, where you click on a folder icon to open the folder window, and such.
A Tile window manager is a whole other paradigm, where each program simply opens a new tile on your screen. Most of your navigation on the computer's file system will be made through the command line.
This made much more sense to me and seemed way more practical. It will require some time to adapt for a beginner, but it's worth it. I'd recommend i3 (or even i3-gaps, that I find more aesthetically pleasing).
Some great desktop environments are available if you want a more classic user experience (KDE, GNOME...).
A compositor
Not needed, but nice-to-have.
A compositor is an extra layer between the graphical server and your programs. Instead of having your programs directly draw unto the screen, they draw into memory on the compositor, which will then draw unto the screen. This allows for some better user experience and better effects (such as windows transparency).
I personally use picom (ex-compton).
The right terminal
This is especially important if you're spending a lot of time on the shell, either for work, or because you find it more convenient (and in that case you probably went with a Tile window manager !)
Some great choices exist here, to name a few : kiTTY, Terminator, URxvt, st...
In the end I went with Termite for the great VIM-like bindings that allows me to navigate easily with the keyboard.
Amazing packages to explore
- You will probably want a wallpaper ! Check out "feh".
- "Rofi" is an amazing program launcher, highly customisable.
- "Dunst" will allow you to build your desktop notifications.
For more packages, I'll advise you to check out the amazing pieces at unixporn subreddit
How to save my precious work ?
You will spend quite some time configuring your system and your packages. This can be hard work and it would be a shame to lose any of it.
The easiest way to save your work would be to copy your configuration files (usually nicknamed dotfiles) along with any configuration of interest on a git repository. However, that's not a very sustainable approach, since you'll probably be tweaking your system there and there for months (and even years: workflow improvement is a continuous process !). Copying your files manually every time can be very tedious !
You will probably need a more sustainable approach. You can, for example, symlink your dotfiles (and any other file of interest) from your git repository towards your system. That way, any change you make to the configuration file will be saved on your repository. Maybe you can use a CRON job to regularly push that repository on github.
I would advise to go even further and just learn to use Ansible. This is a wonderful IT automation tool, and very simple to use. You just list tasks in playbooks written in YAML and execute them. If you're working in IT, that's also a very marketable skill.
If your computer breaks or gets stolen tomorrow, and you have a well-written ansible playbook, you can reinstall your own system with a single command.
Isn't it a very satisfying thought ?
In conclusion
Building your own system takes time, dedication, and a lot of reading... But this experience is incredibly enriching !
And as always, if you're stuck or you still don't know where to start, you can ask me right there or via mail. Me and countless enthusiasts will gladly give you a hand.
Happy building !
Edit in 2021: Termite is now deprecated. I would advise Alacritty as an amazing terminal emulator. Also migrated to Zimfv from Oh-my-zsh.
Edit in 2023: Wayland/sway are amazing. Ditch Xorg/i3.
Top comments (36)
This an excellent article. I'm a very novice linux user, and always considered ArchLinux way too time consuming and sort of like "whats the point?"... But you make it look fun and appealing! I think your synth-wave looking UI is beautiful!
Real men use Gentoo and build it from stage 1.
Real man use three pedals and Slackware :D
You mean Linux from scratch?
My social life took a big enough toll from Arch :D
Shameless plug: I wrote a similar series about Arch. Part 1 is an intro, part 2 is a very opinionated walk through the installation process and part 3 is common post-install stuff, check it out if you want to try Arch but are intimidated by the wiki!
I can't even think about go back to Ubuntu, I love the flexibility of Arch and the decision that what I want to install and what not.
I use KDE Plasma, is light and I enjoy my UX. I don't like Gnome.
It's so easy to create, and install your own packages using pacman (or aurman, yay, etc.) like your own widgets/plasmoids.
Or even, I fixed an annoying bug in the built-in Konsole package, including a fix in my package build process using the patch command, building it from source, and is so easy. Because I based all of this in the PKGBUILD of the offical repositories and AUR.
Also I can switch between the latest commit in Konsole and the latest stable version with a low effort.
AUR, EOT
I've been using Arch for years and am not familiar with EOT. The only thing I could find when searching for this was
aur.archlinux.org/packages/eot-uti...
and as something you use in a heredoc instead of EOF ( end of file ) which I also don't understand. End of ___ ?
What is EOT?
End of thread
Ah gotcha. Thanks!
Ah, so long on my list to do this. But time is a luxury, and I'm also scared to fall into that rabbithole of endless tweaking (mental issue as someone said, not Arch problem). Mint serves me so well for years, it's hard to leave.
Update... Thank you for "wasting" last two days for me :) Accidentally I deleted my Mint root partition so it seemed a perfect timing to install Arch. Actually installation was a breeze. Configuring it (still) as much fun as I thought it will be. Installed both Cinnamon and i3, side by side, to test tiling WMs (really like i3 so far).
Only problem I see right now are AURs. Some stuff I'm used to is not available for pacman. And manual AUR installs for many is a nightmare with huge dependency trees. So far I'm avoiding those, but am afraid if I will be forced to do it in the future. AUR helpers seem great but not sure that's the point of Arch. I need to carefully check what I'm installing anyway, then upgrade process is different. Not sure. Still keeping Mint partition for emmergencies :)
"Yay" is a great package manager !
Yay is overrated. Use paru, which is much faster and better as it uses rust instead of Go.
You indirectly make a good point: this article is out of date. It was published in July 2020, the Github repository for Paru was created in August 2020.
I love Arch, I went the full custom DE route some years ago, I loved i3 to death. But in the end, it just took too much time to maintain and switched to KDE, and now everything works out of the box.
I don't understand what there is to maintain, actually ? Once my configuration was done I never needed to touch it again ?
I think I can answer from my experience. It isn't that there is something to maintain, it is a mindset (mental illness) that you are never done, you always have to tinker, etc.
I had this problem with my Linux installations. Always thinking about ways to upgrade /update something that has no need for them.
Software is never still. Things change. One day, PulseAudio stops working. Another, the automount/udev script doesn't pick up a flashdrive any longer. There's always some little thing that needs attention, and attention is a scarse resource this these days.
This is true, but I noticed those issues :
1/ can happen on just any system;
2/ have been dramatically decreasing the longer I use Arch
I remember a lot of issues like this happening in my first 6 months of Arch, but today I'm unable to remember when or what was my last problem !
I'm a total newbie Linux user, started with Zorin and soon I realized I'd like to dive into it. Thanks for the recommendations, I'm starting my studies.
Also, for people that feel interested in the book (like me)"How Linux Works", there is this repo on GitHub.
Hi, actually I'm a newbie. Well I've been a project in school to build a custom arch linux based system but I don't know how to start with it. So could you please recommend me something maybe like a video or text to get on with it
This article is supposed to be exactly what you want.
For an easy installer try Anarchy
How was your experience with this project?
Great article, I love so much Arch !
Do you have any example of configuration for Ansible ? I'm very curious of this tech !
Sure ! Here's an example from my actual config. What it does is simply :
Note this is all done with the same ansible module, "file". Here's another task somewhere else that uses the module "package", which is used to install my list of packages :