{ pkgs, lib, makeWrapper, ... }: let python = pkgs.python3; # This is a python envionment that has the dependencies # for the development python scripts we use, and the # helper library. python-env = python.buildEnv.override { extraLibs = [ python.pkgs.httpx ]; # Add `.pth` file pointing at the directory containg our helper library. # This will get added to `sys.path` by `site.py`. # See https://docs.python.org/3/library/site.html postBuild = '' echo ${lib.escapeShellArg ./pylib} > $out/${lib.escapeShellArg python.sitePackages}/tools.pth ''; }; python-commands = [ ./update-nixpkgs ]; in # This derivation creates a package that wraps our tools to setup an environment # with there dependencies available. pkgs.runCommand "ps_tools" { nativeBuildInputs = [ makeWrapper ]; shellHook = '' # Only display the help if we are running an interactive shell. if [[ $- == *i* ]]; then cat <<MOTD Tools (pass --help for details): ${lib.concatStringsSep "\n" (map (path: "- ${baseNameOf path}" ) python-commands)} MOTD fi ''; } '' mkdir -p $out/bin ${lib.concatStringsSep "\n" (map (path: let baseName = baseNameOf path; # We use toString so that we wrap the in-tree scripts, rather than copying # them to the nix-store. This means that we don't need to run nix-shell again # to pick up changes. sourcePath = toString path; in # makeWrapper <executable> <wrapperfile> <args> # See https://nixos.org/manual/nixpkgs/stable/#fun-makeWrapper "makeWrapper ${python-env}/bin/python $out/bin/${baseName} --add-flags ${sourcePath}" ) python-commands)} ''