From 6074811a51b5a649e5e20b3f44ebfc032d7a87bf Mon Sep 17 00:00:00 2001
From: Anderson Torres <torres.anderson.85@protonmail.com>
Date: Fri, 8 Mar 2024 13:17:16 -0300
Subject: [PATCH 01/13] clevis: migrate to by-name

---
 .../clevis/default.nix => by-name/cl/clevis/package.nix}        | 0
 pkgs/{tools/security => by-name/cl}/clevis/tang-timeout.patch   | 0
 pkgs/top-level/all-packages.nix                                 | 2 +-
 3 files changed, 1 insertion(+), 1 deletion(-)
 rename pkgs/{tools/security/clevis/default.nix => by-name/cl/clevis/package.nix} (100%)
 rename pkgs/{tools/security => by-name/cl}/clevis/tang-timeout.patch (100%)

diff --git a/pkgs/tools/security/clevis/default.nix b/pkgs/by-name/cl/clevis/package.nix
similarity index 100%
rename from pkgs/tools/security/clevis/default.nix
rename to pkgs/by-name/cl/clevis/package.nix
diff --git a/pkgs/tools/security/clevis/tang-timeout.patch b/pkgs/by-name/cl/clevis/tang-timeout.patch
similarity index 100%
rename from pkgs/tools/security/clevis/tang-timeout.patch
rename to pkgs/by-name/cl/clevis/tang-timeout.patch
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 413d54d74751..7947ab8908a8 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -4496,7 +4496,7 @@ with pkgs;
 
   clevercsv = with python3Packages; toPythonApplication clevercsv;
 
-  clevis = callPackage ../tools/security/clevis {
+  clevis = callPackage ../by-name/cl/clevis/package.nix {
     asciidoc = asciidoc-full;
   };
 

From 10450ed8b2c9db545933ebec4b7d46dbed91b4c2 Mon Sep 17 00:00:00 2001
From: Anderson Torres <torres.anderson.85@protonmail.com>
Date: Mon, 22 Jul 2024 21:05:59 -0300
Subject: [PATCH 02/13] clevis: adopted by AndersonTorres

---
 pkgs/by-name/cl/clevis/package.nix | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pkgs/by-name/cl/clevis/package.nix b/pkgs/by-name/cl/clevis/package.nix
index fa1be45a5b99..c287948f6a50 100644
--- a/pkgs/by-name/cl/clevis/package.nix
+++ b/pkgs/by-name/cl/clevis/package.nix
@@ -85,6 +85,6 @@ stdenv.mkDerivation rec {
     homepage = "https://github.com/latchset/clevis";
     changelog = "https://github.com/latchset/clevis/releases/tag/v${version}";
     license = licenses.gpl3Plus;
-    maintainers = with maintainers; [ ];
+    maintainers = with maintainers; [ AndersonTorres ];
   };
 }

From 6c8a2301776eaa2dc9e569158dbdc8d72d160867 Mon Sep 17 00:00:00 2001
From: Anderson Torres <torres.anderson.85@protonmail.com>
Date: Tue, 23 Jul 2024 23:35:08 -0300
Subject: [PATCH 03/13] clevis: rework - input set

---
 pkgs/by-name/cl/clevis/package.nix | 39 +++++++++++++++---------------
 1 file changed, 20 insertions(+), 19 deletions(-)

