91 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{
 | 
						|
  stdenv
 | 
						|
, bashInteractive
 | 
						|
, busybox
 | 
						|
, nix
 | 
						|
, writeText
 | 
						|
, pkgsStatic
 | 
						|
}:
 | 
						|
 | 
						|
let
 | 
						|
  bubblewrap = pkgsStatic.bubblewrap;
 | 
						|
  nixPrefix = "/gpfs/projects/bsc15/nix";
 | 
						|
  nixConfDir = "share";
 | 
						|
  nix_wrap_sh = writeText "nix-wrap.sh" ''
 | 
						|
    #!/usr/bin/env bash
 | 
						|
    #
 | 
						|
    busybox_bin="${nixPrefix}${busybox}/bin"
 | 
						|
    bubblewrap_bin="${nixPrefix}/${bubblewrap}/bin"
 | 
						|
 | 
						|
    bashInteractive_bin="${bashInteractive}/bin"
 | 
						|
    nix_bin="${nix}/bin"
 | 
						|
    
 | 
						|
    rootdir=$(mktemp -d)
 | 
						|
    tmpdir=$(mktemp -d)
 | 
						|
    
 | 
						|
    args=(
 | 
						|
      --bind "$rootdir/" /
 | 
						|
      --bind "${nixPrefix}/nix" /nix
 | 
						|
      --bind "$busybox_bin" /bin
 | 
						|
      --dev-bind /dev /dev
 | 
						|
      --bind /boot /boot
 | 
						|
      --proc /proc
 | 
						|
      --bind /run /run
 | 
						|
      --bind /sys /sys
 | 
						|
      --bind "$tmpdir" /tmp
 | 
						|
      --bind "$PWD" "$PWD"
 | 
						|
      --bind /etc/host.conf /etc/host.conf
 | 
						|
      --bind /etc/hosts /etc/hosts
 | 
						|
      --bind /etc/networks /etc/networks
 | 
						|
      --bind /etc/passwd /etc/passwd
 | 
						|
      --bind /etc/group /etc/group
 | 
						|
      --bind /etc/nsswitch.conf /etc/nsswitch.conf
 | 
						|
      --bind /etc/resolv.conf /etc/resolv.conf
 | 
						|
    )
 | 
						|
    
 | 
						|
    export PATH="/bin:$bashInteractive_bin"
 | 
						|
    export PATH="$nix_bin:$PATH"
 | 
						|
    export TMPDIR=/tmp
 | 
						|
    export PS1="[nix-wrap] \u@\h \W $ "
 | 
						|
    export NIX_CONF_DIR=@out@/share
 | 
						|
 | 
						|
    if [ $# -eq 0 ]; then
 | 
						|
      "$bubblewrap_bin/bwrap" ''${args[@]} /bin/sh
 | 
						|
    else
 | 
						|
      "$bubblewrap_bin/bwrap" ''${args[@]} "''${@}"
 | 
						|
    fi
 | 
						|
    
 | 
						|
  '';
 | 
						|
  nix_conf = writeText "nix.conf" ''
 | 
						|
    experimental-features = nix-command flakes
 | 
						|
    sandbox-fallback = false
 | 
						|
  '';
 | 
						|
 | 
						|
in
 | 
						|
 | 
						|
stdenv.mkDerivation rec {
 | 
						|
  version = "0.0.1";
 | 
						|
  name = "nix-wrap";
 | 
						|
  buildInputs = [
 | 
						|
    bashInteractive
 | 
						|
    busybox
 | 
						|
    nix
 | 
						|
  ];
 | 
						|
  src = null;
 | 
						|
  dontUnpack = true;
 | 
						|
  dontConfigure = true;
 | 
						|
  dontBuild = true;
 | 
						|
  dontPatchShebangs = true;
 | 
						|
  NIX_DEBUG = 0;
 | 
						|
 | 
						|
  installPhase = ''
 | 
						|
    mkdir -p $out/bin
 | 
						|
    substituteAll ${nix_wrap_sh} $out/bin/nix-wrap
 | 
						|
    chmod +x $out/bin/nix-wrap
 | 
						|
 | 
						|
    mkdir -p $out/share
 | 
						|
    cp ${nix_conf} $out/share/nix.conf
 | 
						|
  '';
 | 
						|
}
 | 
						|
 |