diff --git a/flake.lock b/flake.lock index caccc7d..e14f4e4 100644 --- a/flake.lock +++ b/flake.lock @@ -60,6 +60,27 @@ "type": "github" } }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1677714448, + "narHash": "sha256-Hq8qLs8xFu28aDjytfxjdC96bZ6pds21Yy09mSC156I=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "dc531e3a9ce757041e1afaff8ee932725ca60002", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "ref": "main", + "repo": "flake-parts", + "type": "github" + } + }, "futils": { "locked": { "lastModified": 1678901627, @@ -185,6 +206,7 @@ "root": { "inputs": { "agenix": "agenix", + "flake-parts": "flake-parts", "futils": "futils", "home-manager": "home-manager", "nixpkgs": "nixpkgs", diff --git a/flake.nix b/flake.nix index 63ade9a..058ac27 100644 --- a/flake.nix +++ b/flake.nix @@ -11,6 +11,16 @@ }; }; + flake-parts = { + type = "github"; + owner = "hercules-ci"; + repo = "flake-parts"; + ref = "main"; + inputs = { + nixpkgs-lib.follows = "nixpkgs"; + }; + }; + futils = { type = "github"; owner = "numtide"; @@ -60,6 +70,7 @@ inputs @ { self , agenix + , flake-parts , futils , home-manager , nixpkgs diff --git a/flake/apps.nix b/flake/apps.nix new file mode 100644 index 0000000..f8dc2de --- /dev/null +++ b/flake/apps.nix @@ -0,0 +1,9 @@ +{ inputs, ... }: +{ + perSystem = { self', ... }: { + apps = { + diff-flake = inputs.futils.lib.mkApp { drv = self'.packages.diff-flake; }; + default = self'.apps.diff-flake; + }; + }; +} diff --git a/flake/checks.nix b/flake/checks.nix index ea77620..4a8c04f 100644 --- a/flake/checks.nix +++ b/flake/checks.nix @@ -1,16 +1,24 @@ -{ self, pre-commit-hooks, ... }: -system: +{ self, inputs, ... }: { - pre-commit = pre-commit-hooks.lib.${system}.run { - src = self; + imports = [ + inputs.pre-commit-hooks.flakeModule + ]; - hooks = { - nixpkgs-fmt = { - enable = true; - }; + perSystem = { system, ... }: { + pre-commit = { + # Add itself to `nix flake check` + check.enable = true; - shellcheck = { - enable = true; + settings = { + hooks = { + nixpkgs-fmt = { + enable = true; + }; + + shellcheck = { + enable = true; + }; + }; }; }; }; diff --git a/flake/default.nix b/flake/default.nix index 1e0ef12..50eec92 100644 --- a/flake/default.nix +++ b/flake/default.nix @@ -1,4 +1,5 @@ { self +, flake-parts , futils , home-manager , nixpkgs @@ -8,7 +9,7 @@ let inherit (self) lib; - inherit (futils.lib) eachSystem system; + inherit (futils.lib) system; mySystems = [ system.aarch64-darwin @@ -16,65 +17,18 @@ let system.x86_64-darwin system.x86_64-linux ]; - - eachMySystem = eachSystem mySystems; - - systemDependant = system: { - apps = { - diff-flake = futils.lib.mkApp { drv = self.packages.${system}.diff-flake; }; - default = self.apps.${system}.diff-flake; - }; - - checks = import ./checks.nix inputs system; - - devShells = import ./dev-shells.nix inputs system; - - packages = import ./packages.nix inputs system; - - # Work-around for https://github.com/nix-community/home-manager/issues/3075 - legacyPackages = { - homeConfigurations = { - ambroisie = home-manager.lib.homeManagerConfiguration { - # Work-around for home-manager - # * not letting me set `lib` as an extraSpecialArgs - # * not respecting `nixpkgs.overlays` [1] - # [1]: https://github.com/nix-community/home-manager/issues/2954 - pkgs = import nixpkgs { - inherit system; - - overlays = (lib.attrValues self.overlays) ++ [ - nur.overlay - ]; - }; - - modules = [ - "${self}/home" - { - # The basics - home.username = "ambroisie"; - home.homeDirectory = "/home/ambroisie"; - # Let Home Manager install and manage itself. - programs.home-manager.enable = true; - # This is a generic linux install - targets.genericLinux.enable = true; - } - ]; - - extraSpecialArgs = { - # Inject inputs to use them in global registry - inherit inputs; - }; - }; - }; - }; - }; - - systemIndependant = { - lib = import ./lib.nix inputs; - - overlays = import ./overlays.nix inputs; - - nixosConfigurations = import ./nixos.nix inputs; - }; in -(eachMySystem systemDependant) // systemIndependant +flake-parts.lib.mkFlake { inherit inputs; } { + systems = mySystems; + + imports = [ + ./apps.nix + ./checks.nix + ./dev-shells.nix + ./home-manager.nix + ./lib.nix + ./nixos.nix + ./overlays.nix + ./packages.nix + ]; +} diff --git a/flake/dev-shells.nix b/flake/dev-shells.nix index 064f57d..daaa0fd 100644 --- a/flake/dev-shells.nix +++ b/flake/dev-shells.nix @@ -1,17 +1,19 @@ -{ self, nixpkgs, ... }: -system: -let - pkgs = nixpkgs.legacyPackages.${system}; -in +{ inputs, ... }: { - default = pkgs.mkShell { - name = "NixOS-config"; + perSystem = { self', config, pkgs, ... }: { + devShells = { + default = pkgs.mkShell { + name = "NixOS-config"; - nativeBuildInputs = with pkgs; [ - gitAndTools.pre-commit - nixpkgs-fmt - ]; + nativeBuildInputs = with pkgs; [ + gitAndTools.pre-commit + nixpkgs-fmt + ]; - inherit (self.checks.${system}.pre-commit) shellHook; + shellHook = '' + ${config.pre-commit.installationScript} + ''; + }; + }; }; } diff --git a/flake/home-manager.nix b/flake/home-manager.nix new file mode 100644 index 0000000..c55c8dd --- /dev/null +++ b/flake/home-manager.nix @@ -0,0 +1,61 @@ +{ self, inputs, lib, ... }: +let + defaultModules = [ + # Include generic settings + "${self}/home" + { + # Basic user information defaults + home.username = lib.mkDefault "ambroisie"; + home.homeDirectory = lib.mkDefault "/home/ambroisie"; + + # Make it a Linux installation by default + targets.genericLinux.enable = lib.mkDefault true; + + # Enable home-manager + programs.home-manager.enable = true; + } + ]; + + mkHome = name: system: inputs.home-manager.lib.homeManagerConfiguration { + # Work-around for home-manager + # * not letting me set `lib` as an extraSpecialArgs + # * not respecting `nixpkgs.overlays` [1] + # [1]: https://github.com/nix-community/home-manager/issues/2954 + pkgs = import inputs.nixpkgs { + inherit system; + + overlays = (lib.attrValues self.overlays) ++ [ + inputs.nur.overlay + ]; + }; + + modules = defaultModules ++ [ + "${self}/hosts/homes/${name}" + ]; + + extraSpecialArgs = { + # Inject inputs to use them in global registry + inherit inputs; + }; + }; + + hosts = { + "ambroisie@ambroisie" = "x86_64-linux"; # Unfortunate naming here... + }; +in +{ + perSystem = { system, ... }: { + # Work-around for https://github.com/nix-community/home-manager/issues/3075 + legacyPackages = { + homeConfigurations = + let + filteredHosts = lib.filterAttrs (_: v: v == system) hosts; + allHosts = filteredHosts // { + # Default configuration + ambroisie = system; + }; + in + lib.mapAttrs mkHome allHosts; + }; + }; +} diff --git a/flake/lib.nix b/flake/lib.nix index 083c56c..12e89c3 100644 --- a/flake/lib.nix +++ b/flake/lib.nix @@ -1,7 +1,11 @@ -{ self, nixpkgs, ... } @ inputs: +{ self, inputs, ... }: let + inherit (inputs) nixpkgs; + lib = nixpkgs.lib.extend (final: _: { my = import "${self}/lib" { inherit inputs; pkgs = nixpkgs; lib = final; }; }); in -lib +{ + flake.lib = lib; +} diff --git a/flake/nixos.nix b/flake/nixos.nix index 2b117e1..2d9d18b 100644 --- a/flake/nixos.nix +++ b/flake/nixos.nix @@ -1,4 +1,4 @@ -{ self, nixpkgs, nur, ... } @ inputs: +{ self, inputs, ... }: let inherit (self) lib; @@ -9,7 +9,7 @@ let }) { nixpkgs.overlays = (lib.attrValues self.overlays) ++ [ - nur.overlay + inputs.nur.overlay ]; } # Include generic settings @@ -21,7 +21,7 @@ let buildHost = name: system: lib.nixosSystem { inherit system; modules = defaultModules ++ [ - "${self}/machines/${name}" + "${self}/hosts/nixos/${name}" ]; specialArgs = { # Use my extended lib in NixOS configuration @@ -31,7 +31,9 @@ let }; }; in -lib.mapAttrs buildHost { - aramis = "x86_64-linux"; - porthos = "x86_64-linux"; +{ + flake.nixosConfigurations = lib.mapAttrs buildHost { + aramis = "x86_64-linux"; + porthos = "x86_64-linux"; + }; } diff --git a/flake/overlays.nix b/flake/overlays.nix index bb5e546..1a5e8ba 100644 --- a/flake/overlays.nix +++ b/flake/overlays.nix @@ -1,5 +1,4 @@ { self, ... }: - let default-overlays = import "${self}/overlays"; @@ -13,4 +12,6 @@ let }; }; in -default-overlays // additional-overlays +{ + flake.overlays = default-overlays // additional-overlays; +} diff --git a/flake/packages.nix b/flake/packages.nix index 1eccfa3..3515071 100644 --- a/flake/packages.nix +++ b/flake/packages.nix @@ -1,10 +1,13 @@ -{ self, futils, nixpkgs, ... }: -system: -let - inherit (futils.lib) filterPackages flattenTree; - pkgs = nixpkgs.legacyPackages.${system}; - packages = import "${self}/pkgs" { inherit pkgs; }; - flattenedPackages = flattenTree packages; - finalPackages = filterPackages system flattenedPackages; -in -finalPackages +{ self, inputs, ... }: +{ + perSystem = { pkgs, system, ... }: { + packages = + let + inherit (inputs.futils.lib) filterPackages flattenTree; + packages = import "${self}/pkgs" { inherit pkgs; }; + flattenedPackages = flattenTree packages; + finalPackages = filterPackages system flattenedPackages; + in + finalPackages; + }; +} diff --git a/hosts/homes/ambroisie/default.nix b/hosts/homes/ambroisie/default.nix new file mode 100644 index 0000000..42ea5b8 --- /dev/null +++ b/hosts/homes/ambroisie/default.nix @@ -0,0 +1,5 @@ +# Default home-manager configuration +{ ... }: +{ + # Default configuration, nothing to do +} diff --git a/hosts/homes/ambroisie@ambroisie/default.nix b/hosts/homes/ambroisie@ambroisie/default.nix new file mode 100644 index 0000000..e4dabcf --- /dev/null +++ b/hosts/homes/ambroisie@ambroisie/default.nix @@ -0,0 +1,16 @@ +# Google Cloudtop configuration +{ ... }: +{ + # Google specific configuration + home.homeDirectory = "/usr/local/google/home/ambroisie"; + + home.sessionVariables = { + # Some tooling (e.g: SSH) need to use this library + LD_PRELOAD = "/lib/x86_64-linux-gnu/libnss_cache.so.2\${LD_PRELOAD:+:}$LD_PRELOAD"; + }; + + my.home = { + # I don't need a GPG agent + gpg.enable = false; + }; +} diff --git a/machines/aramis/boot.nix b/hosts/nixos/aramis/boot.nix similarity index 100% rename from machines/aramis/boot.nix rename to hosts/nixos/aramis/boot.nix diff --git a/machines/aramis/default.nix b/hosts/nixos/aramis/default.nix similarity index 100% rename from machines/aramis/default.nix rename to hosts/nixos/aramis/default.nix diff --git a/machines/aramis/hardware.nix b/hosts/nixos/aramis/hardware.nix similarity index 100% rename from machines/aramis/hardware.nix rename to hosts/nixos/aramis/hardware.nix diff --git a/machines/aramis/home.nix b/hosts/nixos/aramis/home.nix similarity index 100% rename from machines/aramis/home.nix rename to hosts/nixos/aramis/home.nix diff --git a/machines/aramis/install.sh b/hosts/nixos/aramis/install.sh similarity index 100% rename from machines/aramis/install.sh rename to hosts/nixos/aramis/install.sh diff --git a/machines/aramis/networking.nix b/hosts/nixos/aramis/networking.nix similarity index 100% rename from machines/aramis/networking.nix rename to hosts/nixos/aramis/networking.nix diff --git a/machines/aramis/profiles.nix b/hosts/nixos/aramis/profiles.nix similarity index 100% rename from machines/aramis/profiles.nix rename to hosts/nixos/aramis/profiles.nix diff --git a/machines/aramis/programs.nix b/hosts/nixos/aramis/programs.nix similarity index 100% rename from machines/aramis/programs.nix rename to hosts/nixos/aramis/programs.nix diff --git a/machines/aramis/services.nix b/hosts/nixos/aramis/services.nix similarity index 100% rename from machines/aramis/services.nix rename to hosts/nixos/aramis/services.nix diff --git a/machines/aramis/sound.nix b/hosts/nixos/aramis/sound.nix similarity index 100% rename from machines/aramis/sound.nix rename to hosts/nixos/aramis/sound.nix diff --git a/machines/porthos/boot.nix b/hosts/nixos/porthos/boot.nix similarity index 100% rename from machines/porthos/boot.nix rename to hosts/nixos/porthos/boot.nix diff --git a/machines/porthos/default.nix b/hosts/nixos/porthos/default.nix similarity index 100% rename from machines/porthos/default.nix rename to hosts/nixos/porthos/default.nix diff --git a/machines/porthos/hardware.nix b/hosts/nixos/porthos/hardware.nix similarity index 100% rename from machines/porthos/hardware.nix rename to hosts/nixos/porthos/hardware.nix diff --git a/machines/porthos/home.nix b/hosts/nixos/porthos/home.nix similarity index 100% rename from machines/porthos/home.nix rename to hosts/nixos/porthos/home.nix diff --git a/machines/porthos/install.sh b/hosts/nixos/porthos/install.sh similarity index 100% rename from machines/porthos/install.sh rename to hosts/nixos/porthos/install.sh diff --git a/machines/porthos/networking.nix b/hosts/nixos/porthos/networking.nix similarity index 100% rename from machines/porthos/networking.nix rename to hosts/nixos/porthos/networking.nix diff --git a/machines/porthos/services.nix b/hosts/nixos/porthos/services.nix similarity index 100% rename from machines/porthos/services.nix rename to hosts/nixos/porthos/services.nix diff --git a/machines/porthos/ssh/drone.pub b/hosts/nixos/porthos/ssh/drone.pub similarity index 100% rename from machines/porthos/ssh/drone.pub rename to hosts/nixos/porthos/ssh/drone.pub diff --git a/machines/porthos/users.nix b/hosts/nixos/porthos/users.nix similarity index 100% rename from machines/porthos/users.nix rename to hosts/nixos/porthos/users.nix