I've been using GNU/Linux for quite a while now, I don't remember exactly what my first distro was, probably Ubuntu or Debian.
I eventually switched to Arch Linux and stayed with it for a long time, I really enjoyed it, but I have a thing for trying new stuff, and eventually delved into it.
# Filesystem
Coming from an Arch Linux installation using LVM on LUKS, this time I decided it wasn't that worth it encrypting my whole disk, so I went a simpler way.
As you can see it's just a traditional setup, using tmpfs for portage stuff, this way i save on SSD disk writes. I should note though that I have 32gb of RAM so I can afford this. For example, firefox requires the tmpfs to be atleast 4.5gb. You can read more [here](https://wiki.gentoo.org/wiki/Portage_TMPDIR_on_tmpfs).
# No Systemd
Since all the distros I used so far used systemd, I decided to try to avoid it this time, which I did for everything but `udev`, which I may replace for `eudev` someday.
OpenRc is really intuitive so far, I can't speak about writing a service file since i haven't had the need to do so yet.
# Desktop
I'm currently on X11, using i3 as my tiled window manager, alacritty as my terminal emulator and pipewire for the sound server. No problems whatsoever.
# Updating
I used to use the testing kernel, but I encountered some issues and the updates where pretty frequent, so I decided to use the non masked kernel.
To update my kernel I made a simple script:
```bash
sudo make -j16
sudo make install
sudo make modules_install
sudo emerge @module-rebuild
sudo dracut
# sudo grub-install --efi-directory=/boot/efi
sudo grub-mkconfig -o /boot/grub/grub.cfg
```
Configuring the kernel to my liking wasn't hard either, you just need some time to read through the options you need, you mostly will find out what you need by reading the packages wiki for the software you install, since they often list the kernel requirements.
To update my packages, I have two aliases:
```bash
alias update='sudo emaint -a sync'
alias upgrade='sudo emerge -avuDN @world'
```
# Creating a package
To my surprise, creating a ebuild is quite easy, specially if the software you package uses a common build system.
I am currently maintaining the [ddnet](https://github.com/ddnet/ddnet) ebuild, which uses a mix of cpp, rust, python, managed by cmake.
It's certainly a different experience compared to binary distributed distros. You can also enjoy the small performance benefits of building everything with your native [ISA](https://en.wikipedia.org/wiki/Instruction_set_architecture).