dotfiles icon indicating copy to clipboard operation
dotfiles copied to clipboard

Wrap your dotfiles with nix

Open adrian-gierakowski opened this issue 1 year ago • 9 comments

so that people could reproducibly instantiate it on their system with a single command

adrian-gierakowski avatar May 25 '24 09:05 adrian-gierakowski

@adrian-gierakowski that's a great idea, I still don't consider myself a Nix pro so don't want to break anything for others. What you have in mind is a flake with the configuration and something like stow for symlinking?

omerxx avatar May 28 '24 14:05 omerxx

What I had in mind was a home-manager configuration with all the programs and their configs.

I’ll be willing to pair on this as I’m fairly experienced with nix and I’m keen to learn about some of the tools you’ve got here.

adrian-gierakowski avatar May 28 '24 17:05 adrian-gierakowski

@adrian-gierakowski Hello, i'm using nixos and home-manager for about 2 months. My current problem with the hm is that i want to replicate my dotfiles inside VMs. I've thought about backing up the config files from home-manager's output, but it has some nix-store paths. It seems that nix home-manager is a tool that makes me depend to use it on every distro, that is some that i don't want. It that the purpose? I've tested right now the stow solution and seems more easy to adapt between any kind of distros. Then, i just activated my i3 and hyprland setup with nixpkgs prefix inside nixos modules barebones.

It'll be nice if anyone can explain how can i use home-manager inside nixos without needing to re-use it on every place to avoid maintaing dotfiles twice.

rafaeloledo avatar Aug 06 '24 01:08 rafaeloledo

You can use home-manager on any distro. But it only makes sense if IMHO if you are also using nix\HM on those distros to manage what software is installed. The benefit of this is that you not only ensure that the app configs are the same across those systems, but that the apps\binaries themselves are also the same.

You can obviously use stow on NixOS if you don’t want to use HM everywhere, but you are just making more work for yourself IMHO

adrian-gierakowski avatar Aug 06 '24 06:08 adrian-gierakowski

@rafaeloledo may I ask what you’d want to avoid using nix\HM everywhere? IMHO it’s the only sane solution if you want to keep things in sync across multiple systems

adrian-gierakowski avatar Aug 06 '24 06:08 adrian-gierakowski

@adrian-gierakowski Since i don't want to depend strategically only on chace.nixos.org, i try to avoid keeping 100% of my workflow on it. It's a personal choice considering i'm not a source-and-compile user. I'm not saying the cache is not solid or anything, i just don't want to be in a state of awareness and keep concerns on my head on the current state of fundings. Just pick a strategy and forget it.

I saw that i can set a private cache in a local server on the wiki, i'm consindering doing this on future to resolve this dilemma. For now, stow's solution doesn't lock you on a binary provider.

Other solution that nix and hm ecossystem can adopt is making an api to backup the config files in their original form offline dereferencing the nix-store paths and symlinks (i don't know if it's possible). I think is a good option to people feel more secure on using nix in the long-term.

rafaeloledo avatar Aug 06 '24 15:08 rafaeloledo

You can use home.file for arbitrary files which can be sourced from current dir in a git repo and will be copied to nix store and then symlinked to chosen path in your home dir. If you use this exclusively you can manage your dotfiles without accidentally “polluting” them with nix store paths. Although you’d be foregoing all the best parts of home manager so maybe better to just use stow instead (note that I know nothing about stow)

adrian-gierakowski avatar Aug 06 '24 18:08 adrian-gierakowski

I think it's a good balance. Creating another abstraction layer inside home-manager API is not a good selling point for me. Using home.file, i can leverage the generations if i break something and not use stow (avoiding the extra work as you've mentioned). The only downside is creating additional copies in nix-store which i can garbage-collect afterwards.

Thanks.

Note:

@omerxx is using at commit fffac07 this kind of solution too

image

rafaeloledo avatar Aug 07 '24 02:08 rafaeloledo

@adrian-gierakowski I had some problems setting my neovim like above. When i update the lazy-lock.json file it complains that's root permissions and read-only like this:

image

So, i've reached this discussion: https://github.com/nix-community/home-manager/issues/676 Thanks to IgorGee.

It appears that hm has a way to create an exception and now i can link integrally outside of nix-store normal constraints and got this:

image

Simply, i've followed the example above and use this internal home-manager's function

image

rafaeloledo avatar Aug 07 '24 20:08 rafaeloledo