depot/web/quotes/default.nix

86 lines
2.3 KiB
Nix

{ depot, pkgs, ... }:
let
python = pkgs.python3.withPackages (ps: with ps; [
django_3
gunicorn
psycopg2
(depot.pkgs.django-allauth.override {
django = django_3;
})
(depot.pkgs.django-tailwind.override {
django = django_3;
})
]);
filterSourcePred = (path: type: type != "directory" || (
baseNameOf path != "__pycache__" &&
baseNameOf path != "node_modules" &&
true));
in
pkgs.stdenvNoCC.mkDerivation rec {
name = "quotes";
src = builtins.filterSource filterSourcePred ./.;
buildInputs = with pkgs; [ makeWrapper nodejs ];
propagatedBuildInputs = [ python ];
nodeModules = pkgs.stdenvNoCC.mkDerivation rec {
name = "quotes-node_modules";
src = builtins.filterSource filterSourcePred ./theme/static_src;
outputHash = "sha256:1bm4vb19ikxsdllj80sqnj9s9d2cpp7f5b37gdwfh8i6kk5m0n1x";
outputHashMode = "recursive";
buildInputs = with pkgs; [ nodejs ];
buildPhase = ''
mkdir $NIX_BUILD_TOP/tmp
export HOME=$NIX_BUILD_TOP/tmp
npm i
'';
installPhase = ''
cp -R node_modules $out
'';
};
buildPhase = ''
cp -R $nodeModules theme/static_src/node_modules
'';
installPhase = ''
sitepkgdir="$out/lib/${python.libPrefix}/site-packages"
pkgdir="$sitepkgdir/quotes"
mkdir -p $pkgdir
cp -R \
quotesapp \
quotedb \
templates \
static \
discordguild \
theme \
$pkgdir
mkdir "$out/bin"
makeWrapper "${python}/bin/gunicorn" "$out/bin/quotes" \
--add-flags "quotes.quotesapp.wsgi" \
--suffix PYTHONPATH : "$sitepkgdir"
makeWrapper "${python}/bin/django-admin" "$out/bin/quotes-manage" \
--set DJANGO_SETTINGS_MODULE "quotes.quotesapp.prod_settings" \
--suffix PYTHONPATH : "$sitepkgdir"
mkdir -p "$out/share/static"
export STATIC_ROOT="$out/share/static"
export DJANGO_SETTINGS_MODULE=quotes.quotesapp.settings
export PYTHONPATH=$PYTHONPATH''${PYTHONPATH:+':'}"$sitepkgdir"
mkdir $NIX_BUILD_TOP/tmp
export HOME=$NIX_BUILD_TOP/tmp
django-admin tailwind build
django-admin collectstatic --no-input
chmod -R +w $pkgdir/theme/static $pkgdir/theme/static_src
rm -rf $pkgdir/theme/static $pkgdir/theme/static_src
'';
passthru.pythonEnv = python;
}