diff --git a/pkgs/azuredatastudio/default.nix b/pkgs/azuredatastudio/default.nix new file mode 100644 index 0000000..880fa8f --- /dev/null +++ b/pkgs/azuredatastudio/default.nix @@ -0,0 +1,195 @@ +{ + stdenv, + lib, + fetchurl, + copyDesktopItems, + makeDesktopItem, + makeWrapper, + alsa-lib, + at-spi2-atk, + at-spi2-core, + cairo, + cups, + curl, + dbus, + expat, + gdk-pixbuf, + glib, + gnutar, + gtk3, + icu, + libdrm, + libunwind, + libuuid, + libxkbcommon, + mesa, + nspr, + nss, + openssl, + pango, + systemd, + xorg, + zlib, +}: +# from justinwoo/azuredatastudio-nix +# https://github.com/justinwoo/azuredatastudio-nix/blob/537c48aa3981cd1a82d5d6e508ab7e7393b3d7c8/default.nix +let + desktopItem = makeDesktopItem { + name = "azuredatastudio"; + desktopName = "Azure Data Studio"; + comment = "Data Management Tool that enables you to work with SQL Server, Azure SQL DB and SQL DW from Windows, macOS and Linux."; + genericName = "Text Editor"; + exec = "azuredatastudio --no-sandbox --unity-launch %F"; + icon = "azuredatastudio"; + startupNotify = true; + startupWMClass = "azuredatastudio"; + categories = ["Utility" "TextEditor" "Development" "IDE"]; + mimeTypes = ["text/plain" "inode/directory" "application/x-azuredatastudio-workspace"]; + keywords = ["azuredatastudio"]; + actions.new-empty-window = { + name = "New Empty Window"; + exec = "azuredatastudio --no-sandbox --new-window %F"; + icon = "azuredatastudio"; + }; + }; + + urlHandlerDesktopItem = makeDesktopItem { + name = "azuredatastudio-url-handler"; + desktopName = "Azure Data Studio - URL Handler"; + comment = "Azure Data Studio"; + genericName = "Text Editor"; + exec = "azuredatastudio --no-sandbox --open-url %U"; + icon = "azuredatastudio"; + startupNotify = true; + startupWMClass = "azuredatastudio"; + categories = ["Utility" "TextEditor" "Development" "IDE"]; + mimeTypes = ["x-scheme-handler/azuredatastudio"]; + keywords = ["azuredatastudio"]; + noDisplay = true; + }; +in + stdenv.mkDerivation rec { + pname = "azuredatastudio"; + version = "1.47.0"; + + desktopItems = [desktopItem urlHandlerDesktopItem]; + + src = fetchurl { + name = "${pname}-${version}.tar.gz"; + url = "https://azuredatastudio-update.azurewebsites.net/${version}/linux-x64/stable"; + sha256 = "0e094179ffb883d0da8fdbe9721a32402303bf68f411445f2d="; + }; + + nativeBuildInputs = [ + makeWrapper + copyDesktopItems + ]; + + buildInputs = [ + libuuid + at-spi2-core + at-spi2-atk + ]; + + installPhase = '' + runHook preInstall + + mkdir -p $out/share/pixmaps + cp ${targetPath}/resources/app/resources/linux/code.png $out/share/pixmaps/azuredatastudio.png + + runHook postInstall + ''; + + # change this to azuredatastudio-insiders for insiders releases + edition = "azuredatastudio"; + targetPath = "$out/${edition}"; + + unpackPhase = '' + mkdir -p ${targetPath} + ${gnutar}/bin/tar xf $src --strip 1 -C ${targetPath} + ''; + + sqltoolsserviceRpath = lib.makeLibraryPath [ + stdenv.cc.cc + libunwind + libuuid + icu + openssl + zlib + curl + ]; + + # this will most likely need to be updated when azuredatastudio's version changes + sqltoolsservicePath = "${targetPath}/resources/app/extensions/mssql/sqltoolsservice/Linux/4.7.1.6"; + + rpath = lib.concatStringsSep ":" [ + (lib.makeLibraryPath [ + alsa-lib + at-spi2-atk + cairo + cups + dbus + expat + gdk-pixbuf + glib + gtk3 + mesa + nss + nspr + libdrm + xorg.libX11 + xorg.libxcb + xorg.libXcomposite + xorg.libXdamage + xorg.libXext + xorg.libXfixes + xorg.libXrandr + xorg.libxshmfence + libxkbcommon + xorg.libxkbfile + pango + stdenv.cc.cc.lib + systemd + ]) + targetPath + sqltoolsserviceRpath + ]; + + fixupPhase = '' + fix_sqltoolsservice() + { + mv ${sqltoolsservicePath}/$1 ${sqltoolsservicePath}/$1_old + patchelf \ + --set-interpreter "${stdenv.cc.bintools.dynamicLinker}" \ + ${sqltoolsservicePath}/$1_old + + makeWrapper \ + ${sqltoolsservicePath}/$1_old \ + ${sqltoolsservicePath}/$1 \ + --set LD_LIBRARY_PATH ${sqltoolsserviceRpath} + } + + fix_sqltoolsservice MicrosoftSqlToolsServiceLayer + fix_sqltoolsservice MicrosoftSqlToolsCredentials + fix_sqltoolsservice SqlToolsResourceProviderService + + patchelf \ + --set-interpreter "${stdenv.cc.bintools.dynamicLinker}" \ + ${targetPath}/${edition} + + mkdir -p $out/bin + makeWrapper \ + ${targetPath}/bin/${edition} \ + $out/bin/azuredatastudio \ + --set LD_LIBRARY_PATH ${rpath} + ''; + + meta = { + maintainers = with lib.maintainers; [xavierzwirtz]; + description = "A data management tool that enables working with SQL Server, Azure SQL DB and SQL DW"; + homepage = "https://docs.microsoft.com/en-us/sql/azure-data-studio/download-azure-data-studio"; + sourceProvenance = with lib.sourceTypes; [binaryNativeCode]; + license = lib.licenses.unfreeRedistributable; + platforms = ["x86_64-linux"]; + }; + } diff --git a/pkgs/default.nix b/pkgs/default.nix index 3d9e23c..cc4f33d 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -2,4 +2,5 @@ # You can build them using 'nix build .#example' pkgs: { # example = pkgs.callPackage ./example { }; + azuredatastudio = pkgs.callPackage ./azuredatastudio {}; }