initial commit
This commit is contained in:
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
gf-book-examples
|
||||||
|
book.pdf
|
||||||
|
.direnv/
|
||||||
|
.envrc
|
||||||
27
flake.lock
generated
Normal file
27
flake.lock
generated
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1659446231,
|
||||||
|
"narHash": "sha256-hekabNdTdgR/iLsgce5TGWmfIDZ86qjPhxDg/8TlzhE=",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "eabc38219184cc3e04a974fe31857d8e0eac098d",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixos-21.11",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
||||||
86
flake.nix
Normal file
86
flake.nix
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
{
|
||||||
|
description = "A very basic flake";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-21.11";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs =
|
||||||
|
{ self, nixpkgs }:
|
||||||
|
let
|
||||||
|
system = "x86_64-linux";
|
||||||
|
pkgs = nixpkgs.legacyPackages.${system};
|
||||||
|
|
||||||
|
gf-rgl = pkgs.callPackage ./gf-rgl.nix { };
|
||||||
|
|
||||||
|
vim-gf = pkgs.vimUtils.buildVimPlugin {
|
||||||
|
name = "vim-gf";
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "gdetrez";
|
||||||
|
repo = "vim-gf";
|
||||||
|
rev = "60924ef93a0ec69dc716982646bc907dfb37de6d";
|
||||||
|
hash = "sha256-Y1xDsefjusJFJCQu6fX6x/QEECjRuVBC4l6kASJwUgU=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
gf-book-examples = pkgs.fetchzip {
|
||||||
|
url = "https://www.grammaticalframework.org/gf-book/gf-book-examples.tgz";
|
||||||
|
hash = "sha256-tiOJ2Pep+1WkhD6rSbDfvPIZf1pty9h1lNvGGe3vAX8=";
|
||||||
|
};
|
||||||
|
|
||||||
|
gf-book = pkgs.fetchurl {
|
||||||
|
url = "https://listenmaa.fi/b/Aarne_Ranta-GF-book.pdf";
|
||||||
|
hash = "sha256-GeoyJKYcC8MtPFXBdQhEOwAjwH+tWbG/T66KNZO67Og=";
|
||||||
|
};
|
||||||
|
|
||||||
|
neovim-for-gf = pkgs.neovim.override {
|
||||||
|
configure = {
|
||||||
|
packages.myPlugins = {
|
||||||
|
start = [
|
||||||
|
vim-gf
|
||||||
|
pkgs.vimPlugins.vim-nix
|
||||||
|
];
|
||||||
|
};
|
||||||
|
customRC = ''
|
||||||
|
set nocompatible
|
||||||
|
set expandtab shiftwidth=2 tabstop=2
|
||||||
|
set number
|
||||||
|
|
||||||
|
syntax on
|
||||||
|
filetype plugin indent on
|
||||||
|
|
||||||
|
colorscheme delek
|
||||||
|
|
||||||
|
set fileformat=unix
|
||||||
|
autocmd BufWritePre * if &ft != 'markdown' | %s/\s\+$//e | endif
|
||||||
|
set fixendofline
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
packages.${system} = {
|
||||||
|
gf = pkgs.haskellPackages.gf;
|
||||||
|
inherit gf-rgl gf-book gf-book-examples neovim-for-gf;
|
||||||
|
};
|
||||||
|
|
||||||
|
devShells.${system}.default = pkgs.mkShell {
|
||||||
|
buildInputs = [
|
||||||
|
pkgs.haskellPackages.gf
|
||||||
|
gf-rgl
|
||||||
|
neovim-for-gf
|
||||||
|
(pkgs.writeShellScriptBin "gf-book" ''
|
||||||
|
${pkgs.zathura}/bin/zathura ${gf-book}
|
||||||
|
'')
|
||||||
|
];
|
||||||
|
|
||||||
|
shellHook = ''
|
||||||
|
alias vim='nvim'
|
||||||
|
|
||||||
|
mkdir -p gf-book-examples
|
||||||
|
cp -rn ${gf-book-examples}/. gf-book-examples/
|
||||||
|
chmod -R u+w gf-book-examples/
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
130
gf-rgl.nix
Normal file
130
gf-rgl.nix
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
stdenv,
|
||||||
|
fetchFromGitHub,
|
||||||
|
haskellPackages,
|
||||||
|
ghc,
|
||||||
|
makeWrapper,
|
||||||
|
glibcLocales,
|
||||||
|
# Optional: build only specific languages (comma-separated, e.g., "Eng,Swe,Ger")
|
||||||
|
languages ? null,
|
||||||
|
# Optional: build mode - "present", "alltenses", or "both"
|
||||||
|
mode ? "both",
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
# Build the language flag if languages are specified
|
||||||
|
langFlag = if languages != null then "--langs=${languages}" else "";
|
||||||
|
|
||||||
|
# Build the mode flags
|
||||||
|
modeFlags =
|
||||||
|
if mode == "present" then
|
||||||
|
"present"
|
||||||
|
else if mode == "alltenses" then
|
||||||
|
"alltenses"
|
||||||
|
else
|
||||||
|
""; # both is default
|
||||||
|
in
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
pname = "gf-rgl";
|
||||||
|
version = "20250812";
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "GrammaticalFramework";
|
||||||
|
repo = "gf-rgl";
|
||||||
|
rev = version;
|
||||||
|
hash = "sha256-rqN5MV/XxChXC+Vs4aLIhRtyPQZNk0LQZ2TCdbd6wUw=";
|
||||||
|
};
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
haskellPackages.gf
|
||||||
|
ghc
|
||||||
|
makeWrapper
|
||||||
|
glibcLocales
|
||||||
|
];
|
||||||
|
|
||||||
|
# Disable parallel building as the GF build process isn't parallel-safe
|
||||||
|
enableParallelBuilding = false;
|
||||||
|
|
||||||
|
configurePhase = ''
|
||||||
|
runHook preConfigure
|
||||||
|
|
||||||
|
export LOCALE_ARCHIVE=${glibcLocales}/lib/locale/locale-archive
|
||||||
|
export LANG=C.UTF-8
|
||||||
|
export LC_ALL=C.UTF-8
|
||||||
|
|
||||||
|
# The RGL uses Setup.hs to build
|
||||||
|
# We need to point it to the gf executable
|
||||||
|
export GF=${haskellPackages.gf}/bin/gf
|
||||||
|
|
||||||
|
# Make sure GF can find its own libraries
|
||||||
|
export GF_LIB_PATH=${haskellPackages.gf}/share/gf
|
||||||
|
|
||||||
|
echo "Using GF: $GF"
|
||||||
|
echo "GF version: $($GF --version || echo 'unknown')"
|
||||||
|
|
||||||
|
runHook postConfigure
|
||||||
|
'';
|
||||||
|
|
||||||
|
buildPhase = ''
|
||||||
|
runHook preBuild
|
||||||
|
|
||||||
|
# Build using the Haskell setup script
|
||||||
|
# This compiles all the GF grammar files
|
||||||
|
echo "Building GF-RGL with options: ${modeFlags} ${langFlag}"
|
||||||
|
|
||||||
|
runghc Setup.hs build ${modeFlags} ${langFlag} --gf=${haskellPackages.gf}/bin/gf --verbose
|
||||||
|
|
||||||
|
runHook postBuild
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
|
||||||
|
# Install to the output directory
|
||||||
|
mkdir -p $out/share/gf
|
||||||
|
|
||||||
|
# Copy the compiled files
|
||||||
|
echo "Installing to $out/share/gf"
|
||||||
|
runghc Setup.hs copy ${modeFlags} --dest=$out/share/gf
|
||||||
|
|
||||||
|
# Create a setup hook so other derivations can find this
|
||||||
|
mkdir -p $out/nix-support
|
||||||
|
cat > $out/nix-support/setup-hook << EOF
|
||||||
|
export GF_LIB_PATH="\''${GF_LIB_PATH:+\''${GF_LIB_PATH}:}$out/share/gf"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
|
||||||
|
# The RGL is architecture-independent (it's just compiled grammar files)
|
||||||
|
# but we keep it architecture-specific for now to be safe
|
||||||
|
# preferLocalBuild = true;
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
description = "Grammatical Framework's Resource Grammar Library (RGL)";
|
||||||
|
longDescription = ''
|
||||||
|
The GF Resource Grammar Library is the standard library for Grammatical
|
||||||
|
Framework. It covers the morphology and basic syntax of over 30 languages.
|
||||||
|
|
||||||
|
This package includes compiled grammar modules (.gfo files) that can be
|
||||||
|
imported and used in GF applications.
|
||||||
|
|
||||||
|
Supported languages include: English, Swedish, German, French, Spanish,
|
||||||
|
Italian, Dutch, Finnish, Russian, Bulgarian, Catalan, Danish, Norwegian,
|
||||||
|
Polish, Romanian, Afrikaans, Amharic, Arabic, Basque, Chinese, Estonian,
|
||||||
|
Greek, Hebrew, Hindi, Japanese, Korean, Latvian, Maltese, Mongolian,
|
||||||
|
Nepali, Persian, Punjabi, Sindhi, Somali, Thai, Turkish, Urdu, and more.
|
||||||
|
'';
|
||||||
|
homepage = "https://www.grammaticalframework.org/";
|
||||||
|
license = with licenses; [
|
||||||
|
lgpl3Plus
|
||||||
|
bsd3
|
||||||
|
];
|
||||||
|
maintainers = with maintainers; [ ];
|
||||||
|
platforms = platforms.unix;
|
||||||
|
# Note: This may take a while to build (30+ minutes for all languages)
|
||||||
|
# Consider using binary caches or building with specific languages only
|
||||||
|
};
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user