2024-04-12 13:22:20 +00:00
# Clan with `flake-parts`
2024-04-10 11:33:18 +00:00
2024-04-14 12:23:11 +00:00
Clan supports integration with [flake.parts ](https://flake.parts/ ) a tool which allows composing nixos modules in a modular way.
2024-04-10 11:33:18 +00:00
2024-04-14 12:23:11 +00:00
Here's how to set up Clan using `nix flakes` and `flake-parts` .
2024-04-10 11:33:18 +00:00
## 1. Update Your Flake Inputs
2024-04-14 12:23:11 +00:00
To begin, you'll need to add `flake-parts` as a new dependency in your flake's inputs. This is alongside the already existing dependencies, such as `clan-core` and `nixpkgs` . Here's how you can update your `flake.nix` file:
2024-04-10 11:33:18 +00:00
```nix
# flake.nix
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
# New flake-parts input
flake-parts.url = "github:hercules-ci/flake-parts";
flake-parts.inputs.nixpkgs-lib.follows = "nixpkgs";
2024-06-25 11:58:38 +00:00
2024-04-10 11:33:18 +00:00
clan-core = {
url = "git+https://git.clan.lol/clan/clan-core";
inputs.nixpkgs.follows = "nixpkgs"; # Needed if your configuration uses nixpkgs unstable.
# New
inputs.flake-parts.follows = "flake-parts";
};
}
```
## 2. Import Clan-Core Flake Module
After updating your flake inputs, the next step is to import the `clan-core` flake module. This will make the [clan options ](https://git.clan.lol/clan/clan-core/src/branch/main/flakeModules/clan.nix ) available within `mkFlake` .
```nix
outputs =
inputs@{ flake-parts, ... }:
flake-parts.lib.mkFlake { inherit inputs; } (
{
2024-06-25 11:58:38 +00:00
#
2024-04-10 11:33:18 +00:00
imports = [
inputs.clan-core.flakeModules.default
];
}
);
```
### 3. Configure Clan Settings and Define Machines
Configure your clan settings and define machine configurations.
Below is a guide on how to structure this in your flake.nix:
```nix
2024-04-16 10:02:22 +00:00
outputs = inputs@{ flake-parts, clan-core, ... }:
flake-parts.lib.mkFlake { inherit inputs; } ({self, pkgs, ...}: {
# We define our own systems below. you can still use this to add system specific outputs to your flake.
# See: https://flake.parts/getting-started
systems = [];
# import clan-core modules
imports = [
clan-core.flakeModules.default
];
# Define your clan
clan = {
# Clan wide settings. (Required)
2024-06-25 11:58:38 +00:00
meta.name = ""; # Ensure to choose a unique name.
2024-04-16 10:02:22 +00:00
machines = {
jon = {
imports = [
./machines/jon/configuration.nix
2024-04-30 17:16:13 +00:00
./modules/disko.nix
2024-04-16 10:02:22 +00:00
# ... more modules
];
nixpkgs.hostPlatform = "x86_64-linux";
# Set this for clan commands use ssh i.e. `clan machines update`
clan.networking.targetHost = pkgs.lib.mkDefault "root@jon";
# remote> lsblk --output NAME,ID-LINK,FSTYPE,SIZE,MOUNTPOINT
2024-04-30 17:16:13 +00:00
disko.devices.disk.main = {
2024-04-16 10:02:22 +00:00
device = "/dev/disk/by-id/nvme-eui.e8238fa6bf530001001b448b4aec2929";
2024-04-10 11:33:18 +00:00
};
2024-04-16 10:02:22 +00:00
# There needs to be exactly one controller per clan
clan.networking.zerotier.controller.enable = true;
2024-06-25 11:58:38 +00:00
2024-04-10 11:33:18 +00:00
};
};
2024-04-16 10:02:22 +00:00
};
});
2024-04-10 11:33:18 +00:00
```
For detailed information about configuring `flake-parts` and the available options within Clan,
refer to the Clan module documentation located [here ](https://git.clan.lol/clan/clan-core/src/branch/main/flakeModules/clan.nix ).
---