summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsce35
1 files changed, 35 insertions, 0 deletions
diff --git a/sce b/sce
new file mode 100755
index 0000000..c1f7659
--- /dev/null
+++ b/sce
@@ -0,0 +1,35 @@
+#!/usr/bin/env bash
+# Open given systemd unit in editor.
+
+set -euo pipefail
+
+usage() {
+ echo "Usage: ${0##*/} [OPTIONS] unit-name" >&2
+ exit 1
+}
+
+get_unit_path() {
+ path=$(systemctl show -P FragmentPath "$@")
+ if [ -z "$path" ]; then
+ echo "Unit file not found" >&2
+ exit 2
+ fi
+ echo "$path"
+}
+
+is_user_unit() {
+ [ "${1##"$HOME"/}" == "$1" ]
+}
+
+main() {
+ [ $# -eq 0 ] && usage
+
+ path=$(get_unit_path "$@")
+ if is_user_unit "$path"; then
+ sudo -e "$path"
+ else
+ "${EDITOR:-vim}" "$path"
+ fi
+}
+
+main "$@"