nix base.nix

configuration.nix
{ ... }:

let
  rawpkgs = import <nixpkgs> { config = {}; };
  repo = rawpkgs.fetchFromGitHub { owner = "foo"; repo = "bar"; rev = "1234"; sha256 = "xxxxx"; };
in {
  imports = [ (repo + "/base.nix") ];
}
base.nix
{ config, pkgs, lib, ... }:

{
  options = {
    custom.foo.enable = lib.mkOption {
      description = "enable some stuff";
      type = lib.types.bool;
    };
  };
  config = mkIf custom.foo.enabled {
    environment.systemPackages = with pkgs; [ vim ];
  };
}

nix darling.nix

darling.nix
{ clangStdenv, cmake, pkgconfig, libbsd, nasm, udev, fetchFromGitHub, clang, gnustepbase, libobjc2, openssl, libuuid, libtool }:

clangStdenv.mkDerivation {
  name = "darling";
  src = fetchFromGitHub {
    owner = "darlinghq";
    repo = "darling";
    rev = "f10d6f8d572d64cde5b7df5ee086ff77229d7544";
    sha256 = "0j8j4n93lzifg0wd2f796gba4yj26dzakssffxqbr59s8ydnh4w8";
  };
  buildInputs = [ clang cmake pkgconfig libbsd udev nasm openssl libuuid libtool ];
  cmakeFlags = [
    "-DLIBGNUSTEPBASE_INCLUDE_DIR=${gnustepbase}/include"
    "-DLIBGNUSTEPCOREBASE_INCLUDE_DIR=${gnustepbase}/include"
    "-DLIBKQUEUE_INCLUDE_DIR=${gnustepbase}/include"
    "-DLIBOBJC2_INCLUDE_DIR=${libobjc2}/include"
  ];
}

nix Linux的uml.nix

patch.diff
diff --git a/pkgs/os-specific/linux/kernel/common-config.nix b/pkgs/os-specific/linux/kernel/common-config.nix
index f591bdf..37c527b 100644
--- a/pkgs/os-specific/linux/kernel/common-config.nix
+++ b/pkgs/os-specific/linux/kernel/common-config.nix
@@ -33,10 +33,10 @@ with stdenv.lib;
   BACKTRACE_SELF_TEST n
   CPU_NOTIFIER_ERROR_INJECT? n
   DEBUG_DEVRES n
-  DEBUG_NX_TEST n
+  # DEBUG_NX_TEST n
   DEBUG_STACK_USAGE n
   ${optionalString (!(features.grsecurity or false)) ''
-    DEBUG_STACKOVERFLOW n
+  # DEBUG_STACKOVERFLOW n
   ''}
   RCU_TORTURE_TEST n
   SCHEDSTATS n
@@ -45,7 +45,7 @@ with stdenv.lib;
   # Bump the maximum number of CPUs to support systems like EC2 x1.*
   # instances and Xeon Phi.
   ${optionalString (stdenv.system == "x86_64-linux") ''
-    NR_CPUS 384
+  #NR_CPUS 384
   ''}
 
   # Unix domain sockets.
@@ -55,19 +55,19 @@ with stdenv.lib;
   ${optionalString (versionOlder version "3.19") ''
     PM_RUNTIME y
   ''}
-  PM_ADVANCED_DEBUG y
+  # PM_ADVANCED_DEBUG y
   ${optionalString (versionAtLeast version "3.11") ''
-    X86_INTEL_LPSS y
+  # X86_INTEL_LPSS y
   ''}
   ${optionalString (versionAtLeast version "3.10") ''
-    X86_INTEL_PSTATE y
+  # X86_INTEL_PSTATE y
   ''}
-  INTEL_IDLE y
-  CPU_FREQ_DEFAULT_GOV_PERFORMANCE y
+  # INTEL_IDLE y
+  # CPU_FREQ_DEFAULT_GOV_PERFORMANCE y
   ${optionalString (versionOlder version "3.10") ''
     USB_SUSPEND y
   ''}
-  PM_WAKELOCKS y
+  # PM_WAKELOCKS y
 
   # Support drivers that need external firmware.
   STANDALONE n
@@ -77,10 +77,10 @@ with stdenv.lib;
   IKCONFIG_PROC y
 
   # Optimize with -O2, not -Os.
-  CC_OPTIMIZE_FOR_SIZE n
+  # CC_OPTIMIZE_FOR_SIZE n
 
   # Enable the kernel's built-in memory tester.
-  MEMTEST y
+  # MEMTEST y
 
   # Include the CFQ I/O scheduler in the kernel, rather than as a
   # module, so that the initrd gets a good I/O scheduler.
