ALPHA: wire is a tool to deploy nixos systems wire.althaea.zone/
at trunk 120 lines 3.4 kB view raw
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}