git help some-alias
imprime o valor de configuração do alias, por exemplo:
$ git help aliases
'aliases' is aliased to '!git config --get-regexp '^alias\.' | cut --delimiter=. --fields 2-'
Em vez disso, gostaria de fornecer ajuda detalhada para este e outros aliases, da mesma forma git help diff
que outros fazem. Até agora eu tenho isso :
{
config.programs.git.package = pkgs.gitFull.overrideAttrs (
old: {
postInstall =
old.postInstall
+ ''
cp ${./includes/git-aliases/docs}/* $doc/share/doc/git/
'';
}
);
}
Ele copia com êxito alguns arquivos de texto para /nix/store/[git package]-doc/share/doc/git/
, mas eles não aparecem durante a execução, por exemplo git help aliases
.
O que mais preciso fazer para que a documentação seja vinculada ao help
subcomando? Atualizar algum registro de arquivos? Adicionar um .html
arquivo mesmo que eu queira apenas os documentos CLI? Algo mais?
Então, na maioria das vezes, o Nix coloca os arquivos exatamente como em uma distribuição FHS normal, exceto que ele prefixa o caminho com
/nix/store/somehash-somename/
(com iguais$out
no momento da construção) e remove alguns caminhos./usr/
Por exemplo, como nas distribuições FHS/usr/local
contêm basicamente a mesma estrutura dos/
programas instalados pelos usuários (o que não é necessário no nix), o nix removerá os prefixos/usr
e ./usr/local
Isso é bastante prático, pois dessa forma o nix pode simplesmente definir$PREFIX=/nix/store/somehash-somename/
(que geralmente é definido por padrão como/usr/local
) e executar como ele a maioria dos scripts auto-tools/cmake/make existentes.Em particular, como nas distribuições normais do FHS as páginas de manual estão localizadas em
/usr/share/man
, no nix precisamos apenas instalar as páginas de manual em$out/share/man
.Agora, para resolver seu problema específico, o mais difícil é realmente entender como o git está encontrando a documentação de seus comandos. Já que você mencionou o
git diff
comando, vamos inspecionar a pasta git para descobrir onde ela armazena os arquivos de documentação:Bingo, parece que a documentação é um
man
arquivo simples. Na verdade, se executarmos:parece que o git é executado diretamente
man gitmytest
(não sei por que não há mais traço envolvido aqui…), e isso parece funcionar mesmo quemytest
não seja um comando git existente. Então, só precisamos criar uma entrada man paragitmytest
!Para isso, vamos criar este template em um novo arquivo
git-mytest
(obtido apenas pesquisando no Google como criar uma página de manual):Então, só precisamos criar um pacote básico para instalar isso. Observe que não há necessidade de override
gitFull
, podemos apenas criar um novo pacote para instalá-lo em um pacote separado. Em meus testes, usarei umdefault.nix
arquivo contendo:Podemos construí-lo e verificar se o arquivo foi produzido corretamente:
Legal, nix até comprimiu para nós. Para verificar se o conteúdo é bom, você pode executar
zcat ./result/share/man/man1/gitmytest.1.gz
e ele imprimirá o arquivo descompactado.Agora é hora de tentar. Uma solução é instalá-lo diretamente em todo o sistema, inserindo a derivação acima em seu
configuration.nix
ou em outro lugar. Mas para fins de teste, eu queria evitar instalá-lo globalmente, então acabei de criar umshell.nix
que carrega o pacote que acabamos de criar:Você pode ver que eu adicionei um
shellHook
: esta linha é realmente necessária apenas para este teste, a fim de especificarman
onde ele deve procurar as páginas de manual. Mas depois de instalar o programa, isso não será mais necessário.Depois, basta carregar o shell e testá-lo:
Funciona! Aproveitar ;-)
EDITAR Ok, parece que as instruções acima não funcionam se um alias for criado; nesse caso, a mensagem é sempre a mesma
myalias is aliased to XXX
. Isso vem desta linha do código e parece impossível de evitar diretamente. No entanto, em vez de criar um alias, você pode simplesmente criar um novo plugin git (e se precisar documentá-lo, é provável que faça sentido criar um), ou seja, um arquivo binário chamado (ao executar, o git serágit-mytest
executadogit mytest
automaticamentegit-mytest
).git-mytest
pode ser um script bash simples chamando o git diretamente. Isso pode ser feito da seguinte maneira (observe que desta vez você precisa escrever os hifens na página de manual, parece que ele atribui nomes de páginas de manual diferentes dependendo do tipo de comando):apenas substitua o
default.nix
arquivo acima por este e execute novamentenix-shell
. Então, você deve digitar bem: