diff --git a/README.md b/README.md index f3c41ee..2342881 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,7 @@ Chezmoi использует отдельный source dir `chezmoi/` внутр | `proxy-client` | Переносимый CLI и Bash-команды для явного запуска через прокси | | `tmux` | Два префикса (`Ctrl+b`, `Ctrl+Space`), vi-режим, split по `\|` / `-` | | `vim` | Минимальный .vimrc без плагинов, 2 пробела, leader = `Space` | +| `wezterm` | Общий для Linux и Windows конфиг: одинаковые оформление и горячие клавиши | | `zed` | Конфигурация Zed редактора | | `vscode` | `server-env-setup` для VS Code Server в WSL: секреты + авто-прокси | @@ -61,7 +62,7 @@ Chezmoi использует отдельный source dir `chezmoi/` внутр - **PowerShell 7 profile** — live-stub в `~/Documents/PowerShell/` загружает managed profile из `~/.config/powershell/profile.ps1` - **Git baseline** — `~/.gitconfig` с managed настройками, `~/.gitconfig.local` для персональных overrides - **Windows Terminal** — идемпотентный скрипт: PS7 по умолчанию, PS 5.1 как legacy, Azure Cloud Shell скрыт -- **WezTerm** — `~/.wezterm.lua` как живая ссылка на `wezterm/.wezterm.lua` в репозитории +- **WezTerm** — `~/.wezterm.lua` как живая ссылка на общий конфиг для Windows и Linux - **UTF-8** — `chcp 65001` + `Console.InputEncoding/OutputEncoding` только для pwsh 7, не для PS 5.1 - **Codex Proxy shortcut** — Start Menu ярлык для запуска Codex GUI с proxy-переменными - **Claude Proxy** — ярлык меню «Пуск» для запуска Claude Desktop с переменными прокси diff --git a/install.sh b/install.sh index 770e2b7..0e8feac 100755 --- a/install.sh +++ b/install.sh @@ -302,7 +302,7 @@ if ! command -v "$STOW_BIN" &>/dev/null; then exit 1 fi -PACKAGES=(bash tmux vim zed vscode agents codex gemini proxy-client) +PACKAGES=(bash tmux vim wezterm zed vscode agents codex gemini proxy-client) AVAILABLE_PACKAGES=() info "Применяю stow пакеты..." diff --git a/wezterm/.wezterm.lua b/wezterm/.wezterm.lua index 8c636d5..ed272fd 100644 --- a/wezterm/.wezterm.lua +++ b/wezterm/.wezterm.lua @@ -2,70 +2,82 @@ local wezterm = require 'wezterm' local act = wezterm.action local config = wezterm.config_builder() ---config.key_map_preference = 'Physical' ---config.enable_kitty_keyboard = true -config.enable_kitty_keyboard = false -- так работает куда стабильнее ---config.enable_csi_u_key_encoding = false ---config.allow_win32_input_mode = false +config.enable_kitty_keyboard = false -- Так работает стабильнее. local local_domain = { DomainName = 'local' } -local function wsl(name) return { DomainName = 'WSL:' .. name } end +local default_prog +local launch_menu +local is_windows = wezterm.target_triple:find 'windows' -local pwsh = { 'pwsh.exe', '-NoLogo' } -local cmd = { 'cmd.exe' } +if is_windows then + local function wsl(name) return { DomainName = 'WSL:' .. name } end + local pwsh = { 'pwsh.exe', '-NoLogo' } + + default_prog = pwsh + launch_menu = { + { label = 'PowerShell', domain = local_domain, args = pwsh }, + { label = 'Командная строка', domain = local_domain, args = { 'cmd.exe' } }, + { label = 'Ubuntu', domain = wsl 'Ubuntu' }, + { label = 'Ubuntu 24.04.1 LTS', domain = wsl 'Ubuntu-24.04' }, + } +else + local shell = os.getenv 'SHELL' or '/bin/bash' + local shell_name = shell:match '([^/]+)$' or shell + shell_name = shell_name:sub(1, 1):upper() .. shell_name:sub(2) + + default_prog = { shell, '-l' } + launch_menu = { + { label = shell_name, domain = local_domain, args = default_prog }, + } +end config.default_domain = 'local' -config.default_prog = pwsh +config.default_prog = default_prog +config.launch_menu = launch_menu + +-- В Wayland у WezTerm пока нет надёжной системной рамки окна в GNOME. +-- XWayland возвращает обычный заголовок с кнопками и перетаскиванием. +if not is_windows then + config.enable_wayland = false +end config.scrollback_lines = 50000 - config.color_scheme = 'Ubuntu' --- Ближе всего к Windows Terminal -config.font = wezterm.font 'Cascadia Mono' +-- Встроен в WezTerm и одинаково доступен на Windows и Linux. +config.font = wezterm.font 'JetBrains Mono' config.font_size = 11.0 --- Хороший современный вариант; WezTerm сам поставляется с JetBrains Mono ---config.font = wezterm.font 'JetBrains Mono' ---config.font_size = 11.0 ---config.line_height = 1.0 ---config.cell_width = 1.0 config.initial_cols = 120 config.initial_rows = 28 config.window_background_opacity = 1.0 +config.window_decorations = 'TITLE|RESIZE' config.hide_tab_bar_if_only_one_tab = true config.freetype_load_target = 'HorizontalLcd' config.freetype_render_target = 'HorizontalLcd' -config.launch_menu = { - { label = 'PowerShell', domain = local_domain, args = pwsh }, - { label = 'Командная строка', domain = local_domain, args = cmd }, - { label = 'Ubuntu', domain = wsl 'Ubuntu' }, - { label = 'Ubuntu 24.04.1 LTS', domain = wsl 'Ubuntu-24.04' }, -} - config.keys = { { key = 'phys:Space', mods = 'CTRL|SHIFT', action = act.ShowLauncherArgs { flags = 'LAUNCH_MENU_ITEMS|DOMAINS' } }, { key = 'phys:V', mods = 'CTRL|SHIFT', action = act.PasteFrom 'Clipboard' }, - { key = 'phys:T', mods = 'CTRL|SHIFT', action = act.SpawnCommandInNewTab { domain = local_domain, args = pwsh } }, + { key = 'phys:T', mods = 'CTRL|SHIFT', action = act.SpawnCommandInNewTab { domain = local_domain, args = default_prog } }, { key = 'phys:R', mods = 'CTRL|SHIFT|ALT', action = act.ResetTerminal }, - -- Переключение на вкладку по номеру: Ctrl+Shift+1..9 - { key = 'phys:1', mods = 'CTRL|SHIFT', action = act.ActivateTab(0) }, - { key = 'phys:2', mods = 'CTRL|SHIFT', action = act.ActivateTab(1) }, - { key = 'phys:3', mods = 'CTRL|SHIFT', action = act.ActivateTab(2) }, - { key = 'phys:4', mods = 'CTRL|SHIFT', action = act.ActivateTab(3) }, - { key = 'phys:5', mods = 'CTRL|SHIFT', action = act.ActivateTab(4) }, - { key = 'phys:6', mods = 'CTRL|SHIFT', action = act.ActivateTab(5) }, - { key = 'phys:7', mods = 'CTRL|SHIFT', action = act.ActivateTab(6) }, - { key = 'phys:8', mods = 'CTRL|SHIFT', action = act.ActivateTab(7) }, - { key = 'phys:9', mods = 'CTRL|SHIFT', action = act.ActivateTab(-1) }, + -- Переключение на вкладку по номеру: Ctrl+Shift+1..9. + { key = 'phys:1', mods = 'CTRL|SHIFT', action = act.ActivateTab(0) }, + { key = 'phys:2', mods = 'CTRL|SHIFT', action = act.ActivateTab(1) }, + { key = 'phys:3', mods = 'CTRL|SHIFT', action = act.ActivateTab(2) }, + { key = 'phys:4', mods = 'CTRL|SHIFT', action = act.ActivateTab(3) }, + { key = 'phys:5', mods = 'CTRL|SHIFT', action = act.ActivateTab(4) }, + { key = 'phys:6', mods = 'CTRL|SHIFT', action = act.ActivateTab(5) }, + { key = 'phys:7', mods = 'CTRL|SHIFT', action = act.ActivateTab(6) }, + { key = 'phys:8', mods = 'CTRL|SHIFT', action = act.ActivateTab(7) }, + { key = 'phys:9', mods = 'CTRL|SHIFT', action = act.ActivateTab(-1) }, { key = 'phys:H', mods = 'CTRL|SHIFT|ALT', action = act.SplitHorizontal { domain = 'CurrentPaneDomain' } }, { key = 'phys:V', mods = 'CTRL|SHIFT|ALT', action = act.SplitVertical { domain = 'CurrentPaneDomain' } }, } -return config \ No newline at end of file +return config