diff --git a/pkgs/applications/editors/rstudio/default.nix b/pkgs/applications/editors/rstudio/default.nix index e854291310b8..8e25830a4036 100644 --- a/pkgs/applications/editors/rstudio/default.nix +++ b/pkgs/applications/editors/rstudio/default.nix @@ -16,13 +16,13 @@ , qtsensors , qtwebengine , qtwebchannel +, quarto , libuuid , hunspellDicts , unzip , ant , jdk , gnumake -, makeWrapper , pandoc , llvmPackages , yaml-cpp @@ -40,39 +40,39 @@ let pname = "RStudio"; - version = "2022.07.1+554"; - RSTUDIO_VERSION_MAJOR = "2022"; - RSTUDIO_VERSION_MINOR = "07"; - RSTUDIO_VERSION_PATCH = "1"; - RSTUDIO_VERSION_SUFFIX = "+554"; + version = + "${RSTUDIO_VERSION_MAJOR}.${RSTUDIO_VERSION_MINOR}.${RSTUDIO_VERSION_PATCH}${RSTUDIO_VERSION_SUFFIX}"; + RSTUDIO_VERSION_MAJOR = "2023"; + RSTUDIO_VERSION_MINOR = "09"; + RSTUDIO_VERSION_PATCH = "0"; + RSTUDIO_VERSION_SUFFIX = "+463"; src = fetchFromGitHub { owner = "rstudio"; repo = "rstudio"; rev = "v${version}"; - sha256 = "0rmdqxizxqg2vgr3lv066cjmlpjrxjlgi0m97wbh6iyhkfm2rrj1"; + hash = "sha256-FwNuU2rbE3GEhuwphvZISUMhvSZJ6FjjaZ1oQ9F8NWc="; }; mathJaxSrc = fetchurl { url = "https://s3.amazonaws.com/rstudio-buildtools/mathjax-27.zip"; - sha256 = "sha256-xWy6psTOA8H8uusrXqPDEtL7diajYCVHcMvLiPsgQXY="; + hash = "sha256-xWy6psTOA8H8uusrXqPDEtL7diajYCVHcMvLiPsgQXY="; }; rsconnectSrc = fetchFromGitHub { owner = "rstudio"; repo = "rsconnect"; - rev = "e287b586e7da03105de3faa8774c63f08984eb3c"; - sha256 = "sha256-ULyWdSgGPSAwMt0t4QPuzeUE6Bo6IJh+5BMgW1bFN+Y="; + rev = "5175a927a41acfd9a21d9fdecb705ea3292109f2"; + hash = "sha256-c1fFcN6KAfxXv8bv4WnIqQKg1wcNP2AywhEmIbyzaBA="; }; - panmirrorModules = mkYarnModules rec { - inherit pname version; - packageJSON = ./package.json; - yarnLock = "${src}/src/gwt/panmirror/src/editor/yarn.lock"; - offlineCache = fetchYarnDeps { - inherit yarnLock; - hash = "sha256-v05Up6VMlYlvgUYQVYo+YfpcsMohliNfMgyjq6QymCI="; - }; + # Ideally, rev should match the rstudio release name. + # e.g. release/rstudio-mountain-hydrangea + quartoSrc = fetchFromGitHub { + owner = "quarto-dev"; + repo = "quarto"; + rev = "bb264a572c6331d46abcf087748c021d815c55d7"; + hash = "sha256-lZnZvioztbBWWa6H177X6rRrrgACx2gMjVFDgNup93g="; }; description = "Set of integrated tools for the R language"; @@ -86,7 +86,6 @@ in unzip ant jdk - makeWrapper pandoc nodejs ] ++ lib.optionals (!server) [ @@ -102,6 +101,7 @@ in yaml-cpp soci postgresql + quarto ] ++ (if server then [ sqlite.dev pam @@ -119,7 +119,7 @@ in "-DRSTUDIO_USE_SYSTEM_SOCI=ON" "-DRSTUDIO_USE_SYSTEM_BOOST=ON" "-DRSTUDIO_USE_SYSTEM_YAML_CPP=ON" - "-DQUARTO_ENABLED=FALSE" + "-DQUARTO_ENABLED=TRUE" "-DPANDOC_VERSION=${pandoc.version}" "-DCMAKE_INSTALL_PREFIX=${placeholder "out"}/lib/rstudio" ] ++ lib.optionals (!server) [ @@ -133,8 +133,7 @@ in ./use-system-node.patch ./fix-resources-path.patch ./pandoc-nix-path.patch - ./remove-quarto-from-generator.patch - ./do-not-install-pandoc.patch + ./use-system-quarto.patch ]; postPatch = '' @@ -144,16 +143,20 @@ in --replace 'SOCI_LIBRARY_DIR "/usr/lib"' 'SOCI_LIBRARY_DIR "${soci}/lib"' substituteInPlace src/gwt/build.xml \ - --replace '@node@' ${nodejs} + --replace '@node@' ${nodejs} \ + --replace './lib/quarto' ${quartoSrc} substituteInPlace src/cpp/core/libclang/LibClang.cpp \ --replace '@libclang@' ${llvmPackages.libclang.lib} \ --replace '@libclang.so@' ${llvmPackages.libclang.lib}/lib/libclang.so - substituteInPlace src/cpp/session/include/session/SessionConstants.hpp \ - --replace '@pandoc@' ${pandoc}/bin/pandoc + substituteInPlace src/cpp/session/CMakeLists.txt \ + --replace '@pandoc@' ${pandoc} \ + --replace '@quarto@' ${quarto} - sed '1i#include ' -i src/cpp/core/include/core/Thread.hpp + substituteInPlace src/cpp/session/include/session/SessionConstants.hpp \ + --replace '@pandoc@' ${pandoc}/bin \ + --replace '@quarto@' ${quarto} ''; hunspellDictionaries = with lib; filter isDerivation (unique (attrValues hunspellDicts)); @@ -181,8 +184,6 @@ in cp -r ${rsconnectSrc} dependencies/rsconnect ( cd dependencies && ${R}/bin/R CMD build -d --no-build-vignettes rsconnect ) - - cp -r "${panmirrorModules}" src/gwt/panmirror/src/editor/node_modules ''; postInstall = '' @@ -206,14 +207,14 @@ in rm -r $out/lib/rstudio/{INSTALL,COPYING,NOTICE,README.md,SOURCE,VERSION} ''; - meta = with lib; { + meta = { broken = (stdenv.isLinux && stdenv.isAarch64); inherit description; homepage = "https://www.rstudio.com/"; - license = licenses.agpl3Only; - maintainers = with maintainers; [ ciil cfhammill ]; + license = lib.licenses.agpl3Only; + maintainers = with lib.maintainers; [ ciil cfhammill ]; mainProgram = "rstudio" + lib.optionalString server "-server"; - platforms = platforms.linux; + platforms = lib.platforms.linux; }; passthru = { diff --git a/pkgs/applications/editors/rstudio/do-not-install-pandoc.patch b/pkgs/applications/editors/rstudio/do-not-install-pandoc.patch deleted file mode 100644 index 25bfb2b1e8f4..000000000000 --- a/pkgs/applications/editors/rstudio/do-not-install-pandoc.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- a/src/cpp/session/CMakeLists.txt -+++ b/src/cpp/session/CMakeLists.txt -@@ -60,8 +60,7 @@ - - # validate our dependencies exist - foreach(VAR RSTUDIO_DEPENDENCIES_DICTIONARIES_DIR -- RSTUDIO_DEPENDENCIES_MATHJAX_DIR -- RSTUDIO_DEPENDENCIES_PANDOC_DIR) -+ RSTUDIO_DEPENDENCIES_MATHJAX_DIR) - - # validate existence - if(NOT EXISTS "${${VAR}}") - diff --git a/pkgs/applications/editors/rstudio/package.json b/pkgs/applications/editors/rstudio/package.json deleted file mode 100644 index 6677ca9e06de..000000000000 --- a/pkgs/applications/editors/rstudio/package.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "name": "panmirror", - "version": "0.1.0", - "private": true, - "license": "agpl-3.0", - "dependencies": { - "@types/ace": "^0.0.43", - "@types/clipboard": "^2.0.7", - "@types/diff-match-patch": "^1.0.32", - "@types/js-yaml": "^4.0.3", - "@types/lodash.debounce": "^4.0.6", - "@types/lodash.orderby": "^4.6.6", - "@types/lodash.uniqby": "^4.7.6", - "@types/orderedmap": "^1.0.0", - "@types/pinyin": "^2.10.0", - "@types/prosemirror-commands": "^1.0.4", - "@types/prosemirror-dropcursor": "^1.0.3", - "@types/prosemirror-gapcursor": "^1.0.4", - "@types/prosemirror-history": "^1.0.3", - "@types/prosemirror-inputrules": "^1.0.4", - "@types/prosemirror-keymap": "^1.0.4", - "@types/prosemirror-schema-list": "^1.0.3", - "@types/prosemirror-tables": "^0.9.1", - "@types/react": "^17.0.20", - "@types/react-dom": "^17.0.9", - "@types/react-window": "^1.8.5", - "@types/transliteration": "^1.6.6", - "@types/zenscroll": "^4.0.1", - "biblatex-csl-converter": "^2.0.2", - "clipboard": "^2.0.8", - "diff-match-patch": "^1.0.5", - "fuse.js": "^6.4.6", - "js-yaml": "^4.1.0", - "lodash.debounce": "^4.0.8", - "lodash.orderby": "^4.6.0", - "lodash.uniqby": "^4.7.0", - "orderedmap": "^1.0.0", - "pinyin": "^2.10.2", - "prosemirror-changeset": "^2.1.2", - "prosemirror-commands": "^1.1.10", - "prosemirror-dev-tools": "^2.1.1", - "prosemirror-dropcursor": "^1.3.5", - "prosemirror-gapcursor": "^1.1.5", - "prosemirror-history": "^1.2.0", - "prosemirror-inputrules": "^1.1.3", - "prosemirror-keymap": "^1.1.4", - "prosemirror-model": "^1.14.3", - "prosemirror-schema-list": "^1.1.5", - "prosemirror-state": "^1.3.4", - "prosemirror-tables": "^1.1.1", - "prosemirror-transform": "^1.3.2", - "prosemirror-utils": "^0.9.6", - "prosemirror-view": "^1.20.1", - "react": "^17.0.2", - "react-dom": "^17.0.2", - "react-window": "^1.8.6", - "sentence-splitter": "^3.2.2", - "thenby": "^1.3.3", - "tlite": "^0.1.9", - "transliteration": "^2.2.0", - "typescript": "3.8.3", - "zenscroll": "^4.0.2" - }, - "scripts": { - "format": "prettier --write \"src/**/*.ts\" \"src/**/*.tsx\"", - "lint": "tslint -c tslint.json 'src/**/*.{ts,tsx}'", - "watch": "tsc --watch --noEmit --project './tsconfig.json'", - "generate-symbols": "ts-node tools/generate-symbols.ts" - }, - "devDependencies": { - "@types/node": "^14.0.4", - "@types/unzip": "^0.1.1", - "fast-xml-parser": "^3.17.1", - "fuse-box": "^3.7.1", - "prettier": "^1.18.2", - "terser": "^4.6.2", - "ts-node": "^8.10.2", - "tslint": "^5.20.0", - "tslint-config-prettier": "^1.18.0", - "tslint-react": "^5.0.0", - "typescript-tslint-plugin": "^0.5.5", - "uglify-js": "^3.7.4", - "unzip": "^0.1.11" - } -} diff --git a/pkgs/applications/editors/rstudio/pandoc-nix-path.patch b/pkgs/applications/editors/rstudio/pandoc-nix-path.patch index a2b9bbd9f02b..2782a5a0d7a2 100644 --- a/pkgs/applications/editors/rstudio/pandoc-nix-path.patch +++ b/pkgs/applications/editors/rstudio/pandoc-nix-path.patch @@ -1,11 +1,18 @@ --- a/src/cpp/session/include/session/SessionConstants.hpp +++ b/src/cpp/session/include/session/SessionConstants.hpp -@@ -140,7 +140,7 @@ +@@ -142,13 +142,13 @@ + #define kSessionTmpDir "rstudio-rsession" + #ifdef QUARTO_ENABLED - # define kDefaultPandocPath "bin/quarto/bin" - #else --# define kDefaultPandocPath "bin/pandoc" +-# define kDefaultPandocPath "bin/quarto/bin/tools" +# define kDefaultPandocPath "@pandoc@" + #else + # define kDefaultPandocPath "bin/pandoc" #endif - #define kDefaultQuartoPath "bin/quarto" + #define kDefaultNodePath "bin/node" +-#define kDefaultQuartoPath "bin/quarto" ++#define kDefaultQuartoPath "@quarto@" + #define kDefaultRsclangPath "bin/rsclang" + + #ifdef _WIN32 diff --git a/pkgs/applications/editors/rstudio/remove-quarto-from-generator.patch b/pkgs/applications/editors/rstudio/remove-quarto-from-generator.patch deleted file mode 100644 index 1c28bbada6da..000000000000 --- a/pkgs/applications/editors/rstudio/remove-quarto-from-generator.patch +++ /dev/null @@ -1,32 +0,0 @@ ---- a/src/cpp/session/CMakeLists.txt -+++ b/src/cpp/session/CMakeLists.txt -@@ -43,12 +43,6 @@ - set(RSTUDIO_DEPENDENCIES_MATHJAX_DIR "${RSTUDIO_DEPENDENCIES_DIR}/mathjax-27") - endif() - -- if(EXISTS "${RSTUDIO_TOOLS_ROOT}/quarto") -- set(RSTUDIO_DEPENDENCIES_QUARTO_DIR "${RSTUDIO_TOOLS_ROOT}/quarto") -- else() -- set(RSTUDIO_DEPENDENCIES_QUARTO_DIR "${RSTUDIO_DEPENDENCIES_DIR}/quarto") -- endif() -- - endif() - - -@@ -67,14 +61,7 @@ - # validate our dependencies exist - foreach(VAR RSTUDIO_DEPENDENCIES_DICTIONARIES_DIR - RSTUDIO_DEPENDENCIES_MATHJAX_DIR -- RSTUDIO_DEPENDENCIES_PANDOC_DIR -- RSTUDIO_DEPENDENCIES_QUARTO_DIR) -- -- -- # skip quarto if not enabled -- if("${VAR}" STREQUAL "RSTUDIO_DEPENDENCIES_QUARTO_DIR" AND NOT QUARTO_ENABLED) -- continue() -- endif() -+ RSTUDIO_DEPENDENCIES_PANDOC_DIR) - - # validate existence - if(NOT EXISTS "${${VAR}}") - diff --git a/pkgs/applications/editors/rstudio/use-system-node.patch b/pkgs/applications/editors/rstudio/use-system-node.patch index 248f4fe86e21..859349096134 100644 --- a/pkgs/applications/editors/rstudio/use-system-node.patch +++ b/pkgs/applications/editors/rstudio/use-system-node.patch @@ -1,29 +1,60 @@ +diff --git a/src/gwt/build.xml b/src/gwt/build.xml +index 83e9433..f1ee63d 100644 --- a/src/gwt/build.xml +++ b/src/gwt/build.xml -@@ -83,24 +83,7 @@ - Concatenated acesupport files to 'acesupport.js' - - -- -- -- -- -- +@@ -87,29 +87,7 @@ + + + +- +- - - - - -- +- +- - - -- -- +- - -+ +- property="yarn.bin" +- value="/opt/rstudio-tools/dependencies/common/node/${node.version}/bin/yarn" +- file="/opt/rstudio-tools/dependencies/common/node/${node.version}/bin/yarn"/> +- +- ++ - + - +@@ -126,21 +104,11 @@ + file="c:\rstudio-tools\src\gwt\lib\quarto\apps\panmirror"/> + + +- +- + +- +- +- +- +- +- +- +- ++ ++ ++ + +- +- +- + + + diff --git a/pkgs/applications/editors/rstudio/use-system-quarto.patch b/pkgs/applications/editors/rstudio/use-system-quarto.patch new file mode 100644 index 000000000000..89653219dbea --- /dev/null +++ b/pkgs/applications/editors/rstudio/use-system-quarto.patch @@ -0,0 +1,46 @@ +--- a/src/cpp/session/CMakeLists.txt ++++ b/src/cpp/session/CMakeLists.txt +@@ -36,18 +36,14 @@ + else() + set(RSTUDIO_DEPENDENCIES_DICTIONARIES_DIR "${RSTUDIO_DEPENDENCIES_DIR}/dictionaries") + endif() +- ++ + if(EXISTS "${RSTUDIO_TOOLS_ROOT}/mathjax-27") + set(RSTUDIO_DEPENDENCIES_MATHJAX_DIR "${RSTUDIO_TOOLS_ROOT}/mathjax-27") + else() + set(RSTUDIO_DEPENDENCIES_MATHJAX_DIR "${RSTUDIO_DEPENDENCIES_DIR}/mathjax-27") + endif() + +- if(EXISTS "${RSTUDIO_TOOLS_ROOT}/quarto") +- set(RSTUDIO_DEPENDENCIES_QUARTO_DIR "${RSTUDIO_TOOLS_ROOT}/quarto") +- else() +- set(RSTUDIO_DEPENDENCIES_QUARTO_DIR "${RSTUDIO_DEPENDENCIES_DIR}/quarto") +- endif() ++ set(RSTUDIO_DEPENDENCIES_QUARTO_DIR "@quarto@") + + endif() + +@@ -56,7 +52,7 @@ + # - by default, we use quarto + quarto's bundled pandoc + # - if quarto is not enabled, use pandoc fallback + if(QUARTO_ENABLED) +- set(RSTUDIO_DEPENDENCIES_PANDOC_DIR "${RSTUDIO_DEPENDENCIES_QUARTO_DIR}/bin/tools") ++ set(RSTUDIO_DEPENDENCIES_PANDOC_DIR "@pandoc@/bin") + elseif(EXISTS "${RSTUDIO_TOOLS_ROOT}/pandoc/${PANDOC_VERSION}") + set(RSTUDIO_DEPENDENCIES_PANDOC_DIR "${RSTUDIO_TOOLS_ROOT}/pandoc/${PANDOC_VERSION}") + else() +@@ -66,11 +62,9 @@ + + # validate our dependencies exist + foreach(VAR RSTUDIO_DEPENDENCIES_DICTIONARIES_DIR +- RSTUDIO_DEPENDENCIES_MATHJAX_DIR +- RSTUDIO_DEPENDENCIES_PANDOC_DIR +- RSTUDIO_DEPENDENCIES_QUARTO_DIR) ++ RSTUDIO_DEPENDENCIES_MATHJAX_DIR) ++ + +- + # skip quarto if not enabled + if("${VAR}" STREQUAL "RSTUDIO_DEPENDENCIES_QUARTO_DIR" AND NOT QUARTO_ENABLED) + continue()