Stow is usually trivially installable using the package manager while I'm installing git. Not nearly as full featured as chezmoi but gets the job done for me.
I've seen projects like this for years and I still have the genuinely honest question: what are people doing that managing their dotfiles is significant problem for them?
I've managed my dotfiles (12 different configuration files all compatible with cygwin, wsl, linux, macOS) for the past decade in a git repo with a 50 LOC shell script that creates symlinks for me in an intelligent way. What am I missing?
I use chezmoi, and I didn’t have to write a 50-line script - just install chezmoi on a new machine, run a command pointing it to a git repo, and up pop all the dot files and configs I need to have a consistent environment everywhere.
Chezmoi also handles variations in config files for personal vs. Work machines, or even differences between machines themselves.
I agree it’s not a tremendous lift to write a bespoke solution for this (and I did so in the past) but at some point it becomes lower-effort to use something off the shelf.
In addition to that, chezmoi templating can be used to fill in environment variables like secret keys, you just need to unlock rbw or whatever other password manager it is that you use.
I have some that I export in my shell config, and this setup allows me to have the repo in a public place and not worry about who finds it.
Very funny to me that Java's initial appeal: it's easy to deploy "everywhere"; is now it's disadvantage (you need a whole Java setup with JAVA_HOME and God knows what else).
Now the bar for GUI apps is cross-compilation to deployable web, Windows, Linux (Electron), Android, iOS (? I don't know I don't use/develop for Apple products) versions from running a simple command.
And for the CLI world, well, almost everyone is on Linux x86-64, or maybe arm, so a few static binaries (or "virtually" static -- depending only on glibc) are king for deployment.
Now that 20225 has become “The Year of the Terminal”(R), I have been looking at how managing my dot files in a more coherent way. I was thinking straight up git vs stow, but I should would be very interested in comparisons from those who have used this tool.
I haven't looked at this one yet, but until someone compares it to Chezmoi and points out where it's better I'm not even looking attention I fear. Chezmoi is just that good.
For the sake of answering the parent question with regard to Chezmoi specifically: Chezmoi is a very comprehensive dotfiles manager. It can do a lot of things. More than any other I'm aware of.
More does not necessarily equal better, though. I think that's a matter of personal preference. I tried Chezmoi for a while and ultimately decided it was just a lot more levers at my disposal than I really wanted to even think about.
Dotter, by contrast, is a lot more minimal. Dotter is little more than a symlink manager plus templating engine plus config files to declare what machines need what config.
Chezmoi is all that, and does a lot more: encryption/decryption (even has password manager integrations), automatic push/pull. It's also designed so that you can add or manage files regardless of what your current working directory is (via commands like `chezmoi edit/add`).
In my case, after deciding I wanted to go for the minimal end of things, I almost went for GNU Stow however, I wanted templating functionality and I liked dotter's "packages" system for defining what files a given computer needs.
And very much a personal bias here: I found the learning curve of Chezmoi templates not great. I'm also not a big fan of the fact that Chezmoi relies on you naming your source files in particular ways in order to determine what the target file permissions should be.
For example in my dotfiles repo I'll have `etc/pacman.d/01-options.conf` and the dotfiles install script will symlink that to `/etc/pacman.d/01-options.conf`. This way the source of truth is always in a single dotfiles repo.
This strategy has worked well for dotfiles I use on Arch, Debian, Ubuntu and macOS. It includes support for WSL 2 too. The install script has been working with this set up for years to run 1 single command and have everything work where work in this case is installing and configuring a bunch of tools I use. An example is here https://github.com/nickjj/dotfiles.
I found it quite useful. My main use case for it is managing the same dotfiles for Windows and Linux. Specifically that neovim uses different folders and I can set that per OS in dotter.
It also allows for including our not including a config based on an executable being available which can be useful.
It requires some configuration, depending on how many of its features you use but I think it's worth it.
I have a backup/restore set of scripts that copies my dot files over as well as a few directories as a whole via rsync.
My only big issue is how big ~/.config/ gets as a directory compared to how much I really want to keep/need in terms of a fresh setup. Similar for my ~/src/ directory, with all the ./.git/ files. I kind of wish there were a "smarter" backup/restore tool that could handle a few of these things better than ham-fisting and rsyncing all the things.. I was more selective in my restore when configuring my new computer earlier in the year.
I just use a git repo and GNU Stow similar to the approach in this post (I'm not the author of the post):
https://tamerlan.dev/how-i-manage-my-dotfiles-using-gnu-stow...
Stow is usually trivially installable using the package manager while I'm installing git. Not nearly as full featured as chezmoi but gets the job done for me.
I've seen projects like this for years and I still have the genuinely honest question: what are people doing that managing their dotfiles is significant problem for them?
I've managed my dotfiles (12 different configuration files all compatible with cygwin, wsl, linux, macOS) for the past decade in a git repo with a 50 LOC shell script that creates symlinks for me in an intelligent way. What am I missing?
I use chezmoi, and I didn’t have to write a 50-line script - just install chezmoi on a new machine, run a command pointing it to a git repo, and up pop all the dot files and configs I need to have a consistent environment everywhere.
Chezmoi also handles variations in config files for personal vs. Work machines, or even differences between machines themselves.
I agree it’s not a tremendous lift to write a bespoke solution for this (and I did so in the past) but at some point it becomes lower-effort to use something off the shelf.
In addition to that, chezmoi templating can be used to fill in environment variables like secret keys, you just need to unlock rbw or whatever other password manager it is that you use. I have some that I export in my shell config, and this setup allows me to have the repo in a public place and not worry about who finds it.
Why is "written in Rust" as important as what the software is about? I noticed this tendency of specifying when something is written in Rust.
Should it be an indicator of better stability? Or performance? And if so, am I interested in the performance of a dotfile tool?
Genuinely curious.
Easy to deploy, usually single static binaries. Same goes with Golang projects. Polar opposite of java (which I'll totally ignore).
Very funny to me that Java's initial appeal: it's easy to deploy "everywhere"; is now it's disadvantage (you need a whole Java setup with JAVA_HOME and God knows what else).
Now the bar for GUI apps is cross-compilation to deployable web, Windows, Linux (Electron), Android, iOS (? I don't know I don't use/develop for Apple products) versions from running a simple command.
And for the CLI world, well, almost everyone is on Linux x86-64, or maybe arm, so a few static binaries (or "virtually" static -- depending only on glibc) are king for deployment.
Maybe it’s a way to attract contributors?
git bare repo handles dotfiles better than any bespoke platform
1. git is already there and familiar
2. sync dotfiles over ssh . no internet access or separate credentials needed (for github, s3 etc)
3. handles merge conflicts
4. easily push & pull subdirectories into /etc , /usr/local or wherever else you need configuration using git subtree.
git bare repo works for tracking files anywhere on the FS as well. (check debian etckeeper for automating that)
credit: https://www.atlassian.com/git/tutorials/dotfiles
Now that 20225 has become “The Year of the Terminal”(R), I have been looking at how managing my dot files in a more coherent way. I was thinking straight up git vs stow, but I should would be very interested in comparisons from those who have used this tool.
Chezmoi is what you want.
I haven't looked at this one yet, but until someone compares it to Chezmoi and points out where it's better I'm not even looking attention I fear. Chezmoi is just that good.
For the sake of answering the parent question with regard to Chezmoi specifically: Chezmoi is a very comprehensive dotfiles manager. It can do a lot of things. More than any other I'm aware of.
More does not necessarily equal better, though. I think that's a matter of personal preference. I tried Chezmoi for a while and ultimately decided it was just a lot more levers at my disposal than I really wanted to even think about.
Dotter, by contrast, is a lot more minimal. Dotter is little more than a symlink manager plus templating engine plus config files to declare what machines need what config.
Chezmoi is all that, and does a lot more: encryption/decryption (even has password manager integrations), automatic push/pull. It's also designed so that you can add or manage files regardless of what your current working directory is (via commands like `chezmoi edit/add`).
In my case, after deciding I wanted to go for the minimal end of things, I almost went for GNU Stow however, I wanted templating functionality and I liked dotter's "packages" system for defining what files a given computer needs.
And very much a personal bias here: I found the learning curve of Chezmoi templates not great. I'm also not a big fan of the fact that Chezmoi relies on you naming your source files in particular ways in order to determine what the target file permissions should be.
Wait until you get a load of nix's home manager!
How do you manage system wide settings? I've been using ansible, but it seems a bit overkill. I feel it's over complicating things.
I use my dotfiles repo for this.
For example in my dotfiles repo I'll have `etc/pacman.d/01-options.conf` and the dotfiles install script will symlink that to `/etc/pacman.d/01-options.conf`. This way the source of truth is always in a single dotfiles repo.
This strategy has worked well for dotfiles I use on Arch, Debian, Ubuntu and macOS. It includes support for WSL 2 too. The install script has been working with this set up for years to run 1 single command and have everything work where work in this case is installing and configuring a bunch of tools I use. An example is here https://github.com/nickjj/dotfiles.
Not GP.
I tarball /etc. On a new system, I restore config quite carefully.
I've been using "homegit" for years and never felt the need for a replacement.
https://www.atlassian.com/git/tutorials/dotfiles
great tip! also for /etc
I found it quite useful. My main use case for it is managing the same dotfiles for Windows and Linux. Specifically that neovim uses different folders and I can set that per OS in dotter.
It also allows for including our not including a config based on an executable being available which can be useful. It requires some configuration, depending on how many of its features you use but I think it's worth it.
Thanks. I’m between Omarchy and MacOS mostly, but sometimes Windows, too. Seems worth putting some time into it.
I have a backup/restore set of scripts that copies my dot files over as well as a few directories as a whole via rsync.
My only big issue is how big ~/.config/ gets as a directory compared to how much I really want to keep/need in terms of a fresh setup. Similar for my ~/src/ directory, with all the ./.git/ files. I kind of wish there were a "smarter" backup/restore tool that could handle a few of these things better than ham-fisting and rsyncing all the things.. I was more selective in my restore when configuring my new computer earlier in the year.
Try Stow. You can create packages for your stuff and symlink the files as needed. I have packages like git, shell, mail,…
I wish it had more examples or some basic documentation website, it looks interesting cuz i have a lot of context switching through all my tools.