前言#
经过一段时间的整理,我最终形成了一套比较稳定的开发环境方案:
- 主力开发机:MacBook Pro M1 Max
- 家庭服务器:Ubuntu 24.04(NUC)
- 代码托管:Gitea
- 配置管理:Git + Stow
- 编辑器:Neovim(LazyVim)
- 终端:Ghostty + tmux
- Python:pyenv + uv
- 版本管理:Gitea
整个方案的目标是:
- Mac 作为主力开发环境
- Ubuntu 作为 Linux 学习与实验环境
- 所有配置可快速迁移与重建
- 新机器半小时内恢复工作环境
整体架构#
Mac
├── Homebrew
├── aerospace
├── Ghostty(zsh + zinit + starship)
├── Neovim
└── Git
│
▼
SSH (Ubuntu)
│
▼
Ubuntu Server
├── Homebrew
├── zsh + init + starship
├── tmux
├── Neovim
├── Docker
├── Giteatext终端配置#
之前的终端使用的是 iterm2 + oh-my-zsh + p10k,感觉配置比较重,并且有点卡。 在进行一番比较之后选择了 ghostty + zinit + starship 的配置
zinit 管理插件 starship prompt atuin 历史记录 zoxide 目录跳转 eza 代替 ls bat 代替 cat git-delta 设置为默认 delta fzf
ubuntu 大多数软件都是通过 apt 安装,但是部分软件官方的版本落后太多,还是通过 homebrew 安装, 包括 autin, starship, zoxide, eza, lazygit, neovim
# mac
# homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# ghostty
brew install ghostty
# zinit
bash -c "$(curl -fsSL https://raw.githubusercontent.com/zdharma-continuum/zinit/HEAD/scripts/install.sh)"
# starship
brew install starship
# other
brew install autin zoxide eza bat git-delta fzf
# ubuntu
# homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# zinit
bash -c "$(curl -fsSL https://raw.githubusercontent.com/zdharma-continuum/zinit/HEAD/scripts/install.sh)"bashDotfiles 管理#
所有配置统一放入 Git 仓库: 我的 dotfiles repo ↗
dotfiles
├── git
├── zsh
├── tmux
├── config
│ └── .config
│ ├── ghostty
│ ├── lazygit
│ └── starship.toml
└── README.mdtext使用 GNU Stow 管理:
# mac
brew install stow
# ubuntu
sudo apt install stowbash部署:
cd ~/dotfiles
stow git
stow zsh
stow tmux
stow ghostty
stow configbash优点:
- 不需要软链接脚本
- 配置结构清晰
- 可跨平台复用
Git 与 Gitea#
Gitea 部署#
目录:
/srv/gitea
├── docker-compose.yml
├── gitea
└── gittextDocker 容器:
docker psbashgitea/gitea:latesttext访问:
http://gitea.home:3001textHosts 配置#
Mac:
192.168.xx.xx gitea.hometextUbuntu:
127.0.0.1 localhost gitea.hometext这样:
git clone git@gitea.home:clloz/project.gitbash在两台机器都能工作。
开发模式#
推荐:
Mac
↓ push
Gitea
↓ pull
Ubuntutext即:
Mac:
git pushbashUbuntu:
git pullbash保持两个独立工作副本。
SSH 与 tmux#
SSH 自动进入 tmux#
配置:
if [[ -o login ]] &&
[[ -n "$SSH_CONNECTION" ]] &&
[[ -z "$TMUX" ]] &&
[[ -t 1 ]] &&
command -v tmux >/dev/null 2>&1; then
if tmux has-session -t main 2>/dev/null; then
exec tmux attach-session -t main
else
exec tmux new-session -s main
fi
fizsh效果:
ssh homeserverbash自动进入:
tmux session: maintexttmux 常用配置#
前缀:
Ctrl-atext分屏:
| 水平分屏
- 垂直分屏text固定比例:
bind | split-window -h -l 20%
bind - split-window -v -l 25%plaintext兼容 tmux 3.4 与 3.6。
Neovim#
安装#
采用官方 Release:
curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim-linux-x86_64.tar.gzbash安装到:
/opt/nvimtext加入 PATH。
不使用 Ubuntu 仓库版本。
LazyVim#
配置目录:
~/.config/nvimtext直接纳入 dotfiles。
OSC52 剪贴板#
解决:
Mac
SSH
Ubuntu
Neovimtext系统剪贴板同步问题。
配置:
local is_ssh =
vim.env.SSH_TTY ~= nil or
vim.env.SSH_CONNECTION ~= nil
if is_ssh then
vim.g.clipboard = {
name = "OSC 52",
copy = {
["+"] = require("vim.ui.clipboard.osc52").copy("+"),
["*"] = require("vim.ui.clipboard.osc52").copy("*"),
},
paste = {
["+"] = require("vim.ui.clipboard.osc52").paste("+"),
["*"] = require("vim.ui.clipboard.osc52").paste("*"),
},
}
vim.opt.clipboard = "unnamedplus"
endlua效果:
yyvim直接进入 Mac 系统剪贴板。
Python#
系统 Python#
安装:
sudo apt install \
python3 \
python3-pip \
python3-venvbash作用:
- Mason
- 系统工具
- Ubuntu 软件
不用于项目开发。
pyenv#
安装:
git clone https://github.com/pyenv/pyenv.git ~/.pyenvbash更新:
cd ~/.pyenv
git pullbashuv#
安装:
curl -LsSf https://astral.sh/uv/install.sh | shbash更新:
uv self updatebashPython 工作流#
统一:
pyenv install 3.12.8
uv init
uv add requests
uv syncbash不再使用:
virtualenv
pipenv
poetrytextDocker#
安装来源:
Docker 官方 apt 仓库text已安装:
docker-ce
docker-ce-cli
containerd.io
docker-buildx-plugin
docker-compose-plugintext查看:
docker infobash数据目录:
/var/lib/dockertext更新 Docker#
sudo apt update
sudo apt upgradebash或者:
sudo apt install --only-upgrade \
docker-ce \
docker-ce-cli \
containerd.iobashUbuntu 学习环境#
Ubuntu 主要用于:
- CSAPP
- Linux
- GDB
- ELF
- 系统编程
- 网络编程
安装:
sudo apt install \
build-essential \
clang \
gdb \
cmake \
valgrind \
strace \
ltrace \
binutils \
elfutils \
flex \
bisonbashMac 与 Ubuntu 分工#
最终形成:
Mac#
Rust
WASM
Python
WebGPU
前端开发
AI工具textUbuntu#
Gitea
Docker
CSAPP
Linux
系统编程
服务部署text遵循原则:
非 Linux 专属开发在 Mac 完成; Linux、CSAPP、系统编程在 Ubuntu 完成。
这样既能利用 Mac 的优秀开发体验,也能保留真实 Linux 环境用于学习和实验。