基本的に引っ張りたいです。マイ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";
};
}
一重引用符と二重引用符、バックスラッシュ、改行文字など、すべてのエイリアスで動作するようです。他の人がもっと簡単なことを思い出すことができることを願っていますが、今はそれがすべてです。