Only evaluates needed attributes
let expensive = builtins.trace "Computing expensive" (1 + 1); in { a = 1; b = expensive; }.a # Does not compute expensive
Avoid side effects; use derivations for build actions
buildResult = pkgs.stdenv.mkDerivation { ... };
Access patterns
set.attr set."attr-with-dashes"
Recursive attribute set
rec { a = 1; b = a + 1; }
nativeBuildInputs = [ pkgs.cmake ]; buildInputs = [ pkgs.openssl ];
installPhase = '' mkdir -p $out/bin cp mypackage $out/bin/ ''; } Required attributes: pname, version, src Standard phases: unpackPhase, patchPhase, configurePhase, buildPhase, installPhase
Libraries linked at runtime
buildInputs = [ openssl zlib ]; }
config = lib.mkIf config.myModule.enable { # configuration when enabled }; }
inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; };
outputs = { self, nixpkgs, ... }@inputs: { # output attributes }; }
config = lib.mkIf config.custom.feature.enable { # configuration when enabled }; }
home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; home-manager.users.username = import ./home.nix; }
Converted and distributed by TomeVault — claim your Tome and manage your conversions.