First of all, super hyped for the forums, awesome to see a bunch of posts being made and the conversations going on! Now onto the topic, How do you manage Your Rice?
I’ve recently bailed on the mess that windows has become and have been diving into the Linux realm. I’m not sure if it was a Brodie video, Linux Cast or someone else but I landed on Hyprland and have been loving it. I played around testing apps and different configs landing on a nice general Gruvbox style rice and I love it. But diving in like this has taught me something, I want more. I want to try out Quickshell, I want to test out different launchers, I want other file managers, terminal emulators and so on.
So how could I do this and still keep my current Rice? I’ve got my configs backed up on github and I’m managing them with stow, that’s handy but it’s not complete enough for me. So I started working on an install script in bash. That was going well until I started having what I’ll call sequence issues, dependencies not installed early enough, non-compatible programs, etc. I could’ve just taken time and sorted them out but again I felt like I wanted more.
This prompted me to change my approach. I’ll always have to write some sort of install script if I want to automate my setup, so why not make creating the install script easier? I Started working on a series of scripts I’ve been calling Dot🧲Magnet. The idea is to pull a target dotfile repo, pull a repo of scripts, then execute them in a defined sequence. From there I began working on a general library of menus, installers, splash screens, etc that can be imported to any script to massively reduce the amount of duplicate code. Taking this approach I can now write any mini install script once and use it in any number of ricing ideas.
There’s a bit more to it and a lot more I have planned for it but this is what I’ve come up for managing my Rice. I wanted the ability to be systematically flexible and I feel like I’m slowly reaching it. But since I’ve put this much thought into how I manage this I’m curious as to how others are? Do you make a single script for a rice? Do you stage things similar to me? Or are you a hardcore “do it by hand” kind of person? How do you manage Your Rice?
There is another project My Linux For Work ML4W He just released a dotfiles installer using a flatpak app. search github ml4w That allows you to manage multiple dotfiles using his format.
you can also create additional users on your system and install different hyprland dotfiles.
There is also Jakkoolit. He has a pretty nice bash install script and he supports quite a few distros. So the hyprland package installer is split from the dotfiles.
As someone who has tried to script a dotfile manager with a very flexible set of tools - it’s a task that seems doomed to end in failure. There are a lot of variables at play within a linux system - and it is nightmarishly hard to figure them all out - even when something like Nix and home-manager should theoretically work everything out for you.
I’ve mostly shelved that tool, and just work with manual symlinks these days.
I keep all of my dotfiles in a Github repo and have OS specific Makefile scripts to symlink and update everything for Linux, macOS, and Windows. I find that this ensures that I know exactly what is going on and am not reliant on someone else’s software to maintain my configurations. This approach is a good way to learn and understand the software you are working with (in my opinion, at least).
I just use GNU Stow in a git repo. Stupid simple, just creates symlinks and that’s about it.
I’m more curious as to why people keep reinventing the wheel here. Do you really need much more than just “symlink all of that for me”. But then again, I don’t make dots for others to use, so any customization is just done directly, no installers or menus needed.
On top of that, just a normal system backup with borgbackup (Pika Backup as GUI), so just in case I can always easily dig up something from the past if needed and restore my home dir pretty much 1:1 in a disaster scenario. No backups, no mercy, as they say.
I also have all my dotfiles in a git(hub) repo and use tuckr to symlink them. If I wanna test something I simply create a new branch do all my changes and either merge it or discard the branch
Also a gitrepo. At the time I was looking around for a dotfilemanager i stumbled across doot and they had an info on their git about „why you should doot a shot instead of stow, chezmoi, etcpp“, which I did. And I‘m happy with it, does what I expect it to do
The greatest and funniest problem about managing dotfiles with any tool is how the dotfiles were created. Were they created by a single person designed to be used on their system? Was it by a grifter who just wants to sell them to easily impressed kids for funny amounts of money? Is it by a person who wants to rice their system, but also provide people a nice alternative?
Most personal configs designed by traditional FHS distro users come with Bash scripts that help with the installation. They are usually horribly unsafe, and very specific to a generic system so chances are it will mess up your system if ran. Tools like stow, of course, are solutions but the point would stand that there is no one-size-fits-all solution to manage dotfiles. If you need one, you have to create one exactly the way you need it, based on the configurations you want to consume. This is why we usually recommend people that they create their own instead of consuming 3rd party configurations. I can only vouch for something you’ve created to work on your own system, nothing else.
NixOS has been my go-to for a while now, and it works flawlessly for managing my personal rices across multiple devices. I’ve created a small, flexible theming solution that generates configs instead of linking them from somewhere, which I find to be the safest option. You can probably replicate the behavior with an atomic linking script or a wrapper around GNU Stow.
All of my dot-files and scripts are stored under one git repo (and uploaded to github as well). the ~/.config and ~/.local/share/bin and everything else that i would have in my home are all under one tree, something like ~/.dots. from there i use gnu stow to link them to my home. but i have a custom installer script (under ~/.local/share/bin) that does all the installing (fonts, tools, flatpaks, aur). it then links my dot-files using gnu-stow. it script can be ran on a system with a DE, or it can be ran with hyprland argument. in that case it’ll also install hyprland ecosystem, few more programs and make necessary changes like updating mimes (f*ck vscode), etc
all i have to do on a fresh install is, clone the repo, run the script and the rest is handled. i even added error handling. so any error occured will be printed all together in the end
i store my daily driver setup on a usb stick and copy the whole /.config on the stick. after every edit i run “sudo cp -r ~/.config …” and when i’m happy with a complete rice, i upload it to my git repo. i frequently ceate a pacman package.txt if i nuke my entire system to restore it as fast as possible. same with yay for aur packages. thats my way
I haven’t quite finished it yet, it will also use stow though
apps are installed through a PKGBUILD (arch package), as well as some utilities, allowing me to manage them a little nicer
stow will probably just be read only from the repo to have a single source of truth
and then I’ll see to figure a little thing out to have a local repo to actually change stuff
chezmoi and a few scripts that run, I tried last time when I reinstalled: 37 minutes from “putting the Arch stick into the USB port” to “everything works and I can continue with whatever I’m doing”.
I used chezmoi, but didnt like how it wasnt able to symlink dirs.
Now I am on dotbot GitHub - anishathalye/dotbot: A tool that bootstraps your dotfiles ⚡️ , which is really nice.
You edit your configs and they get auto updated in your repo.
And you are also very flexible in how you manage stuff.
Im also on NixOs which manages all the system stuff.
I use GNU/Stow which is basically a symlink manager, with scripts I wrote to unlink and link specific “packages” (meaning configuration directories etc..).
yadm is really good if you want your dotfiles to stay where they are, and it just wraps git, also has support for submodules, template filenames based on machine name or username etc
stow is good if you want to keep all your dotfiles in one folder