{ pkgs, lib, config, ... }: let marzban-volume = pkgs.stdenv.mkDerivation { name = "marzban-volume"; phases = [ "buildPhase" "installPhase" ]; buildInputs = with pkgs; [ openssl ]; buildPhase = '' mkdir -p $out mkdir -p $out/certs touch $out/.env touch $out/xray-config.json echo "" > $out/.env ''; installPhase = (if config.marzban.cert then '' ${pkgs.openssl}/bin/openssl req -newkey rsa:4096 -x509 -sha512 -days 730 -nodes -out $out/certs/certificate.pem -keyout $out/certs/privatekey.pem -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=${config.marzban.domain}" echo 'UVICORN_SSL_CERTFILE="/code/certs/certificate.pem"' >> $out/.env echo 'UVICORN_SSL_KEYFILE="/code/certs/privatekey.pem"' >> $out/.env echo 'UVICORN_SSL_CA_TYPE="private"' >> $out/.env '' else '''') + '' echo 'UVICORN_HOST="${config.marzban.env.UVICORN_HOST}"' >> $out/.env echo 'UVICORN_PORT=${toString config.marzban.env.UVICORN_PORT}' >> $out/.env echo 'SUDO_USERNAME="${config.marzban.env.SUDO_USERNAME}"' >> $out/.env echo 'SUDO_PASSWORD="${config.marzban.env.SUDO_PASSWORD}"' >> $out/.env echo 'DOCS=${if config.marzban.env.DOCS then "True" else "False"}' >> $out/.env '' + '' cat > $out/xray_config.json <