@@ -91,19 +91,19 @@ with stdenv.lib;
   NUMA? y
 
   # Disable some expensive (?) features.
-  PM_TRACE_RTC n
+  # PM_TRACE_RTC n
 
   # Enable various subsystems.
   ACCESSIBILITY y # Accessibility support
   AUXDISPLAY y # Auxiliary Display support
   DONGLE y # Serial dongle support
-  HIPPI y
-  MTD_COMPLEX_MAPPINGS y # needed for many devices
+  # HIPPI y
+  # MTD_COMPLEX_MAPPINGS y # needed for many devices
   SCSI_LOWLEVEL y # enable lots of SCSI devices
-  SCSI_LOWLEVEL_PCMCIA y
-  SCSI_SAS_ATA y  # added to enable detection of hard drive
-  SPI y # needed for many devices
-  SPI_MASTER y
+  # SCSI_LOWLEVEL_PCMCIA y
+  # SCSI_SAS_ATA y  # added to enable detection of hard drive
+  # SPI y # needed for many devices
+  # SPI_MASTER y
   WAN y
 
   # Networking options.
@@ -111,13 +111,13 @@ with stdenv.lib;
   ${optionalString (versionOlder version "3.13") ''
     IPV6_PRIVACY y
   ''}
-  NETFILTER_ADVANCED y
-  IP_ROUTE_VERBOSE y
-  IP_MROUTE_MULTIPLE_TABLES y
-  IP_VS_PROTO_TCP y
-  IP_VS_PROTO_UDP y
-  IP_VS_PROTO_ESP y
-  IP_VS_PROTO_AH y
+  # NETFILTER_ADVANCED y
+  # IP_ROUTE_VERBOSE y
+  # IP_MROUTE_MULTIPLE_TABLES y
+  # IP_VS_PROTO_TCP y
+  # IP_VS_PROTO_UDP y
+  # IP_VS_PROTO_ESP y
+  # IP_VS_PROTO_AH y
   IP_DCCP_CCID3 n # experimental
   IPV6_ROUTER_PREF y
   IPV6_ROUTE_INFO y
@@ -127,14 +127,14 @@ with stdenv.lib;
   IPV6_MROUTE y
   IPV6_MROUTE_MULTIPLE_TABLES y
   IPV6_PIMSM_V2 y
-  CLS_U32_PERF y
-  CLS_U32_MARK y
+  # CLS_U32_PERF y
+  # CLS_U32_MARK y
   ${optionalString (stdenv.system == "x86_64-linux") ''
-    BPF_JIT y
+  # BPF_JIT y
   ''}
   ${optionalString (versionAtLeast version "4.4") ''
-    NET_CLS_BPF m
-    NET_ACT_BPF m
+    # NET_CLS_BPF m
+    # NET_ACT_BPF m
   ''}
   L2TP_V3 y
   L2TP_IP m
@@ -153,20 +153,20 @@ with stdenv.lib;
   BCMA_HOST_PCI? y
 
   # Enable various FB devices.
-  FB y
-  FB_EFI y
-  FB_NVIDIA_I2C y # Enable DDC Support
-  FB_RIVA_I2C y
-  FB_ATY_CT y # Mach64 CT/VT/GT/LT (incl. 3D RAGE) support
-  FB_ATY_GX y # Mach64 GX support
-  FB_SAVAGE_I2C y
-  FB_SAVAGE_ACCEL y
-  FB_SIS_300 y
-  FB_SIS_315 y
-  FB_3DFX_ACCEL y
-  FB_VESA y
-  FRAMEBUFFER_CONSOLE y
-  FRAMEBUFFER_CONSOLE_ROTATION y
+  # FB y
+  # FB_EFI y
+  # FB_NVIDIA_I2C y # Enable DDC Support
+  # FB_RIVA_I2C y
+  # FB_ATY_CT y # Mach64 CT/VT/GT/LT (incl. 3D RAGE) support
+  # FB_ATY_GX y # Mach64 GX support
+  # FB_SAVAGE_I2C y
+  # FB_SAVAGE_ACCEL y
+  # FB_SIS_300 y
+  # FB_SIS_315 y
+  # FB_3DFX_ACCEL y
+  # FB_VESA y
+  # FRAMEBUFFER_CONSOLE y
+  # FRAMEBUFFER_CONSOLE_ROTATION y
   ${optionalString (stdenv.system == "i686-linux") ''
     FB_GEODE y
   ''}
