Skip to content

Commit

Permalink
build(nix): use nix-cargo-integration, make shell.nix use flake devshell
Browse files Browse the repository at this point in the history
  • Loading branch information
yusdacra committed Jun 11, 2021
1 parent 69fe46a commit 2a627cf
Show file tree
Hide file tree
Showing 5 changed files with 107 additions and 132 deletions.
5 changes: 4 additions & 1 deletion .envrc
Original file line number Diff line number Diff line change
@@ -1,2 +1,5 @@
watch_file shell.nix
use flake
watch_file flake.lock

# try to use flakes, if it fails use normal nix (ie. shell.nix)
use flake || use nix
125 changes: 57 additions & 68 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

77 changes: 37 additions & 40 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -3,54 +3,51 @@

inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
rust-overlay.url = "github:oxalica/rust-overlay";
naersk.url = "github:nmattia/naersk";
helix = {
nixCargoIntegration = {
url = "github:yusdacra/nix-cargo-integration";
inputs.nixpkgs.follows = "nixpkgs";
};
flakeCompat = {
url = "github:edolstra/flake-compat";
flake = false;
url = "https://github.com/helix-editor/helix";
};
helix = {
url = "https://github.com/helix-editor/helix.git";
type = "git";
flake = false;
submodules = true;
};
};

outputs = inputs@{ self, nixpkgs, naersk, rust-overlay, flake-utils, ... }:
let
rust = pkgs:
(pkgs.rustChannelOf {
date = "2021-05-01";
channel = "nightly";
}).minimal; # cargo, rustc and rust-std

mkNaerskLib = system: pkgs:
naersk.lib."${system}".override {
# naersk can't build with stable?!
# inherit (pkgs.rust-bin.stable.latest) rustc cargo;
rustc = rust pkgs;
cargo = rust pkgs;
outputs = inputs@{ nixCargoIntegration, helix, ... }:
nixCargoIntegration.lib.makeOutputs {
root = ./.;
buildPlatform = "crate2nix";
renameOutputs = { "helix-term" = "helix"; };
defaultOutputs = {
app = "hx"; # Set default app to hx (binary is from helix-term release build)
package = "helix"; # Set default package to helix-term release build
};
overrides = {
root = _: _: helix;
crateOverrides = common: _: {
helix-term = prev: { buildInputs = (prev.buildInputs or [ ]) ++ [ common.cCompiler.cc.lib ]; };
# link runtime since helix-core expects it because of embed_runtime feature
helix-core = _: { preConfigure = "ln -s ${common.root + "/runtime"} ../runtime"; };
# link languages and theme toml files since helix-view expects them
helix-view = _: { preConfigure = "ln -s ${common.root}/{languages.toml,theme.toml} .."; };
};

pkg = naerskLib:
naerskLib.buildPackage {
pname = "helix";
root = inputs.helix;
cargoBuildOptions = self: self ++ [ ''--features "embed_runtime"'' ];
shell = common: prev: {
packages = prev.packages ++ (with common.pkgs; [ lld_10 lldb ]);
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"; }
];
};

in flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs {
inherit system;
overlays = [ rust-overlay.overlay ];
build = _: prev: {
rootFeatures = prev.rootFeatures ++ [ "embed_runtime" ];
};
naerskLib = mkNaerskLib system pkgs;
in rec {
packages.helix = pkg naerskLib;
defaultPackage = packages.helix;
devShell = pkgs.callPackage ./shell.nix { };
}) // {
overlay = final: prev:
let naerskLib = mkNaerskLib prev.system final;
in (rust-overlay.overlay final prev) // { helix = pkg naerskLib; };
};
};
}
4 changes: 3 additions & 1 deletion helix-term/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ authors = ["Blaž Hrastnik <blaz@mxxn.io>"]
edition = "2018"
license = "MPL-2.0"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[package.metadata.nix]
build = true
app = true

[features]
embed_runtime = ["helix-core/embed_runtime"]
Expand Down
28 changes: 6 additions & 22 deletions shell.nix
Original file line number Diff line number Diff line change
@@ -1,22 +1,6 @@
{ lib, stdenv, pkgs }:

pkgs.mkShell {
nativeBuildInputs = with pkgs; [
(rust-bin.stable.latest.default.override { extensions = ["rust-src"]; })
lld_10
lldb
# pythonPackages.six
stdenv.cc.cc.lib
# pkg-config
];
RUSTFLAGS = "-C link-arg=-fuse-ld=lld -C target-cpu=native";
RUST_BACKTRACE = "1";
# https://github.com/rust-lang/rust/issues/55979
LD_LIBRARY_PATH = lib.makeLibraryPath (with pkgs; [
stdenv.cc.cc.lib
]);

shellHook = ''
export HELIX_RUNTIME=$PWD/runtime
'';
}
# Flake's devShell for non-flake-enabled nix instances
let
src = (builtins.fromJSON (builtins.readFile ./flake.lock)).nodes.flakeCompat.locked;
compat = fetchTarball { url = "https://github.com/edolstra/flake-compat/archive/${src.rev}.tar.gz"; sha256 = src.narHash; };
in
(import compat { src = ./.; }).shellNix.default

0 comments on commit 2a627cf

Please sign in to comment.