Skip to content

Nix

Nix patterns

Getting a recent version of a package from nixpkgs-unstable

By default, new devenv projects are configured to use a fork of nixpkgs called devenv-nixpkgs/rolling.

devenv-nixpkgs/rolling is tested against devenv's test suite and receives monthly updates, as well as interim stability patches that affect devenv's most popular services and integrations.

For some packages that are updated frequently, you may want to use a more recent version from nixpkgs-unstable.

  1. Add nixpkgs-unstable input to devenv.yaml:
devenv.yaml
inputs:
  nixpkgs:
    url: github:cachix/devenv-nixpkgs/rolling
  nixpkgs-unstable:
    url: github:NixOS/nixpkgs/nixpkgs-unstable
  1. Use the package in your devenv.nix:
devenv.nix
{ pkgs, inputs, ... }:
let
  pkgs-unstable = import inputs.nixpkgs-unstable { system = pkgs.stdenv.system; };
in
{
  packages = [
    pkgs-unstable.elmPackages.elm-test-rs
  ];
}

How do I contribute a package or a fix to nixpkgs?

For temporary fixes, we recommend using either overlays or a different nixpkgs input.

You can also consider contributing your changes back to nixpkgs. Follow the nixpkgs contributing guide to get started.

Once you've forked and cloned nixpkgs, test your changes with devenv:

inputs:
  nixpkgs:
    url: github:username/nixpkgs/branch
    # Or a local path to nixpkgs
    # url: path:/path/to/local/nixpkgs/clone

Add a directory to $PATH

This example adds Elixir install scripts to ~/.mix/escripts:

devenv.nix
{ ... }:

{
  languages.elixir.enable = true;

  enterShell = ''
    export PATH="$HOME/.mix/escripts:$PATH"
  '';
}

Escape Nix curly braces inside shell scripts

devenv.nix
{ pkgs, ... }: {
  scripts.myscript.exec = ''
    foobar=1
    echo ''${foobar}
  '';
}