{ description = "A reproducible development environment"; # ───────────────────────────────────────────── # Inputs – external flakes this flake depends on # ───────────────────────────────────────────── inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; # flake-utils generates per-system outputs so you don't # have to repeat yourself for every architecture. flake-utils.url = "github:numtide/flake-utils"; }; # ───────────────────────────────────────────── # Outputs – everything this flake exposes # ───────────────────────────────────────────── outputs = { self, nixpkgs, flake-utils, ... }: flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; # Allow non-free packages config.allowUnfree = true; }; in { # ───────────────────────────────────────── # `nix develop` drops you into this shell # ───────────────────────────────────────── devShells.default = pkgs.mkShell { # Human-readable name shown in the shell prompt name = "replaceNameHere"; # ── Runtime packages available inside the shell ────────────── # Add or remove anything from https://search.nixos.org/packages packages = with pkgs; [ # Version control git # Common utilities curl wget bat # ── Language toolchains ────────────────────────────────── # replacePackagesHere ]; # ── Build inputs (headers, libraries needed at compile time) ── # Use this for native C libraries, e.g.: # buildInputs = with pkgs; [ openssl zlib pkg-config ]; # replaceBuildInputsHere # ── Shell hook – runs every time you enter the shell ────────── shellHook = '' echo "" echo " 🐚 Development shell ready!" echo " 📦 nixpkgs: ${nixpkgs.rev or "unknown"}" echo "" # replaceShellHookHere ''; # ── Environment variables always present in the shell ───────── # Allow broken or insecure packages # NIX_CONFIG = "allow-broken = true"; }; } ); }