Терминал Администратора 10 лет спустя


Давным-давно, а точнее 10 лет назад я писал статью про свое рабочее окружение. С тех пор много воды утекло, я стал менеджером, стал меньше работать с терминалом, пересел с линукса на макось.

Итак, представляю обновление своего инструментария. Из того, что не изменилось, по прежнему bash, да, даже под макось не захотел переходить на zsh.

Терминал

Пользуюсь wezterm, но посматриваю в сторону iterm2.

Вот как выглядит мой wezterm config ~/.wezterm.lua с комментариями:

local wezterm = require 'wezterm';

local mykeys = {}

-- restore Alt+Number key assignments, switch between tabs using Alt + number
for i = 1, 9 do
    table.insert(mykeys, {key=tostring(i), mods="ALT", action=wezterm.action{ActivateTab=i-1}})
end

return {
    -- canonicalize_pasted_newlines = "None",
    -- color_scheme = 'NightLion v1',
    -- font settings, JetBrains Mono is the best
    font = wezterm.font("JetBrains Mono"),
    font_size = 14,
    -- disable sound when bell even is trigerred
    audible_bell = "Disabled",
    keys = {
        -- This will create a new split and run your default program inside it
        {key="r", mods="SUPER",
        -- action=wezterm.action{SplitVertical={args={"bash"}}}},
        action=wezterm.action{SplitVertical={domain="CurrentPaneDomain"}}},
        {key="e", mods="SUPER",
        action=wezterm.action{SplitHorizontal={domain="CurrentPaneDomain"}}},
        -- activate last active tab
        {key="q", mods="ALT", action="ActivateLastTab"},
        {key="q", mods="SUPER", action="ActivateLastTab"},
        -- Make Option-Left equivalent to Alt-b which many line editors interpret as backward-word
        {key="LeftArrow", mods="OPT", action=wezterm.action{SendString="\x1bb"}},
        -- Make Option-Right equivalent to Alt-f; forward-word
        {key="RightArrow", mods="OPT", action=wezterm.action{SendString="\x1bf"}},
        -- Make Ctrl-Left equivalent to Alt-b which many line editors interpret as backward-word
        {key="LeftArrow", mods="CTRL", action=wezterm.action{SendString="\x1bb"}},
        -- Make Ctrl-Right equivalent to Alt-f; forward-word
        {key="RightArrow", mods="CTRL", action=wezterm.action{SendString="\x1bf"}},
        -- merge mykeys for Alt-number switching set above
        table.unpack(mykeys)
    },
   -- reconnect to unix socket to restore tabs if terminal is closed
    unix_domains = {
        {
            name = "unix",
        }
    },
    connect_automatically = true,
    default_gui_startup_args = {"connect", "unix"},

    -- Close anyways even if exit code is non zero
    exit_behavior = "Close",

    mouse_bindings = {
        -- Change the default click behavior so that it only selects
        -- text and doesn't open hyperlinks
        {
          event={Up={streak=1, button="Left"}},
          mods="NONE",
          action=wezterm.action{CompleteSelection="PrimarySelection"},
        },

        -- and make CTRL-Click open hyperlinks
        {
          event={Up={streak=1, button="Left"}},
          mods="CTRL",
          action="OpenLinkAtMouseCursor",
        },
    },
}

Рекомендую шрифт JetBrains Mono в размере 14, выглядит шикарно в 4к разрешении. Если вы еще не обновили монитор до 4к, то уже пора.

SSH

По сути мало что изменилось, вот мой ~/.ssh/config:

Host github.com bitbucket.org bitbucket.com gitlab.com
  User git

Host *
  HashKnownHosts no
  KeepAlive yes
  ServerAliveInterval 600
  ServerAliveCountMax 3
  StrictHostKeyChecking no
  IdentityFile ~/.ssh/id_ed25519
  UseKeychain yes
  AddKeysToAgent yes
  ForwardAgent yes

Перешел с RSA на ED25519 для ключей и шифрую их паролем, который сохраняется в системном keychain, очень удобно.

Screen -> Tmux

Пересел со screen на tmux, т.к. он гибче в настройке и предоставляет больше фич.

Вот мой tmux config ~/.tmux.conf:

unbind-key C-b
# use Ctrl+X as modifier key
set-option -g prefix C-x
# got to previously used tab with Ctrl+X+X
bind-key C-x last-window
# scroll with mouse
# setw -g mouse on
# toogle mouse with Ctrl-X-m key
bind-key m set-option -g mouse
# MacOS only: move with Ctrl-B/F in copy mode
bind-key -T copy-mode C-b send-keys -X page-up
bind-key -T copy-mode C-f send-keys -X page-down

# increase scrollback
set -g history-limit 100000
# highlight windows with activity
set -wg monitor-activity on
# lower time messages stay in status bar
set -g display-time 2000

# fix vim in ssh session
set -g default-terminal "screen-256color"
set -ag terminal-overrides ",xterm-256color:RGB"

# monitor silence
bind s command-prompt -p "monitor-silence (seconds)" "setw monitor-activity off; setw monitor-silence %%"
# monitor activity
bind a setw monitor-activity on\; setw visual-activity on

# Check https://github.com/tmux-plugins/tpm on install instructions
# Then press prefix + I to install all plugins
# List of plugins
set -g @plugin 'tmux-plugins/tpm'
# set -g @plugin 'tmux-plugins/tmux-sensible'

set -g @plugin 'jatap/tmux-base16-statusline'
set -g @base16-statusline 'main'

# set -g @plugin 'erikw/tmux-powerline'

# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run '~/.tmux/plugins/tpm/tpm'

Vim -> Neovim

Большой переезд помимо с линукса на макось для меня был еще с vim на neovim он же nvim.

Использовал для этого NvChad с кастомизациями. К нему еще прикручен Github Copilot.

Starship

Очень удобный shell prompt Starship: Cross-Shell Prompt. Настроил время выполнения команд, PS1, и пр.

~/.config/starship.toml

# Inserts a blank line between shell prompts
add_newline = true
command_timeout = 1000

# Replace the "❯" symbol in the prompt with "➜"
[character] # The name of the module we are configuring is "character"
success_symbol = "[➜](bold green) " # The "success_symbol" segment is being set to "➜" with the color "bold green"
error_symbol = "[✗](bold red) "

# Disable the package module, hiding it from the prompt completely
[package]
disabled = true

[username]
style_user = "white bold"
style_root = "red bold"
format = "[$user]($style)"
disabled = false
show_always = true

[hostname]
ssh_only = false
format = "@[$hostname](bold green) "
disabled = false

[aws]
disabled = true

[gcloud]
disabled = true
format = 'on [$domain@$project](bold purple) '

[kubernetes]
disabled = false

[time]
disabled = false
format = '🕙[$time]($style) '

Выглядит все это как-то так:

comments powered by Disqus