Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'flake.nix')
| -rw-r--r-- | flake.nix | 131 |
1 files changed, 53 insertions, 78 deletions
@@ -7,89 +7,64 @@ url = "github:oxalica/rust-overlay"; inputs.nixpkgs.follows = "nixpkgs"; }; + nixCargoIntegration = { + url = "github:yusdacra/nix-cargo-integration"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.rustOverlay.follows = "rust-overlay"; + }; }; - outputs = { - self, - nixpkgs, - rust-overlay, - ... - }: let - inherit (nixpkgs) lib; - eachSystem = lib.genAttrs lib.systems.flakeExposed; - pkgsFor = eachSystem (system: - import nixpkgs { - localSystem.system = system; - overlays = [(import rust-overlay) self.overlays.helix]; - }); - gitRev = self.rev or self.dirtyRev or null; - in { - packages = eachSystem (system: { - inherit (pkgsFor.${system}) helix; - /* - The default Helix build. Uses the latest stable Rust toolchain, and unstable - nixpkgs. - - The build inputs can be overridden with the following: - - packages.${system}.default.override { rustPlatform = newPlatform; }; - - Overriding a derivation attribute can be done as well: + outputs = inputs@{ nixpkgs, nixCargoIntegration, ... }: + 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 = { + crateOverrides = common: _: { + helix-term = prev: + let + inherit (common) pkgs; + grammars = pkgs.callPackage ./grammars.nix { }; + runtimeDir = pkgs.runCommand "helix-runtime" { } '' + mkdir -p $out + ln -s ${common.root}/runtime/* $out + rm -r $out/grammars + ln -s ${grammars} $out/grammars + ''; + in + { + # 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 = "ln -s ${common.root}/{languages.toml,theme.toml,base16_theme.toml} .."; + buildInputs = (prev.buildInputs or [ ]) ++ [ common.cCompiler.cc.lib ]; + nativeBuildInputs = [ pkgs.makeWrapper ]; - packages.${system}.default.overrideAttrs { buildType = "debug"; }; - */ - default = self.packages.${system}.helix; - }); - checks = - lib.mapAttrs (system: pkgs: let - # Get Helix's MSRV toolchain to build with by default. - msrvToolchain = pkgs.pkgsBuildHost.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml; - msrvPlatform = pkgs.makeRustPlatform { - cargo = msrvToolchain; - rustc = msrvToolchain; + postFixup = '' + if [ -f "$out/bin/hx" ]; then + wrapProgram "$out/bin/hx" --set HELIX_RUNTIME "${runtimeDir}" + fi + ''; + }; }; - in { - helix = self.packages.${system}.helix.override { - rustPlatform = msrvPlatform; + shell = common: prev: { + packages = prev.packages ++ (with common.pkgs; [ lld_13 lldb cargo-tarpaulin cargo-flamegraph vulkan-tools ]); + env = prev.env ++ [ + { name = "HELIX_RUNTIME"; eval = "$PWD/runtime"; } + { name = "RUST_BACKTRACE"; value = "1"; } + # { name = "RUSTFLAGS"; value = "-C link-arg=-fuse-ld=lld -C target-cpu=native -Clink-arg=-Wl,--no-rosegment"; } + { name = "LD_LIBRARY_PATH"; value = nixpkgs.lib.makeLibraryPath (with common.pkgs; [ + wayland libxkbcommon xorg.libxcb + vulkan-loader # vulkan + # libGL # GLES instead of vulkan + ]); } + ]; }; - }) - pkgsFor; - - # Devshell behavior is preserved. - devShells = - lib.mapAttrs (system: pkgs: { - default = let - commonRustFlagsEnv = "-C link-arg=-fuse-ld=lld -C target-cpu=native --cfg tokio_unstable"; - platformRustFlagsEnv = lib.optionalString pkgs.stdenv.isLinux "-Clink-arg=-Wl,--no-rosegment"; - in - pkgs.mkShell { - inputsFrom = [self.checks.${system}.helix]; - nativeBuildInputs = with pkgs; - [ - lld - cargo-flamegraph - rust-bin.nightly.latest.rust-analyzer - ] - ++ (lib.optional (stdenv.isx86_64 && stdenv.isLinux) cargo-tarpaulin) - ++ (lib.optional stdenv.isLinux lldb); - shellHook = '' - export RUST_BACKTRACE="1" - export RUSTFLAGS="''${RUSTFLAGS:-""} ${commonRustFlagsEnv} ${platformRustFlagsEnv}" - ''; - }; - }) - pkgsFor; - - overlays = { - helix = final: prev: { - helix = final.callPackage ./default.nix {inherit gitRev;}; }; - - default = self.overlays.helix; }; - }; - nixConfig = { - extra-substituters = ["https://helix.cachix.org"]; - extra-trusted-public-keys = ["helix.cachix.org-1:ejp9KQpR1FBI2onstMQ34yogDm4OgU2ru6lIwPvuCVs="]; - }; } |