@@ -177,32 +177,32 @@ with stdenv.lib;
     DRM_I915_KMS y
   ''}
   # Allow specifying custom EDID on the kernel command line
-  DRM_LOAD_EDID_FIRMWARE y
-  VGA_SWITCHEROO y # Hybrid graphics support
-  DRM_GMA600 y
-  DRM_GMA3600 y
+  # DRM_LOAD_EDID_FIRMWARE y
+  # VGA_SWITCHEROO y # Hybrid graphics support
+  # DRM_GMA600 y
+  # DRM_GMA3600 y
 
   # Sound.
-  SND_DYNAMIC_MINORS y
-  SND_AC97_POWER_SAVE y # AC97 Power-Saving Mode
-  SND_HDA_INPUT_BEEP y # Support digital beep via input layer
-  SND_USB_CAIAQ_INPUT y
-  PSS_MIXER y # Enable PSS mixer (Beethoven ADSP-16 and other compatible)
+  # SND_DYNAMIC_MINORS y
+  # SND_AC97_POWER_SAVE y # AC97 Power-Saving Mode
+  # SND_HDA_INPUT_BEEP y # Support digital beep via input layer
+  # SND_USB_CAIAQ_INPUT y
+  # PSS_MIXER y # Enable PSS mixer (Beethoven ADSP-16 and other compatible)
 
   # USB serial devices.
-  USB_SERIAL_GENERIC y # USB Generic Serial Driver
-  USB_SERIAL_KEYSPAN_MPR y # include firmware for various USB serial devices
-  USB_SERIAL_KEYSPAN_USA28 y
-  USB_SERIAL_KEYSPAN_USA28X y
-  USB_SERIAL_KEYSPAN_USA28XA y
-  USB_SERIAL_KEYSPAN_USA28XB y
-  USB_SERIAL_KEYSPAN_USA19 y
-  USB_SERIAL_KEYSPAN_USA18X y
-  USB_SERIAL_KEYSPAN_USA19W y
-  USB_SERIAL_KEYSPAN_USA19QW y
-  USB_SERIAL_KEYSPAN_USA19QI y
-  USB_SERIAL_KEYSPAN_USA49W y
-  USB_SERIAL_KEYSPAN_USA49WLC y
+  # USB_SERIAL_GENERIC y # USB Generic Serial Driver
+  # USB_SERIAL_KEYSPAN_MPR y # include firmware for various USB serial devices
+  # USB_SERIAL_KEYSPAN_USA28 y
+  # USB_SERIAL_KEYSPAN_USA28X y
+  # USB_SERIAL_KEYSPAN_USA28XA y
+  # USB_SERIAL_KEYSPAN_USA28XB y
+  # USB_SERIAL_KEYSPAN_USA19 y
+  # USB_SERIAL_KEYSPAN_USA18X y
+  # USB_SERIAL_KEYSPAN_USA19W y
+  # USB_SERIAL_KEYSPAN_USA19QW y
+  # USB_SERIAL_KEYSPAN_USA19QI y
+  # USB_SERIAL_KEYSPAN_USA49W y
+  # USB_SERIAL_KEYSPAN_USA49WLC y
 
   # Filesystem options - in particular, enable extended attributes and
   # ACLs for all filesystems that support them.
@@ -236,7 +236,7 @@ with stdenv.lib;
   NFSD_V3_ACL y
   NFSD_V4 y
   ${optionalString (versionAtLeast version "3.11") ''
-    NFSD_V4_SECURITY_LABEL y
+  # NFSD_V4_SECURITY_LABEL y
   ''}
   NFS_FSCACHE y
   NFS_SWAP y
@@ -244,7 +244,7 @@ with stdenv.lib;
   ${optionalString (versionAtLeast version "3.11") ''
     NFS_V4_1 y  # NFSv4.1 client support
     NFS_V4_2 y
-    NFS_V4_SECURITY_LABEL y
+    # NFS_V4_SECURITY_LABEL y
   ''}
   CIFS_XATTR y
   CIFS_POSIX y
@@ -272,8 +272,8 @@ with stdenv.lib;
 
   # Security related features.
   RANDOMIZE_BASE? y
-  STRICT_DEVMEM y # Filter access to /dev/mem
-  SECURITY_SELINUX_BOOTPARAM_VALUE 0 # Disable SELinux by default
+  # STRICT_DEVMEM y # Filter access to /dev/mem
+  # SECURITY_SELINUX_BOOTPARAM_VALUE 0 # Disable SELinux by default
   DEVKMEM n # Disable /dev/kmem
   ${if versionOlder version "3.14" then ''
     CC_STACKPROTECTOR? y # Detect buffer overflows on the stack
@@ -285,13 +285,13 @@ with stdenv.lib;
   ''}
 
   # AppArmor support
