{ description = "Rust development shell"; inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; inputs.flake-utils.url = "github:numtide/flake-utils"; inputs.devshell.url = "github:numtide/devshell"; inputs.rust-overlay.url = "github:oxalica/rust-overlay"; outputs = { self, nixpkgs, flake-utils, devshell, rust-overlay }: flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; config.allowUnfree = true; # For clion overlays = [ devshell.overlay rust-overlay.overlays.default ]; }; # Includes cargo, rustc, rustfmt rust-stable = pkgs.rust-bin.stable.latest.default.override { extensions = [ "rust-src" ]; # Include the rust stdlib source for intellij }; in { devShell = pkgs.devshell.mkShell { name = "Rust development shell"; packages = with pkgs; [ rust-stable rust-analyzer jetbrains.clion ]; env = [ # Allow for intellij to find the stdlib # { # name = "RUST_SRC_PATH"; # value = "${rust-stable}/lib/rustlib/src/rust/library"; # } # Use this if the rust binary needs additional libraries # { # name = "LD_LIBRARY_PATH"; # value = "${pkgs.xorg.libX11}/lib:${pkgs.xorg.libXcursor}/lib:${pkgs.xorg.libXrandr}/lib:${pkgs.xorg.libXi}/lib:${pkgs.libGL}/lib"; # } ]; commands = [ { name = "ide"; help = "Run clion for project"; command = "clion &>/dev/null ./ &"; } ]; }; }); }