{ # Snowfall Lib provides a customized `lib` instance with access to your flake's library # as well as the libraries available from your flake's inputs. lib, # You also have access to your flake's inputs. inputs, # All other arguments come from NixPkgs. You can use `pkgs` to pull packages or helpers # programmatically or you may add the named attributes as arguments here. pkgs, stdenv, ... }: pkgs.writeShellApplication { name = "conda-direnv"; runtimeInputs = with pkgs; [ conda yq ]; text = '' if [ ! -f environment.yml ]; then echo "environment.yml does not exist! Exiting..." exit 1 fi ENV_NAME=$(${pkgs.yq}/bin/yq ".name" environment.yml -r) if [ "$ENV_NAME" == "" ] || [ "$ENV_NAME" == "null" ]; then echo "Property \"name\" not in environment.yml or empty! Exiting..." exit 1 fi echo Welcome to your conda environment "$ENV_NAME"! Activating... condanew() { conda env create -f environment.yml -n $ENV_NAME conda activate $ENV_NAME } exec ${pkgs.conda}/bin/conda-shell conda activate $ENV_NAME || condanew echo "Environment active! To update it, run:" echo -e "\tconda env update -f environment.yml -n $ENV_NAME" "$SHELL" # needs to be last line so that conda-shell actually enters a shell ''; }