ny 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. #!/usr/bin/env bash
  2. set -euo pipefail
  3. # -----------------------------
  4. # Config (override via env)
  5. # -----------------------------
  6. NY_FLAKE_PATH="${NY_FLAKE_PATH:-$HOME/.config/nixos}"
  7. # -----------------------------
  8. # Helpers
  9. # -----------------------------
  10. die() {
  11. echo "error: $*" >&2
  12. exit 1
  13. }
  14. info() {
  15. echo "→ $*"
  16. }
  17. run() {
  18. info "$*"
  19. "$@"
  20. }
  21. has() {
  22. command -v "$1" >/dev/null 2>&1
  23. }
  24. # -----------------------------
  25. # Help
  26. # -----------------------------
  27. help() {
  28. cat <<EOF
  29. ny — simple NixOS sync command
  30. Usage:
  31. ny Rebuild system
  32. ny up Update flake + rebuild
  33. ny diff Show pending system changes
  34. ny search <q> Search packages
  35. ny shell <pkg> Temporary shell
  36. ny clean Clean nix store
  37. ny help Show help
  38. Shortcuts:
  39. ny s <q> Search
  40. ny sh <pkg> Shell
  41. Env:
  42. NY_FLAKE_PATH Path to NixOS flake (default: ~/.config/nixos)
  43. EOF
  44. }
  45. # -----------------------------
  46. # Shortcuts
  47. # -----------------------------
  48. CMD="${1:-}"
  49. case "$CMD" in
  50. help)
  51. help
  52. exit 0
  53. ;;
  54. s) set -- search "${@:2}" ;;
  55. sh) set -- shell "${@:2}" ;;
  56. esac
  57. CMD="${1:-}"
  58. # -----------------------------
  59. # Commands
  60. # -----------------------------
  61. case "$CMD" in
  62. "")
  63. cd "$NY_FLAKE_PATH" || die "flake path not found: $NY_FLAKE_PATH"
  64. run sudo nixos-rebuild switch --flake .
  65. ;;
  66. up)
  67. cd "$NY_FLAKE_PATH" || die "flake path not found: $NY_FLAKE_PATH"
  68. run nix flake update
  69. run sudo nixos-rebuild switch --flake .
  70. ;;
  71. diff)
  72. cd "$NY_FLAKE_PATH" || die "flake path not found: $NY_FLAKE_PATH"
  73. info "Computing system diff…"
  74. if has nvd; then
  75. run sudo nixos-rebuild build --flake .
  76. run nvd diff /run/current-system ./result
  77. rm -f result
  78. elif has nix-diff; then
  79. run sudo nixos-rebuild build --flake .
  80. run nix-diff /run/current-system ./result
  81. rm -f result
  82. else
  83. info "nvd/nix-diff not found, using dry-run"
  84. run sudo nixos-rebuild dry-run --flake .
  85. fi
  86. ;;
  87. search)
  88. [[ -n "${2:-}" ]] || die "usage: ny search <query>"
  89. run nix search nixpkgs "$2"
  90. ;;
  91. shell)
  92. shift
  93. [[ $# -gt 0 ]] || die "usage: ny shell <pkg...>"
  94. run nix shell "${@/#/nixpkgs#}"
  95. ;;
  96. clean)
  97. run nix store optimise
  98. run nix-collect-garbage
  99. run sudo nix-collect-garbage -d
  100. ;;
  101. *)
  102. die "unknown command: $CMD (run 'ny help')"
  103. ;;
  104. esac