Reorganize project: separate playbooks/ and files/, add shell-setup (fish+nvim+tide+lazyvim)

This commit is contained in:
vrubelroman 2026-06-06 17:30:00 +03:00
parent 9bed146909
commit b5cabaf1fe
10 changed files with 155 additions and 15 deletions

View file

@ -7,10 +7,14 @@
```text ```text
ansible.cfg ansible.cfg
inventory.ini inventory.ini
facts.yml playbooks/
add-ssh-key.yml facts.yml
bootstrap-new-client.yml add-ssh-key.yml
generate-ssh-config.yml bootstrap-new-client.yml
generate-ssh-config.yml
shell-setup.yml
files/
config.fish
``` ```
## ansible.cfg ## ansible.cfg
@ -51,7 +55,7 @@ monitoring ansible_host=192.168.8.176 ansible_user=vrubel
```bash ```bash
ansible proxmox_vms -m ping ansible proxmox_vms -m ping
ansible-playbook facts.yml ansible-playbook playbooks/facts.yml
``` ```
## facts.yml ## facts.yml
@ -70,7 +74,7 @@ ansible-playbook facts.yml
Запуск: Запуск:
```bash ```bash
ansible-playbook facts.yml ansible-playbook playbooks/facts.yml
``` ```
Используется для проверки, какие машины Ubuntu/Debian, какие Fedora/RedHat, и какой пакетный менеджер Ansible видит. Используется для проверки, какие машины Ubuntu/Debian, какие Fedora/RedHat, и какой пакетный менеджер Ansible видит.
@ -88,19 +92,19 @@ Playbook для добавления публичного SSH-ключа в `aut
Запуск, если доступ по ключу уже есть: Запуск, если доступ по ключу уже есть:
```bash ```bash
ansible-playbook add-ssh-key.yml ansible-playbook playbooks/add-ssh-key.yml
``` ```
Если надо добавить не текущий ключ, а другой публичный ключ из файла: Если надо добавить не текущий ключ, а другой публичный ключ из файла:
```bash ```bash
ansible-playbook add-ssh-key.yml -e "key_file=$HOME/Downloads/new-client.pub" ansible-playbook playbooks/add-ssh-key.yml -e "key_file=$HOME/Downloads/new-client.pub"
``` ```
Или, например: Или, например:
```bash ```bash
ansible-playbook add-ssh-key.yml -e "key_file=$HOME/infra/ansible/keys/laptop.pub" ansible-playbook playbooks/add-ssh-key.yml -e "key_file=$HOME/infra/ansible/keys/laptop.pub"
``` ```
Важно: файл должен быть именно публичным ключом, то есть `.pub`. Приватный ключ `id_ed25519` в репозиторий не добавлять и никому не передавать. Важно: файл должен быть именно публичным ключом, то есть `.pub`. Приватный ключ `id_ed25519` в репозиторий не добавлять и никому не передавать.
@ -119,7 +123,7 @@ Playbook для первичной настройки нового клиент
Запуск на новом компьютере: Запуск на новом компьютере:
```bash ```bash
ansible-playbook bootstrap-new-client.yml --ask-pass ansible-playbook playbooks/bootstrap-new-client.yml --ask-pass
``` ```
Ansible спросит SSH-пароль пользователя `vrubel`. Ansible спросит SSH-пароль пользователя `vrubel`.
@ -157,13 +161,13 @@ Host docker-prodVM
Сначала безопасная проверка: Сначала безопасная проверка:
```bash ```bash
ansible-playbook generate-ssh-config.yml --check --diff ansible-playbook playbooks/generate-ssh-config.yml --check --diff
``` ```
Если diff выглядит нормально, применить: Если diff выглядит нормально, применить:
```bash ```bash
ansible-playbook generate-ssh-config.yml ansible-playbook playbooks/generate-ssh-config.yml
``` ```
После этого можно заходить так: После этого можно заходить так:
@ -176,14 +180,30 @@ ssh hermesVM
Playbook управляет только блоком между маркерами `ANSIBLE MANAGED HOME VM HOSTS`. Остальные ручные записи в `~/.ssh/config` не трогает. Playbook управляет только блоком между маркерами `ANSIBLE MANAGED HOME VM HOSTS`. Остальные ручные записи в `~/.ssh/config` не трогает.
## shell-setup.yml
Playbook для установки fish, neovim и CLI-утилит (lsd, bat, grc, zoxide) с настройкой fish как shell по умолчанию.
Устанавливает пакеты через универсальный модуль `package` (работает и с apt, и с dnf). Для Debian создаёт симлинк `batcat -> bat`.
Копирует `files/config.fish` в `~/.config/fish/config.fish` и меняет shell пользователя на `/usr/bin/fish`.
Запуск:
```bash
ansible-playbook playbooks/shell-setup.yml
```
После выполнения нужно перелогиниться для применения fish.
## Типовой сценарий для нового компьютера ## Типовой сценарий для нового компьютера
```bash ```bash
sudo pacman -S ansible sshpass sudo pacman -S ansible sshpass
git clone git@github.com:vrubelroman/ansibleHostsHomeVM.git git clone git@github.com:vrubelroman/ansibleHostsHomeVM.git
cd ansibleHostsHomeVM cd ansibleHostsHomeVM
ansible-playbook bootstrap-new-client.yml --ask-pass ansible-playbook playbooks/bootstrap-new-client.yml --ask-pass
ansible proxmox_vms -m ping ansible proxmox_vms -m ping
ansible-playbook generate-ssh-config.yml --check --diff ansible-playbook playbooks/generate-ssh-config.yml --check --diff
ansible-playbook generate-ssh-config.yml ansible-playbook playbooks/generate-ssh-config.yml
``` ```

View file

@ -2,3 +2,7 @@
inventory = inventory.ini inventory = inventory.ini
interpreter_python = auto_silent interpreter_python = auto_silent
host_key_checking = True host_key_checking = True
timeout = 60
[ssh_connection]
ssh_args = -o ConnectTimeout=60

26
files/config.fish Normal file
View file

@ -0,0 +1,26 @@
if status is-interactive
# Commands to run in interactive sessions can go here
set -g fish_greeting ""
alias ls='lsd'
alias l='ls -l'
alias la='ls -a'
alias lla='ls -la'
alias lt='ls --tree'
alias cat='bat'
alias ping='grc ping'
alias ping='grc --colour=auto ping'
alias traceroute='grc --colour=auto traceroute'
alias ip='grc --colour=auto ip'
alias ss='grc --colour=auto ss'
alias df='grc --colour=auto df'
alias free='grc --colour=auto free'
alias ps='grc --colour=auto ps'
alias mount='grc --colour=auto mount'
alias systemctl='grc --colour=auto systemctl'
alias journalctl='grc --colour=auto journalctl'
zoxide init fish | source
end

1
files/fish_plugins Normal file
View file

@ -0,0 +1 @@
ilancosman/tide@v6

View file

@ -6,3 +6,4 @@ hermes ansible_host=192.168.8.173 ansible_user=vrubel
docker-test ansible_host=192.168.8.174 ansible_user=vrubel docker-test ansible_host=192.168.8.174 ansible_user=vrubel
cicd ansible_host=192.168.8.175 ansible_user=vrubel cicd ansible_host=192.168.8.175 ansible_user=vrubel
monitoring ansible_host=192.168.8.176 ansible_user=vrubel monitoring ansible_host=192.168.8.176 ansible_user=vrubel
mediavm ansible_host=192.168.8.177 ansible_user=vrubel

88
playbooks/shell-setup.yml Normal file
View file

@ -0,0 +1,88 @@
---
- name: Install fish, neovim, modern CLI tools and set fish as default shell
hosts: proxmox_vms
gather_facts: true
become: true
vars:
target_user: vrubel
packages:
- fish
- neovim
- lsd
- bat
- grc
- zoxide
- curl
- git
tasks:
- name: Install packages
ansible.builtin.package:
name: "{{ packages }}"
state: present
- name: Symlink batcat -> bat (Debian workaround)
ansible.builtin.file:
src: /usr/bin/batcat
dest: /usr/local/bin/bat
state: link
when: ansible_facts["os_family"] == "Debian"
ignore_errors: true
- name: Create ~/.config/fish directory
ansible.builtin.file:
path: "/home/{{ target_user }}/.config/fish"
state: directory
mode: "0755"
owner: "{{ target_user }}"
group: "{{ target_user }}"
- name: Deploy fish config
ansible.builtin.copy:
src: ../files/config.fish
dest: "/home/{{ target_user }}/.config/fish/config.fish"
owner: "{{ target_user }}"
group: "{{ target_user }}"
mode: "0644"
- name: Deploy fish_plugins
ansible.builtin.copy:
src: ../files/fish_plugins
dest: "/home/{{ target_user }}/.config/fish/fish_plugins"
owner: "{{ target_user }}"
group: "{{ target_user }}"
mode: "0644"
- name: Install fisher
become_user: "{{ target_user }}"
ansible.builtin.shell:
cmd: >
curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source &&
fisher install jorgebucaran/fisher
executable: /usr/bin/fish
creates: "/home/{{ target_user }}/.config/fish/functions/fisher.fish"
- name: Run fisher update to install plugins
become_user: "{{ target_user }}"
ansible.builtin.shell:
cmd: fisher update
executable: /usr/bin/fish
changed_when: true
- name: Clone LazyVim starter
become_user: "{{ target_user }}"
ansible.builtin.git:
repo: https://github.com/LazyVim/starter
dest: "/home/{{ target_user }}/.config/nvim"
force: true
- name: Remove .git from nvim config
ansible.builtin.file:
path: "/home/{{ target_user }}/.config/nvim/.git"
state: absent
- name: Set fish as default shell
ansible.builtin.user:
name: "{{ target_user }}"
shell: /usr/bin/fish