vegan-prestwich/shell.nix

91 lines
1.9 KiB
Nix

{ pkgs ? import <nixpkgs> {} }:
let
nodeDeps = import ./node-deps.nix { inherit pkgs; };
inherit (nodeDeps) packageJSON nodeModules;
in
pkgs.mkShell {
buildInputs = with pkgs; [
yarn
sass
lightningcss
];
shellHook = ''
rm -rf node_modules
rm -rf package.json
ln -sf ${packageJSON} package.json
ln -sf ${nodeModules}/node_modules .
serve() {
mkdir -p _site/style
sass --watch style/style.scss:_site/style/style.css &
SASS_PID=$!
yarn eleventy --serve &
ELEVENTY_PID=$!
cleanup_serve() {
echo "Cleaning up serve processes..."
kill $SASS_PID 2>/dev/null
kill $ELEVENTY_PID 2>/dev/null
wait $SASS_PID 2>/dev/null
wait $ELEVENTY_PID 2>/dev/null
}
trap cleanup_serve EXIT INT TERM
wait -n
cleanup_serve
trap - EXIT INT TERM
}
upgrade_deps() {
local mode=''${1:-"minor"}
case $mode in
"major")
echo "Upgrading to latest major versions..."
yarn upgrade --latest 2>/dev/null
;;
"minor")
echo "Upgrading to latest minor versions..."
yarn upgrade 2>/dev/null
;;
"patch")
echo "Upgrading patch versions only..."
yarn upgrade --pattern "*" --target patch 2>/dev/null
;;
*)
echo "Unknown mode: $mode"
echo "Usage: upgrade_deps [major|minor|patch]"
return 1
;;
esac
yarn install 2>/dev/null
echo "Done! Don't forget to commit the updated yarn.lock file."
exit 0
}
export -f upgrade_deps
export -f serve
cleanup() {
echo "Cleaning up..."
rm -rf node_modules _site package.json
}
trap cleanup EXIT
echo "Development environment ready!"
echo "Run 'serve' to start development server"
echo "Run 'upgrade_deps [major|minor|patch]' to upgrade your dependencies"
'';
}