{ description = "The Nix-flake for Redox development on NixOS"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; rust-overlay = { url = "github:oxalica/rust-overlay"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { nixpkgs, rust-overlay, ... }: let systems = [ "i686-linux" "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ]; overlays = [ rust-overlay.overlays.default ]; pkgsFor = system: import nixpkgs { inherit system overlays; }; forAllSystems = f: nixpkgs.lib.genAttrs systems (system: f (pkgsFor system)); in { formatter = forAllSystems (pkgs: pkgs.nixfmt-tree); # TODO: Create Redox OS Image as package # TODO: No cross-compile for now, as there is no pkgsCross.aarch64-unknown-redox and so on # TODO: Get rid of make env step: package custom libtool and setup rust toolchain properly devShells = forAllSystems (pkgs: { # Podman config taken from https://nixos.wiki/wiki/Podman and https://gist.github.com/adisbladis/187204cb772800489ee3dac4acdd9947 # Provides a script that copies required files to ~/ default = let podmanSetupScript = let registriesConf = pkgs.writeText "registries.conf" '' [registries.search] registries = ['docker.io'] [registries.block] registries = [] ''; in pkgs.writeScript "podman-setup" '' #!${pkgs.runtimeShell} # Dont overwrite customised configuration if ! test -f ~/.config/containers/policy.json; then install -Dm555 ${pkgs.skopeo.src}/default-policy.json ~/.config/containers/policy.json fi if ! test -f ~/.config/containers/registries.conf; then install -Dm555 ${registriesConf} ~/.config/containers/registries.conf fi systemctl --user start podman.socket || true export PODMAN_SYSTEMD_UNIT=podman.socket ''; # Provides a fake "docker" binary mapping to podman dockerCompat = pkgs.runCommand "docker-podman-compat" { } '' mkdir -p $out/bin ln -s ${pkgs.podman}/bin/podman $out/bin/docker ''; in pkgs.mkShell rec { buildInputs = with pkgs; [ # Podman dockerCompat podman # Docker compat runc # Container runtime conmon # Container runtime monitor skopeo # Interact with container registry slirp4netns # User-mode networking for unprivileged namespaces fuse-overlayfs # CoW for images, much faster than default vfs # with FSTOOLS_IN_PODMAN=1 these are not needed # without it, the installer fails to link FUSE somehow #fuse qemu_kvm # for host arch qemu ]; LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath buildInputs; SKIP_CHECK_TOOLS = "1"; FSTOOLS_IN_PODMAN = "1"; PODMAN_BUILD = "1"; shellHook = '' # Install required configuration ${podmanSetupScript} echo "Redox podman build environment loaded" ''; }; #TODO: This isn't tested yet, use at your own risk native = (pkgs.mkShell.override { stdenv = pkgs.gcc14Stdenv; }) rec { nativeBuildInputs = let autoreconf269 = pkgs.writeShellScriptBin "autoreconf2.69" "${pkgs.autoconf269}/bin/autoreconf"; in with pkgs; [ (pkgs.writeShellScriptBin "${pkgs.stdenv.hostPlatform.system}-gnu-strip" '' ${pkgs.bintools-unwrapped}/bin/strip $@ '') ant autoconf autoreconf269 # gnu-binutils automake bison cmake curl doxygen (file.overrideAttrs (attrs: { version = "5.46"; src = fetchurl { urls = [ "https://astron.com/pub/file/file-5.46.tar.gz" "https://distfiles.macports.org/file/file-5.46.tar.gz" ]; hash = "sha256-ycx3x8VgxUMTXtxVWvYJ1WGdvvARmX6YjOQKPXXYYIg="; }; })) flex gettext gnumake gnupatch gperf help2man just llvmPackages.clang llvmPackages.llvm lua m4 meson nasm ninja perl perlPackages.HTMLParser perlPackages.Po4a pkg-config pkgconf (python3.withPackages (ps: with ps; [ mako ])) qemu_kvm rust-cbindgen scons texinfo unzip waf wget xdg-utils xxd zip ] ++ pkgs.lib.optionals pkgs.stdenv.hostPlatform.isx86 [ pkgs.syslinux ]; buildInputs = with pkgs; [ (pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml) gmp # relibc mpfr # relibc libmpc # relibc fuse # fuser libpng # netsurf fontconfig # orbutils SDL # prboom utilmacros # libX11 xtrans # libX11 ]; hardeningDisable = [ "format" ]; LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath buildInputs; PERL_PATH = "${pkgs.perl}/bin/perl"; SKIP_CHECK_TOOLS = "1"; PODMAN_BUILD = "0"; PREFIX_BINARY = "0"; shellHook = with pkgs; '' export PKG_CONFIG_PATH="${fuse.dev}/lib/pkgconfig\ :${libpng.dev}/lib/pkgconfig" ''; }; }); }; }