dotfiles的自动化配置
柠檬精
yls很久之前就搞了个repo,里面是几个负责安装常用软件和对应的配置文件的脚本。 去GitHub看了一下发现只是几个库……并没有找到一键脚本(可能是private库)
所以就想自己也搞一个一键按钮,每次删库跑路重装系统或者服务器的时候只要运行一下脚本就可以了。
主要内容
最主要的vim/shell/tmux的配置文件直接用的GitHub上的三个知名版本
- amix/vimrc
- robbyrussell/oh-my-zsh
- gpakosz/.tmux
这三个库是真TM的好用。把这三个库作为submodule添加到repo中,那么只需要执行git clone
和git submodule init
就可以下载所有的内容到对应的位置了。然后再运行个脚本把所有默认的配置文件删掉,通过symlink链接到repo里的文件,重启即可生效。
实现方式
一开始打算是直接写个shell脚本,后来看到了V2上一个关于自动化的讨论,里面清一色地推荐Ansible(链接忘了,毕竟过了半个月才来写的内容)。
查了一下就真香了。打算不用纯的sh脚本,而是先检查Ansible依赖,解决后调用Ansible执行对应的内容来完成所有的安装。
脚本的内容
#!/bin/bash
# Make sure only root can run our script
if [[ $EUID -ne 0 ]]; then
echo "Please run this script as root."
echo "Issue: sudo $0 $*"
exit 1
fi
if ! [ -x "$(command -v ansible)" ]; then
apt update
apt upgrade -y
apt install ansible -y
fi
ansible-playbook -i playbooks/inventory playbooks/install.yml
首先检查用户是否有root权限,然后安装Ansible,调用ansible-playbook
执行install.yml
中的内容。
install.yml
和inventory
[local]
localhost ansible_connection=local
inventory
文件中的内容表示Ansible如何连接至服务器。这个例子中只需要在本地进行操作,使用local即可。
---
- hosts: local
roles:
- role: packages
- role: dotfiles
install.yml
这个文件的内容表示在本地(使用inventory
中的连接方式)执行packages
和dotfiles
两个任务。(下面的内容挺容易理解的不写注释了)
package任务
---
- name: Set timezone to Asia/Shanghai
file: src=/usr/share/zoneinfo/Asia/Shanghai
dest=/etc/localtime
state=link
force=yes
- name: Update package list
become: yes
become_method: sudo
apt: upgrade=dist update_cache=yes
- name: Install basic packages
become: yes
become_method: sudo
apt: name={{ item }} state=latest
with_items:
- bash
- build-essential
- curl
- fonts-powerline
- git
- htop
- nmap
- nodejs
- npm
- screen
- tmux
- vim
- wget
- zsh
- name: Install python 3
become: yes
become_method: sudo
apt: name={{ item }} state=latest
with_items:
- python3
- python3-dev
- python3-pip
- python3-setuptools
- python-pycurl
- name: Install the fuck
become: yes
become_method: sudo
pip:
name: thefuck
executable: pip3
- name: Install FASD
become: yes
become_method: sudo
copy: src=fadd dest=/usr/local/bin/fadd mode=755
- name: Install TL;DR
npm:
name: tldr
global: yes
dotfiles任务
---
- name: Change shell to ZSH
become: yes
become_method: sudo
command: chsh -s '/bin/zsh' [my username]
- name: Init Git config - Editor
git_config:
name: core.editor
scope: global
value: vim
- name: Init Git config - User name
git_config:
name: user.name
scope: global
value: [my name]
- name: Init Git config - User email
git_config:
name: user.email
scope: global
value: [my email]
- name: Install AgnosterZak theme
copy: src=agnosterzak.zsh-theme
dest=~/dotfiles/home/.oh-my-zsh/themes/agnosterzak.zsh-theme
mode=755
- name: Symlink dotfiles
file: src=~/dotfiles/home/{{ item }}
dest=~/{{ item }}
state=link
force=yes
with_items:
- .bashrc
- .zshrc
- .oh-my-zsh
- .vimrc
- .vim_runtime
- .tmux
- .tmux.conf
- .tmux.conf.local
注意要把中括号的内容替换成对应的内容后再执行。
<EOF>
Loading Comments By Disqus