From 09bca79a534fcfdca04c01bdec21f12fc7f5b560 Mon Sep 17 00:00:00 2001 From: Hermes-Neo Date: Sun, 28 Jun 2026 18:23:41 +0100 Subject: [PATCH] modernise flake: add home-manager, devShell, formatter, bump stable to 24.11 --- flake.nix | 114 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 105 insertions(+), 9 deletions(-) diff --git a/flake.nix b/flake.nix index f2c8843..ae326ac 100644 --- a/flake.nix +++ b/flake.nix @@ -1,26 +1,122 @@ { - description = "NixOS at Home - Colmena Remote Management"; + description = "NixOS at Home — Colmena Remote Management"; inputs = { + # ── Core channels ──────────────────────────────────────── nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; - nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-22.11"; + nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.11"; + + # ── Remote deployment ──────────────────────────────────── colmena.url = "github:zhaofengli/colmena"; + colmena.inputs.nixpkgs.follows = "nixpkgs"; + + # ── User environment management ────────────────────────── + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + # ── Formatter ──────────────────────────────────────────── + treefmt-nix = { + url = "github:numtide/treefmt-nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; - outputs = inputs@{ nixpkgs, colmena, ... }: + outputs = + { nixpkgs + , nixpkgs-stable + , colmena + , home-manager + , treefmt-nix + , ... + } @ inputs: + let + system = "x86_64-linux"; + lib = nixpkgs.lib; + + pkgs = import nixpkgs { + inherit system; + config.allowUnfree = true; + }; + + stable-pkgs = import nixpkgs-stable { + inherit system; + config.allowUnfree = true; + }; + + baseSpecialArgs = { + inherit inputs stable-pkgs; + }; + + mkHost = hostName: hostModules: + lib.nixosSystem { + inherit system; + specialArgs = baseSpecialArgs; + modules = + [ + home-manager.nixosModules.home-manager + { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.users.phoenix = import ./home/phoenix.nix; + home-manager.extraSpecialArgs = baseSpecialArgs; + } + ./modules/common + ] + ++ hostModules; + }; + + treefmtEval = treefmt-nix.lib.evalModule pkgs { + projectRootFile = "flake.nix"; + settings.global.excludes = [ "*.lock" "secrets.yaml" ]; + programs.nixfmt.enable = true; + }; + in { + # ── Local build / nixos-rebuild compat ────────────────── + nixosConfigurations = { + blade = mkHost "blade" [ ./hosts/blade ]; + }; + + # ── Colmena remote deployment ─────────────────────────── colmena = { meta = { nixpkgs = import nixpkgs { - system = "x86_64-linux"; - overlays = []; - }; - specialArgs = { - inherit inputs; + inherit system; + config.allowUnfree = true; }; + specialArgs = baseSpecialArgs; }; - blade = import ./hosts/blade; + blade = { ... }: { + deployment = { + targetHost = "192.168.1.70"; + targetPort = 22; + targetUser = "phoenix"; + buildOnTarget = true; + keys.phoenix.keyFile = "/home/nixos/.ssh/id_ed25519.pub"; + tags = [ "homelab" ]; + }; + imports = [ ./hosts/blade ]; + }; }; + + # ── Dev shell (enter with `nix develop`) ──────────────── + devShells.${system}.default = pkgs.mkShell { + packages = with pkgs; [ + colmena + sops + age + ssh-to-age + jq + yq + just + nixfmt-rfc-style + ]; + }; + + # ── Formatter (run with `nix fmt`) ────────────────────── + formatter = treefmtEval.config.build.wrapper; }; }