Add module

This commit is contained in:
2026-01-07 16:09:20 +01:00
parent 04eee534b7
commit 80ea2ba07f
4 changed files with 96 additions and 29 deletions

5
concraft-sgjp-model.nix Normal file
View File

@@ -0,0 +1,5 @@
{fetchurl, ...}:
fetchurl {
url = "https://zil.ipipan.waw.pl/Concraft?action=AttachFile&do=get&target=concraft-pl-model-SGJP-20220221.gz";
hash = "sha256-VcvdSkJwUhAgHroA0d/bH3QDjjO/2x8HqSuUvRgIN/4=";
}

View File

@@ -1,38 +1,35 @@
{ {
self, self,
pkgs,
stdenv, stdenv,
lib, lib,
writers, writers,
writeScriptBin,
nodejs, nodejs,
fetchurl, fetchurl,
model ? "", model ? null,
serverUrl ? "", serverUrl ? "",
local ? true, local ? true,
... ...
}: let }:
sgjpModel = fetchurl { writeScriptBin "conmorfeusz" ''
url = "https://zil.ipipan.waw.pl/Concraft?action=AttachFile&do=get&target=concraft-pl-model-SGJP-20220221.gz"; #!/${nodejs}/bin/node
hash = "sha256-VcvdSkJwUhAgHroA0d/bH3QDjjO/2x8HqSuUvRgIN/4="; // Passed from Nix derivation config
}; const MORFEUSZ_ANALYSER_BIN="${self.packages.${stdenv.hostPlatform.system}.morfeusz}/bin/morfeusz_analyzer";
const MORFEUSZ_GENERATOR_BIN="${self.packages.${stdenv.hostPlatform.system}.morfeusz}/bin/morfeusz_generator";
const CONCRAFT_BIN="${self.packages.${stdenv.hostPlatform.system}.concraft-pl}/bin/concraft-pl";
const CONCRAFT_MODEL="${
if model != null
then model
else pkgs.callPackage ./concraft-sgjp-model.nix {}
}";
const CONCRAFT_SERVER_URL="${serverUrl}";
const CONCRAFT_MODE="${
if local
then "local"
else "remote"
}";
// =================================
targetModel = ${builtins.readFile ./index.js}
if model == "" ''
then sgjpModel
else model;
in
writers.makeScriptWriter {interpreter = "${nodejs}/bin/node";} "conmorfeusz" ''
// Passed from Nix derivation config
const MORFEUSZ_ANALYSER_BIN="${self.packages.${stdenv.hostPlatform.system}.morfeusz}/bin/morfeusz_analyzer";
const MORFEUSZ_GENERATOR_BIN="${self.packages.${stdenv.hostPlatform.system}.morfeusz}/bin/morfeusz_generator";
const CONCRAFT_BIN="${self.packages.${stdenv.hostPlatform.system}.concraft-pl}/bin/concraft-pl";
const CONCRAFT_MODEL="${targetModel}";
const CONCRAFT_SERVER_URL="${serverUrl}";
const CONCRAFT_MODE="${
if local
then "local"
else "remote"
}";
// =================================
${builtins.readFile ./index.js}
''

View File

@@ -97,7 +97,7 @@ async function danalyse(input) {
return await desambiguate(analysis); return await desambiguate(analysis);
} }
function generate(text, ...tags) { function generate(input, ...tags) {
const { stdout } = spawnSync(MORFEUSZ_GENERATOR_BIN, [], { input }); const { stdout } = spawnSync(MORFEUSZ_GENERATOR_BIN, [], { input });
const linePattern = /^\s?(?<opening>\[)?(?<segment>,|(.+?)),(?<lemma>,|(.+?)),(?<tags>[\w:.]+),(?<frequency>_|(.+?)),(?<qualifiers>_|(.+?))(?<ending>\])?$/; const linePattern = /^\s?(?<opening>\[)?(?<segment>,|(.+?)),(?<lemma>,|(.+?)),(?<tags>[\w:.]+),(?<frequency>_|(.+?)),(?<qualifiers>_|(.+?))(?<ending>\])?$/;

View File

@@ -1,2 +1,67 @@
{...}: { self: {
config,
system,
pkgs,
lib,
...
}: let
cfg = config.services.conmorfeusz;
morfeusz = self.packages.${system}.morfeusz;
concraft-pl = self.packages.${system}.concraft-pl;
conmorfeusz = self.packages.${system}.conmorfeusz;
serverConfig = cfg.server.config // {port = toString cfg.server.port;};
in {
options.services.conmorfeusz = with lib; {
enable = mkEnableOption "conmorfeusz";
model = mkOption {
type = types.nullOr types.package;
description = "The target concraft-pl model";
default = null;
};
server = {
enable = mkEnableOption "concraft-pl server";
port = mkOption {
type = types.port;
description = "Port on which server should listen";
default = 8080;
};
config = mkOption {
type = types.attrs;
description = "CLI parameters of 'concraft-pl server' command";
default = {
inmodel = toString (pkgs.callPackage ./concraft-sgjp-model.nix {});
};
};
};
};
config = lib.mkIf cfg.enable {
environment.systemPackages = [
morfeusz
concraft-pl
(conmorfeusz.override {
model = cfg.model;
local = !cfg.server.enable;
serverUrl =
if cfg.server.enable
then "http://localhost:${toString cfg.server.port}"
else null;
})
];
systemd.services.conmorfeusz = lib.mkIf cfg.server.enable {
enable = true;
description = "Conmorfeusz";
wantedBy = ["multi-user.target"];
serviceConfig = {
ExecStart = "${concraft-pl}/bin/concraft-pl server ${lib.cli.toGNUCommandLineShell {} serverConfig}";
};
};
};
} }