Add cursor shape changes for insert/replace/normal modes in vimrc #76
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Shell Startup Performance | |
| on: | |
| pull_request: | |
| paths: | |
| - 'shared/.config/shell/**' | |
| - 'shared/.config/fish/**' | |
| - 'shared/.profile' | |
| - 'shared/.zshrc' | |
| - 'shared/.zshenv' | |
| - 'shared/.zprofile' | |
| - 'shared/.bashrc' | |
| - 'shared/.bash_profile' | |
| - 'personal/.config/shell/**' | |
| - 'personal/.config/fish/**' | |
| - 'work/.config/shell/**' | |
| - 'work/.config/fish/**' | |
| - 'rca/.config/shell/**' | |
| - 'rca/.config/fish/**' | |
| - 'ubuntu-server/.config/shell/**' | |
| - 'ubuntu-server/.config/fish/**' | |
| push: | |
| branches: | |
| - main | |
| paths: | |
| - 'shared/.config/shell/**' | |
| - 'shared/.config/fish/**' | |
| - 'shared/.profile' | |
| - 'shared/.zshrc' | |
| - 'shared/.zshenv' | |
| - 'shared/.zprofile' | |
| - 'shared/.bashrc' | |
| - 'shared/.bash_profile' | |
| - 'personal/.config/shell/**' | |
| - 'personal/.config/fish/**' | |
| - 'work/.config/shell/**' | |
| - 'work/.config/fish/**' | |
| - 'rca/.config/shell/**' | |
| - 'rca/.config/fish/**' | |
| - 'ubuntu-server/.config/shell/**' | |
| - 'ubuntu-server/.config/fish/**' | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| pull-requests: write | |
| jobs: | |
| ubuntu-performance: | |
| runs-on: ubuntu-latest | |
| env: | |
| OS_NAME: Ubuntu | |
| PROFILES: shared ubuntu-server | |
| steps: | |
| - name: Checkout current branch | |
| uses: actions/checkout@v4 | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y bash zsh fish stow bc time curl unzip jq | |
| - name: Install shell startup tools | |
| run: .github/workflows/scripts/install-startup-tools.sh | |
| - name: Install current dotfiles | |
| run: | | |
| rm -f "$HOME/.bash_profile" "$HOME/.bashrc" "$HOME/.profile" "$HOME/.gitconfig" | |
| stow -v --target="$HOME" ${{ env.PROFILES }} | |
| - name: Create test .env file | |
| run: .github/workflows/scripts/create-test-env.sh | |
| - name: Measure current startup times (no tmux) | |
| run: | | |
| .github/workflows/scripts/measure-shell-startup.sh 20 current-times.json false | |
| cat current-times.json | |
| - name: Measure current startup times (with tmux) | |
| run: | | |
| .github/workflows/scripts/measure-shell-startup.sh 20 current-tmux-times.json true | |
| cat current-tmux-times.json | |
| - name: Add current times to workflow summary | |
| run: | | |
| echo "## Shell Startup Performance (${{ env.OS_NAME }})" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "### Without tmux" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "| Shell | Median (ms) |" >> $GITHUB_STEP_SUMMARY | |
| echo "|-------|-------------|" >> $GITHUB_STEP_SUMMARY | |
| echo "| Bash | $(jq -r '.bash.median' current-times.json) |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Zsh | $(jq -r '.zsh.median' current-times.json) |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Fish | $(jq -r '.fish.median' current-times.json) |" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "### With tmux auto-start" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "| Shell | Median (ms) |" >> $GITHUB_STEP_SUMMARY | |
| echo "|-------|-------------|" >> $GITHUB_STEP_SUMMARY | |
| echo "| Bash | $(jq -r '.bash.median' current-tmux-times.json) |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Zsh | $(jq -r '.zsh.median' current-tmux-times.json) |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Fish | $(jq -r '.fish.median' current-tmux-times.json) |" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "**Profiles tested:** \`${{ env.PROFILES }}\`" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "*Median of 20 iterations after 3 warmup runs. Lower is better.*" >> $GITHUB_STEP_SUMMARY | |
| - name: Save current results | |
| run: | | |
| cp current-times.json /tmp/current-times.json | |
| cp current-tmux-times.json /tmp/current-tmux-times.json | |
| - name: Uninstall current dotfiles | |
| run: stow -v --target="$HOME" -D ${{ env.PROFILES }} | |
| - name: Checkout base branch | |
| if: github.event_name == 'pull_request' | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: ${{ github.base_ref }} | |
| - name: Install base dotfiles | |
| if: github.event_name == 'pull_request' | |
| run: | | |
| rm -f "$HOME/.bash_profile" "$HOME/.bashrc" "$HOME/.profile" "$HOME/.gitconfig" | |
| stow -v --target="$HOME" ${{ env.PROFILES }} | |
| - name: Create test .env file | |
| if: github.event_name == 'pull_request' | |
| run: .github/workflows/scripts/create-test-env.sh | |
| - name: Measure base startup times (no tmux) | |
| if: github.event_name == 'pull_request' | |
| run: | | |
| .github/workflows/scripts/measure-shell-startup.sh 20 base-times.json false | |
| cat base-times.json | |
| - name: Measure base startup times (with tmux) | |
| if: github.event_name == 'pull_request' | |
| run: | | |
| .github/workflows/scripts/measure-shell-startup.sh 20 base-tmux-times.json true | |
| cat base-tmux-times.json | |
| - name: Generate performance report | |
| if: github.event_name == 'pull_request' | |
| run: | | |
| .github/workflows/scripts/generate-performance-report.sh \ | |
| "${{ env.OS_NAME }}" \ | |
| "${{ env.PROFILES }}" \ | |
| /tmp/current-times.json \ | |
| base-times.json \ | |
| /tmp/current-tmux-times.json \ | |
| base-tmux-times.json \ | |
| comment.md | |
| cat comment.md | |
| - name: Add performance report to workflow summary | |
| if: github.event_name == 'pull_request' | |
| run: cat comment.md >> $GITHUB_STEP_SUMMARY | |
| - name: Post comment to PR | |
| if: github.event_name == 'pull_request' | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: .github/workflows/scripts/post-performance-comment.sh "${{ env.OS_NAME }}" comment.md | |
| - name: Upload performance results | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ubuntu-performance-results | |
| path: | | |
| current-times.json | |
| current-tmux-times.json | |
| base-times.json | |
| base-tmux-times.json | |
| comment.md | |
| retention-days: 30 | |
| macos-performance: | |
| runs-on: macos-14 | |
| env: | |
| OS_NAME: macOS | |
| PROFILES: shared personal | |
| steps: | |
| - name: Checkout current branch | |
| uses: actions/checkout@v4 | |
| - name: Install dependencies | |
| run: brew install stow bc jq | |
| - name: Install shell startup tools | |
| run: .github/workflows/scripts/install-startup-tools.sh | |
| - name: Install current dotfiles | |
| run: | | |
| rm -f "$HOME/.bash_profile" "$HOME/.bashrc" "$HOME/.profile" "$HOME/.gitconfig" | |
| stow -v --target="$HOME" ${{ env.PROFILES }} | |
| - name: Create test .env file | |
| run: .github/workflows/scripts/create-test-env.sh | |
| - name: Measure current startup times (no tmux) | |
| run: | | |
| .github/workflows/scripts/measure-shell-startup.sh 20 current-times.json false | |
| cat current-times.json | |
| - name: Measure current startup times (with tmux) | |
| run: | | |
| .github/workflows/scripts/measure-shell-startup.sh 20 current-tmux-times.json true | |
| cat current-tmux-times.json | |
| - name: Add current times to workflow summary | |
| run: | | |
| echo "## Shell Startup Performance (${{ env.OS_NAME }})" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "### Without tmux" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "| Shell | Median (ms) |" >> $GITHUB_STEP_SUMMARY | |
| echo "|-------|-------------|" >> $GITHUB_STEP_SUMMARY | |
| echo "| Bash | $(jq -r '.bash.median' current-times.json) |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Zsh | $(jq -r '.zsh.median' current-times.json) |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Fish | $(jq -r '.fish.median' current-times.json) |" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "### With tmux auto-start" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "| Shell | Median (ms) |" >> $GITHUB_STEP_SUMMARY | |
| echo "|-------|-------------|" >> $GITHUB_STEP_SUMMARY | |
| echo "| Bash | $(jq -r '.bash.median' current-tmux-times.json) |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Zsh | $(jq -r '.zsh.median' current-tmux-times.json) |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Fish | $(jq -r '.fish.median' current-tmux-times.json) |" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "**Profiles tested:** \`${{ env.PROFILES }}\`" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "*Median of 20 iterations after 3 warmup runs. Lower is better.*" >> $GITHUB_STEP_SUMMARY | |
| - name: Save current results | |
| run: | | |
| cp current-times.json /tmp/current-times.json | |
| cp current-tmux-times.json /tmp/current-tmux-times.json | |
| - name: Uninstall current dotfiles | |
| run: stow -v --target="$HOME" -D ${{ env.PROFILES }} | |
| - name: Checkout base branch | |
| if: github.event_name == 'pull_request' | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: ${{ github.base_ref }} | |
| - name: Install base dotfiles | |
| if: github.event_name == 'pull_request' | |
| run: | | |
| rm -f "$HOME/.bash_profile" "$HOME/.bashrc" "$HOME/.profile" "$HOME/.gitconfig" | |
| stow -v --target="$HOME" ${{ env.PROFILES }} | |
| - name: Create test .env file | |
| if: github.event_name == 'pull_request' | |
| run: .github/workflows/scripts/create-test-env.sh | |
| - name: Measure base startup times (no tmux) | |
| if: github.event_name == 'pull_request' | |
| run: | | |
| .github/workflows/scripts/measure-shell-startup.sh 20 base-times.json false | |
| cat base-times.json | |
| - name: Measure base startup times (with tmux) | |
| if: github.event_name == 'pull_request' | |
| run: | | |
| .github/workflows/scripts/measure-shell-startup.sh 20 base-tmux-times.json true | |
| cat base-tmux-times.json | |
| - name: Generate performance report | |
| if: github.event_name == 'pull_request' | |
| run: | | |
| .github/workflows/scripts/generate-performance-report.sh \ | |
| "${{ env.OS_NAME }}" \ | |
| "${{ env.PROFILES }}" \ | |
| /tmp/current-times.json \ | |
| base-times.json \ | |
| /tmp/current-tmux-times.json \ | |
| base-tmux-times.json \ | |
| comment.md | |
| cat comment.md | |
| - name: Add performance report to workflow summary | |
| if: github.event_name == 'pull_request' | |
| run: cat comment.md >> $GITHUB_STEP_SUMMARY | |
| - name: Post comment to PR | |
| if: github.event_name == 'pull_request' | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: .github/workflows/scripts/post-performance-comment.sh "${{ env.OS_NAME }}" comment.md | |
| - name: Upload performance results | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: macos-performance-results | |
| path: | | |
| current-times.json | |
| current-tmux-times.json | |
| base-times.json | |
| base-tmux-times.json | |
| comment.md | |
| retention-days: 30 |