{ pkgs }: pkgs.writeShellApplication { name = "nr"; runtimeInputs = with pkgs; [ nix-output-monitor openssh coreutils nix attic-client ]; text = '' set -euo pipefail TARGET_NAME="$(hostname -s)" FLAKE_PATH="." UPLOAD_CACHE=false MAX_JOBS="''${NIX_BUILD_MAX_JOBS:-4}" while [[ $# -gt 0 ]]; do case "$1" in --upload) UPLOAD_CACHE=true ;; --no-upload) UPLOAD_CACHE=false ;; --help|-h) echo "사용법: nr [호스트명] [--upload|--no-upload]" exit 0 ;; -*) echo "알 수 없는 옵션입니다: $1" >&2 exit 2 ;; *) TARGET_NAME="$1" ;; esac shift done BUILD_FLAGS=(--max-jobs "$MAX_JOBS") if [ "$TARGET_NAME" = "kazusa" ]; then BUILD_FLAGS+=("--max-substitution-jobs" "2") fi echo "시스템 빌드 중... $TARGET_NAME" BUILD_PATH=$(nom build "$FLAKE_PATH#nixosConfigurations.$TARGET_NAME.config.system.build.toplevel" \ "''${BUILD_FLAGS[@]}" \ --print-out-paths --no-link) echo "스위치 중..." sudo nix-env --profile /nix/var/nix/profiles/system --set "$BUILD_PATH" sudo "$BUILD_PATH/bin/switch-to-configuration" switch if [ "$UPLOAD_CACHE" = true ]; then echo "캐시 업로드 중..." attic push imnyang "$BUILD_PATH" || echo "푸시 실패" fi echo "스위치 완료!" ''; }