DEV Community

Lakshit Singh
Lakshit Singh

Posted on

Complete Beginner's Guide to Linux Ricing

In the Linux world, 'Ricing', refers to the process of customizing your machine, and create a custom environment for yourself. The term 'rice' originates from the old internet slang which meant 'to make it look nice' and is now majorly used for customizing a desktop environment.

The Ricing Culture, began soon after minimalist window managers like i3, or bspwm started to emerge in the early Linux days, providing users with a way to customize their entire desktop stack. Early on, this trend of customizing your desktop started to pickup and people started sharing configurations and screenshots with each other on early social platforms.

Linux is the holy grail for ricing. Linux is like a modular puzzle, it is built up of small pieces that are replaceable and customizable as per the users choice. Whereas, other operating systems feel like a brick. They offer no modularity, and you can in no way control what you do, except what they offer you. In Linux, or should I say, in some distributions of Linux, you choose exactly what puzzle pieces you need, and just the fact that offer exists is one of the biggest reasons why Linux is used.

I won't lie, I see why the other operating systems such as windows share the largest market share, its because most people do not want to deal with setting up their desktop, and then customizing it, but those that want more than just computing from their computer should definitely try out Linux.

Let me show you my configuration, and also one of the best rices I have ever seen.

my rice


Choosing A Linux Distribution

What is a Linux distribution or distro?

Linux in itself, is only the kernel, a Linux distribution however provides you with a full-fledged system built around the Linux kernel. Which generally includes a desktop environment, package managers, some core packages etc.

The choice of your Linux distribution can severely affect the level of customization you can achieve with your rice, while some systems are built to give people an easy way to experience some are built to provide you the choice for every component of the distribution. Ultimately, the decision lies in how much you want to deal with the customization of your operating system.

My go-to distro has become CachyOS, built on Arch Linux it provides a very high level of customization while also having the core packages. This lets me experience all the benefits without the risks of messing something up. Still, for anyone trying to mess with Linux on a deeper level, I would recommend installing Arch Linux first, since you will gain a deeper understanding of Linux itself and then you can move to whatever catches your eye.

