94 lines
2.0 KiB
Nix
94 lines
2.0 KiB
Nix
|
{ lib, ... }:
|
||
|
|
||
|
let
|
||
|
inherit (lib) literalExample mkOption types;
|
||
|
in
|
||
|
|
||
|
{
|
||
|
enable = mkOption {
|
||
|
type = types.bool;
|
||
|
default = false;
|
||
|
description = "Enable Git repository hosting.";
|
||
|
};
|
||
|
cgit = mkOption {
|
||
|
type = types.bool;
|
||
|
default = true;
|
||
|
description = "Enable cgit."; # TODO better desc; talk about nginx
|
||
|
};
|
||
|
dataDir = mkOption {
|
||
|
type = types.str;
|
||
|
default = "/var/lib/git";
|
||
|
description = "Directory used to store repositories.";
|
||
|
};
|
||
|
etcDir = mkOption {
|
||
|
type = types.str;
|
||
|
default = "/etc/git";
|
||
|
};
|
||
|
rules = mkOption {
|
||
|
type = types.unspecified;
|
||
|
};
|
||
|
repos = mkOption {
|
||
|
type = types.attrsOf (types.submodule ({
|
||
|
options = {
|
||
|
desc = mkOption {
|
||
|
type = types.nullOr types.str;
|
||
|
default = null;
|
||
|
description = ''
|
||
|
Repository description.
|
||
|
'';
|
||
|
};
|
||
|
section = mkOption {
|
||
|
type = types.nullOr types.str;
|
||
|
default = null;
|
||
|
description = ''
|
||
|
Repository section.
|
||
|
'';
|
||
|
};
|
||
|
name = mkOption {
|
||
|
type = types.str;
|
||
|
description = ''
|
||
|
Repository name.
|
||
|
'';
|
||
|
};
|
||
|
hooks = mkOption {
|
||
|
type = types.attrsOf types.str;
|
||
|
description = ''
|
||
|
Repository-specific hooks.
|
||
|
'';
|
||
|
};
|
||
|
public = mkOption {
|
||
|
type = types.bool;
|
||
|
default = false;
|
||
|
description = ''
|
||
|
Allow everybody to read the repository via HTTP if cgit enabled.
|
||
|
'';
|
||
|
# TODO allow every configured user to fetch the repository via SSH.
|
||
|
};
|
||
|
};
|
||
|
}));
|
||
|
|
||
|
default = {};
|
||
|
|
||
|
example = literalExample ''
|
||
|
{
|
||
|
testing = {
|
||
|
name = "testing";
|
||
|
hooks.post-update = '''
|
||
|
#! /bin/sh
|
||
|
set -euf
|
||
|
echo post-update hook: $* >&2
|
||
|
''';
|
||
|
};
|
||
|
testing2 = { name = "testing2"; };
|
||
|
}
|
||
|
'';
|
||
|
|
||
|
description = ''
|
||
|
Repositories.
|
||
|
'';
|
||
|
};
|
||
|
users = mkOption {
|
||
|
type = types.unspecified;
|
||
|
};
|
||
|
}
|