diff --git a/flake.nix b/flake.nix index 97584a3..a801eb5 100644 --- a/flake.nix +++ b/flake.nix @@ -31,15 +31,26 @@ }: flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs {inherit system;}; - devDeps = with pkgs; [ - python3Packages.django_5 - python3Packages.django-debug-toolbar - python3Packages.django-compressor - dart-sass + uwsgiPort = 8001; - python3Packages.geoip2 - libmaxminddb + uwsgi = pkgs.uwsgi.override { + plugins = ["python3"]; + python3 = pkgs.python3; + }; + + appDeps = with pkgs; [ + python3Packages.django_5 + python3Packages.django-compressor ]; + runtimeDeps = with pkgs; + [ + python3Packages.geoip2 + libmaxminddb + ] + ++ appDeps; + buildDeps = [pkgs.dart-sass] ++ appDeps; + debugDeps = [pkgs.python3Packages.django-debug-toolbar] ++ runtimeDeps; + geoip = pkgs.stdenv.mkDerivation { name = "geoip"; srcs = [geoip2-asn geoip2-city geoip2-country]; @@ -55,30 +66,47 @@ packages.e11sync-static = pkgs.stdenv.mkDerivation { name = "e11sync-static"; src = self; - nativeBuildInputs = with pkgs; [ - python3Packages.django_5 - python3Packages.django-compressor - dart-sass - python3 - ]; + nativeBuildInputs = buildDeps; buildPhase = '' - mkdir -p $out/static - export E11SYNC_STATIC_ROOT=$out/static - export E11SYNC_DEBUG= - export E11SYNC_COMPRESS_OFFLINE=1 - ${pkgs.python3}/bin/python3 ${self}/app/manage.py collectstatic - ${pkgs.python3}/bin/python3 ${self}/app/manage.py compress + mkdir -p $out/static + export E11SYNC_STATIC_ROOT=$out/static + export E11SYNC_DEBUG= + export E11SYNC_COMPRESS_OFFLINE=1 + ${pkgs.python3}/bin/python3 ${self}/app/manage.py collectstatic + ${pkgs.python3}/bin/python3 ${self}/app/manage.py compress - ${pkgs.findutils}/bin/find $out/static/CACHE -name '*.css' | \ - ${pkgs.findutils}/bin/xargs -P8 -I{} sh -c \ - "${pkgs.zopfli}/bin/zopfli {} && ${pkgs.brotli}/bin/brotli {}" + ${pkgs.findutils}/bin/find $out/static/CACHE -name '*.css' | \ + ${pkgs.findutils}/bin/xargs -P8 -I{} sh -c \ + "${pkgs.zopfli}/bin/zopfli {} && ${pkgs.brotli}/bin/brotli {}" ''; }; + packages.e11sync-uwsgi = pkgs.stdenv.mkDerivation { + name = "e11sync-uwsgi"; + propagatedBuildInputs = [runtimeDeps]; + nativeBuildInputs = [pkgs.makeWrapper]; + src = self; + dontUnpack = true; + buildPhase = '' + mkdir -p $out; + cp -r ${self}/app $out + makeWrapper ${uwsgi}/bin/uwsgi $out/bin/entrypoint-uwsgi \ + --add-flags '\ + --chdir='"$out"'/app \ + --module=e11sync.wsgi:application \ + --master \ + --http-socket=127.0.0.1:${toString uwsgiPort} \ + --processes=5 \ + --harakiri=20 \ + --max-requests=10000 \ + --vacuum' + ''; + }; + devShells.default = pkgs.mkShellNoCC { LOCALE_ARCHIVE = "${pkgs.glibcLocales}/lib/locale/locale-archive"; GEOIP_PATH = "${geoip}"; E11SYNC_DEBUG = "1"; - packages = devDeps; + packages = debugDeps; }; formatter = pkgs.alejandra;