Back to list
khaneliman

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

NeedUse
Conditional config blocklib.mkIf
Conditional list itemslib.optionals
Conditional stringlib.optionalString
Combine conditionalslib.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