diff --git a/pkgs/by-name/cl/clevis/package.nix b/pkgs/by-name/cl/clevis/package.nix
index c287948f6a50..5462ba55ef47 100644
--- a/pkgs/by-name/cl/clevis/package.nix
+++ b/pkgs/by-name/cl/clevis/package.nix
@@ -1,22 +1,23 @@
-{ lib
-, stdenv
-, asciidoc
-, coreutils
-, cryptsetup
-, curl
-, fetchFromGitHub
-, gnugrep
-, gnused
-, jansson
-, jose
-, libpwquality
-, luksmeta
-, makeWrapper
-, meson
-, ninja
-, pkg-config
-, tpm2-tools
-, nixosTests
+{
+  lib,
+  asciidoc,
+  coreutils,
+  cryptsetup,
+  curl,
+  fetchFromGitHub,
+  gnugrep,
+  gnused,
+  jansson,
+  jose,
+  libpwquality,
+  luksmeta,
+  makeWrapper,
+  meson,
+  ninja,
+  nixosTests,
+  pkg-config,
+  stdenv,
+  tpm2-tools,
 }:
 
 stdenv.mkDerivation rec {

From aa773426af2e1f2c26d50dd6c90b570a4abb3233 Mon Sep 17 00:00:00 2001
From: Anderson Torres <torres.anderson.85@protonmail.com>
Date: Tue, 23 Jul 2024 23:36:07 -0300
Subject: [PATCH 04/13] clevis: rework - rename patch

---
 .../cl/clevis/{tang-timeout.patch => 0000-tang-timeout.patch}   | 0
 pkgs/by-name/cl/clevis/package.nix                              | 2 +-
 2 files changed, 1 insertion(+), 1 deletion(-)
 rename pkgs/by-name/cl/clevis/{tang-timeout.patch => 0000-tang-timeout.patch} (100%)

diff --git a/pkgs/by-name/cl/clevis/tang-timeout.patch b/pkgs/by-name/cl/clevis/0000-tang-timeout.patch
similarity index 100%
rename from pkgs/by-name/cl/clevis/tang-timeout.patch
rename to pkgs/by-name/cl/clevis/0000-tang-timeout.patch
diff --git a/pkgs/by-name/cl/clevis/package.nix b/pkgs/by-name/cl/clevis/package.nix
index 5462ba55ef47..6ba0a7285f62 100644
--- a/pkgs/by-name/cl/clevis/package.nix
+++ b/pkgs/by-name/cl/clevis/package.nix
@@ -34,7 +34,7 @@ stdenv.mkDerivation rec {
   patches = [
     # Replaces the clevis-decrypt 300s timeout to a 10s timeout
     # https://github.com/latchset/clevis/issues/289
-    ./tang-timeout.patch
+    ./0000-tang-timeout.patch
   ];
 
   postPatch = ''

From 42196a912d5591142ac6ea68ac6656bc42513927 Mon Sep 17 00:00:00 2001
From: Anderson Torres <torres.anderson.85@protonmail.com>
Date: Wed, 24 Jul 2024 09:48:01 -0300
Subject: [PATCH 05/13] clevis: rework - get rid of nested with

---
 pkgs/by-name/cl/clevis/package.nix | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/pkgs/by-name/cl/clevis/package.nix b/pkgs/by-name/cl/clevis/package.nix
index 6ba0a7285f62..b6a84e4f58f2 100644
--- a/pkgs/by-name/cl/clevis/package.nix
+++ b/pkgs/by-name/cl/clevis/package.nix
@@ -81,11 +81,11 @@ stdenv.mkDerivation rec {
     clevisZfsFallbackSystemdStage1 = nixosTests.installer-systemd-stage-1.clevisZfsFallback;
   };
 
-  meta = with lib; {
-    description = "Automated Encryption Framework";
+  meta = {
     homepage = "https://github.com/latchset/clevis";
+    description = "Automated Encryption Framework";
     changelog = "https://github.com/latchset/clevis/releases/tag/v${version}";
-    license = licenses.gpl3Plus;
-    maintainers = with maintainers; [ AndersonTorres ];
+    license = lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [ AndersonTorres ];
   };
 }

From 409f10ea7852dda56ff4257c03865b940794188b Mon Sep 17 00:00:00 2001
From: Anderson Torres <torres.anderson.85@protonmail.com>
Date: Wed, 24 Jul 2024 09:48:55 -0300
Subject: [PATCH 06/13] clevis: rework - meta.longDescription

---
 pkgs/by-name/cl/clevis/package.nix | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/pkgs/by-name/cl/clevis/package.nix b/pkgs/by-name/cl/clevis/package.nix
index b6a84e4f58f2..59bee8fc959f 100644
--- a/pkgs/by-name/cl/clevis/package.nix
+++ b/pkgs/by-name/cl/clevis/package.nix
@@ -84,6 +84,11 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "https://github.com/latchset/clevis";
     description = "Automated Encryption Framework";
+    longDescription = ''
+      Clevis is a pluggable framework for automated decryption. It can be used
+      to provide automated decryption of data or even automated unlocking of
+      LUKS volumes.
+    '';
     changelog = "https://github.com/latchset/clevis/releases/tag/v${version}";
     license = lib.licenses.gpl3Plus;
     maintainers = with lib.maintainers; [ AndersonTorres ];

From 9957f043cc071b89c23b8ea853090b7a75382a1e Mon Sep 17 00:00:00 2001
From: Anderson Torres <torres.anderson.85@protonmail.com>
Date: Tue, 23 Jul 2024 23:37:57 -0300
Subject: [PATCH 07/13] clevis: rework - finalAttrs

---
 pkgs/by-name/cl/clevis/package.nix | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/pkgs/by-name/cl/clevis/package.nix b/pkgs/by-name/cl/clevis/package.nix
index 59bee8fc959f..e6793dc2566c 100644
--- a/pkgs/by-name/cl/clevis/package.nix
+++ b/pkgs/by-name/cl/clevis/package.nix
@@ -20,14 +20,14 @@
   tpm2-tools,
 }:
 
-stdenv.mkDerivation rec {
+stdenv.mkDerivation (finalAttrs: {
   pname = "clevis";
   version = "19";
 
   src = fetchFromGitHub {
     owner = "latchset";
-    repo = pname;
-    rev = "refs/tags/v${version}";
+    repo = "clevis";
+    rev = "refs/tags/v${finalAttrs.version}";
     hash = "sha256-3J3ti/jRiv+p3eVvJD7u0ko28rPd8Gte0mCJaVaqyOs=";
   };
 
@@ -89,8 +89,8 @@ stdenv.mkDerivation rec {
       to provide automated decryption of data or even automated unlocking of
       LUKS volumes.
     '';
-    changelog = "https://github.com/latchset/clevis/releases/tag/v${version}";
+    changelog = "https://github.com/latchset/clevis/releases/tag/v${finalAttrs.version}";
     license = lib.licenses.gpl3Plus;
     maintainers = with lib.maintainers; [ AndersonTorres ];
   };
-}
+})

From 09fd98c43361d5dca7f8eb51848b18b1cfce5e6b Mon Sep 17 00:00:00 2001
From: Anderson Torres <torres.anderson.85@protonmail.com>
Date: Tue, 23 Jul 2024 23:42:55 -0300
Subject: [PATCH 08/13] clevis: rework - move and format postPatch and
 postInstall

Gather the shell script snippets to their own place.
---
 pkgs/by-name/cl/clevis/package.nix | 39 ++++++++++++++++++++----------
 1 file changed, 26 insertions(+), 13 deletions(-)

diff --git a/pkgs/by-name/cl/clevis/package.nix b/pkgs/by-name/cl/clevis/package.nix
index e6793dc2566c..3d0128fd1f94 100644
--- a/pkgs/by-name/cl/clevis/package.nix
+++ b/pkgs/by-name/cl/clevis/package.nix
@@ -37,19 +37,6 @@ stdenv.mkDerivation (finalAttrs: {
     ./0000-tang-timeout.patch
   ];
 
-  postPatch = ''
-    for f in $(find src/ -type f); do
-      grep -q "/bin/cat" "$f" && substituteInPlace "$f" \
-        --replace '/bin/cat' '${coreutils}/bin/cat' || true
-    done
-  '';
-
-  postInstall = ''
-    # We wrap the main clevis binary entrypoint but not the sub-binaries.
-    wrapProgram $out/bin/clevis \
-      --prefix PATH ':' "${lib.makeBinPath [tpm2-tools jose cryptsetup libpwquality luksmeta gnugrep gnused coreutils]}:${placeholder "out"}/bin"
-  '';
-
   nativeBuildInputs = [
     asciidoc
     makeWrapper
@@ -73,6 +60,32 @@ stdenv.mkDerivation (finalAttrs: {
     "man"
   ];
 
+  postPatch = ''
+    for f in $(find src/ -type f); do
+      grep -q "/bin/cat" "$f" && substituteInPlace "$f" \
+        --replace-fail '/bin/cat' '${lib.getExe' coreutils "cat"}' || true
+    done
+  '';
+
+  # We wrap the main clevis binary entrypoint but not the sub-binaries.
+  postInstall =
+    let
+      includeIntoPath = [
+        coreutils
+        cryptsetup
+        gnugrep
+        gnused
+        jose
+        libpwquality
+        luksmeta
+        tpm2-tools
+      ];
+    in
+    ''
+      wrapProgram $out/bin/clevis \
+        --prefix PATH ':' "${lib.makeBinPath includeIntoPath}:${placeholder "out"}/bin"
+    '';
+
   passthru.tests = {
     inherit (nixosTests.installer) clevisBcachefs clevisBcachefsFallback clevisLuks clevisLuksFallback clevisZfs clevisZfsFallback;
     clevisLuksSystemdStage1 = nixosTests.installer-systemd-stage-1.clevisLuks;

From 51b194729db79b960bf2173d883884d3df5897ba Mon Sep 17 00:00:00 2001
From: Anderson Torres <torres.anderson.85@protonmail.com>
Date: Sun, 14 Jul 2024 02:01:00 -0300
Subject: [PATCH 09/13] clevis: tidy up postPatch script

By fixing an idea from doronbehar.
---
 pkgs/by-name/cl/clevis/package.nix | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/pkgs/by-name/cl/clevis/package.nix b/pkgs/by-name/cl/clevis/package.nix
index 3d0128fd1f94..20882af076c1 100644
--- a/pkgs/by-name/cl/clevis/package.nix
+++ b/pkgs/by-name/cl/clevis/package.nix
@@ -60,10 +60,19 @@ stdenv.mkDerivation (finalAttrs: {
     "man"
   ];
 
+  # Since 2018-07-11, upstream relies on a hardcoded /bin/cat. See:
+  # https://github.com/latchset/clevis/issues/61
+  # https://github.com/latchset/clevis/pull/64
+  #
+  # So, we filter all src files that have the string "/bin/cat" and patch that
+  # string to an absolute path for our coreutils location.
+  # The xargs command is a little bit convoluted because a simpler version would
+  # be vulnerable to code injection. This hint is a courtesy of Stack Exchange:
+  # https://unix.stackexchange.com/a/267438
   postPatch = ''
-    for f in $(find src/ -type f); do
-      grep -q "/bin/cat" "$f" && substituteInPlace "$f" \
-        --replace-fail '/bin/cat' '${lib.getExe' coreutils "cat"}' || true
+    for f in $(find src/ -type f -print0 |\
+                 xargs -0 -I@ sh -c 'grep -q "/bin/cat" "$1" && echo "$1"' sh @); do
+      substituteInPlace "$f" --replace-fail '/bin/cat' '${lib.getExe' coreutils "cat"}'
     done
   '';
 

From 152a6e0f8ce262d267deb75fbfd7fe94dc137beb Mon Sep 17 00:00:00 2001
From: Anderson Torres <torres.anderson.85@protonmail.com>
Date: Wed, 24 Jul 2024 10:40:37 -0300
Subject: [PATCH 10/13] clevis: set strictDeps as false

---
 pkgs/by-name/cl/clevis/package.nix | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/pkgs/by-name/cl/clevis/package.nix b/pkgs/by-name/cl/clevis/package.nix
index 20882af076c1..0642db7cd239 100644
--- a/pkgs/by-name/cl/clevis/package.nix
+++ b/pkgs/by-name/cl/clevis/package.nix
@@ -60,6 +60,11 @@ stdenv.mkDerivation (finalAttrs: {
     "man"
   ];
 
+  # TODO: investigate how to prepare the dependencies so that they can be found
+  # while setting strictDeps as true. This will require studying the dark
+  # corners of cross-compilation in Nixpkgs...
+  strictDeps = false;
+
   # Since 2018-07-11, upstream relies on a hardcoded /bin/cat. See:
   # https://github.com/latchset/clevis/issues/61
   # https://github.com/latchset/clevis/pull/64

From 7f1971f9fb71dab7769a431325aa395e279342d0 Mon Sep 17 00:00:00 2001
From: Anderson Torres <torres.anderson.85@protonmail.com>
Date: Mon, 22 Jul 2024 21:02:46 -0300
Subject: [PATCH 11/13] clevis: internalize asciidoc-full

There is few to no reason (besides breaking API) in not doing this.
---
 pkgs/by-name/cl/clevis/package.nix | 4 ++--
 pkgs/top-level/all-packages.nix    | 4 ----
 2 files changed, 2 insertions(+), 6 deletions(-)

diff --git a/pkgs/by-name/cl/clevis/package.nix b/pkgs/by-name/cl/clevis/package.nix
index 0642db7cd239..e67c97166432 100644
--- a/pkgs/by-name/cl/clevis/package.nix
+++ b/pkgs/by-name/cl/clevis/package.nix
@@ -1,6 +1,6 @@
 {
   lib,
-  asciidoc,
+  asciidoc-full,
   coreutils,
   cryptsetup,
   curl,
@@ -38,7 +38,7 @@ stdenv.mkDerivation (finalAttrs: {
   ];
 
   nativeBuildInputs = [
-    asciidoc
+    asciidoc-full
     makeWrapper
     meson
     ninja
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 7947ab8908a8..444d6ce8b0b6 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -4496,10 +4496,6 @@ with pkgs;
 
   clevercsv = with python3Packages; toPythonApplication clevercsv;
 
-  clevis = callPackage ../by-name/cl/clevis/package.nix {
-    asciidoc = asciidoc-full;
-  };
-
   cli53 = callPackage ../tools/admin/cli53 { };
 
   cli-visualizer = callPackage ../applications/misc/cli-visualizer { };

From c9d01a593d27449caa9acc1b992f89f3da2e5de3 Mon Sep 17 00:00:00 2001
From: Anderson Torres <torres.anderson.85@protonmail.com>
Date: Tue, 23 Jul 2024 23:51:36 -0300
Subject: [PATCH 12/13] clevis: nixfmt-rfc-style

To make CI happy.
Mental note: do not use `-w80`
---
 pkgs/by-name/cl/clevis/package.nix | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/pkgs/by-name/cl/clevis/package.nix b/pkgs/by-name/cl/clevis/package.nix
index e67c97166432..92fa31083b24 100644
--- a/pkgs/by-name/cl/clevis/package.nix
+++ b/pkgs/by-name/cl/clevis/package.nix
@@ -101,7 +101,14 @@ stdenv.mkDerivation (finalAttrs: {
     '';
 
   passthru.tests = {
-    inherit (nixosTests.installer) clevisBcachefs clevisBcachefsFallback clevisLuks clevisLuksFallback clevisZfs clevisZfsFallback;
+    inherit (nixosTests.installer)
+      clevisBcachefs
+      clevisBcachefsFallback
+      clevisLuks
+      clevisLuksFallback
+      clevisZfs
+      clevisZfsFallback
+      ;
     clevisLuksSystemdStage1 = nixosTests.installer-systemd-stage-1.clevisLuks;
     clevisLuksFallbackSystemdStage1 = nixosTests.installer-systemd-stage-1.clevisLuksFallback;
     clevisZfsSystemdStage1 = nixosTests.installer-systemd-stage-1.clevisZfs;

From 45131772f94c12c436d20ddd32bf6614a36dbe64 Mon Sep 17 00:00:00 2001
From: Anderson Torres <torres.anderson.85@protonmail.com>
Date: Mon, 22 Jul 2024 00:02:34 -0300
Subject: [PATCH 13/13] clevis: 19 -> 20

---
 pkgs/by-name/cl/clevis/package.nix | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/pkgs/by-name/cl/clevis/package.nix b/pkgs/by-name/cl/clevis/package.nix
index 92fa31083b24..ac1a1b1be918 100644
--- a/pkgs/by-name/cl/clevis/package.nix
+++ b/pkgs/by-name/cl/clevis/package.nix
@@ -22,13 +22,13 @@
 
 stdenv.mkDerivation (finalAttrs: {
   pname = "clevis";
-  version = "19";
+  version = "20";
 
   src = fetchFromGitHub {
     owner = "latchset";
     repo = "clevis";
     rev = "refs/tags/v${finalAttrs.version}";
-    hash = "sha256-3J3ti/jRiv+p3eVvJD7u0ko28rPd8Gte0mCJaVaqyOs=";
+    hash = "sha256-rBdZrnHPzRd9vbyl1h/Nb0cFAtIPUHSmxVoKrKuCrQ8=";
   };
 
   patches = [