A home-manager
template providing useful tools & settings for Nix-based development. See home.nix
to see what's available.
Before proceeding, install Nix first.
- Create a local repository mirroring this template. There are two ways to do this; the first one is favoured over the rest; pick your choice:
- Click the green "Use this template" button above on Github, and then clone your repo locally:
# Replace this URL with your repo URL git clone https://github.com/user/nixconfig.git cd nixconfig # Update to latest software nix flake update
- Or, run
nix flake init
on an empty directorymkdir nixconfig cd nixconfig nix flake init -t github:juspay/nix-dev-home
- Click the green "Use this template" button above on Github, and then clone your repo locally:
- Open
config.nix
and setmyUserName
to your user name. You can useecho $USER
to get your user name.1- Optionally, you may edit
./home.nix
to your liking.
- Optionally, you may edit
- Run either
nix run
ornix develop -c just run
to activate your configuration. - Restart your terminal.
- Expect to see the starship prompt. When you
cd
into a project containing.envrc
configured for flakes (such as this very repository), you should automatically be put in thenix develop
shell along with a change to the starship prompt indicating the same. If not, rundirenv allow
once.
- Expect to see the starship prompt. When you
Note
Executing step 4 above will modify the contents of your $HOME
directory. You will be warned before overwriting, but not before creating links to newly created configuration files in the nix store. Since home-manager does not currently provide an integrated and automated feature to eliminate the links it creates, be aware that if you would like to reverse this operation, you will need to curate your home directory manually.
The configuration repo has flake.nix
file in the current directory and a ./home.nix
file containing the home-manager configuration that you can review. It also has a justfile, which provides a set of recipes analogous to Make targets to interact with the nix flake.
You can then execute nix develop
, to ensure you are in the development shell with just installed, followed by just run
to activate this configuration in your $HOME
. On most systems you are likely to experience at least one of the issues mentioned below in Troubleshooting. A more complete sequence might be
nix-dev-env setup
> nix develop
(nix:nix-dev-home-env) > rm ~/.bashrc ~/.profile && just run && direnv allow
(nix:nix-dev-home-env) > exit
> bash
runner on 12ca6a64c923 work on feature/branch via ❄️ impure (nix-dev-home-env)
⬢ [Docker] ❯
If you prefer, you can simply execute nix run
, but using just
will perform some additional validation and ensure you are able to use the other commands in the justfile.
To browse the capabilities of home-manager (and to see what else can go in your ./home.nix
-- such as shell aliases), consult https://nix-community.github.io/home-manager/options.html. You can also run man home-configuration.nix
in the terminal.
A sample demo of the setup process is shown below:
Problem: nix run
shows an error like: error: opening lock file '/nix/var/nix/profiles/per-user/utkarsh.pandey1/profile.lock': No such file or directory
Solution: This is an instance of nix-community/home-manager#4611. Run sudo mkdir /nix/var/nix/profiles/per-user/$USER/ && sudo chown $USER /nix/var/nix/profiles/per-user/$USER
and try again.
Problem: Running nix run
(home-manager) complains "Existing file ... is in the way of ..."
Solution: Delete those existing dotfiles, and try again. In home-manager, you can configure your shell directly in Nix (for macOS zsh, this is programs.zsh.envExtra
).
Problem: Cannot use cachix: Running nix run nixpkgs#cachix use nammayatri
(for example) does not succeed.
Solution: Add yourself to the trusted-users
nix config and restart the nix daemon.
mkdir -p ~/.config/nix
echo "trusted-users = root $USER" > $HOME/.config/nix/nix.conf
sudo pkill nix-daemon
You can embed this configuration inside your NixOS configuration, and thus share it with non-NixOS systems (like macOS and Ubuntu). See the "both" template of https://github.com/srid/nixos-flake for an example. If you don't want to share the configuration with macOS (ie., you use only Linux for development), see the "linux" template instead.
By default garbage collection is run automatically every week. If your projects use nix-direnv, you don't have to worry about having to download the dependencies again while in a remote area with limited internet access (see prominent features of nix-direnv).
Footnotes
-
runner
is used by default for compatibility with github actions. ↩