My personal dotfile repo. Managed with nix
and home-manager
.
Use the Determinate Systems Nix Installer to install nix, and git clone
this repository
# requires curl & git, e.g.
sudo apt update && sudo apt install -y curl git
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
. /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh
To start using this configuration, first bootstrap home-manager
mkdir -p ~/.local/state/nix/profiles
nix run home-manager/master -- switch --flake .
then change default shell to fish
# add fish to list of shells
echo $(which fish) | sudo tee -a /etc/shells
# change login shell to fish
chsh -s $(which fish)
# or on some systems (e.g. most VMs)
sudo chsh -s $(which fish) "$USER"
When making changes to the configuration here, apply with
home-manager switch --flake .
N.B.: sometimes we need to update our lockfile
nix flake update
To more easily test this config I've added a Vagrantfile
to spin up a VM. Only makes sense for headless stuff.
Start it with vagrant up
then log in with vagrant ssh
. It'll setup a user, nix
, home-manager
, etc.
Use vagrant down
to turn the VM off, or vagrant destroy
to trash it.
There's a lot of things that seem like they could or should be managed here, but aren't.
Haven't yet figured out how to include all the pieces needed to pyenv install
a new version of python within home.nix
.
On a Debian-like system, per the pyenv docs:
sudo apt update; sudo apt install build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev curl \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
Using a nix-managed poetry leads to weird issues with packages like numpy
, see this thread.
So instead I pipx install poetry
.