diff --git a/.gitignore b/.gitignore index df88eea..dff051f 100755 --- a/.gitignore +++ b/.gitignore @@ -61,3 +61,7 @@ yazi/bookmark !/claude/settings.json !/claude/system-prompt.txt !/claude/scripts/ +!/claude/commands/ + +# Deploy script +!/deploy.sh diff --git a/README.md b/README.md index 3fc446b..a929998 100644 --- a/README.md +++ b/README.md @@ -1,60 +1,105 @@ -# My config... +# My Config [中文版](./README_cn.md) -This config folder includes `i3` and `alacritty` config, however, I'm using [dwm](https://github.com/theniceboy/dwm) and [st](https://github.com/theniceboy/st) now. +This config folder includes configurations for various development tools and applications. -BTW, my scripts are in [this repo](https://github.com/theniceboy/scripts). +## Deploy -# Brew packages -``` -# Building -brew install automake gcc gdb jsdoc3 cmake gnu-getopt gnu-sed node go - -# Utils -brew install git git-delta git-flow rainbarf bat ccat wget tree fzf the_silver_searcher ripgrep fd - -# Apps -brew install tmux neovim jesseduffield/lazygit/lazygit yazi gh awscli tldr speedtest-cli ncdu neofetch onefetch bmon loc - -# Yazi -brew install poppler ffmpeg sevenzip jq starship imagemagick +### Quick Setup +Run the deployment script to install all tools and configure symlinks: +```bash +./deploy.sh ``` -# Important stuff: -## Ranger -use `pip install ueberzug` and `ranger-git` +The script is idempotent - you can run it multiple times safely. It will: +- Install/update Homebrew packages +- Set up zsh configuration sourcing +- Create configuration symlinks (tmux, claude) +- Skip already installed packages -## mutt +### Manual Homebrew Installation +If you need to install Homebrew manually: +```bash +/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" +``` + +## Apps + +### Claude Code Voice Configuration + +This config includes a directory-based voice system for Claude Code that uses macOS text-to-speech. + +#### Voice Commands +- `/voice-on` - Enable text-to-speech for current directory +- `/voice-off` - Disable text-to-speech for current directory + +#### Selecting and Downloading High Quality System Voices + +For the best text-to-speech experience, download high-quality system voices: + +1. **Open System Preferences** → **Accessibility** → **Spoken Content** +2. **Click the info icon (ⓘ)** next to the "System Voice" dropdown +3. **Search for "Siri"** to find the highest quality voices +4. **Download Siri voices** - these are the premium, neural-powered voices +5. **Select your preferred Siri voice** in the System Voice dropdown + +**Recommended**: Siri voices provide the most natural speech quality but require downloading additional voice data. + +#### Voice Database +Voice settings are stored per-directory in `~/.claude/voice-db.json` and automatically created by the scripts. + +### Other Applications +- **tmux**: Terminal multiplexer with custom configuration +- **neovim**: Modern text editor +- **yazi**: Terminal file manager +- **lazygit**: TUI for git operations + +## Linux Related + +
+Legacy Configuration (Click to expand) + +My scripts are in [this repo](https://github.com/theniceboy/scripts). + +This folder includes `i3` and `alacritty` config, however, I'm using [dwm](https://github.com/theniceboy/dwm) and [st](https://github.com/theniceboy/st) now. + +### Ranger +Use `pip install ueberzug` and `ranger-git` + +### Mutt Email Setup In `~/.gnupg/gpg-agent.conf`: ``` default-cache-ttl 34560000 max-cache-ttl 34560000 ``` -If this doesn't work, try [pam-gnupg](https://github.com/cruegge/pam-gnupg) -``` + +If this doesn't work, try [pam-gnupg](https://github.com/cruegge/pam-gnupg): +```bash yay -S pam-gnupg-git ``` -and in `/etc/pam.d/system-local-login` add: + +And in `/etc/pam.d/system-local-login` add: ``` auth optional pam_gnupg.so session optional pam_gnupg.so ``` -## Input Methods +### Input Methods Install: `fcitx` `fcitx-im` `fcitx-googlepinyin` `fcitx-configtool` And in `/etc/X11/xinit/xinitrc`: -``` +```bash export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx export XMODIFIERS="@im=fcitx" ``` -#### Fcitx users need to set the first input method to be Keyboard - layout +**Note**: Fcitx users need to set the first input method to be Keyboard - layout -## fonts -#### locale +### Fonts + +#### Locale Configuration In `locale.conf`: ``` LANG=en_US.UTF-8 @@ -69,48 +114,24 @@ LC_TELEPHONE=en_US.UTF-8 LC_TIME=en_US.UTF-8 ``` -#### My Font -I use the `Source Code Pro` font and `nerd-fonts-source-code-pro`. +#### Font Recommendations +- **Main Font**: `Source Code Pro` and `nerd-fonts-source-code-pro` +- **Noto Fonts**: Install `noto-fonts` (not `-all` - it's bloated). Check `/usr/share/fonts/noto` -#### About Noto -Just install `noto-fonts` (not `-all`). It's already bloated. Check `/usr/share/fonts/noto` - -#### Emoji -``` +#### Emoji Fonts +```bash yay -S ttf-linux-libertine ttf-inconsolata ttf-joypixels ttf-twemoji-color noto-fonts-emoji ttf-liberation ttf-droid ``` -#### Chinese -``` +#### Chinese Fonts +```bash yay -S wqy-bitmapfont wqy-microhei wqy-microhei-lite wqy-zenhei adobe-source-han-mono-cn-fonts adobe-source-han-sans-cn-fonts adobe-source-han-serif-cn-fonts ``` -## gtk-theme -I use `adapta-gtk-theme` and `arc-icon-theme`. +### GTK Theme +Using `adapta-gtk-theme` and `arc-icon-theme`. -## Claude Code Voice Configuration +### Arch Packages +See [my-packages.txt](https://github.com/theniceboy/.config/blob/master/my-packages.txt) for complete package list. -This config includes a directory-based voice system for Claude Code that uses macOS text-to-speech. - -### Voice Commands -- `/voice-on` - Enable text-to-speech for current directory -- `/voice-off` - Disable text-to-speech for current directory - -### Selecting and Downloading High Quality System Voices - -For the best text-to-speech experience, download high-quality system voices: - -1. **Open System Preferences** → **Accessibility** → **Spoken Content** -2. **Click "System Voice"** dropdown → **Customize...** -3. **Download premium voices** (these are much higher quality than default): - - **English**: Alex (Enhanced), Samantha (Enhanced), Victoria (Enhanced) - - **Other languages**: Download enhanced versions as needed -4. **Select your preferred voice** in the System Voice dropdown - -**Note**: Enhanced voices are 100-200MB each but provide significantly better speech quality than compact voices. - -### Voice Database -Voice settings are stored per-directory in `~/.claude/voice-db.json` and automatically created by the scripts. - -## Arch Packages I Installed: -See [my-packages.txt](https://github.com/theniceboy/.config/blob/master/my-packages.txt) +
diff --git a/README_cn.md b/README_cn.md index 255abb5..1e1a622 100644 --- a/README_cn.md +++ b/README_cn.md @@ -1,48 +1,108 @@ -# 我的配置文件... +# 我的配置 [English Ver.](./README.md) -此份配置文件包含 `i3` 和 `alacritty` 的配置, 不管怎样, 我现在已在使用 [dwm](https://github.com/theniceboy/dwm) 和 [st](https://github.com/theniceboy/st) - -顺便说一句, 我的脚本都在[此仓库中](https://github.com/theniceboy/scripts) +此配置文件夹包含各种开发工具和应用程序的配置。 中文翻译: [KiteAB](https://github.com/KiteAB) -# 重要的东西: -## Ranger +## 部署 + +### 快速设置 +运行部署脚本来安装所有工具并配置符号链接: +```bash +./deploy.sh +``` + +脚本具有幂等性 - 你可以多次安全地运行它。它将: +- 安装/更新 Homebrew 包 +- 设置 zsh 配置源 +- 创建配置符号链接 (tmux, claude) +- 跳过已安装的包 + +### 手动安装 Homebrew +如果需要手动安装 Homebrew: +```bash +/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" +``` + +## 应用程序 + +### Claude Code 语音配置 + +此配置包含一个基于目录的 Claude Code 语音系统,使用 macOS 文本转语音功能。 + +#### 语音命令 +- `/voice-on` - 为当前目录启用文本转语音 +- `/voice-off` - 为当前目录禁用文本转语音 + +#### 选择和下载高质量系统语音 + +为了获得最佳的文本转语音体验,请下载高质量的系统语音: + +1. **打开系统偏好设置** → **辅助功能** → **朗读内容** +2. **点击"系统语音"下拉菜单旁边的信息图标 (ⓘ)** +3. **搜索"Siri"**以找到最高质量的语音 +4. **下载 Siri 语音** - 这些是基于神经网络的高级语音 +5. **在系统语音下拉菜单中选择你喜欢的 Siri 语音** + +**推荐**: Siri 语音提供最自然的语音质量,但需要下载额外的语音数据。 + +#### 语音数据库 +语音设置按目录存储在 `~/.claude/voice-db.json` 中,由脚本自动创建。 + +### 其他应用程序 +- **tmux**: 带有自定义配置的终端复用器 +- **neovim**: 现代文本编辑器 +- **yazi**: 终端文件管理器 +- **lazygit**: Git 操作的 TUI + +## Linux 相关 + +
+传统配置(点击展开) + +我的脚本在[此仓库中](https://github.com/theniceboy/scripts)。 + +此文件夹包含 `i3` 和 `alacritty` 配置,不过我现在使用 [dwm](https://github.com/theniceboy/dwm) 和 [st](https://github.com/theniceboy/st)。 + +### Ranger 使用 `pip install ueberzug` 和 `ranger-git` -## mutt -在 `~/.gnupg/gpg-agent.conf` 中: +### Mutt 邮件设置 +在 `~/.gnupg/gpg-agent.conf` 中: ``` default-cache-ttl 34560000 max-cache-ttl 34560000 ``` -如果它不能运行, 请尝试 [pam-gnupg](https://github.com/cruegge/pam-gnupg) -``` + +如果这不起作用,请尝试 [pam-gnupg](https://github.com/cruegge/pam-gnupg): +```bash yay -S pam-gnupg-git ``` -并在 `/etc/pam.d/system-local-login` 中添加以下行: + +并在 `/etc/pam.d/system-local-login` 中添加: ``` auth optional pam_gnupg.so session optional pam_gnupg.so ``` -## 输入法 -安装: `fcitx` `fcitx-im` `fcitx-googlepinyin` `fcitx-configtool` +### 输入法 +安装:`fcitx` `fcitx-im` `fcitx-googlepinyin` `fcitx-configtool` -并编辑 `/etc/X11/xinit/xinitrc`: -``` +并在 `/etc/X11/xinit/xinitrc` 中: +```bash export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx export XMODIFIERS="@im=fcitx" ``` -#### Fcitx 用户需把第一输入法设置为键盘 - 布局 +**注意**: Fcitx 用户需要将第一输入法设置为键盘 - 布局 -## 字体 -#### 本地化 -在 `locale.conf` 中: +### 字体 + +#### 本地化配置 +在 `locale.conf` 中: ``` LANG=en_US.UTF-8 LC_ADDRESS=en_US.UTF-8 @@ -56,24 +116,24 @@ LC_TELEPHONE=en_US.UTF-8 LC_TIME=en_US.UTF-8 ``` -#### 我的字体 -我使用 `Source Code Pro` 字体和 `nerd-fonts-source-code-pro` +#### 字体推荐 +- **主要字体**: `Source Code Pro` 和 `nerd-fonts-source-code-pro` +- **Noto 字体**: 安装 `noto-fonts`(不是 `-all` - 它很臃肿)。检查 `/usr/share/fonts/noto` -#### 关于 Noto -只需要安装 `noto-fonts` (并非 `-all`), 它已经非常臃肿, 检查 `/usr/share/fonts/noto` - -#### Emoji -``` +#### Emoji 字体 +```bash yay -S ttf-linux-libertine ttf-inconsolata ttf-joypixels ttf-twemoji-color noto-fonts-emoji ttf-liberation ttf-droid ``` -#### 中文 -``` +#### 中文字体 +```bash yay -S wqy-bitmapfont wqy-microhei wqy-microhei-lite wqy-zenhei adobe-source-han-mono-cn-fonts adobe-source-han-sans-cn-fonts adobe-source-han-serif-cn-fonts ``` -## GTK 主题 -我使用 `adapta-gtk-theme` 与 `arc-icon-theme` +### GTK 主题 +使用 `adapta-gtk-theme` 和 `arc-icon-theme`。 -## 我安装的 Arch 软件包: -查看 [my-packages.txt](https://github.com/theniceboy/.config/blob/master/my-packages.txt) +### Arch 软件包 +查看 [my-packages.txt](https://github.com/theniceboy/.config/blob/master/my-packages.txt) 获取完整软件包列表。 + +
\ No newline at end of file diff --git a/deploy.sh b/deploy.sh new file mode 100755 index 0000000..3a49bf8 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,173 @@ +#!/bin/bash + +set -e + +echo "🚀 Starting deployment script..." + +# Check if brew is installed or try to find it +if ! command -v brew &> /dev/null; then + echo "⚠️ Homebrew not in PATH, checking common locations..." + + # Try common Homebrew paths for macOS + if [[ "$OSTYPE" == "darwin"* ]]; then + for brew_path in "/opt/homebrew/bin/brew" "/usr/local/bin/brew"; do + if [[ -x "$brew_path" ]]; then + echo "🔧 Found Homebrew at $brew_path, setting up environment..." + eval "$($brew_path shellenv)" + break + fi + done + fi + + # Check again after PATH update + if ! command -v brew &> /dev/null; then + echo "❌ Homebrew not found" + echo "📦 Please install Homebrew first by running:" + echo " /bin/bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\"" + echo "After installation, make sure to run the commands it suggests to add brew to your PATH." + echo "Then run this script again." + exit 1 + fi +fi + +echo "✅ Homebrew found" + +# Install brew packages +echo "📦 Checking brew packages..." + +# Get list of installed packages +installed_packages=$(brew list --formula -1) + +# Function to install package if not already installed +install_if_missing() { + local package="$1" + local display_name="${2:-$package}" + + # Handle tap packages (contains /) + if [[ "$package" == *"/"* ]]; then + local package_name="${package##*/}" # Extract package name after last / + if ! echo "$installed_packages" | grep -q "^${package_name}$"; then + echo " 📦 Installing $display_name..." + brew install "$package" + fi + else + if ! echo "$installed_packages" | grep -q "^${package}$"; then + echo " 📦 Installing $display_name..." + brew install "$package" + fi + fi +} + +# System utilities +install_if_missing "htop" # Interactive process viewer +install_if_missing "dust" # Disk usage analyzer +install_if_missing "ncdu" # Disk usage analyzer with ncurses +install_if_missing "fswatch" # File system monitoring +install_if_missing "pipx" # Install Python apps in isolation + +# macOS GNU utilities +if [[ "$OSTYPE" == "darwin"* ]]; then + install_if_missing "coreutils" # GNU core utilities (ls, cp, mv, etc.) + install_if_missing "gnu-tar" # GNU tar archiver + install_if_missing "gnu-getopt" # GNU command line option parsing + install_if_missing "gnu-sed" # GNU stream editor +fi + +# Development tools +install_if_missing "node" # Node.js JavaScript runtime +install_if_missing "go" # Go programming language +install_if_missing "gcc" # GNU Compiler Collection +install_if_missing "gdb" # GNU debugger +install_if_missing "automake" # Build automation tool +install_if_missing "cmake" # Cross-platform build system +install_if_missing "jsdoc3" # JavaScript documentation generator + +# Text processing and search +install_if_missing "ripgrep" # Fast text search (rg) +install_if_missing "the_silver_searcher" # Fast text search (ag) +install_if_missing "fd" # Fast find alternative +install_if_missing "fzf" # Fuzzy finder +install_if_missing "bat" # Better cat with syntax highlighting +install_if_missing "ccat" # Colorized cat +install_if_missing "tree" # Display directory trees +install_if_missing "jq" # JSON processor + +# File management +install_if_missing "yazi" # Terminal file manager +install_if_missing "sevenzip" # File archiver + +# Git and version control +install_if_missing "git" # Version control system +install_if_missing "git-delta" # Better git diff viewer +install_if_missing "git-flow" # Git branching model extensions +install_if_missing "jesseduffield/lazygit/lazygit" "lazygit" # TUI for git +install_if_missing "gh" # GitHub CLI + +# Media and graphics +install_if_missing "ffmpeg" # Media processing toolkit +install_if_missing "imagemagick" # Image manipulation toolkit +install_if_missing "poppler" # PDF rendering library +install_if_missing "yt-dlp" # YouTube downloader + +# Network and web +install_if_missing "wget" # Web file downloader +install_if_missing "speedtest-cli" # Internet speed test + +# Terminal and shell +install_if_missing "tmux" # Terminal multiplexer +install_if_missing "neovim" # Modern Vim text editor +install_if_missing "starship" # Cross-shell prompt +install_if_missing "rainbarf" # CPU/RAM/battery stats for tmux +install_if_missing "neofetch" # System information display +install_if_missing "onefetch" # Git repository information +install_if_missing "tldr" # Simplified man pages +install_if_missing "bmon" # Bandwidth monitor +install_if_missing "loc" # Lines of code counter + +# Applications +install_if_missing "awscli" # AWS command line interface +install_if_missing "azure-cli" # Azure command line interface +install_if_missing "terraform" # Infrastructure as code + +echo "✅ All packages processed" + +# Ensure zsh configuration is sourced +echo "🔗 Setting up zsh configuration..." +if [ ! -f "$HOME/.zshrc" ]; then + echo "source ~/.config/zsh/zshrc" > "$HOME/.zshrc" + echo "✅ Created ~/.zshrc with config source" +elif ! grep -q "source ~/.config/zsh/zshrc" "$HOME/.zshrc"; then + echo "source ~/.config/zsh/zshrc" >> "$HOME/.zshrc" + echo "✅ Added config source to ~/.zshrc" +else + echo "✅ Zsh config source already exists in ~/.zshrc" +fi + +# Function to create symlinks +create_symlink() { + local target="$1" + local link_name="$2" + local display_name="$3" + + echo "🔗 Setting up $display_name symlink..." + + if [ ! -L "$link_name" ]; then + if [ -e "$link_name" ]; then + echo "⚠️ Backing up existing $link_name to ${link_name}.backup" + mv "$link_name" "${link_name}.backup" + fi + ln -s "$target" "$link_name" + echo "✅ Symlink created: $link_name -> $target" + elif [ "$(readlink "$link_name")" = "$target" ]; then + echo "✅ $display_name symlink already exists and is correct" + else + echo "⚠️ $link_name exists but points to $(readlink "$link_name")" + echo " Expected: $target" + fi +} + +# Create configuration symlinks +create_symlink "$HOME/.config/.tmux.conf" "$HOME/.tmux.conf" "Tmux" +create_symlink "$HOME/.config/claude" "$HOME/.claude" "Claude" + +echo "🎉 Deployment complete!"