diff --git a/default.nix b/default.nix
index b358736..03584a0 100644
--- a/default.nix
+++ b/default.nix
@@ -16,5 +16,6 @@ rec {
   keys = callPackage ./pkgs/keys { };
   homePage = callPackage ./pkgs/homePage { };
   deploy = callPackage ./pkgs/deploy.nix { };
+  recipemd = python3.pkgs.toPythonApplication (python3Packages.callPackage ./pkgs/recipemd { });
   scripts = callPackage ./pkgs/scripts.nix { };
 }
diff --git a/hosts/gorgon/home/default.nix b/hosts/gorgon/home/default.nix
index 74b1d5d..afa28c7 100644
--- a/hosts/gorgon/home/default.nix
+++ b/hosts/gorgon/home/default.nix
@@ -20,6 +20,8 @@ in
 {
   nixpkgs.overlays = [
     this.overlays.dadadaScripts
+    this.overlays.python3Packages
+    this.overlays.recipemd
   ];
 
   imports = lib.attrValues this.hmModules;
diff --git a/hosts/gorgon/home/pkgs.nix b/hosts/gorgon/home/pkgs.nix
index fa2f1fc..5d95dee 100644
--- a/hosts/gorgon/home/pkgs.nix
+++ b/hosts/gorgon/home/pkgs.nix
@@ -69,6 +69,7 @@ with pkgs; [
   python38Packages.dateutil
   python38Packages.managesieve
   python38Packages.solo-python
+  recipemd
   signal-desktop
   slurp
   sqlite
diff --git a/overlays/default.nix b/overlays/default.nix
index ea39702..848f0e1 100644
--- a/overlays/default.nix
+++ b/overlays/default.nix
@@ -10,4 +10,8 @@
     dadadaScripts = super.callPackage ../pkgs/scripts.nix { };
   };
   sudo = import ./sudo.nix;
+  python3Packages = import ./python3-packages.nix;
+  recipemd = self: super: {
+    recipemd = super.python3Packages.toPythonApplication super.python3Packages.recipemd;
+  };
 }
diff --git a/overlays/python3-packages.nix b/overlays/python3-packages.nix
new file mode 100644
index 0000000..9d3ddde
--- /dev/null
+++ b/overlays/python3-packages.nix
@@ -0,0 +1,6 @@
+self: super:
+{
+  python3Packages = super.python3Packages // super.recurseIntoAttrs (
+    super.python3Packages.callPackage ../pkgs/python-pkgs { }
+  );
+}
diff --git a/pkgs/python-pkgs/default.nix b/pkgs/python-pkgs/default.nix
new file mode 100644
index 0000000..7c10127
--- /dev/null
+++ b/pkgs/python-pkgs/default.nix
@@ -0,0 +1,4 @@
+{ callPackage }:
+{
+  recipemd = callPackage ./recipemd { };
+}
diff --git a/pkgs/python-pkgs/recipemd/default.nix b/pkgs/python-pkgs/recipemd/default.nix
new file mode 100644
index 0000000..4c0c41a
--- /dev/null
+++ b/pkgs/python-pkgs/recipemd/default.nix
@@ -0,0 +1,74 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pytestCheckHook
+, python3Packages
+}:
+
+buildPythonPackage rec {
+  pname = "recipemd";
+  version = "4.0.5";
+
+  disabled = false; # requires python version >=3.7,<4
+
+  src = fetchFromGitHub {
+    owner = "tstehr";
+    repo = "RecipeMD";
+    rev = "v${version}";
+    sha256 = "17ph5gnbrx6159cryjlpkkp15gvazvxgm6ixcmrbdmsg6rgyqcpn";
+  };
+
+  # # Package conditions to handle
+  # # might have to sed setup.py and egg.info in patchPhase
+  # # sed -i "s/<package>.../<package>/"
+  # # Extra packages (may not be necessary)
+  # pytest-cov==2.8.1 # tests
+  # tox==3.20.1 # tests
+  # Sphinx==2.2.2 # docs
+  # m2r==0.2.1 # docs
+  # sphinxcontrib.fulltoc==1.2.0 # docs
+  # sphinxcontrib.autoprogram==0.1.5 # docs
+  # sphinx_autodoc_typehints==1.10.3 # docs
+  # sphinxcontrib.apidoc==0.3.0 # docs
+  # sphinx-autobuild==0.7.1 # docs
+  # twine==3.1.1 # release
+  # pytest==5.3.1 # dev
+  # pytest-cov==2.8.1 # dev
+  # tox==3.20.1 # dev
+  # Sphinx==2.2.2 # dev
+  # m2r==0.2.1 # dev
+  # sphinxcontrib.fulltoc==1.2.0 # dev
+  # sphinxcontrib.autoprogram==0.1.5 # dev
+  # sphinx_autodoc_typehints==1.10.3 # dev
+  # sphinxcontrib.apidoc==0.3.0 # dev
+  # sphinx-autobuild==0.7.1 # dev
+  # twine==3.1.1 # dev
+
+  patchPhase = ''
+    # Override yarl version
+    sed -i 's/argcomplete~=1.10.0/yarl~=1.0/' setup.py
+    sed -i 's/yarl~=1.3.0/yarl~=1.0/' setup.py
+  '';
+
+  propagatedBuildInputs = with python3Packages; [
+    dataclasses-json
+    yarl
+    CommonMark
+    argcomplete
+    pyparsing
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+    python3Packages.pytestcov
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Markdown recipe manager, reference implementation of RecipeMD";
+    homepage = https://recipemd.org;
+    license = [ licenses.lgpl3Only ];
+    maintainers = [ maintainers.dadada ];
+  };
+}