Skip to content

Nix flakes 支持 #121

@jackyliu16

Description

@jackyliu16

目前基本完成了nix flakes的配置,可以在nix环境下直接通过nix develop打开执行环境,尽可能的降低课程依赖的安装对于外界环境的影响也可以更好的移除,可能具有更好的平台适用性,但是我没测试过

注意:使用本文的方法最好需要有一定nix的使用基础,以在可能出错的地方修改代码使之正常运行。(本文的代码尚未完全测试)

配置文件最新地址
如果在使用的过程中遇到了任何问题,欢迎回复(就是不一定我能解决

# update in 2023-05-24 21:26
{
  description = "A devShell for rCore";

  inputs = {
    nixpkgs.url      = "github:NixOS/nixpkgs/nixos-unstable";
    # nixpkgs-qemu7.url = "https://github.com/NixOS/nixpkgs/archive/7cf5ccf1cdb2ba5f08f0ac29fc3d04b0b59a07e4.tar.gz";
    rust-overlay.url = "github:oxalica/rust-overlay";
    flake-utils.url  = "github:numtide/flake-utils";
  };

  outputs = { self, nixpkgs, rust-overlay, flake-utils, ... }:
    flake-utils.lib.eachDefaultSystem (system:
      let
        overlays = [ 
          (import rust-overlay)
          (self: super: {
            # ref: https://github.com/the-nix-way/dev-templates
            rust-toolchain =
              let
                rust = super.rust-bin;
              in
              if builtins.pathExists ./rust-toolchain.toml then
                rust.fromRustupToolchainFile ./rust-toolchain.toml
              else if builtins.pathExists ./rust-toolchain then
                rust.fromRustupToolchainFile ./rust-toolchain
              else
                # The rust-toolchain when i make this file, which maybe change
                (rust.nightly."2022-08-05".minimal.override {
                  extensions = [ "rust-src" "llvm-tools-preview" "rustfmt" "clippy" ];
                  targets = [ "riscv64gc-unknown-none-elf" ];
                });
          })
        ];
        pkgs = import nixpkgs {
          inherit system overlays;
        };
        # pkg-qemu = import nixpkgs-qemu7 { inherit system; };
      in
      {
        devShells.default = pkgs.mkShell {
          buildInputs = (with pkgs;[
            # Basic
            openssl
            pkg-config
            exa
            fd
            libclang
            # Cross Compile
            (with pkgsCross.riscv64; [ musl.stdenv.cc ]) # If use normally, no necessary need to change.
            # Rust Configuraiton  
            rustup
            cargo-binutils
            rust-toolchain
          ]) ++ [
            pkgs.qemu
            # pkg-qemu.qemu
          ];

          shellHook = ''
            alias ls=exa
            alias find=fd
          '';
        };
      }
    );
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions