Recover missing Brewfile and enhance system updates

- Add missing Brewfile (found in home directory)
- Add bashrc and FZF configurations to dotfiles
- Install mas CLI for Mac App Store management
- Enhance sysupdate() with moon phase and MAS updates
- Update symlinks script for all shell configs

🖖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
David F Glidden
2025-07-28 19:13:11 +02:00
co-authored by Claude
parent 1f543d195b
commit a0e34f78ae
10 changed files with 1095 additions and 6 deletions
+173
View File
@@ -0,0 +1,173 @@
# Brewfile - Curated list for fresh macOS setup
# Comment out lines for apps you don't want installed
# Taps
tap "homebrew/cask"
tap "homebrew/cask-fonts"
# ============================================
# SHELL & TERMINAL
# ============================================
brew "antidote" # ZSH plugin manager
brew "powerlevel10k" # ZSH theme
brew "fzf" # Fuzzy finder
brew "zoxide" # Smarter cd command
brew "direnv" # Per-directory environment variables
brew "tmux" # Terminal multiplexer
# ============================================
# ESSENTIAL CLI TOOLS
# ============================================
brew "mas" # Mac App Store CLI
brew "git" # Version control
brew "wget" # Download files
brew "tree" # Directory visualization
brew "coreutils" # GNU core utilities
brew "eza" # Modern ls replacement
brew "jq" # JSON processor
brew "ripgrep" # Fast grep alternative (rg)
brew "fd" # Fast find alternative
brew "bat" # Better cat with syntax highlighting
brew "tldr" # Simplified man pages
brew "httpie" # Modern curl alternative
# ============================================
# DEVELOPMENT TOOLS
# ============================================
# brew "node" # Node.js (you use nvm instead)
brew "python@3.12" # Python (for proselint dependency)
brew "python@3.13" # Python (latest)
brew "pipx" # Install Python apps in isolated envs
brew "pandoc" # Document converter
brew "multimarkdown" # Enhanced markdown processor
brew "gh" # GitHub CLI
brew "proselint" # Prose linter
# Text editors & IDEs
cask "iterm2" # Terminal emulator
cask "kitty" # GPU-accelerated terminal
cask "bbedit" # Text editor
# Version control
cask "github" # GitHub Desktop
# ============================================
# PRODUCTIVITY & ESSENTIAL APPS
# ============================================
cask "1password" # Password manager
cask "obsidian" # Knowledge base
cask "marked" # Markdown preview (Marked 2)
cask "launchbar" # Application launcher
# Communication
cask "signal" # Encrypted messaging
# cask "telegram" # Messaging
# ============================================
# UTILITIES
# ============================================
cask "karabiner-elements" # Keyboard customization
cask "hazel" # Automated organization
cask "keka" # Archive utility
cask "appcleaner" # Uninstall apps cleanly
cask "bartender" # Menu bar organization
cask "swiftbar" # Menu bar scripts
cask "soundsource" # Audio control
cask "vuescan" # Scanner software
# ============================================
# MEDIA & CREATIVE
# ============================================
brew "ffmpeg" # Media processing
brew "yt-dlp" # YouTube downloader (active fork)
brew "exiftool" # Read/write EXIF metadata
cask "vlc" # Media player
cask "handbrake" # Video transcoder
cask "xld" # Audio converter
cask "transmission" # BitTorrent client
# ============================================
# OPTIONAL/SPECIFIC USE
# ============================================
# Research & Reading
cask "calibre" # E-book management
# cask "zotero" # Reference management
# cask "anki" # Spaced repetition
# Development & Transfer
# cask "docker" # Containerization
cask "transmit" # FTP/SFTP client
# Security/Privacy
# cask "tunnelblick" # OpenVPN client
cask "gpg-suite" # GPG encryption
# cask "lulu" # Firewall
cask "oversight" # Webcam/mic monitor
# Other tools
brew "neofetch" # System info display
brew "qrencode" # Generate QR codes
brew "mackup" # Backup/sync app preferences
brew "pass" # Password store (for GPG)
cask "ollama" # Local LLMs
# ============================================
# FONTS
# ============================================
cask "font-hack-nerd-font" # Programming font with icons
# cask "font-fira-code-nerd-font" # Ligatures + icons
# cask "font-jetbrains-mono-nerd-font" # JetBrains + icons
# cask "font-meslo-lg-nerd-font" # Powerline + icons
# cask "font-source-code-pro-nerd-font" # Adobe Source Code Pro + icons
# ============================================
# MAC APP STORE APPS
# ============================================
# Productivity
mas "Drafts", id: 1435957248
mas "iA Writer", id: 775737590
mas "Numbers", id: 409203825
mas "Pages", id: 409201541
mas "PCalc", id: 403504866
# Communication
mas "WhatsApp", id: 1147396723
# Safari Extensions
mas "1Password for Safari", id: 1569813296
mas "AdGuard for Safari", id: 1440147259
mas "Hush", id: 1544743900
mas "Vinegar", id: 1591303229
mas "StopTheMadness Pro", id: 6471380298
mas "Super Agent", id: 1568262835
# Reading & Research
mas "Reeder.", id: 1529448980
mas "Klib", id: 1196268448
mas "forScore", id: 363738376
# Utilities
mas "LocalSend", id: 1661733229
mas "NordVPN", id: 905953485
mas "Table Tool", id: 1122008420
mas "xSearch", id: 1579902068
mas "Exporter", id: 1099120373
mas "Mapper", id: 1589391989
mas "Moon Pro", id: 1528941870
# Privacy/Security
mas "Orbot", id: 1609461599
# Optional (commented out)
# mas "Fantastical", id: 975937182
# mas "Keynote", id: 409183694
# mas "Dark Reader for Safari", id: 1438243180
# ============================================
# APPS TO INSTALL MANUALLY
# ============================================
# These don't have casks or require special handling:
# - Claude
# - ChatGPT
# - Dorico 5 (Steinberg)
# - Some audio production apps
+344
View File
@@ -0,0 +1,344 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Ansi 0 Color</key>
<dict>
<key>Alpha Component</key>
<real>1</real>
<key>Blue Component</key>
<real>0.32156863808631897</real>
<key>Color Space</key>
<string>sRGB</string>
<key>Green Component</key>
<real>0.25882354378700256</real>
<key>Red Component</key>
<real>0.23137255012989044</real>
</dict>
<key>Ansi 1 Color</key>
<dict>
<key>Alpha Component</key>
<real>1</real>
<key>Blue Component</key>
<real>0.41568627953529358</real>
<key>Color Space</key>
<string>sRGB</string>
<key>Green Component</key>
<real>0.38039216399192810</real>
<key>Red Component</key>
<real>0.74901962280273438</real>
</dict>
<key>Ansi 10 Color</key>
<dict>
<key>Alpha Component</key>
<real>1</real>
<key>Blue Component</key>
<real>0.54901963472366333</real>
<key>Color Space</key>
<string>sRGB</string>
<key>Green Component</key>
<real>0.74509805440902710</real>
<key>Red Component</key>
<real>0.63921570777893066</real>
</dict>
<key>Ansi 11 Color</key>
<dict>
<key>Alpha Component</key>
<real>1</real>
<key>Blue Component</key>
<real>0.54509806632995605</real>
<key>Color Space</key>
<string>sRGB</string>
<key>Green Component</key>
<real>0.79607844352722168</real>
<key>Red Component</key>
<real>0.92156863212585449</real>
</dict>
<key>Ansi 12 Color</key>
<dict>
<key>Alpha Component</key>
<real>1</real>
<key>Blue Component</key>
<real>0.75686275959014893</real>
<key>Color Space</key>
<string>sRGB</string>
<key>Green Component</key>
<real>0.63137257099151611</real>
<key>Red Component</key>
<real>0.50588238239288330</real>
</dict>
<key>Ansi 13 Color</key>
<dict>
<key>Alpha Component</key>
<real>1</real>
<key>Blue Component</key>
<real>0.67843139171600342</real>
<key>Color Space</key>
<string>sRGB</string>
<key>Green Component</key>
<real>0.55686277151107788</real>
<key>Red Component</key>
<real>0.70588237047195435</real>
</dict>
<key>Ansi 14 Color</key>
<dict>
<key>Alpha Component</key>
<real>1</real>
<key>Blue Component</key>
<real>0.73333334922790527</real>
<key>Color Space</key>
<string>sRGB</string>
<key>Green Component</key>
<real>0.73725491762161255</real>
<key>Red Component</key>
<real>0.56078433990478516</real>
</dict>
<key>Ansi 15 Color</key>
<dict>
<key>Alpha Component</key>
<real>1</real>
<key>Blue Component</key>
<real>0.95686274766921997</real>
<key>Color Space</key>
<string>sRGB</string>
<key>Green Component</key>
<real>0.93725490570068359</real>
<key>Red Component</key>
<real>0.92549020051956177</real>
</dict>
<key>Ansi 2 Color</key>
<dict>
<key>Alpha Component</key>
<real>1</real>
<key>Blue Component</key>
<real>0.54901963472366333</real>
<key>Color Space</key>
<string>sRGB</string>
<key>Green Component</key>
<real>0.74509805440902710</real>
<key>Red Component</key>
<real>0.63921570777893066</real>
</dict>
<key>Ansi 3 Color</key>
<dict>
<key>Alpha Component</key>
<real>1</real>
<key>Blue Component</key>
<real>0.54509806632995605</real>
<key>Color Space</key>
<string>sRGB</string>
<key>Green Component</key>
<real>0.79607844352722168</real>
<key>Red Component</key>
<real>0.92156863212585449</real>
</dict>
<key>Ansi 4 Color</key>
<dict>
<key>Alpha Component</key>
<real>1</real>
<key>Blue Component</key>
<real>0.75686275959014893</real>
<key>Color Space</key>
<string>sRGB</string>
<key>Green Component</key>
<real>0.63137257099151611</real>
<key>Red Component</key>
<real>0.50588238239288330</real>
</dict>
<key>Ansi 5 Color</key>
<dict>
<key>Alpha Component</key>
<real>1</real>
<key>Blue Component</key>
<real>0.67843139171600342</real>
<key>Color Space</key>
<string>sRGB</string>
<key>Green Component</key>
<real>0.55686277151107788</real>
<key>Red Component</key>
<real>0.70588237047195435</real>
</dict>
<key>Ansi 6 Color</key>
<dict>
<key>Alpha Component</key>
<real>1</real>
<key>Blue Component</key>
<real>0.81568628549575806</real>
<key>Color Space</key>
<string>sRGB</string>
<key>Green Component</key>
<real>0.75294119119644165</real>
<key>Red Component</key>
<real>0.53333336114883423</real>
</dict>
<key>Ansi 7 Color</key>
<dict>
<key>Alpha Component</key>
<real>1</real>
<key>Blue Component</key>
<real>0.94117647409439087</real>
<key>Color Space</key>
<string>sRGB</string>
<key>Green Component</key>
<real>0.91372549533843994</real>
<key>Red Component</key>
<real>0.89803922176361084</real>
</dict>
<key>Ansi 8 Color</key>
<dict>
<key>Alpha Component</key>
<real>1</real>
<key>Blue Component</key>
<real>0.41568627953529358</real>
<key>Color Space</key>
<string>sRGB</string>
<key>Green Component</key>
<real>0.33725491166114807</real>
<key>Red Component</key>
<real>0.29803922772407532</real>
</dict>
<key>Ansi 9 Color</key>
<dict>
<key>Alpha Component</key>
<real>1</real>
<key>Blue Component</key>
<real>0.41568627953529358</real>
<key>Color Space</key>
<string>sRGB</string>
<key>Green Component</key>
<real>0.38039216399192810</real>
<key>Red Component</key>
<real>0.74901962280273438</real>
</dict>
<key>Background Color</key>
<dict>
<key>Alpha Component</key>
<real>1</real>
<key>Blue Component</key>
<real>0.25098040699958801</real>
<key>Color Space</key>
<string>sRGB</string>
<key>Green Component</key>
<real>0.20392157137393951</real>
<key>Red Component</key>
<real>0.18039216101169586</real>
</dict>
<key>Badge Color</key>
<dict>
<key>Alpha Component</key>
<real>0.5</real>
<key>Blue Component</key>
<real>0.0</real>
<key>Color Space</key>
<string>sRGB</string>
<key>Green Component</key>
<real>0.1491314172744751</real>
<key>Red Component</key>
<real>1</real>
</dict>
<key>Bold Color</key>
<dict>
<key>Alpha Component</key>
<real>1</real>
<key>Blue Component</key>
<real>0.91372549533843994</real>
<key>Color Space</key>
<string>sRGB</string>
<key>Green Component</key>
<real>0.87058824300765991</real>
<key>Red Component</key>
<real>0.84705883264541626</real>
</dict>
<key>Cursor Color</key>
<dict>
<key>Alpha Component</key>
<real>1</real>
<key>Blue Component</key>
<real>0.91372549533843994</real>
<key>Color Space</key>
<string>sRGB</string>
<key>Green Component</key>
<real>0.87058824300765991</real>
<key>Red Component</key>
<real>0.84705883264541626</real>
</dict>
<key>Cursor Guide Color</key>
<dict>
<key>Alpha Component</key>
<real>0.25</real>
<key>Blue Component</key>
<real>1</real>
<key>Color Space</key>
<string>sRGB</string>
<key>Green Component</key>
<real>0.9268307089805603</real>
<key>Red Component</key>
<real>0.70213186740875244</real>
</dict>
<key>Cursor Text Color</key>
<dict>
<key>Alpha Component</key>
<real>1</real>
<key>Blue Component</key>
<real>0.25098040699958801</real>
<key>Color Space</key>
<string>sRGB</string>
<key>Green Component</key>
<real>0.20392157137393951</real>
<key>Red Component</key>
<real>0.18039216101169586</real>
</dict>
<key>Foreground Color</key>
<dict>
<key>Alpha Component</key>
<real>1</real>
<key>Blue Component</key>
<real>0.91372549533843994</real>
<key>Color Space</key>
<string>sRGB</string>
<key>Green Component</key>
<real>0.87058824300765991</real>
<key>Red Component</key>
<real>0.84705883264541626</real>
</dict>
<key>Link Color</key>
<dict>
<key>Alpha Component</key>
<real>1</real>
<key>Blue Component</key>
<real>0.73423302173614502</real>
<key>Color Space</key>
<string>sRGB</string>
<key>Green Component</key>
<real>0.35916060209274292</real>
<key>Red Component</key>
<real>0.0</real>
</dict>
<key>Selected Text Color</key>
<dict>
<key>Alpha Component</key>
<real>1</real>
<key>Blue Component</key>
<real>0.25098040699958801</real>
<key>Color Space</key>
<string>sRGB</string>
<key>Green Component</key>
<real>0.20392157137393951</real>
<key>Red Component</key>
<real>0.18039216101169586</real>
</dict>
<key>Selection Color</key>
<dict>
<key>Alpha Component</key>
<real>1</real>
<key>Blue Component</key>
<real>0.81568628549575806</real>
<key>Color Space</key>
<string>sRGB</string>
<key>Green Component</key>
<real>0.75294119119644165</real>
<key>Red Component</key>
<real>0.53333336114883423</real>
</dict>
</dict>
</plist>
+99
View File
@@ -0,0 +1,99 @@
# iTerm2 Configuration
This directory contains iTerm2 configuration to match the Kitty terminal setup with Nord theme.
## Quick Setup
1. **Import Nord Color Scheme**:
```bash
# Run the setup script
~/dotfiles/config/iterm2/setup-iterm.sh
```
2. **Manual Color Import**:
- Open iTerm2
- Press `Cmd+,` to open Preferences
- Go to **Profiles → Colors**
- Click **Color Presets...** dropdown
- Select **Import...**
- Navigate to `~/dotfiles/config/iterm2/Nord.itermcolors`
- Select **Nord** from the Color Presets dropdown
## Matching Settings with Kitty
The following settings match your Kitty configuration:
### Font Configuration
- **Font**: Iosevka Term SS08 (or Dank Mono if you prefer)
- **Size**: 16pt
- **Ligatures**: Enabled
- **Non-ASCII Font**: Fira Code Nerd Font (for symbols)
### Window Settings
- **Default Size**: 120 columns × 35 rows
- **Transparency**: 8% (equivalent to Kitty's 0.92 opacity)
- **Blur**: Optional, helps with readability
### Behavior
- **Scrollback**: 10,000 lines
- **Copy on Selection**: Enabled
- **Visual Bell**: Enabled (no audio bell)
- **Cursor**: Block, blinking
## Manual Configuration
If you prefer to configure manually:
1. **Font**:
- Profiles → Text → Font → Change Font
- Select "Iosevka Term SS08" or "Dank Mono", Size 16
2. **Colors**:
- Already handled by importing Nord.itermcolors
3. **Window**:
- Profiles → Window → Settings for New Windows
- Columns: 120, Rows: 35
- Transparency: Drag slider to ~8%
4. **Terminal**:
- Profiles → Terminal → Scrollback Buffer
- Set to 10,000 lines
5. **Keys**:
- Profiles → Keys → Key Mappings
- Add shortcuts as needed to match Kitty
## Keyboard Shortcuts
To match Kitty's shortcuts in iTerm2:
| Action | Kitty | iTerm2 Setup |
|--------|-------|--------------|
| New Tab | `Cmd+T` | Default |
| Close Tab | `Cmd+W` | Default |
| Next Tab | `Cmd+]` | Default |
| Previous Tab | `Cmd+[` | Default |
| Font Size + | `Cmd+Plus` | Preferences → Keys → + |
| Font Size - | `Cmd+Minus` | Preferences → Keys → + |
| Font Size Reset | `Cmd+0` | Preferences → Keys → + |
## Saving Your Configuration
To save your iTerm2 configuration to dotfiles:
1. Open Preferences (`Cmd+,`)
2. Go to **General → Preferences**
3. Click **Load preferences from a custom folder**
4. Select `~/dotfiles/config/iterm2`
5. Check **Save changes to folder when iTerm2 quits**
This ensures your iTerm2 settings are backed up with your dotfiles.
## Nord Theme Benefits
The Nord color scheme is specifically chosen for:
- **Reduced eye strain** with muted colors
- **Excellent contrast** without being harsh
- **Better readability** for users with vision considerations
- **Consistent appearance** across Kitty and iTerm2
+64
View File
@@ -0,0 +1,64 @@
#!/usr/bin/env bash
# Setup iTerm2 with Nord theme and matching Kitty settings
set -euo pipefail
DOTFILES_DIR="$HOME/dotfiles"
ITERM_CONFIG_DIR="$DOTFILES_DIR/config/iterm2"
# Colors
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
echo -e "${BLUE}Setting up iTerm2 configuration...${NC}"
# 1. Tell iTerm2 to use custom preferences folder
echo -e "${YELLOW}Configuring iTerm2 to use dotfiles preferences...${NC}"
defaults write com.googlecode.iterm2 PrefsCustomFolder -string "$ITERM_CONFIG_DIR"
defaults write com.googlecode.iterm2 LoadPrefsFromCustomFolder -bool true
# 2. Set specific preferences matching Kitty config
echo -e "${YELLOW}Setting iTerm2 preferences to match Kitty...${NC}"
# Font settings (Iosevka Term SS08, 16pt - matching Kitty)
defaults write com.googlecode.iterm2 "Normal Font" -string "IosevkaTermSS08-Regular 16"
defaults write com.googlecode.iterm2 "Non Ascii Font" -string "FiraCodeNerdFontComplete-Regular 16"
# Enable ligatures
defaults write com.googlecode.iterm2 "ASCII Ligatures" -bool true
# Window size (120x35 characters)
defaults write com.googlecode.iterm2 "Columns" -int 120
defaults write com.googlecode.iterm2 "Rows" -int 35
# Transparency (matching Kitty's 0.92 opacity = 8% transparency)
defaults write com.googlecode.iterm2 "Transparency" -float 0.08
# Scrollback lines (10000)
defaults write com.googlecode.iterm2 "Scrollback Lines" -int 10000
# Visual bell instead of audio
defaults write com.googlecode.iterm2 "Silence Bell" -bool false
defaults write com.googlecode.iterm2 "Visual Bell" -bool true
# Copy on selection
defaults write com.googlecode.iterm2 "Copy to Pasteboard on Selection" -bool true
# Cursor settings
defaults write com.googlecode.iterm2 "Cursor Type" -int 0 # Block cursor
defaults write com.googlecode.iterm2 "Blinking Cursor" -bool true
echo -e "${GREEN}✅ iTerm2 preferences configured${NC}"
echo ""
echo -e "${YELLOW}To complete the setup:${NC}"
echo "1. Open iTerm2"
echo "2. Go to Preferences > Profiles > Colors"
echo "3. Click 'Color Presets...' dropdown"
echo "4. Select 'Import...' and choose: $ITERM_CONFIG_DIR/Nord.itermcolors"
echo "5. Select 'Nord' from the Color Presets dropdown"
echo ""
echo "Optional: Export your full iTerm2 config:"
echo " Preferences > General > Preferences"
echo " Click 'Save settings to Folder' and choose: $ITERM_CONFIG_DIR"
+353
View File
@@ -0,0 +1,353 @@
# vim:fileencoding=utf-8:ft=conf:foldmethod=marker
# ═══════════════════════════════════════════════════════════════════════════════
# KITTY TERMINAL CONFIGURATION
# Following the μέτρον principle: measure, proportion, and what is fitting
#
# Philosophy:
# - Performance without excess
# - Visual clarity without distraction
# - Keyboard efficiency without complexity
# - Durable choices that age well
# ═══════════════════════════════════════════════════════════════════════════════
#: Fonts {{{
# Font choice rationale: Dank Mono provides excellent readability with
# tasteful ligatures that aid code comprehension without being excessive
# font_family Dank Mono
# bold_font Dank Mono
#italic_font Dank Mono
# bold_italic_font Dank Mono
# Font choice rationale: Iosevka Term SS08 has ultra-consistent rhythm, beautiful slant, clear punctuation
font_family Iosevka Term SS08
bold_font Iosevka Term SS08
italic_font Iosevka Term SS08
bold_italic_font Iosevka Term SS08
# 16pt provides optimal readability on modern displays without strain
font_size 16.0
# Fallback fonts for symbols and special characters
# This ensures proper rendering of powerline, nerd font icons, and unicode
symbol_map U+E0A0-U+E0A3,U+E0C0-U+E0C7 PowerlineSymbols
symbol_map U+276F-U+2771,U+2500-U+259F Fira Code Nerd Font
symbol_map U+E000-U+E00A,U+E100-U+E117,U+E200-U+E2A9,U+E300-U+E3E3,U+E400-U+E4CF,U+E500-U+E5FF,U+E600-U+E6FF,U+E700-U+E7C5,U+E800-U+E8FF,U+EA00-U+EBFF,U+EC00-U+EE0C,U+F000-U+F2E0,U+F300-U+F372,U+F400-U+F533,U+F600-U+F64F,U+F700-U+F7FF,U+F800-U+F8FF,U+F900-U+F9FF,U+FA00-U+FAFF,U+FB00-U+FBFF,U+FC00-U+FCFF,U+FD00-U+FDFF,U+FE00-U+FE0F,U+FE30-U+FE4F Fira Code Nerd Font
# Mathematical symbols fallback
symbol_map U+2200-U+22FF Fira Code Nerd Font
# Box drawing and block elements with better alignment
symbol_map U+2500-U+259F Fira Code Nerd Font
# Powerline symbols (in case PowerlineSymbols font is not available)
symbol_map U+E0A0-U+E0A2,U+E0B0-U+E0B3 Fira Code Nerd Font
# Enable ligatures for better code readability (!=, =>, etc.)
disable_ligatures never
# Adjust vertical spacing for better readability (5% more line height)
adjust_line_height 105%
# Box drawing characters should align properly
box_drawing_scale 0.001, 1, 1.5, 2
#: }}}
#: Cursor customization {{{
# Block cursor for clear visibility
cursor_shape block
# Gentle blinking to locate cursor without distraction
cursor_blink_interval 0.5
cursor_stop_blinking_after 15.0
#: }}}
#: Scrollback {{{
# Generous but not excessive scrollback (10K lines)
scrollback_lines 10000
# Use less with better options for scrollback viewing
scrollback_pager less --chop-long-lines --RAW-CONTROL-CHARS +INPUT_LINE_NUMBER
# Fill new space when window is enlarged for continuity
scrollback_fill_enlarged_window yes
#: }}}
#: Mouse {{{
# Hide mouse quickly when typing
mouse_hide_wait 1.0
# URL handling with clear visual feedback
url_color #0087bd
url_style curly
detect_urls yes
# Smart clipboard behavior - copy on select for macOS workflow
copy_on_select clipboard
# Remove trailing spaces when copying (clean data)
strip_trailing_spaces smart
# Better word selection boundaries for programming
select_by_word_characters @-./_~?&=%+#
# Focus follows mouse for efficient window management
focus_follows_mouse no
#: }}}
#: Performance tuning {{{
# Balanced performance settings
repaint_delay 10
input_delay 3
# Sync to monitor to prevent tearing
sync_to_monitor yes
#: }}}
#: Terminal bell {{{
# Visual bell instead of audio (less disruptive)
enable_audio_bell no
visual_bell_duration 0.1
window_alert_on_bell yes
bell_on_tab yes
#: }}}
#: Window layout {{{
# Remember window size for consistency
remember_window_size yes
# Optimal initial window size for modern development
# 120 columns: fits side-by-side code views, exceeds 80-char standard
# 35 rows: comfortable viewing without overwhelming
initial_window_width 120c
initial_window_height 35c
# All layouts available but start with stack
enabled_layouts tall:bias=70,stack,fat,grid,horizontal,vertical
# Subtle window borders for multi-window clarity
window_border_width 1pt
draw_minimal_borders yes
# Small margin for visual breathing room
window_margin_width 2
single_window_margin_width 0
# Padding inside windows for readability
window_padding_width 8
# Center cell area when size doesn't divide evenly
placement_strategy center
# Nord-themed window border colors - gentle contrast
active_border_color #88c0d0
inactive_border_color #4c566a
bell_border_color #bf616a
# Slight fade for inactive windows (maintains focus)
inactive_text_alpha 0.8
# Hide decorations for more screen space
hide_window_decorations no
# Confirm before closing windows with multiple tabs
confirm_os_window_close 2
#: }}}
#: Tab bar {{{
# Tab bar at top (conventional placement)
tab_bar_edge top
# Minimal tab bar that appears only when needed
tab_bar_min_tabs 2
tab_bar_style powerline
tab_powerline_style slanted
# Clear tab titles with index for easy navigation
tab_title_template "{index}: {title}"
active_tab_title_template "[{index}] {title}"
# Nord-themed tab colors - easy on the eyes
active_tab_foreground #d8dee9
active_tab_background #5e81ac
active_tab_font_style bold
inactive_tab_foreground #4c566a
inactive_tab_background #3b4252
inactive_tab_font_style normal
#: }}}
#: Color scheme {{{
# Nord color scheme - gentle on eyes with excellent contrast
# Specifically chosen for users with vision considerations
foreground #d8dee9
background #2e3440
# Slightly more opacity for reduced eye strain
background_opacity 0.92
# Subtle selection colors that don't shock
selection_foreground #2e3440
selection_background #88c0d0
# ANSI colors (Nord palette - muted but clear)
# Dark variants
color0 #3b4252
color8 #4c566a
# Red - muted but visible
color1 #bf616a
color9 #bf616a
# Green - gentle on eyes
color2 #a3be8c
color10 #a3be8c
# Yellow - warm, not glaring
color3 #ebcb8b
color11 #ebcb8b
# Blue - calm but distinct
color4 #81a1c1
color12 #81a1c1
# Magenta - subtle purple
color5 #b48ead
color13 #b48ead
# Cyan - soothing blue-green
color6 #88c0d0
color14 #8fbcbb
# White/light grays
color7 #e5e9f0
color15 #eceff4
#: }}}
#: Advanced {{{
# Use user's default shell
shell .
# Use configured editor
editor .
# Keep terminal open after process exits (for debugging)
close_on_child_death no
# Allow remote control for automation
allow_remote_control yes
listen_on unix:/tmp/kitty-{kitty_pid}
# Disable update checks (handle via homebrew)
update_check_interval 0
# Secure clipboard settings
clipboard_control write-clipboard write-primary read-clipboard
# Standard terminfo
term xterm-kitty
#: }}}
#: OS specific tweaks {{{
# macOS optimizations
macos_titlebar_color background
macos_option_as_alt yes
macos_quit_when_last_window_closed no
macos_window_resizable yes
macos_thicken_font 0
macos_traditional_fullscreen no
macos_show_window_title_in window
#: }}}
#: Keyboard shortcuts {{{
# Keep defaults minimal, add only essential customizations
kitty_mod cmd+shift
# Font size adjustments
map cmd+plus change_font_size all +1.0
map cmd+minus change_font_size all -1.0
map cmd+0 change_font_size all 0
# Window management
map kitty_mod+enter new_window_with_cwd
map kitty_mod+n new_os_window_with_cwd
# Tab management
map cmd+t new_tab_with_cwd
map cmd+w close_tab
map cmd+] next_tab
map cmd+[ previous_tab
map cmd+1 goto_tab 1
map cmd+2 goto_tab 2
map cmd+3 goto_tab 3
map cmd+4 goto_tab 4
map cmd+5 goto_tab 5
map cmd+6 goto_tab 6
map cmd+7 goto_tab 7
map cmd+8 goto_tab 8
map cmd+9 goto_tab 9
# Layout management
map kitty_mod+l next_layout
map kitty_mod+z toggle_layout stack
# Scrollback search (crucial for productivity)
map kitty_mod+/ launch --type=overlay --stdin-source=@screen_scrollback /opt/homebrew/bin/fzf --no-sort --no-mouse --exact -i
# URL/path hints
map kitty_mod+e open_url_with_hints
map kitty_mod+p>f kitten hints --type path --program -
map kitty_mod+p>l kitten hints --type line --program -
map kitty_mod+p>w kitten hints --type word --program -
# Clear terminal properly
map cmd+k clear_terminal reset active
# Reload configuration
map kitty_mod+f5 load_config_file
#: }}}
# ═══════════════════════════════════════════════════════════════════════════════
# Design Rationale:
#
# 1. Font: Dank Mono chosen for clarity and tasteful ligatures
# 2. Symbols: Comprehensive fallback chain for nerd fonts, powerline, unicode
# 3. Colors: Dracula theme for proven readability and wide tool support
# 4. Performance: Balanced settings that prioritize responsiveness
# 5. Shortcuts: Minimal additions to defaults, focusing on frequent tasks
# 6. Layout: Thoughtful spacing and borders for multi-window work
# 7. macOS: Native integration while maintaining terminal efficiency
# 8. Window Size: 120x35 chars - optimal for code reading and side-by-side splits
#
# The symbol_map entries ensure that powerline prompts, file icons, git symbols,
# and other special characters render correctly even when not in the primary font.
#
# The 120-column width allows comfortable viewing of code up to 100 chars with
# some margin, while 35 rows provides good context without overwhelming.
#
# This configuration embodies "what is fitting" - no more, no less.
# ═══════════════════════════════════════════════════════════════════════════════
+3
View File
@@ -41,8 +41,11 @@ link_file() {
# Shell configurations
echo -e "${YELLOW}Linking shell configurations...${NC}"
link_file "$DOTFILES_DIR/shell/.zshrc" "$HOME/.zshrc"
link_file "$DOTFILES_DIR/shell/.bashrc" "$HOME/.bashrc"
link_file "$DOTFILES_DIR/shell/.zprofile" "$HOME/.zprofile"
link_file "$DOTFILES_DIR/shell/.p10k.zsh" "$HOME/.p10k.zsh"
link_file "$DOTFILES_DIR/shell/.fzf.bash" "$HOME/.fzf.bash"
link_file "$DOTFILES_DIR/shell/.fzf.zsh" "$HOME/.fzf.zsh"
link_file "$DOTFILES_DIR/.gitconfig" "$HOME/.gitconfig"
link_file "$DOTFILES_DIR/.vimrc" "$HOME/.vimrc"
link_file "$DOTFILES_DIR/.npmrc" "$HOME/.npmrc"
+1
View File
@@ -0,0 +1 @@
[ -f ~/.fzf.bash ] && source ~/.fzf.bash
+7
View File
@@ -0,0 +1,7 @@
# Setup fzf
# ---------
if [[ ! "$PATH" == */Users/davidglidden/.fzf/bin* ]]; then
PATH="${PATH:+${PATH}:}/Users/davidglidden/.fzf/bin"
fi
eval "$(fzf --bash)"
+7
View File
@@ -0,0 +1,7 @@
# Setup fzf
# ---------
if [[ ! "$PATH" == */Users/davidglidden/.fzf/bin* ]]; then
PATH="${PATH:+${PATH}:}/Users/davidglidden/.fzf/bin"
fi
source <(fzf --zsh)
+44 -6
View File
@@ -41,6 +41,23 @@ sysupdate() {
return 1
fi
# Mac App Store updates
echo "🍎 Updating Mac App Store apps..."
if command -v mas >/dev/null; then
local mas_outdated=$(mas outdated)
if [[ -n "$mas_outdated" ]]; then
echo "📱 Updating MAS apps:"
echo "$mas_outdated" | while read -r line; do
echo " $line"
done
mas upgrade || echo "⚠️ Some MAS updates may require manual intervention"
else
echo "✅ All MAS apps are up to date"
fi
else
echo "⚠️ mas not installed - install with: brew install mas"
fi
# Verify critical tools still work
local critical_tools=(git zsh python3 brew)
for tool in "${critical_tools[@]}"; do
@@ -61,24 +78,45 @@ sysupdate() {
(cd ~/.fzf && git pull && ./install --all) >/dev/null 2>&1 || true
fi
# Fix Zsh completion security warnings
echo "🔒 Checking Zsh completion security..."
if [[ -d "/opt/homebrew/share/zsh" ]]; then
# Fix common Homebrew Zsh permission issues
chmod 755 /opt/homebrew/share/zsh /opt/homebrew/share/zsh/site-functions 2>/dev/null || true
fi
# Check for broken symlinks
echo "🧹 Checking for broken symlinks..."
local broken_links=$(find "/usr/local/bin" "$HOME/bin" "$HOME/.local/bin" -xtype l 2>/dev/null)
[[ -n "$broken_links" ]] && echo "🔗 Broken symlinks found:\n$broken_links"
# Moon phase logging (with API key check and graceful failure)
# Moon phase logging (using SwiftBar API key)
echo "🌓 Celestial context:"
if [[ -n "$MOON_API_KEY" ]] && command -v curl >/dev/null && command -v jq >/dev/null; then
local moon_json=$(curl -s "https://api.ipgeolocation.io/astronomy?apiKey=$MOON_API_KEY" 2>/dev/null)
if command -v curl >/dev/null && command -v jq >/dev/null; then
# Use API key from SwiftBar script
local api_key="6ec71a8170214d828c08ba8bf2ca29e9"
local moon_json=$(curl -s "https://api.ipgeolocation.io/astronomy?apiKey=$api_key" 2>/dev/null)
if [[ $? -eq 0 ]] && [[ -n "$moon_json" ]]; then
local moon_phase=$(echo "$moon_json" | jq -r '.moon_phase // "Unknown"')
local moon_phase=$(echo "$moon_json" | jq -r '.moon_phase // "Unknown"' | tr '_' ' ')
local illum=$(echo "$moon_json" | jq -r '.moon_illumination_percentage // "Unknown"')
echo "🌙 $moon_phase (${illum}%)"
# Add moon emoji based on phase
local moon_emoji="🌙"
case "$moon_phase" in
"new moon") moon_emoji="🌑" ;;
"waxing crescent") moon_emoji="🌒" ;;
"first quarter") moon_emoji="🌓" ;;
"waxing gibbous") moon_emoji="🌔" ;;
"full moon") moon_emoji="🌕" ;;
"waning gibbous") moon_emoji="🌖" ;;
"last quarter") moon_emoji="🌗" ;;
"waning crescent") moon_emoji="🌘" ;;
esac
echo "$moon_emoji $moon_phase (${illum}%)"
else
echo "🌙 Moon phase unavailable"
fi
else
echo "🌙 Moon phase tracking disabled (missing API key or tools)"
echo "🌙 Moon phase tracking disabled (missing curl or jq)"
fi
# Dotfiles management (corrected path)