Merge branch 'nix-native' into 'master'

nix: Simplify configuration

See merge request redox-os/redox!2274
This commit is contained in:
Jeremy Soller 2026-07-24 06:10:07 -06:00
commit b0d4a3b1e1
2 changed files with 162 additions and 223 deletions

46
flake.lock generated
View File

@ -1,30 +1,12 @@
{
"nodes": {
"flake-parts": {
"inputs": {
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1763759067,
"narHash": "sha256-LlLt2Jo/gMNYAwOgdRQBrsRoOz7BPRkzvNaI/fzXi2Q=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "2cccadc7357c0ba201788ae99c4dfa90728ef5e0",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1763934636,
"narHash": "sha256-9glbI7f1uU+yzQCq5LwLgdZqx6svOhZWkd4JRY265fc=",
"lastModified": 1784494590,
"narHash": "sha256-Gn7vGw9aIyoJy7GkNbsHXvSkvXeNLoP9ZiK1RtS/0M8=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "ee09932cedcef15aaf476f9343d1dea2cb77e261",
"rev": "472e4428b5aee60be7ac35c03662ebb36c901edd",
"type": "github"
},
"original": {
@ -34,24 +16,8 @@
"type": "github"
}
},
"nixpkgs-lib": {
"locked": {
"lastModified": 1761765539,
"narHash": "sha256-b0yj6kfvO8ApcSE+QmA6mUfu8IYG6/uU28OFn4PaC8M=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "719359f4562934ae99f5443f20aa06c2ffff91fc",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixpkgs.lib",
"type": "github"
}
},
"root": {
"inputs": {
"flake-parts": "flake-parts",
"nixpkgs": "nixpkgs",
"rust-overlay": "rust-overlay"
}
@ -63,11 +29,11 @@
]
},
"locked": {
"lastModified": 1784611586,
"narHash": "sha256-OfqgY+0hp/zseZB7uyH0U8kIDPS4scZZCyAurEplvG0=",
"lastModified": 1784526465,
"narHash": "sha256-L37teKC6oINWG4PGZLIqbphMWvSQ0PEz+aWxAk+rIDw=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "14f58845249f3552a89b07772626b8d3c632fa86",
"rev": "58c6334db52d51fc5dd8877c90b01f00cf8a696b",
"type": "github"
},
"original": {

339
flake.nix
View File

@ -3,7 +3,6 @@
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
flake-parts.url = "github:hercules-ci/flake-parts";
rust-overlay = {
url = "github:oxalica/rust-overlay";
inputs.nixpkgs.follows = "nixpkgs";
@ -11,193 +10,167 @@
};
outputs =
inputs@{
{
nixpkgs,
flake-parts,
rust-overlay,
...
}:
flake-parts.lib.mkFlake { inherit inputs; } (
top@{
config,
withSystem,
moduleWithSystem,
...
}:
{
systems = [
"i686-linux"
"x86_64-linux"
"aarch64-linux"
"x86_64-darwin"
"aarch64-darwin"
];
perSystem =
{
system,
lib,
inputs',
...
}:
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
pkgs = import nixpkgs {
inherit system;
overlays = [ rust-overlay.overlays.default ];
};
rust-bin = pkgs.rust-bin.nightly."2026-05-24".default.override {
extensions = [
"rust-analyzer"
"rust-src"
];
targets = [ "x86_64-unknown-redox" ];
};
in
{
formatter = pkgs.nixfmt-rfc-style;
# 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 = {
# 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
rustPlatform = pkgs.makeRustPlatform {
cargo = rust-bin;
rustc = rust-bin;
};
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
#rust-bin
qemu_kvm
];
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 rec {
nativeBuildInputs =
let
autoreconf269 = pkgs.writeShellScriptBin "autoreconf2.69" "${pkgs.autoconf269}/bin/autoreconf";
in
with pkgs;
[
ant
autoconf
autoreconf269 # gnu-binutils
automake
bison
cmake
curl
doxygen
file
flex
gettext
gnumake
gnupatch
gperf
help2man
just
llvmPackages.clang
llvmPackages.llvm
lua
m4
meson
nasm
ninja
perl
perl540Packages.HTMLParser
perl540Packages.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; [
rust-bin
fuse # fuser
libpng # netsurf
fontconfig # orbutils
SDL # prboom
xorg.utilmacros # libX11
xorg.xtrans # libX11
];
LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath buildInputs;
PERL_PATH = "${pkgs.perl}/bin/perl";
SKIP_CHECK_TOOLS = "1";
PODMAN_BUILD = "0";
shellHook = with pkgs; ''
export PKG_CONFIG_PATH="${fuse.dev}/lib/pkgconfig\
:${libpng.dev}/lib/pkgconfig"
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
];
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 rec {
nativeBuildInputs =
let
autoreconf269 = pkgs.writeShellScriptBin "autoreconf2.69" "${pkgs.autoconf269}/bin/autoreconf";
in
with pkgs;
[
ant
autoconf
autoreconf269 # gnu-binutils
automake
bison
cmake
curl
doxygen
file
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)
fuse # fuser
libpng # netsurf
fontconfig # orbutils
SDL # prboom
utilmacros # libX11
xtrans # libX11
];
LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath buildInputs;
PERL_PATH = "${pkgs.perl}/bin/perl";
SKIP_CHECK_TOOLS = "1";
PODMAN_BUILD = "0";
shellHook = with pkgs; ''
export PKG_CONFIG_PATH="${fuse.dev}/lib/pkgconfig\
:${libpng.dev}/lib/pkgconfig"
'';
};
});
};
}