-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathflake.nix
More file actions
130 lines (107 loc) · 3.7 KB
/
flake.nix
File metadata and controls
130 lines (107 loc) · 3.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
{
description = "Openclaw - Personal AI assistant for NixOS/Home Manager";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
llm-agents = {
url = "github:numtide/llm-agents.nix";
inputs.nixpkgs.follows = "nixpkgs";
};
systems.url = "github:nix-systems/default";
};
outputs =
{
self,
nixpkgs,
home-manager,
llm-agents,
systems,
}:
let
eachSystem = nixpkgs.lib.genAttrs (import systems);
# Package for each system
openclawFor = system: llm-agents.packages.${system}.openclaw;
in
{
# ============ MODULES ============
homeManagerModules.openclaw = import ./modules/home-manager {
inherit llm-agents;
configSchemaPackage = ./packages/config-schema.nix;
};
homeManagerModules.default = self.homeManagerModules.openclaw;
# NixOS system-level module (uses User= directive)
nixosModules.openclaw = import ./modules/nixos {
inherit llm-agents;
configSchemaPackage = ./packages/config-schema.nix;
};
nixosModules.default = self.nixosModules.openclaw;
# Darwin support via Home Manager
darwinModules.openclaw = self.homeManagerModules.openclaw;
darwinModules.default = self.darwinModules.openclaw;
# ============ PACKAGES ============
packages = eachSystem (
system:
let
pkgs = nixpkgs.legacyPackages.${system};
openclaw = openclawFor system;
in
{
inherit openclaw;
default = openclaw;
openclaw-config-schema = pkgs.callPackage ./packages/config-schema.nix {
inherit openclaw;
};
}
);
# ============ OVERLAYS ============
overlays.default = final: prev: {
openclaw = openclawFor prev.stdenv.hostPlatform.system;
};
# ============ CHECKS ============
checks = eachSystem (
system:
let
pkgs = nixpkgs.legacyPackages.${system};
isLinux = pkgs.stdenv.isLinux;
in
{
# Schema validation (basic)
config-schema = pkgs.callPackage ./checks/config-schema.nix {
configSchema = self.packages.${system}.openclaw-config-schema;
};
# Schema validation with channel configs (tests nested defaults)
config-schema-channels = pkgs.callPackage ./checks/config-schema-channels.nix {
configSchema = self.packages.${system}.openclaw-config-schema;
};
# Home Manager module evaluation
hm-module-eval = import ./checks/module-eval.nix {
inherit pkgs home-manager;
openclawModule = self.homeManagerModules.openclaw;
};
# NixOS module evaluation (Linux only - uses lib.nixosSystem)
nixos-module-eval = import ./checks/nixos-module-eval.nix {
inherit pkgs nixpkgs;
lib = nixpkgs.lib;
nixosModule = self.nixosModules.openclaw;
};
}
// nixpkgs.lib.optionalAttrs isLinux {
# NixOS VM integration test (Linux only, requires KVM)
nixos-vm-test = import ./checks/nixos-vm-test.nix {
inherit pkgs;
nixosModule = self.nixosModules.openclaw;
};
}
);
# ============ TEMPLATES ============
templates.default = {
path = ./templates/starter;
description = "Starter configuration for openclaw.nix";
};
# ============ FORMATTER ============
formatter = eachSystem (system: nixpkgs.legacyPackages.${system}.nixfmt);
};
}