ALPHA: wire is a tool to deploy nixos systems
wire.althaea.zone/
1{ getSystem, inputs, ... }:
2{
3 perSystem =
4 {
5 pkgs,
6 lib,
7 self',
8 buildRustProgram,
9 system,
10 ...
11 }:
12 let
13 cleanSystem = system: lib.replaceStrings [ "-" ] [ "_" ] system;
14 agents = lib.strings.concatMapStrings (
15 system: "--set WIRE_KEY_AGENT_${cleanSystem system} ${(getSystem system).packages.agent} "
16 ) (import inputs.linux-systems);
17
18 options = pkgs.callPackage ../../doc/options.nix { };
19
20 cliManpage = pkgs.runCommand "cli-manpage" { } ''
21 mkdir $out
22
23 ${lib.getExe' self'.packages.wire-unwrapped-dev "wire"} apply --roff $out
24 '';
25 in
26 {
27 packages = {
28 default = self'.packages.wire;
29
30 wire-unwrapped-dev = buildRustProgram {
31 name = "wire";
32 pname = "wire";
33 cargoExtraArgs = "-p wire";
34 doCheck = true;
35 CARGO_PROFILE = "dev";
36 nativeBuildInputs = [
37 pkgs.sqlx-cli
38 ];
39 preBuild = ''
40 export DATABASE_URL=sqlite:./db.sqlite3
41 sqlx database create
42 sqlx migrate run --source ./crates/core/src/cache/migrations/
43 '';
44 };
45
46 wire-unwrapped = self'.packages.wire-unwrapped-dev.overrideAttrs (old: {
47 CARGO_PROFILE = "release";
48 nativeBuildInputs = old.nativeBuildInputs ++ [
49 pkgs.installShellFiles
50 pkgs.ronn
51 ];
52 postInstall = ''
53 installShellCompletion --cmd wire \
54 --bash <(COMPLETE=bash $out/bin/wire) \
55 --fish <(COMPLETE=fish $out/bin/wire) \
56 --zsh <(COMPLETE=zsh $out/bin/wire)
57
58 mkdir -p $out/share/man/man1/
59 mkdir -p $out/share/man/man5/
60
61 cp ${options} wire.5
62 cp ${cliManpage}/* $out/share/man/man1/
63
64 ronn -r \
65 --manual="Module Options" \
66 --name="wire" \
67 --section="5" \
68 --date="2026-01-1" \
69 -o $out/share/man/man5/ \
70 wire.5
71
72 rm wire.5
73 '';
74 });
75
76 wire-unwrapped-perf = buildRustProgram {
77 name = "wire";
78 pname = "wire";
79 CARGO_PROFILE = "profiling";
80 cargoExtraArgs = "-p wire";
81 };
82
83 wire = pkgs.symlinkJoin {
84 name = "wire";
85 paths = [ self'.packages.wire-unwrapped ];
86 nativeBuildInputs = [
87 pkgs.makeWrapper
88 ];
89 postBuild = ''
90 wrapProgram $out/bin/wire ${agents}
91 '';
92 meta.mainProgram = "wire";
93 };
94
95 wire-small = pkgs.symlinkJoin {
96 name = "wire";
97 paths = [ self'.packages.wire-unwrapped ];
98 nativeBuildInputs = [
99 pkgs.makeWrapper
100 ];
101 postBuild = ''
102 wrapProgram $out/bin/wire --set WIRE_KEY_AGENT_${cleanSystem system} ${self'.packages.agent}
103 '';
104 meta.mainProgram = "wire";
105 };
106
107 wire-dev = self'.packages.wire.overrideAttrs {
108 paths = [ self'.packages.wire-unwrapped-dev ];
109 };
110
111 wire-small-dev = self'.packages.wire-small.overrideAttrs {
112 paths = [ self'.packages.wire-unwrapped-dev ];
113 };
114
115 wire-small-perf = self'.packages.wire-small.overrideAttrs {
116 paths = [ self'.packages.wire-unwrapped-perf ];
117 };
118 };
119 };
120}