about summary refs log tree commit diff
path: root/nixpkgs/pkgs/by-name/ni
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/by-name/ni')
-rw-r--r--nixpkgs/pkgs/by-name/ni/nickel/package.nix6
-rw-r--r--nixpkgs/pkgs/by-name/ni/nilaway/package.nix28
-rw-r--r--nixpkgs/pkgs/by-name/ni/nim-atlas/package.nix21
-rw-r--r--nixpkgs/pkgs/by-name/ni/nim_builder/nim_builder.nim179
-rw-r--r--nixpkgs/pkgs/by-name/ni/nim_builder/package.nix19
-rw-r--r--nixpkgs/pkgs/by-name/ni/nim_lk/lock.json29
-rw-r--r--nixpkgs/pkgs/by-name/ni/nim_lk/package.nix46
-rw-r--r--nixpkgs/pkgs/by-name/ni/nimble/package.nix31
-rw-r--r--nixpkgs/pkgs/by-name/ni/nimdow/lock.json52
-rw-r--r--nixpkgs/pkgs/by-name/ni/nimdow/package.nix40
-rw-r--r--nixpkgs/pkgs/by-name/ni/nimlsp/lock.json40
-rw-r--r--nixpkgs/pkgs/by-name/ni/nimlsp/package.nix46
-rw-r--r--nixpkgs/pkgs/by-name/ni/nimmm/lock.json40
-rw-r--r--nixpkgs/pkgs/by-name/ni/nimmm/package.nix25
-rw-r--r--nixpkgs/pkgs/by-name/ni/nitch/package.nix32
-rw-r--r--nixpkgs/pkgs/by-name/ni/nitter/lock.json194
-rw-r--r--nixpkgs/pkgs/by-name/ni/nitter/nitter-version.patch17
-rw-r--r--nixpkgs/pkgs/by-name/ni/nitter/package.nix53
-rwxr-xr-xnixpkgs/pkgs/by-name/ni/nitter/update.sh25
-rw-r--r--nixpkgs/pkgs/by-name/ni/nix-unit/package.nix57
20 files changed, 950 insertions, 30 deletions
diff --git a/nixpkgs/pkgs/by-name/ni/nickel/package.nix b/nixpkgs/pkgs/by-name/ni/nickel/package.nix
index e509f735995d..3d82fc275c85 100644
--- a/nixpkgs/pkgs/by-name/ni/nickel/package.nix
+++ b/nixpkgs/pkgs/by-name/ni/nickel/package.nix
@@ -1,6 +1,7 @@
 { lib
 , rustPlatform
 , fetchFromGitHub
+, stdenv
 , python3
 , nix-update-script
 }:
