gh: use structural settings (#2339)
This commit is contained in:
parent
fd2f746016
commit
82c92a18ba
4
.github/CODEOWNERS
vendored
4
.github/CODEOWNERS
vendored
|
@ -81,8 +81,8 @@
|
||||||
/modules/programs/foot.nix @plabadens
|
/modules/programs/foot.nix @plabadens
|
||||||
/tests/modules/programs/foot @plabadens
|
/tests/modules/programs/foot @plabadens
|
||||||
|
|
||||||
/modules/programs/gh.nix @Gerschtli
|
/modules/programs/gh.nix @Gerschtli @berbiche
|
||||||
/tests/modules/programs/gh @Gerschtli
|
/tests/modules/programs/gh @Gerschtli @berbiche
|
||||||
|
|
||||||
/modules/programs/git.nix @rycee
|
/modules/programs/git.nix @rycee
|
||||||
|
|
||||||
|
|
|
@ -6,50 +6,96 @@ let
|
||||||
|
|
||||||
cfg = config.programs.gh;
|
cfg = config.programs.gh;
|
||||||
|
|
||||||
|
yamlFormat = pkgs.formats.yaml { };
|
||||||
|
|
||||||
|
settingsType = types.submodule {
|
||||||
|
freeformType = yamlFormat.type;
|
||||||
|
# These options are only here for the mkRenamedOptionModule support
|
||||||
|
options = {
|
||||||
|
aliases = mkOption {
|
||||||
|
type = with types; attrsOf str;
|
||||||
|
default = { };
|
||||||
|
example = literalExample ''
|
||||||
|
{
|
||||||
|
co = "pr checkout";
|
||||||
|
pv = "pr view";
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
description = ''
|
||||||
|
Aliases that allow you to create nicknames for gh commands.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
editor = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "";
|
||||||
|
description = ''
|
||||||
|
The editor that gh should run when creating issues, pull requests, etc.
|
||||||
|
If blank, will refer to environment.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
git_protocol = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "https";
|
||||||
|
example = "ssh";
|
||||||
|
description = ''
|
||||||
|
The protocol to use when performing Git operations.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
in {
|
in {
|
||||||
meta.maintainers = [ maintainers.gerschtli ];
|
meta.maintainers = [ maintainers.gerschtli maintainers.berbiche ];
|
||||||
|
|
||||||
|
imports = (map (x:
|
||||||
|
mkRenamedOptionModule [ "programs" "gh" x ] [
|
||||||
|
"programs"
|
||||||
|
"gh"
|
||||||
|
"settings"
|
||||||
|
x
|
||||||
|
]) [ "aliases" "editor" ]) ++ [
|
||||||
|
(mkRenamedOptionModule [ "programs" "gh" "gitProtocol" ] [
|
||||||
|
"programs"
|
||||||
|
"gh"
|
||||||
|
"settings"
|
||||||
|
"git_protocol"
|
||||||
|
])
|
||||||
|
];
|
||||||
|
|
||||||
options.programs.gh = {
|
options.programs.gh = {
|
||||||
enable = mkEnableOption "GitHub CLI tool";
|
enable = mkEnableOption "GitHub CLI tool";
|
||||||
|
|
||||||
aliases = mkOption {
|
package = mkOption {
|
||||||
type = with types; attrsOf str;
|
type = types.package;
|
||||||
|
default = pkgs.gh;
|
||||||
|
defaultText = literalExample "pkgs.gh";
|
||||||
|
description = "Package providing <command>gh</command>.";
|
||||||
|
};
|
||||||
|
|
||||||
|
settings = mkOption {
|
||||||
|
type = settingsType;
|
||||||
default = { };
|
default = { };
|
||||||
|
description =
|
||||||
|
"Configuration written to <filename>$XDG_CONFIG_HOME/gh/config.yml</filename>.";
|
||||||
example = literalExample ''
|
example = literalExample ''
|
||||||
{
|
{
|
||||||
co = "pr checkout";
|
git_protocol = "ssh";
|
||||||
pv = "pr view";
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
description = ''
|
|
||||||
Aliases that allow you to create nicknames for gh commands.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
editor = mkOption {
|
prompt = "enabled";
|
||||||
type = types.str;
|
|
||||||
default = "";
|
|
||||||
description = ''
|
|
||||||
The editor that gh should run when creating issues, pull requests, etc.
|
|
||||||
If blank, will refer to environment.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
gitProtocol = mkOption {
|
aliases = {
|
||||||
type = types.enum [ "https" "ssh" ];
|
co = "pr checkout";
|
||||||
default = "https";
|
pv = "pr view";
|
||||||
description = ''
|
};
|
||||||
The protocol to use when performing Git operations.
|
};
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
home.packages = [ pkgs.gh ];
|
home.packages = [ cfg.package ];
|
||||||
|
|
||||||
xdg.configFile."gh/config.yml".text = builtins.toJSON {
|
xdg.configFile."gh/config.yml".source =
|
||||||
inherit (cfg) aliases editor;
|
yamlFormat.generate "gh-config.yml" cfg.settings;
|
||||||
git_protocol = cfg.gitProtocol;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,8 +4,8 @@
|
||||||
config = {
|
config = {
|
||||||
programs.gh = {
|
programs.gh = {
|
||||||
enable = true;
|
enable = true;
|
||||||
aliases = { co = "pr checkout"; };
|
settings.aliases = { co = "pr checkout"; };
|
||||||
editor = "vim";
|
settings.editor = "vim";
|
||||||
};
|
};
|
||||||
|
|
||||||
test.stubs.gh = { };
|
test.stubs.gh = { };
|
||||||
|
@ -14,7 +14,11 @@
|
||||||
assertFileExists home-files/.config/gh/config.yml
|
assertFileExists home-files/.config/gh/config.yml
|
||||||
assertFileContent home-files/.config/gh/config.yml ${
|
assertFileContent home-files/.config/gh/config.yml ${
|
||||||
builtins.toFile "config-file.yml" ''
|
builtins.toFile "config-file.yml" ''
|
||||||
{"aliases":{"co":"pr checkout"},"editor":"vim","git_protocol":"https"}''
|
aliases:
|
||||||
|
co: pr checkout
|
||||||
|
editor: vim
|
||||||
|
git_protocol: https
|
||||||
|
''
|
||||||
}
|
}
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
|
@ -1 +1,4 @@
|
||||||
{ gh-config-file = ./config-file.nix; }
|
{
|
||||||
|
gh-config-file = ./config-file.nix;
|
||||||
|
gh-warnings = ./warnings.nix;
|
||||||
|
}
|
||||||
|
|
35
tests/modules/programs/gh/warnings.nix
Normal file
35
tests/modules/programs/gh/warnings.nix
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
{ config, options, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
config = {
|
||||||
|
programs.gh = {
|
||||||
|
enable = true;
|
||||||
|
aliases = { co = "pr checkout"; };
|
||||||
|
editor = "vim";
|
||||||
|
};
|
||||||
|
|
||||||
|
test.stubs.gh = { };
|
||||||
|
|
||||||
|
test.asserts.warnings.expected = [
|
||||||
|
"The option `programs.gh.editor' defined in ${
|
||||||
|
lib.showFiles options.programs.gh.editor.files
|
||||||
|
} has been renamed to `programs.gh.settings.editor'."
|
||||||
|
"The option `programs.gh.aliases' defined in ${
|
||||||
|
lib.showFiles options.programs.gh.aliases.files
|
||||||
|
} has been renamed to `programs.gh.settings.aliases'."
|
||||||
|
];
|
||||||
|
test.asserts.warnings.enable = true;
|
||||||
|
|
||||||
|
nmt.script = ''
|
||||||
|
assertFileExists home-files/.config/gh/config.yml
|
||||||
|
assertFileContent home-files/.config/gh/config.yml ${
|
||||||
|
builtins.toFile "config-file.yml" ''
|
||||||
|
aliases:
|
||||||
|
co: pr checkout
|
||||||
|
editor: vim
|
||||||
|
git_protocol: https
|
||||||
|
''
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in a new issue