Initial import

This commit is contained in:
Mikael 2024-07-21 16:55:31 +02:00
commit 3324d84529
8 changed files with 250 additions and 0 deletions

6
.gitignore vendored Normal file
View file

@ -0,0 +1,6 @@
# Hidden files
.*
!.git*
# Nix
/result

27
flake.lock Normal file
View file

@ -0,0 +1,27 @@
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1721562059,
"narHash": "sha256-Tybxt65eyOARf285hMHIJ2uul8SULjFZbT9ZaEeUnP8=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "68c9ed8bbed9dfce253cc91560bf9043297ef2fe",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

57
flake.nix Normal file
View file

@ -0,0 +1,57 @@
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
};
nixConfig = {
extra-substituters = [ "https://cache.kyouma.net" ];
extra-trusted-public-keys = [ "cache.kyouma.net:Frjwu4q1rnwE/MnSTmX9yx86GNA/z3p/oElGvucLiZg=" ];
};
outputs = { self, nixpkgs, ... }@inputs:
let
inherit (builtins) mapAttrs;
inherit (nixpkgs) lib;
platforms = mapAttrs
(name: platform: lib.systems.elaborate platform)
(import ./platforms.nix);
in {
lib = { inherit platforms; };
overlays.default = import ./overlay.nix inputs;
nixosModules.default = { ... }: {
nixpkgs = {
overlays = [ self.overlays.default ];
config = {
allowUnsupportedSystem = true;
replaceStdenv =
{ pkgs }: pkgs.idiosyn pkgs.stdenv;
replaceCrossStdenv =
{ buildPackages, baseStdenv }: buildPackages.idiosyn baseStdenv;
};
};
imports = [ ./module.nix ];
};
nixosConfigurations = mapAttrs (system: platform: lib.nixosSystem {
modules = [
self.nixosModules.default
./nixos.nix
{
nixpkgs = {
buildPlatform = builtins.currentSystem or system;
hostPlatform = platform;
};
}
];
}) platforms;
hydraJobs = {
nixosConfigurations = mapAttrs
(name: host: host.config.system.build.toplevel)
self.nixosConfigurations;
};
};
}

34
module.nix Normal file
View file

@ -0,0 +1,34 @@
{ config, lib, pkgs, modulesPath, ... }:
let
inherit (pkgs.stdenv) hostPlatform;
locale-archive-stub =
pkgs.stdenvNoCC.mkDerivation {
pname = "locale-archive-stub";
version = "0";
buildCommand = ''
mkdir -p "$out/lib/locale"
touch "$out/lib/locale/locale-archive"
'';
};
in {
disabledModules = [
(modulesPath + "/config/ldso.nix")
(modulesPath + "/config/stub-ld.nix")
(modulesPath + "/programs/nix-ld.nix")
];
config = lib.mkMerge [
(lib.mkIf hostPlatform.isMusl {
i18n.glibcLocales = lib.mkDefault locale-archive-stub;
i18n.supportedLocales = lib.mkDefault [ ];
programs.command-not-found.enable = lib.mkDefault false;
programs.less.lessopen = lib.mkDefault null;
security.pam.services.login.updateWtmp = lib.mkForce false;
services.nscd.enable = lib.mkForce false;
system.nssModules = lib.mkForce [ ];
})
];
}

18
nixos.nix Normal file
View file

@ -0,0 +1,18 @@
{ pkgs, ... }: {
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
fileSystems."/".label = "nixos";
security.sudo.wheelNeedsPassword = false;
services.getty.autologinUser = "nixos";
users.users.nixos = {
isNormalUser = true;
extraGroups = [ "wheel" ];
};
system.stateVersion = "24.11";
virtualisation.vmVariant.virtualisation.diskImage = null;
}

36
overlay.nix Normal file
View file

