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}