-  SECURITY_APPARMOR y
-  DEFAULT_SECURITY_APPARMOR y
+  # SECURITY_APPARMOR y
+  # DEFAULT_SECURITY_APPARMOR y
 
   # Microcode loading support
-  MICROCODE y
-  MICROCODE_INTEL y
-  MICROCODE_AMD y
+  # MICROCODE y
+  # MICROCODE_INTEL y
+  # MICROCODE_AMD y
   ${optionalString (versionAtLeast version "3.11" && versionOlder version "4.4") ''
     MICROCODE_EARLY y
     MICROCODE_INTEL_EARLY y
@@ -299,11 +299,11 @@ with stdenv.lib;
   ''}
 
   # Misc. options.
-  8139TOO_8129 y
-  8139TOO_PIO n # PIO is slower
-  AIC79XX_DEBUG_ENABLE n
-  AIC7XXX_DEBUG_ENABLE n
-  AIC94XX_DEBUG n
+  # 8139TOO_8129 y
+  # 8139TOO_PIO n # PIO is slower
+  # AIC79XX_DEBUG_ENABLE n
+  # AIC7XXX_DEBUG_ENABLE n
+  # AIC94XX_DEBUG n
   ${optionalString (versionAtLeast version "3.3" && versionOlder version "3.13") ''
     AUDIT_LOGINUID_IMMUTABLE y
   ''}
@@ -319,11 +319,11 @@ with stdenv.lib;
   CLEANCACHE? y
   CRASH_DUMP? n
   DVB_DYNAMIC_MINORS? y # we use udev
-  EFI_STUB y # EFI bootloader in the bzImage itself
+  # EFI_STUB y # EFI bootloader in the bzImage itself
   FHANDLE y # used by systemd
   FRONTSWAP y
-  FUSION y # Fusion MPT device support
-  IDE n # deprecated IDE support
+  # FUSION y # Fusion MPT device support
+  # IDE n # deprecated IDE support
   ${optionalString (versionAtLeast version "4.3") ''
     IDLE_PAGE_TRACKING y
   ''}
@@ -334,50 +334,50 @@ with stdenv.lib;
   JOYSTICK_XPAD_LEDS? y # LED Support for Xbox360 controller 'BigX' LED
   KEXEC_FILE? y
   KEXEC_JUMP? y
-  LDM_PARTITION y # Windows Logical Disk Manager (Dynamic Disk) support
-  LOGIRUMBLEPAD2_FF y # Logitech Rumblepad 2 force feedback
-  LOGO n # not needed
-  MEDIA_ATTACH y
-  MEGARAID_NEWGEN y
+  # LDM_PARTITION y # Windows Logical Disk Manager (Dynamic Disk) support
+  # LOGIRUMBLEPAD2_FF y # Logitech Rumblepad 2 force feedback
+  # LOGO n # not needed
+  # MEDIA_ATTACH y
+  # MEGARAID_NEWGEN y
   ${optionalString (versionAtLeast version "3.15") ''
-    MLX4_EN_VXLAN y
+  # MLX4_EN_VXLAN y
   ''}
   MODVERSIONS y
-  MOUSE_PS2_ELANTECH y # Elantech PS/2 protocol extension
-  MTRR_SANITIZER y
-  NET_FC y # Fibre Channel driver support
+  # MOUSE_PS2_ELANTECH y # Elantech PS/2 protocol extension
+  # MTRR_SANITIZER y
+  # NET_FC y # Fibre Channel driver support
   ${optionalString (versionAtLeast version "3.11") ''
-    PINCTRL_BAYTRAIL y # GPIO on Intel Bay Trail, for some Chromebook internal eMMC disks
+  # PINCTRL_BAYTRAIL y # GPIO on Intel Bay Trail, for some Chromebook internal eMMC disks
   ''}
-  MMC_BLOCK_MINORS 32 # 8 is default. Modern gpt tables on eMMC may go far beyond 8.
+  # MMC_BLOCK_MINORS 32 # 8 is default. Modern gpt tables on eMMC may go far beyond 8.
   PPP_MULTILINK y # PPP multilink support
   PPP_FILTER y
   REGULATOR y # Voltage and Current Regulator Support
   RC_DEVICES? y # Enable IR devices
-  RT2800USB_RT55XX y
+  # RT2800USB_RT55XX y
   SCHED_AUTOGROUP y
   SCSI_LOGGING y # SCSI logging facility
