@ -0,0 +1,28 @@ |
|||||
|
name: Build with Nix Workflow |
||||
|
|
||||
|
on: |
||||
|
schedule: |
||||
|
- cron: '0 0 * * 1' |
||||
|
workflow_dispatch: |
||||
|
|
||||
|
jobs: |
||||
|
build: |
||||
|
runs-on: ubuntu-latest |
||||
|
timeout-minutes: 120 |
||||
|
steps: |
||||
|
- uses: styfle/cancel-workflow-action@0.11.0 |
||||
|
name: Cancel Outdated Builds |
||||
|
with: |
||||
|
all_but_latest: true |
||||
|
access_token: ${{ github.token }} |
||||
|
|
||||
|
- name: Install Nix |
||||
|
uses: cachix/install-nix-action@v18 |
||||
|
|
||||
|
- name: Checkout Repository |
||||
|
uses: actions/checkout@v3 |
||||
|
|
||||
|
# sanity check that repository builds with nix |
||||
|
- name: Build |
||||
|
run: | |
||||
|
nix develop -c cargo build --all-targets --release --workspace |
@ -0,0 +1,148 @@ |
|||||
|
{ |
||||
|
"nodes": { |
||||
|
"flake-compat": { |
||||
|
"flake": false, |
||||
|
"locked": { |
||||
|
"lastModified": 1668681692, |
||||
|
"narHash": "sha256-Ht91NGdewz8IQLtWZ9LCeNXMSXHUss+9COoqu6JLmXU=", |
||||
|
"owner": "edolstra", |
||||
|
"repo": "flake-compat", |
||||
|
"rev": "009399224d5e398d03b22badca40a37ac85412a1", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "edolstra", |
||||
|
"repo": "flake-compat", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"flake-utils": { |
||||
|
"locked": { |
||||
|
"lastModified": 1667395993, |
||||
|
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", |
||||
|
"owner": "numtide", |
||||
|
"repo": "flake-utils", |
||||
|
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "numtide", |
||||
|
"repo": "flake-utils", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"flake-utils_2": { |
||||
|
"locked": { |
||||
|
"lastModified": 1667077288, |
||||
|
"narHash": "sha256-bdC8sFNDpT0HK74u9fUkpbf1MEzVYJ+ka7NXCdgBoaA=", |
||||
|
"owner": "numtide", |
||||
|
"repo": "flake-utils", |
||||
|
"rev": "6ee9ebb6b1ee695d2cacc4faa053a7b9baa76817", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "numtide", |
||||
|
"repo": "flake-utils", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"flake-utils_3": { |
||||
|
"locked": { |
||||
|
"lastModified": 1659877975, |
||||
|
"narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", |
||||
|
"owner": "numtide", |
||||
|
"repo": "flake-utils", |
||||
|
"rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "numtide", |
||||
|
"repo": "flake-utils", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"nixpkgs": { |
||||
|
"locked": { |
||||
|
"lastModified": 1668765800, |
||||
|
"narHash": "sha256-rC40+/W6Hio7b/RsY8SvQPKNx4WqNcTgfYv8cUMAvJk=", |
||||
|
"owner": "nixos", |
||||
|
"repo": "nixpkgs", |
||||
|
"rev": "52b2ac8ae18bbad4374ff0dd5aeee0fdf1aea739", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "nixos", |
||||
|
"ref": "nixos-unstable", |
||||
|
"repo": "nixpkgs", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"nixpkgs_2": { |
||||
|
"locked": { |
||||
|
"lastModified": 1665296151, |
||||
|
"narHash": "sha256-uOB0oxqxN9K7XGF1hcnY+PQnlQJ+3bP2vCn/+Ru/bbc=", |
||||
|
"owner": "NixOS", |
||||
|
"repo": "nixpkgs", |
||||
|
"rev": "14ccaaedd95a488dd7ae142757884d8e125b3363", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "NixOS", |
||||
|
"ref": "nixpkgs-unstable", |
||||
|
"repo": "nixpkgs", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"pre-commit-hooks": { |
||||
|
"inputs": { |
||||
|
"flake-utils": "flake-utils_2", |
||||
|
"nixpkgs": [ |
||||
|
"nixpkgs" |
||||
|
] |
||||
|
}, |
||||
|
"locked": { |
||||
|
"lastModified": 1667992213, |
||||
|
"narHash": "sha256-8Ens8ozllvlaFMCZBxg6S7oUyynYx2v7yleC5M0jJsE=", |
||||
|
"owner": "cachix", |
||||
|
"repo": "pre-commit-hooks.nix", |
||||
|
"rev": "ebcbfe09d2bd6d15f68de3a0ebb1e4dcb5cd324b", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "cachix", |
||||
|
"repo": "pre-commit-hooks.nix", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"root": { |
||||
|
"inputs": { |
||||
|
"flake-compat": "flake-compat", |
||||
|
"flake-utils": "flake-utils", |
||||
|
"nixpkgs": "nixpkgs", |
||||
|
"pre-commit-hooks": "pre-commit-hooks", |
||||
|
"rust-overlay": "rust-overlay" |
||||
|
} |
||||
|
}, |
||||
|
"rust-overlay": { |
||||
|
"inputs": { |
||||
|
"flake-utils": "flake-utils_3", |
||||
|
"nixpkgs": "nixpkgs_2" |
||||
|
}, |
||||
|
"locked": { |
||||
|
"lastModified": 1668825399, |
||||
|
"narHash": "sha256-F2ro05D6tGMwSaOYeIediJq6X0ATD7JgWEG2TgOs9Wo=", |
||||
|
"owner": "oxalica", |
||||
|
"repo": "rust-overlay", |
||||
|
"rev": "a705fe51ef5cdf932ff1cb342f0fe9e5d66f1b71", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "oxalica", |
||||
|
"repo": "rust-overlay", |
||||
|
"type": "github" |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
"root": "root", |
||||
|
"version": 7 |
||||
|
} |
@ -0,0 +1,84 @@ |
|||||
|
{ |
||||
|
description = "Hyperplonk dev env"; |
||||
|
|
||||
|
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; |
||||
|
inputs.flake-utils.url = "github:numtide/flake-utils"; # for dedup |
||||
|
|
||||
|
# allow shell.nix alongside flake.nix |
||||
|
inputs.flake-compat.url = "github:edolstra/flake-compat"; |
||||
|
inputs.flake-compat.flake = false; |
||||
|
|
||||
|
inputs.rust-overlay.url = "github:oxalica/rust-overlay"; |
||||
|
inputs.pre-commit-hooks.url = "github:cachix/pre-commit-hooks.nix"; |
||||
|
inputs.pre-commit-hooks.inputs.nixpkgs.follows = "nixpkgs"; |
||||
|
|
||||
|
outputs = { self, nixpkgs, flake-utils, flake-compat, rust-overlay, pre-commit-hooks, ... }: |
||||
|
flake-utils.lib.eachDefaultSystem (system: |
||||
|
let |
||||
|
overlays = [ (import rust-overlay) ]; |
||||
|
pkgs = import nixpkgs { inherit system overlays; }; |
||||
|
nightlyToolchain = pkgs.rust-bin.selectLatestNightlyWith |
||||
|
(toolchain: toolchain.minimal.override { extensions = [ "rustfmt" ]; }); |
||||
|
|
||||
|
stableToolchain = pkgs.rust-bin.stable.latest.minimal.override { |
||||
|
extensions = [ "clippy" "llvm-tools-preview" "rust-src" ]; |
||||
|
}; |
||||
|
in with pkgs; |
||||
|
{ |
||||
|
check = { |
||||
|
pre-commit-check = pre-commit-hooks.lib.${system}.run { |
||||
|
src = ./.; |
||||
|
hooks = { |
||||
|
check-format = { |
||||
|
enable = true; |
||||
|
files = "\\.rs$"; |
||||
|
entry = "cargo fmt -- --check"; |
||||
|
}; |
||||
|
doctest = { |
||||
|
enable = true; |
||||
|
entry = "cargo test --doc"; |
||||
|
files = "\\.rs$"; |
||||
|
pass_filenames = false; |
||||
|
}; |
||||
|
cargo-clippy = { |
||||
|
enable = true; |
||||
|
description = "Lint Rust code."; |
||||
|
entry = "cargo-clippy --workspace -- -D warnings"; |
||||
|
files = "\\.rs$"; |
||||
|
pass_filenames = false; |
||||
|
}; |
||||
|
cargo-sort = { |
||||
|
enable = true; |
||||
|
description = "Ensure Cargo.toml are sorted"; |
||||
|
entry = "cargo sort -w"; |
||||
|
pass_filenames = false; |
||||
|
}; |
||||
|
}; |
||||
|
}; |
||||
|
}; |
||||
|
devShell = mkShell { |
||||
|
buildInputs = [ |
||||
|
argbash |
||||
|
openssl |
||||
|
pkgconfig |
||||
|
git |
||||
|
|
||||
|
stableToolchain |
||||
|
nightlyToolchain |
||||
|
cargo-sort |
||||
|
|
||||
|
] ++ lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Security ]; |
||||
|
|
||||
|
shellHook = '' |
||||
|
export RUST_BACKTRACE=full |
||||
|
export PATH="$PATH:$(pwd)/target/debug:$(pwd)/target/release" |
||||
|
|
||||
|
# Ensure `cargo fmt` uses `rustfmt` from nightly. |
||||
|
export RUSTFMT="${nightlyToolchain}/bin/rustfmt" |
||||
|
'' |
||||
|
# install pre-commit hooks |
||||
|
+ self.check.${system}.pre-commit-check.shellHook; |
||||
|
}; |
||||
|
} |
||||
|
); |
||||
|
} |
@ -1,28 +0,0 @@ |
|||||
{ lib, rustToolchain, rustPlatform, fetchFromGitHub }: |
|
||||
|
|
||||
rustPlatform.buildRustPackage rec { |
|
||||
pname = "grcov"; |
|
||||
version = "v0.8.2"; |
|
||||
|
|
||||
# See https://nixos.org/manual/nixpkgs/stable/#using-community-rust-overlays |
|
||||
nativeBuildInputs = [ |
|
||||
rustToolchain |
|
||||
]; |
|
||||
|
|
||||
doCheck = false; |
|
||||
|
|
||||
src = fetchFromGitHub { |
|
||||
owner = "mozilla"; |
|
||||
repo = pname; |
|
||||
rev = version; |
|
||||
sha256 = "t1Gj5u4MmXPbQ5jmO9Sstn7aXJ6Ge+AnsmmG2GiAGKE="; |
|
||||
}; |
|
||||
|
|
||||
cargoSha256 = "DRAUeDzNUMg0AGrqU1TdrqBZJw4A2o3YJB0MdwwzefQ="; |
|
||||
|
|
||||
meta = with lib; { |
|
||||
description = "grcov collects and aggregates code coverage information for multiple source files."; |
|
||||
homepage = "https://github.com/mozilla/grcov"; |
|
||||
license = licenses.mpl20; |
|
||||
}; |
|
||||
} |
|
@ -1,25 +0,0 @@ |
|||||
let |
|
||||
basePkgs = import ./nixpkgs.nix { }; |
|
||||
|
|
||||
rust_overlay = with basePkgs; import (fetchFromGitHub |
|
||||
(lib.importJSON ./oxalica_rust_overlay.json)); |
|
||||
|
|
||||
pkgs = import ./nixpkgs.nix { overlays = [ rust_overlay ]; }; |
|
||||
|
|
||||
nightlyToolchain = pkgs.rust-bin.selectLatestNightlyWith (toolchain: toolchain.minimal); |
|
||||
grcov = with pkgs; callPackage ./grcov { rustToolchain = nightlyToolchain; }; |
|
||||
in |
|
||||
with pkgs; |
|
||||
|
|
||||
mkShell { |
|
||||
buildInputs = [ |
|
||||
nightlyToolchain |
|
||||
grcov |
|
||||
] ++ lib.optionals stdenv.isDarwin [ |
|
||||
darwin.apple_sdk.frameworks.Security |
|
||||
]; |
|
||||
|
|
||||
shellHook = '' |
|
||||
export RUST_BACKTRACE=full |
|
||||
''; |
|
||||
} |
|
@ -1,4 +0,0 @@ |
|||||
{ |
|
||||
"url": "https://github.com/nixos/nixpkgs/archive/db8ab32efd3a4ad59044848d889480954e458f25.tar.gz", |
|
||||
"sha256": "1i7ayivjm3rx62qq263jjj55m0nzhn4b99wax25kw6a8zhhwcwjb" |
|
||||
} |
|
@ -1,10 +0,0 @@ |
|||||
# Behaves like `<nixpkgs>` but pinned. Like `<nixpkgs>`, requires attrset for opt overlays. |
|
||||
attrs: |
|
||||
let |
|
||||
hostpkgs = import <nixpkgs> {}; |
|
||||
pinnedNixpkgs = hostpkgs.lib.importJSON ./nixpkgs.json; |
|
||||
nixpkgs = builtins.fetchTarball { |
|
||||
url = pinnedNixpkgs.url; |
|
||||
sha256 = pinnedNixpkgs.sha256; |
|
||||
}; |
|
||||
in import nixpkgs attrs |
|
@ -1,7 +0,0 @@ |
|||||
{ |
|
||||
"owner": "oxalica", |
|
||||
"repo": "rust-overlay", |
|
||||
"rev": "9d7c777625640b70a4d211f62711fa316bca7176", |
|
||||
"sha256": "025bw59nl12jqf4nrvbn0a8xn03aj9bz54nvf1rb25zl2l1nkrnd", |
|
||||
"fetchSubmodules": true |
|
||||
} |
|
@ -1,34 +0,0 @@ |
|||||
{ pkgs, ... }: |
|
||||
|
|
||||
let |
|
||||
nix-pre-commit-hooks = import (pkgs.fetchFromGitHub { |
|
||||
owner = "cachix"; |
|
||||
repo = "pre-commit-hooks.nix"; |
|
||||
rev = "ff9c0b459ddc4b79c06e19d44251daa8e9cd1746"; |
|
||||
sha256 = "jlsQb2y6A5dB1R0wVPLOfDGM0wLyfYqEJNzMtXuzCXw="; |
|
||||
}); |
|
||||
in |
|
||||
nix-pre-commit-hooks.run { |
|
||||
src = ./.; |
|
||||
hooks = { |
|
||||
check-format = { |
|
||||
enable = true; |
|
||||
files = "\\.rs$"; |
|
||||
entry = "cargo fmt -- --check"; |
|
||||
}; |
|
||||
doctest = { |
|
||||
enable = true; |
|
||||
entry = "cargo test --doc"; |
|
||||
files = "\\.rs$"; |
|
||||
pass_filenames = false; |
|
||||
}; |
|
||||
# The hook "clippy" that ships with nix-precommit-hooks is outdated. |
|
||||
cargo-clippy = { |
|
||||
enable = true; |
|
||||
description = "Lint Rust code."; |
|
||||
entry = "cargo-clippy"; |
|
||||
files = "\\.rs$"; |
|
||||
pass_filenames = false; |
|
||||
}; |
|
||||
}; |
|
||||
} |
|
@ -1,27 +0,0 @@ |
|||||
#!/usr/bin/env nix-shell |
|
||||
#! nix-shell -i bash -p curl jq nix |
|
||||
# |
|
||||
# Updates nixpkgs.json to the latest or chosen nixpkgs revision |
|
||||
# |
|
||||
# Usage: ./update-nix |
|
||||
# ./update-nix $rev |
|
||||
# ./update-nix $owner $rev |
|
||||
# |
|
||||
# Arguments default to owner=nixos and rev=master and refer |
|
||||
# to the github owner of a nixpkgs fork and a git revision. |
|
||||
# |
|
||||
set -exo pipefail |
|
||||
|
|
||||
owner="nixos" |
|
||||
|
|
||||
if [ ! -z "$2" ]; then |
|
||||
owner="$1" |
|
||||
rev="$2" |
|
||||
else |
|
||||
rev="${1:-master}" |
|
||||
fi |
|
||||
|
|
||||
resolved_rev=$(curl "https://api.github.com/repos/${owner}/nixpkgs/commits?sha=${rev}" | jq -r 'first.sha') |
|
||||
url="https://github.com/${owner}/nixpkgs/archive/${resolved_rev}.tar.gz" |
|
||||
digest=$(nix-prefetch-url --unpack "$url") |
|
||||
echo "{\"url\": \"${url}\", \"sha256\": \"${digest}\"}" | jq '.' > nix/nixpkgs.json |
|
@ -1,5 +0,0 @@ |
|||||
#!/usr/bin/env nix-shell |
|
||||
#! nix-shell -i bash -p nix-prefetch-github |
|
||||
set -exo pipefail |
|
||||
|
|
||||
nix-prefetch-github oxalica rust-overlay | tee nix/oxalica_rust_overlay.json |
|
@ -1,2 +0,0 @@ |
|||||
hyperplonk/ |
|
||||
.vagrant |
|
@ -1,66 +0,0 @@ |
|||||
# Test nix-shell in vagrant VMs |
|
||||
|
|
||||
Set up a vagrant guest VM, and test the dev environment inside the guest. |
|
||||
|
|
||||
- Only tested on nixos host with _libvirt_ virtualization provider. |
|
||||
- Assumes that the host has an SSH agent. The agent is used for SSH auth inside |
|
||||
the guest. |
|
||||
- Upon creation (`vagrant up`) a copy of this local repo is rsynced to the |
|
||||
`/hyperplonk` directory in the guest. The tests are run against these files. To |
|
||||
see changes made to the code on the host run `vagrant reload` to re-sync the |
|
||||
source code from host to guest. |
|
||||
|
|
||||
## Available vagrant boxes |
|
||||
The following boxes are available: |
|
||||
|
|
||||
- `ubuntu`: `ubuntu20.04` + `nix` |
|
||||
- `ubuntu_rustup`: `ubuntu20.04` + `nix` + `rustup` |
|
||||
|
|
||||
More OSes/VMs can be added in the `Vagrantfile`. |
|
||||
|
|
||||
Append name of box after vagrant command to apply to a single box only |
|
||||
|
|
||||
vagrant up ubuntu_rustup |
|
||||
vagrant ssh ubuntu_rustup |
|
||||
|
|
||||
## Usage |
|
||||
Enable `libvrtd` on your host: |
|
||||
[ubuntu](https://ubuntu.com/server/docs/virtualization-libvirt), |
|
||||
[nixos](https://nixos.wiki/wiki/Libvirt). |
|
||||
|
|
||||
Make sure we are in the `libvirtd` group. |
|
||||
|
|
||||
Install `libvirt` vagrant plugin (not needed on nixos): |
|
||||
|
|
||||
vagrant plugin install vagrant-libvirt |
|
||||
|
|
||||
Activate nix-shell in this directory (or ensure vagrant is installed): |
|
||||
|
|
||||
nix-shell |
|
||||
|
|
||||
Start vm: |
|
||||
|
|
||||
vagrant up ubuntu |
|
||||
|
|
||||
There is a password prompt to add the insecure vagrant key to the agent. One can |
|
||||
supply an empty password once or cancel the prompt each time one runs `vagrant |
|
||||
ssh`. |
|
||||
|
|
||||
Run formatter, linter, tests inside a nix-shell environment inside the `ubuntu` |
|
||||
guest: |
|
||||
|
|
||||
vagrant ssh ubuntu -- -t /vagrant/test-nix-shell-guest |
|
||||
|
|
||||
This runs the `test-nix-shell-guest` script in this directory inside the vagrant |
|
||||
guest. |
|
||||
|
|
||||
Clean up with |
|
||||
|
|
||||
vagrant destroy ubuntu |
|
||||
|
|
||||
## Notes |
|
||||
|
|
||||
- After editing the Vagrantfile, `vagrant reload` will apply the changes. |
|
||||
- When making substantial changes or changing names of vagrant boxes I usually |
|
||||
have more luck with running `vagrant destroy` with the previous `Vagrantfile` |
|
||||
and then `vagrant up` again with the new `Vagrantfile`. |
|
@ -1,36 +0,0 @@ |
|||||
# -*- mode: ruby -*- |
|
||||
# vi: set ft=ruby : |
|
||||
|
|
||||
Vagrant.configure("2") do |config| |
|
||||
|
|
||||
config.vm.define "ubuntu" do |ubuntu| |
|
||||
ubuntu.vm.box = "generic/ubuntu2004" |
|
||||
$script = <<~SCRIPT |
|
||||
set -euxo pipefail |
|
||||
curl -L https://nixos.org/nix/install | sh |
|
||||
SCRIPT |
|
||||
ubuntu.vm.provision "shell", inline: $script, privileged: false |
|
||||
end |
|
||||
|
|
||||
config.vm.define "ubuntu_rustup" do |ubuntu| |
|
||||
ubuntu.vm.box = "generic/ubuntu2004" |
|
||||
$script = <<~SCRIPT |
|
||||
set -euxo pipefail |
|
||||
curl -L https://nixos.org/nix/install | sh |
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y |
|
||||
source $HOME/.cargo/env |
|
||||
rustup default stable-2021-06-17 |
|
||||
SCRIPT |
|
||||
ubuntu.vm.provision "shell", inline: $script, privileged: false |
|
||||
end |
|
||||
|
|
||||
config.ssh.forward_agent = true |
|
||||
config.vm.synced_folder ".", "/vagrant", disabled: false |
|
||||
config.vm.synced_folder "../..", "/hyperplonk", disabled: false, rsync__exclude: [".git/", "target"] |
|
||||
|
|
||||
|
|
||||
config.vm.provider "libvirt" do |v| |
|
||||
v.cpus = 4 |
|
||||
end |
|
||||
|
|
||||
end |
|
@ -1,7 +0,0 @@ |
|||||
with import ../nixpkgs.nix { }; |
|
||||
|
|
||||
mkShell { |
|
||||
buildInputs = [ |
|
||||
vagrant |
|
||||
]; |
|
||||
} |
|
@ -1,20 +0,0 @@ |
|||||
#!/usr/bin/env bash |
|
||||
set -euxo pipefail |
|
||||
|
|
||||
# vagrant "ssh + command" does not source, adding -- -t does not help |
|
||||
. $HOME/.nix-profile/etc/profile.d/nix.sh |
|
||||
if [ -f $HOME/.carg/env ]; then |
|
||||
source $HOME/.cargo/env |
|
||||
fi |
|
||||
|
|
||||
ssh-keyscan gitlab.com >> ~/.ssh/known_hosts |
|
||||
ssh -T git@gitlab.com |
|
||||
|
|
||||
cd /hyperplonk |
|
||||
|
|
||||
nix-shell --run "cargo-clippy" |
|
||||
nix-shell --run "cargo fmt -- --check" |
|
||||
nix-shell --run "cargo test --doc" |
|
||||
nix-shell --run "cargo test --release" |
|
||||
|
|
||||
echo "Ok!" |
|
@ -1,45 +1,13 @@ |
|||||
let |
|
||||
basePkgs = import ./nix/nixpkgs.nix { }; |
|
||||
|
|
||||
rust_overlay = with basePkgs; import (fetchFromGitHub |
|
||||
(lib.importJSON ./nix/oxalica_rust_overlay.json)); |
|
||||
|
|
||||
pkgs = import ./nix/nixpkgs.nix { overlays = [ rust_overlay ]; }; |
|
||||
|
|
||||
nightlyToolchain = pkgs.rust-bin.selectLatestNightlyWith (toolchain: toolchain.minimal.override { |
|
||||
extensions = [ "rustfmt" ]; |
|
||||
}); |
|
||||
|
|
||||
stableToolchain = pkgs.rust-bin.stable."1.56.1".minimal.override { |
|
||||
extensions = [ "clippy" "llvm-tools-preview" "rust-src" ]; |
|
||||
}; |
|
||||
|
|
||||
pre-commit-check = pkgs.callPackage ./nix/pre-commit.nix { }; |
|
||||
in |
|
||||
with pkgs; |
|
||||
|
|
||||
mkShell { |
|
||||
buildInputs = [ |
|
||||
argbash |
|
||||
openssl |
|
||||
pkgconfig |
|
||||
git |
|
||||
|
|
||||
stableToolchain |
|
||||
nightlyToolchain |
|
||||
|
|
||||
] ++ lib.optionals stdenv.isDarwin [ |
|
||||
darwin.apple_sdk.frameworks.Security |
|
||||
]; |
|
||||
|
|
||||
shellHook = '' |
|
||||
export RUST_BACKTRACE=full |
|
||||
export PATH="$PATH:$(pwd)/target/debug:$(pwd)/target/release" |
|
||||
|
|
||||
# Ensure `cargo fmt` uses `rustfmt` from nightly. |
|
||||
export RUSTFMT="${nightlyToolchain}/bin/rustfmt" |
|
||||
|
|
||||
# install pre-commit hooks |
|
||||
${pre-commit-check.shellHook} |
|
||||
''; |
|
||||
} |
|
||||
|
(import |
||||
|
( |
||||
|
let |
||||
|
lock = builtins.fromJSON (builtins.readFile ./flake.lock); |
||||
|
in |
||||
|
fetchTarball { |
||||
|
url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz"; |
||||
|
sha256 = lock.nodes.flake-compat.locked.narHash; |
||||
|
} |
||||
|
) |
||||
|
{ |
||||
|
src = ./.; |
||||
|
}).shellNix |