기본적으로 당기고 싶어요내 config.programs.config.alias
항목별도의 파일로 분할 .bash
하고 구성을 구축할 때 동적으로 읽습니다. 현재 구성의 대표적인 하위 집합:
{
programs.git = {
config = {
alias = {
aliases = "!git config --get-regexp '^alias\.' | cut --delimiter=. --fields 2-";
git = "!git";
st = "status";
};
};
};
}
모든 !git
항목은 별도의 쉘 스크립트로 제공되는 것이 가장 좋습니다. 이렇게 하면 Git 별칭 구성에 통합하기 전에 린트하고 형식을 지정하고 실행하여 유효한지 확인할 수 있습니다.
답변1
주석이 달린 버전지금까지의 솔루션:
{
config.git.config.alias =
(
lib.attrsets.mergeAttrsList ( # Change from a list of attribute sets to a single attribute set
map (
path: {
# Create a [filename without extension as alias name] to [alias value] attribute set
"${lib.removeSuffix ".bash" (baseNameOf path)}" =
"!\"" # `!`denotes that this alias runs a command rather than a Git subcommand; quote to simplify escaping
+ builtins.replaceStrings ["\n"] ["; "] ( # Change from readable multi-line scripts to a single line
lib.escape ["\"" "\\"] ( # Escape backslash and double quotes to fit Git configuration language
lib.removeSuffix "\n" ( # Remove newline at EOF
builtins.readFile path
)
)
)
+ "\"";
}
) (
lib.filesystem.listFilesRecursive ./includes/git-aliases
)
)
)
// {
st = "status";
};
}
작은따옴표와 큰따옴표, 백슬래시, 개행 문자를 포함한 모든 별칭에서 작동하는 것 같습니다. 다른 사람이 더 간단한 것을 생각해 낼 수 있기를 바라지만 지금은 그게 전부입니다.