@@ -36,6 +37,11 @@ rustPlatform.buildRustPackage rec {
 
   cargoBuildFlags = [ "-p nickel-lang-cli" "-p nickel-lang-lsp" ];
 
+  env = lib.optionalAttrs stdenv.cc.isClang {
+    # Work around https://github.com/NixOS/nixpkgs/issues/166205.
+    NIX_LDFLAGS = "-l${stdenv.cc.libcxx.cxxabi.libName}";
+  };
+
   nativeBuildInputs = [
     python3
   ];
diff --git a/nixpkgs/pkgs/by-name/ni/nilaway/package.nix b/nixpkgs/pkgs/by-name/ni/nilaway/package.nix
new file mode 100644
index 000000000000..b0420867ead5
--- /dev/null
+++ b/nixpkgs/pkgs/by-name/ni/nilaway/package.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "nilaway";
+  version = "unstable-2023-11-17";
+
+  src = fetchFromGitHub {
+    owner = "uber-go";
+    repo = "nilaway";
+    rev = "a267567c6ffff900df0c3394d031ee70079ec8df";
+    hash = "sha256-Ro1nSTEZcE9u4Ol6CSLBTiPrh72Ly9UcrXyvffzPfow=";
+  };
+
+  vendorHash = "sha256-kbVjkWW5D8jp5QFYGiyRuGFArRsQukJIR8xwaUUIUBs=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Static Analysis tool to detect potential Nil panics in Go code";
+    homepage = "https://github.com/uber-go/nilaway";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ prit342 jk ];
+    mainProgram = "nilaway";
+  };
+}
diff --git a/nixpkgs/pkgs/by-name/ni/nim-atlas/package.nix b/nixpkgs/pkgs/by-name/ni/nim-atlas/package.nix
new file mode 100644
index 000000000000..70b36698a72b
--- /dev/null
+++ b/nixpkgs/pkgs/by-name/ni/nim-atlas/package.nix
@@ -0,0 +1,21 @@
+{ lib, buildNimPackage, fetchFromGitHub, openssl }:
+
+buildNimPackage (final: prev: {
+  pname = "atlas";
+  version = "unstable-2023-09-22";
+  src = fetchFromGitHub {
+    owner = "nim-lang";
+    repo = "atlas";
+    rev = "ab22f997c22a644924c1a9b920f8ce207da9b77f";
+    hash = "sha256-TsZ8TriVuKEY9/mV6KR89eFOgYrgTqXmyv/vKu362GU=";
+  };
+  buildInputs = [ openssl ];
+  prePatch = ''
+    rm config.nims
+  ''; # never trust a .nims file
+  doCheck = false; # tests will clone repos
+  meta = final.src.meta // {
+    description = "Nim package cloner";
+    license = [ lib.licenses.mit ];
+  };
+})
diff --git a/nixpkgs/pkgs/by-name/ni/nim_builder/nim_builder.nim b/nixpkgs/pkgs/by-name/ni/nim_builder/nim_builder.nim
new file mode 100644
index 000000000000..ec1d3ccb45b9
--- /dev/null
+++ b/nixpkgs/pkgs/by-name/ni/nim_builder/nim_builder.nim
@@ -0,0 +1,179 @@
+# SPDX-FileCopyrightText: 2021 Nixpkgs/NixOS contributors
+## Custom Nim builder for Nixpkgs.
+
+import std/[os, osproc, parseutils, sequtils, streams, strutils]
+
+proc findNimbleFile(): string =
+  ## Copied from Nimble.
+  ## Copyright (c) 2015, Dominik Picheta
+  ## BSD3
+  let dir = getCurrentDir()
+  result = ""
+  var hits = 0
+  for kind, path in walkDir(dir):
+    if kind in {pcFile, pcLinkToFile}:
+      let ext = path.splitFile.ext
+      if ext == ".nimble":
+        result = path
+        inc hits
+  if hits >= 2:
+    quit("Only one .nimble file should be present in " & dir)
+  elif hits == 0:
+    quit("Could not find a file with a .nimble extension in " & dir)
+
+proc getEnvBool(key: string; default = false): bool =
+  ## Parse a boolean environmental variable.
+  let val = getEnv(key)
+  if val == "": default
+  else: parseBool(val)
+
+proc getNimbleFilePath(): string =
+  ## Get the Nimble file for the current package.
+  if existsEnv"nimbleFile":
+    getEnv"nimbleFile"
+  else:
+    findNimbleFile()
+
+proc getNimbleValue(filePath, key: string; default = ""): string =
+  ## Extract a string value from the Nimble file at ``filePath``.
+  var
+    fs = newFileStream(filePath, fmRead)
+    line: string
+  if fs.isNil:
+    quit("could not open " & filePath)
+  while fs.readline(line):
+    if line.startsWith(key):
+      var i = key.len
+      i.inc skipWhile(line, Whitespace, i)
+      if line[i] == '=':
+        inc i
+        i.inc skipWhile(line, Whitespace, i)
+        discard parseUntil(line, result, Newlines, i)
+        if result.len > 0 and result[0] == '"':
+          result = result.unescape
+        return
+  default
+
+proc getNimbleValues(filePath, key: string): seq[string] =
+  ## Extract a string sequence from the Nimble file at ``filePath``.
+  var gunk = getNimbleValue(filePath, key)
+  result = gunk.strip(chars = {'@', '[', ']'}).split(',')
+  if result == @[""]: reset result
+  apply(result) do (s: var string):
+    s = s.strip()
+    if s.len > 0 and s[0] == '"':
+      s = s.unescape()
+
+proc getOutputDir(name: string): string =
+  ## Return the output directory for output `name`.
+  ## If `name` is not a valid output then the first output
+  ## is returned as a default.
+  let outputs = splitWhitespace getEnv("outputs")
+  doAssert(outputs.len > 0)
+  if outputs.contains name:
+    result = getEnv(name)
+  if result == "":
+    result = getEnv("out")
+  if result == "":
+    result = getEnv(outputs[0], "/dev/null")
+
+proc configurePhase*() =
+  ## Generate "config.nims" which will be read by the Nim
+  ## compiler during later phases.
+  const configFilePath = "config.nims"
+  echo "generating ", configFilePath
+  let
+    nf = getNimbleFilePath()
+    mode =
+      if fileExists configFilePath: fmAppend
+      else: fmWrite
+  var cfg = newFileStream(configFilePath, mode)
+  proc switch(key, val: string) =
+    cfg.writeLine("switch(", key.escape, ",", val.escape, ")")
+  switch("backend", nf.getNimbleValue("backend", "c"))
+  switch("nimcache", getEnv("NIX_BUILD_TOP", ".") / "nimcache")
+  if getEnvBool("nimRelease", true):
+    switch("define", "release")
+  for def in getEnv("nimDefines").split:
+    if def != "":
+      switch("define", def)
+  for input in getEnv("NIX_NIM_BUILD_INPUTS").split:
+    if input != "":
+      for nimbleFile in walkFiles(input / "*.nimble"):
+        let inputSrc = normalizedPath(
+            input / nimbleFile.getNimbleValue("srcDir", "."))
+        echo "found nimble input ", inputSrc
+        switch("path", inputSrc)
+  close(cfg)
+
+proc buildPhase*() =
+  ## Build the programs listed in the Nimble file and
+  ## optionally some documentation.
+  var cmds: seq[string]
+  proc before(idx: int) =
+    echo "build job ", idx, ": ", cmds[idx]
+  let
+    nf = getNimbleFilePath()
+    bins = nf.getNimbleValues("bin")
+    srcDir = nf.getNimbleValue("srcDir", ".")
+    binDir = getOutputDir("bin") / "bin"
+  if bins != @[]:
+    for bin in bins:
+      cmds.add("nim compile $# --parallelBuild:$# --outdir:$# $#" %
+          [getenv("nimFlags"), getenv("NIX_BUILD_CORES","1"), binDir, normalizedPath(srcDir / bin)])
+  if getEnvBool"nimDoc":
+    echo "generating documentation"
+    let docDir = getOutputDir("doc") / "doc"
+    for path in walkFiles(srcDir / "*.nim"):
+      cmds.add("nim doc --outdir:$# $#" % [docDir, path])
+  if cmds.len > 0:
+    let err = execProcesses(
+      cmds, n = 1,
+      beforeRunEvent = before)
+    if err != 0: quit("build phase failed", err)
+
+proc installPhase*() =
+  ## Install the Nim sources if ``nimCopySources`` is
+  ## set in the environment.
+  if getEnvBool"nimCopySources":
+    let
+      nf = getNimbleFilePath()
+      srcDir = nf.getNimbleValue("srcDir", ".")
+      devDir = getOutputDir "dev"
+    echo "Install ", srcDir, " to ", devDir
+    copyDir(normalizedPath(srcDir), normalizedPath(devDir / srcDir))
+    copyFile(nf, devDir / nf.extractFilename)
+
+proc checkPhase*() =
+  ## Build and run the tests in ``tests``.
+  var cmds: seq[string]
+  proc before(idx: int) =
+    echo "check job ", idx, ": ", cmds[idx]
+  for path in walkPattern("tests/t*.nim"):
+    cmds.add("nim r $# $#" % [getenv("nimFlags"), path])
+  let err = execProcesses(
+    cmds, n = 1,
+    beforeRunEvent = before)
+  if err != 0: quit("check phase failed", err)
+
+when isMainModule:
+  import std/parseopt
+  var phase: string
+
+  for kind, key, val in getopt():
+    case kind
+    of cmdLongOption:
+      case key.toLowerAscii
+      of "phase":
+        if phase != "": quit("only a single phase may be specified")
+        phase = val
+      else: quit("unhandled argument " & key)
+    of cmdEnd: discard
+    else: quit("unhandled argument " & key)
+
+  case phase
+  of "configure": configurePhase()
+  of "build": buildPhase()
+  of "install": installPhase()
+  of "check": checkPhase()
+  else: quit("unhandled phase " & phase)
diff --git a/nixpkgs/pkgs/by-name/ni/nim_builder/package.nix b/nixpkgs/pkgs/by-name/ni/nim_builder/package.nix
new file mode 100644
index 000000000000..34da4dfa61a0
--- /dev/null
+++ b/nixpkgs/pkgs/by-name/ni/nim_builder/package.nix
@@ -0,0 +1,19 @@
+{ lib, stdenv, nim }:
+
+stdenv.mkDerivation {
+  pname = "nim_builder";
+  inherit (nim) version;
+  dontUnpack = true;
+  nativeBuildInputs = [ nim ];
+  buildPhase = ''
+    cp ${./nim_builder.nim} nim_builder.nim
+    nim c --nimcache:$TMPDIR nim_builder
+  '';
+  installPhase = ''
+    install -Dt $out/bin nim_builder
+  '';
+  meta = {
+    description = "Internal Nixpkgs utility for buildNimPackage.";
+    maintainers = [ lib.maintainers.ehmry ];
+  };
+}
diff --git a/nixpkgs/pkgs/by-name/ni/nim_lk/lock.json b/nixpkgs/pkgs/by-name/ni/nim_lk/lock.json
index 38a4f8c8e3e8..90929f01a04b 100644
--- a/nixpkgs/pkgs/by-name/ni/nim_lk/lock.json
+++ b/nixpkgs/pkgs/by-name/ni/nim_lk/lock.json
@@ -1 +1,28 @@
-{"depends":[{"method":"fetchzip","packages":["npeg"],"path":"/nix/store/ffkxmjmigfs7zhhiiqm0iw2c34smyciy-source","ref":"1.2.1","rev":"26d62fdc40feb84c6533956dc11d5ee9ea9b6c09","sha256":"0xpzifjkfp49w76qmaylan8q181bs45anmp46l4bwr3lkrr7bpwh","srcDir":"src","url":"https://github.com/zevv/npeg/archive/26d62fdc40feb84c6533956dc11d5ee9ea9b6c09.tar.gz"},{"method":"fetchzip","packages":["preserves"],"path":"/nix/store/nrcpzf9hx70kry3gwhrdzcs3qicjncjh-source","ref":"20231021","rev":"edece399be70818208bf2263c30cb2bcf435bbff","sha256":"0xmw35wmw3a4lja9q4qvlvpxv3xk0hnkjg4fwfw6f3inh6zfiqki","srcDir":"src","url":"https://git.syndicate-lang.org/ehmry/preserves-nim/archive/edece399be70818208bf2263c30cb2bcf435bbff.tar.gz"}]}
+{
+  "depends": [
+    {
+      "method": "fetchzip",
+      "packages": [
+        "npeg"
+      ],
+      "path": "/nix/store/ffkxmjmigfs7zhhiiqm0iw2c34smyciy-source",
+      "ref": "1.2.1",
+      "rev": "26d62fdc40feb84c6533956dc11d5ee9ea9b6c09",
+      "sha256": "0xpzifjkfp49w76qmaylan8q181bs45anmp46l4bwr3lkrr7bpwh",
+      "srcDir": "src",
+      "url": "https://github.com/zevv/npeg/archive/26d62fdc40feb84c6533956dc11d5ee9ea9b6c09.tar.gz"
+    },
+    {
+      "method": "fetchzip",
+      "packages": [
+        "preserves"
+      ],
+      "path": "/nix/store/nrcpzf9hx70kry3gwhrdzcs3qicjncjh-source",
+      "ref": "20231021",
+      "rev": "edece399be70818208bf2263c30cb2bcf435bbff",
+      "sha256": "0xmw35wmw3a4lja9q4qvlvpxv3xk0hnkjg4fwfw6f3inh6zfiqki",
+      "srcDir": "src",
+      "url": "https://git.syndicate-lang.org/ehmry/preserves-nim/archive/edece399be70818208bf2263c30cb2bcf435bbff.tar.gz"
+    }
+  ]
+}
diff --git a/nixpkgs/pkgs/by-name/ni/nim_lk/package.nix b/nixpkgs/pkgs/by-name/ni/nim_lk/package.nix
index 833860b357fe..597a4d3c89df 100644
--- a/nixpkgs/pkgs/by-name/ni/nim_lk/package.nix
+++ b/nixpkgs/pkgs/by-name/ni/nim_lk/package.nix
@@ -1,9 +1,16 @@
-{ lib, buildPackages, nim2Packages, fetchFromSourcehut, openssl }:
+{ lib
+, buildNimPackage
+, fetchFromSourcehut
+, nim
+, nix-prefetch
+, nix-prefetch-git
+, openssl
+, makeWrapper
+}:
 
