From 4f610e96a03beb11f330b15e7f40526ce7aad505 Mon Sep 17 00:00:00 2001 From: Luis Eduardo Bueso de Barrio Date: Fri, 5 Jun 2026 16:51:59 +0200 Subject: [PATCH] dolos fixed --- pkgs/default.nix | 1 + pkgs/dolos/default.nix | 150 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 151 insertions(+) create mode 100644 pkgs/dolos/default.nix diff --git a/pkgs/default.nix b/pkgs/default.nix index ff24c64..9e0326e 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -3,6 +3,7 @@ }: let self = { + dolos = pkgs.callPackage ./dolos { nodejs = pkgs.nodejs_22; }; example-a = pkgs.callPackage ./example-a { }; example-b = pkgs.callPackage ./example-b { }; pyzotero = pkgs.callPackage ./pyzotero { }; diff --git a/pkgs/dolos/default.nix b/pkgs/dolos/default.nix new file mode 100644 index 0000000..f7f4db0 --- /dev/null +++ b/pkgs/dolos/default.nix @@ -0,0 +1,150 @@ +{ + lib, + buildNpmPackage, + fetchFromGitHub, + python3, + nodejs, +}: + +let + version = "2.9.3"; + + tree-sitter-elixir = fetchFromGitHub { + owner = "elixir-lang"; + repo = "tree-sitter-elixir"; + rev = "v0.3.5"; + hash = "sha256-C5/+t49pcFh45GqLZRjRs/sH8Ej+dklR/brad+snsyQ="; + }; +in +buildNpmPackage rec { + pname = "dolos"; + inherit version; + + inherit nodejs; + + src = fetchFromGitHub { + owner = "dodona-edu"; + repo = "dolos"; + rev = "v${version}"; + hash = "sha256-kilCxSe4njHyoXVXpyLmx5HnGkzFptLYOypQmldGnzc="; + fetchSubmodules = true; + }; + + npmWorkspace = "cli"; + npmDepsHash = "sha256-3RMUWo6vybfi0BvQ12jjxuYFPDe3HkTv24L3BsuOCFg="; + + nativeBuildInputs = [ python3 ]; + + TREE_SITTER_BUILD_FROM_SOURCE = "1"; + npm_config_build_from_source = "true"; + + dontNpmBuild = true; + + npmRebuildFlags = [ "--ignore-scripts" ]; + + postConfigure = '' + sed -i '2s/^/process.exit(0);\n/' node_modules/tree-sitter-cli/install.js + npm rebuild + ''; + + preBuild = '' + cp -r ${tree-sitter-elixir} parsers/elixir + chmod -R u+w parsers/elixir + + cat > parsers/elixir/binding.gyp << 'GYPEOF' +{ + "targets": [ + { + "target_name": "tree_sitter_elixir_binding", + "dependencies": [ + " parsers/binding.gyp << 'GYPEOF' +{ + "includes": [ + "bash/binding.gyp", + "c/binding.gyp", + "cpp/binding.gyp", + "c_sharp/binding.gyp", + "elm/binding.gyp", + "elixir/binding.gyp", + "go/binding.gyp", + "groovy/binding.gyp", + "java/binding.gyp", + "javascript/binding.gyp", + "modelica/binding.gyp", + "ocaml/binding.gyp", + "php/binding.gyp", + "python/binding.gyp", + "r/binding.gyp", + "rust/binding.gyp", + "scala/binding.gyp", + "sql/binding.gyp", + "typescript/binding.gyp", + "verilog/binding.gyp" + ] +} +GYPEOF + + sed -i '/^parsers.verilog/a \ +parsers.elixir = require("./build/Release/tree_sitter_elixir_binding");\ +parsers.elixir.nodeTypeInfo = require("./elixir/src/node-types.json"); +' parsers/index.js + + npm run build -w parsers + ''; + + buildPhase = '' + runHook preBuild + npm run build -w cli + npm run build -w lib + npm run build -w core + npm run build -w web + runHook postBuild + ''; + + postInstall = '' + cp -r lib $out/lib/node_modules/dolos-meta/lib + chmod -R u+w $out/lib/node_modules/dolos-meta/lib + cp -r core $out/lib/node_modules/dolos-meta/core + chmod -R u+w $out/lib/node_modules/dolos-meta/core + cp -r parsers $out/lib/node_modules/dolos-meta/parsers + chmod -R u+w $out/lib/node_modules/dolos-meta/parsers + + dolonsDir="$out/lib/node_modules/dolos-meta/node_modules/@dodona" + + rm -rf "$dolonsDir/dolos-web" + mkdir -p "$dolonsDir/dolos-web" + install -m644 web/index.js "$dolonsDir/dolos-web/index.js" + install -m644 web/index.d.ts "$dolonsDir/dolos-web/index.d.ts" 2>/dev/null || true + install -m644 web/package.json "$dolonsDir/dolos-web/package.json" + cp -r web/dist "$dolonsDir/dolos-web/dist" + chmod -R u+w "$dolonsDir/dolos-web" + + rm "$dolonsDir/dolos" + ln -s ../.. "$dolonsDir/dolos" + ''; + + meta = { + description = "Source code plagiarism detection tool for programming exercises"; + homepage = "https://dolos.ugent.be"; + license = lib.licenses.mit; + mainProgram = "dolos"; + platforms = lib.platforms.linux ++ lib.platforms.darwin; + }; +}