-  SERIAL_8250 y # 8250/16550 and compatible serial support
+  # SERIAL_8250 y # 8250/16550 and compatible serial support
   SLIP_COMPRESSED y # CSLIP compressed headers
   SLIP_SMART y
-  HWMON y
-  THERMAL_HWMON y # Hardware monitoring support
+  # HWMON y
+  # THERMAL_HWMON y # Hardware monitoring support
   ${optionalString (versionAtLeast version "3.15") ''
     UEVENT_HELPER n
   ''}
   ${optionalString (versionOlder version "3.15") ''
     USB_DEBUG? n
   ''}
-  USB_EHCI_ROOT_HUB_TT y # Root Hub Transaction Translators
-  USB_EHCI_TT_NEWSCHED y # Improved transaction translator scheduling
+  # USB_EHCI_ROOT_HUB_TT y # Root Hub Transaction Translators
+  # USB_EHCI_TT_NEWSCHED y # Improved transaction translator scheduling
   ${optionalString (versionAtLeast version "4.3") ''
     USERFAULTFD y
   ''}
-  X86_CHECK_BIOS_CORRUPTION y
-  X86_MCE y
+  # X86_CHECK_BIOS_CORRUPTION y
+  # X86_MCE y
 
   # PCI-Expresscard hotplug support
-  ${optionalString (versionAtLeast version "3.12") "HOTPLUG_PCI_PCIE y"}
+  # ${optionalString (versionAtLeast version "3.12") "HOTPLUG_PCI_PCIE y"}
 
   # Linux containers.
   NAMESPACES? y #  Required by 'unshare' used by 'nixos-install'
@@ -402,19 +402,19 @@ with stdenv.lib;
   PROC_EVENTS y
 
   # Tracing.
-  FTRACE y
-  KPROBES y
-  FUNCTION_TRACER y
-  FTRACE_SYSCALLS y
-  SCHED_TRACER y
-  STACK_TRACER y
-  UPROBE_EVENT y
+  # FTRACE y
+  # KPROBES y
+  # FUNCTION_TRACER y
+  # FTRACE_SYSCALLS y
+  # SCHED_TRACER y
+  # STACK_TRACER y
+  # UPROBE_EVENT y
   ${optionalString (versionAtLeast version "4.4") ''
     BPF_SYSCALL y
-    BPF_EVENTS y
+    # BPF_EVENTS y
   ''}
-  FUNCTION_PROFILER y
-  RING_BUFFER_BENCHMARK n
+  # FUNCTION_PROFILER y
+  # RING_BUFFER_BENCHMARK n
 
   # Devtmpfs support.
   DEVTMPFS y
@@ -424,21 +424,21 @@ with stdenv.lib;
 
   # Virtualisation.
   PARAVIRT? y
-  HYPERVISOR_GUEST y
+  # HYPERVISOR_GUEST y
   PARAVIRT_SPINLOCKS? y
-  KVM_APIC_ARCHITECTURE y
-  KVM_ASYNC_PF y
+  # KVM_APIC_ARCHITECTURE y
+  # KVM_ASYNC_PF y
   ${optionalString (versionAtLeast version "4.0") ''
     KVM_COMPAT? y
   ''}
   KVM_DEVICE_ASSIGNMENT? y
   ${optionalString (versionAtLeast version "4.0") ''
-    KVM_GENERIC_DIRTYLOG_READ_PROTECT y
+  # KVM_GENERIC_DIRTYLOG_READ_PROTECT y
   ''}
-  KVM_GUEST y
-  KVM_MMIO y
+  # KVM_GUEST y
+  # KVM_MMIO y
   ${optionalString (versionAtLeast version "3.13") ''
-    KVM_VFIO y
+  # KVM_VFIO y
   ''}
   XEN? y
   XEN_DOM0? y
@@ -467,17 +467,17 @@ with stdenv.lib;
     HIGHMEM64G? y # We need 64 GB (PAE) support for Xen guest support.
   ''}
   ${optionalString (stdenv.is64bit) ''
-    VFIO_PCI_VGA y
+  # VFIO_PCI_VGA y
   ''}
   VIRT_DRIVERS y
 
   # Media support.
