yep, more dotfiles
1{ config 2, lib 3, pkgs 4, ... 5}: 6 7let 8 cfg = config.local.fragment.epita; 9 10 epita-forge-username = "milo.moisson"; 11 12 mount-epita-afs = pkgs.writeShellApplication { 13 name = "mount-epita-afs"; 14 runtimeInputs = with pkgs; [ krb5 sshfs ]; 15 text = '' 16 USERNAME="${epita-forge-username}" 17 18 REMOTE_DIR="/afs/cri.epita.fr/user/''${USERNAME:0:1}/''${USERNAME:0:2}/$USERNAME/u/" 19 MOUNT_DIR="$XDG_RUNTIME_DIR/afs-epita" 20 21 klist || kinit -f "$USERNAME@CRI.EPITA.FR" 22 ls "$MOUNT_DIR" >/dev/null || mkdir -v "$MOUNT_DIR" 23 sshfs -o reconnect "$USERNAME@ssh.cri.epita.fr:$REMOTE_DIR" "$MOUNT_DIR" 24 ''; 25 }; 26in 27{ 28 options.local.fragment.epita.enable = lib.mkEnableOption '' 29 EPITA related 30 31 Depends on: 32 - `ssh` program: Mount AFS script needs SSH 33 ''; 34 35 config = lib.mkIf cfg.enable { 36 assertions = [ 37 { assertion = config.programs.ssh.enable; message = "`epita` fragment depends on `ssh` program"; } 38 ]; 39 40 programs.ssh.package = pkgs.openssh_gssapi; 41 42 # Needed for sshfs 43 programs.ssh.matchBlocks."ssh.cri.epita.fr" = { 44 extraOptions = { 45 GSSAPIAuthentication = "yes"; 46 GSSAPIDelegateCredentials = "yes"; 47 }; 48 }; 49 50 # The forge uses master as its default branch 51 programs.git.includes = [{ 52 condition = "gitdir:~/Development/forge.epita.fr/"; 53 contents = { 54 init.defaultBranch = "master"; 55 }; 56 }]; 57 58 home.packages = [ 59 # Useful to connect to EPITA related services 60 pkgs.krb5 61 mount-epita-afs 62 ]; 63 }; 64}