From ba9dda073d5689c3312c85381e0cf59fb5b99581 Mon Sep 17 00:00:00 2001 From: atagen Date: Sun, 29 Mar 2026 00:50:09 +1100 Subject: [PATCH] special case nix3 flake completions --- flake.nix | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/flake.nix b/flake.nix index 4cd0571..7c63e3a 100644 --- a/flake.nix +++ b/flake.nix @@ -57,8 +57,34 @@ imports = [ ./nix/module.nix ]; programs.inshellah.package = self.packages.${pkgs.stdenv.hostPlatform.system}.default; programs.inshellah.snippet = '' - let inshellah_complete = {|spans| - inshellah complete ...$spans | from json + let inshellah_complete = { |spans| + let completions = inshellah complete ...$spans | from json + # special case nix completions, for `nix run nixpkgs#..` type input + let additional = if ($completions == null and + ($spans | length) > 0 and $spans.0 == "nix") { + $env.NIX_GET_COMPLETIONS = ($spans | length) - 1 + let nix_output = $spans | run-external $in | split row -r '\n' | str trim | skip 1 + let entries = $nix_output | + if (($in | length) < 6 and + ($spans | last) =~ "[a-zA-Z][a-zA-Z0-9_-]*#[a-zA-Z][a-zA-Z0-9_-]*") { + hide-env NIX_GET_COMPLETIONS + $env.NIX_ALLOW_UNFREE = 1 + $env.NIX_ALLOW_BROKEN = 1 + $in | par-each { |e| + try { + { value: $e, description: (^nix eval --impure $e --apply "f: f.meta.description" err> /dev/null) } + } catch {} finally { + { value: $e, description: "" } + } + } + } else { + $in | each { |e| { value: $e, description: "" } } + } + $entries + } else { + null + } + $completions | append $additional } $env.config.completions.external = { enable: true