-  MEDIA_DIGITAL_TV_SUPPORT y
-  MEDIA_CAMERA_SUPPORT y
-  MEDIA_RC_SUPPORT y
-  MEDIA_USB_SUPPORT y
+  # MEDIA_DIGITAL_TV_SUPPORT y
+  # MEDIA_CAMERA_SUPPORT y
+  # MEDIA_RC_SUPPORT y
+  # MEDIA_USB_SUPPORT y
   ${optionalString (!(features.chromiumos or false)) ''
-    MEDIA_PCI_SUPPORT y
+  # MEDIA_PCI_SUPPORT y
   ''}
 
   # Our initrd init uses shebang scripts, so can't be modular.
@@ -506,8 +506,8 @@ with stdenv.lib;
 
   # Support x2APIC (which requires IRQ remapping).
   ${optionalString (stdenv.system == "x86_64-linux") ''
-    X86_X2APIC y
-    IRQ_REMAP y
+    # X86_X2APIC y
+    # IRQ_REMAP y
   ''}
 
   # Disable the firmware helper fallback, udev doesn't implement it any more
@@ -573,6 +573,21 @@ with stdenv.lib;
       USB_GADGET n
     ''}
   ''}
+  REGULATOR_TPS62360 n
+  REGULATOR_MAX8952 n
+  LIBNVDIMM n
+  MMA9551 n
+  AT803X_PHY n
+  FPGA_MGR_ZYNQ_FPGA n
+  REGULATOR_LP872X n
+  SX9500 n
+  NFC_NXP_NCI_I2C n
+  NFC_FDP_I2C n
+  NFC_MRVL_UART n
+  NFC_ST_NCI_I2C n
+  PPS_CLIENT_GPIO n
+  HP03 n
+  AD5593R n
 
   ${kernelPlatform.kernelExtraConfig or ""}
   ${extraConfig}
diff --git a/pkgs/os-specific/linux/kernel/manual-config.nix b/pkgs/os-specific/linux/kernel/manual-config.nix
index 8da8f20..01882fe 100644
--- a/pkgs/os-specific/linux/kernel/manual-config.nix
+++ b/pkgs/os-specific/linux/kernel/manual-config.nix
@@ -122,6 +122,15 @@ let
       installTargets = [ (if platform.kernelTarget == "uImage" then "uinstall" else
                           if platform.kernelTarget == "zImage" then "zinstall" else
                           "install") ];
+      installPhase = ''
+        mkdir $out
+        pwd
+        ls -lh ..
+        cp -vi ../build/vmlinux $out/
+        make $makeFlags modules_install INSTALL_MOD_PATH=$out
+        set -x
+        runHook postInstall
+      '';
 
       postInstall = ''
         mkdir -p $dev
@@ -161,6 +170,7 @@ let
 
         chmod +w -R ../source
         arch=`cd $dev/lib/modules/${modDirVersion}/build/arch; ls`
+        arch=um
 
         # Remove unusued arches
         mv arch/$arch .
