98 lines
2.4 KiB
Bash
Executable File
98 lines
2.4 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2025, Barcelona Supercomputing Center (BSC)
|
|
# SPDX-License-Identifier: GPL-3.0+
|
|
# Author: Rodrigo Arias Mallo <rodrigo.arias@bsc.es>
|
|
|
|
function usage() {
|
|
echo "USAGE: nixgen [-f] [package [...]] [-b package [...]]" >&2
|
|
echo " Generates a flake.nix file with the given packages." >&2
|
|
echo " After flake.nix is created, use 'nix develop' to enter the shell." >&2
|
|
echo "OPTIONS" >&2
|
|
echo " -f Overwrite existing flake.nix (default: no)." >&2
|
|
echo " packages... Add these packages to the shell." >&2
|
|
echo " -b packages... Add the dependencies needed to build these packages." >&2
|
|
echo "EXAMPLE" >&2
|
|
echo " $ nixgen ovni bigotes -b nosv tampi" >&2
|
|
echo " Adds the packages ovni and bigotes as well as all required dependencies" >&2
|
|
echo " to build nosv and tampi." >&2
|
|
echo "AUTHOR" >&2
|
|
echo " Rodrigo Arias Mallo <rodrigo.arias@bsc.es>" >&2
|
|
exit 1
|
|
}
|
|
|
|
mode=package
|
|
packages=
|
|
inputsFrom=
|
|
force=
|
|
|
|
if [[ $# -eq 0 ]]; then
|
|
usage
|
|
fi
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in -b)
|
|
mode=build
|
|
shift
|
|
;;
|
|
-f)
|
|
force=1
|
|
shift
|
|
;;
|
|
-h)
|
|
usage
|
|
;;
|
|
-*|--*)
|
|
echo "error: unknown option $1" >&2
|
|
exit 1
|
|
;;
|
|
*)
|
|
if [ "$mode" == "package" ]; then
|
|
packages+="${packages:+ }$1"
|
|
else
|
|
inputsFrom+="${inputsFrom:+ }$1"
|
|
fi
|
|
shift
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ ! "$force" -a -e flake.nix ]; then
|
|
echo "error: flake.nix exists, force overwrite with -f" >&2
|
|
exit 1
|
|
fi
|
|
|
|
cat > flake.nix <<EOF
|
|
{
|
|
inputs.jungle.url = "git+https://jungle.bsc.es/git/rarias/jungle";
|
|
outputs = { self, jungle }:
|
|
let
|
|
nixpkgs = jungle.inputs.nixpkgs;
|
|
customOverlay = (final: prev: {
|
|
# Example overlay, for now empty
|
|
});
|
|
pkgs = import nixpkgs {
|
|
system = "x86_64-linux";
|
|
overlays = [
|
|
# Apply jungle overlay to get our BSC custom packages
|
|
jungle.outputs.bscOverlay
|
|
# And on top apply our local changes to customize for cluster
|
|
customOverlay
|
|
];
|
|
};
|
|
in {
|
|
devShells.x86_64-linux.default = pkgs.mkShell {
|
|
pname = "devshell";
|
|
# Include these packages in the shell
|
|
packages = with pkgs; [
|
|
$packages
|
|
];
|
|
# The dependencies needed to build these packages will be also included
|
|
inputsFrom = with pkgs; [
|
|
$inputsFrom
|
|
];
|
|
};
|
|
};
|
|
}
|
|
EOF
|