diff options
Diffstat (limited to 'mv/2configs/git.nix')
| -rw-r--r-- | mv/2configs/git.nix | 58 | 
1 files changed, 58 insertions, 0 deletions
| diff --git a/mv/2configs/git.nix b/mv/2configs/git.nix new file mode 100644 index 000000000..991d0c410 --- /dev/null +++ b/mv/2configs/git.nix @@ -0,0 +1,58 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + +  out = { +    krebs.git = { +      enable = true; +      root-title = "public repositories at ${config.krebs.build.host.name}"; +      root-desc = "Hmhmh, im Moment nicht."; +      repos = mapAttrs (_: s: removeAttrs s ["collaborators"]) repos; +      rules = rules; +    }; +  }; + +  repos = public-repos; + +  rules = concatMap make-rules (attrValues repos); + +  public-repos = mapAttrs make-public-repo { +    stockholm = {}; +  }; + +  make-public-repo = name: { desc ? null, section ? null, ... }: { +    inherit name desc section; +    public = true; +    hooks = { +      post-receive = pkgs.git-hooks.irc-announce { +        # TODO make nick = config.krebs.build.host.name the default +        nick = config.krebs.build.host.name; +        channel = "#retiolum"; +        server = "cd.retiolum"; +        verbose = config.krebs.build.host.name == "stro"; +      }; +    }; +  }; + +  make-rules = +    with git // config.krebs.users; +    repo: +      singleton { +        user = [ mv_stro ]; +        repo = [ repo ]; +        perm = push "refs/*" [ non-fast-forward create delete merge ]; +      } ++ +      optional repo.public { +        user = [ lass makefu uriel tv tv_xu ]; +        repo = [ repo ]; +        perm = fetch; +      } ++ +      optional (length (repo.collaborators or []) > 0) { +        user = repo.collaborators; +        repo = [ repo ]; +        perm = fetch; +      }; + +in out | 