@@ -223,7 +233,7 @@ stdenv.mkDerivation ((drvAttrs config stdenv.platform (kernelPatches ++ nativeKe
     (ubootChooser stdenv.platform.uboot);
 
   makeFlags = commonMakeFlags ++ [
-    "ARCH=${stdenv.platform.kernelArch}"
+    "ARCH=${builtins.trace stdenv.platform.kernelArch stdenv.platform.kernelArch}"
   ];
 
   karch = stdenv.platform.kernelArch;
diff --git a/pkgs/top-level/platforms.nix b/pkgs/top-level/platforms.nix
index 3c94501..8cf7165 100644
--- a/pkgs/top-level/platforms.nix
+++ b/pkgs/top-level/platforms.nix
@@ -6,10 +6,10 @@ rec {
     kernelBaseConfig = "defconfig";
     # Build whatever possible as a module, if not stated in the extra config.
     kernelAutoModules = true;
-    kernelTarget = "bzImage";
+    kernelTarget = "vmlinux";
   };
 
-  pc64 = pcBase // { kernelArch = "x86_64"; };
+  pc64 = pcBase // { kernelArch = "um"; };
 
   pc32 = pcBase // { kernelArch = "i386"; };
 
linux-uml.nix
{ stdenv, fetchurl, perl, buildLinux, ... } @ args:

let
  platform' = stdenv.platform // { kernelArch = "um"; };
  stdenv' = stdenv // { platform = platform'; };
in
import ./generic.nix (args // rec {
  stdenv = stdenv';
  version = "4.7";
  modDirVersion = "4.7.0";
  extraMeta.branch = "4.7";

  src = fetchurl {
    url = "mirror://kernel/linux/kernel/v4.x/linux-${version}.tar.xz";
    sha256 = "5190c3d1209aeda04168145bf50569dc0984f80467159b1dc50ad731e3285f10";
  };

  kernelPatches = args.kernelPatches;

  features.iwlwifi = true;
  features.efiBootStub = true;
  features.needsCifsUtils = true;
  features.canDisableNetfilterConntrackHelpers = true;
  features.netfilterRPFilter = true;
} // (args.argsOverride or {}))

nix default.nix

default.nix
{ fetchurl }:

{ url, sha256 }:

(fetchurl {
  inherit name sha256;
}).overrideDerivation (oldAttrs: { requiredSystemFeatures = ["no-chroot"]; })

nix import.nix

import.nix
let
  pkgs = import <nixpkgs> {};
  foo = pkgs.writeTextFile {
    name = "foo";
    text = ''
      { stdenv, writeText }:
      writeText "bar" "the 2nd package"
    '';
    destination = "/default.nix";
  };
in {
  a = pkgs.callPackage foo {};
  b = foo;
}

nix gistfile1.nix

gistfile1.nix

{
  allowUnfree = true;
  pulseaudio = true;
  packageOverrides = pkgs: rec {
    car = with pkgs; buildEnv {
      name = "car";
      paths = with python35Packages; [
        htop
        gitAndTools.gitFull
        cmake
        mercurial
        python35
        cython
        pip
        virtualenv
        freetype
        libpng
        (
          (opencv.override { enablePython = true; enableFfmpeg = true; enableEigen = true; })
          .overrideDerivation (oldAttrs: { cmakeFlags = oldAttrs.cmakeFlags ++ [ "-DPYTHON_EXECUTABLE=${python}/bin/python3" ]; })
        )
      ];
    };
  };
}

nix builders.nix

router.nix
{ lib, config, pkgs, ... }:

let
  passwords = import ./passwords.nix;
  builders = import ./builders.nix;
  keys = import ./keys.nix;
in
{
  nix = with builders.x; {
    buildMachines = builders.arm ++ builders."64bit" ++ [ nix2 ]; # ++ [ builders.x.rpi2 ];
    buildCores = 2;
    extraOptions = ''
      gc-keep-derivations = true
      gc-keep-outputs = true
    '';
  };
}
builders.nix
let
  key = "/etc/nixos/keys/distro";
in
{
  x = {
    rpi2 = {
      hostName = "192.168.2.126";
      maxJobs = 2;
      sshUser = "builder";
      system = "armv6l-linux,armv7l-linux";
      sshKey = key;
      speedFactor = 2;
    };
    laptop = {
      hostName = "ramboot.localnet";
      maxJobs = 1;
      sshUser = "builder";
      system = "x86_64-linux";
      speedFactor = 1;
      sshKey = key;
    };
    nix1 = { # 512mb ram
      hostName = "nix1.localnet";
      maxJobs = 1;
      sshUser = "builder";
      system = "armv6l-linux";
      sshKey = key;
    };
    nix2 = { # 256mb ram
      hostName = "nix2.localnet";
      maxJobs = 1;
      sshUser = "builder";
      system = "armv6l-linux";
      sshKey = key;
    };
    amd = {
      hostName = "192.168.2.15";
      maxJobs = 5;
      speedFactor = 4;
      sshUser = "builder";
      system = "i686-linux,x86_64-linux,armv6l-linux,armv7l-linux";
      sshKey = key;
      supportedFeatures = [ "big-parallel" ];
    };
  };
}

nix version1.nix

version2.nix
{ stdenv, python2, pygame, python2Packages, ftputil }:

let
  pythonPath = builtins.concatStringsSep ":" (builtins.map (pkg: "${pkg}/lib/${python2.libPrefix}/site-packages") [ pygame python2Packages.pyopengl python2Packages.pillow python2Packages.numpy python2Packages.pyyaml ftputil ]);
in
stdenv.mkDerivation {
  name = "mcedit";
  src = ./MCEdit.v1.5.1.0.Lin.Universal.run;
  unpackPhase = ''
    cp $src MCEdit.v1.5.1.0.Lin.Universal.run
    chmod +x MCEdit.v1.5.1.0.Lin.Universal.run
    ./MCEdit.v1.5.1.0.Lin.Universal.run --noexec --keep
    cd mcedit
  '';
  installPhase = ''
    mkdir -pv $out/{bin,lib{,splash}}
    cp -vir mcedit *.png pymclevel Items bo3.def RELEASE-VERSION.json lang fonts toolicons $out/lib
    touch $out/lib/splash
    cat <<EOF > $out/bin/mcedit
    #${stdenv.shell}
    export PYTHONPATH=${pythonPath}
    exec ${python2}/bin/python $out/lib/mcedit "\$@"
    EOF
    chmod +x $out/bin/mcedit
    ln -sv /tmp/mcedit.log $out/lib/mcedit.log
  '';
}
version1.nix
{ stdenv, fetchFromGitHub, python2, pygame, python2Packages, ftputil }:

let
  pythonPath = builtins.concatStringsSep ":" (builtins.map (pkg: "${pkg}/lib/${python2.libPrefix}/site-packages") [ pygame python2Packages.pyopengl python2Packages.pillow python2Packages.numpy python2Packages.pyyaml ftputil ]);
in
python2Packages.buildPythonPackage rec {
#stdenv.mkDerivation {
  name = "mcedit";
  src = fetchFromGitHub {
    owner = "Khroki";
    repo = "MCEdit-Unified";
    rev = "07567d6a8668064e4e235a9db1ca170f1e775206";
    sha256 = "1jw7iapmkhz49wbv96jjy3x2qmdhz075q6haw6rzchgnd3vq1qp0";
  };
  buildInputs = [ python2Packages.cython ];
  installPhase = ''
    mkdir -pv $out/{bin,lib{,splash}}
    cp -vir mcedit *.png pymclevel Items bo3.def RELEASE-VERSION.json lang fonts toolicons $out/lib
    touch $out/lib/splash
    cat <<EOF > $out/bin/mcedit
    #${stdenv.shell}
    export PYTHONPATH=${pythonPath}
    exec ${python2}/bin/python $out/lib/mcedit "\$@"
    EOF
    chmod +x $out/bin/mcedit
    ln -sv /tmp/mcedit.log $out/lib/mcedit.log
  '';
}

nix 执行-arch.nix

openssl.patch
diff --git a/pkgs/development/libraries/openssl/default.nix b/pkgs/development/libraries/openssl/default.nix
index 157ce5f..5b24af0 100644
--- a/pkgs/development/libraries/openssl/default.nix
+++ b/pkgs/development/libraries/openssl/default.nix
@@ -1,5 +1,5 @@
 { stdenv, fetchurl, perl
-, withCryptodev ? false, cryptodevHeaders }:
+, withCryptodev ? false, cryptodevHeaders, enforceArch }:
 
 with stdenv.lib;
 
@@ -26,7 +26,7 @@ let
   outputs = [ "dev" "out" "man" "bin" ];
   setOutputFlags = false;
 
-    nativeBuildInputs = [ perl ];
+    nativeBuildInputs = [ perl enforceArch ];
     buildInputs = stdenv.lib.optional withCryptodev cryptodevHeaders;
 
     # On x86_64-darwin, "./config" misdetects the system as
enforce-arch.sh
function enforceArch() {
  echo checking target arches
  for x in $out/lib/*.so; do
    echo checking $x
    readelf -A $x | grep "@target@"
  done
}
postInstallHooks+=(enforceArch)
enforce-arch.nix
{ stdenv, makeSetupHook }:

let
  target = if builtins.trace "system is ${stdenv.system}" stdenv.system == "armv6l-linux" then "Tag_CPU_arch: v6" else
    (if stdenv.system == "armv7l-linux" then "Tag_CPU_arch: v7" else "");
in
makeSetupHook { substitutions = { inherit target; NIX_DEBUG="1"; }; } ./enforce-arch.sh

nix default.nix

default.nix
{ nixpkgs, declInput }: 

let 
  pkgs = import nixpkgs {}; 

  teethBranch = branch: {
    enabled = 1;
    hidden = false;
    description = "teeth ${branch}";
    nixexprinput = "src";
    nixexprpath = "release.nix";
    checkinterval = 60;
    schedulingshares = 100;
    enableemail = true;
    emailoverride = "";
    keepnr = 3;
    inputs = {
      src = { 
        type = "git"; 
        value = "git://github.com/expipiplus1/teeth.git ${branch}";
        emailresponsible = true; 
      };
      nixpkgs = { 
        type = "git"; 
        value = "git://github.com/NixOS/nixpkgs.git release-16.03";
        emailresponsible = false; 
      };
    };
  };

  genSpec = writeTextFile {
    name = "spec.conf";
    text = builtins.toJSON {
      teeth = teethBranch "master";
      teeth-ghc8 = teethBranch "ghc8";
    };
    destination = "/spec.conf";
  };

  printInput = pkgs.runCommand "" {} ''
    cat <<EOF
    ${builtins.toXML declInput}
    EOF
  '';

in {
  jobsets = buildEnv {
    name = "jobsets";
    paths = [ printInput genSpec ];
  };
}