Files
Scripts/shal
2024-09-03 16:29:52 +05:30

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