How could GNU Stow help me with my configuration files?
from linuxPIPEpower@discuss.tchncs.de to linux@lemmy.ml on 17 Jul 2024 19:36
https://discuss.tchncs.de/post/19034663

Once again I try to get a handle of my various dotfiles and configs. This time I take another stab at gnu stow as it is often recommended. I do not understand it.

Here’s how I understand it: I’m supposed to manually move all my files into a new directory where the original are. So for ~ I make like this:

~
  - dotfiles
      - bash
         dot-bashrc
         dot-bash_profile
      - xdg
            - dot-config
                user-dirs.dirs
      - tealdeer
            - dot-config
                - tealdeer
                       config.toml

then cd ~/dotfiles && stow --dotfiles .

Then (if I very carefully created each directory tree) it will symlink those files back to where they came from like this:

~
  .bashrc
  .bash_profile
   - .config
        user-dirs.dirs
      - tealdeer
          config.toml

I don’t really understand what this application is doing because setting up the dotfiles directory is a lot more work than making symlinks afterwards. Every instructions tells me to make up this directory structure by hand but that seems to tedious with so many configs; isn’t there some kind of automation to it?

Once the symlinks are created then what?

The manual is not gentle enough to learn from scratch. OTOH there are very very short tutorials which offer little information.

I feel that I’m really missing the magic that’s obvious to everyone else.

#linux

threaded - newest

traches@sh.itjust.works on 17 Jul 2024 19:53 next collapse

There are other dotfile managers out there, personally I use yadm. It’s just a shell wrapper around a bare git repository, no symlinks or other magic needed

linuxPIPEpower@discuss.tchncs.de on 17 Jul 2024 21:36 collapse

yadm is the one I liked the best and tried it a few times. fact is that I am unlikely to keep a repo like this even part way up to date. New files are created all the time and not added, old ones don’t get updated or removed. There’s not even a good way to notice in any file manager what is included and what’s not as far as I know. yadm doesn’t work with tools like eza which can display the git status of files in repos. (and it probably wouldn’t be feasible.)

Plus I have some specific config collections already in change tracking and it makes more sense to keep it that way. Having so many unrelated files together in one project is too chaotic and distracting.

It’s not realistic for me to manage merges, modules, cherry picking, branches all that for so many files that change constantly without direct intervention. Quickly enough git will tie itself into some knot and I won’t be able to pick it apart.

traches@sh.itjust.works on 18 Jul 2024 05:51 collapse

Sounds like your use case is significantly more complicated than mine, I usually just commit, push, and pull.

Yadm does have the “enter” command which lets other tools work. I have an alias I use all the time:

alias lazyadm="yadm enter lazygit --work-tree ~/"
ma1w4re@lemm.ee on 17 Jul 2024 19:59 next collapse

Recreating a path to original locations is a way to configure stow.

You can utilize bash to automate it. Mkdir can create entire trees in a single command.

After links were created you start using your configured software.

It’s a link farm built using a packaging system. You put your configs into a “package” and then link said package where it belongs.

Git is useful not as a combination for stow, but a standalone way to version control your configs.

For nonidentical devices you create additional packages prefixed with specific device name. You don’t need to link all packages at once with stow, pass a name of a package to link it alone.

linuxPIPEpower@discuss.tchncs.de on 17 Jul 2024 21:48 collapse

For nonidentical devices you create additional packages prefixed with specific device name. You don’t need to link all packages at once with stow, pass a name of a package to link it alone.uuu

Sooo… I find some way to share the dotfiles directory across devices (rsync, syncthing, git, nextcloud, DAV) then make specific subdirs like this?:

~
  - dotfiles
      - bash-desktop
         dot-bashrc
         dot-bash_profile
      - bash-laptop
         dot-bashrc
         dot-profile
         dot-bash_profile

But what is the software doing for me? I’m manually moving all these files and putting them together in the specific way requested. Setting the whole thing up is most of the work. Anyone who can write a script to create the structure can just as easily write it to make symlinks. I’m sure I’m missing something here.

ma1w4re@lemm.ee on 18 Jul 2024 08:31 collapse

Sorry if it comes out robotic, since I don’t use stow myself I just opened the manual and parsed it for you.

You manually create the repo of packages ONCE and then use stow to deploy them without having to link stuff manually every time.

As for “what’s it doing for me”, stow is just a generic deployment script that somebody else has written for you. You can just as well create your own and do it your way.

I personally used to have a bash script with one custom function “symlink” that error checked the linking process and a list of target/destination under the function.

Now I’m trying to code a python script similar to stow that works with packages of configs but instead of recreating paths inside the package you just provide a json file with target/destination for each file in the package.

Both of my ways have same shortcoming as stow: you have to do some manual work before the script can kick in.

Hopefully my messages have been helpful.

lordnikon@lemmy.world on 17 Jul 2024 22:26 next collapse

stow works great then lazy git to store the charges in a personal git server been using it like that for more than a decade

lelgenio@lemmy.ml on 17 Jul 2024 22:33 next collapse

That’s… all stow does, there’s nothing more to it. If you need some other feature don’t waste your time trying to make it work with stow, It’s just a meme in my opinion.

About the “package manager” functionality, stow was originally supposed to be a development tool for the Perl programming language, you download a bunch of libraries into a directory, then use stow to merge those files into the root of your project (like a caveman), as it turned out some people started using it to manage dotfiles, and here we are.

When I started trying to organize my dotfiles, I started with stow, but quickly found it very limited.

After that I found dotdrop, which is considerably more involved, but gives you total control. My config with dotdrop quickly started growing insanely huge, at some point I even had system-wide systemd services declared.

Then I found out I was basically reinventing nixos and home-manager, so I switched to that.

muxelplexer@programming.dev on 18 Jul 2024 08:49 collapse

personally i always found stow to be annoying to use and switched to a bare git-repo approach. you can read up on it over here: www.atlassian.com/git/tutorials/dotfiles. Like this your dotfiles just rest where they should and it’s rather minimal overhead.