Okay, so I’ve been reading about dotfile management apps such as GNU Stow, and I love the idea. I have a good grasp on how it works. Seems like it should work flawlessly for corralling all my dotfiles into one folder so I can easily clone them across machines. Makes sense for apps whose config folders and files are named something static like ~/.config/appname/settings.conf.
That said, can somebody help me understand the cloning/syncing workflow for apps that generate folders and/or files with dynamic/random/inconsistent names? For example, I’m thinking of Firefox, which creates folders with seemingly random strings for each profile.
Do I just need to clone my Firefox profiles before I launch Firefox for the first time on a new machine? Can I configure GNU Stow w/ something like *.Profile for the top level folder name? Am I doomed to manually syncing my Firefox settings, or is there some other trick for handling these dynamically named configs that I haven’t come across in the tutorials yet? This little cliff hanger is pretty much the last thing stopping me from installing GNU Stow at this point. Thank you!
Stow cannot do this as far as I know. Chezmoi can though you’ll need to fiddle with templates and ignores to achieve it:
However as others have said a dotfile manager may not be appropriate for all apps. It assumes a certain kind of behaviour of the app - known config locations, text files etc.
I think your suggestion to backup/clone/restore your ideal Firefox config onto new machines is probably most practical if you do want to use a dotfile manager with it. That way you ensure the dir name is the same across all machines. Then you can use stow to manage parts of the profile going forward.
I would consider FF’s own sync solution also though - I believe you can self-host it too.
When I think of dotfile management, I think it means handling standalone config files that are a few KB, intended to be user-editable, and are probably not changed by the running program itself.
I don’t think the Firefox config files meet those criteria. I don’t know, because I just leave them alone. I think a better tool for managing Firefox config would be to sync your profile, either through their servers or by self-hosting a sync server
There are still things you can do with Firefox to fit the dotfiles pattern if you care enough. The files managing the profile and profile directory are mostly static and plain-text. For example I had a
profiles.inipointing to a fixed profile directorydefaultcontaining auser.jsfile with most of my settings. You also need to update and commit theinstalls.inifor every machine, because Firefox insists to have a unique default-profile entry for every system/install. (And the actual setup was even more complicated and contained a merge-script to clone/update/merge multiple user.js sources, but most people wouldn’t need that)These days I use librewolf which has saner, more secure defaults and a more powerful global (profile-independent) config file. All I now store in my dotfiles is
.librewolf/librewolf.overrides.cfg.Yeah, I’ll have to study some more examples and read the docs. With some creativity I might be able to finagle something using the
--targetoption. Thanks for weighing in.
Sort of in this topic, I stumbled on this today and thought it looked interesting. Haven’t had a chance to look at it at all.
Yeap, chezmoi is my go to for dotfiles management
Ansible has extensive tools for applying partial configs to specific configuration files, leaving the rest unchanged.
It’s meant for remote hosts, but it works fine pointed at
localhost.Ansible might be overkill - might be enough to make a quick bash script that finds the most recently active Firefox profile and just drops the files you care about there.
This does sound like more than most dotfile managers as are able to handle.
Stow has no “glob for target” option, so you can’t do *.profile.
You could write a script that, when you’re deploying a stow, symlinks the profile into the right location. You’d have to remember to run it in the future so create a README file and include the instructions.
You mean write a script with something like
findfollowed bystow --target=/path/to/profile/folder firefox?Yeah, exactly. You could glob with find to locate the directory, store the path in a variable and then pass that to stow.
I’m not sure what you have to do to make Firefox acknowledge the profile, but I believe it simply enumerates all of the folders in the directory and displays all that are valid (but definitely double check on that first).