-nim2Packages.buildNimPackage (finalAttrs: {
+buildNimPackage (finalAttrs: {
   pname = "nim_lk";
   version = "20231031";
-  nimBinOnly = true;
 
   src = fetchFromSourcehut {
     owner = "~ehmry";
@@ -13,8 +20,14 @@ nim2Packages.buildNimPackage (finalAttrs: {
   };
 
   buildInputs = [ openssl ];
+  nativeBuildInputs = [ makeWrapper ];
 
-  nimFlags = finalAttrs.passthru.nimFlagsFromLockFile ./lock.json;
+  lockFile = ./lock.json;
+
+  postFixup = ''
+    wrapProgram $out/bin/nim_lk \
+      --suffix PATH : ${lib.makeBinPath [ nim nix-prefetch nix-prefetch-git ]}
+  '';
 
   meta = finalAttrs.src.meta // {
     description = "Generate Nix specific lock files for Nim packages";
@@ -24,29 +37,4 @@ nim2Packages.buildNimPackage (finalAttrs: {
     platforms = lib.platforms.unix;
     maintainers = with lib.maintainers; [ ehmry ];
   };
-
-  passthru.nimFlagsFromLockFile = let
-    fetchDependency = let
-      methods = {
-        fetchzip = { url, sha256, ... }:
-          buildPackages.fetchzip {
-            name = "source";
-            inherit url sha256;
-          };
-        git = { fetchSubmodules, leaveDotGit, rev, sha256, url, ... }:
-          buildPackages.fetchgit {
-            inherit fetchSubmodules leaveDotGit rev sha256 url;
-          };
-      };
-    in attrs@{ method, ... }: methods.${method} attrs // attrs;
-  in lockFile:
-  with builtins;
-  lib.pipe lockFile [
-    readFile
-    fromJSON
-    (getAttr "depends")
-    (map fetchDependency)
-    (map ({ outPath, srcDir, ... }: ''--path:"${outPath}/${srcDir}"''))
-  ];
-
 })
diff --git a/nixpkgs/pkgs/by-name/ni/nimble/package.nix b/nixpkgs/pkgs/by-name/ni/nimble/package.nix
new file mode 100644
index 000000000000..4e7457a88182
--- /dev/null
+++ b/nixpkgs/pkgs/by-name/ni/nimble/package.nix
@@ -0,0 +1,31 @@
+{ lib, buildNimPackage, fetchFromGitHub, nim, makeWrapper }:
+
+buildNimPackage (final: prev: {
+  pname = "nimble";
+  version = "0.14.2";
+
+  requiredNimVersion = 1;
+
+  src = fetchFromGitHub {
+    owner = "nim-lang";
+    repo = "nimble";
+    rev = "v${final.version}";
+    hash = "sha256-8b5yKvEl7c7wA/8cpdaN2CSvawQJzuRce6mULj3z/mI=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  doCheck = false; # it works on their machine
+
+  postInstall = ''
+    wrapProgram $out/bin/nimble \
+      --suffix PATH : ${lib.makeBinPath [ nim ]}
+  '';
+
+  meta = {
+    description = "Package manager for the Nim programming language";
+    homepage = "https://github.com/nim-lang/nimble";
+    license = lib.licenses.bsd3;
+    mainProgram = "nimble";
+  };
+})
diff --git a/nixpkgs/pkgs/by-name/ni/nimdow/lock.json b/nixpkgs/pkgs/by-name/ni/nimdow/lock.json
new file mode 100644
index 000000000000..942e739e0863
--- /dev/null
+++ b/nixpkgs/pkgs/by-name/ni/nimdow/lock.json
@@ -0,0 +1,52 @@
+{
+  "depends": [
+    {
+      "method": "fetchzip",
+      "packages": [
+        "nimtest"
+      ],
+      "path": "/nix/store/5nnqszvrqdmk7pkh5v8kq1i4q056jcss-source",
+      "ref": "v0.1.2",
+      "rev": "17bd3a0f794106428b8592c69832bf48c97b23e2",
+      "sha256": "15bv4vdg55zlbl9drwcp5lqfhfwdgzqlrz5pnfjg321r26rh2q3b",
+      "srcDir": "src",
+      "url": "https://github.com/avahe-kellenberger/nimtest/archive/17bd3a0f794106428b8592c69832bf48c97b23e2.tar.gz"
+    },
+    {
+      "method": "fetchzip",
+      "packages": [
+        "parsetoml"
+      ],
+      "path": "/nix/store/nrgl7ks2x3svv6pkdxzr97d6jbd3zhlr-source",
+      "ref": "v0.7.1",
+      "rev": "6e5e16179fa2db60f2f37d8b1af4128aaa9c8aaf",
+      "sha256": "0lsgzbjlgd0h9859yn864y9h9h1v4f5jjk81yvfnlkc9zbwb5kfa",
+      "srcDir": "src",
+      "url": "https://github.com/NimParsers/parsetoml/archive/6e5e16179fa2db60f2f37d8b1af4128aaa9c8aaf.tar.gz"
+    },
+    {
+      "method": "fetchzip",
+      "packages": [
+        "safeseq"
+      ],
+      "path": "/nix/store/k04c398bln6yffvajfk8hci47d703cr1-source",
+      "ref": "v1.0.0",
+      "rev": "ee71e961a66db64387e1437ca550d0c8218b099c",
+      "sha256": "01vlih133p3fgfnbiy1i3cq8kipgkpkal0z6jxy975yvz96gcb15",
+      "srcDir": "src",
+      "url": "https://github.com/avahe-kellenberger/safeseq/archive/ee71e961a66db64387e1437ca550d0c8218b099c.tar.gz"
+    },
+    {
+      "method": "fetchzip",
+      "packages": [
+        "x11"
+      ],
+      "path": "/nix/store/8qaywzr8nzsiddjba77nhf75hzmxx0d9-source",
+      "ref": "1.2",
+      "rev": "29aca5e519ebf5d833f63a6a2769e62ec7bfb83a",
+      "sha256": "16npqgmi2qawjxaddj9ax15rfpdc7sqc37i2r5vg23lyr6znq4wc",
+      "srcDir": "",
+      "url": "https://github.com/nim-lang/x11/archive/29aca5e519ebf5d833f63a6a2769e62ec7bfb83a.tar.gz"
+    }
+  ]
+}
diff --git a/nixpkgs/pkgs/by-name/ni/nimdow/package.nix b/nixpkgs/pkgs/by-name/ni/nimdow/package.nix
new file mode 100644
index 000000000000..a77fb05298b7
--- /dev/null
+++ b/nixpkgs/pkgs/by-name/ni/nimdow/package.nix
@@ -0,0 +1,40 @@
+{ lib, buildNimPackage, fetchFromGitHub, testers }:
+
+buildNimPackage (finalAttrs: {
+  pname = "nimdow";
+
+  version = "0.7.37";
+
+  requiredNimVersion = 1;
+
+  src = fetchFromGitHub {
+    owner = "avahe-kellenberger";
+    repo = finalAttrs.pname;
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-930wDS0UW65QzpUHHOuM25oi/OhFmG0Q7N05ftu7XlI=";
+  };
+
+  lockFile = ./lock.json;
+
+  postInstall = ''
+    install -D config.default.toml $out/share/nimdow/config.default.toml
+    install -D nimdow.desktop $out/share/applications/nimdow.desktop
+  '';
+
+  postPatch = ''
+    substituteInPlace src/nimdowpkg/config/configloader.nim --replace "/usr/share/nimdow" "$out/share/nimdow"
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = finalAttrs.finalPackage;
+    version = "v${finalAttrs.version}";
+  };
+
+  meta = with lib;
+    finalAttrs.src.meta // {
+      description = "Nim based tiling window manager";
+      license = [ licenses.gpl2 ];
+      maintainers = [ maintainers.marcusramberg ];
+      mainProgram = "nimdow";
+    };
+})
diff --git a/nixpkgs/pkgs/by-name/ni/nimlsp/lock.json b/nixpkgs/pkgs/by-name/ni/nimlsp/lock.json
new file mode 100644
index 000000000000..ae1aea4af6dc
--- /dev/null
+++ b/nixpkgs/pkgs/by-name/ni/nimlsp/lock.json
@@ -0,0 +1,40 @@
+{
+  "depends": [
+    {
+      "method": "fetchzip",
+      "packages": [
+        "ast_pattern_matching"
+      ],
+      "path": "/nix/store/b4rlaqmh5cm1yk62w8ij05swgdc9n5xq-source",
+      "ref": "master",
+      "rev": "eb8b99d595517fd5d41ccc954edb896267f2db78",
+      "sha256": "13l1qracvcyykjkmgl6zla960yayj1ka6y983wxp6z8fpwb25wn0",
+      "srcDir": "src",
+      "url": "https://github.com/nim-lang/ast-pattern-matching/archive/eb8b99d595517fd5d41ccc954edb896267f2db78.tar.gz"
+    },
+    {
+      "method": "fetchzip",
+      "packages": [
+        "asynctools"
+      ],
+      "path": "/nix/store/7hkns6lb477pnpyzkj2cq8q10shbshwn-source",
+      "ref": "master",
+      "rev": "a1a17d06713727d97810cad291e29dd7c672738f",
+      "sha256": "160h0k26f7xd5fbblc2l29d19ndgixb3aand3j5adrdbkkqhlgz0",
+      "srcDir": "",
+      "url": "https://github.com/cheatfate/asynctools/archive/a1a17d06713727d97810cad291e29dd7c672738f.tar.gz"
+    },
+    {
+      "method": "fetchzip",
+      "packages": [
+        "jsonschema"
+      ],
+      "path": "/nix/store/f9yjcyrvkz9rk1871377hkzlv9rq1x3b-source",
+      "ref": "packedjson",
+      "rev": "40208614ea3758e05ea39ab090de258046f99cb3",
+      "sha256": "12rli1qsx3hsldbs08qphcajh3nbv7hbclsygjacmxxc8im1y5m0",
+      "srcDir": "src",
+      "url": "https://github.com/PMunch/jsonschema/archive/40208614ea3758e05ea39ab090de258046f99cb3.tar.gz"
+    }
+  ]
+}
diff --git a/nixpkgs/pkgs/by-name/ni/nimlsp/package.nix b/nixpkgs/pkgs/by-name/ni/nimlsp/package.nix
new file mode 100644
index 000000000000..589e08290d58
--- /dev/null
+++ b/nixpkgs/pkgs/by-name/ni/nimlsp/package.nix
@@ -0,0 +1,46 @@
+{ lib, buildNimPackage, fetchFromGitHub, srcOnly, nim-unwrapped-1 }:
+
+buildNimPackage (finalAttrs: {
+  pname = "nimlsp";
+  version = "0.4.4";
+
+  requiredNimVersion = 1;
+
+  src = fetchFromGitHub {
+    owner = "PMunch";
+    repo = "nimlsp";
+    rev = "v${finalAttrs.version}";
+    sha256 = "sha256-Z67iKlL+dnRbxdFt/n/fsUcb2wpZwzPpL/G29jfCaMY=";
+  };
+
+  lockFile = ./lock.json;
+
+  buildInputs =
+    let
+      # Needs this specific version to build.
+      jsonSchemaSrc = fetchFromGitHub {
+        owner = "PMunch";
+        repo = "jsonschema";
+        rev = "7b41c03e3e1a487d5a8f6b940ca8e764dc2cbabf";
+        sha256 = "1js64jqd854yjladxvnylij4rsz7212k31ks541pqrdzm6hpblbz";
+      };
+    in
+    [ jsonSchemaSrc ];
+
+  nimFlags = [
+    "--threads:on"
+    "-d:explicitSourcePath=${srcOnly nim-unwrapped-1}"
+    "-d:tempDir=/tmp"
+  ];
+
+  nimDefines = [ "nimcore" "nimsuggest" "debugCommunication" "debugLogging" ];
+
+  doCheck = false;
+
+  meta = {
+    description = "Language Server Protocol implementation for Nim";
+    homepage = "https://github.com/PMunch/nimlsp";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.marsam ];
+  };
+})
diff --git a/nixpkgs/pkgs/by-name/ni/nimmm/lock.json b/nixpkgs/pkgs/by-name/ni/nimmm/lock.json
new file mode 100644
index 000000000000..d55a02fefc61
--- /dev/null
+++ b/nixpkgs/pkgs/by-name/ni/nimmm/lock.json
@@ -0,0 +1,40 @@
+{
+  "depends": [
+    {
+      "method": "fetchzip",
+      "packages": [
+        "lscolors"
+      ],
+      "path": "/nix/store/h2rqjnvjg3xihh88f2hm72506vpklilz-source",
+      "ref": "v0.3.3",
+      "rev": "668b46c835944254a445b9cc6dfb887e38fa13f1",
+      "sha256": "0526hqh46lcfsvymb67ldsc8xbfn24vicn3b8wrqnh6mag8wynf4",
+      "srcDir": "src",
+      "url": "https://github.com/joachimschmidt557/nim-lscolors/archive/668b46c835944254a445b9cc6dfb887e38fa13f1.tar.gz"
+    },
+    {
+      "method": "fetchzip",
+      "packages": [
+        "nimbox"
+      ],
+      "path": "/nix/store/dyv48md5gaz0x61fxi2zc69h05a3jvfq-source",
+      "ref": "master",
+      "rev": "6a56e76c01481176f16ae29b7d7c526bd83f229b",
+      "sha256": "15x1sdfxa1xcqnr68705jfnlv83lm0xnp2z9iz3pgc4bz5vwn4x1",
+      "srcDir": "",
+      "url": "https://github.com/dom96/nimbox/archive/6a56e76c01481176f16ae29b7d7c526bd83f229b.tar.gz"
+    },
+    {
+      "method": "fetchzip",
+      "packages": [
+        "noise"
+      ],
+      "path": "/nix/store/cqn9s90ivzsx7mq5k8m19565247sdsg6-source",
+      "ref": "v0.1.8",
+      "rev": "3cb3250ddcdaa74809aad931c066e7ef6e4af36d",
+      "sha256": "0qmak5n5nrf8nb8szhlz8sf05gmbs0x648p4vcd7ca600kaxfgj0",
+      "srcDir": "",
+      "url": "https://github.com/jangko/nim-noise/archive/3cb3250ddcdaa74809aad931c066e7ef6e4af36d.tar.gz"
+    }
+  ]
+}
diff --git a/nixpkgs/pkgs/by-name/ni/nimmm/package.nix b/nixpkgs/pkgs/by-name/ni/nimmm/package.nix
new file mode 100644
index 000000000000..e085ed218609
--- /dev/null
+++ b/nixpkgs/pkgs/by-name/ni/nimmm/package.nix
@@ -0,0 +1,25 @@
+{ lib, buildNimPackage, fetchFromGitHub, termbox, pcre }:
+
+buildNimPackage (finalAttrs: {
+  pname = "nimmm";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "joachimschmidt557";
+    repo = "nimmm";
+    rev = "v${finalAttrs.version}";
+    sha256 = "168n61avphbxsxfq8qzcnlqx6wgvz5yrjvs14g25cg3k46hj4xqg";
+  };
+
+  lockFile = ./lock.json;
+
+  buildInputs = [ termbox pcre ];
+
+  meta = {
+    description = "Terminal file manager written in Nim";
+    homepage = "https://github.com/joachimschmidt557/nimmm";
+    license = lib.licenses.gpl3;
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.joachimschmidt557 ];
+  };
+})
diff --git a/nixpkgs/pkgs/by-name/ni/nitch/package.nix b/nixpkgs/pkgs/by-name/ni/nitch/package.nix
new file mode 100644
index 000000000000..772f259ba6fc
--- /dev/null
+++ b/nixpkgs/pkgs/by-name/ni/nitch/package.nix
@@ -0,0 +1,32 @@
+{ lib, buildNimPackage, fetchFromGitHub, fetchpatch }:
+
+buildNimPackage {
+  pname = "nitch";
+  version = "0.1.6";
+  src = fetchFromGitHub {
+    owner = "ssleert";
+    repo = "nitch";
+    rev = "42ad6899931dd5e0cec7b021c2b7e383fcc891f3";
+    hash = "sha256-QI7CbP0lvvjD+g29FR/YJjuZboZ+PoHynsNbpYC9SvE=";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/unxsh/nitch/commit/6831cf96144f58c4da298a0bc9b50d33056f6c08.patch";
+      sha256 = "sha256-uZUzUBLHBsssNqDxZ0NuTRMN9/gBxIlIiGgQkqCqEFc=";
+    })
+    (fetchpatch {
+      url = "https://github.com/ssleert/nitch/commit/ff10dea47dbc4d9736bd839b87869f53166cf395.patch";
+      hash = "sha256-n7JtI1Td0xMqhuScnMvxTkbY2I+l+FcUTz7aytxFasE=";
+    })
+  ];
+
+  meta = with lib; {
+    description = "Incredibly fast system fetch written in nim";
+    homepage = "https://github.com/unxsh/nitch";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ michaelBelsanti ];
+    mainProgram = "nitch";
+  };
+}
diff --git a/nixpkgs/pkgs/by-name/ni/nitter/lock.json b/nixpkgs/pkgs/by-name/ni/nitter/lock.json
new file mode 100644
index 000000000000..5e059f869af0
--- /dev/null
+++ b/nixpkgs/pkgs/by-name/ni/nitter/lock.json
@@ -0,0 +1,194 @@
+{
+  "depends": [
+    {
+      "method": "fetchzip",
+      "packages": [
+        "asynctools"
+      ],
+      "path": "/nix/store/ahig7j046p8mc01jgidvvvba0afccilr-source",
+      "rev": "pr_fix_compilation",
+      "sha256": "0lip4qzc49ffa9byx65n7pmsy020a589vhnly373xrfhk2zw9jmd",
+      "srcDir": "",
+      "url": "https://github.com/timotheecour/asynctools/archive/pr_fix_compilation.tar.gz"
+    },
+    {
+      "method": "fetchzip",
+      "packages": [
+        "dotenv"
+      ],
+      "path": "/nix/store/9hxi0hvds11agbmpaha8zp1bgzf7vypv-source",
+      "ref": "2.0.1",
+      "rev": "48315332fe79ffce87c81b9d0bec992ba19b6966",
+      "sha256": "08y8xvpiqk75v0hxhgbhxfbxz7l95vavh1lv8kxkid8rb9p92zr4",
+      "srcDir": "src",
+      "url": "https://github.com/euantorano/dotenv.nim/archive/48315332fe79ffce87c81b9d0bec992ba19b6966.tar.gz"
+    },
+    {
+      "method": "fetchzip",
+      "packages": [
+        "flatty"
+      ],
+      "path": "/nix/store/21380smf8kyxzc4zf0qjsjx0dp5lv5rj-source",
+      "rev": "e668085",
+      "sha256": "0886lk20rg1pq56jsz1jjd8vrdz46lgdaxvp97az06mcawhbabbz",
+      "srcDir": "src",
+      "url": "https://github.com/treeform/flatty/archive/e668085.tar.gz"
+    },
+    {
+      "method": "fetchzip",
+      "packages": [
+        "httpbeast"
+      ],
+      "path": "/nix/store/hx85br48sjcridmda4l35cx7c9imxabg-source",
+      "ref": "v0.4.1",
+      "rev": "abc13d11c210b614960fe8760e581d44cfb2e3e9",
+      "sha256": "1x12ypfj341gjg3rh7zjq1wns8rngfyky6gqgb92lyhlvs7h4xzj",
+      "srcDir": "src",
+      "url": "https://github.com/dom96/httpbeast/archive/abc13d11c210b614960fe8760e581d44cfb2e3e9.tar.gz"
+    },
+    {
+      "method": "fetchzip",
+      "packages": [
+        "jester"
+      ],
+      "path": "/nix/store/jz86cks97is931hwsq5wf35kjwfypp6x-source",
+      "rev": "baca3f",
+      "sha256": "0i8rxsbp5yd9dasis650vqppika43mzfsls4fc7cz8k5j8xpd6zc",
+      "srcDir": "",
+      "url": "https://github.com/dom96/jester/archive/baca3f.tar.gz"
+    },
+    {
+      "method": "fetchzip",
+      "packages": [
+        "jsony"
+      ],
+      "path": "/nix/store/bzcq8q439rdsqhhihikzv3rsx4l4ybdm-source",
+      "rev": "ea811be",
+      "sha256": "1720iqsxjhqmhw1zhhs7d2ncdz25r8fqadls1p1iry1wfikjlnba",
+      "srcDir": "src",
+      "url": "https://github.com/treeform/jsony/archive/ea811be.tar.gz"
+    },
+    {
+      "method": "fetchzip",
+      "packages": [
+        "karax"
+      ],
+      "path": "/nix/store/5vghbi3cfpf7zvbkn0mk9chrf0rsx4yf-source",
+      "rev": "5cf360c",
+      "sha256": "1fh0jcjlw0vfqmr5dmhk436g569qvcpml9f981x28wmvm1511z2c",
+      "srcDir": "",
+      "url": "https://github.com/karaxnim/karax/archive/5cf360c.tar.gz"
+    },
+    {
+      "method": "fetchzip",
+      "packages": [
+        "markdown"
+      ],
+      "path": "/nix/store/6jpq2dp02mhjl8pkxzs0a1sjvgyg5h1r-source",
+      "rev": "158efe3",
+      "sha256": "1701q0i8yd9rrjraf5fzgcvilwnwgw3wyzzfwpr2drmn3x9pd8fj",
+      "srcDir": "src",
+      "url": "https://github.com/soasme/nim-markdown/archive/158efe3.tar.gz"
+    },
+    {
+      "method": "fetchzip",
+      "packages": [
+        "nimcrypto"
+      ],
+      "path": "/nix/store/dnj20qh97ylf57nka9wbxs735wbw7yxv-source",
+      "rev": "4014ef9",
+      "sha256": "1kgqr2lqaffglc1fgbanwcvhkqcbbd20d5b6w4lf0nksfl9c357a",
+      "srcDir": "",
+      "url": "https://github.com/cheatfate/nimcrypto/archive/4014ef9.tar.gz"
+    },
+    {
+      "method": "fetchzip",
+      "packages": [
+        "packedjson"
+      ],
+      "path": "/nix/store/c6wn9azj0kyvl818a40hzqzis0im8gnb-source",
+      "rev": "9e6fbb6",
+      "sha256": "09yxshkfpacgl6x8f77snjcwz37r519vh7rrnqrnh5npvgk3h24j",
+      "srcDir": "",
+      "url": "https://github.com/Araq/packedjson/archive/9e6fbb6.tar.gz"
+    },
+    {
+      "method": "fetchzip",
+      "packages": [
+        "redis"
+      ],
+      "path": "/nix/store/x6l3kz5950fb3d0pr5hmldh0xqkqrl62-source",
+      "rev": "d0a0e6f",
+      "sha256": "166kzflb3wgwvqnv9flyynp8b35xby617lxmk0yas8i4m6vjl00f",
+      "srcDir": "src",
+      "url": "https://github.com/zedeus/redis/archive/d0a0e6f.tar.gz"
+    },
+    {
+      "method": "fetchzip",
+      "packages": [
+        "redis"
+      ],
+      "path": "/nix/store/x6l3kz5950fb3d0pr5hmldh0xqkqrl62-source",
+      "rev": "d0a0e6f",
+      "sha256": "166kzflb3wgwvqnv9flyynp8b35xby617lxmk0yas8i4m6vjl00f",
+      "srcDir": "src",
+      "url": "https://github.com/zedeus/redis/archive/d0a0e6f.tar.gz"
+    },
+    {
+      "method": "fetchzip",
+      "packages": [
+        "redpool"
+      ],
+      "path": "/nix/store/pkwc61k47vzvxfdhsckbyx52rrbav0gz-source",
+      "rev": "8b7c1db",
+      "sha256": "10xh5fhwnahnq1nf6j69vvnbi55kixa0ari630gr6cdx80arvbs6",
+      "srcDir": "src",
+      "url": "https://github.com/zedeus/redpool/archive/8b7c1db.tar.gz"
+    },
+    {
+      "method": "fetchzip",
+      "packages": [
+        "sass"
+      ],
+      "path": "/nix/store/2nk90ab1k14px5zi8jwa30x8b8sfnbnm-source",
+      "rev": "7dfdd03",
+      "sha256": "19d78787k97l5cis81800hxa9qjr0yzjshlzdp727gh6pn8kc8fj",
+      "srcDir": "src",
+      "url": "https://github.com/dom96/sass/archive/7dfdd03.tar.gz"
+    },
+    {
+      "method": "fetchzip",
+      "packages": [
+        "supersnappy"
+      ],
+      "path": "/nix/store/kibhdjpd3mvn9adsp67amj35a7zrnk6y-source",
+      "rev": "6c94198",
+      "sha256": "0gxy7ijm4d2i4dkb64wwq51gns0i2d3d3rrd9cra7fyiahaph4xi",
+      "srcDir": "src",
+      "url": "https://github.com/guzba/supersnappy/archive/6c94198.tar.gz"
+    },
+    {
+      "method": "fetchzip",
+      "packages": [
+        "ws"
+      ],
+      "path": "/nix/store/zd51j4dphs6h1hyhdbzdv840c8813ai8-source",
+      "ref": "0.5.0",
+      "rev": "9536bf99ddf5948db221ccb7bb3663aa238a8e21",
+      "sha256": "0j8z9jlvzb1h60v7rryvh2wx6vg99lra6i62whf3fknc53l641fz",
+      "srcDir": "src",
+      "url": "https://github.com/treeform/ws/archive/9536bf99ddf5948db221ccb7bb3663aa238a8e21.tar.gz"
+    },
+    {
+      "method": "fetchzip",
+      "packages": [
+        "zippy"
+      ],
+      "path": "/nix/store/lhkc989wrk27wwglrxs0ahhxp2c650y5-source",
+      "rev": "ca5989a",
+      "sha256": "0rk31ispck48ilvzs0lxpp7z6y238a7d7dh7lmlfwi5i7hx13la6",
+      "srcDir": "src",
+      "url": "https://github.com/guzba/zippy/archive/ca5989a.tar.gz"
+    }
+  ]
+}
diff --git a/nixpkgs/pkgs/by-name/ni/nitter/nitter-version.patch b/nixpkgs/pkgs/by-name/ni/nitter/nitter-version.patch
new file mode 100644
index 000000000000..94c78ad2d294
--- /dev/null
+++ b/nixpkgs/pkgs/by-name/ni/nitter/nitter-version.patch
@@ -0,0 +1,17 @@
+diff --git a/src/views/about.nim b/src/views/about.nim
+index e7e8de9..54a6050 100644
+--- a/src/views/about.nim
++++ b/src/views/about.nim
+@@ -3,10 +3,8 @@ import os, strformat
+ import karax/[karaxdsl, vdom]
+ 
+ const
+-  date = staticExec("git show -s --format=\"%cd\" --date=format:\"%Y.%m.%d\"")
+-  hash = staticExec("git show -s --format=\"%h\"")
+-  link = "https://github.com/zedeus/nitter/commit/" & hash
+-  version = &"{date}-{hash}"
++  link = "@url@"
++  version = "@version@-@rev@"
+ 
+ var aboutHtml: string
+ 
diff --git a/nixpkgs/pkgs/by-name/ni/nitter/package.nix b/nixpkgs/pkgs/by-name/ni/nitter/package.nix
new file mode 100644
index 000000000000..6b63037e103d
--- /dev/null
+++ b/nixpkgs/pkgs/by-name/ni/nitter/package.nix
@@ -0,0 +1,53 @@
+{ lib
+, buildNimPackage
+, fetchFromGitHub
+, nixosTests
+, substituteAll
+, unstableGitUpdater
+}:
+
+buildNimPackage (finalAttrs: prevAttrs: {
+  pname = "nitter";
+  version = "unstable-2023-10-31";
+
+  src = fetchFromGitHub {
+    owner = "zedeus";
+    repo = "nitter";
+    rev = "b62d73dbd373f08af07c7a79efcd790d3bc1a49c";
+    hash = "sha256-yCD7FbqWZMY0fyFf9Q3Ka06nw5Ha7jYLpmPONAhEVIM=";
+  };
+
+  lockFile = ./lock.json;
+
+  patches = [
+    (substituteAll {
+      src = ./nitter-version.patch;
+      inherit (finalAttrs) version;
+      inherit (finalAttrs.src) rev;
+      url = builtins.replaceStrings [ "archive" ".tar.gz" ] [ "commit" "" ] finalAttrs.src.url;
+    })
+  ];
+
+  postBuild = ''
+    nim compile ${toString finalAttrs.nimFlags} -r tools/gencss
+    nim compile ${toString finalAttrs.nimFlags} -r tools/rendermd
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share/nitter
+    cp -r public $out/share/nitter/public
+  '';
+
+  passthru = {
+    tests = { inherit (nixosTests) nitter; };
+    updateScript = unstableGitUpdater {};
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/zedeus/nitter";
+    description = "Alternative Twitter front-end";
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ erdnaxe infinidoge ];
+    mainProgram = "nitter";
+  };
+})
diff --git a/nixpkgs/pkgs/by-name/ni/nitter/update.sh b/nixpkgs/pkgs/by-name/ni/nitter/update.sh
new file mode 100755
index 000000000000..30405f34b22e
--- /dev/null
+++ b/nixpkgs/pkgs/by-name/ni/nitter/update.sh
@@ -0,0 +1,25 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl jq nix nix-update patchutils
+set -euo pipefail
+
+info() {
+    if [ -t 2 ]; then
+        set -- '\033[32m%s\033[39m\n' "$@"
+    else
+        set -- '%s\n' "$@"
+    fi
+    printf "$@" >&2
+}
+
+nitter_old_rev=$(nix-instantiate --eval --strict --json -A nitter.src.rev . | jq -r .)
+nix-update --version=branch --commit nitter
+nitter_new_rev=$(nix-instantiate --eval --strict --json -A nitter.src.rev . | jq -r .)
+if [ "$nitter_new_rev" = "$nitter_old_rev" ]; then
+    info "nitter is up-to-date."
+    exit
+fi
+
+if curl -Sfs "https://github.com/zedeus/nitter/compare/$nitter_old_rev...$nitter_new_rev.patch" \
+| lsdiff | grep -Fxe 'a/nitter.nimble' -e 'b/nitter.nimble' > /dev/null; then
+    info "nitter.nimble changed, some dependencies probably need updating."
+fi
diff --git a/nixpkgs/pkgs/by-name/ni/nix-unit/package.nix b/nixpkgs/pkgs/by-name/ni/nix-unit/package.nix
new file mode 100644
index 000000000000..a9f1b7105c29
--- /dev/null
+++ b/nixpkgs/pkgs/by-name/ni/nix-unit/package.nix
@@ -0,0 +1,57 @@
+{ stdenv
+, lib
+, boost
+, clang-tools
+, cmake
+, difftastic
+, makeWrapper
+, meson
+, ninja
+, nixVersions
+, nlohmann_json
+, pkg-config
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "nix-unit";
+  version = "2.18.0";
+
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = "nix-unit";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-9wq14p+85oW4HlD42NJ0jyA++z3nEYjFQ6uT40xdfbc=";
+  };
+
+  buildInputs = [
+    nlohmann_json
+    # We pin the nix version to a known working one here as upgrades can likely break the build.
+    # Since the nix language is rather stable we don't always need to have the latest and greatest for unit tests
+    # On each update of nix unit we should re-evaluate what version we need.
+    nixVersions.nix_2_18
+    boost
+  ];
+
+  nativeBuildInputs = [
+    makeWrapper
+    meson
+    pkg-config
+    ninja
+    # nlohmann_json can be only discovered via cmake files
+    cmake
+  ] ++ lib.optional stdenv.cc.isClang [ clang-tools ];
+
+  postInstall = ''
+    wrapProgram "$out/bin/nix-unit" --prefix PATH : ${difftastic}/bin
+  '';
+
+  meta = {
+    description = "Nix unit test runner";
+    homepage = "https://github.com/nix-community/nix-unit";
+    license = lib.licenses.gpl3;
+    maintainers = with lib.maintainers; [ mic92 adisbladis ];
+    platforms = lib.platforms.unix;
+    mainProgram = "nix-unit";
+  };
+})