{ nixpkgs ? import <nixpkgs> {} }:
with nixpkgs;
let
ghc = pkgs.haskellPackages.ghcWithPackages
(p: with p; [ ieee754 ]);
emacs = pkgs.emacsWithPackages
(p: with p; [ use-package evil agda2-mode company
rainbow-delimiters ]);
der = agda.mkDerivation(self: {
name = "AgdaEnv";
buildDepends = [ pkgs.AgdaStdlib ghc emacs ];
});
in der.env
$ nix-shell agda.nix
#!/usr/bin/env bash
set -e
tag=agda
use=(.bashrc .bash-preexec.sh .motd .inputrc .screenrc .emacs.d)
net=${net:-none}
docker-build-cached()
{
local C=~/.cache/docker-build-cached/"$tag"
mkdir -p "$C"
cat > "$C/Dockerfile.new"
if ! cmp "$C"/Dockerfile{,.new} 2> /dev/null ; then
docker build -t "$tag" -f "$C/Dockerfile.new" "$C" || return 1
mv "$C"/Dockerfile{.new,}
fi
}
docker-build-cached << EOF_DOCKERFILE
from debian:buster
run apt-get update
run apt-get install -y locales
run echo en_US.UTF-8 UTF-8 > /etc/locale.gen
run dpkg-reconfigure locales --frontend=noninteractive
run apt-get install -y screen
run apt-get install -y emacs
run apt-get install -y elpa-evil
run apt-get install -y elpa-company
run apt-get install -y elpa-rainbow-delimiters
run apt-get install -y elpa-use-package
run apt-get install -y agda-bin
run apt-get install -y agda-stdlib
run apt-get install -y elpa-agda2-mode
run useradd -m -s /bin/bash user
env SHELL /bin/bash
env LANG en_US.UTF-8
env LC_CTYPE en_US.UTF8
user user
run mkdir -p ~/.emacs.d
run echo "(package-initialize)" \
"(require 'agda2-mode nil t)" \
"(when (require 'evil) nil t (evil-mode 1))" \
>> ~/.emacs.d/init.el
cmd bash
EOF_DOCKERFILE
xhost +SI:localuser:"$USER" > /dev/null 2>&1 || true
vs=()
for f in "${use[@]}"; do
[ -e "$HOME/$f" ] && vs=("${vs[@]}" "-v" "$HOME/$f:/home/user/$f:ro")
done
docker run \
"${vs[@]}" \
--network "$net" \
-e TERM="$TERM" \
-e DISPLAY="$DISPLAY" \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v "$PWD":/home/user/cwd \
-w /home/user/cwd \
-it "$tag" "$@"
$ chmod +x ~/bin/so-agda
$ so-agda