Merge pull request #6 from mcataford/feat/misc-updates

feat: misc updates
This commit is contained in:
Marc 2024-01-28 11:12:50 -05:00 committed by GitHub
commit df67388344
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 143 additions and 66 deletions

14
.github/workflows/ci.yaml vendored Normal file
View file

@ -0,0 +1,14 @@
name: CI
on:
pull_request:
push:
branches: [main]
jobs:
validate:
name: Validate bootstrap
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: . ./bootstrap.sh

View file

@ -5,7 +5,7 @@ Environment tweaks for everyday happiness.
## Setup ## Setup
```bash ```bash
git clone git@github.com:mcataford/env.git <path-of-your-choosing> | . ./install.sh git clone git@github.com:mcataford/env.git <path-of-your-choosing> | . ./bootstrap.sh
``` ```
The setup script will look for pre-existing managed blocks and will not update the file if one is found. The setup script will look for pre-existing managed blocks and will not update the file if one is found.
@ -22,13 +22,20 @@ The package is structured as such:
``` ```
env/ env/
install.sh # Adds bootstrap block to your shell's config file. bootstrap.sh # Adds bootstrap block to your shell's config file.
shell_extras # Functions, aliases and exports for the shell. steps.sh # Definitions for bootstrapping steps
extras.vim # Common config for NVIM. shell_extras # Functions, aliases and exports for the shell.
extras.vim # Common config for NVIM.
``` ```
Adding code to `shell_extras` will add code that gets executed on shell-start. Adding code to `shell_extras` will add code that gets executed on shell-start.
### Adding steps
Each step is defined as a function in `steps.sh` and should start with a call to `pre_step` to ensure that a header gets
echo'ed out. Additionally, the function should be called from `bootstrap` in `bootstrap.sh` and the `TOTAL_STEPS` should
be updated to reflect the number of steps.
## Contributing ## Contributing
I'm not currently looking for contributions since this is mainly about standardizing my own setup across machines. I'm not currently looking for contributions since this is mainly about standardizing my own setup across machines.

4
apt.txt Normal file
View file

@ -0,0 +1,4 @@
zsh
tmux
postgresql
postgresql-contrib

18
bootstrap.sh Normal file
View file

@ -0,0 +1,18 @@
#!/bin/bash
# Ensuring steps are defined.
. ./steps.sh
TOTAL_STEPS=5
# Refer to steps.sh for step definition.
bootstrap() {
ensure_apt_up_to_date
ensure_apt_dependencies
ensure_nvm
inject_shell_configuration
inject_vim_configuration
}
bootstrap
return

View file

@ -1,62 +0,0 @@
#!/bin/bash
# 1. PRECONDITIONS
#
# zsh is expected to be set up.
if [ -z "$(zshc --version 2> /dev/null)" ]; then
echo "💥 Install zsh (https://www.zsh.org/) before installing environment."
return
fi
# 2. CONFIGURATION INJECTION
# 2.1 Inject shell configuration.
#
# Adds a managed block to the shell configuration to
# source extra files on shell-start.
#
BLOCK_DELIMITER_PATTERN="mcataford/env"
WORKING_PATH=$(git rev-parse --show-toplevel)
SHELL_CONFIG_PATH="$HOME/.zshrc"
echo "Setting up shell configuration extras..."
if [[ -z $(cat $SHELL_CONFIG_PATH | grep $BLOCK_DELIMITER_PATTERN) ]]; then
echo "# $BLOCK_DELIMITER_PATTERN\:start
source $WORKING_PATH/shell_extras
# $BLOCK_DELIMITER_PATTERN\:end" >> $SHELL_CONFIG_PATH
echo "✅ Added managed block to $SHELL_CONFIG_PATH"
else
echo "No changes to apply!"
fi
EDITOR_CONFIG=$HOME/.config/nvim
EDITOR_CONFIG_FILE=$EDITOR_CONFIG/init.vim
# 2.2 Inject nvim configuration.
#
# Similarly, sourcing for `extras.vim` is added to the vim configuration
# so plugins, bindings and whatnot are loaded on start.
#
if [[ -f $EDITOR_CONFIG_FILE ]]; then
echo "Setting up NVIM configuration extras..."
if [[ -z $(cat $EDITOR_CONFIG_FILE | grep $BLOCK_DELIMITER_PATTERN) ]]; then
echo "\" $BLOCK_DELIMITER_PATTERN\:start
source $WORKING_PATH/extras.vim
\" $BLOCK_DELIMITER_PATTERN\:end\n\n" >> $EDITOR_CONFIG_FILE.new
cat $EDITOR_CONFIG_FILE >> $EDITOR_CONFIG_FILE.new
mv $EDITOR_CONFIG_FILE $EDITOR_CONFIG_FILE.old
mv $EDITOR_CONFIG_FILE.new $EDITOR_CONFIG_FILE
echo "✅ Added managed block to $EDITOR_CONFIG_FILE"
else
echo "No changes to apply!"
fi
fi
echo "Setting up git configuration..."
source $WORKING_PATH/git_config
echo "✅ Set up git configuration, see $WORKING_PATH/git_config for details!"

