diff options
author | Yusuf Bera Ertan | 2022-09-02 22:54:07 +0000 |
---|---|---|
committer | GitHub | 2022-09-02 22:54:07 +0000 |
commit | e917a8e0be29aa3f8aaa537e0aa88e6df8ce974e (patch) | |
tree | dd51a273f41ecb5b874010055aba4d7b730b83d5 /flake.nix | |
parent | 3c38fe9c7001a7f447bde06784d01468e0a4ecec (diff) |
build(nix): update nci, refactor flake, seperate wrapping, add source filtering (#3657)
Diffstat (limited to 'flake.nix')
-rw-r--r-- | flake.nix | 249 |
1 files changed, 145 insertions, 104 deletions
@@ -7,128 +7,169 @@ url = "github:oxalica/rust-overlay"; inputs.nixpkgs.follows = "nixpkgs"; }; - nixCargoIntegration = { + nci = { url = "github:yusdacra/nix-cargo-integration"; inputs.nixpkgs.follows = "nixpkgs"; inputs.rust-overlay.follows = "rust-overlay"; }; }; - outputs = inputs @ { + outputs = { + self, nixpkgs, - nixCargoIntegration, + nci, ... }: let - outputs = config: - nixCargoIntegration.lib.makeOutputs { - root = ./.; - renameOutputs = {"helix-term" = "helix";}; - # Set default app to hx (binary is from helix-term release build) - # Set default package to helix-term release build - defaultOutputs = { - app = "hx"; - package = "helix"; - }; - overrides = { - cCompiler = common: - with common.pkgs; - if stdenv.isLinux - then gcc - else clang; - crateOverrides = common: _: { - helix-term = prev: let - inherit (common) pkgs; - mkRootPath = rel: - builtins.path { - path = "${common.root}/${rel}"; - name = rel; - }; - grammars = pkgs.callPackage ./grammars.nix config; - runtimeDir = pkgs.runCommandNoCC "helix-runtime" {} '' - mkdir -p $out - ln -s ${mkRootPath "runtime"}/* $out - rm -r $out/grammars - ln -s ${grammars} $out/grammars - ''; - overridedAttrs = { - # disable fetching and building of tree-sitter grammars in the helix-term build.rs - HELIX_DISABLE_AUTO_GRAMMAR_BUILD = "1"; - # link languages and theme toml files since helix-term expects them (for tests) - preConfigure = - pkgs.lib.concatMapStringsSep - "\n" - (path: "ln -sf ${mkRootPath path} ..") - ["languages.toml" "theme.toml" "base16_theme.toml"]; - buildInputs = (prev.buildInputs or []) ++ [common.cCompiler.cc.lib]; - nativeBuildInputs = [pkgs.makeWrapper]; + lib = nixpkgs.lib; + mkRootPath = rel: + builtins.path { + path = "${toString ./.}/${rel}"; + name = rel; + }; + outputs = nci.lib.makeOutputs { + root = ./.; + renameOutputs = {"helix-term" = "helix";}; + # Set default app to hx (binary is from helix-term release build) + # Set default package to helix-term release build + defaultOutputs = { + app = "hx"; + package = "helix"; + }; + overrides = { + cCompiler = common: + with common.pkgs; + if stdenv.isLinux + then gcc + else clang; + crateOverrides = common: _: { + helix-term = prev: { + src = builtins.path { + name = "helix-source"; + path = toString ./.; + # filter out unneeded stuff that cause rebuilds + filter = path: type: + lib.all + (n: builtins.baseNameOf path != n) + [ + ".envrc" + ".ignore" + ".github" + "runtime" + "screenshot.png" + "book" + "contrib" + "docs" + "README.md" + "shell.nix" + "default.nix" + "grammars.nix" + "flake.nix" + "flake.lock" + ]; + }; - postFixup = '' - if [ -f "$out/bin/hx" ]; then - wrapProgram "$out/bin/hx" ''${makeWrapperArgs[@]} --set HELIX_RUNTIME "${runtimeDir}" - fi - ''; - }; - in - overridedAttrs - // ( - pkgs.lib.optionalAttrs - (config ? makeWrapperArgs) - {inherit (config) makeWrapperArgs;} - ); - }; - shell = common: prev: { - packages = - prev.packages - ++ ( - with common.pkgs; - [lld_13 lldb cargo-flamegraph rust-analyzer] ++ - (lib.optional (stdenv.isx86_64 && stdenv.isLinux) cargo-tarpaulin) - ); - env = - prev.env - ++ [ - { - name = "HELIX_RUNTIME"; - eval = "$PWD/runtime"; - } - { - name = "RUST_BACKTRACE"; - value = "1"; - } - { - name = "RUSTFLAGS"; - value = - if common.pkgs.stdenv.isLinux - then "-C link-arg=-fuse-ld=lld -C target-cpu=native -Clink-arg=-Wl,--no-rosegment" - else ""; - } - ]; + # disable fetching and building of tree-sitter grammars in the helix-term build.rs + HELIX_DISABLE_AUTO_GRAMMAR_BUILD = "1"; + + buildInputs = (prev.buildInputs or []) ++ [common.cCompiler.cc.lib]; + + # link languages and theme toml files since helix-term expects them (for tests) + preConfigure = '' + ${prev.preConfigure or ""} + ${ + lib.concatMapStringsSep + "\n" + (path: "ln -sf ${mkRootPath path} ..") + ["languages.toml" "theme.toml" "base16_theme.toml"] + } + ''; + + meta.mainProgram = "hx"; }; }; + shell = common: prev: { + packages = + prev.packages + ++ ( + with common.pkgs; + [lld_13 lldb cargo-flamegraph rust-analyzer] + ++ (lib.optional (stdenv.isx86_64 && stdenv.isLinux) cargo-tarpaulin) + ); + env = + prev.env + ++ [ + { + name = "HELIX_RUNTIME"; + eval = "$PWD/runtime"; + } + { + name = "RUST_BACKTRACE"; + value = "1"; + } + { + name = "RUSTFLAGS"; + value = + if common.pkgs.stdenv.isLinux + then "-C link-arg=-fuse-ld=lld -C target-cpu=native -Clink-arg=-Wl,--no-rosegment" + else ""; + } + ]; + }; }; - defaultOutputs = outputs {}; - makeOverridableHelix = system: old: - old - // { - override = args: - makeOverridableHelix - system - (outputs args).packages.${system}.helix; - }; + }; + makeOverridableHelix = system: old: config: let + pkgs = nixpkgs.legacyPackages.${system}; + grammars = pkgs.callPackage ./grammars.nix config; + runtimeDir = pkgs.runCommand "helix-runtime" {} '' + mkdir -p $out + ln -s ${mkRootPath "runtime"}/* $out + rm -r $out/grammars + ln -s ${grammars} $out/grammars + ''; + helix-wrapped = + pkgs.runCommand "${old.name}-wrapped" + { + inherit (old) pname version meta; + + nativeBuildInputs = [pkgs.makeWrapper]; + makeWrapperArgs = config.makeWrapperArgs or []; + } + '' + mkdir -p $out + cp -r --no-preserve=mode,ownership ${old}/* $out/ + chmod +x $out/bin/* + wrapProgram "$out/bin/hx" ''${makeWrapperArgs[@]} --set HELIX_RUNTIME "${runtimeDir}" + ''; + in + helix-wrapped + // {override = makeOverridableHelix system old;}; in - defaultOutputs + outputs // { + apps = + lib.mapAttrs + ( + system: apps: rec { + default = hx; + hx = { + type = "app"; + program = lib.getExe self.${system}.packages.helix; + }; + } + ) + outputs.apps; packages = - nixpkgs.lib.mapAttrs + lib.mapAttrs ( - system: packages: - packages - // rec { - default = helix; - helix = makeOverridableHelix system packages.helix; - } + system: packages: rec { + default = helix; + helix = makeOverridableHelix system helix-unwrapped {}; + helix-debug = makeOverridableHelix system helix-unwrapped-debug {}; + helix-unwrapped = packages.helix; + helix-unwrapped-debug = packages.helix-debug; + } ) - defaultOutputs.packages; + outputs.packages; }; nixConfig = { |