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;
|
|
};
|
|
}
|