Factors to consider when picking a distro:

  • Ease of Use
  • Personal Experience level
  • Package Managers
  • Community
  • Customization (If you're looking to rice)

Some popular choices:

  • Ubuntu/Debian: Ubuntu/Debian based distro's are often easy to use, are meant for beginners and offer a large user base. The downsides though are they are less customizable than its peers, and also has an average package manager. If this is your first Linux experience go for Ubuntu/Debian based.

  • Fedora/RHEL: Similar to Ubuntu, Fedora is meant for beginners and people who are not interested in customizing much. It is a bit better than Ubuntu at customization, offering several spinoff's with different desktop environments etc, but the package manager decent at best.

  • Arch-based(Manjaro, CachyOS): Arch-based distro's are built on top of Arch Linux, they provide a moderate ease of use, have a large community, since they adopt most of Arch's features and has one of the best package managers. They are moderately configurable, these are my recommendation for moderately experienced users.

  • Arch/Gentoo/NixOS: These distro's are meant for experienced users who want full control of their system, they too have a decent user base and community, and are often better than their counterparts for most stuff. Each of them have a unique approach towards an OS and I would highly recommend trying them out (I have also yet to try out some, but I am working my way towards them).

It is important to remember that there is no universal best distro - the right choice depends on youImage descriptionr skills, motivations, and willingness to tinker.


Desktop Environments vs. Window Managers vs. Desktop Shells

Desktop Environments: DE are full integrated graphical interfaces for your desktop involving layout, window management, File Managers, Settings etc. They provide you with full usability out-of-the-box. Some common DEs are GNOME or KDE Plasma.

Window Managers: WMs manage the placement, interaction and look of windows in an environment, they do not provide you with a complete system with everything out-of-the-box and do require some configuration to actually able to utilize them properly.

Desktop Shells: Desktop Shells are used to create custom UI layouts for your DE or WM, they provide ways to create and manage components and also abstractions for interacting with some system tools.

Desktop Environments offer ease-of-use while sacrificing customization and for ricing people generally move toward WM for the window management and Desktop Shells to enhance the look of the system.
There are multiple major types of WMs,

  • Floating/Stacking WM: Floating WMs allow the user to place and move around windows anywhere, similar to the Windows / Mac experience, the windows are allowed to be placed anywhere in the screen and are often placed in layers, where the focused window takes the top layer.
  • Tiling WM: Tiling WM create defined arrangement of windows so that a user can utilize the screen space more efficiently. There exists multiple types of Tiling WM that take unique approach to handling windows, for example, Niri - The Scrollable Tiling WM, or Hyprland - A dynamic tiling manager with multiple layouts.

Floating WM - OpenBox

Tiling WM - Hyprland

There are a lot of types of WMs built for different people and it is essential to find what your needs are. For example, I prefer a scrollable WM (Niri) that lets me have windows on a scrollable strip, allowing me to efficiently reach any window while also ensuring it can take the full screen space. Another interesting WM is River, which uses a tag based system allowing windows to belong to multiple workspace at the same time. 

Desktop shells, however, are pretty similar. The only thing that differentiates them is how they provide the API. For example,
Eww - provides a custom language, AGS - that lets you create components using TSX and TS, or Waybar - providing a collection of components and some customization. The decision relies on what you want to configure, a desktop shell such as AGS lets you create any and everything, Waybar is limited to a panel/bar whereas Eww also provides customization but has a learning curve for its languages.

My personal preference is AGS, since it allows me to create any and everything using TSX while also providing event-driven abstractions for stuff like communication with Hyprland, River, Pipewire (audio) etc.


Linux Shells and Terminal Emulators

Linux shells are special programs that provide a way to interact with an OS through a Command Line Interface (CLI). They allow a user to interact and talk with the OS using a set of text commands. Terminal Emulators, on the other hand are Graphical User Interfaces(GUI) sessions to run your shells.
Common Shells:

  • Bash: Bash is the most widely used shell and is default on most distro's.

  • Zsh: Zsh is known for its versatility by using plugin system to customize it (oh-my-zsh).

  • Fish: fish is considered a more user-friendly shell with some features of zsh such as auto-complete, suggestions etc.

As you go through your ricing journey, and just Linux in general, you will often interact with the terminal, be that for launching apps, configuring apps, scripting, debugging etc. 

The basic utility of a shell is constant for all, the real core difference is apparent in a development environment where people might spend more time in the terminal than in any app. There, I suggest exploring more into the shell that fits you. For me, it was Zsh, providing extensive config through plugins etc I could change the way it looked, how it handled stuff etc.

Common Terminal Emulators:

  • Alacritty
  • Kitty
  • WezTerm
  • Ghostty

There are a lot of terminal emulators, and the only main difference they provide is how fast they are and what stylings they support. I have not delved deep into Terminal Emulators much, but I have been using Ghostty for quite some time. It is built in Zig, so its fast, and also provides and extensive configuration.

my terminal


Power User Tweaks

Here are some tweaks to become a power user in Linux,

  • Custom Key-binds/Shortcuts: The ability to customize your key-binds are seldom appreciated by new ricers, for example, the simple fact that I can bind the opening of my most used apps to a key, makes it so that I don't have to require opening an app. Also, being in Niri, I can move windows, work-spaces, monitors all from a combination of Win, Shift, Ctrl and Arrow keys, making me almost never use my mouse. This is just the surface level, you can do much more, you can execute scripts, say to connect to Bluetooth, disconnect WiFi etc. There are endless possibilities.

  • Custom Scripts: Custom scripts are versatile in itself, from which you can manage anything that concerns your machine, auto-start apps, changing themes and wallpapers etc. But when paired with keybinds or apps like rofi/wofi they can really change your workflow.

  • Compositor Tweaks: I've never been a fan of compositor tweaks because they offer almost no performance boost, but to those who like eye-candy, this can be a game changer, adding blur, see-through windows etc can really enhance the look of your desktop.

  • Notification: Customizing your notifications can really build together your workflow, you can create a notification that systems that integrates well with your workflow/theme providing a refined look.

These tweaks are often secondary, only when a user is almost done with his main ricing, and is comfortable with Linux should he try to indulge in these, since they require some basic knowledge.


Tips From My Experience

  • Start Small: Do not try to create or expect to create a full rice in one sitting, ricing takes time, start with small components and then grow from there, integrating them with each other as required.

  • Color Scheme: It is better to create and stick to a color scheme or a palette at the start of your rice. Sit and find a wallpaper you like, either make the palette based on the wallpaper or convert the wallpaper to fit the scheme. With this, you will have an easier time figuring out the overall layout of your rice, and will also help it look cleaner.

  • Experiment: If you do not have a strict layout for a component, experiment with it, make multiple iterations and find out what fits your rice more. Yes, it will take time, but it will be a lot better than a crude implementation.

  • Documentation: Configuration is a key part of Linux Ricing, and thus almost all applications have a config file and documentation that tells you how to correctly interact with it. Do not try to skip over the documentation, you may find some hidden gems that can change your whole workflow.

  • Enjoy: Enjoy the process of ricing, ricing is meant for you, and you should not be influenced if people don't like your rice, what matters is you should.


Sharing & Managing Dotfiles

Dotfiles are all the config files for your apps, since they generally start with '.' and are kept in the '.config/' folder, they are referred to as dotfiles.

Managing your dotfiles is really important, as you start to dive deep into your rice, the amount of dotfiles will only increase, and hence dotfile management and sharing has become a major part of ricing. They offer multiple benefits, having a Version Control System like git, you can rollback to previous configs, or make porting to a new system highly efficient.
Generally the dotfiles are kept on GitHub or other similar hosting platforms. Although some dotfiles specific apps such as yadm or chezmoi exist, and are great, git provides more control over your file management.
A minimal git setup is,

  1. Select folders/files to track, for this example we will take the .bashrc file.

  2. Create a dotfiles folder where all your config will reside

mkdir ~/dotfiles cd ~/dotfiles 
Enter fullscreen mode Exit fullscreen mode
  1. Move the file to your folder and create a symlink
mv ~/.bashrc ~/dotfiles/bashrc ln -s ~/dotfiles/bashrc ~/.bashrc 
Enter fullscreen mode Exit fullscreen mode
  1. Initialize Git repository
git init git add . git commit -m "Initial commit of my dotfiles" 
Enter fullscreen mode Exit fullscreen mode
  1. Back up to a remote repository
git remote add origin git@github.com:yourusername/dotfiles.git git push -u origin master 
Enter fullscreen mode Exit fullscreen mode
  1. Track and Update regularly
git add -A git commit -m "Update zshrc and i3 config" git push 
Enter fullscreen mode Exit fullscreen mode

Conclusion

Ricing is not just for eye-candy, it transforms your Linux workflow, where every part of your desktop/computer is picked by you and for you. It not only enhances your experience, but it also gives you a deeper insight into what your desktop is actually composed of. Some might think it unnecessary to know how your desktop works, but just gaining a basic understanding can drastically change how you handle your desktop, be that during debugging or everyday use.

Ricing is much more about the process than the end result, for some ricing never ends, there is always something more to tweak, another customization to add.

At the end, its all subjective, Ricing can be different, for me it can be a clean setup that allows me to work efficiently; for some it may be visual-flair or the process of creating something unique from scratch.
No rice is better or worse - what matters is that your setup works for you and reflects your own journey.

Top comments (1)

Collapse
 
sumitguptagit profile image
Sumit Gupta

Easy to understand and crisp. Kudos 🎉