diff --git a/.github/workflows/update.yml b/.github/workflows/update.yml
index b4796b9..dbd92cb 100644
--- a/.github/workflows/update.yml
+++ b/.github/workflows/update.yml
@@ -14,17 +14,77 @@ jobs:
         uses: https://github.com/DeterminateSystems/nix-installer-action@main
       - name: Setup Action cache for nix
         uses: https://github.com/DeterminateSystems/magic-nix-cache-action@main
-        with:
-          fail-mode: true
+
       - name: Update flake.lock
-        uses: https://github.com/DeterminateSystems/update-flake-lock@main
+        id: update
+        run: |
+          nix flake update 2> >(tee /dev/stderr) | awk '
+            /^• Updated input/ {in_update = 1; print; next}
+            in_update && !/^warning:/ {print}
+            /^$/ {in_update = 0}
+          ' > update.log
+
+          echo "UPDATE_LOG<<EOF" >> $GITHUB_ENV
+          cat update.log >> $GITHUB_ENV 
+          echo "EOF" >> $GITHUB_ENV
+
+          rm update.log
+
+      - name: Write PR body template
+        uses: https://github.com/DamianReeves/write-file-action@v1.3
         with:
-          # inputs: dzgui dzgui-testing # We'll see whether I want to limit the updates to dzgui
-          token: ${{ secrets.FORGEJO_TOKEN_FOR_UPDATES }}
-          pr-title: "Update flake.lock"
-          pr-assignees: jiriks74
-          pr-labels: |
-            flake.lock
-            automated
+          path: pr_body.template
+          contents: |
+            - The following Nix Flake inputs were updated:
+
+            ```
+            ${{ env.UPDATE_LOG }}
+            ```
+
+            Auto-generated by [update.yml][1] with the help of
+            [create-pull-request][2]
+
+            [1]: https://forgejo.stefka.eu/jiriks74/nix.nvim/src/branch/main/.github/workflows/update.yml
+            [2]: https://forgejo.stefka.eu/jiriks74/create-pull-request
+
+      - name: Generate PR body
+        uses: pedrolamas/handlebars-action@v2.4.0 # v2.4.0
+        with:
+          files: "pr_body.template"
+          output-filename: "pr_body.md"
+      - name: Generate commit message
+        run: |
+          cp pr_body.md commit_body.md
+          sed -i '1s/^/Update `flake.lock`/' commit_body.md
+          cat commit_body.md
+      - name: Save PR body
+        id: pr_body
+        uses: juliangruber/read-file-action@v1
+        with:
+          path: "pr_body.md"
+      - name: Save commit body
+        id: commit_body
+        uses: juliangruber/read-file-action@v1
+        with:
+          path: "commit_body.md"
+
+      - name: Remove temporary files
+        run: |
+          rm pr_body.template
+          rm pr_body.md
+          rm commit_body.md
+
+      - name: Create Pull Request
+        id: create-pull-request
+        uses: https://forgejo.stefka.eu/jiriks74/create-pull-request@9791a4f146d5369620ea3b934822e717d3d90034
+        with:
+          token: ${{ secrets.FORGEJO_TOKEN_FOR_UPDATES  }}
+          commit-massage: |
+            ${{ steps.commit_body.outputs.content }}
+          body: ${{ steps.pr_body.outputs.content }}
+          title: Update `flake.lock`
+            
+          branch: update-flake-lock
       - name: Print PR number
-        run: echo Pull request number is ${{ steps.update.outputs.pull-request-number }}.
+        run: |
+          echo "Pull request number is ${{ steps.create-pull-request.outputs.pull-request-number }}."