From bd89cf57335a91914df7e70cc3674ab23ebb1d32 Mon Sep 17 00:00:00 2001
From: Crony Akatsuki <crony@cronyakatsuki.xyz>
Date: Sun, 23 Feb 2025 17:40:10 +0100
Subject: [PATCH] Setup simple git commit hooks.

---
 .envrc     |  2 ++
 .gitignore |  2 ++
 flake.lock | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
 flake.nix  | 11 ++++++++++
 shell.nix  | 11 ++++++++++
 5 files changed, 88 insertions(+), 2 deletions(-)
 create mode 100644 .envrc
 create mode 100644 .gitignore
 create mode 100644 shell.nix

diff --git a/.envrc b/.envrc
new file mode 100644
index 0000000..29da48d
--- /dev/null
+++ b/.envrc
@@ -0,0 +1,2 @@
+watch_file shell.nix
+use flake
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..f9a759c
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+.direnv
+.pre-commit-config.yaml
diff --git a/flake.lock b/flake.lock
index 7d7348c..aa0fb59 100644
--- a/flake.lock
+++ b/flake.lock
@@ -104,6 +104,22 @@
       }
     },
     "flake-compat": {
+      "flake": false,
+      "locked": {
+        "lastModified": 1696426674,
+        "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
+        "owner": "edolstra",
+        "repo": "flake-compat",
+        "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
+        "type": "github"
+      },
+      "original": {
+        "owner": "edolstra",
+        "repo": "flake-compat",
+        "type": "github"
+      }
+    },
+    "flake-compat_2": {
       "flake": false,
       "locked": {
         "lastModified": 1733328505,
@@ -220,7 +236,7 @@
           "stylix",
           "flake-compat"
         ],
-        "gitignore": "gitignore",
+        "gitignore": "gitignore_2",
         "nixpkgs": [
           "stylix",
           "nixpkgs"
@@ -241,6 +257,27 @@
       }
     },
     "gitignore": {
+      "inputs": {
+        "nixpkgs": [
+          "pre-commit-hooks",
+          "nixpkgs"
+        ]
+      },
+      "locked": {
+        "lastModified": 1709087332,
+        "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
+        "owner": "hercules-ci",
+        "repo": "gitignore.nix",
+        "rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
+        "type": "github"
+      },
+      "original": {
+        "owner": "hercules-ci",
+        "repo": "gitignore.nix",
+        "type": "github"
+      }
+    },
+    "gitignore_2": {
       "inputs": {
         "nixpkgs": [
           "stylix",
@@ -496,6 +533,28 @@
         "type": "github"
       }
     },
+    "pre-commit-hooks": {
+      "inputs": {
+        "flake-compat": "flake-compat",
+        "gitignore": "gitignore",
+        "nixpkgs": [
+          "nixpkgs"
+        ]
+      },
+      "locked": {
+        "lastModified": 1737465171,
+        "narHash": "sha256-R10v2hoJRLq8jcL4syVFag7nIGE7m13qO48wRIukWNg=",
+        "owner": "cachix",
+        "repo": "pre-commit-hooks.nix",
+        "rev": "9364dc02281ce2d37a1f55b6e51f7c0f65a75f17",
+        "type": "github"
+      },
+      "original": {
+        "owner": "cachix",
+        "repo": "pre-commit-hooks.nix",
+        "type": "github"
+      }
+    },
     "root": {
       "inputs": {
         "auto-cpufreq": "auto-cpufreq",
@@ -504,6 +563,7 @@
         "nix-index-database": "nix-index-database",
         "nixpkgs": "nixpkgs",
         "nvf": "nvf",
+        "pre-commit-hooks": "pre-commit-hooks",
         "stylix": "stylix"
       }
     },
@@ -536,7 +596,7 @@
         "base16-helix": "base16-helix",
         "base16-vim": "base16-vim",
         "firefox-gnome-theme": "firefox-gnome-theme",
-        "flake-compat": "flake-compat",
+        "flake-compat": "flake-compat_2",
         "flake-utils": "flake-utils_2",
         "git-hooks": "git-hooks",
         "gnome-shell": "gnome-shell",
diff --git a/flake.nix b/flake.nix
index c5c7357..2842a88 100644
--- a/flake.nix
+++ b/flake.nix
@@ -40,6 +40,12 @@
       url = "github:nix-community/nix-index-database";
       inputs.nixpkgs.follows = "nixpkgs";
     };
+
+    # Add pre commit hooks
+    pre-commit-hooks = {
+      url = "github:cachix/pre-commit-hooks.nix";
+      inputs.nixpkgs.follows = "nixpkgs";
+    };
   };
 
   outputs = {
@@ -47,6 +53,7 @@
     nixpkgs,
     home-manager,
     auto-cpufreq,
+    pre-commit-hooks,
     ...
   } @ inputs: {
     nixosConfigurations.nixos = nixpkgs.lib.nixosSystem {
@@ -75,5 +82,9 @@
         }
       ];
     };
+    devShells.x86_64-linux.default = let
+      system = "x86_64-linux";
+      pkgs = nixpkgs.legacyPackages.${system};
+    in (import ./shell.nix {inherit pkgs pre-commit-hooks;});
   };
 }
diff --git a/shell.nix b/shell.nix
new file mode 100644
index 0000000..7543241
--- /dev/null
+++ b/shell.nix
@@ -0,0 +1,11 @@
+{
+  pkgs ? import <nixpkgs> {},
+  pre-commit-hooks,
+  ...
+}: let
+  pre-commit-check = pre-commit-hooks.lib.${pkgs.system}.run {
+    src = ".";
+    hooks = {alejandra.enable = true;};
+  };
+in
+  pkgs.mkShell {inherit (pre-commit-check) shellHook;}