aboutsummaryrefslogtreecommitdiff
path: root/flake.nix
diff options
context:
space:
mode:
Diffstat (limited to 'flake.nix')
-rw-r--r--flake.nix249
1 files changed, 145 insertions, 104 deletions
diff --git a/flake.nix b/flake.nix
index 7b6f0685..abcb2cb2 100644
--- a/flake.nix
+++ b/flake.nix
@@ -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 = {