summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--flake.nix116
1 files changed, 59 insertions, 57 deletions
diff --git a/flake.nix b/flake.nix
index dbffac2..d273108 100644
--- a/flake.nix
+++ b/flake.nix
@@ -221,63 +221,65 @@
221 221
222 buildWrtApp = { 222 buildWrtApp = {
223 type = "app"; 223 type = "app";
224 program = toString (pkgs.writeShellScript "build-wrapper" (let 224 program = toString (pkgs.writers.writePython3 "build" {} ''
225 buildPy = pkgs.writers.writePython3 "build" {} '' 225 from tempfile import TemporaryDirectory
226 from tempfile import TemporaryDirectory 226 import os
227 import os 227 import subprocess
228 import subprocess 228 import argparse
229 import argparse 229 from pathlib import Path
230 from pathlib import Path 230
231 231 parser = argparse.ArgumentParser(prog="build",
232 parser = argparse.ArgumentParser(prog="build", 232 formatter_class=argparse.ArgumentDefaultsHelpFormatter # noqa: E501
233 formatter_class=argparse.ArgumentDefaultsHelpFormatter # noqa: E501 233 )
234 ) 234 parser.add_argument('-C', '--directory',
235 parser.add_argument('-C', '--directory', 235 dest='dir',
236 dest='dir', 236 metavar='DIRECTORY',
237 metavar='DIRECTORY', 237 type=Path,
238 type=Path, 238 default=Path('./result'),
239 default=Path('./result'), 239 help='Change to this directory before doing anything'
240 help='Change to this directory before doing anything' 240 )
241 ) 241 parser.add_argument('--copy-to',
242 parser.add_argument('--copy-to', 242 dest='copyTo',
243 dest='copyTo', 243 metavar='FILE',
244 metavar='FILE', 244 type=Path,
245 type=Path, 245 default='/srv/tftp/' + Path.cwd().name + '.bin',
246 default='/srv/tftp/' + Path.cwd().name + '.bin', 246 help='Copy result image here'
247 help='Copy result image here' 247 )
248 ) 248 parser.add_argument('--copy-to-no-sudo',
249 parser.add_argument('--copy-to-no-sudo', 249 dest='copyToSudo',
250 dest='copyToSudo', 250 action='store_false',
251 action='store_false', 251 help='Use sudo to copy result image'
252 help='Use sudo to copy result image' 252 )
253 ) 253 parser.add_argument('--copy-image',
254 parser.add_argument('--copy-image', 254 dest='image',
255 dest='image', 255 default='bin/targets/ath79/generic/openwrt-ath79-generic-ubnt_unifiac-pro-initramfs-kernel.bin', # noqa: E501
256 default='bin/targets/ath79/generic/openwrt-ath79-generic-ubnt_unifiac-pro-initramfs-kernel.bin', # noqa: E501 256 help='Which file to copy'
257 help='Which file to copy' 257 )
258 ) 258 args = parser.parse_args()
259 args = parser.parse_args() 259
260 260 if not args.dir:
261 if not args.dir: 261 args.dir = Path()
262 args.dir = Path() 262 if not args.copyTo:
263 if not args.copyTo: 263 args.copyTo = None
264 args.copyTo = None 264
265 265 args.dir.mkdir(parents=True, exist_ok=True)
266 args.dir.mkdir(parents=True, exist_ok=True) 266 os.chdir(args.dir)
267 os.chdir(args.dir) 267
268 268 with TemporaryDirectory() as tmpdir:
269 with TemporaryDirectory() as tmpdir: 269 os.environ["TMPDIR"] = f"{tmpdir}"
270 os.environ["TMPDIR"] = f"{tmpdir}" 270 subprocess.check_call('${fhs { runScript = pkgs.writeShellScript "build" ''
271 subprocess.check_call('${unpackWrt}') 271 set +x
272 subprocess.check_call('${buildWrt}') 272 set -e
273 273 ${unpackWrt}
274 if args.copyTo: 274 ${buildWrt}
275 command = ['cp', args.image, args.copyTo] 275 ''; }}/bin/openwrt-env')
276 if args.copyToSudo: 276
277 command = ['sudo', '--', *command] 277 if args.copyTo:
278 subprocess.check_call(command) 278 command = ['cp', args.image, args.copyTo]
279 ''; 279 if args.copyToSudo:
280 in "exec -- ${fhs { runScript = toString buildPy; }}/bin/openwrt-env $@")); 280 command = ['sudo', '--', *command]
281 subprocess.check_call(command)
282 '');
281 }; 283 };
282 in rec { 284 in rec {
283 devShell = pkgs.mkShell { 285 devShell = pkgs.mkShell {