dotnix
dotnix copied to clipboard
Shackled within an elaborate prison of my own design.
I Fucking Hate Dotfiles
Installation
Clone
macOS
Clone this repository to $HOME/.config/dotfiles; this is a hardcoded path,
however it should be the only one that is expected by the configuration.
After cloning, cd into the directory.
NixOS
The system-level prerequisites of the NixOS configuration is significantly more involved than the macOS configuration.
In general it follows the same principles as Graham Christensen described in
his Erase Your Darlings blog post; in this case, /persist is being used as
the persistent directory.
This repository can be cloned anywhere, but in general I tend to place it in
$HOME/.config/dotfiles on desktop machines and /persist/etc/nixos on servers.
After cloning, cd into the directory.
Existing Profile
macOS
From the configuration directory, build the darwin activation utilities and then invoke them directly for the desired profile.
For example, the following will build and activate the crazy-diamond profile:
nix build .#darwinConfigurations.crazy-diamond.system
./result/sw/bin/darwin-rebuild --flake $(pwd)#crazy-diamond switch
At the time of writing, nix-darwin hasn't been fully updated to work with
Flakes so this will have to be repeated every time the configuration is to be
updated.
TODO
- [ ] package the above into a script available within the
nix developshell
NixOS
From the configuration directory, build the NixOS configuration and activate it.
For example, the following will build and activate the star-platinum profile:
nixos-rebuild switch \
--use-remote-sudo \
--flake '.#star-platinum'
The initial activation will set the machine's host name, which means that
subsequent activations can be performed with nixos-rebuild switch --use-remote-sudo.
NOTE: --use-remote-sudo is a "workaround" for how flakes repositories can interact
with git-2.35..
cf. https://github.com/NixOS/nixpkgs/issues/169193
New Profile
To install based off of a new profile:
- create a new directory with the machine name at
machines/<new-machine-name> - perform the same steps as above to build and deploy the new machine's configuration
Post-Install
Once everything's been installed and is up and running, direnv allow will
enable nix-direnv and most of the nix-shell --run nonsense below can be
elided.
Maintenance
Updates
Sources are pinned and tracked using "Nix Flakes".
TODO
- [ ] add example commands showing how to update pinned flake sources.
nix-direnv
This project contains a .envrc file that works with the nix-direnv
integration for direnv. This should mean that, upon entering this
directory, a user is immediately dropped into the environment defined in this
repository's shell.nix file.
Additionally, nix-direnv should also automatically register a GC Root
similar to lorri*.
Before running nix-collect-garbage -d, nix-direnv's cached evaluation can be
"manually refreshed" by calling touch .envrc in this directory; this should
ensure that a GC Root is installed for an up-to-date version of shell.nix.
*I have a slight preference for nix-direnv over lorri
due to some issues I've had in the past with lorri's daemon.
Resources
TODO: Link against some of the Nix configurations that I referenced when figuring this out for myself.