diff --git a/.gitignore b/.gitignore index 7ab4045e..44b25574 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .DS_Store .direnv +/.pre-commit-config.yaml diff --git a/flake.lock b/flake.lock index 92d9e858..636578fd 100644 --- a/flake.lock +++ b/flake.lock @@ -98,6 +98,22 @@ } }, "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1747046372, + "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_2": { "flake": false, "locked": { "lastModified": 1730663653, @@ -117,16 +133,15 @@ "flake-parts": { "inputs": { "nixpkgs-lib": [ - "zx-dev", "nixpkgs" ] }, "locked": { - "lastModified": 1749398372, - "narHash": "sha256-tYBdgS56eXYaWVW3fsnPQ/nFlgWi/Z2Ymhyu21zVM98=", + "lastModified": 1760948891, + "narHash": "sha256-TmWcdiUUaWk8J4lpjzu4gCGxWY6/Ok7mOK4fIFfBuU4=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "9305fe4e5c2a6fcf5ba6a3ff155720fbe4076569", + "rev": "864599284fc7c0ba6357ed89ed5e2cd5040f0c04", "type": "github" }, "original": { @@ -138,6 +153,7 @@ "flake-utils": { "inputs": { "systems": [ + "mac-app-util", "systems" ] }, @@ -150,8 +166,50 @@ "type": "github" }, "original": { - "owner": "numtide", - "repo": "flake-utils", + "id": "flake-utils", + "type": "indirect" + } + }, + "git-hooks-nix": { + "inputs": { + "flake-compat": "flake-compat", + "gitignore": "gitignore", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1760663237, + "narHash": "sha256-BflA6U4AM1bzuRMR8QqzPXqh8sWVCNDzOdsxXEguJIc=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "ca5b894d3e3e151ffc1db040b6ce4dcc75d31c37", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "git-hooks-nix", + "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" } }, @@ -233,10 +291,8 @@ "mac-app-util": { "inputs": { "cl-nix-lite": "cl-nix-lite", - "flake-compat": "flake-compat", - "flake-utils": [ - "flake-utils" - ], + "flake-compat": "flake-compat_2", + "flake-utils": "flake-utils", "nixpkgs": [ "nixpkgs" ], @@ -349,7 +405,8 @@ "inputs": { "agenix": "agenix", "disko": "disko", - "flake-utils": "flake-utils", + "flake-parts": "flake-parts", + "git-hooks-nix": "git-hooks-nix", "golink": "golink", "home-manager": "home-manager", "homebrew-cask": "homebrew-cask", @@ -396,7 +453,9 @@ "zx-dev": { "inputs": { "anemone": "anemone", - "flake-parts": "flake-parts", + "flake-parts": [ + "flake-parts" + ], "nixpkgs": [ "nixpkgs" ] diff --git a/flake.nix b/flake.nix index 20c34b9a..d368ecee 100644 --- a/flake.nix +++ b/flake.nix @@ -8,9 +8,9 @@ url = "path:./flake.systems.nix"; flake = false; }; - flake-utils = { - url = "github:numtide/flake-utils"; - inputs.systems.follows = "systems"; + flake-parts = { + url = "github:hercules-ci/flake-parts"; + inputs.nixpkgs-lib.follows = "nixpkgs"; }; agenix = { url = "github:ryantm/agenix"; @@ -23,6 +23,10 @@ url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; + git-hooks-nix = { + url = "github:cachix/git-hooks.nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; # Linux disko = { @@ -37,6 +41,7 @@ zx-dev = { url = "github:stackptr/zx.dev"; inputs.nixpkgs.follows = "nixpkgs"; + inputs.flake-parts.follows = "flake-parts"; }; # macOS @@ -58,66 +63,90 @@ mac-app-util = { url = "github:hraban/mac-app-util"; inputs.nixpkgs.follows = "nixpkgs"; - inputs.flake-utils.follows = "flake-utils"; inputs.systems.follows = "systems"; }; }; - outputs = inputs @ { - nixpkgs, - flake-utils, - agenix, - ... - }: let - inherit (import ./lib/hosts.nix inputs) mkNixosHost mkDarwinHost; - in - { - nixosConfigurations = { - zeta = mkNixosHost { - hostname = "zeta"; - system = "aarch64-linux"; - username = "mu"; - }; - glyph = mkNixosHost { - hostname = "glyph"; - system = "x86_64-linux"; - username = "mu"; + outputs = inputs @ {flake-parts, ...}: + flake-parts.lib.mkFlake {inherit inputs;} ({ + config, + withSystem, + moduleWithSystem, + ... + }: { + imports = [ + inputs.git-hooks-nix.flakeModule + ]; + + flake = let + inherit (import ./lib/hosts.nix inputs) mkNixosHost mkDarwinHost; + in { + nixosConfigurations = { + zeta = mkNixosHost { + hostname = "zeta"; + system = "aarch64-linux"; + username = "mu"; + }; + glyph = mkNixosHost { + hostname = "glyph"; + system = "x86_64-linux"; + username = "mu"; + }; + spore = mkNixosHost { + hostname = "spore"; + system = "x86_64-linux"; + username = "mu"; + }; }; - spore = mkNixosHost { - hostname = "spore"; - system = "x86_64-linux"; - username = "mu"; + + darwinConfigurations = { + Rhizome = mkDarwinHost { + hostname = "Rhizome"; + username = "corey"; + }; }; - }; - darwinConfigurations = { - Rhizome = mkDarwinHost { - hostname = "Rhizome"; - username = "corey"; + nixConfig = { + experimental-features = ["nix-command" "flakes"]; + extra-substituters = [ + "https://stackptr.cachix.org" + ]; + extra-trusted-public-keys = [ + "stackptr.cachix.org-1:5e2q7OxdRdAtvRmHTeogpgJKzQhbvFqNMmCMw71opZA=" + ]; }; }; - } - // flake-utils.lib.eachDefaultSystem ( - system: let - pkgs = nixpkgs.legacyPackages.${system}; - agenixPkg = agenix.packages.${system}.default; - in { + + systems = import inputs.systems; + perSystem = { + pkgs, + inputs', + config, + ... + }: { devShells = { default = pkgs.mkShell { - packages = [agenixPkg pkgs.cachix pkgs.just]; + packages = + [ + inputs'.agenix.packages.default + pkgs.cachix + pkgs.just + ] + ++ config.pre-commit.settings.enabledPackages; + inherit (config.pre-commit) shellHook; }; }; - formatter = pkgs.alejandra; - } - ); - - nixConfig = { - experimental-features = ["nix-command" "flakes"]; - extra-substituters = [ - "https://stackptr.cachix.org" - ]; - extra-trusted-public-keys = [ - "stackptr.cachix.org-1:5e2q7OxdRdAtvRmHTeogpgJKzQhbvFqNMmCMw71opZA=" - ]; - }; + formatter = let + inherit (config.pre-commit.settings) package configFile; + in + pkgs.writeShellScriptBin "pre-commit-run" '' + ${pkgs.lib.getExe package} run --all-files --config ${configFile} + ''; + pre-commit.settings.hooks = { + alejandra.enable = true; + nil.enable = true; + statix.enable = true; + }; + }; + }); } diff --git a/home/default.nix b/home/default.nix index fb8deae7..25f5b49f 100644 --- a/home/default.nix +++ b/home/default.nix @@ -27,11 +27,9 @@ nixSpecific = [ comma manix - nil nix-du nix-tree nix-your-shell - statix ]; tuiApps = [ claude-code