mirror of
https://github.com/nikdoof/dotfiles.git
synced 2025-12-13 09:42:27 +00:00
Compare commits
6 Commits
b475182c1e
...
3620c5cf4d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3620c5cf4d | ||
|
|
8838fe8f42 | ||
|
|
9e8e39db66 | ||
|
|
2b3f64646c | ||
|
|
fcc7918f7f | ||
|
|
ce9bfd8224 |
@@ -11,10 +11,6 @@
|
|||||||
rh = reset --hard
|
rh = reset --hard
|
||||||
dist = "!git archive --format=tar -v --prefix=$(git describe HEAD)/ $(git describe HEAD) | gzip -9 > ../$(git describe HEAD).tar.gz"
|
dist = "!git archive --format=tar -v --prefix=$(git describe HEAD)/ $(git describe HEAD) | gzip -9 > ../$(git describe HEAD).tar.gz"
|
||||||
|
|
||||||
[include]
|
|
||||||
path = ~/.gitconfig-gpg
|
|
||||||
path = ~/.gitconfig-local
|
|
||||||
|
|
||||||
[init]
|
[init]
|
||||||
defaultBranch = main
|
defaultBranch = main
|
||||||
|
|
||||||
@@ -52,3 +48,8 @@
|
|||||||
|
|
||||||
[url "ssh://git@github.com/2315-Media"]
|
[url "ssh://git@github.com/2315-Media"]
|
||||||
insteadOf = "https://github.com/2315-Media"
|
insteadOf = "https://github.com/2315-Media"
|
||||||
|
|
||||||
|
[include]
|
||||||
|
path = ~/.gitconfig-gpg
|
||||||
|
path = ~/.gitconfig-work
|
||||||
|
path = ~/.gitconfig-local
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
# Updates Homebrew installation from the Brewfile
|
|
||||||
function update-brewfile() {
|
|
||||||
brew bundle check --file "$HOME/.config/Brewfile" || brew bundle --cleanup -f --file "$HOME/.config/Brewfile"
|
|
||||||
}
|
|
||||||
@@ -1,3 +1,17 @@
|
|||||||
|
# Tag the file as OK to run
|
||||||
|
function itsok() {
|
||||||
|
if [[ $(uname) == "Darwin" ]]; then
|
||||||
|
xattr -d com.apple.quarantine $1
|
||||||
|
else
|
||||||
|
echo 'This only works on macOS...'
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Updates Homebrew installation from the Brewfile
|
||||||
|
function update-brewfile() {
|
||||||
|
brew bundle check --file "$HOME/.config/Brewfile" || brew bundle --cleanup -f --file "$HOME/.config/Brewfile"
|
||||||
|
}
|
||||||
|
|
||||||
# Updates the dock
|
# Updates the dock
|
||||||
function update-dock() {
|
function update-dock() {
|
||||||
idx=1
|
idx=1
|
||||||
193
shell-common/.config/shell-common/aws.sh
Normal file
193
shell-common/.config/shell-common/aws.sh
Normal file
@@ -0,0 +1,193 @@
|
|||||||
|
|
||||||
|
# Get the list of AWS profiles
|
||||||
|
function awsprofiles() {
|
||||||
|
profiles=$(aws --no-cli-pager configure list-profiles 2> /dev/null)
|
||||||
|
if [[ -z "$profiles" ]]; then
|
||||||
|
echo "No AWS profiles found in '$HOME/.aws/config, check if ~/.aws/config exists and properly configured.'"
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
echo $profiles
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# login via SSO to AWS
|
||||||
|
function awslogin() {
|
||||||
|
local profile=""
|
||||||
|
local region=""
|
||||||
|
|
||||||
|
# Parse optional arguments
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case "$1" in
|
||||||
|
--profile)
|
||||||
|
profile="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
--region)
|
||||||
|
region="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unknown option: $1"
|
||||||
|
echo "Usage: awslogin --profile prof [--region region]"
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Check if profile is provided
|
||||||
|
if [[ -z "$profile" ]]; then
|
||||||
|
echo "Error: --profile parameter is required."
|
||||||
|
echo "Usage: awslogin --profile prof [--region region]"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Build AWS CLI options
|
||||||
|
local aws_opts=()
|
||||||
|
[[ -n "$profile" ]] && aws_opts+=(--profile "$profile")
|
||||||
|
[[ -n "$region" ]] && aws_opts+=(--region "$region")
|
||||||
|
|
||||||
|
# Login via SSO
|
||||||
|
aws sso login "${aws_opts[@]}"
|
||||||
|
|
||||||
|
# Export AWS credentials
|
||||||
|
while IFS= read -r line; do
|
||||||
|
[[ -n "$line" ]] && eval "export $line"
|
||||||
|
done < <(aws configure export-credentials --format env "${aws_opts[@]}")
|
||||||
|
if [[ $? -ne 0 ]]; then
|
||||||
|
echo "Failed to export AWS credentials."
|
||||||
|
return 2
|
||||||
|
fi
|
||||||
|
echo "AWS login successful. Credentials exported."
|
||||||
|
export AWS_PROFILE_ACTIVE="$profile"
|
||||||
|
if [[ -n "$profile" ]]; then
|
||||||
|
export AWS_PROFILE_DISPLAY="[aws: $profile]"
|
||||||
|
else
|
||||||
|
export AWS_PROFILE_DISPLAY=""
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function awslogout() {
|
||||||
|
unset AWS_PROFILE_ACTIVE
|
||||||
|
unset AWS_ACCESS_KEY_ID
|
||||||
|
unset AWS_SECRET_ACCESS_KEY
|
||||||
|
unset AWS_SESSION_TOKEN
|
||||||
|
export AWS_PROFILE_DISPLAY=""
|
||||||
|
echo "AWS profile and credentials cleared."
|
||||||
|
}
|
||||||
|
|
||||||
|
# easy access to SSH
|
||||||
|
function awsssh() {
|
||||||
|
local profile=""
|
||||||
|
local region=""
|
||||||
|
local username="ansible"
|
||||||
|
local search=""
|
||||||
|
|
||||||
|
# Parse arguments
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case "$1" in
|
||||||
|
--profile)
|
||||||
|
profile="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
--region)
|
||||||
|
region="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
search="$1"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ -z "$search" ]]; then
|
||||||
|
echo "Usage: awsssh [--profile prof] [--region reg] [user@]search-term"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Extract username if provided as user@search
|
||||||
|
if [[ "$search" == *@* ]]; then
|
||||||
|
username="${search%@*}"
|
||||||
|
search="${search#*@}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Build AWS CLI options
|
||||||
|
local aws_opts=()
|
||||||
|
[[ -n "$profile" ]] && aws_opts+=(--profile "$profile")
|
||||||
|
[[ -n "$region" ]] && aws_opts+=(--region "$region")
|
||||||
|
|
||||||
|
# Get matching instances
|
||||||
|
local instances
|
||||||
|
instances=$(aws ec2 describe-instances \
|
||||||
|
--filters "Name=tag:Name,Values=*$search*" \
|
||||||
|
--query 'Reservations[].Instances[].{
|
||||||
|
Name: Tags[?Key==`Name`].Value | [0],
|
||||||
|
IP: PublicIpAddress,
|
||||||
|
InstanceId: InstanceId
|
||||||
|
}' \
|
||||||
|
--output json \
|
||||||
|
"${aws_opts[@]}")
|
||||||
|
|
||||||
|
if [[ $? -ne 0 || -z "$instances" || "$instances" == "[]" ]]; then
|
||||||
|
echo "Failed to retrieve instances or no match found."
|
||||||
|
return 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Select instance using fzf
|
||||||
|
local selection
|
||||||
|
selection=$(echo "$instances" | jq -r '.[] | "\(.Name): \(.IP // "no-ip") (\(.InstanceId))"' |
|
||||||
|
fzf -1 -0 --header "Select an instance")
|
||||||
|
|
||||||
|
if [[ -z "$selection" ]]; then
|
||||||
|
echo "No valid instance selected."
|
||||||
|
return 3
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Extract IP and InstanceId from selection
|
||||||
|
local ip instance_id
|
||||||
|
ip=$(echo "$selection" | sed -E 's/.*: (.*) \(.*/\1/')
|
||||||
|
instance_id=$(echo "$selection" | sed -E 's/.*\((i-[a-z0-9]+)\).*/\1/')
|
||||||
|
|
||||||
|
if [[ "$ip" != "no-ip" ]]; then
|
||||||
|
echo "Connecting to $username@$ip via SSH..."
|
||||||
|
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "${username}@${ip}"
|
||||||
|
else
|
||||||
|
echo "No public IP found. Falling back to AWS Session Manager..."
|
||||||
|
aws ssm start-session --target "$instance_id" "${aws_opts[@]}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function instances() {
|
||||||
|
local profile=""
|
||||||
|
local region=""
|
||||||
|
|
||||||
|
# Parse optional arguments
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case "$1" in
|
||||||
|
--profile)
|
||||||
|
profile="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
--region)
|
||||||
|
region="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unknown option: $1"
|
||||||
|
echo "Usage: list_ec2_instances [--profile prof] [--region region]"
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Build AWS CLI options
|
||||||
|
local aws_opts=()
|
||||||
|
[[ -n "$profile" ]] && aws_opts+=(--profile "$profile")
|
||||||
|
[[ -n "$region" ]] && aws_opts+=(--region "$region")
|
||||||
|
|
||||||
|
# Query EC2 for names and instance IDs
|
||||||
|
aws ec2 describe-instances \
|
||||||
|
--query 'Reservations[].Instances[].{Name: Tags[?Key==`Name`].Value | [0], InstanceId: InstanceId}' \
|
||||||
|
--output table \
|
||||||
|
"${aws_opts[@]}"
|
||||||
|
}
|
||||||
@@ -34,7 +34,7 @@ fi
|
|||||||
|
|
||||||
# https://github.com/oz/tz
|
# https://github.com/oz/tz
|
||||||
if [ -x "$(command -v tz)" ]; then
|
if [ -x "$(command -v tz)" ]; then
|
||||||
export TZ_LIST="America/New_York,WDW;America/Los_Angeles,DLR;Europe/Paris,DLP"
|
export TZ_LIST="Europe/Dublin,Portwest HQ;America/New_York,WDW;America/Los_Angeles,DLR;Europe/Paris,DLP"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# macOS Specific envs
|
# macOS Specific envs
|
||||||
|
|||||||
@@ -1,15 +1,13 @@
|
|||||||
# Git pulls latest dotfiles
|
# Git pulls latest dotfiles
|
||||||
function update-dotfiles() {
|
function update-dotfiles() {
|
||||||
prevdir=$PWD
|
prevdir=$PWD
|
||||||
if [ -d "${HOME}/.dotfiles" ]; then
|
for dir in "${HOME}/.dotfiles" "${HOME}/.dotfiles-private" "${HOME}/.dotfiles-work"; do
|
||||||
cd $HOME/.dotfiles
|
if [ -d "$dir" ]; then
|
||||||
git pull --rebase --autostash
|
cd "$dir"
|
||||||
fi
|
git pull --rebase --autostash
|
||||||
if [ -d "${HOME}/.dotfiles-private" ]; then
|
fi
|
||||||
cd $HOME/.dotfiles-private
|
done
|
||||||
git pull --rebase --autostash
|
cd "$prevdir"
|
||||||
fi
|
|
||||||
cd $prevdir
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Wrapper around ssh-add to ease usage and also ensure basic timeouts
|
# Wrapper around ssh-add to ease usage and also ensure basic timeouts
|
||||||
@@ -40,179 +38,3 @@ function demoprompt() {
|
|||||||
clear
|
clear
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Tag the file as OK to run
|
|
||||||
function itsok() {
|
|
||||||
if [[ $(uname) == "Darwin" ]]; then
|
|
||||||
xattr -d com.apple.quarantine $1
|
|
||||||
else
|
|
||||||
echo 'This only works on macOS...'
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# login via SSO to AWS
|
|
||||||
function awslogin() {
|
|
||||||
local profile=""
|
|
||||||
local region=""
|
|
||||||
|
|
||||||
# Parse optional arguments
|
|
||||||
while [[ $# -gt 0 ]]; do
|
|
||||||
case "$1" in
|
|
||||||
--profile)
|
|
||||||
profile="$2"
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
--region)
|
|
||||||
region="$2"
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "Unknown option: $1"
|
|
||||||
echo "Usage: awslogin --profile prof [--region region]"
|
|
||||||
return 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
# Check if profile is provided
|
|
||||||
if [[ -z "$profile" ]]; then
|
|
||||||
echo "Error: --profile parameter is required."
|
|
||||||
echo "Usage: awslogin --profile prof [--region region]"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Build AWS CLI options
|
|
||||||
local aws_opts=()
|
|
||||||
[[ -n "$profile" ]] && aws_opts+=(--profile "$profile")
|
|
||||||
[[ -n "$region" ]] && aws_opts+=(--region "$region")
|
|
||||||
|
|
||||||
# Login via SSO
|
|
||||||
aws sso login "${aws_opts[@]}"
|
|
||||||
|
|
||||||
# Export AWS credentials
|
|
||||||
while IFS= read -r line; do
|
|
||||||
[[ -n "$line" ]] && eval "export $line"
|
|
||||||
done < <(aws configure export-credentials --format env "${aws_opts[@]}")
|
|
||||||
if [[ $? -ne 0 ]]; then
|
|
||||||
echo "Failed to export AWS credentials."
|
|
||||||
return 2
|
|
||||||
fi
|
|
||||||
echo "AWS login successful. Credentials exported."
|
|
||||||
}
|
|
||||||
|
|
||||||
# easy access to SSH
|
|
||||||
function awsssh() {
|
|
||||||
local profile=""
|
|
||||||
local region=""
|
|
||||||
local username="ec2-user"
|
|
||||||
local search=""
|
|
||||||
|
|
||||||
# Parse arguments
|
|
||||||
while [[ $# -gt 0 ]]; do
|
|
||||||
case "$1" in
|
|
||||||
--profile)
|
|
||||||
profile="$2"
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
--region)
|
|
||||||
region="$2"
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
search="$1"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
if [[ -z "$search" ]]; then
|
|
||||||
echo "Usage: awsssh [--profile prof] [--region reg] [user@]search-term"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Extract username if provided as user@search
|
|
||||||
if [[ "$search" == *@* ]]; then
|
|
||||||
username="${search%@*}"
|
|
||||||
search="${search#*@}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Build AWS CLI options
|
|
||||||
local aws_opts=()
|
|
||||||
[[ -n "$profile" ]] && aws_opts+=(--profile "$profile")
|
|
||||||
[[ -n "$region" ]] && aws_opts+=(--region "$region")
|
|
||||||
|
|
||||||
# Get matching instances
|
|
||||||
local instances
|
|
||||||
instances=$(aws ec2 describe-instances \
|
|
||||||
--filters "Name=tag:Name,Values=*$search*" \
|
|
||||||
--query 'Reservations[].Instances[].{
|
|
||||||
Name: Tags[?Key==`Name`].Value | [0],
|
|
||||||
IP: PublicIpAddress,
|
|
||||||
InstanceId: InstanceId
|
|
||||||
}' \
|
|
||||||
--output json \
|
|
||||||
"${aws_opts[@]}")
|
|
||||||
|
|
||||||
if [[ $? -ne 0 || -z "$instances" || "$instances" == "[]" ]]; then
|
|
||||||
echo "Failed to retrieve instances or no match found."
|
|
||||||
return 2
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Select instance using fzf
|
|
||||||
local selection
|
|
||||||
selection=$(echo "$instances" | jq -r '.[] | "\(.Name): \(.IP // "no-ip") (\(.InstanceId))"' |
|
|
||||||
fzf -1 -0 --header "Select an instance")
|
|
||||||
|
|
||||||
if [[ -z "$selection" ]]; then
|
|
||||||
echo "No valid instance selected."
|
|
||||||
return 3
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Extract IP and InstanceId from selection
|
|
||||||
local ip instance_id
|
|
||||||
ip=$(echo "$selection" | sed -E 's/.*: (.*) \(.*/\1/')
|
|
||||||
instance_id=$(echo "$selection" | sed -E 's/.*\((i-[a-z0-9]+)\).*/\1/')
|
|
||||||
|
|
||||||
if [[ "$ip" != "no-ip" ]]; then
|
|
||||||
echo "Connecting to $username@$ip via SSH..."
|
|
||||||
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "${username}@${ip}"
|
|
||||||
else
|
|
||||||
echo "No public IP found. Falling back to AWS Session Manager..."
|
|
||||||
aws ssm start-session --target "$instance_id" "${aws_opts[@]}"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function instances() {
|
|
||||||
local profile=""
|
|
||||||
local region=""
|
|
||||||
|
|
||||||
# Parse optional arguments
|
|
||||||
while [[ $# -gt 0 ]]; do
|
|
||||||
case "$1" in
|
|
||||||
--profile)
|
|
||||||
profile="$2"
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
--region)
|
|
||||||
region="$2"
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "Unknown option: $1"
|
|
||||||
echo "Usage: list_ec2_instances [--profile prof] [--region region]"
|
|
||||||
return 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
# Build AWS CLI options
|
|
||||||
local aws_opts=()
|
|
||||||
[[ -n "$profile" ]] && aws_opts+=(--profile "$profile")
|
|
||||||
[[ -n "$region" ]] && aws_opts+=(--region "$region")
|
|
||||||
|
|
||||||
# Query EC2 for names and instance IDs
|
|
||||||
aws ec2 describe-instances \
|
|
||||||
--query 'Reservations[].Instances[].{Name: Tags[?Key==`Name`].Value | [0], InstanceId: InstanceId}' \
|
|
||||||
--output table \
|
|
||||||
"${aws_opts[@]}"
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -4,4 +4,6 @@ HISTSIZE=2000
|
|||||||
SAVEHIST=1000
|
SAVEHIST=1000
|
||||||
|
|
||||||
# Prompt
|
# Prompt
|
||||||
export PS1="%F{8}[%F{white}%n@%m%F{8}] (%F{white}%1~%F{8}) %F{white}%#%f "
|
setopt PROMPT_SUBST
|
||||||
|
export AWS_PROFILE_DISPLAY=''
|
||||||
|
export PS1='%F{8}[%F{white}%n@%m%F{8}] (%F{white}%1~%F{8}) %F{yellow}$AWS_PROFILE_DISPLAY%F{white} %#%f '
|
||||||
|
|||||||
Reference in New Issue
Block a user