4
0
Fork 2
mirror of https://gerrit.hackerspace.pl/hscloud synced 2024-10-18 12:17:46 +00:00
hscloud/shell.nix
Serge Bazanski 0f8e5a2132 *: do not require env.sh
This removes the need to source env.{sh,fish} when working with hscloud.

This is done by:

 1. Implementing a Go library to reliably detect the location of the
    active hscloud checkout. That in turn is enabled by
    BUILD_WORKSPACE_DIRECTORY being now a thing in Bazel.
 2. Creating a tool `hscloud`, with a command `hscloud workspace` that
    returns the workspace path.
 3. Wrapping this tool to be accessible from Python and Bash.
 4. Bumping all users of hscloud_root to use either the Go library or
    one of the two implemented wrappers.

We also drive-by replace tools/install.sh to be a proper sh_binary, and
make it yell at people if it isn't being ran as `bazel run
//tools:install`.

Finally, we also drive-by delete cluster/tools/nixops.sh which was never used.

Change-Id: I7873714319bfc38bbb930b05baa605c5aa36470a
Reviewed-on: https://gerrit.hackerspace.pl/c/hscloud/+/1169
Reviewed-by: informatic <informatic@hackerspace.pl>
2021-10-17 21:21:58 +00:00

50 lines
1 KiB
Nix

# Shell for being able to use bazel on NixOS (or on any operating system with Nix installed).
let
hscloud = import ./default.nix {};
in with hscloud.pkgs; let
wrapper = pkgs.writeScript "wrapper.sh"
''
source /etc/profile
source ${toString ./.}/env.sh
bazel run //tools:install
# Fancy colorful PS1 to make people notice easily they're in hscloud.
PS1='\[\033]0;\u/hscloud:\w\007\]'
if type -P dircolors >/dev/null ; then
PS1+='\[\033[01;35m\]\u/hscloud\[\033[01;34m\] \w \$\[\033[00m\] '
fi
export PS1
exec bash "$@"
'';
in (pkgs.buildFHSUserEnv {
name = "hscloud-build";
targetPkgs = pkgs: with pkgs; [
bazel
postgresql
python38
openjdk11
openldap.dev cyrus_sasl.dev # for python-ldap
wkhtmltopdf
gcc binutils
pwgen
tmate
git
which
gnupg
nettools
];
multiPkgs = pkgs: [
(pkgs.runCommand "protocols" {}
''
mkdir -p $out/etc
ln -s ${pkgs.iana-etc}/etc/protocols $out/etc/protocols
'')
];
runScript = wrapper;
}).env