commit b393bde9e514af9cbfe524505c4556582122d342 Author: Sonny Bakker Date: Mon Nov 23 13:01:15 2020 +0100 Initial commit diff --git a/.ansible-lint b/.ansible-lint new file mode 100644 index 0000000..e99d805 --- /dev/null +++ b/.ansible-lint @@ -0,0 +1,5 @@ +parseable: true +quiet: true +skip_list: + - '501' +use_default_rules: true diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c17815f --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +*.retry +*.swp + +.venv +.env +env +venv + +node_modules/ + +.vault +.vaults/ +vault +vaults/ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..a4dfde9 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,41 @@ +stages: + - lint + - test + +cache: + key: "$CI_COMMIT_REF_SLUG" + paths: + - .cache/pip + - node_modules/ + +lint: + stage: lint + image: python:3.7 + before_script: + - pip install ansible ansible-lint --quiet + script: + - ansible-lint playbook.yml + only: + refs: + - development + - merge_requests + +pretty-lint: + stage: lint + image: node:12 + before_script: + - npm install + script: + - npx prettier "**/*.yml" --check + only: + refs: + - development + - merge_requests + +syntax-test: + stage: test + image: python:3.7 + before_script: + - pip install ansible ansible-lint --quiet + script: + - ansible-playbook playbook.yml --syntax-check diff --git a/.prettier.json b/.prettier.json new file mode 100644 index 0000000..9c76f6b --- /dev/null +++ b/.prettier.json @@ -0,0 +1,9 @@ +{ + "singleQuote": true, + "printWidth": 90, + "tabWidth": 2, + "useTabs": false, + "bracketSpacing": true, + "parser": "yaml" +} + diff --git a/ansible.cfg b/ansible.cfg new file mode 100644 index 0000000..002a50d --- /dev/null +++ b/ansible.cfg @@ -0,0 +1,2 @@ +[defaults] +roles_path = ./roles diff --git a/playbook.yml b/playbook.yml new file mode 100644 index 0000000..e1c5273 --- /dev/null +++ b/playbook.yml @@ -0,0 +1,3 @@ +- hosts: localhost + roles: + - development diff --git a/roles/.gitignore b/roles/.gitignore new file mode 100644 index 0000000..906efb0 --- /dev/null +++ b/roles/.gitignore @@ -0,0 +1,6 @@ +# ignore all external roles and files in the roles dir +/* + +!.gitignore +!requirements.yml +!development*/ diff --git a/roles/development/defaults/main.yml b/roles/development/defaults/main.yml new file mode 100644 index 0000000..4699b1b --- /dev/null +++ b/roles/development/defaults/main.yml @@ -0,0 +1,17 @@ +packages: [] + +xdg_config_dir: "{{ ansible_env.HOME }}/.config" +xdg_data_dir: "{{ ansible_env.HOME }}/.local/share" + +dotfiles_repo: "git@git.fudiggity.nl:sonny/dotfiles.git" +githook_repo: "git@git.fudiggity.nl:sonny/git-hooks.git" + +vim_plugins: + - { url: "https://github.com/preservim/nerdtree", name: "nerdtree" } + - { url: "https://github.com/neoclide/coc.nvim", name: "coc.nvim" } + - { url: "https://github.com/sheerun/vim-polyglot", name: "vim-polygot" } + +poetry_packages: + - black + - pylint + - autoflake diff --git a/roles/development/files/tmux_start b/roles/development/files/tmux_start new file mode 100755 index 0000000..4e6646d --- /dev/null +++ b/roles/development/files/tmux_start @@ -0,0 +1,16 @@ +#!/bin/bash + +MAIN="main" +DEVELOPMENT="development" + +tmux start-server +tmux new-session -ds $MAIN +tmux new-window +tmux new-window +tmux select-window -t 0 + +tmux new-session -ds $DEVELOPMENT +tmux new-window +tmux new-window +tmux new-window +tmux select-window -t 0 diff --git a/roles/development/handlers/main.yml b/roles/development/handlers/main.yml new file mode 100644 index 0000000..cc3328b --- /dev/null +++ b/roles/development/handlers/main.yml @@ -0,0 +1,7 @@ +- name: restart ssh-agent + systemd: + name: ssh-agent + state: restarted + enabled: yes + daemon-reload: yes + scope: user diff --git a/roles/development/meta/main.yml b/roles/development/meta/main.yml new file mode 100644 index 0000000..815c5da --- /dev/null +++ b/roles/development/meta/main.yml @@ -0,0 +1,20 @@ +dependencies: + - npm + +galaxy_info: + author: sonny + description: "Sets up development environment" + license: "license GPLv3" + min_ansible_version: 2.7 + issue_tracker_url: "https://git.fudiggity.nl/sonny/ansible-playbooks/-/issues" + platforms: + - name: Debian + versions: + - buster + - name: Ubuntu + versions: + - focal + - name: Archlinux + galaxy_tags: + - development + - system diff --git a/roles/development/tasks/dotfiles.yml b/roles/development/tasks/dotfiles.yml new file mode 100644 index 0000000..d8ee079 --- /dev/null +++ b/roles/development/tasks/dotfiles.yml @@ -0,0 +1,53 @@ +- name: clone dotfiles + git: + repo: "{{ dotfiles_repo }}" + dest: "{{ ansible_env.HOME }}/dotfiles" + version: master + update: yes + +- name: create dotfile folders + file: + state: directory + mode: "0755" + path: "{{ item }}" + loop: + - "{{ xdg_config_dir }}/nvim" + - "{{ xdg_data_dir }}/nvim/site" + - "{{ xdg_config_dir }}/kitty" + +- name: setup dotfiles + file: + path: "{{ item.dest }}" + src: "{{ item.src }}" + mode: "0755" + state: link + force: true + loop: + - { + src: "{{ ansible_env.HOME }}/dotfiles/nvim/init.vim", + dest: "{{ xdg_config_dir }}/nvim/init.vim", + } + - { + src: "{{ ansible_env.HOME }}/dotfiles/.vimrc", + dest: "{{ ansible_env.HOME }}/.vimrc", + } + - { + src: "{{ ansible_env.HOME }}/dotfiles/.bashrc", + dest: "{{ ansible_env.HOME }}/.bashrc", + } + - { + src: "{{ ansible_env.HOME }}/dotfiles/.profile", + dest: "{{ ansible_env.HOME }}/.profile", + } + - { + src: "{{ ansible_env.HOME }}/dotfiles/nvim/colors", + dest: "{{ xdg_data_dir }}/nvim/site/colors", + } + - { + src: "{{ ansible_env.HOME }}/dotfiles/kitty.conf", + dest: "{{ xdg_config_dir }}/kitty/kitty.conf", + } + - { + src: "{{ ansible_env.HOME }}/dotfiles/.gitignore", + dest: "{{ ansible_env.HOME }}/.gitignore", + } diff --git a/roles/development/tasks/main.yml b/roles/development/tasks/main.yml new file mode 100644 index 0000000..46311fa --- /dev/null +++ b/roles/development/tasks/main.yml @@ -0,0 +1,110 @@ +- name: load OS specific vars + include_vars: "{{ item }}" + with_first_found: + - files: + - "{{ ansible_distribution|lower }}-{{ ansible_distribution_release|lower }}.yml" + - "{{ ansible_distribution|lower }}.yml" + - "{{ ansible_os_family|lower }}.yml" + paths: + - "{{ role_path }}/vars" + +- name: add gitlab to known hosts + include_role: + name: common + tasks_from: known_hosts.yml + vars: + user: "{{ ansible_user_id }}" + items: + - { domain: "{{ gitlab_domain }}", key: "{{ gitlab_host_key }}" } + +- name: install packages + become: true + package: + name: "{{ item }}" + state: present + loop: "{{ packages }}" + +- name: create development dir + file: + path: "{{ ansible_env.HOME }}/development" + state: directory + mode: "0755" + +- include_tasks: "dotfiles.yml" + +- name: clone git hooks + git: + repo: "{{ githook_repo }}" + dest: "{{ ansible_env.HOME }}/development/git-hooks" + update: true + version: master + +- name: clone neovim packages + git: + repo: "{{ item.url }}" + dest: "{{ xdg_data_dir }}/nvim/site/pack/default/start/{{ item.name }}" + version: master + update: true + loop: "{{ vim_plugins }}" + +- include_role: + name: common + tasks_from: "poetry" + +- name: coc.nvim setup + block: + - name: install coc.nvim node packages + npm: + path: "{{ xdg_data_dir }}/nvim/site/pack/default/start/coc.nvim" + state: present + global: false + - name: create default coc.nvim venv directory + file: + path: "{{ ansible_env.HOME }}/.local/lib/coc" + state: directory + mode: "0755" + - name: copy coc pyproject.toml + template: + src: "pyproject.j2" + dest: "{{ ansible_env.HOME }}/.local/lib/coc/pyproject.toml" + mode: "0644" + force: false + - name: set default venv python version + command: "poetry env use python3" + args: + chdir: "{{ ansible_env.HOME }}/.local/lib/coc" + environment: + PATH: "{{ ansible_env.HOME }}/.local/bin:{{ ansible_env.PATH }}" + when: ansible_distribution == "Debian" + - name: install default coc.nvim python packages # noqa 301 + command: "poetry install" + args: + chdir: "{{ ansible_env.HOME }}/.local/lib/coc" + environment: + PATH: "{{ ansible_env.HOME }}/.local/bin:{{ ansible_env.PATH }}" + +- name: systemd user setup + block: + - name: setup systemd user service folder + file: + path: "{{ xdg_config_dir }}/systemd/user" + state: directory + mode: "0755" + - name: add ssh-agent service + template: + src: "ssh-agent.j2" + dest: "{{ ansible_env.HOME }}/.config/systemd/user/ssh-agent.service" + mode: "0644" + notify: restart ssh-agent + - name: copy tmux service + template: + src: "tmux.j2" + dest: "{{ xdg_config_dir }}/systemd/user/tmux.service" + force: false + mode: "0644" + - name: copy tmux startup script + copy: + src: "tmux_start" + dest: "{{ ansible_env.HOME }}/.local/bin/tmux_start" + mode: "0740" + force: false diff --git a/roles/development/templates/pyproject.j2 b/roles/development/templates/pyproject.j2 new file mode 100644 index 0000000..71768cc --- /dev/null +++ b/roles/development/templates/pyproject.j2 @@ -0,0 +1,19 @@ +# {{ ansible_managed }} {{ ansible_date_time.time }} {{ ansible_date_time.date }} + +[tool.poetry] +name = "coc" +version = "0.1.0" +description = "" +authors = ["Sonny Bakker "] + +[tool.poetry.dependencies] +python = "^3.7" +black = "^19.10b0" +pylint = "^2.5.3" +autoflake = "^1.3.1" + +[tool.poetry.dev-dependencies] + +[build-system] +requires = ["poetry>=0.12"] +build-backend = "poetry.masonry.api" diff --git a/roles/development/templates/ssh-agent.j2 b/roles/development/templates/ssh-agent.j2 new file mode 100644 index 0000000..67fdbea --- /dev/null +++ b/roles/development/templates/ssh-agent.j2 @@ -0,0 +1,12 @@ +# {{ ansible_managed }} {{ ansible_date_time.time }} {{ ansible_date_time.date }} + +[Unit] +Description=SSH key agent + +[Service] +Type=simple +Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket +ExecStart=/usr/bin/ssh-agent -D -a $SSH_AUTH_SOCK + +[Install] +WantedBy=default.target diff --git a/roles/development/templates/tmux.j2 b/roles/development/templates/tmux.j2 new file mode 100644 index 0000000..8fa1473 --- /dev/null +++ b/roles/development/templates/tmux.j2 @@ -0,0 +1,13 @@ +# {{ ansible_managed }} {{ ansible_date_time.time }} {{ ansible_date_time.date }} + +[Unit] +Description=Tmux startup script + +[Service] +Environment=DISPLAY=:0 +ExecStart=/home/sonny/.local/bin/tmux_start +Type=forking +RemainAfterExit=yes + +[Install] +WantedBy=default.target diff --git a/roles/development/vars/archlinux.yml b/roles/development/vars/archlinux.yml new file mode 100644 index 0000000..7e96f32 --- /dev/null +++ b/roles/development/vars/archlinux.yml @@ -0,0 +1,9 @@ +packages: + - python + - poetry + - git + - vim + - neovim + - npm + - ctags + - kitty diff --git a/roles/development/vars/debian-buster.yml b/roles/development/vars/debian-buster.yml new file mode 100644 index 0000000..6f2abf8 --- /dev/null +++ b/roles/development/vars/debian-buster.yml @@ -0,0 +1,10 @@ +packages: + - git + - vim + - neovim + - python3 + - python3-pip + - python3-venv + - python3-setuptools + - exuberant-ctags + - apt-transport-https diff --git a/roles/development/vars/main.yml b/roles/development/vars/main.yml new file mode 100644 index 0000000..63d2cfb --- /dev/null +++ b/roles/development/vars/main.yml @@ -0,0 +1,2 @@ +gitlab_domain: "git.fudiggity.nl" +gitlab_host_key: "git.fudiggity.nl ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICNmvcxza79T7JZMkifmquwXH/kMUqDnKs9Oob+JrRvn" diff --git a/roles/development/vars/ubuntu-focal.yml b/roles/development/vars/ubuntu-focal.yml new file mode 100644 index 0000000..da4b45a --- /dev/null +++ b/roles/development/vars/ubuntu-focal.yml @@ -0,0 +1,15 @@ +dotfiles_repo: "https://git.fudiggity.nl/sonny/dotfiles.git" +githook_repo: "https://git.fudiggity.nl/sonny/git-hooks.git" + +packages: + - git + - vim + - neovim + - python2 + - python3 + - python3-pip + - python3-venv + - python3-setuptools + - exuberant-ctags + - apt-transport-https + - kitty diff --git a/roles/requirements.yml b/roles/requirements.yml new file mode 100644 index 0000000..276b569 --- /dev/null +++ b/roles/requirements.yml @@ -0,0 +1,8 @@ +- src: git+https://git.fudiggity.nl/ansible/common.git + name: common + version: master + scm: git +- src: git+https://git.fudiggity.nl/ansible/npm.git + name: npm + version: master + scm: git