diff --git a/modules/top-level/output.nix b/modules/top-level/output.nix index d49c585485..8dc276348a 100644 --- a/modules/top-level/output.nix +++ b/modules/top-level/output.nix @@ -29,6 +29,14 @@ in ''; }; + vimdiffAlias = mkOption { + type = types.bool; + default = false; + description = '' + Create a `vimdiff` alias that runs `nvim -d`. + ''; + }; + waylandSupport = mkOption { type = types.bool; default = lib.meta.availableOn pkgs.stdenv.hostPlatform pkgs.wayland; @@ -175,6 +183,15 @@ in visible = false; }; + vimdiffPackage = mkOption { + type = types.package; + description = '' + A wrapper script that runs `nvim -d` as `vimdiff`. + ''; + readOnly = true; + visible = false; + }; + manDocsPackage = mkOption { type = types.package; defaultText = lib.literalMD "`packages..man-docs` from Nixvim's flake"; @@ -318,6 +335,9 @@ in ] ++ lib.optionals config.enablePrintInit [ printInitPackage + ] + ++ lib.optionals config.vimdiffAlias [ + vimdiffPackage ]; meta.mainProgram = "nvim"; passthru = { @@ -336,6 +356,10 @@ in ''; }; + vimdiffPackage = pkgs.writeShellScriptBin "vimdiff" '' + exec "${config.build.nvimPackage}/bin/nvim" -d "$@" + ''; + manDocsPackage = config.flake.packages.${system}.man-docs; }; diff --git a/tests/test-sources/modules/output.nix b/tests/test-sources/modules/output.nix index 41167c01f9..d4a2b27fe2 100644 --- a/tests/test-sources/modules/output.nix +++ b/tests/test-sources/modules/output.nix @@ -161,4 +161,50 @@ end ''; }; + + vimdiffAlias-enabled = + { + config, + pkgs, + ... + }: + { + vimdiffAlias = true; + + test.extraInputs = [ + (pkgs.runCommandLocal "vimdiff-enabled-integration-test" { } '' + # Verify vimdiff exists and is executable in final package + if [ ! -x "${config.build.package}/bin/vimdiff" ]; then + echo "vimdiff binary should exist and be executable in final package" >&2 + exit 1 + fi + + # Verify proper invocation pattern (nvim followed by -d) + if ! grep -qE 'nvim.*-d' "${config.build.package}/bin/vimdiff"; then + echo "vimdiff should invoke nvim with -d flag" >&2 + exit 1 + fi + + touch $out + '') + ]; + }; + + vimdiffAlias-disabled = + { config, pkgs, ... }: + { + vimdiffAlias = false; + + test.extraInputs = [ + (pkgs.runCommandLocal "vimdiff-disabled-integration-test" { } '' + # Verify vimdiff does NOT exist in final package + if [ -e "${config.build.package}/bin/vimdiff" ]; then + echo "vimdiff binary should NOT exist when vimdiffAlias is disabled" >&2 + exit 1 + fi + + touch $out + '') + ]; + }; } diff --git a/wrappers/hm.nix b/wrappers/hm.nix index 4a6a9b3716..3c034c6d78 100644 --- a/wrappers/hm.nix +++ b/wrappers/hm.nix @@ -42,11 +42,5 @@ in EDITOR = "nvim"; VISUAL = "nvim"; }; - - programs = mkIf cfg.vimdiffAlias { - bash.shellAliases.vimdiff = "nvim -d"; - fish.shellAliases.vimdiff = "nvim -d"; - zsh.shellAliases.vimdiff = "nvim -d"; - }; }; } diff --git a/wrappers/modules/hm.nix b/wrappers/modules/hm.nix index d5b2a4c478..9c4c3f53b5 100644 --- a/wrappers/modules/hm.nix +++ b/wrappers/modules/hm.nix @@ -2,14 +2,6 @@ { options = { defaultEditor = lib.mkEnableOption "nixvim as the default editor"; - - vimdiffAlias = lib.mkOption { - type = lib.types.bool; - default = false; - description = '' - Alias `vimdiff` to `nvim -d`. - ''; - }; }; imports = [ ./shared.nix ];