122 lines
4.1 KiB
Nix
122 lines
4.1 KiB
Nix
{
|
|
description = "jolheiser helix derivation";
|
|
inputs = {
|
|
jolheiser.url = "git+https://git.jolheiser.com/nixpkgs.git";
|
|
nixpkgs.follows = "jolheiser/nixpkgs";
|
|
};
|
|
outputs =
|
|
{
|
|
nixpkgs,
|
|
...
|
|
}:
|
|
let
|
|
pkgs = nixpkgs.legacyPackages.x86_64-linux;
|
|
tomlFormat = pkgs.formats.toml { };
|
|
config = import ./config.nix { pkgs = pkgs; };
|
|
buildGrammar =
|
|
grammar:
|
|
let
|
|
source = pkgs.fetchgit {
|
|
inherit (grammar) url rev sha256;
|
|
};
|
|
linkQueries = pkgs.lib.optionalString (builtins.hasAttr "queries" grammar) "cp -r ${source}/${grammar.queries} $out/queries";
|
|
in
|
|
pkgs.stdenv.mkDerivation {
|
|
pname = "helix-tree-sitter-grammar-${grammar.name}";
|
|
version = grammar.rev;
|
|
buildInputs = [
|
|
pkgs.helix
|
|
pkgs.git
|
|
];
|
|
src = source;
|
|
dontInstall = true;
|
|
buildPhase = ''
|
|
runHook preBuild
|
|
|
|
mkdir .helix
|
|
cat << EOF > .helix/languages.toml
|
|
use-grammars = { only = ["${grammar.name}"] }
|
|
[[grammar]]
|
|
name = "${grammar.name}"
|
|
source = { git = "${grammar.url}", rev = "${grammar.rev}" }
|
|
EOF
|
|
|
|
mkdir -p runtime/grammars/sources
|
|
cp -r ${source} runtime/grammars/sources/${grammar.name}
|
|
export CARGO_MANIFEST_DIR=$(pwd)/.helix
|
|
|
|
#hx -g fetch
|
|
hx -g build
|
|
|
|
mkdir $out
|
|
cp runtime/grammars/${grammar.name}.so $out/${grammar.name}.so
|
|
${linkQueries}
|
|
|
|
runHook postBuild
|
|
'';
|
|
};
|
|
builtGrammars = builtins.map (grammar: {
|
|
inherit (grammar) name;
|
|
artifact = buildGrammar grammar;
|
|
}) config.grammars;
|
|
ignoreFile = pkgs.writeText "ignore" (builtins.concatStringsSep "\n" config.ignore);
|
|
configFile = pkgs.writeText "config.toml" (
|
|
builtins.readFile (tomlFormat.generate "helix-config" config.settings)
|
|
);
|
|
languageFile = pkgs.writeText "languages.toml" (
|
|
builtins.readFile (tomlFormat.generate "helix-languages" config.languages)
|
|
);
|
|
themeFiles = pkgs.lib.mapAttrsToList (name: value: {
|
|
inherit name;
|
|
file = pkgs.writeText "${name}.toml" (
|
|
builtins.readFile (tomlFormat.generate "helix-theme-${name}" value)
|
|
);
|
|
}) config.themes;
|
|
themeLinks = builtins.map (
|
|
theme: "ln -s ${theme.file} $out/home/helix/themes/${theme.name}.toml"
|
|
) themeFiles;
|
|
grammarLinks = builtins.map (
|
|
grammar: "ln -s ${grammar.artifact}/${grammar.name}.so $out/lib/runtime/grammars/${grammar.name}.so"
|
|
) builtGrammars;
|
|
queryLinks = builtins.map (
|
|
grammar: "ln -s ${grammar.artifact}/queries $out/lib/runtime/queries/${grammar.name}"
|
|
) builtGrammars;
|
|
in
|
|
{
|
|
packages.x86_64-linux.default =
|
|
pkgs.runCommand "hx"
|
|
{
|
|
buildInputs = [ pkgs.makeWrapper ];
|
|
}
|
|
''
|
|
mkdir $out
|
|
ln -s ${pkgs.helix}/* $out
|
|
rm $out/bin
|
|
|
|
rm $out/lib
|
|
mkdir -p $out/lib/runtime
|
|
ln -s ${pkgs.helix}/lib/runtime/* $out/lib/runtime
|
|
|
|
rm $out/lib/runtime/grammars
|
|
mkdir $out/lib/runtime/grammars
|
|
ln -s ${pkgs.helix}/lib/runtime/grammars/* $out/lib/runtime/grammars
|
|
${builtins.concatStringsSep "\n" grammarLinks}
|
|
|
|
rm $out/lib/runtime/queries
|
|
mkdir $out/lib/runtime/queries
|
|
ln -s ${pkgs.helix}/lib/runtime/queries/* $out/lib/runtime/queries
|
|
${builtins.concatStringsSep "\n" queryLinks}
|
|
|
|
mkdir -p $out/home/helix/themes
|
|
ln -s ${configFile} $out/home/helix/config.toml
|
|
ln -s ${languageFile} $out/home/helix/languages.toml
|
|
${builtins.concatStringsSep "\n" themeLinks}
|
|
|
|
mkdir -p $out/home/git
|
|
ln -s ${ignoreFile} $out/home/git/ignore
|
|
|
|
makeWrapper ${pkgs.helix}/bin/hx $out/bin/hx --set HELIX_RUNTIME $out/lib/runtime --set XDG_CONFIG_HOME $out/home
|
|
'';
|
|
};
|
|
}
|