shell.nix
83 lines
| 3.0 KiB
| text/x-nix
|
NixLexer
r1 | { pkgs ? (import <nixpkgs> {}) | |||
Martin Bornhold
|
r1132 | , pythonPackages ? "python27Packages" | ||
r1 | , doCheck ? true | |||
Martin Bornhold
|
r1133 | , sourcesOverrides ? {} | ||
Martin Bornhold
|
r1132 | , doDevelopInstall ? true | ||
r1 | }: | |||
let | ||||
Martin Bornhold
|
r1133 | # Get sources from config and update them with overrides. | ||
sources = (pkgs.config.rc.sources or {}) // sourcesOverrides; | ||||
r1 | ||||
Martin Bornhold
|
r1130 | enterprise-ce = import ./default.nix { | ||
Martin Bornhold
|
r1132 | inherit pkgs pythonPackages doCheck; | ||
r1 | }; | |||
Martin Bornhold
|
r1130 | ce-pythonPackages = enterprise-ce.pythonPackages; | ||
r1 | ||||
Martin Bornhold
|
r1131 | # This method looks up a path from `pkgs.config.rc.sources` and returns a | ||
# shell script which does a `python setup.py develop` installation of it. If | ||||
# no path is found it will return an empty string. | ||||
optionalDevelopInstall = attributeName: | ||||
let | ||||
path = pkgs.lib.attrByPath [attributeName] null sources; | ||||
doIt = doDevelopInstall && path != null; | ||||
in | ||||
pkgs.lib.optionalString doIt ( | ||||
builtins.trace "Develop install of ${attributeName} from ${path}" '' | ||||
echo "Develop install of '${attributeName}' from '${path}' [BEGIN]" | ||||
pushd ${path} | ||||
python setup.py develop --prefix $tmp_path --allow-hosts "" | ||||
popd | ||||
echo "Develop install of '${attributeName}' from '${path}' [DONE]" | ||||
''); | ||||
# This method looks up a path from `pkgs.config.rc.sources` and imports the | ||||
# default.nix file if it exists. It returns the list of build inputs. If no | ||||
# path is found it will return an empty list. | ||||
optionalDevelopInstallBuildInputs = attributeName: | ||||
let | ||||
path = pkgs.lib.attrByPath [attributeName] null sources; | ||||
nixFile = "${path}/default.nix"; | ||||
doIt = doDevelopInstall && path != null && pkgs.lib.pathExists "${nixFile}"; | ||||
derivate = import "${nixFile}" { | ||||
inherit doCheck pkgs pythonPackages; | ||||
}; | ||||
in | ||||
pkgs.lib.lists.optionals doIt derivate.propagatedNativeBuildInputs; | ||||
developInstalls = [ "rhodecode-vcsserver" ]; | ||||
Martin Bornhold
|
r1130 | in enterprise-ce.override (attrs: { | ||
r1 | # Avoid that we dump any sources into the store when entering the shell and | |||
# make development a little bit more convenient. | ||||
src = null; | ||||
Martin Bornhold
|
r433 | buildInputs = | ||
attrs.buildInputs ++ | ||||
Martin Bornhold
|
r1132 | pkgs.lib.lists.concatMap optionalDevelopInstallBuildInputs developInstalls ++ | ||
Martin Bornhold
|
r1130 | (with ce-pythonPackages; [ | ||
Martin Bornhold
|
r433 | bumpversion | ||
invoke | ||||
ipdb | ||||
]); | ||||
r1 | ||||
Martin Bornhold
|
r1130 | # Somewhat snappier setup of the development environment | ||
# TODO: think of supporting a stable path again, so that multiple shells | ||||
# can share it. | ||||
Martin Bornhold
|
r1132 | preShellHook = enterprise-ce.linkNodeAndBowerPackages + '' | ||
Martin Bornhold
|
r1130 | # Custom prompt to distinguish from other dev envs. | ||
export PS1="\n\[\033[1;32m\][CE-shell:\w]$\[\033[0m\] " | ||||
Martin Bornhold
|
r1132 | # Setup a temporary directory. | ||
Martin Bornhold
|
r1130 | tmp_path=$(mktemp -d) | ||
export PATH="$tmp_path/bin:$PATH" | ||||
export PYTHONPATH="$tmp_path/${ce-pythonPackages.python.sitePackages}:$PYTHONPATH" | ||||
mkdir -p $tmp_path/${ce-pythonPackages.python.sitePackages} | ||||
Martin Bornhold
|
r1132 | |||
# Develop installations | ||||
Martin Bornhold
|
r1130 | python setup.py develop --prefix $tmp_path --allow-hosts "" | ||
Martin Bornhold
|
r1132 | echo "Additional develop installs" | ||
'' + pkgs.lib.strings.concatMapStrings optionalDevelopInstall developInstalls; | ||||
Martin Bornhold
|
r1130 | |||
r1 | }) | |||