{ lib , stdenv , fetchurl , less , makeWrapper , autoPatchelfHook , curl , icu , libuuid , libunwind , openssl , darwin , lttng-ust , pam , testers , powershell , writeShellScript , common-updater-scripts , gnused , jq }: let ext = stdenv.hostPlatform.extensions.sharedLibrary; platformLdLibraryPath = { darwin = "DYLD_FALLBACK_LIBRARY_PATH"; linux = "LD_LIBRARY_PATH"; }.${stdenv.hostPlatform.parsed.kernel.name} or (throw "unsupported platform"); in stdenv.mkDerivation rec { pname = "powershell"; version = "7.4.5"; src = passthru.sources.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}"); sourceRoot = "."; strictDeps = true; nativeBuildInputs = [ less makeWrapper ] ++ lib.optionals stdenv.hostPlatform.isLinux [ autoPatchelfHook ]; buildInputs = [ curl icu libuuid libunwind openssl ] ++ lib.optionals stdenv.hostPlatform.isDarwin [ darwin.Libsystem ] ++ lib.optionals stdenv.hostPlatform.isLinux [ lttng-ust pam ]; installPhase = '' runHook preInstall mkdir -p $out/{bin,share/powershell} cp -R * $out/share/powershell chmod +x $out/share/powershell/pwsh makeWrapper $out/share/powershell/pwsh $out/bin/pwsh \ --prefix ${platformLdLibraryPath} : "${lib.makeLibraryPath buildInputs}" \ --set TERM xterm \ --set POWERSHELL_TELEMETRY_OPTOUT 1 \ --set DOTNET_CLI_TELEMETRY_OPTOUT 1 '' + lib.optionalString stdenv.hostPlatform.isLinux '' patchelf --replace-needed liblttng-ust${ext}.0 liblttng-ust${ext}.1 $out/share/powershell/libcoreclrtraceptprovider.so '' + '' runHook postInstall ''; dontStrip = true; passthru = { shellPath = "/bin/pwsh"; sources = { aarch64-darwin = fetchurl { url = "https://github.com/PowerShell/PowerShell/releases/download/v${version}/powershell-${version}-osx-arm64.tar.gz"; hash = "sha256-pN0wv/jV1luaLO1NF4QRwXI8FzcBev8VCkiMcSs3r1I="; }; aarch64-linux = fetchurl { url = "https://github.com/PowerShell/PowerShell/releases/download/v${version}/powershell-${version}-linux-arm64.tar.gz"; hash = "sha256-8JaGSezUfVUAzLdmxP9No04NeCVMzpCYx/QtDlSEtRM="; }; x86_64-darwin = fetchurl { url = "https://github.com/PowerShell/PowerShell/releases/download/v${version}/powershell-${version}-osx-x64.tar.gz"; hash = "sha256-1DE6D4AZBwKz9UIPpLy3a9hlgsF4QoGf2+eYO5SANYA="; }; x86_64-linux = fetchurl { url = "https://github.com/PowerShell/PowerShell/releases/download/v${version}/powershell-${version}-linux-x64.tar.gz"; hash = "sha256-wjUJzE0Ixiuf9uom9XnuTFD5eKo0JpM0qF7aL+w29Fs="; }; }; tests.version = testers.testVersion { package = powershell; command = "HOME=$(mktemp -d) pwsh --version"; }; updateScript = writeShellScript "update-powershell" '' set -o errexit export PATH="${lib.makeBinPath [ common-updater-scripts curl gnused jq ]}" NEW_VERSION=$(curl -s https://api.github.com/repos/PowerShell/PowerShell/releases/latest | jq .tag_name --raw-output | sed -e 's/v//') if [[ "${version}" = "$NEW_VERSION" ]]; then echo "The new version same as the old version." exit 0 fi for platform in ${lib.escapeShellArgs meta.platforms}; do update-source-version "powershell" "$NEW_VERSION" --ignore-same-version --source-key="sources.$platform" done ''; }; meta = with lib; { description = "Powerful cross-platform (Windows, Linux, and macOS) shell and scripting language based on .NET"; homepage = "https://microsoft.com/PowerShell"; license = licenses.mit; mainProgram = "pwsh"; maintainers = with maintainers; [ wegank ]; platforms = builtins.attrNames passthru.sources; sourceProvenance = with sourceTypes; [ binaryBytecode binaryNativeCode ]; }; }