mirror of
https://github.com/arkorty/Scripts.git
synced 2026-03-17 17:01:41 +00:00
79 lines
1.8 KiB
Bash
Executable File
79 lines
1.8 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# Script: shal
|
|
# License: MIT
|
|
# Author: Arkaprabha Chakraborty
|
|
# Created: 30-08-24
|
|
# Dependencies: zsh, rofi
|
|
#
|
|
# Copyright (C) 2024 Arkaprabha Chakraborty
|
|
|
|
set -eu
|
|
|
|
# Function to print error messages
|
|
error() {
|
|
printf "%s\n" "$1" >&2
|
|
}
|
|
|
|
# Function to get aliases from .zshrc
|
|
get_aliases() {
|
|
if [ ! -f "$HOME/.zshrc" ]; then
|
|
error "Error: $HOME/.zshrc not found."
|
|
exit 1
|
|
fi
|
|
sed -n '/^# non-interactive aliases/,$p' "$HOME/.zshrc" | grep '^alias ' | sed 's/alias \([^=]*\)=.*/\1/'
|
|
}
|
|
|
|
# Function to get user input using rofi
|
|
get_user_input() {
|
|
if ! command -v rofi >/dev/null 2>&1; then
|
|
error "Error: rofi is not installed or not in PATH."
|
|
exit 1
|
|
fi
|
|
printf "%s" "$1" | rofi -dmenu -i -p "Zsh alias"
|
|
}
|
|
|
|
# Function to extract alias and arguments
|
|
parse_input() {
|
|
input="$1"
|
|
alias=$(printf "%s" "$input" | awk '{print $1}')
|
|
arguments=$(printf "%s" "$input" | awk '{$1=""; print $0}' | sed 's/^ *//')
|
|
printf "%s\n%s" "$alias" "$arguments"
|
|
}
|
|
|
|
# Function to get the command for an alias
|
|
get_alias_command() {
|
|
alias="$1"
|
|
grep "^alias $alias=" "$HOME/.zshrc" | sed "s/^alias $alias='\(.*\)'/\1/"
|
|
}
|
|
|
|
# Main function
|
|
main() {
|
|
aliases=$(get_aliases)
|
|
input=$(get_user_input "$aliases")
|
|
|
|
if [ -z "$input" ]; then
|
|
exit 0
|
|
fi
|
|
|
|
parsed_input=$(parse_input "$input")
|
|
selected_alias=$(printf "%s" "$parsed_input" | sed -n '1p')
|
|
arguments=$(printf "%s" "$parsed_input" | sed -n '2p')
|
|
|
|
command=$(get_alias_command "$selected_alias")
|
|
|
|
if [ -z "$command" ]; then
|
|
error "Error: Alias '$selected_alias' not found."
|
|
exit 1
|
|
fi
|
|
|
|
if ! command -v zsh >/dev/null 2>&1; then
|
|
error "Error: zsh is not installed or not in PATH."
|
|
exit 1
|
|
fi
|
|
|
|
zsh -c "$command $arguments"
|
|
}
|
|
|
|
main
|