Development environments with Nix
Nix is amazing for making reproducible cross OS development environment.
First you need to install Nix package manager.
- Create a file
shell.nix
in your project folder. - In the section that has
python3
etc add programs you want to use. These can be CLI or GUI applications. It doesn't matter to Nix.
{ 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
More resources:
Other notes
- Change permissions of matching files recursively
- Edsger W. Dijkstra Manuscripts ebook
- c Embedding resources into binary with C
- Write ISO to USB Key
- plan9 Mount Plan9 over network
- Add lazy loading of images in Jekyll posts
- Development environments with Nix
- plan9 My brand new Plan9/9front desktop
- plan9 Fix bootloader not being written in Plan9
- Execute not blocking async shell command in C#
- dcss Make DCSS playable on 4k displays
- Push to multiple origins at once in Git
- plan9 Run 9front in Qemu
- AWS EB PyYAML fix
- Making cgit look nicer