@ -0,0 +1,36 @@
{ nixpkgs, ... }: final: prev:
let
inherit (final) lib callPackage;
pkgs = import nixpkgs {
localSystem = final.buildPlatform;
crossSystem = final.hostPlatform;
config = removeAttrs final.config [
"replaceStdenv"
"replaceCrossStdenv"
];
};
idiosyn = import ./stdenv.nix pkgs;
gentoo-patches = final.fetchgit {
url = "https://anongit.gentoo.org/git/repo/gentoo.git";
rev = "fa77d52a7ff39464c50707ca024725deab08b534";
sparseCheckout = [ "*.patch" ];
nonConeMode = true;
hash = "sha256-ZTrPeo8TjKSDAUyeJyWq1C8O9EXd9uhClHlphPsFXCA=";
};
in {
inherit idiosyn;
buildPackages = prev.buildPackages // {
stdenv = idiosyn prev.buildPackages.stdenv;
};
time = prev.time.overrideAttrs (base: {
patches = base.patches or [ ]
++ lib.optional final.time.stdenv.cc.isClang
"${gentoo-patches}/sys-process/time/files/time-1.9-implicit-func-decl-clang.patch";
});
}

23
platforms.nix Normal file
View file

@ -0,0 +1,23 @@
{
"x86_64-linux" = {
system = "x86_64-linux";
#config = "x86_64-unknown-linux-musl";
gcc.arch = "x86-64-v3";
useLLVM = true;
linker = "lld";
};
"aarch64-linux" = {
system = "aarch64-linux";
#config = "aarch64-unknown-linux-musl";
gcc.arch = "armv8.2-a";
useLLVM = true;
linker = "lld";
};
"riscv64-linux" = {
system = "aarch64-linux";
#config = "riscv64-unknown-linux-musl";
gcc.arch = "rv64imafdc_zicsr_zba_zbb";
useLLVM = true;
linker = "lld";
};
}

49
stdenv.nix Normal file
View file

@ -0,0 +1,49 @@
pkgs: stdenv:
let
inherit (pkgs.lib) optionalAttrs optionals toList;
inherit (pkgs) addAttrsToDerivation overrideCC;
inherit (pkgs.llvmPackages_latest) clangUseLLVM bintools;
inherit (stdenv) buildPlatform hostPlatform;
cflags = [
"-pipe" # Prefer pipes over temporary files between stages
"-O2"
# ] ++ optionals buildPlatform.useLLVM [
"-flto=thin"
];
ldflags = [
"-O2" # Enable tail merging of strings
"--hash-style=gnu" # Produce only DT_GNU_HASH
# ] ++ optionals buildPlatform.useLLVM [
"--icf=safe" # Fold identical code where safe
"--lto-O2"
"--pack-dyn-relocs=relr"
];
rustflags = [
"-C opt-level=2"
# ] ++ optionals buildPlatform.useLLVM [
"-C lto=thin"
"-C linker-flavor=ld.lld"
"-C linker-plugin-lto"
] ++ optionals (hostPlatform.isx86_64 && hostPlatform ? gcc.arch) [
"-C target-cpu=${hostPlatform.gcc.arch}"
] ++ map (flag: "-C link-arg=${flag}") ldflags;
in addAttrsToDerivation (base: {
env = (base.env or { }) // optionalAttrs (!base ? NIX_CFLAGS_COMPILE) {
NIX_CFLAGS_COMPILE =
toString (toList base.env.NIX_CFLAGS_COMPILE or [ ] ++ cflags);
} // optionalAttrs (base ? env.NIX_LDFLAGS) {
NIX_LDFLAGS =
toString (toList base.env.NIX_LDFLAGS or [ ] ++ ldflags);
};
NIX_CFLAGS_LINK = toList base.NIX_CFLAGS_LINK or [ ] ++ map (flag: "-Wl,${flag}") ldflags;
NIX_RUSTFLAGS = toList base.NIX_RUSTFLAGS or [ ] ++ rustflags;
} // optionalAttrs (base ? env.NIX_CFLAGS) {
NIX_CFLAGS_COMPILE = toList base.NIX_CFLAGS_COMPILE or [ ] ++ cflags;
} // optionalAttrs (!base ? env.NIX_LDFLAGS) {
NIX_LDFLAGS = toList base.NIX_LDFLAGS or [ ] ++ ldflags;
}) (overrideCC stdenv (clangUseLLVM.override { inherit bintools; }))