100 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| {
 | |
|   stdenv
 | |
| , lib
 | |
| , 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
 | |
|   '';
 | |
| 
 | |
|   meta = with lib; {
 | |
|     homepage = null;
 | |
|     description = "nix bubblewrap wrapper";
 | |
|     maintainers = with maintainers.bsc; [ rarias ];
 | |
|     platforms = platforms.linux;
 | |
|     license = licenses.gpl3Plus; # TODO: license?
 | |
|   };
 | |
| }
 | |
| 
 |