diff --git a/flake.lock b/flake.lock index e8237ef..156c1e1 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1690247892, - "narHash": "sha256-WMGc1yq1cqRd+kzjWgbvHxckJIe8VQfiZ5RfR8tgABw=", + "lastModified": 1690431538, + "narHash": "sha256-Uml8ivMMOFPB9fNSDcw72imGHRdJpaK12sRm2DTLLe8=", "owner": "lnl7", "repo": "nix-darwin", - "rev": "efd35d99ce412335c478dff9da9a4256bbd39757", + "rev": "16c07487ac9bc59f58b121d13160c67befa3342e", "type": "github" }, "original": { @@ -53,14 +53,17 @@ ], "nixpkgs": [ "nixpkgs" + ], + "pre-commit-hooks": [ + "pre-commit-hooks" ] }, "locked": { - "lastModified": 1690231853, - "narHash": "sha256-kayhWrLn6kcf2tLT20Lj9ldsjhjtxmDyaLT6tp+k1T0=", + "lastModified": 1690407224, + "narHash": "sha256-pmgl0SZ6dXMXBJXykyoCiK4niLfIghhV566V14BMctI=", "owner": "walkah", "repo": "dotfiles", - "rev": "63b05b74b4a7166d099049d39dad4d13860411b0", + "rev": "fcaf64f19fd4d53bed05104ed42717ea0a8e35f9", "type": "github" }, "original": { @@ -174,11 +177,11 @@ "systems": "systems_3" }, "locked": { - "lastModified": 1685518550, - "narHash": "sha256-o2d0KcvaXzTrPRIo0kOLV0/QXHhDQ5DTi+OxcjO8xqY=", + "lastModified": 1689068808, + "narHash": "sha256-6ixXo3wt24N/melDWjq70UuHQLxGV8jZvooRanIHXw0=", "owner": "numtide", "repo": "flake-utils", - "rev": "a1720a10a6cfe8234c0e93907ffe81be440f4cef", + "rev": "919d646de7be200f3bf08cb76ae1f09402b6f9b4", "type": "github" }, "original": { @@ -213,11 +216,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1690269402, - "narHash": "sha256-SybA24IOGigiHfcTB5eBge4UZQI6a0z8Ah+EzD17tdk=", + "lastModified": 1690476848, + "narHash": "sha256-PSmzyuEbMxEn2uwwLYUN2l1psoJXb7jm/kfHD12Sq0k=", "owner": "nix-community", "repo": "home-manager", - "rev": "0306d5ed7e9d1662b55ec0d08afc73d4cb5eadca", + "rev": "8d243f7da13d6ee32f722a3f1afeced150b6d4da", "type": "github" }, "original": { @@ -328,11 +331,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1690235791, - "narHash": "sha256-QkPVQ859F0wXyd74A7UPYbmi4B5xYN4Ns7AQ0pvM0Wo=", + "lastModified": 1690441914, + "narHash": "sha256-Ac+kJQ5z9MDAMyzSc0i0zJDx2i3qi9NjlW5Lz285G/I=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "dfcffbd74fd6f0419370d8240e445252a39f4d10", + "rev": "db8672b8d0a2593c2405aed0c1dfa64b2a2f428f", "type": "github" }, "original": { @@ -353,11 +356,11 @@ "nixpkgs-stable": "nixpkgs-stable" }, "locked": { - "lastModified": 1689668210, - "narHash": "sha256-XAATwDkaUxH958yXLs1lcEOmU6pSEIkatY3qjqk8X0E=", + "lastModified": 1690464206, + "narHash": "sha256-38V4kmOh6ikpfGiAS+Kt2H/TA2DubSqE66veP/jmB4Q=", "owner": "cachix", "repo": "pre-commit-hooks.nix", - "rev": "eb433bff05b285258be76513add6f6c57b441775", + "rev": "9289996dcac62fd45836db7c07b87d2521eb526d", "type": "github" }, "original": { @@ -472,11 +475,11 @@ ] }, "locked": { - "lastModified": 1686189967, - "narHash": "sha256-MKEIclafqC6oXxaP+w0zDtdVEmW3WCPgHzhnLyt7ijU=", + "lastModified": 1690483941, + "narHash": "sha256-/Fo0i4QNWkTpAB+4Dxd/mG6poy2THZ61dTgHmSyQets=", "owner": "walkah", "repo": "workon", - "rev": "ea4766fa8dc5219804ebbdb6df411586fba402e9", + "rev": "3ad1dcfa4fc8192391210640c2c22ef2c0a17d36", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 0c797f5..fb6346d 100644 --- a/flake.nix +++ b/flake.nix @@ -44,6 +44,7 @@ inputs.nixpkgs.follows = "nixpkgs"; inputs.home-manager.follows = "home-manager"; inputs.flake-utils.follows = "flake-utils"; + inputs.pre-commit-hooks.follows = "pre-commit-hooks"; }; workon = { @@ -52,211 +53,28 @@ }; }; - outputs = - { self - , nixpkgs - , deploy-rs - , darwin - , flake-utils - , home-manager - , nixos-generators - , pre-commit-hooks - , dotfiles - , workon - , ... - }@inputs: - let - overlays = [ - (self: _super: { - workon = workon.packages.${self.system}.default; - }) + outputs = { self, nixpkgs, flake-utils, deploy-rs, pre-commit-hooks, workon, ... }@inputs: + flake-utils.lib.eachDefaultSystem + (system: { + pkgs = import nixpkgs { + inherit system; + overlays = [ self.overlays.default ]; + config.allowUnfree = true; + }; + checks = import ./nix/checks.nix { inherit self system pre-commit-hooks; }; + devShells = import ./nix/shells.nix { inherit self system; }; + formatter = self.pkgs.nixpkgs-fmt; + }) + // { + hosts = import ./nix/hosts.nix; + overlays.default = nixpkgs.lib.composeManyExtensions [ + deploy-rs.overlay + workon.overlays.default ]; - mkSystem = hostName: system: modules: - nixpkgs.lib.nixosSystem { - inherit system; - modules = [ - home-manager.nixosModules.home-manager - (_: { - networking.hostName = hostName; - nixpkgs.overlays = overlays; - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - }) - ] ++ modules; - specialArgs = inputs; - }; - mkDarwin = hostName: system: modules: - darwin.lib.darwinSystem { - inherit system; - modules = [ - home-manager.darwinModules.home-manager - (_: { - networking.hostName = hostName; - nixpkgs.overlays = overlays; - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - }) - ] ++ modules; - specialArgs = inputs; - }; - in - flake-utils.lib.eachDefaultSystem - (system: - let - pkgs = nixpkgs.legacyPackages.${system}; - darwin-local = pkgs.writeScriptBin "darwin-local" '' - #!${pkgs.stdenv.shell} - nix build .#darwinConfigurations.$(hostname -s).system - ./result/sw/bin/darwin-rebuild switch --flake . - ''; - - in - { - checks = { - pre-commit-check = pre-commit-hooks.lib.${system}.run { - src = ./.; - hooks = { - deadnix.enable = true; - nixpkgs-fmt.enable = true; - statix.enable = true; - }; - }; - }; - - packages = { - digitalocean = nixos-generators.nixosGenerate { - system = "x86_64-linux"; - format = "do"; - modules = [ - ./modules/base - ./users - ]; - }; - }; - - devShells.default = pkgs.mkShell { - name = "athens"; - buildInputs = with pkgs; [ - darwin-local - deploy-rs.packages.${system}.deploy-rs - deadnix - nil - nixpkgs-fmt - statix - sops - ]; - - inherit (self.checks.${system}.pre-commit-check) shellHook; - }; - - formatter = pkgs.nixpkgs-fmt; - }) // { - nixosConfigurations = { - # Aristotle - agent = mkSystem "agent" "aarch64-linux" [ ./hosts/aristotle/configuration.nix ]; - form = mkSystem "form" "aarch64-linux" [ ./hosts/aristotle/configuration.nix ]; - matter = mkSystem "matter" "aarch64-linux" [ ./hosts/aristotle/configuration.nix ]; - purpose = mkSystem "purpose" "aarch64-linux" [ ./hosts/aristotle/configuration.nix ]; - - plato = mkSystem "plato" "x86_64-linux" [ ./hosts/plato/configuration.nix ]; - socrates = mkSystem "socrates" "x86_64-linux" [ ./hosts/socrates/configuration.nix ]; - }; - darwinConfigurations = { - epicurus = mkDarwin "epicurus" "aarch64-darwin" [ ./hosts/epicurus/darwin-configuration.nix ]; - heraclitus = mkDarwin "heraclitus" "aarch64-darwin" [ ./hosts/heraclitus/darwin-configuration.nix ]; - }; - homeConfigurations = { - "walkah@epicurus" = dotfiles.homeConfigurations.aarch64-darwin.walkah; - "walkah@heraclitus" = dotfiles.homeConfigurations.aarch64-darwin.walkah; - }; - - deploy.nodes = { - agent = { - hostname = "agent"; - sshUser = "root"; - profiles.system = { - user = "root"; - path = deploy-rs.lib.aarch64-linux.activate.nixos - self.nixosConfigurations.agent; - }; - }; - - form = { - hostname = "form"; - sshUser = "root"; - profiles.system = { - user = "root"; - path = deploy-rs.lib.aarch64-linux.activate.nixos - self.nixosConfigurations.form; - }; - }; - - matter = { - hostname = "matter"; - sshUser = "root"; - profiles.system = { - user = "root"; - path = deploy-rs.lib.aarch64-linux.activate.nixos - self.nixosConfigurations.matter; - }; - }; - - purpose = { - hostname = "purpose"; - sshUser = "root"; - profiles.system = { - user = "root"; - path = deploy-rs.lib.aarch64-linux.activate.nixos - self.nixosConfigurations.purpose; - }; - }; - - plato = { - hostname = "plato"; - profiles = { - system = { - user = "root"; - path = deploy-rs.lib.x86_64-linux.activate.nixos - self.nixosConfigurations.plato; - }; - walkah = { - user = "walkah"; - path = deploy-rs.lib.x86_64-linux.activate.home-manager - dotfiles.homeConfigurations.x86_64-linux.walkah; - }; - }; - }; - - socrates = { - hostname = "socrates"; - profiles = { - system = { - user = "root"; - path = deploy-rs.lib.x86_64-linux.activate.nixos - self.nixosConfigurations.socrates; - }; - walkah = { - user = "walkah"; - path = deploy-rs.lib.x86_64-linux.activate.home-manager - dotfiles.homeConfigurations.x86_64-linux.walkah; - }; - }; - }; - - epicurus = { - hostname = "epicurus"; - profiles = { - system = { - user = "root"; - path = deploy-rs.lib.aarch64-darwin.activate.darwin self.darwinConfigurations.epicurus; - }; - walkah = { - user = "walkah"; - path = deploy-rs.lib.aarch64-darwin.activate.home-manager dotfiles.homeConfigurations.aarch64-darwin.walkah; - }; - }; - }; - }; + darwinConfigurations = import ./nix/darwin.nix inputs; + homeConfigurations = import ./nix/home.nix inputs; + nixosConfigurations = import ./nix/nixos.nix inputs; + deploy = import ./nix/deploy.nix inputs; }; } diff --git a/modules/base/darwin.nix b/modules/base/darwin.nix index fb2f2b0..21f4e6d 100644 --- a/modules/base/darwin.nix +++ b/modules/base/darwin.nix @@ -1,4 +1,4 @@ -{ pkgs, ... }: { +{ pkgs, dotfiles, ... }: { imports = [ ./common.nix ]; @@ -42,6 +42,11 @@ }; }; + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.users.walkah = import "${dotfiles}/home.nix"; + + nixpkgs.config.packageOverrides = pkgs: { haskellPackages = pkgs.haskellPackages.override { overrides = _self: super: { diff --git a/modules/dev/default.nix b/modules/dev/default.nix index 965ed13..1cbd879 100644 --- a/modules/dev/default.nix +++ b/modules/dev/default.nix @@ -24,7 +24,6 @@ cachix nil niv - nixfmt nixpkgs-fmt # Node/JS diff --git a/nix/checks.nix b/nix/checks.nix new file mode 100644 index 0000000..8cc714d --- /dev/null +++ b/nix/checks.nix @@ -0,0 +1,12 @@ +{ self, system, pre-commit-hooks, ... }: +with self.pkgs.${system}; +{ + pre-commit-check = pre-commit-hooks.lib.${system}.run { + src = ./.; + hooks = { + deadnix.enable = true; + nixpkgs-fmt.enable = true; + statix.enable = true; + }; + }; +} // (deploy-rs.lib.deployChecks self.deploy) diff --git a/nix/darwin.nix b/nix/darwin.nix new file mode 100644 index 0000000..9bb5747 --- /dev/null +++ b/nix/darwin.nix @@ -0,0 +1,22 @@ +{ self, darwin, home-manager, dotfiles, ... }: +let + mkDarwin = hostName: modules: + let + hostSystem = self.hosts.${hostName}.system; + in + darwin.lib.darwinSystem { + system = hostSystem; + modules = [ + home-manager.darwinModules.home-manager + (_: { + networking.hostName = hostName; + nixpkgs.pkgs = self.pkgs.${hostSystem}; + }) + ] ++ modules; + specialArgs = { inherit dotfiles home-manager; }; + }; +in +{ + epicurus = mkDarwin "epicurus" [ ../hosts/epicurus/darwin-configuration.nix ]; + heraclitus = mkDarwin "heraclitus" [ ../hosts/heraclitus/darwin-configuration.nix ]; +} diff --git a/nix/deploy.nix b/nix/deploy.nix new file mode 100644 index 0000000..20f4675 --- /dev/null +++ b/nix/deploy.nix @@ -0,0 +1,25 @@ +{ self, deploy-rs, ... }: +let + mkDeploy = hostName: + let + inherit (self.hosts.${hostName}) type address system sshUser; + inherit (deploy-rs.lib.${system}) activate; + in + { + hostname = address; + profiles.system.user = "root"; + profiles.system.sshUser = sshUser; + profiles.system.path = activate.${type} self."${type}Configurations".${hostName}; + }; +in +{ + nodes = { + socrates = mkDeploy "socrates"; + plato = mkDeploy "plato"; + agent = mkDeploy "agent"; + form = mkDeploy "form"; + matter = mkDeploy "matter"; + purpose = mkDeploy "purpose"; + epicurus = mkDeploy "epicurus"; + }; +} diff --git a/nix/home.nix b/nix/home.nix new file mode 100644 index 0000000..ce81f07 --- /dev/null +++ b/nix/home.nix @@ -0,0 +1,5 @@ +{ dotfiles, ... }: +{ + "walkah@epicurus" = dotfiles.homeConfigurations.aarch64-darwin.walkah; + "walkah@heraclitus" = dotfiles.homeConfigurations.aarch64-darwin.walkah; +} diff --git a/nix/hosts.nix b/nix/hosts.nix new file mode 100644 index 0000000..1fbfc8d --- /dev/null +++ b/nix/hosts.nix @@ -0,0 +1,49 @@ +{ + socrates = { + type = "nixos"; + address = "100.103.57.96"; + system = "x86_64-linux"; + sshUser = "walkah"; + }; + plato = { + type = "nixos"; + address = "100.111.208.75"; + system = "x86_64-linux"; + sshUser = "walkah"; + }; + agent = { + type = "nixos"; + address = "100.95.167.126"; + system = "aarch64-linux"; + sshUser = "root"; + }; + form = { + type = "nixos"; + address = "100.87.220.71"; + system = "aarch64-linux"; + sshUser = "root"; + }; + matter = { + type = "nixos"; + address = "100.126.255.109"; + system = "aarch64-linux"; + sshUser = "root"; + }; + purpose = { + type = "nixos"; + address = "100.74.59.80"; + system = "aarch64-linux"; + sshUser = "root"; + }; + epicurus = { + type = "darwin"; + address = "100.66.26.116"; + system = "aarch64-darwin"; + sshUser = "walkah"; + }; + heraclitus = { + type = "darwin"; + address = "100.107.57.128"; + system = "aarch64-darwin"; + }; +} diff --git a/nix/nixos.nix b/nix/nixos.nix new file mode 100644 index 0000000..d04d60c --- /dev/null +++ b/nix/nixos.nix @@ -0,0 +1,28 @@ +{ self, dotfiles, nixpkgs, home-manager, nixos-hardware, sops-nix, ... }: +let + mkSystem = hostName: modules: + let + hostSystem = self.hosts.${hostName}.system; + in + nixpkgs.lib.nixosSystem { + system = hostSystem; + modules = [ + home-manager.nixosModules.home-manager + (_: { + networking.hostName = hostName; + nixpkgs.pkgs = self.pkgs.${hostSystem}; + }) + ] ++ modules; + specialArgs = { inherit dotfiles nixos-hardware sops-nix; }; + }; +in +{ + # Aristotle + agent = mkSystem "agent" [ ../hosts/aristotle/configuration.nix ]; + form = mkSystem "form" [ ../hosts/aristotle/configuration.nix ]; + matter = mkSystem "matter" [ ../hosts/aristotle/configuration.nix ]; + purpose = mkSystem "purpose" [ ../hosts/aristotle/configuration.nix ]; + + plato = mkSystem "plato" [ ../hosts/plato/configuration.nix ]; + socrates = mkSystem "socrates" [ ../hosts/socrates/configuration.nix ]; +} diff --git a/nix/shells.nix b/nix/shells.nix new file mode 100644 index 0000000..207513f --- /dev/null +++ b/nix/shells.nix @@ -0,0 +1,27 @@ +{ system, self, ... }: + +with self.pkgs.${system}; + +let + darwin-local = writeScriptBin "darwin-local" '' + #!${stdenv.shell} + nix build .#darwinConfigurations.$(hostname -s).system + ./result/sw/bin/darwin-rebuild switch --flake . + ''; +in +{ + default = mkShell { + name = "athens"; + buildInputs = with pkgs; [ + darwin-local + deploy-rs.deploy-rs + deadnix + nil + nixpkgs-fmt + statix + sops + ]; + + inherit (self.checks.${system}.pre-commit-check) shellHook; + }; +} diff --git a/users/walkah.nix b/users/walkah.nix index 6cf26c0..043f3d2 100644 --- a/users/walkah.nix +++ b/users/walkah.nix @@ -1,4 +1,4 @@ -{ pkgs, ... }: +{ pkgs, dotfiles, ... }: { users.users.walkah = { @@ -10,4 +10,8 @@ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM8YMax7PGIrcPNIHkpuNRFgn3HJK6Wepm+ycZWO6jfR walkah@walkah-ipadpro11" ]; }; + + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.users.walkah = import "${dotfiles}/home.nix"; }