|
@@ -0,0 +1,128 @@
|
|
|
|
|
+#!/usr/bin/env bash
|
|
|
|
|
+set -euo pipefail
|
|
|
|
|
+
|
|
|
|
|
+# -----------------------------
|
|
|
|
|
+# Config (override via env)
|
|
|
|
|
+# -----------------------------
|
|
|
|
|
+NY_FLAKE_PATH="${NY_FLAKE_PATH:-$HOME/.config/nixos}"
|
|
|
|
|
+
|
|
|
|
|
+# -----------------------------
|
|
|
|
|
+# Helpers
|
|
|
|
|
+# -----------------------------
|
|
|
|
|
+die() {
|
|
|
|
|
+ echo "error: $*" >&2
|
|
|
|
|
+ exit 1
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+info() {
|
|
|
|
|
+ echo "→ $*"
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+run() {
|
|
|
|
|
+ info "$*"
|
|
|
|
|
+ "$@"
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+has() {
|
|
|
|
|
+ command -v "$1" >/dev/null 2>&1
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+# -----------------------------
|
|
|
|
|
+# Help
|
|
|
|
|
+# -----------------------------
|
|
|
|
|
+help() {
|
|
|
|
|
+ cat <<EOF
|
|
|
|
|
+ny — simple NixOS sync command
|
|
|
|
|
+
|
|
|
|
|
+Usage:
|
|
|
|
|
+ ny Rebuild system
|
|
|
|
|
+ ny up Update flake + rebuild
|
|
|
|
|
+ ny diff Show pending system changes
|
|
|
|
|
+ ny search <q> Search packages
|
|
|
|
|
+ ny shell <pkg> Temporary shell
|
|
|
|
|
+ ny clean Clean nix store
|
|
|
|
|
+ ny help Show help
|
|
|
|
|
+
|
|
|
|
|
+Shortcuts:
|
|
|
|
|
+ ny s <q> Search
|
|
|
|
|
+ ny sh <pkg> Shell
|
|
|
|
|
+
|
|
|
|
|
+Env:
|
|
|
|
|
+ NY_FLAKE_PATH Path to NixOS flake (default: ~/.config/nixos)
|
|
|
|
|
+
|
|
|
|
|
+EOF
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+# -----------------------------
|
|
|
|
|
+# Shortcuts
|
|
|
|
|
+# -----------------------------
|
|
|
|
|
+CMD="${1:-}"
|
|
|
|
|
+
|
|
|
|
|
+case "$CMD" in
|
|
|
|
|
+help)
|
|
|
|
|
+ help
|
|
|
|
|
+ exit 0
|
|
|
|
|
+ ;;
|
|
|
|
|
+s) set -- search "${@:2}" ;;
|
|
|
|
|
+sh) set -- shell "${@:2}" ;;
|
|
|
|
|
+esac
|
|
|
|
|
+
|
|
|
|
|
+CMD="${1:-}"
|
|
|
|
|
+
|
|
|
|
|
+# -----------------------------
|
|
|
|
|
+# Commands
|
|
|
|
|
+# -----------------------------
|
|
|
|
|
+case "$CMD" in
|
|
|
|
|
+"")
|
|
|
|
|
+ cd "$NY_FLAKE_PATH" || die "flake path not found: $NY_FLAKE_PATH"
|
|
|
|
|
+ run sudo nixos-rebuild switch --flake .
|
|
|
|
|
+ ;;
|
|
|
|
|
+
|
|
|
|
|
+up)
|
|
|
|
|
+ cd "$NY_FLAKE_PATH" || die "flake path not found: $NY_FLAKE_PATH"
|
|
|
|
|
+ run nix flake update
|
|
|
|
|
+ run sudo nixos-rebuild switch --flake .
|
|
|
|
|
+ ;;
|
|
|
|
|
+
|
|
|
|
|
+diff)
|
|
|
|
|
+ cd "$NY_FLAKE_PATH" || die "flake path not found: $NY_FLAKE_PATH"
|
|
|
|
|
+
|
|
|
|
|
+ info "Computing system diff…"
|
|
|
|
|
+
|
|
|
|
|
+ if has nvd; then
|
|
|
|
|
+ run sudo nixos-rebuild build --flake .
|
|
|
|
|
+ run nvd diff /run/current-system ./result
|
|
|
|
|
+ rm -f result
|
|
|
|
|
+
|
|
|
|
|
+ elif has nix-diff; then
|
|
|
|
|
+ run sudo nixos-rebuild build --flake .
|
|
|
|
|
+ run nix-diff /run/current-system ./result
|
|
|
|
|
+ rm -f result
|
|
|
|
|
+
|
|
|
|
|
+ else
|
|
|
|
|
+ info "nvd/nix-diff not found, using dry-run"
|
|
|
|
|
+ run sudo nixos-rebuild dry-run --flake .
|
|
|
|
|
+ fi
|
|
|
|
|
+ ;;
|
|
|
|
|
+
|
|
|
|
|
+search)
|
|
|
|
|
+ [[ -n "${2:-}" ]] || die "usage: ny search <query>"
|
|
|
|
|
+ run nix search nixpkgs "$2"
|
|
|
|
|
+ ;;
|
|
|
|
|
+
|
|
|
|
|
+shell)
|
|
|
|
|
+ shift
|
|
|
|
|
+ [[ $# -gt 0 ]] || die "usage: ny shell <pkg...>"
|
|
|
|
|
+ run nix shell "${@/#/nixpkgs#}"
|
|
|
|
|
+ ;;
|
|
|
|
|
+
|
|
|
|
|
+clean)
|
|
|
|
|
+ run nix store optimise
|
|
|
|
|
+ run nix-collect-garbage
|
|
|
|
|
+ run sudo nix-collect-garbage -d
|
|
|
|
|
+ ;;
|
|
|
|
|
+
|
|
|
|
|
+*)
|
|
|
|
|
+ die "unknown command: $CMD (run 'ny help')"
|
|
|
|
|
+ ;;
|
|
|
|
|
+esac
|