← Back to list

nix-conditionals
by khaneliman
Nix configuration for my systems supporting macOS, NixOS, and WSL.
⭐ 303🍴 14📅 Jan 23, 2026
SKILL.md
name: nix-conditionals description: "Nix conditional patterns: mkIf, optionals, optionalString, mkMerge. Use when writing conditional configuration, avoiding if-then-else, or combining multiple conditional blocks."
Conditional Patterns
Prefer lib Functions Over if-then-else
| Need | Use |
|---|---|
| Conditional config block | lib.mkIf |
| Conditional list items | lib.optionals |
| Conditional string | lib.optionalString |
| Combine conditionals | lib.mkMerge |
mkIf - Conditional Config Blocks
config = lib.mkIf cfg.enable {
programs.git.enable = true;
home.packages = [ pkgs.git ];
};
# Nested conditional
programs.vim = lib.mkIf cfg.enableVim {
enable = true;
};
optionals - Conditional List Items
home.packages = [
pkgs.coreutils
] ++ lib.optionals cfg.enableTools [
pkgs.ripgrep
pkgs.fd
] ++ lib.optionals pkgs.stdenv.isLinux [
pkgs.linuxTool
];
optionalString - Conditional Strings
programs.bash.initExtra = '''
# Always included
export EDITOR=vim
''' + lib.optionalString cfg.enableAliases '''
alias ll='ls -la'
''';
mkMerge - Combine Conditional Blocks
config = lib.mkMerge [
# Always applied
{
programs.bash.enable = true;
}
# Conditionally applied
(lib.mkIf cfg.enableGit {
programs.git.enable = true;
})
(lib.mkIf cfg.enableVim {
programs.vim.enable = true;
})
];
When if-then-else is OK
Only use when lib functions make it too complicated:
# OK - simple value selection
theme = if isDark then "dark" else "light";
# Prefer mkIf for config blocks
Score
Total Score
65/100
Based on repository quality metrics
✓SKILL.md
SKILL.mdファイルが含まれている
+20
○LICENSE
ライセンスが設定されている
0/10
○説明文
100文字以上の説明がある
0/10
✓人気
GitHub Stars 100以上
+5
✓最近の活動
1ヶ月以内に更新
+10
✓フォーク
10回以上フォークされている
+5
✓Issue管理
オープンIssueが50未満
+5
✓言語
プログラミング言語が設定されている
+5
✓タグ
1つ以上のタグが設定されている
+5
Reviews
💬
Reviews coming soon
