mirror of
https://github.com/nix-community/home-manager
synced 2024-11-26 21:19:45 +01:00
gh: use structural settings (#2339)
This commit is contained in:
parent
fd2f746016
commit
82c92a18ba
5 changed files with 123 additions and 35 deletions
4
.github/CODEOWNERS
vendored
4
.github/CODEOWNERS
vendored
|
@ -81,8 +81,8 @@
|
|||
/modules/programs/foot.nix @plabadens
|
||||
/tests/modules/programs/foot @plabadens
|
||||
|
||||
/modules/programs/gh.nix @Gerschtli
|
||||
/tests/modules/programs/gh @Gerschtli
|
||||
/modules/programs/gh.nix @Gerschtli @berbiche
|
||||
/tests/modules/programs/gh @Gerschtli @berbiche
|
||||
|
||||
/modules/programs/git.nix @rycee
|
||||
|
||||
|
|
|
@ -6,12 +6,12 @@ let
|
|||
|
||||
cfg = config.programs.gh;
|
||||
|
||||
in {
|
||||
meta.maintainers = [ maintainers.gerschtli ];
|
||||
|
||||
options.programs.gh = {
|
||||
enable = mkEnableOption "GitHub CLI tool";
|
||||
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 = { };
|
||||
|
@ -25,7 +25,6 @@ in {
|
|||
Aliases that allow you to create nicknames for gh commands.
|
||||
'';
|
||||
};
|
||||
|
||||
editor = mkOption {
|
||||
type = types.str;
|
||||
default = "";
|
||||
|
@ -34,22 +33,69 @@ in {
|
|||
If blank, will refer to environment.
|
||||
'';
|
||||
};
|
||||
|
||||
gitProtocol = mkOption {
|
||||
type = types.enum [ "https" "ssh" ];
|
||||
git_protocol = mkOption {
|
||||
type = types.str;
|
||||
default = "https";
|
||||
example = "ssh";
|
||||
description = ''
|
||||
The protocol to use when performing Git operations.
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
in {
|
||||
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 = {
|
||||
enable = mkEnableOption "GitHub CLI tool";
|
||||
|
||||
package = mkOption {
|
||||
type = types.package;
|
||||
default = pkgs.gh;
|
||||
defaultText = literalExample "pkgs.gh";
|
||||
description = "Package providing <command>gh</command>.";
|
||||
};
|
||||
|
||||
settings = mkOption {
|
||||
type = settingsType;
|
||||
default = { };
|
||||
description =
|
||||
"Configuration written to <filename>$XDG_CONFIG_HOME/gh/config.yml</filename>.";
|
||||
example = literalExample ''
|
||||
{
|
||||
git_protocol = "ssh";
|
||||
|
||||
prompt = "enabled";
|
||||
|
||||
aliases = {
|
||||
co = "pr checkout";
|
||||
pv = "pr view";
|
||||
};
|
||||
};
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
home.packages = [ pkgs.gh ];
|
||||
home.packages = [ cfg.package ];
|
||||
|
||||
xdg.configFile."gh/config.yml".text = builtins.toJSON {
|
||||
inherit (cfg) aliases editor;
|
||||
git_protocol = cfg.gitProtocol;
|
||||
};
|
||||
xdg.configFile."gh/config.yml".source =
|
||||
yamlFormat.generate "gh-config.yml" cfg.settings;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -4,8 +4,8 @@
|
|||
config = {
|
||||
programs.gh = {
|
||||
enable = true;
|
||||
aliases = { co = "pr checkout"; };
|
||||
editor = "vim";
|
||||
settings.aliases = { co = "pr checkout"; };
|
||||
settings.editor = "vim";
|
||||
};
|
||||
|
||||
test.stubs.gh = { };
|
||||
|
@ -14,7 +14,11 @@
|
|||
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"}''
|
||||
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