{ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05"; nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; nix-jetbrains-plugins.url = "github:theCapypara/nix-jetbrains-plugins"; }; outputs = { self, nixpkgs, nixpkgs-unstable, flake-utils, nix-jetbrains-plugins }: flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; config.allowUnfree = true; }; pkgs-unstable = import nixpkgs-unstable { inherit system; config.allowUnfree = true; }; pluginList = [ "be.ugent.piedcler.dodona" "com.github.copilot" "com.google.tools.ij.aiplugin" "IdeaVIM" ]; mkShell = pkgs.mkShell.override { stdenv = pkgs.stdenvAdapters.useMoldLinker pkgs.stdenv; }; in { devShells.default = pkgs.mkShell { packages = (with pkgs; [ python311Full ]) ++ (with pkgs-unstable; [ uv ]) ++ (with nix-jetbrains-plugins.lib."${system}"; [ # Editor of your choice (buildIdeWithPlugins pkgs-unstable.jetbrains "pycharm-professional" pluginList) ]); # Stop uv from downloading Python binaries automatically if needed. UV_PYTHON_DOWNLOADS = "never"; # ImportError: libstdc++.so.6: cannot open shared object file: No such file or directory LD_LIBRARY_PATH = "${pkgs.stdenv.cc.cc.lib}/lib"; }; }); }