grace/dots
dotfiles/nix configs
git clone https://git.gae.moe/grace/dots
fdde154
vulcan
1{ 2config , 3pkgs , 4lib , 5 ... 6} : 7 8let 9gitoliteKeys = { 10gitolite-admin = [ 11"sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIA6Eq2yVsZrCH8so7f3ygH0UWp6WkOxbhLNFC9QewKwoAAAABHNzaDo= grace_yoder@outlook.com" 12# "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINySDE+jaYpuAWUdPQf/JcAWETeHgmh+T5Y4GUa7MfeM grace@turing" 13]; 14 15grace = [ ]; 16grace-read = [ ]; 17}; 18 19mkGitoliteKey = 20user :key : 21''command=" ${ pkgs . gitolite } /bin/gitolite-shell ${ user } ",restrict ${ key } '' ; 22 23gitoliteAuthorizedKeys = 24lib . concatStringsSep "\n" ( 25lib . flatten ( 26lib . mapAttrsToList ( 27user :keys : 28map ( mkGitoliteKey user ) keys 29) gitoliteKeys 30) 31); 32 33fixGitolitePermissions = pkgs . writeShellScript "fix-gitolite-permissions" '' 34set -eu 35 36${ pkgs . coreutils } /bin/mkdir -p /var/lib/git-server/.ssh 37 38${ pkgs . coreutils } /bin/chown git:git /var/lib/git-server 39${ pkgs . coreutils } /bin/chmod 0750 /var/lib/git-server 40 41${ pkgs . coreutils } /bin/chown git:git /var/lib/git-server/.ssh 42${ pkgs . coreutils } /bin/chmod 0700 /var/lib/git-server/.ssh 43 44if [ -e /var/lib/git-server/.ssh/authorized_keys ]; then 45${ pkgs . coreutils } /bin/chown git:git \ 46/var/lib/git-server/.ssh/authorized_keys 47 48${ pkgs . coreutils } /bin/chmod 0600 \ 49/var/lib/git-server/.ssh/authorized_keys 50fi 51'' ; 52in 53{ 54services . gitolite = { 55enable = true ; 56 57user = "git" ; 58group = "git" ; 59 60dataDir = "/var/lib/git-server" ; 61 62adminPubkey = 63"sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIA6Eq2yVsZrCH8so7f3ygH0UWp6WkOxbhLNFC9QewKwoAAAABHNzaDo= grace_yoder@outlook.com" ; 64}; 65 66# IMPORTANT: 67# mode != "symlink" makes these REAL /etc files instead of 68# symlinks through /nix/store, which sshd StrictModes rejects. 69 70environment . etc . "ssh/git-user-ca.pub" = { 71mode = "0644" ; 72user = "root" ; 73group = "root" ; 74 75text = '' 76ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEuc4HCdyEMu4uiYhlokSXmu+68hkm7j6CqVwjDkCeSj grace.pink 77'' ; 78}; 79 80environment . etc . "ssh/git-principals" = { 81mode = "0644" ; 82user = "root" ; 83group = "root" ; 84 85text = '' 86command=" ${ pkgs . gitolite } /bin/gitolite-shell grace",restrict t:dev 87command=" ${ pkgs . gitolite } /bin/gitolite-shell grace-read",restrict u:grace 88'' ; 89}; 90 91environment . etc . "ssh/git-authorized-keys" = { 92mode = "0644" ; 93user = "root" ; 94group = "root" ; 95 96text = gitoliteAuthorizedKeys + "\n" ; 97}; 98 99services . openssh = { 100enable = true ; 101 102ports = [ 10322 1042222 105]; 106 107extraConfig = '' 108Match User git 109TrustedUserCAKeys /etc/ssh/git-user-ca.pub 110AuthorizedPrincipalsFile /etc/ssh/git-principals 111AuthorizedKeysFile /etc/ssh/git-authorized-keys 112 113PubkeyAuthentication yes 114PasswordAuthentication no 115KbdInteractiveAuthentication no 116 117DisableForwarding yes 118PermitTTY no 119PermitUserRC no 120X11Forwarding no 121'' ; 122}; 123 124systemd . services . gitolite-init . serviceConfig . ExecStartPre = 125lib . mkBefore [ 126"+ ${ fixGitolitePermissions } " 127]; 128 129systemd . tmpfiles . rules = [ 130"d /var/lib/git-server 0750 git git -" 131"d /var/lib/git-server/.ssh 0700 git git -" 132]; 133}