96
steps.sh Normal file
View file

@ -0,0 +1,96 @@
#!/bin/bash
STEP_COUNT=0
# Helpers to pretty-print step titles and count.
pre_step() {
STEP_COUNT=$(($STEP_COUNT + 1))
echo -e "\e[1m[$STEP_COUNT/$TOTAL_STEPS] <====== $1 =======>\e[0m"
}
# Ensures that all existing Apt packages are up-to-date.
ensure_apt_up_to_date() {
pre_step "Ensuring apt packages are up-to-date"
if [ -z "$(apt --version 2> /dev/null)" ]; then
echo -e "\e[33mApt not installed, skipping updates.\e[0m"
else
echo -e "\e[1mEnsuring system packages are up-to-date...\e[0m"
sudo apt update && sudo apt upgrade -y --autoremove
echo -e "\e[1;32mSystem packages up-to-date.\e[0m"
fi
}
# Installs packages as specified in apt.txt
ensure_apt_dependencies() {
pre_step "Installing extra packages"
if [ -z "$(apt --version 2> /dev/null)" ]; then
echo -e "\e[33mApt not installed, skipping packages.\e[0m"
else
echo -e "\e[1mInstalling packages...\e[0m"
sudo apt install $(cat ./apt.txt) -y --autoremove
echo -e "\e[1;32mSystem packages installed.\e[0m"
fi
}
ensure_nvm() {
pre_step "Installing nvm to manage node version"
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# Ensuring that nvm is usable right away without restarting the shell
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
}
# Injects a managed block in the shell configuration.
inject_shell_configuration() {
pre_step "Injecting managed block in shell configuration"
BLOCK_DELIMITER_PATTERN="mcataford/env"
WORKING_PATH=$(git rev-parse --show-toplevel)
SHELL_CONFIG_PATH="$HOME/.zshrc"
echo "Setting up shell configuration extras..."
if [[ -z $(cat $SHELL_CONFIG_PATH | grep $BLOCK_DELIMITER_PATTERN) ]]; then
echo "# $BLOCK_DELIMITER_PATTERN\:start
source $WORKING_PATH/shell_extras
# $BLOCK_DELIMITER_PATTERN\:end" >> $SHELL_CONFIG_PATH
echo "✅ Added managed block to $SHELL_CONFIG_PATH"
else
echo "No changes to apply!"
fi
EDITOR_CONFIG=$HOME/.config/nvim
EDITOR_CONFIG_FILE=$EDITOR_CONFIG/init.vim
}
# Injects a managed block in the vim configuration
inject_vim_configuration() {
pre_step "Inject managed block in vim configuration"
if [[ -f $EDITOR_CONFIG_FILE ]]; then
echo "Setting up NVIM configuration extras..."
if [[ -z $(cat $EDITOR_CONFIG_FILE | grep $BLOCK_DELIMITER_PATTERN) ]]; then
echo "\" $BLOCK_DELIMITER_PATTERN\:start
source $WORKING_PATH/extras.vim
\" $BLOCK_DELIMITER_PATTERN\:end\n\n" >> $EDITOR_CONFIG_FILE.new
cat $EDITOR_CONFIG_FILE >> $EDITOR_CONFIG_FILE.new
mv $EDITOR_CONFIG_FILE $EDITOR_CONFIG_FILE.old
mv $EDITOR_CONFIG_FILE.new $EDITOR_CONFIG_FILE
echo "✅ Added managed block to $EDITOR_CONFIG_FILE"
else
echo "No changes to apply!"
fi
fi
echo "Setting up git configuration..."
source $WORKING_PATH/git_config
echo "✅ Set up git configuration, see $WORKING_PATH/git_config for details!"
}