Development environments with Nix

note, Jun 25, 2023, on Mitja Felicijan's blog

Nix is amazing for making reproducible cross OS development environment.

First you need to install Nix package manager.

{ pkgs ? import <nixpkgs> {} }:
  pkgs.mkShell {
    nativeBuildInputs = with pkgs.buildPackages; [
	  python3
	  tinycc
	];
}

And then run it nix-shell. By default it will look for shell.nix file. If you want to specify a different file use nix-shell file.nix. That is about it.

When the shell is spawned it could happen that your PS1 prompt will be overwritten and your prompt will look differently. In that case you need to either do NIX_SHELL_PRESERVE_PROMPT=1 nix shell or add NIX_SHELL_PRESERVE_PROMPT variable to your bashrc or zshrc file and set it to 1.

I also have a modified PS1 prompt for Bash that I use and it also catches the usage of Nix shell.

NIX_SHELL_PRESERVE_PROMPT=1

parse_git_branch() {
	git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}

is_inside_nix_shell() {
	nix_shell_name="$(basename "$IN_NIX_SHELL" 2>/dev/null)"
	if [[ -n "$nix_shell_name" ]]; then
		echo " \e[0;36m(nix-shell)\e[0m"
	fi
}

export PS1="[\033[38;5;9m\]\u@\h\[$(tput sgr0)\]]$(is_inside_nix_shell)\[\033[33m\]\$(parse_git_branch)\[\033[00m\] \w\[$(tput sgr0)\] \n$ "

And this is what it looks like when you are in a Nix shell. Otherwise that part of prompt is omitted

PS1 Prompt

More resources:

Other notes

DateTitle
10/GUI 10 Finger Multitouch User Interface
Parse RSS feeds with Lua
Aerial photography of algae spotted on river Sava
Write and read structs to/from files in Cc
Lua performance in different environments
Using ffmpeg to combine videos side by side
Use option key as meta in Alacritty under macOS
Personal sane Vim defaultsvim
#cat-v on weechat configuration
Making cgit look nicer
Sane defaults for tmux with more visible statusbar
Cronjobs on Github with Github Actions
Currated list of Vim ALE linters
Push to multiple origins at once in Git
Sane default for Dungeon Crawl Stone Soup Online editiondcss