summaryrefslogtreecommitdiff
path: root/ms
diff options
context:
space:
mode:
Diffstat (limited to 'ms')
-rwxr-xr-xms28
1 files changed, 28 insertions, 0 deletions
diff --git a/ms b/ms
new file mode 100755
index 0000000..109b155
--- /dev/null
+++ b/ms
@@ -0,0 +1,28 @@
+#!/usr/bin/env bash
+# ms — modal shell dispatcher
+# Usage: ms [mode]
+# ms list available modes
+# ms <mode> enter named mode
+set -euo pipefail
+
+MODES_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/modes" && pwd)"
+
+if [[ $# -eq 0 ]]; then
+ echo "Available modes:"
+ for f in "$MODES_DIR"/*.sh; do
+ [[ "$(basename "$f")" == "base.sh" ]] && continue
+ printf " %s\n" "$(basename "$f" .sh)"
+ done
+ exit 0
+fi
+
+mode="$1"
+mode_file="$MODES_DIR/${mode}.sh"
+
+if [[ ! -f "$mode_file" ]]; then
+ echo "error: unknown mode '$mode'" >&2
+ echo "Run 'ms' to list available modes." >&2
+ exit 1
+fi
+
+exec bash "$mode_file"