about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/nim-packages
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/nim-packages')
-rw-r--r--nixpkgs/pkgs/development/nim-packages/asciigraph/default.nix21
-rw-r--r--nixpkgs/pkgs/development/nim-packages/astpatternmatching/default.nix8
-rw-r--r--nixpkgs/pkgs/development/nim-packages/asynctools/default.nix20
-rw-r--r--nixpkgs/pkgs/development/nim-packages/base32/default.nix17
-rw-r--r--nixpkgs/pkgs/development/nim-packages/base45/default.nix18
-rw-r--r--nixpkgs/pkgs/development/nim-packages/build-nim-package/default.nix45
-rw-r--r--nixpkgs/pkgs/development/nim-packages/bumpy/default.nix23
-rw-r--r--nixpkgs/pkgs/development/nim-packages/c2nim/default.nix19
-rw-r--r--nixpkgs/pkgs/development/nim-packages/cbor/default.nix20
-rw-r--r--nixpkgs/pkgs/development/nim-packages/chroma/default.nix7
-rw-r--r--nixpkgs/pkgs/development/nim-packages/coap/default.nix20
-rw-r--r--nixpkgs/pkgs/development/nim-packages/docopt/default.nix8
-rw-r--r--nixpkgs/pkgs/development/nim-packages/eris/default.nix36
-rw-r--r--nixpkgs/pkgs/development/nim-packages/fetch-nimble/builder.sh13
-rw-r--r--nixpkgs/pkgs/development/nim-packages/fetch-nimble/default.nix20
-rw-r--r--nixpkgs/pkgs/development/nim-packages/flatty/default.nix21
-rw-r--r--nixpkgs/pkgs/development/nim-packages/freedesktop_org/default.nix30
-rw-r--r--nixpkgs/pkgs/development/nim-packages/frosty/default.nix8
-rw-r--r--nixpkgs/pkgs/development/nim-packages/getdns/default.nix24
-rw-r--r--nixpkgs/pkgs/development/nim-packages/hashlib/default.nix17
-rw-r--r--nixpkgs/pkgs/development/nim-packages/hts-nim/default.nix14
-rw-r--r--nixpkgs/pkgs/development/nim-packages/illwill/default.nix20
-rw-r--r--nixpkgs/pkgs/development/nim-packages/illwillwidgets/default.nix24
-rw-r--r--nixpkgs/pkgs/development/nim-packages/jester/default.nix8
-rw-r--r--nixpkgs/pkgs/development/nim-packages/jsonschema/default.nix22
-rw-r--r--nixpkgs/pkgs/development/nim-packages/jsony/default.nix21
-rw-r--r--nixpkgs/pkgs/development/nim-packages/karax/default.nix8
-rw-r--r--nixpkgs/pkgs/development/nim-packages/lscolors/default.nix8
-rw-r--r--nixpkgs/pkgs/development/nim-packages/markdown/default.nix8
-rw-r--r--nixpkgs/pkgs/development/nim-packages/nimSHA2/default.nix17
-rw-r--r--nixpkgs/pkgs/development/nim-packages/nim_builder/default.nix19
-rw-r--r--nixpkgs/pkgs/development/nim-packages/nim_builder/nim_builder.nim179
-rw-r--r--nixpkgs/pkgs/development/nim-packages/nimbox/default.nix8
-rw-r--r--nixpkgs/pkgs/development/nim-packages/nimcrypto/default.nix8
-rw-r--r--nixpkgs/pkgs/development/nim-packages/nimraylib-now/default.nix24
-rw-r--r--nixpkgs/pkgs/development/nim-packages/nimsimd/default.nix7
-rw-r--r--nixpkgs/pkgs/development/nim-packages/noise/default.nix18
-rw-r--r--nixpkgs/pkgs/development/nim-packages/npeg/default.nix17
-rw-r--r--nixpkgs/pkgs/development/nim-packages/packedjson/default.nix8
-rw-r--r--nixpkgs/pkgs/development/nim-packages/parsetoml/default.nix21
-rw-r--r--nixpkgs/pkgs/development/nim-packages/pixie/default.nix24
-rw-r--r--nixpkgs/pkgs/development/nim-packages/preserves/default.nix21
-rw-r--r--nixpkgs/pkgs/development/nim-packages/redis/default.nix8
-rw-r--r--nixpkgs/pkgs/development/nim-packages/redpool/default.nix8
-rw-r--r--nixpkgs/pkgs/development/nim-packages/regex/default.nix20
-rw-r--r--nixpkgs/pkgs/development/nim-packages/rocksdb/default.nix20
-rw-r--r--nixpkgs/pkgs/development/nim-packages/safeset/default.nix21
-rw-r--r--nixpkgs/pkgs/development/nim-packages/sass/default.nix13
-rw-r--r--nixpkgs/pkgs/development/nim-packages/sdl2/default.nix16
-rw-r--r--nixpkgs/pkgs/development/nim-packages/segmentation/default.nix19
-rw-r--r--nixpkgs/pkgs/development/nim-packages/snappy/default.nix20
-rw-r--r--nixpkgs/pkgs/development/nim-packages/spry/default.nix22
-rw-r--r--nixpkgs/pkgs/development/nim-packages/spry/nil.patch35
-rw-r--r--nixpkgs/pkgs/development/nim-packages/spry/python.patch43
-rw-r--r--nixpkgs/pkgs/development/nim-packages/spryvm/default.nix20
-rw-r--r--nixpkgs/pkgs/development/nim-packages/spryvm/nil.patch21
-rw-r--r--nixpkgs/pkgs/development/nim-packages/stew/default.nix20
-rw-r--r--nixpkgs/pkgs/development/nim-packages/supersnappy/default.nix8
-rw-r--r--nixpkgs/pkgs/development/nim-packages/syndicate/default.nix19
-rw-r--r--nixpkgs/pkgs/development/nim-packages/taps/default.nix19
-rw-r--r--nixpkgs/pkgs/development/nim-packages/tempfile/default.nix20
-rw-r--r--nixpkgs/pkgs/development/nim-packages/tkrzw/default.nix20
-rw-r--r--nixpkgs/pkgs/development/nim-packages/ui/default.nix23
-rw-r--r--nixpkgs/pkgs/development/nim-packages/unicodedb/default.nix18
-rw-r--r--nixpkgs/pkgs/development/nim-packages/unicodeplus/default.nix19
-rw-r--r--nixpkgs/pkgs/development/nim-packages/vmath/default.nix22
-rw-r--r--nixpkgs/pkgs/development/nim-packages/ws/default.nix21
-rw-r--r--nixpkgs/pkgs/development/nim-packages/x11/default.nix20
-rw-r--r--nixpkgs/pkgs/development/nim-packages/zippy/default.nix22
69 files changed, 1436 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/nim-packages/asciigraph/default.nix b/nixpkgs/pkgs/development/nim-packages/asciigraph/default.nix
new file mode 100644
index 000000000000..0d8b471102ee
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/asciigraph/default.nix
@@ -0,0 +1,21 @@
+{ lib, buildNimPackage, fetchFromGitHub }:
+
+buildNimPackage rec {
+  pname = "asciigraph";
+  version = "unstable-2021-03-02";
+
+  src = fetchFromGitHub {
+    owner = "Yardanico";
+    repo = "asciigraph";
+    rev = "9f51fc4e94d0960ab63fa6ea274518159720aa69";
+    hash = "sha256-JMBAW8hkE2wuXkRt4aHqFPoz1HX1J4SslvcaQXfpDNk";
+  };
+
+
+  meta = with lib;
+    src.meta // {
+      description = "Console ascii line graphs in pure Nim";
+      license = [ licenses.mit ];
+      maintainers = with maintainers; [ sikmir ];
+    };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/astpatternmatching/default.nix b/nixpkgs/pkgs/development/nim-packages/astpatternmatching/default.nix
new file mode 100644
index 000000000000..6f1137ac7045
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/astpatternmatching/default.nix
@@ -0,0 +1,8 @@
+{ fetchFromGitHub }:
+
+fetchFromGitHub {
+  owner = "krux02";
+  repo = "ast-pattern-matching";
+  rev = "87f7d163421af5a4f5e5cb6da7b93278e6897e96";
+  sha256 = "19mb5bb6riia8380p5dpc3q0vwgrj958dd6p7vw8vkvwiqrzg6zq";
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/asynctools/default.nix b/nixpkgs/pkgs/development/nim-packages/asynctools/default.nix
new file mode 100644
index 000000000000..54893d00a980
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/asynctools/default.nix
@@ -0,0 +1,20 @@
+{ lib, buildNimPackage, fetchFromGitHub, astpatternmatching }:
+
+buildNimPackage rec {
+  pname = "asynctools";
+  version = "unstable-2021-07-06";
+
+  src = fetchFromGitHub {
+    owner = "cheatfate";
+    repo = "asynctools";
+    rev = "84ced6d002789567f2396c75800ffd6dff2866f7";
+    hash = "sha256-mrO+WeSzCBclqC2UNCY+IIv7Gs8EdTDaTeSgXy3TgNM=";
+  };
+
+  meta = with lib; {
+    description = "Various asynchronous tools for Nim language";
+    homepage = "https://github.com/cheatfate/asynctools";
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/base32/default.nix b/nixpkgs/pkgs/development/nim-packages/base32/default.nix
new file mode 100644
index 000000000000..a6ae28b45b54
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/base32/default.nix
@@ -0,0 +1,17 @@
+{ lib, buildNimPackage, fetchFromGitHub }:
+
+buildNimPackage rec {
+  pname = "base32";
+  version = "0.1.3";
+  src = fetchFromGitHub {
+    owner = "OpenSystemsLab";
+    repo = "${pname}.nim";
+    rev = version;
+    hash = "sha256-BsDly13xsY2bu4N9LGHB0OGej/JhAx3B01TDdF0M8Jk=";
+  };
+  meta = src.meta // {
+    description = "Base32 library for Nim";
+    maintainers = with lib.maintainers; [ ehmry ];
+    license = lib.licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/base45/default.nix b/nixpkgs/pkgs/development/nim-packages/base45/default.nix
new file mode 100644
index 000000000000..349508445953
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/base45/default.nix
@@ -0,0 +1,18 @@
+{ lib, buildNimPackage, fetchFromSourcehut }:
+
+buildNimPackage rec {
+  pname = "base45";
+  version = "20230124";
+  src = fetchFromSourcehut {
+    owner = "~ehmry";
+    repo = pname;
+    rev = version;
+    hash = "sha256-9he+14yYVGt2s1IuRLPRsv23xnJzERkWRvIHr3PxFYk=";
+  };
+  meta = src.meta // {
+    description = "Base45 library for Nim";
+    license = lib.licenses.unlicense;
+    mainProgram = pname;
+    maintainers = with lib.maintainers; [ ehmry ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/build-nim-package/default.nix b/nixpkgs/pkgs/development/nim-packages/build-nim-package/default.nix
new file mode 100644
index 000000000000..6e20b78899f6
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/build-nim-package/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, nim, nim_builder }:
+pkgArgs:
+
+let
+  baseAttrs = {
+    strictDeps = true;
+    enableParallelBuilding = true;
+    doCheck = true;
+    configurePhase = ''
+      runHook preConfigure
+      export NIX_NIM_BUILD_INPUTS=''${pkgsHostTarget[@]} $NIX_NIM_BUILD_INPUTS
+      nim_builder --phase:configure
+      runHook postConfigure
+    '';
+    buildPhase = ''
+      runHook preBuild
+      nim_builder --phase:build
+      runHook postBuild
+    '';
+    checkPhase = ''
+      runHook preCheck
+      nim_builder --phase:check
+      runHook postCheck
+    '';
+    installPhase = ''
+      runHook preInstall
+      nim_builder --phase:install
+      runHook postInstall
+    '';
+    meta = { inherit (nim.meta) maintainers platforms; };
+  };
+
+  inputsOverride =
+    { depsBuildBuild ? [ ], nativeBuildInputs ? [ ], ... }: {
+      depsBuildBuild = [ nim_builder ] ++ depsBuildBuild;
+      nativeBuildInputs = [ nim ] ++ nativeBuildInputs;
+    };
+
+  composition = finalAttrs:
+    let
+      asFunc = x: if builtins.isFunction x then x else (_: x);
+      prev = baseAttrs // (asFunc ((asFunc pkgArgs) finalAttrs)) baseAttrs;
+    in prev // inputsOverride prev;
+
+in stdenv.mkDerivation composition
diff --git a/nixpkgs/pkgs/development/nim-packages/bumpy/default.nix b/nixpkgs/pkgs/development/nim-packages/bumpy/default.nix
new file mode 100644
index 000000000000..c816f0901777
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/bumpy/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildNimPackage, fetchFromGitHub, vmath }:
+
+buildNimPackage rec {
+  pname = "bumpy";
+  version = "1.0.3";
+
+  src = fetchFromGitHub {
+    owner = "treeform";
+    repo = pname;
+    rev = version;
+    hash = "sha256-mDmDlhOGoYYjKgF5j808oT2NqRlfcOdLSDE3WtdJFQ0=";
+  };
+
+  propagatedBuildInputs = [ vmath ];
+
+
+  meta = with lib;
+    src.meta // {
+      description = "2d collision library";
+      license = [ licenses.mit ];
+      maintainers = [ maintainers.ehmry ];
+    };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/c2nim/default.nix b/nixpkgs/pkgs/development/nim-packages/c2nim/default.nix
new file mode 100644
index 000000000000..c748883dbbc8
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/c2nim/default.nix
@@ -0,0 +1,19 @@
+{ lib, buildNimPackage, fetchFromGitHub, SDL2 }:
+
+buildNimPackage rec {
+  pname = "c2nim";
+  version = "0.9.19";
+  nimBinOnly = true;
+  src = fetchFromGitHub {
+    owner = "nim-lang";
+    repo = pname;
+    rev = version;
+    hash = "sha256-E8sAhTFIWAnlfWyuvqK8h8g7Puf5ejLEqgLNb5N17os=";
+  };
+  meta = with lib;
+    src.meta // {
+      description = "Tool to translate Ansi C code to Nim";
+      license = licenses.mit;
+      maintainers = [ maintainers.ehmry ];
+    };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/cbor/default.nix b/nixpkgs/pkgs/development/nim-packages/cbor/default.nix
new file mode 100644
index 000000000000..2949f4c1c853
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/cbor/default.nix
@@ -0,0 +1,20 @@
+{ lib, buildNimPackage, fetchFromSourcehut }:
+
+buildNimPackage rec {
+  pname = "cbor";
+  version = "20230619";
+  src = fetchFromSourcehut {
+    owner = "~ehmry";
+    repo = "nim_${pname}";
+    rev = version;
+    hash = "sha256-F6T/5bUwrJyhRarTWO9cjbf7UfEOXPNWu6mfVKNZsQA=";
+  };
+  meta = with lib;
+    src.meta // {
+      description =
+        "Concise Binary Object Representation decoder and encoder (RFC8949)";
+      license = licenses.unlicense;
+      maintainers = [ maintainers.ehmry ];
+      mainProgram = "cbordiag";
+    };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/chroma/default.nix b/nixpkgs/pkgs/development/nim-packages/chroma/default.nix
new file mode 100644
index 000000000000..266cd0645f36
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/chroma/default.nix
@@ -0,0 +1,7 @@
+{ fetchNimble }:
+
+fetchNimble {
+  pname = "chroma";
+  version = "0.2.5";
+  hash = "sha256-6lNHpO2aMorgkaPfo6kRcOs9r5R6T/kislVmkeoulw8=";
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/coap/default.nix b/nixpkgs/pkgs/development/nim-packages/coap/default.nix
new file mode 100644
index 000000000000..b7a35dcb1a96
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/coap/default.nix
@@ -0,0 +1,20 @@
+{ lib, buildNimPackage, fetchFromGitea, taps }:
+
+buildNimPackage rec {
+  pname = "coap";
+  version = "20230125";
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "eris";
+    repo = "${pname}-nim";
+    rev = version;
+    hash = "sha256-wlDyqRxXTrX+zXDIe2o9FTU2o26LO/6m7H/FGok1JDw=";
+  };
+  propagatedBuildInputs = [ taps ];
+  meta = src.meta // {
+    description =
+      "Nim implementation of the Constrained Application Protocol (CoAP) over TCP";
+    license = lib.licenses.agpl3Plus;
+    maintainers = with lib.maintainers; [ ehmry ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/docopt/default.nix b/nixpkgs/pkgs/development/nim-packages/docopt/default.nix
new file mode 100644
index 000000000000..38465384fbde
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/docopt/default.nix
@@ -0,0 +1,8 @@
+{ fetchFromGitHub }:
+
+fetchFromGitHub {
+  owner = "docopt";
+  repo = "docopt.nim";
+  rev = "v0.6.7";
+  sha256 = "1ga7ckg21fzwwvh26jp2phn2h3pvkn8g8sm13dxif33rp471bv37";
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/eris/default.nix b/nixpkgs/pkgs/development/nim-packages/eris/default.nix
new file mode 100644
index 000000000000..2d7b229ca1a1
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/eris/default.nix
@@ -0,0 +1,36 @@
+{ lib, buildNimPackage, fetchFromGitea, pkg-config, base32, coap, cbor
+, freedesktop_org, illwill, syndicate, tkrzw }:
+
+buildNimPackage (final: prev: {
+  pname = "eris";
+  version = "20230722";
+  outputs = [ "bin" "out" ];
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "eris";
+    repo = "nim-eris";
+    rev = final.version;
+    hash = "sha256-JVl2/PmFVYuD4s9hKoQwVDKUa3PBWK5SBDEmVHVSuig=";
+  };
+  propagatedNativeBuildInputs = [ pkg-config ];
+  propagatedBuildInputs =
+    [ base32 coap cbor freedesktop_org illwill tkrzw ];
+  postInstall = ''
+    mkdir -p "$bin/share/recoll/filters"
+    mv "$bin/bin/rclerislink" "$bin/share/recoll/filters/"
+
+    mkdir -p "$bin/share/applications"
+    substitute "eris-open.desktop" "$bin/share/applications/eris-open.desktop"\
+      --replace "Exec=eriscmd " "Exec=$bin/bin/eriscmd "
+
+    install -D "eris-link.xml" -t "$bin/share/mime/packages"
+    install -D "eris48.png" "$bin/share/icons/hicolor/48x48/apps/eris.png"
+  '';
+  meta = final.src.meta // {
+    homepage = "https://codeberg.org/eris/nim-eris";
+    license = lib.licenses.unlicense;
+    maintainers = with lib.maintainers; [ ehmry ];
+    mainProgram = "eriscmd";
+    badPlatforms = lib.platforms.darwin;
+  };
+})
diff --git a/nixpkgs/pkgs/development/nim-packages/fetch-nimble/builder.sh b/nixpkgs/pkgs/development/nim-packages/fetch-nimble/builder.sh
new file mode 100644
index 000000000000..bc2f9bfc94f1
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/fetch-nimble/builder.sh
@@ -0,0 +1,13 @@
+if [ -e .attrs.sh ]; then source .attrs.sh; fi
+source $stdenv/setup
+export HOME=$NIX_BUILD_TOP
+
+nimble --accept --noSSLCheck develop "${pkgname}@${version}"
+# TODO: bring in the certificates for Nimble to verify the fetch of
+# the package list.
+
+pkgdir=${NIX_BUILD_TOP}/${pkgname}
+
+find "$pkgdir" -name .git -print0 | xargs -0 rm -rf
+
+cp -a "$pkgdir" "$out"
diff --git a/nixpkgs/pkgs/development/nim-packages/fetch-nimble/default.nix b/nixpkgs/pkgs/development/nim-packages/fetch-nimble/default.nix
new file mode 100644
index 000000000000..ccdacc8e27b9
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/fetch-nimble/default.nix
@@ -0,0 +1,20 @@
+{ lib, makeOverridable, stdenv, gitMinimal, nim, cacert }:
+
+makeOverridable (
+
+  { pname, version, hash ? lib.fakeHash,
+
+  meta ? { }, passthru ? { }, preferLocalBuild ? true }:
+  stdenv.mkDerivation {
+    inherit version meta passthru preferLocalBuild;
+    pname = pname + "-src";
+    pkgname = pname;
+    builder = ./builder.sh;
+    nativeBuildInputs = [ gitMinimal nim ];
+    outputHash = hash;
+    outputHashAlgo = null;
+    outputHashMode = "recursive";
+    impureEnvVars = lib.fetchers.proxyImpureEnvVars
+      ++ [ "GIT_PROXY_COMMAND" "SOCKS_SERVER" ];
+    GIT_SSL_CAINFO = "${cacert}/etc/ssl/certs/ca-bundle.crt";
+  })
diff --git a/nixpkgs/pkgs/development/nim-packages/flatty/default.nix b/nixpkgs/pkgs/development/nim-packages/flatty/default.nix
new file mode 100644
index 000000000000..26a827830d1c
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/flatty/default.nix
@@ -0,0 +1,21 @@
+{ lib, buildNimPackage, fetchFromGitHub }:
+
+buildNimPackage rec {
+  pname = "flatty";
+  version = "0.3.4";
+
+  src = fetchFromGitHub {
+    owner = "treeform";
+    repo = pname;
+    rev = version;
+    hash = "sha256-ZmhjehmEJHm5qNlsGQvyYLajUdwhWt1+AtRppRrNtgA=";
+  };
+
+
+  meta = with lib;
+    src.meta // {
+      description = "Tools and serializer for plain flat binary files";
+      license = [ licenses.mit ];
+      maintainers = [ maintainers.ehmry ];
+    };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/freedesktop_org/default.nix b/nixpkgs/pkgs/development/nim-packages/freedesktop_org/default.nix
new file mode 100644
index 000000000000..52e672b3d697
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/freedesktop_org/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildNimPackage, fetchFromSourcehut, fetchFromGitHub }:
+
+let
+  # freedesktop_org requires a fork of configparser
+  configparser = buildNimPackage rec {
+    pname = "configparser";
+    version = "20230120";
+    src = fetchFromGitHub {
+      repo = "nim-" + pname;
+      owner = "ehmry";
+      rev = "695f1285d63f1954c25eb1f42798d90fa7bcbe14";
+      hash = "sha256-Z2Qr14pv2RHzQNfEYIKuXKHfHvvIfaEiGCHHCWJZFyw=";
+    };
+  };
+in buildNimPackage rec {
+  pname = "freedesktop_org";
+  version = "20230201";
+  src = fetchFromSourcehut {
+    owner = "~ehmry";
+    repo = pname;
+    rev = version;
+    hash = "sha256-gEN8kiWYCfC9H7o4UE8Xza5s7OwU3TFno6XnIlEm9Dg=";
+  };
+  propagatedBuildInputs = [ configparser ];
+  meta = src.meta // {
+    description = "Some Nim procedures for looking up freedesktop.org data";
+    license = lib.licenses.unlicense;
+    maintainers = with lib.maintainers; [ ehmry ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/frosty/default.nix b/nixpkgs/pkgs/development/nim-packages/frosty/default.nix
new file mode 100644
index 000000000000..6394c455d07f
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/frosty/default.nix
@@ -0,0 +1,8 @@
+{ fetchFromGitHub }:
+
+fetchFromGitHub {
+  owner = "disruptek";
+  repo = "frosty";
+  rev = "0.3.1";
+  sha256 = "0hd6484ihjgl57gmqyp5xfq5prycb49k0313fqky600mhz71nmyz";
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/getdns/default.nix b/nixpkgs/pkgs/development/nim-packages/getdns/default.nix
new file mode 100644
index 000000000000..7d85077d7e8a
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/getdns/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildNimPackage, fetchFromSourcehut, pkg-config, getdns }:
+
+buildNimPackage rec {
+  pname = "getdns";
+  version = "20221222";
+  src = fetchFromSourcehut {
+    owner = "~ehmry";
+    repo = pname + "-nim";
+    rev = version;
+    hash = "sha256-y7yzY1PcodIK2kC9409FuTpLn0TsWHGiEPnrULrob+k=";
+  };
+
+  propagatedNativeBuildInputs = [ pkg-config ];
+  propagatedBuildInputs = [ getdns ];
+
+  checkPhase = "nim c tests/test_example_synchronous";
+    # The test requires network but check if it builds.
+
+  meta = {
+    inherit (getdns.meta) homepage license platforms;
+    description = "Nim wrapper over the getdns library";
+    maintainers = with lib.maintainers; [ ehmry ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/hashlib/default.nix b/nixpkgs/pkgs/development/nim-packages/hashlib/default.nix
new file mode 100644
index 000000000000..67fff072c182
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/hashlib/default.nix
@@ -0,0 +1,17 @@
+{ lib, buildNimPackage, fetchFromGitHub }:
+
+buildNimPackage rec {
+  pname = "hashlib";
+  version = "1.0.1";
+  src = fetchFromGitHub {
+    owner = "khchen";
+    repo = pname;
+    rev = "84e0247555e4488594975900401baaf5bbbfb531";
+    hash = "sha256-nWNThelCh0LPVU7ryZgS/23hRRvJDVL2xWbQibb+zN0=";
+  };
+  meta = src.meta // {
+    description = "Hash Library for Nim";
+    maintainers = with lib.maintainers; [ ehmry ];
+    license = lib.licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/hts-nim/default.nix b/nixpkgs/pkgs/development/nim-packages/hts-nim/default.nix
new file mode 100644
index 000000000000..d536133ce9b0
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/hts-nim/default.nix
@@ -0,0 +1,14 @@
+{ buildNimPackage, fetchFromGitHub, htslib }:
+
+buildNimPackage rec {
+  pname = "hts-nim";
+  version = "0.3.4";
+  src = fetchFromGitHub {
+    owner = "brentp";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0670phk1bq3l9j2zaa8i5wcpc5dyfrc0l2a6c21g0l2mmdczffa7";
+  };
+  propagatedBuildInputs = [ htslib ];
+  doCheck = false;
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/illwill/default.nix b/nixpkgs/pkgs/development/nim-packages/illwill/default.nix
new file mode 100644
index 000000000000..aa5101766208
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/illwill/default.nix
@@ -0,0 +1,20 @@
+{ lib, buildNimPackage, fetchFromGitHub }:
+
+buildNimPackage rec {
+  pname = "illwill";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "johnnovak";
+    repo = "illwill";
+    rev = "v${version}";
+    hash = "sha256-4DHGVWzN/WTAyDRBBpXlcfKnYIcbFt42/iWInaBUwi4=";
+  };
+
+  meta = with lib;
+    src.meta // {
+      description = "A curses inspired simple cross-platform console library for Nim";
+      license = [ licenses.wtfpl ];
+      maintainers = with maintainers; [ sikmir ];
+    };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/illwillwidgets/default.nix b/nixpkgs/pkgs/development/nim-packages/illwillwidgets/default.nix
new file mode 100644
index 000000000000..f767216712ac
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/illwillwidgets/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildNimPackage, fetchFromGitHub, illwill }:
+
+buildNimPackage rec {
+  pname = "illwillwidgets";
+  version = "0.1.11";
+
+  src = fetchFromGitHub {
+    owner = "enthus1ast";
+    repo = "illwillWidgets";
+    rev = "04f507cfd651df430b1421403b3a70cb061c4624";
+    hash = "sha256-YVNdgs8jquJ58qbcyNMMJt+hJYcvahYpkSrDBbO4ILU=";
+  };
+
+  propagatedBuildInputs = [ illwill ];
+  doCheck = false;
+
+  meta = with lib;
+    src.meta // {
+      description = "Mouse enabled widgets for illwill";
+
+      license = [ licenses.mit ];
+      maintainers = with maintainers; [ marcusramberg ];
+    };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/jester/default.nix b/nixpkgs/pkgs/development/nim-packages/jester/default.nix
new file mode 100644
index 000000000000..21646f3667f0
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/jester/default.nix
@@ -0,0 +1,8 @@
+{ fetchFromGitHub }:
+
+fetchFromGitHub {
+  owner = "dom96";
+  repo = "jester";
+  rev = "v0.5.0";
+  sha256 = "0m8a4ss4460jd2lcbqcbdd68jhcy35xg7qdyr95mh8rflwvmcvhk";
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/jsonschema/default.nix b/nixpkgs/pkgs/development/nim-packages/jsonschema/default.nix
new file mode 100644
index 000000000000..e19af7fbb865
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/jsonschema/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildNimPackage, fetchFromGitHub, astpatternmatching }:
+
+buildNimPackage rec {
+  pname = "jsonschema";
+  version = "unstable-2019-09-12";
+
+  src = fetchFromGitHub {
+    owner = "PMunch";
+    repo = "jsonschema";
+    rev = "7b41c03e3e1a487d5a8f6b940ca8e764dc2cbabf";
+    sha256 = "1js64jqd854yjladxvnylij4rsz7212k31ks541pqrdzm6hpblbz";
+  };
+
+  propagatedBuildInputs = [ astpatternmatching ];
+
+  meta = with lib; {
+    homepage = "https://github.com/PMunch/jsonschema";
+    description = "Schema validation of JSON for Nim";
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/jsony/default.nix b/nixpkgs/pkgs/development/nim-packages/jsony/default.nix
new file mode 100644
index 000000000000..5f9c0f2741c2
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/jsony/default.nix
@@ -0,0 +1,21 @@
+{ lib, buildNimPackage, fetchFromGitHub }:
+
+buildNimPackage rec {
+  pname = "jsony";
+  version = "d0e69bddf83874e15b5c2f52f8b1386ac080b443";
+
+  src = fetchFromGitHub {
+    owner = "treeform";
+    repo = pname;
+    rev = version;
+    sha256 = "1p250wb97nzz2g0vvq6mn521fx7sn1jpk1ralbzqh5q8clh4g7wr";
+  };
+
+
+  meta = with lib;
+    src.meta // {
+      description = "A loose, direct to object json parser with hooks";
+      license = [ licenses.mit ];
+      maintainers = [ maintainers.erdnaxe ];
+    };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/karax/default.nix b/nixpkgs/pkgs/development/nim-packages/karax/default.nix
new file mode 100644
index 000000000000..695386826f50
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/karax/default.nix
@@ -0,0 +1,8 @@
+{ fetchFromGitHub }:
+
+fetchFromGitHub {
+  owner = "karaxnim";
+  repo = "karax";
+  rev = "5cf360c";
+  hash = "sha256-TPwQSqi7ciR6QMklWi/bOJnyzCAT1lZyxW4DTiWTALo=";
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/lscolors/default.nix b/nixpkgs/pkgs/development/nim-packages/lscolors/default.nix
new file mode 100644
index 000000000000..5a72c46e4c50
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/lscolors/default.nix
@@ -0,0 +1,8 @@
+{ fetchFromGitHub }:
+
+fetchFromGitHub {
+  owner = "joachimschmidt557";
+  repo = "nim-lscolors";
+  rev = "v0.3.3";
+  sha256 = "0526hqh46lcfsvymb67ldsc8xbfn24vicn3b8wrqnh6mag8wynf4";
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/markdown/default.nix b/nixpkgs/pkgs/development/nim-packages/markdown/default.nix
new file mode 100644
index 000000000000..9b9f0462c3f9
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/markdown/default.nix
@@ -0,0 +1,8 @@
+{ fetchFromGitHub }:
+
+fetchFromGitHub {
+  owner = "soasme";
+  repo = "nim-markdown";
+  rev = "a661c26";
+  hash = "sha256-/GkCSOmg2JxQhiDS8vgnKIoKvVgld/uIilUHslvwMnk=";
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/nimSHA2/default.nix b/nixpkgs/pkgs/development/nim-packages/nimSHA2/default.nix
new file mode 100644
index 000000000000..ca9f08c8d253
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/nimSHA2/default.nix
@@ -0,0 +1,17 @@
+{ lib, buildNimPackage, fetchFromGitHub }:
+
+buildNimPackage rec {
+  pname = "nimSHA2";
+  version = "unstable-2021-09-09";
+  src = fetchFromGitHub {
+    owner = "jangko";
+    repo = pname;
+    rev = "b8f666069dff1ed0c5142dd1ca692f0e71434716";
+    hash = "sha256-Wqb3mQ7638UOTze71mf6WMyGiw9qTwhbJiGGb+9OR2k=";
+  };
+  meta = src.meta // {
+    description = "Secure Hash Algorithm 2";
+    maintainers = with lib.maintainers; [ ehmry ];
+    license = lib.licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/nim_builder/default.nix b/nixpkgs/pkgs/development/nim-packages/nim_builder/default.nix
new file mode 100644
index 000000000000..34da4dfa61a0
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/nim_builder/default.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/development/nim-packages/nim_builder/nim_builder.nim b/nixpkgs/pkgs/development/nim-packages/nim_builder/nim_builder.nim
new file mode 100644
index 000000000000..8bb78555c269
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/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 ``nimBinOnly`` is not
+  ## set in the environment.
+  if not getEnvBool"nimBinOnly":
+    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 $#" % [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/development/nim-packages/nimbox/default.nix b/nixpkgs/pkgs/development/nim-packages/nimbox/default.nix
new file mode 100644
index 000000000000..53663c642810
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/nimbox/default.nix
@@ -0,0 +1,8 @@
+{ fetchFromGitHub }:
+
+fetchFromGitHub {
+  owner = "dom96";
+  repo = "nimbox";
+  rev = "6a56e76c01481176f16ae29b7d7c526bd83f229b";
+  sha256 = "15x1sdfxa1xcqnr68705jfnlv83lm0xnp2z9iz3pgc4bz5vwn4x1";
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/nimcrypto/default.nix b/nixpkgs/pkgs/development/nim-packages/nimcrypto/default.nix
new file mode 100644
index 000000000000..6c212ef45f1a
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/nimcrypto/default.nix
@@ -0,0 +1,8 @@
+{ fetchFromGitHub }:
+
+fetchFromGitHub {
+  owner = "cheatfate";
+  repo = "nimcrypto";
+  rev = "a5742a9a214ac33f91615f3862c7b099aec43b00";
+  sha256 = "0al0jsaicm8vyr63n909dq1glhvpra1n9sllmj0r7lsjsdb59wsz";
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/nimraylib-now/default.nix b/nixpkgs/pkgs/development/nim-packages/nimraylib-now/default.nix
new file mode 100644
index 000000000000..f2e0028a32e1
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/nimraylib-now/default.nix
@@ -0,0 +1,24 @@
+{ lib, nimPackages, fetchFromGitHub, raylib }:
+
+nimPackages.buildNimPackage rec {
+  pname = "nimraylib-now";
+  version = "0.15.0";
+
+  src = fetchFromGitHub {
+    owner = "greenfork";
+    repo = "nimraylib_now";
+    rev = "v${version}";
+    sha256 = "sha256-18YiAzJ46dpD5JN+gH0MWKchZ5YLPBNcm9eVFnyy2Sw=";
+  };
+
+  propagatedBuildInputs = [ raylib ];
+
+  doCheck = false; # no $DISPLAY available
+
+  meta = with lib; {
+    homepage = "https://github.com/greenfork/nimraylib_now";
+    description = "The Ultimate Raylib gaming library wrapper for Nim";
+    license = licenses.mit;
+    maintainers = with maintainers; [ annaaurora ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/nimsimd/default.nix b/nixpkgs/pkgs/development/nim-packages/nimsimd/default.nix
new file mode 100644
index 000000000000..9ccd96453572
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/nimsimd/default.nix
@@ -0,0 +1,7 @@
+{ fetchNimble }:
+
+fetchNimble {
+  pname = "nimsimd";
+  version = "1.0.0";
+  hash = "sha256-kp61fylAJ6MSN9hLYLi7CU2lxVR/lbrNCvZTe0LJLGo=";
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/noise/default.nix b/nixpkgs/pkgs/development/nim-packages/noise/default.nix
new file mode 100644
index 000000000000..d4b9bfdda5b6
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/noise/default.nix
@@ -0,0 +1,18 @@
+{ lib, buildNimPackage, fetchFromGitHub }:
+
+buildNimPackage (finalAttrs: {
+  pname = "noise";
+  version = "0.1.8";
+  src = fetchFromGitHub {
+    owner = "jangko";
+    repo = "nim-noise";
+    rev = "v${finalAttrs.version}";
+    sha256 = "sha256-QD7X1QTAKHYa2+QiYjrQq74CnEafwq/RsshlW2yZqmI=";
+  };
+  meta = finalAttrs.src.meta // {
+    description = "Nim implementation of linenoise";
+    homepage = "https://github.com/jangko/nim-noise";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ ehmry ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/nim-packages/npeg/default.nix b/nixpkgs/pkgs/development/nim-packages/npeg/default.nix
new file mode 100644
index 000000000000..c869ff60f6a5
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/npeg/default.nix
@@ -0,0 +1,17 @@
+{ lib, buildNimPackage, fetchFromGitHub }:
+
+buildNimPackage rec {
+  pname = "npeg";
+  version = "1.2.1";
+  src = fetchFromGitHub {
+    owner = "zevv";
+    repo = pname;
+    rev = version;
+    hash = "sha256-kN91cp50ZL4INeRWqwrRK6CAkVXUq4rN4YlcN6WL/3Y=";
+  };
+  meta = src.meta // {
+    description = "NPeg is a pure Nim pattern matching library";
+    maintainers = with lib.maintainers; [ ehmry ];
+    license = lib.licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/packedjson/default.nix b/nixpkgs/pkgs/development/nim-packages/packedjson/default.nix
new file mode 100644
index 000000000000..25579540c0b7
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/packedjson/default.nix
@@ -0,0 +1,8 @@
+{ fetchFromGitHub }:
+
+fetchFromGitHub {
+  owner = "Araq";
+  repo = "packedjson";
+  rev = "d11d167";
+  sha256 = "1302rn58277c3ic5sfq89c4mkn0d66bhilifh5xjf40x74ahir5x";
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/parsetoml/default.nix b/nixpkgs/pkgs/development/nim-packages/parsetoml/default.nix
new file mode 100644
index 000000000000..d6504f1d9c67
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/parsetoml/default.nix
@@ -0,0 +1,21 @@
+{ lib, buildNimPackage, fetchFromGitHub }:
+
+buildNimPackage rec {
+  pname = "parsetoml";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "NimParsers";
+    repo = "parsetoml";
+    rev = "v${version}";
+    hash = "sha256-jtqn59x2ZRRgrPir6u/frsDHnl4kvTJWpbejxti8aHY=";
+  };
+
+
+  meta = with lib;
+    src.meta // {
+      description = "A Nim library to parse TOML files";
+      license = [ licenses.mit ];
+      maintainers = with maintainers; [ sikmir ];
+    };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/pixie/default.nix b/nixpkgs/pkgs/development/nim-packages/pixie/default.nix
new file mode 100644
index 000000000000..37b018b6fa65
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/pixie/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildNimPackage, fetchFromGitHub, bumpy, chroma, flatty, nimsimd, vmath
+, zippy }:
+
+buildNimPackage rec {
+  pname = "pixie";
+  version = "3.1.2";
+
+  src = fetchFromGitHub {
+    owner = "treeform";
+    repo = pname;
+    rev = version;
+    hash = "sha256-rF72ybfsipBHgQmH0e6DBn1e7WWY6dGn9yp1qvLIS3A=";
+  };
+
+  propagatedBuildInputs = [ bumpy chroma flatty nimsimd vmath zippy ];
+
+
+  meta = with lib;
+    src.meta // {
+      description = "Full-featured 2d graphics library for Nim";
+      license = [ licenses.mit ];
+      maintainers = [ maintainers.ehmry ];
+    };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/preserves/default.nix b/nixpkgs/pkgs/development/nim-packages/preserves/default.nix
new file mode 100644
index 000000000000..d48f7830e71f
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/preserves/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, buildNimPackage, fetchFromGitea, nim-unwrapped, npeg }:
+
+buildNimPackage rec {
+  pname = "preserves";
+  version = "20230530";
+  src = fetchFromGitea {
+    domain = "git.syndicate-lang.org";
+    owner = "ehmry";
+    repo = "${pname}-nim";
+    rev = version;
+    hash = "sha256-IRIBGjv4po8VyL873v++ovqz8Vg6a9Qbh/M1fxpQXvY=";
+  };
+  propagatedBuildInputs = [ npeg ];
+  nimFlags = [ "--path:${nim-unwrapped}/nim" ];
+  doCheck = !stdenv.isDarwin;
+  meta = src.meta // {
+    description = "Nim implementation of the Preserves data language";
+    license = lib.licenses.unlicense;
+    maintainers = with lib.maintainers; [ ehmry ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/redis/default.nix b/nixpkgs/pkgs/development/nim-packages/redis/default.nix
new file mode 100644
index 000000000000..1cd7c68ecc94
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/redis/default.nix
@@ -0,0 +1,8 @@
+{ fetchFromGitHub }:
+
+fetchFromGitHub {
+  owner = "zedeus";
+  repo = "redis";
+  rev = "d0a0e6f";
+  sha256 = "166kzflb3wgwvqnv9flyynp8b35xby617lxmk0yas8i4m6vjl00f";
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/redpool/default.nix b/nixpkgs/pkgs/development/nim-packages/redpool/default.nix
new file mode 100644
index 000000000000..76b222739cae
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/redpool/default.nix
@@ -0,0 +1,8 @@
+{ fetchFromGitHub }:
+
+fetchFromGitHub {
+  owner = "zedeus";
+  repo = "redpool";
+  rev = "8b7c1db";
+  sha256 = "10xh5fhwnahnq1nf6j69vvnbi55kixa0ari630gr6cdx80arvbs6";
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/regex/default.nix b/nixpkgs/pkgs/development/nim-packages/regex/default.nix
new file mode 100644
index 000000000000..03e4315a2c80
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/regex/default.nix
@@ -0,0 +1,20 @@
+{ lib, buildNimPackage, fetchFromGitHub, unicodedb }:
+
+buildNimPackage (finalAttrs: {
+  pname = "regex";
+  version = "0.20.2";
+  src = fetchFromGitHub {
+    owner = "nitely";
+    repo = "nim-regex";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-VViDf0uD6bj9WOO827NRbLUt+PgBPEmz/A/DDRCrHpc=";
+  };
+  propagatedBuildInputs = [ unicodedb ];
+  doCheck = false;
+  meta = finalAttrs.src.meta // {
+    description = "Pure Nim regex engine";
+    homepage = "https://github.com/nitely/nim-regex";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ ehmry ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/nim-packages/rocksdb/default.nix b/nixpkgs/pkgs/development/nim-packages/rocksdb/default.nix
new file mode 100644
index 000000000000..1ad32a086a05
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/rocksdb/default.nix
@@ -0,0 +1,20 @@
+{ lib, buildNimPackage, fetchFromGitHub, rocksdb, stew, tempfile }:
+
+buildNimPackage rec {
+  pname = "rocksdb";
+  version = "0.2.0";
+  src = fetchFromGitHub {
+    owner = "status-im";
+    repo = "nim-${pname}";
+    rev = "5b1307cb1f4c85bb72ff781d810fb8c0148b1183";
+    hash = "sha256-gjMCB9kpWVi9Qv73/jhoAYw857OmQpry//bDQCtyJo0=";
+  };
+  buildInputs = [ stew tempfile ];
+  propagatedBuildInputs = [ rocksdb ];
+  doCheck = false;
+  meta = with lib;
+    src.meta // {
+      description = "Nim wrapper for RocksDB";
+      maintainers = [ maintainers.ehmry ];
+    };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/safeset/default.nix b/nixpkgs/pkgs/development/nim-packages/safeset/default.nix
new file mode 100644
index 000000000000..b92228421c75
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/safeset/default.nix
@@ -0,0 +1,21 @@
+{ lib, buildNimPackage, fetchFromGitHub }:
+buildNimPackage rec {
+  pname = "safeset";
+
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "avahe-kellenberger";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-ZLdStoNVoQhRkD2iEzKxhs1UPfgnbJM9QCDHdjH7vTU=";
+  };
+
+
+  meta = with lib;
+    src.meta // {
+      description = "safeset library for nim";
+      license = [ licenses.gpl2 ];
+      maintainers = [ maintainers.marcusramberg ];
+    };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/sass/default.nix b/nixpkgs/pkgs/development/nim-packages/sass/default.nix
new file mode 100644
index 000000000000..79885ed9ec5a
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/sass/default.nix
@@ -0,0 +1,13 @@
+{ buildNimPackage, fetchFromGitHub, libsass }:
+
+buildNimPackage rec {
+  pname = "sass";
+  version = "e683aa1";
+  src = fetchFromGitHub {
+    owner = "dom96";
+    repo = pname;
+    rev = version;
+    sha256 = "0qvly5rilsqqsyvr67pqhglm55ndc4nd6v90jwswbnigxiqf79lc";
+  };
+  propagatedBuildInputs = [ libsass ];
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/sdl2/default.nix b/nixpkgs/pkgs/development/nim-packages/sdl2/default.nix
new file mode 100644
index 000000000000..340cd2718ae2
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/sdl2/default.nix
@@ -0,0 +1,16 @@
+{ lib, buildNimPackage, fetchNimble, SDL2 }:
+
+buildNimPackage (finalAttrs: {
+  pname = "sdl2";
+  version = "2.0.4";
+  src = fetchNimble {
+    inherit (finalAttrs) pname version;
+    hash = "sha256-Vtcj8goI4zZPQs2TbFoBFlcR5UqDtOldaXSH/+/xULk=";
+  };
+  propagatedBuildInputs = [ SDL2 ];
+  meta = {
+    description = "Nim wrapper for SDL 2.x";
+    platforms = lib.platforms.linux; # Problems with Darwin.
+    license = [ lib.licenses.mit ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/nim-packages/segmentation/default.nix b/nixpkgs/pkgs/development/nim-packages/segmentation/default.nix
new file mode 100644
index 000000000000..4d1520d62ee8
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/segmentation/default.nix
@@ -0,0 +1,19 @@
+{ lib, buildNimPackage, fetchFromGitHub, unicodedb }:
+
+buildNimPackage (finalAttrs: {
+  pname = "segmentation";
+  version = "0.1.0";
+  src = fetchFromGitHub {
+    owner = "nitely";
+    repo = "nim-segmentation";
+    rev = "v${finalAttrs.version}";
+    sha256 = "007bkx8dwy8n340zbp6wyqfsq9bh6q5ykav1ywdlwykyp1n909bh";
+  };
+  propagatedBuildInputs = [ unicodedb ];
+  meta = finalAttrs.src.meta // {
+    description = "Unicode text segmentation (tr29)";
+    homepage = "https://github.com/nitely/nim-segmentation";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ ehmry ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/nim-packages/snappy/default.nix b/nixpkgs/pkgs/development/nim-packages/snappy/default.nix
new file mode 100644
index 000000000000..e3775b20631b
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/snappy/default.nix
@@ -0,0 +1,20 @@
+{ lib, buildNimPackage, fetchFromGitHub, snappy }:
+
+buildNimPackage rec {
+  pname = "snappy";
+  version = "0.1.0";
+  src = fetchFromGitHub {
+    owner = "jangko";
+    repo = pname;
+    rev = "d13e2ccb2acaa4e8dedce4f25e8dbf28e19278a6";
+    hash = "sha256-18CFRuDK+E701MHrCixx22QSVmglTc0EJwrMCsKwayM=";
+  };
+  propagatedBuildInputs = [ snappy ];
+  doCheck = false;
+  meta = with lib;
+    src.meta // {
+      description = "Nim implementation of snappy compression algorithm";
+      license = [ lib.licenses.mit ];
+      maintainers = [ maintainers.ehmry ];
+    };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/spry/default.nix b/nixpkgs/pkgs/development/nim-packages/spry/default.nix
new file mode 100644
index 000000000000..590832d11f33
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/spry/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildNimPackage, fetchFromGitHub, rocksdb, snappy, spryvm, stew
+, tempfile, ui }:
+
+buildNimPackage rec {
+  pname = "spry";
+  version = "0.9.0";
+  src = fetchFromGitHub {
+    owner = "gokr";
+    repo = pname;
+    rev = "098da7bb34a9113d5db5402fecfc76b1c3fa3b36";
+    hash = "sha256-PfWBrG2Z16tLgcN8JYpHaNMysBbbYX812Lkgk0ItMwE=";
+  };
+  buildInputs = [ rocksdb snappy spryvm stew tempfile ui ];
+  patches = [ ./nil.patch ./python.patch ];
+  meta = with lib;
+    src.meta // {
+      description =
+        "A Smalltalk and Rebol inspired language implemented as an AST interpreter in Nim";
+      license = [ licenses.mit ];
+      maintainers = [ maintainers.ehmry ];
+    };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/spry/nil.patch b/nixpkgs/pkgs/development/nim-packages/spry/nil.patch
new file mode 100644
index 000000000000..beea30357235
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/spry/nil.patch
@@ -0,0 +1,35 @@
+diff --git a/src/ispry.nim b/src/ispry.nim
+index 23ad6c3..dc38a9d 100644
+--- a/src/ispry.nim
++++ b/src/ispry.nim
+@@ -134,8 +134,8 @@ proc main() =
+       #discard spry.setBinding(newEvalWord("@"), result)
+       var output = $result
+       # Print any result
+-      if output.isNil:
+-        output = if suspended: "nil" else: ""
++      if output == "" and suspended:
++        output = "nil"
+       stdout.write(output & "\n")
+ #      except:
+  #       echo "Oops, sorry about that: " & getCurrentExceptionMsg() & "\n"
+diff --git a/src/spry.nim b/src/spry.nim
+index 670a280..d81bb4c 100644
+--- a/src/spry.nim
++++ b/src/spry.nim
+@@ -87,13 +87,13 @@ for kind, key, val in getopt():
+   of cmdEnd: assert(false) # cannot happen
+ 
+ if eval:
+-  if filename == nil:
++  if filename == "":
+     writeHelp()
+   else:
+     code = filename
+ else:
+   code =
+-    if filename == nil:
++    if filename == "":
+       # no filename has been given, so we use stdin
+       readAll stdin
+     else:
diff --git a/nixpkgs/pkgs/development/nim-packages/spry/python.patch b/nixpkgs/pkgs/development/nim-packages/spry/python.patch
new file mode 100644
index 000000000000..565e53c2ddcd
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/spry/python.patch
@@ -0,0 +1,43 @@
+diff --git a/src/ispry.nim b/src/ispry.nim
+index 23ad6c3..d2cfc89 100644
+--- a/src/ispry.nim
++++ b/src/ispry.nim
+@@ -21,7 +21,7 @@ import spryvm/sprycore, spryvm/sprylib, spryvm/spryextend, spryvm/sprymath,
+   spryvm/spryos, spryvm/spryio, spryvm/sprymemfile, spryvm/sprythread,
+   spryvm/spryoo, spryvm/sprydebug, spryvm/sprycompress, spryvm/sprystring,
+   spryvm/sprymodules, spryvm/spryreflect, spryvm/spryblock, spryvm/sprynet,
+-  spryvm/sprysmtp, spryvm/spryjson, spryvm/sprysqlite, spryvm/sprypython,
++  spryvm/sprysmtp, spryvm/spryjson, spryvm/sprysqlite,
+   spryvm/spryrocksdb
+ 
+ const Prompt = ">>> "
+@@ -63,7 +63,6 @@ proc main() =
+ 
+   spry.addMemfile()
+   spry.addThread()
+-  spry.addPython()
+   spry.addDebug()
+   spry.addCompress()
+   spry.addReflect()
+diff --git a/src/spry.nim b/src/spry.nim
+index 670a280..cda9027 100644
+--- a/src/spry.nim
++++ b/src/spry.nim
+@@ -14,8 +14,7 @@ import spryvm/sprycore, spryvm/sprylib, spryvm/spryextend, spryvm/sprymath,
+   spryvm/spryos, spryvm/spryio, spryvm/sprymemfile, spryvm/sprythread,
+   spryvm/spryoo, spryvm/sprydebug, spryvm/sprycompress, spryvm/sprystring,
+   spryvm/sprymodules, spryvm/spryreflect, spryvm/spryui, spryvm/spryblock, spryvm/sprynet,
+-  spryvm/sprysmtp, spryvm/spryjson, spryvm/sprysqlite, spryvm/spryrocksdb,
+-  spryvm/sprypython
++  spryvm/sprysmtp, spryvm/spryjson, spryvm/sprysqlite, spryvm/spryrocksdb
+ 
+ var spry = newInterpreter()
+ 
+@@ -34,7 +33,6 @@ spry.addOO()
+ 
+ spry.addMemfile()
+ spry.addThread()
+-spry.addPython()
+ spry.addDebug()
+ spry.addCompress()
+ spry.addReflect()
diff --git a/nixpkgs/pkgs/development/nim-packages/spryvm/default.nix b/nixpkgs/pkgs/development/nim-packages/spryvm/default.nix
new file mode 100644
index 000000000000..618e78256913
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/spryvm/default.nix
@@ -0,0 +1,20 @@
+{ lib, buildNimPackage, fetchFromGitHub, sqlite }:
+
+buildNimPackage rec {
+  pname = "spryvm";
+  version = "0.9.3";
+  src = fetchFromGitHub {
+    owner = "gokr";
+    repo = pname;
+    rev = "36c2b56bb194902d33de7bcf70d3041703e107ab";
+    hash = "sha256-OxB49ef6qPvSXLsyVl5g2ic/P9MMbF3jRYDWrxNJ0Iw=";
+  };
+  propagatedBuildInputs = [ sqlite ];
+  patches = [ ./nil.patch ];
+  meta = with lib;
+    src.meta // {
+      description = "Spry virtual machine";
+      license = [ licenses.mit ];
+      maintainers = [ maintainers.ehmry ];
+    };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/spryvm/nil.patch b/nixpkgs/pkgs/development/nim-packages/spryvm/nil.patch
new file mode 100644
index 000000000000..82d42b597fdb
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/spryvm/nil.patch
@@ -0,0 +1,21 @@
+diff --git a/spryvm/spryui.nim b/spryvm/spryui.nim
+index 37f5329..50440e9 100644
+--- a/spryvm/spryui.nim
++++ b/spryvm/spryui.nim
+@@ -140,14 +140,14 @@ proc addUI*(spry: Interpreter) =
+   nimMeth("openFile"):
+     var win = WindowNode(evalArgInfix(spry))
+     var path = openFile(Window(win.widget))
+-    if path.isNil:
++    if path == "":
+       spry.nilVal
+     else:
+       newValue($path)
+   nimMeth("saveFile"):
+     var win = WindowNode(evalArgInfix(spry))
+     var path = saveFile(Window(win.widget))
+-    if path.isNil:
++    if path == "":
+       spry.nilVal
+     else:
+       newValue($path)
diff --git a/nixpkgs/pkgs/development/nim-packages/stew/default.nix b/nixpkgs/pkgs/development/nim-packages/stew/default.nix
new file mode 100644
index 000000000000..d494e5f879ef
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/stew/default.nix
@@ -0,0 +1,20 @@
+{ lib, buildNimPackage, fetchFromGitHub, snappy }:
+
+buildNimPackage rec {
+  pname = "stew";
+  version = "0.1.0";
+  src = fetchFromGitHub {
+    owner = "status-im";
+    repo = "nim-${pname}";
+    rev = "478cc6efdefaabadf0666a3351fb959b78009bcc";
+    hash = "sha256-txlTF0zNV5kV4KfE744oB3aVLCfWS9BdoKxUmTQTTRY=";
+  };
+  doCheck = false;
+  meta = with lib;
+    src.meta // {
+      description =
+        "Backports, standard library candidates and small utilities that don't yet deserve their own repository";
+      license = [ lib.licenses.asl20 ];
+      maintainers = [ maintainers.ehmry ];
+    };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/supersnappy/default.nix b/nixpkgs/pkgs/development/nim-packages/supersnappy/default.nix
new file mode 100644
index 000000000000..f2f8205d8286
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/supersnappy/default.nix
@@ -0,0 +1,8 @@
+{ fetchFromGitHub }:
+
+fetchFromGitHub {
+  owner = "guzba";
+  repo = "supersnappy";
+  rev = "2.1.1";
+  sha256 = "03df1qgrbp84swhqy12ansyn951lkaw0kf1arbnki4fkgdnqdamf";
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/syndicate/default.nix b/nixpkgs/pkgs/development/nim-packages/syndicate/default.nix
new file mode 100644
index 000000000000..e22455ad9098
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/syndicate/default.nix
@@ -0,0 +1,19 @@
+{ lib, buildNimPackage, fetchFromGitea, hashlib, preserves }:
+
+buildNimPackage rec {
+  pname = "syndicate";
+  version = "20230530";
+  src = fetchFromGitea {
+    domain = "git.syndicate-lang.org";
+    owner = "ehmry";
+    repo = "${pname}-nim";
+    rev = version;
+    hash = "sha256-lUHoMSQwUlz9EDMvpFL9GlrwbwMvZDILSmuakONwe50=";
+  };
+  propagatedBuildInputs = [ hashlib preserves ];
+  meta = src.meta // {
+    description = "Nim implementation of the Syndicated Actor model";
+    license = lib.licenses.unlicense;
+    maintainers = with lib.maintainers; [ ehmry ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/taps/default.nix b/nixpkgs/pkgs/development/nim-packages/taps/default.nix
new file mode 100644
index 000000000000..ce453dbaa344
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/taps/default.nix
@@ -0,0 +1,19 @@
+{ lib, buildNimPackage, fetchFromSourcehut, getdns }:
+
+buildNimPackage rec {
+  pname = "taps";
+  version = "20230331";
+  src = fetchFromSourcehut {
+    owner = "~ehmry";
+    repo = "nim_${pname}";
+    rev = version;
+    hash = "sha256-p2DBJWFwS82oHPq0uMCtZWFbn8GFndEJBjhkHeuPGos=";
+  };
+  propagatedBuildInputs = [ getdns ];
+  doCheck = false;
+  meta = src.meta // {
+    description = "Transport Services Interface";
+    license = lib.licenses.isc;
+    maintainers = [ lib.maintainers.ehmry ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/tempfile/default.nix b/nixpkgs/pkgs/development/nim-packages/tempfile/default.nix
new file mode 100644
index 000000000000..d23ea05cb322
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/tempfile/default.nix
@@ -0,0 +1,20 @@
+{ lib, buildNimPackage, fetchFromGitHub }:
+
+buildNimPackage rec {
+  pname = "tempfile";
+  version = "0.1.7";
+  src = fetchFromGitHub {
+    owner = "OpenSystemsLab";
+    repo = "${pname}.nim";
+    rev = version;
+    hash = "sha256-08vvHXVxL1mAcpMzosaHd2FupTJrKJP5JaVcgxN4oYE=";
+  };
+  doCheck = false; # impure
+  meta = with lib;
+    src.meta // {
+      description = "Temporary files and folders";
+      license = [ lib.licenses.mit ];
+      maintainers = [ maintainers.ehmry ];
+      mainProgram = "tempfile_seeder";
+    };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/tkrzw/default.nix b/nixpkgs/pkgs/development/nim-packages/tkrzw/default.nix
new file mode 100644
index 000000000000..9f88067f988a
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/tkrzw/default.nix
@@ -0,0 +1,20 @@
+{ lib, buildNimPackage, fetchFromSourcehut, pkg-config, tkrzw }:
+
+buildNimPackage rec {
+  pname = "tkrzw";
+  version = "20220922";
+  src = fetchFromSourcehut {
+    owner = "~ehmry";
+    repo = "nim-${pname}";
+    rev = version;
+    hash = "sha256-66rUuK+wUrqs1QYjteZcaIrfg+LHQNcR+XM+EtVuGsA=";
+  };
+  propagatedNativeBuildInputs = [ pkg-config ];
+  propagatedBuildInputs = [ tkrzw ];
+  meta = with lib;
+    src.meta // {
+      description = "Nim wrappers over some of the Tkrzw C++ library";
+      license = lib.licenses.asl20;
+      maintainers = with lib.maintainers; [ ehmry ];
+    };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/ui/default.nix b/nixpkgs/pkgs/development/nim-packages/ui/default.nix
new file mode 100644
index 000000000000..0af0665bfa65
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/ui/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildNimPackage, fetchFromGitHub, libui, pkg-config }:
+
+buildNimPackage rec {
+  pname = "ui";
+  version = "0.9.4";
+  src = fetchFromGitHub {
+    owner = "nim-lang";
+    repo = pname;
+    rev = "547e1cea8e9fb68c138c422b77af0a3152e50210";
+    hash = "sha256-rcvC0TO1r2zU7WEYfcsi/qX+nRITwKj7Fkqd4fHgTwU=";
+  };
+  propagatedBuildInputs = [ libui ];
+  propagatedNativeBuildInputs = [ pkg-config ];
+  postPatch = ''
+    echo {.passL: r\"$(pkg-config --libs libui)\".} >> ui/rawui.nim
+  '';
+  meta = with lib;
+    src.meta // {
+      description = "Nim bindings to libui";
+      license = [ licenses.mit ];
+      maintainers = [ maintainers.ehmry ];
+    };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/unicodedb/default.nix b/nixpkgs/pkgs/development/nim-packages/unicodedb/default.nix
new file mode 100644
index 000000000000..cbc897a1fc4e
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/unicodedb/default.nix
@@ -0,0 +1,18 @@
+{ lib, buildNimPackage, fetchFromGitHub }:
+
+buildNimPackage (finalAttrs: {
+  pname = "unicodedb";
+  version = "0.12.0";
+  src = fetchFromGitHub {
+    owner = "nitely";
+    repo = "nim-unicodedb";
+    rev = finalAttrs.version;
+    hash = "sha256-vtksdRTWH/Fjp1z8KSFGjgn1SRUxtUZwlOa+vMuB53A=";
+  };
+  meta = finalAttrs.src.meta // {
+    description = "Unicode Character Database (UCD, tr44) for Nim";
+    homepage = "https://github.com/nitely/nim-unicodedb";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ ehmry ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/nim-packages/unicodeplus/default.nix b/nixpkgs/pkgs/development/nim-packages/unicodeplus/default.nix
new file mode 100644
index 000000000000..8efb1fee7ec0
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/unicodeplus/default.nix
@@ -0,0 +1,19 @@
+{ lib, buildNimPackage, fetchFromGitHub, segmentation }:
+
+buildNimPackage (finalAttrs: {
+  pname = "unicodeplus";
+  version = "0.8.0";
+  src = fetchFromGitHub {
+    owner = "nitely";
+    repo = "nim-unicodeplus";
+    rev = "v${finalAttrs.version}";
+    sha256 = "181wzwivfgplkqn5r4crhnaqgsza7x6fi23i86djb2dxvm7v6qxk";
+  };
+  propagatedBuildInputs = [ segmentation ];
+  meta = finalAttrs.src.meta // {
+    description = "Common unicode operations";
+    homepage = "https://github.com/nitely/nim-unicodeplus";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ ehmry ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/nim-packages/vmath/default.nix b/nixpkgs/pkgs/development/nim-packages/vmath/default.nix
new file mode 100644
index 000000000000..4a19a9c49bb3
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/vmath/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, buildNimPackage, fetchFromGitHub }:
+
+buildNimPackage rec {
+  pname = "vmath";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "treeform";
+    repo = pname;
+    rev = version;
+    hash = "sha256-/v0lQIOMogTxFRtbssziW4W6VhMDepM6Si8igLgcx30=";
+  };
+
+  doCheck = !stdenv.isDarwin;
+
+  meta = with lib;
+    src.meta // {
+      description = "Math vector library for graphical things";
+      license = [ licenses.mit ];
+      maintainers = [ maintainers.ehmry ];
+    };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/ws/default.nix b/nixpkgs/pkgs/development/nim-packages/ws/default.nix
new file mode 100644
index 000000000000..704d6d936bda
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/ws/default.nix
@@ -0,0 +1,21 @@
+{ lib, buildNimPackage, fetchFromGitHub }:
+
+buildNimPackage (finalAttrs: {
+  pname = "ws";
+  version = "0.5.0";
+  src = fetchFromGitHub {
+    owner = "treeform";
+    repo = "ws";
+    rev = finalAttrs.version;
+    hash = "sha256-3wVi6CjMTjcc5MJEozJN6W3TuYDb53w2MDCsv6lMH0k=";
+  };
+  preCheck = ''
+    rm tests/test_ws.nim tests/test_timeout.nim
+  '';
+  meta = finalAttrs.src.meta // {
+    description = "Simple WebSocket library for Nim";
+    homepage = "https://github.com/treeform/ws";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ ehmry ];
+  };
+})
diff --git a/nixpkgs/pkgs/development/nim-packages/x11/default.nix b/nixpkgs/pkgs/development/nim-packages/x11/default.nix
new file mode 100644
index 000000000000..85c5a18a381d
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/x11/default.nix
@@ -0,0 +1,20 @@
+{ lib, buildNimPackage, fetchFromGitHub }:
+
+buildNimPackage rec {
+  pname = "x11";
+  version = "1.1";
+
+  src = fetchFromGitHub {
+    owner = "nim-lang";
+    repo = pname;
+    rev = "2093a4c01360cbb5dd33ab79fd4056e148b53ca1";
+    hash = "sha256-2XRyXiBxAc9Zx/w0zRBHRZ240qww0FJvIvOKZ8YH50A=";
+  };
+
+  meta = with lib;
+    src.meta // {
+      description = "X11 library for nim";
+      license = [ licenses.mit ];
+      maintainers = [ maintainers.marcusramberg ];
+    };
+}
diff --git a/nixpkgs/pkgs/development/nim-packages/zippy/default.nix b/nixpkgs/pkgs/development/nim-packages/zippy/default.nix
new file mode 100644
index 000000000000..c89d030288e5
--- /dev/null
+++ b/nixpkgs/pkgs/development/nim-packages/zippy/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildNimPackage, fetchFromGitHub, unzip }:
+
+buildNimPackage rec {
+  pname = "zippy";
+  version = "0.7.3";
+
+  nativeBuildInputs = [ unzip ];
+
+  src = fetchFromGitHub {
+    owner = "guzba";
+    repo = pname;
+    rev = version;
+    hash = "sha256-w64ENRyP3mNTtESSt7CDDxUkjYSfziNVVedkO4HIuJ8=";
+  };
+
+  meta = with lib;
+    src.meta // {
+      description = "Pure Nim implementation of deflate, zlib, gzip and zip";
+      license = [ licenses.mit ];
+      maintainers = [ maintainers.ehmry ];
+    };
+}