nixos-riscv/flake.nix

111 lines
3.5 KiB
Nix

{
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
inputs.nixos-hardware.url = "github:nixos/nixos-hardware";
# Some dependencies of this flake are not yet available on non linux systems
inputs.systems.url = "github:nix-systems/x86_64-linux";
inputs.flake-utils.url = "github:numtide/flake-utils";
inputs.flake-utils.inputs.systems.follows = "systems";
outputs = { self, nixpkgs, nixos-hardware, flake-utils, ... }:
let
system = "x86_64-linux";
overlay = import ./overlay.nix;
pkgs = import nixpkgs { inherit system; };
modules = [
# For now we only define a config for VM, later we will want to split
# this into different configs.
./vm.nix
./configuration.nix
];
in {
overlay = import ./overlay.nix;
nixosConfigurations = {
# The cross configuration defines a system that runs in the RISC-V
# architecture, but is build from an x86 host machine.
cross = nixpkgs.lib.nixosSystem {
system = "${system}";
modules = modules ++ [
{
nixpkgs.crossSystem = {
gcc.arch = "rv64g";
gcc.tune = "rv64g";
system = "riscv64-linux";
};
}
];
};
# The native configuration defines the same system, but built from an
# RISC-V machine. Not needed for now.
#native = nixpkgs.lib.nixosSystem {
# system = "riscv64-linux";
# modules = modules;
#};
};
# A development shell with QEMU ready to boot the RISC-V system in an x86
# machine.
devShells.x86_64-linux.default =
let
nixosconf = self.nixosConfigurations.cross;
syspkgs = nixosconf.pkgs;
toplevel = nixosconf.config.system.build.toplevel;
#toplevel = "${nixosconf.config.system.build.vm}/system";
in
pkgs.mkShell {
pname = "qemu-shell";
buildInputs = with pkgs; [ qemu ];
# Here we tell the run script where to find the system
NIXOS_SYSTEM_TOPLEVEL = toplevel;
OPENSBI = syspkgs.opensbi-uboot;
#OPENSBI = syspkgs.opensbi;
};
};
}
# flake-utils.lib.eachDefaultSystem (system:
# rec {
#
# # .\#nixosConfigurations.visionfive-cross.config.system.build.toplevel
# packages.default = packages.sd-image;
# packages.sd-image = (import "${nixpkgs}/nixos" {
# configuration =
# { config, ... }: {
# imports = [
# "${nixos-hardware}/starfive/visionfive/v2/sd-image-installer.nix"
# ];
#
# # If you want to use ssh set a password
# users.users.nixos.password = "test123";
# # OR add your public ssh key
# # users.users.nixos.openssh.authorizedKeys.keys = [ "ssh-rsa ..." ];
#
# # AND configure networking
# networking.interfaces.end0.useDHCP = true;
# networking.interfaces.end1.useDHCP = true;
#
# # Additional configuration goes here
#
# #hardware.deviceTree.overlays = [{
# # name = "8GB-patch";
# # dtsFile = "${nixos-hardware}/starfive/visionfive/v2/8gb-patch.dts";
# #}];
#
# #sdImage.compressImage = false;
#
# nixpkgs.crossSystem = {
# config = "riscv64-unknown-linux-gnu";
# system = "riscv64-linux";
# };
#
# system.stateVersion = "24.05";
# };
# inherit system;
# }).config.system.build.toplevel;
# });
#}