From 0784cad8af9b6e4100fa5d3fa7e957bdb6c0c5fa Mon Sep 17 00:00:00 2001 From: Morten Olsen Date: Sat, 5 Oct 2024 10:06:52 +0200 Subject: [PATCH] first commit --- .dockerignore | 2 + .gitignore | 1 + Dockerfile | 9 ++ Makefile | 27 +++++ docker-compose.yml | 5 + init.sh | 4 + inventory.yml | 5 + .../files/default/.config/kitty/kitty.conf | 86 ++++++++++++++ playbooks/roles/desktop/meta/main.yml | 4 + playbooks/roles/desktop/tasks/config.yml | 26 +++++ playbooks/roles/desktop/tasks/install.yml | 33 ++++++ playbooks/roles/desktop/tasks/main.yml | 16 +++ .../roles/desktop/vars/default/default.yml | 12 ++ playbooks/roles/desktop/vars/empty.yml | 4 + .../roles/desktop/vars/personal/Darwin.yml | 6 + .../roles/desktop/vars/zeronorth/Darwin.yml | 5 + playbooks/roles/docker/meta/main.yml | 4 + playbooks/roles/docker/tasks/macos.yml | 7 ++ playbooks/roles/docker/tasks/main.yml | 6 + playbooks/roles/docker/tasks/ubuntu.yml | 92 +++++++++++++++ playbooks/roles/info/tasks/main.yml | 8 ++ playbooks/roles/system/meta/main.yml | 2 + playbooks/roles/system/tasks/main.yml | 22 ++++ .../files/default/.scripts/rollout.sh | 33 ++++++ .../files/default/.shellrc/rc.d/01-alias.sh | 6 + .../files/default/.shellrc/rc.d/01-env.sh | 1 + .../files/default/.shellrc/rc.d/01-nvim.sh | 3 + .../files/default/.shellrc/rc.d/01-scripts.sh | 2 + .../files/default/.shellrc/rc.d/05-nvm.sh | 4 + .../files/default/.shellrc/rc.d/10-gpg.sh | 5 + .../files/default/.ssh/authorized_keys | 3 + .../roles/terminal/files/default/.ssh/config | 10 ++ .../files/default/.ssh/config.d/github | 4 + .../roles/terminal/files/default/.tmux.conf | 107 ++++++++++++++++++ playbooks/roles/terminal/files/default/.zshrc | 73 ++++++++++++ .../files/private/.ssh/config.d/private-git | 6 + .../private/.ssh/keys/github-private.pub | 1 + .../files/private/Projects/private/.envrc | 4 + .../files/private/Projects/private/.gitconfig | 10 ++ .../files/private/Projects/private/.npmrc | 3 + .../zeronorth/.ssh/config.d/zeronorth-git | 6 + .../zeronorth/.ssh/keys/github-zeronorth.pub | 1 + .../files/zeronorth/Projects/zeronorth/.envrc | 4 + .../zeronorth/Projects/zeronorth/.gitconfig | 7 ++ .../files/zeronorth/Projects/zeronorth/.npmrc | 2 + playbooks/roles/terminal/meta/main.yml | 4 + playbooks/roles/terminal/tasks/config.yml | 26 +++++ playbooks/roles/terminal/tasks/install.yml | 33 ++++++ playbooks/roles/terminal/tasks/main.yml | 35 ++++++ .../terminal/templates/default/.gitconfig.j2 | 53 +++++++++ .../roles/terminal/vars/default/default.yml | 17 +++ playbooks/roles/terminal/vars/empty.yml | 4 + .../roles/terminal/vars/zeronorth/default.yml | 5 + playbooks/setup.yml | 7 ++ requirements.txt | 71 ++++++++++++ scripts/setup-local.sh | 20 ++++ scripts/with-env.sh | 9 ++ 57 files changed, 965 insertions(+) create mode 100644 .dockerignore create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 Makefile create mode 100644 docker-compose.yml create mode 100644 init.sh create mode 100644 inventory.yml create mode 100644 playbooks/roles/desktop/files/default/.config/kitty/kitty.conf create mode 100644 playbooks/roles/desktop/meta/main.yml create mode 100644 playbooks/roles/desktop/tasks/config.yml create mode 100644 playbooks/roles/desktop/tasks/install.yml create mode 100644 playbooks/roles/desktop/tasks/main.yml create mode 100644 playbooks/roles/desktop/vars/default/default.yml create mode 100644 playbooks/roles/desktop/vars/empty.yml create mode 100644 playbooks/roles/desktop/vars/personal/Darwin.yml create mode 100644 playbooks/roles/desktop/vars/zeronorth/Darwin.yml create mode 100644 playbooks/roles/docker/meta/main.yml create mode 100644 playbooks/roles/docker/tasks/macos.yml create mode 100644 playbooks/roles/docker/tasks/main.yml create mode 100644 playbooks/roles/docker/tasks/ubuntu.yml create mode 100644 playbooks/roles/info/tasks/main.yml create mode 100644 playbooks/roles/system/meta/main.yml create mode 100644 playbooks/roles/system/tasks/main.yml create mode 100755 playbooks/roles/terminal/files/default/.scripts/rollout.sh create mode 100644 playbooks/roles/terminal/files/default/.shellrc/rc.d/01-alias.sh create mode 100644 playbooks/roles/terminal/files/default/.shellrc/rc.d/01-env.sh create mode 100644 playbooks/roles/terminal/files/default/.shellrc/rc.d/01-nvim.sh create mode 100644 playbooks/roles/terminal/files/default/.shellrc/rc.d/01-scripts.sh create mode 100644 playbooks/roles/terminal/files/default/.shellrc/rc.d/05-nvm.sh create mode 100644 playbooks/roles/terminal/files/default/.shellrc/rc.d/10-gpg.sh create mode 100644 playbooks/roles/terminal/files/default/.ssh/authorized_keys create mode 100644 playbooks/roles/terminal/files/default/.ssh/config create mode 100644 playbooks/roles/terminal/files/default/.ssh/config.d/github create mode 100644 playbooks/roles/terminal/files/default/.tmux.conf create mode 100644 playbooks/roles/terminal/files/default/.zshrc create mode 100644 playbooks/roles/terminal/files/private/.ssh/config.d/private-git create mode 100644 playbooks/roles/terminal/files/private/.ssh/keys/github-private.pub create mode 100644 playbooks/roles/terminal/files/private/Projects/private/.envrc create mode 100644 playbooks/roles/terminal/files/private/Projects/private/.gitconfig create mode 100644 playbooks/roles/terminal/files/private/Projects/private/.npmrc create mode 100644 playbooks/roles/terminal/files/zeronorth/.ssh/config.d/zeronorth-git create mode 100644 playbooks/roles/terminal/files/zeronorth/.ssh/keys/github-zeronorth.pub create mode 100644 playbooks/roles/terminal/files/zeronorth/Projects/zeronorth/.envrc create mode 100644 playbooks/roles/terminal/files/zeronorth/Projects/zeronorth/.gitconfig create mode 100644 playbooks/roles/terminal/files/zeronorth/Projects/zeronorth/.npmrc create mode 100644 playbooks/roles/terminal/meta/main.yml create mode 100644 playbooks/roles/terminal/tasks/config.yml create mode 100644 playbooks/roles/terminal/tasks/install.yml create mode 100644 playbooks/roles/terminal/tasks/main.yml create mode 100644 playbooks/roles/terminal/templates/default/.gitconfig.j2 create mode 100644 playbooks/roles/terminal/vars/default/default.yml create mode 100644 playbooks/roles/terminal/vars/empty.yml create mode 100644 playbooks/roles/terminal/vars/zeronorth/default.yml create mode 100644 playbooks/setup.yml create mode 100644 requirements.txt create mode 100755 scripts/setup-local.sh create mode 100644 scripts/with-env.sh diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..e4580e1 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +/.git/ +/.venv/ diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ef81b1e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/.venv/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..8a76bf8 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,9 @@ +FROM debian:bookworm +WORKDIR /app +RUN apt-get update && apt-get install -y \ + python3 \ + python3-pip \ + && rm -rf /var/lib/apt/lists/* +COPY requirements.txt /app +RUN pip3 install -r requirements.txt +COPY . /app diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..a349c91 --- /dev/null +++ b/Makefile @@ -0,0 +1,27 @@ +.PHONY: setup update-requirements .venv lint lint-fix setup-local clean + +.venv: .venv/touchfile + +.venv/touchfile: requirements.txt + test -d venv || virtualenv .venv + . .venv/bin/activate; pip install -Ur requirements.txt + touch .venv/touchfile + +update-requirements: + . .venv/bin/activate; pip freeze > requirements.txt + +install: .venv + +lint: .venv + . .venv/bin/activate; \ + ansible-lint playbooks/*.yml + +lint-fix: .venv + . .venv/bin/activate; \ + ansible-lint --fix playbooks/*.yml + +setup-local: .venv + ./scripts/setup-local.sh + +clean: + rm -rf .venv diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..e5cb64f --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,5 @@ +name: system +services: + playground: + image: ghcr.io/morten-olsen/system-playground + build: . diff --git a/init.sh b/init.sh new file mode 100644 index 0000000..3b803de --- /dev/null +++ b/init.sh @@ -0,0 +1,4 @@ +git clone https://github.com/morten-olsen/configs.git ~/.configs/system +cd ~/.configs/system +make install +./scripts/setup-local.sh diff --git a/inventory.yml b/inventory.yml new file mode 100644 index 0000000..810bdab --- /dev/null +++ b/inventory.yml @@ -0,0 +1,5 @@ +desktops: + hosts: + zn-macbook: + contexts: + - zeronorth diff --git a/playbooks/roles/desktop/files/default/.config/kitty/kitty.conf b/playbooks/roles/desktop/files/default/.config/kitty/kitty.conf new file mode 100644 index 0000000..44149ae --- /dev/null +++ b/playbooks/roles/desktop/files/default/.config/kitty/kitty.conf @@ -0,0 +1,86 @@ +font_family Fira Code Regular +disable_ligatures cursor +enable_audio_bell no +bell_on_tab no +# background_opacity 0.8 + +# vim:ft=kitty + +## name: Catppuccin Kitty Mocha +## author: Catppuccin Org +## license: MIT +## upstream: https://github.com/catppuccin/kitty/blob/main/themes/mocha.conf +## blurb: Soothing pastel theme for the high-spirited! + + + +# The basic colors +foreground #CDD6F4 +background #1E1E2E +selection_foreground #1E1E2E +selection_background #F5E0DC + +# Cursor colors +cursor #F5E0DC +cursor_text_color #1E1E2E + +# URL underline color when hovering with mouse +url_color #F5E0DC + +# Kitty window border colors +active_border_color #B4BEFE +inactive_border_color #6C7086 +bell_border_color #F9E2AF + +# OS Window titlebar colors +wayland_titlebar_color system +macos_titlebar_color system + +# Tab bar colors +active_tab_foreground #11111B +active_tab_background #CBA6F7 +inactive_tab_foreground #CDD6F4 +inactive_tab_background #181825 +tab_bar_background #11111B + +# Colors for marks (marked text in the terminal) +mark1_foreground #1E1E2E +mark1_background #B4BEFE +mark2_foreground #1E1E2E +mark2_background #CBA6F7 +mark3_foreground #1E1E2E +mark3_background #74C7EC + +# The 16 terminal colors + +# black +color0 #45475A +color8 #585B70 + +# red +color1 #F38BA8 +color9 #F38BA8 + +# green +color2 #A6E3A1 +color10 #A6E3A1 + +# yellow +color3 #F9E2AF +color11 #F9E2AF + +# blue +color4 #89B4FA +color12 #89B4FA + +# magenta +color5 #F5C2E7 +color13 #F5C2E7 + +# cyan +color6 #94E2D5 +color14 #94E2D5 + +# white +color7 #BAC2DE +color15 #A6ADC8 diff --git a/playbooks/roles/desktop/meta/main.yml b/playbooks/roles/desktop/meta/main.yml new file mode 100644 index 0000000..6ec6c73 --- /dev/null +++ b/playbooks/roles/desktop/meta/main.yml @@ -0,0 +1,4 @@ +--- +dependencies: + - role: info + - role: system diff --git a/playbooks/roles/desktop/tasks/config.yml b/playbooks/roles/desktop/tasks/config.yml new file mode 100644 index 0000000..97033c1 --- /dev/null +++ b/playbooks/roles/desktop/tasks/config.yml @@ -0,0 +1,26 @@ +--- +- name: "Copy templates : {{ context }}" + tags: + - config + ansible.builtin.template: + src: "{{ item.src }}" + dest: "{{ home }}/{{ item.path | regex_replace('\\.j2$', '') }}" + mode: "{{ item.mode }}" + with_community.general.filetree: + - ../templates/{{ context }} + loop_control: + label: "{{ item.path }}" + when: item.state == 'file' + +- name: "Copy config : {{ context }}" + tags: + - config + ansible.builtin.copy: + src: "{{ item.src }}" + dest: "{{ home }}/{{ item.path }}" + mode: "{{ item.mode }}" + with_community.general.filetree: + - ../files/{{ context }} + loop_control: + label: "{{ item.path }}" + when: item.state == 'file' diff --git a/playbooks/roles/desktop/tasks/install.yml b/playbooks/roles/desktop/tasks/install.yml new file mode 100644 index 0000000..026f30d --- /dev/null +++ b/playbooks/roles/desktop/tasks/install.yml @@ -0,0 +1,33 @@ +--- +- name: "Unload vars : {{ context }}" + ansible.builtin.include_vars: ../vars/empty.yml + tags: + - install + +- name: "Load vars : {{ context }}" + ansible.builtin.include_vars: "{{ item }}" + tags: + - install + with_first_found: + - files: + - "{{ ansible_distribution }}-{{ ansible_distribution_release }}.yml" + - "{{ ansible_distribution }}.yml" + - "{{ ansible_os_family }}.yml" + - default.yml + paths: ../vars/{{ context }} + skip: true + +- name: "Install dependencies : {{ context }}" + tags: + - install + when: desktop_pkgs + ansible.builtin.package: + name: "{{ desktop_pkgs }}" + +- name: "Install casks : {{ context }}" + tags: + - install + when: desktop_casks + community.general.homebrew_cask: + name: "{{ desktop_casks }}" + state: installed diff --git a/playbooks/roles/desktop/tasks/main.yml b/playbooks/roles/desktop/tasks/main.yml new file mode 100644 index 0000000..5719976 --- /dev/null +++ b/playbooks/roles/desktop/tasks/main.yml @@ -0,0 +1,16 @@ +--- +- name: Install context dependencies + ansible.builtin.include_tasks: install.yml + loop: "{{ contexts }}" + loop_control: + loop_var: context + tags: + - config + +- name: Configure contexts + ansible.builtin.include_tasks: config.yml + loop: "{{ contexts }}" + loop_control: + loop_var: context + tags: + - config diff --git a/playbooks/roles/desktop/vars/default/default.yml b/playbooks/roles/desktop/vars/default/default.yml new file mode 100644 index 0000000..94f2bd2 --- /dev/null +++ b/playbooks/roles/desktop/vars/default/default.yml @@ -0,0 +1,12 @@ +--- +_desktop_casks: + - 1password + - 1password-cli + - kitty + - font-fira-code + - font-fira-mono-nerd-font + - obsidian + - rectangle + - spotify + - vlc + - localsend diff --git a/playbooks/roles/desktop/vars/empty.yml b/playbooks/roles/desktop/vars/empty.yml new file mode 100644 index 0000000..0876352 --- /dev/null +++ b/playbooks/roles/desktop/vars/empty.yml @@ -0,0 +1,4 @@ +--- +desktop_pkgs: [] +desktop_casks: [] +desktop_flatpaks: [] diff --git a/playbooks/roles/desktop/vars/personal/Darwin.yml b/playbooks/roles/desktop/vars/personal/Darwin.yml new file mode 100644 index 0000000..0fa8464 --- /dev/null +++ b/playbooks/roles/desktop/vars/personal/Darwin.yml @@ -0,0 +1,6 @@ +--- +desktop_casks: + - jellyfin-media-player + - signal + - firefox + - tea diff --git a/playbooks/roles/desktop/vars/zeronorth/Darwin.yml b/playbooks/roles/desktop/vars/zeronorth/Darwin.yml new file mode 100644 index 0000000..e0b4cc9 --- /dev/null +++ b/playbooks/roles/desktop/vars/zeronorth/Darwin.yml @@ -0,0 +1,5 @@ +--- +desktop_casks: + - slack + - notion + - aws-vpn-client diff --git a/playbooks/roles/docker/meta/main.yml b/playbooks/roles/docker/meta/main.yml new file mode 100644 index 0000000..6ec6c73 --- /dev/null +++ b/playbooks/roles/docker/meta/main.yml @@ -0,0 +1,4 @@ +--- +dependencies: + - role: info + - role: system diff --git a/playbooks/roles/docker/tasks/macos.yml b/playbooks/roles/docker/tasks/macos.yml new file mode 100644 index 0000000..6b66978 --- /dev/null +++ b/playbooks/roles/docker/tasks/macos.yml @@ -0,0 +1,7 @@ +--- +- name: Install colima + tags: + - install + when: desktop_pkgs + ansible.builtin.package: + name: colima diff --git a/playbooks/roles/docker/tasks/main.yml b/playbooks/roles/docker/tasks/main.yml new file mode 100644 index 0000000..bd826ec --- /dev/null +++ b/playbooks/roles/docker/tasks/main.yml @@ -0,0 +1,6 @@ +--- +- name: Install on MacOS + when: mac_os + tags: + - install + ansible.builtin.include_tasks: macos.yml diff --git a/playbooks/roles/docker/tasks/ubuntu.yml b/playbooks/roles/docker/tasks/ubuntu.yml new file mode 100644 index 0000000..f9597b5 --- /dev/null +++ b/playbooks/roles/docker/tasks/ubuntu.yml @@ -0,0 +1,92 @@ +--- +# https://medium.com/@GarisSpace/how-to-install-docker-using-ansible-01a674086f8c +- name: Setting host facts + ansible.builtin.set_fact: + arch_mapping: # Map ansible architecture {{ ansible_architecture }} names to Docker's architecture names + x86_64: amd64 + aarch64: arm64 + tags: + - always + +- name: Install required packages + tags: + - install + ansible.builtin.apt: + pkg: + - apt-transport-https + - ca-certificates + - curl + - gnupg + - software-properties-common + +- name: Create directory for Docker's GPG key + tags: + - install + ansible.builtin.file: + path: /etc/apt/keyrings + state: directory + mode: "0755" + +- name: Add Docker's official GPG key + tags: + - install + ansible.builtin.apt_key: + url: https://download.docker.com/linux/ubuntu/gpg + keyring: /etc/apt/keyrings/docker.gpg + state: present + +- name: Print architecture variables + tags: + - install + ansible.builtin.debug: + msg: "Architecture: {{ ansible_architecture }}, Codename: {{ ansible_lsb.codename }}" + +- name: Add Docker repository + tags: + - install + ansible.builtin.apt_repository: + repo: >- + deb [arch={{ arch_mapping[ansible_architecture] | default(ansible_architecture) }} + signed-by=/etc/apt/keyrings/docker.gpg] + https://download.docker.com/linux/ubuntu {{ ansible_lsb.codename }} stable + filename: docker + state: present + +- name: Install Docker and related packages + tags: + - install + ansible.builtin.apt: + name: + - docker-ce + - docker-ce-cli + - containerd.io + - docker-buildx-plugin + - docker-compose-plugin + state: present + update_cache: true + +- name: Add Docker group + tags: + - install + ansible.builtin.group: + name: docker + state: present + +- name: Add user to Docker group + tags: + - install + ansible.builtin.user: + name: "{{ username }}" + groups: docker + append: true + +- name: Enable and start Docker services + tags: + - install + ansible.builtin.systemd: + name: "{{ item }}" + enabled: true + state: started + loop: + - docker.service + - containerd.service diff --git a/playbooks/roles/info/tasks/main.yml b/playbooks/roles/info/tasks/main.yml new file mode 100644 index 0000000..66e9d36 --- /dev/null +++ b/playbooks/roles/info/tasks/main.yml @@ -0,0 +1,8 @@ +- name: Setting host facts + tags: always + ansible.builtin.set_fact: + username: alice + home: /Users/alice + use_become: true + mac_os: "{{ ansible_distribution == 'MacOSX' }}" + contexts: "{{ ['default'] + (contexts | default([])) }}" diff --git a/playbooks/roles/system/meta/main.yml b/playbooks/roles/system/meta/main.yml new file mode 100644 index 0000000..0a064fc --- /dev/null +++ b/playbooks/roles/system/meta/main.yml @@ -0,0 +1,2 @@ +dependencies: + - role: info diff --git a/playbooks/roles/system/tasks/main.yml b/playbooks/roles/system/tasks/main.yml new file mode 100644 index 0000000..494cbae --- /dev/null +++ b/playbooks/roles/system/tasks/main.yml @@ -0,0 +1,22 @@ +- name: Install core dependencies + tags: always + ansible.builtin.package: + name: + - zsh + +- name: Create group + when: not mac_os + tags: always + ansible.builtin.group: + name: "{{ username }}" + state: present + +- name: Create user + when: not mac_os + tags: always + ansible.builtin.user: + name: "{{ username }}" + update_password: "on_create" + create_home: yes + shell: /usr/bin/zsh + group: "{{ username }}" diff --git a/playbooks/roles/terminal/files/default/.scripts/rollout.sh b/playbooks/roles/terminal/files/default/.scripts/rollout.sh new file mode 100755 index 0000000..83610c6 --- /dev/null +++ b/playbooks/roles/terminal/files/default/.scripts/rollout.sh @@ -0,0 +1,33 @@ +# +unset GITHUB_TOKEN + +# Extract type and description from commit message +type=$1; shift +description="$@" +commit_message="$type: $description" + +# Check if a commit message was provided +if [ -z "$1" ] || [ -z "$description" ]; then + echo "Usage: rollout <...description>" + exit 1 +fi + +# Create branch name following Conventional Commit syntax +branch_name="${type}/$(echo "$description" | tr ' ' '-' | tr '[:upper:]' '[:lower:]')" + +echo "Creating and checking out branch: $branch_name" +git checkout -b "$branch_name" || exit 1 + +# Add all changes +git add . || exit 1 + +echo "Committing with message: \"$commit_message\"" +git commit -m "$commit_message" || exit 1 + +echo "Pushing branch to origin..." +git push --set-upstream origin HEAD || exit 1 + +echo "Creating a Pull Request..." +gh pr create --fill + +echo "Rollout complete." diff --git a/playbooks/roles/terminal/files/default/.shellrc/rc.d/01-alias.sh b/playbooks/roles/terminal/files/default/.shellrc/rc.d/01-alias.sh new file mode 100644 index 0000000..445f0b9 --- /dev/null +++ b/playbooks/roles/terminal/files/default/.shellrc/rc.d/01-alias.sh @@ -0,0 +1,6 @@ +alias ls=eza +alias cat=bat +alias grep=rg +alias diff=delta +alias less=bat +alias gr='if [ "`git rev-parse --show-cdup`" != "" ]; then cd `git rev-parse --show-cdup`; fi' diff --git a/playbooks/roles/terminal/files/default/.shellrc/rc.d/01-env.sh b/playbooks/roles/terminal/files/default/.shellrc/rc.d/01-env.sh new file mode 100644 index 0000000..b20f7ed --- /dev/null +++ b/playbooks/roles/terminal/files/default/.shellrc/rc.d/01-env.sh @@ -0,0 +1 @@ +export TMPDIR="${TMPDIR:-/tmp}" diff --git a/playbooks/roles/terminal/files/default/.shellrc/rc.d/01-nvim.sh b/playbooks/roles/terminal/files/default/.shellrc/rc.d/01-nvim.sh new file mode 100644 index 0000000..ffaea50 --- /dev/null +++ b/playbooks/roles/terminal/files/default/.shellrc/rc.d/01-nvim.sh @@ -0,0 +1,3 @@ +export EDITOR=nvim +alias vim=nvim + diff --git a/playbooks/roles/terminal/files/default/.shellrc/rc.d/01-scripts.sh b/playbooks/roles/terminal/files/default/.shellrc/rc.d/01-scripts.sh new file mode 100644 index 0000000..3fafb84 --- /dev/null +++ b/playbooks/roles/terminal/files/default/.shellrc/rc.d/01-scripts.sh @@ -0,0 +1,2 @@ +export PATH="$PATH:$HOME/.scripts" + diff --git a/playbooks/roles/terminal/files/default/.shellrc/rc.d/05-nvm.sh b/playbooks/roles/terminal/files/default/.shellrc/rc.d/05-nvm.sh new file mode 100644 index 0000000..470257b --- /dev/null +++ b/playbooks/roles/terminal/files/default/.shellrc/rc.d/05-nvm.sh @@ -0,0 +1,4 @@ +export NVM_DIR="$HOME/.nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm +[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion + diff --git a/playbooks/roles/terminal/files/default/.shellrc/rc.d/10-gpg.sh b/playbooks/roles/terminal/files/default/.shellrc/rc.d/10-gpg.sh new file mode 100644 index 0000000..049cf20 --- /dev/null +++ b/playbooks/roles/terminal/files/default/.shellrc/rc.d/10-gpg.sh @@ -0,0 +1,5 @@ +export GPG_TTY="$(tty)" +export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket) +gpgconf --launch gpg-agent +gpg-connect-agent updatestartuptty /bye > /dev/null + diff --git a/playbooks/roles/terminal/files/default/.ssh/authorized_keys b/playbooks/roles/terminal/files/default/.ssh/authorized_keys new file mode 100644 index 0000000..28687ab --- /dev/null +++ b/playbooks/roles/terminal/files/default/.ssh/authorized_keys @@ -0,0 +1,3 @@ +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKDbZITpz5QrVIxPn9gKVWMPK+3W3YZZGszFOQvO/h7M +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCj8wspkAnOpEmipwB/xd8vpEx9aqNbyjD2xzv0msDJvYMn26ZO3cbtbWbMI9Uns55aHcL0bStdbaJQIcL8ZVzvQtKq+spdZYQpN4cFlN16HXKR/UjBYtJEdHVxb2cwb2DM04aLDuAlCAJGChEAqpIQFpvlByyAaxSPwor5Cy5JHmm5fMkvcJEvPtxQOo4yovY8qW9scWlOCrzNSAYtBwTGG8REcRuTaEW9EJlmn8QZA+T+cE7nFdZOlmm752jW9wBCAIKlg6W5gX0rysSxy+MkKB/2ohpLI+0SeWAM8+CEtZjO7GP6xRPXZgrZJssytzQsJoiMTs6rJM5ovHUMVNPGDLCB6+8lWM7Jk4hh0lIQTOC5AMucH2jRJSyQb2AA3kbPuWOwHDDIlSUnNFsI/xUVs1lfx3ikIZEb9oZcKwWBB2PeL/KT6ca7dsI3PyFL+hC5Wi7ll0Aj5w+dBZOxwW1agSo4ujPKO9oIVwqEA+PqoK/GZtIHAx6t/m3DK8T4HAo2GZMqyzRgcqk1bttaCFzX2h074yW1du8+l4yIqWrooqD474V3MT05HUxkA1+9S5ldEwK4J50WfKlhNuZn5YeiHLngisu8WyIGREYDGlkM+1qxwHiJGohigS20kpmTUkKvyLRXItAcvQYBknCV3qb8B1Kj1bvbN3sCaqQAeVWxDw== +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFaIAP/ZJ7+7jeR44e1yIJjfQAB6MN351LDKJAXVF62P diff --git a/playbooks/roles/terminal/files/default/.ssh/config b/playbooks/roles/terminal/files/default/.ssh/config new file mode 100644 index 0000000..ef602aa --- /dev/null +++ b/playbooks/roles/terminal/files/default/.ssh/config @@ -0,0 +1,10 @@ +Include /Users/alice/.colima/ssh_config + +Include ~/.ssh/config.d/* + +Host * + Controlmaster auto + Controlpath ${TMPDIR}/ssh-%r@%h:%p + IdentityAgent "~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock" + ForwardAgent yes + diff --git a/playbooks/roles/terminal/files/default/.ssh/config.d/github b/playbooks/roles/terminal/files/default/.ssh/config.d/github new file mode 100644 index 0000000..0fe0cb1 --- /dev/null +++ b/playbooks/roles/terminal/files/default/.ssh/config.d/github @@ -0,0 +1,4 @@ +host github.com + hostname ssh.github.com + user git + port 443 diff --git a/playbooks/roles/terminal/files/default/.tmux.conf b/playbooks/roles/terminal/files/default/.tmux.conf new file mode 100644 index 0000000..3cae85f --- /dev/null +++ b/playbooks/roles/terminal/files/default/.tmux.conf @@ -0,0 +1,107 @@ +set -g mouse on +set -g default-terminal "screen-256color-bce" +#set -g status-justify centre + +#set -ga terminal-overrides ',xterm-256color:Tc' +set -ag terminal-overrides ",xterm-256color:RGB" + + +set -g base-index 1 +set -g renumber-windows on +bind q lock-client + +unbind '"' +unbind % + +bind h select-pane -L +bind j select-pane -D +bind k select-pane -U +bind l select-pane -R + +bind -r H resize-pane -L 10 +bind -r J resize-pane -D 10 +bind -r K resize-pane -U 10 +bind -r L resize-pane -R 10 + +bind o attach -c "#{pane_current_path}" + +# don't rename windows automatically +set-option -g allow-rename off + +set -g @plugin 'tmux-plugins/tpm' + +run -b '~/.tmux/plugins/tpm/tpm' +if "test ! -d ~/.tmux/plugins/tpm" \ + "run 'git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm && ~/.tmux/plugins/tpm/bin/install_plugins'" + +# set -g @plugin "arcticicestudio/nord-tmux" +# set -g @plugin 'dracula/tmux' +# set -g @dracula-show-powerline true +# set -g @plugin 'wfxr/tmux-power' +set -g @plugin 'catppuccin/tmux' +set -g @plugin 'tmux-plugins/tmux-yank' +set -g @plugin 'tmux-plugins/tmux-sensible' +set -g @treemux-tree-nvim-init-file '~/.tmux/plugins/treemux/configs/treemux_init.lua' +set -g @plugin 'kiyoon/treemux' + +# open pane in vim +bind-key / capture-pane -S -102400 -J \; new-window 'vim -c ":read !tmux save-buffer - ; tmux delete-buffer;" -c ":normal gg" -c ":set buftype=nofile" -c ":silent! ChompWhitespace"' + +set -g @catppuccin_date_time "%Y-%m-%d %H:%M" +set -g @catppuccin_window_tabs_enabled "on" + +# clear history +# bind k send-keys -R \; clear-history + +# copy mode +setw -g mode-keys vi +bind Escape copy-mode +unbind [ +unbind p +bind p paste-buffer +bind -Tcopy-mode-vi v send -X begin-selection +bind -Tcopy-mode-vi y send -X copy-selection +bind -Tcopy-mode-vi Escape send -X cancel + +# panes +bind - split-window -v -c "#{pane_current_path}" +bind | split-window -h -c "#{pane_current_path}" +bind C-z resize-pane -Z +bind g swap-pane -U +bind æ swap-pane -D + +# panes +#set -g window-active-style 'bg=colour236' +#set -g window-style 'bg=black' + + +# Smart pane switching with awareness of Vim splits. +# See: https://github.com/christoomey/vim-tmux-navigator +is_vim="ps -o state= -o comm= -t '#{pane_tty}' \ + | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'" +bind-key -n 'C-h' if-shell "$is_vim" 'send-keys C-h' 'select-pane -L' +bind-key -n 'C-j' if-shell "$is_vim" 'send-keys C-j' 'select-pane -D' +bind-key -n 'C-k' if-shell "$is_vim" 'send-keys C-k' 'select-pane -U' +bind-key -n 'C-l' if-shell "$is_vim" 'send-keys C-l' 'select-pane -R' + +bind -n 'M-h' if-shell "$is_vim" 'send-keys M-h' 'resize-pane -L 1' +bind -n 'M-j' if-shell "$is_vim" 'send-keys M-j' 'resize-pane -D 1' +bind -n 'M-k' if-shell "$is_vim" 'send-keys M-k' 'resize-pane -U 1' +bind -n 'M-l' if-shell "$is_vim" 'send-keys M-l' 'resize-pane -R 1' + +tmux_version='$(tmux -V | sed -En "s/^tmux ([0-9]+(.[0-9]+)?).*/\1/p")' +if-shell -b '[ "$(echo "$tmux_version < 3.0" | bc)" = 1 ]' \ + "bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\' 'select-pane -l'" +if-shell -b '[ "$(echo "$tmux_version >= 3.0" | bc)" = 1 ]' \ + "bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\\\' 'select-pane -l'" + + +bind-key -T copy-mode-vi 'C-h' select-pane -L +bind-key -T copy-mode-vi 'C-j' select-pane -D +bind-key -T copy-mode-vi 'C-k' select-pane -U +bind-key -T copy-mode-vi 'C-l' select-pane -R +bind-key -T copy-mode-vi 'C-\' select-pane -l + +# Utils +bind -r g display-popup -d '#{pane_current_path}' -w80% -h80% -E lazygit + diff --git a/playbooks/roles/terminal/files/default/.zshrc b/playbooks/roles/terminal/files/default/.zshrc new file mode 100644 index 0000000..d995f45 --- /dev/null +++ b/playbooks/roles/terminal/files/default/.zshrc @@ -0,0 +1,73 @@ +export XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR:-$HOME/.cache} +export LANG=en_US.UTF-8 + +# Load all files from .shell/rc.d directory +if [ -d $HOME/.shellrc/rc.d ]; then + for file in $HOME/.shellrc/rc.d/*.sh; do + source $file + done +fi + +# Load all files from .shell/zshrc.d directory +if [ -d $HOME/.shellrc/zshrc.d ]; then + for file in $HOME/.shellrc/zshrc.d/*.zsh; do + source $file + done +fi +export GPG_TTY=$(tty) +if [[ -n "$SSH_CONNECTION" ]] ;then + export PINENTRY_USER_DATA="USE_CURSES=1" +fi + +[ -f ~/.env ] && source ~/.env + +if [ `tput cols` -gt "70" ]; then +function PRINT_CENTER { + COLS=`tput cols` + OFFSET=$(( ($COLS - $1) / 2 )) + PRE="" + for i in `seq $OFFSET`; do + PRE="$PRE " + done + while IFS= read -r line; do + echo "$PRE$line" + done <<< "$2" +} +PRINT_CENTER 60 " + + ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ + █░▄▄▀█▀▄▄▀█░▄▄░█▄░▄█▀▄▀██░▄░██░██░█░▄▄█░▄▄░█ + █░▀▀▄█░██░█░▀▄░██░██░█▀█░▀▀░▀█░██░█▄▄▀███▄██ + █▄█▄▄██▄▄██░▀▀░██▄███▄█████░███▄▄▄█▄▄▄█░▀▀░█ + ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ + + ⣴⣶⣤⡤⠦⣤⣀⣤⠆ ⣈⣭⣿⣶⣿⣦⣼⣆ + ⠉⠻⢿⣿⠿⣿⣿⣶⣦⠤⠄⡠⢾⣿⣿⡿⠋⠉⠉⠻⣿⣿⡛⣦ + ⠈⢿⣿⣟⠦ ⣾⣿⣿⣷ ⠻⠿⢿⣿⣧⣄ + ⣸⣿⣿⢧ ⢻⠻⣿⣿⣷⣄⣀⠄⠢⣀⡀⠈⠙⠿⠄ + ⢠⣿⣿⣿⠈ ⣻⣿⣿⣿⣿⣿⣿⣿⣛⣳⣤⣀⣀ + ⢠⣧⣶⣥⡤⢄ ⣸⣿⣿⠘ ⢀⣴⣿⣿⡿⠛⣿⣿⣧⠈⢿⠿⠟⠛⠻⠿⠄ + ⣰⣿⣿⠛⠻⣿⣿⡦⢹⣿⣷ ⢊⣿⣿⡏ ⢸⣿⣿⡇ ⢀⣠⣄⣾⠄ + ⣠⣿⠿⠛ ⢀⣿⣿⣷⠘⢿⣿⣦⡀ ⢸⢿⣿⣿⣄ ⣸⣿⣿⡇⣪⣿⡿⠿⣿⣷⡄ + ⠙⠃ ⣼⣿⡟ ⠈⠻⣿⣿⣦⣌⡇⠻⣿⣿⣷⣿⣿⣿ ⣿⣿⡇ ⠛⠻⢷⣄ + ⢻⣿⣿⣄ ⠈⠻⣿⣿⣿⣷⣿⣿⣿⣿⣿⡟ ⠫⢿⣿⡆ + ⠻⣿⣿⣿⣿⣶⣶⣾⣿⣿⣿⣿⣿⣿⣿⣿⡟⢀⣀⣤⣾⡿⠃ +▄▄▄ . ▌ ▐·▪ ▄▄▌ ▄▄▌ ▐ ▄▌▪ ▄▄▄▄▄ ▄ .▄ ▄• ▄▌▄▄▄▄▄ +▀▄.▀·▪█·█▌██ ██• ██· █▌▐███ •██ ██▪▐█ ▄█▀▄ █▪██▌•██ +▐▀▀▪▄▐█▐█•▐█·██ ▪ ██▪▐█▐▐▌▐█· ▐█.▪██▀▀█▐█▌.▐▌█▌▐█▌ ▐█.▪ +▐█▄▄▌ ███ ▐█▌▐█▌ ▄ ▐█▌██▐█▌▐█▌ ▐█▌·██▌▐▀▐█▌.▐▌▐█▄█▌ ▐█▌· + ▀▀▀ . ▀ ▀▀▀.▀▀▀ ▀▀▀▀ ▀▪▀▀▀ ▀▀▀ ▀▀▀ · ▀█▄▀▪ ▀▀▀ ▀▀▀ + + > welcome x_x +" +fi + +export FZF_DEFAULT_OPTS=" \ +--color=bg+:#313244,bg:#1e1e2e,spinner:#f5e0dc,hl:#f38ba8 \ +--color=fg:#cdd6f4,header:#f38ba8,info:#cba6f7,pointer:#f5e0dc \ +--color=marker:#f5e0dc,fg+:#cdd6f4,prompt:#cba6f7,hl+:#f38ba8" + +which atuin &> /dev/null && eval "$(atuin init zsh)" +which direnv &> /dev/null && eval "$(direnv hook zsh)" +which starship &> /dev/null && eval "$(starship init zsh)" +which zoxide &> /dev/null && eval "$(zoxide init zsh)" diff --git a/playbooks/roles/terminal/files/private/.ssh/config.d/private-git b/playbooks/roles/terminal/files/private/.ssh/config.d/private-git new file mode 100644 index 0000000..8745485 --- /dev/null +++ b/playbooks/roles/terminal/files/private/.ssh/config.d/private-git @@ -0,0 +1,6 @@ +host github-private + hostname ssh.github.com + user git + port 443 + IdentityFile ~/.ssh/keys/github-private.pub + IdentitiesOnly yes diff --git a/playbooks/roles/terminal/files/private/.ssh/keys/github-private.pub b/playbooks/roles/terminal/files/private/.ssh/keys/github-private.pub new file mode 100644 index 0000000..07e7a2e --- /dev/null +++ b/playbooks/roles/terminal/files/private/.ssh/keys/github-private.pub @@ -0,0 +1 @@ +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFaIAP/ZJ7+7jeR44e1yIJjfQAB6MN351LDKJAXVF62P diff --git a/playbooks/roles/terminal/files/private/Projects/private/.envrc b/playbooks/roles/terminal/files/private/Projects/private/.envrc new file mode 100644 index 0000000..7ca076b --- /dev/null +++ b/playbooks/roles/terminal/files/private/Projects/private/.envrc @@ -0,0 +1,4 @@ +export NPM_GITHUB_TOKEN="op://jpksggxxmcuwnbwkooktr3iqcy/ut3yag6r7y4bsfrztahp7pcc6q/password" +export NODE_AUTH_TOKEN=$NPM_GITHUB_TOKEN +export GITHUB_TOKEN=$NPM_GITHUB_TOKEN + diff --git a/playbooks/roles/terminal/files/private/Projects/private/.gitconfig b/playbooks/roles/terminal/files/private/Projects/private/.gitconfig new file mode 100644 index 0000000..2012abd --- /dev/null +++ b/playbooks/roles/terminal/files/private/Projects/private/.gitconfig @@ -0,0 +1,10 @@ +[user] + email = morten@olsen.pro + name = Morten Olsen + signingkey = ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFaIAP/ZJ7+7jeR44e1yIJjfQAB6MN351LDKJAXVF62P + +[url "git@github-private:morten-olsen/"] + insteadOf = https://github.com/morten-olsen/ + +[url "ssh://git@giteaa.olsen.cloud:2202/"] + insteadOf = ssh://git@gitea.olsen.cloud:2202/ diff --git a/playbooks/roles/terminal/files/private/Projects/private/.npmrc b/playbooks/roles/terminal/files/private/Projects/private/.npmrc new file mode 100644 index 0000000..fa1e632 --- /dev/null +++ b/playbooks/roles/terminal/files/private/Projects/private/.npmrc @@ -0,0 +1,3 @@ +@morten-olsen:registry=https://npm.pkg.github.com + //npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN} + diff --git a/playbooks/roles/terminal/files/zeronorth/.ssh/config.d/zeronorth-git b/playbooks/roles/terminal/files/zeronorth/.ssh/config.d/zeronorth-git new file mode 100644 index 0000000..5db03b0 --- /dev/null +++ b/playbooks/roles/terminal/files/zeronorth/.ssh/config.d/zeronorth-git @@ -0,0 +1,6 @@ +host github-zeronorth + hostname ssh.github.com + user git + port 443 + IdentityFile ~/.ssh/keys/github-zeronorth.pub + IdentitiesOnly yes diff --git a/playbooks/roles/terminal/files/zeronorth/.ssh/keys/github-zeronorth.pub b/playbooks/roles/terminal/files/zeronorth/.ssh/keys/github-zeronorth.pub new file mode 100644 index 0000000..4c1e8fc --- /dev/null +++ b/playbooks/roles/terminal/files/zeronorth/.ssh/keys/github-zeronorth.pub @@ -0,0 +1 @@ +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKDbZITpz5QrVIxPn9gKVWMPK+3W3YZZGszFOQvO/h7M diff --git a/playbooks/roles/terminal/files/zeronorth/Projects/zeronorth/.envrc b/playbooks/roles/terminal/files/zeronorth/Projects/zeronorth/.envrc new file mode 100644 index 0000000..dd7afe3 --- /dev/null +++ b/playbooks/roles/terminal/files/zeronorth/Projects/zeronorth/.envrc @@ -0,0 +1,4 @@ +export NPM_GITHUB_TOKEN="op://jpksggxxmcuwnbwkooktr3iqcy/ut3yag6r7y4bsfrztahp7pcc6q/password" +export NODE_AUTH_TOKEN=$NPM_GITHUB_TOKEN +export GITHUB_TOKEN="op://Employee/lobazchngpvla4opw4rwzjwnoi/credential" +export AWS_PROFILE="zeronorth" diff --git a/playbooks/roles/terminal/files/zeronorth/Projects/zeronorth/.gitconfig b/playbooks/roles/terminal/files/zeronorth/Projects/zeronorth/.gitconfig new file mode 100644 index 0000000..f70c3e5 --- /dev/null +++ b/playbooks/roles/terminal/files/zeronorth/Projects/zeronorth/.gitconfig @@ -0,0 +1,7 @@ +[user] + email = morten.olsen@zeronorth.com + name = Morten Olsen + signingkey = ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKDbZITpz5QrVIxPn9gKVWMPK+3W3YZZGszFOQvO/h7M + +[url "git@github-zeronorth:"] + insteadOf = https://github.com/ diff --git a/playbooks/roles/terminal/files/zeronorth/Projects/zeronorth/.npmrc b/playbooks/roles/terminal/files/zeronorth/Projects/zeronorth/.npmrc new file mode 100644 index 0000000..6b239c7 --- /dev/null +++ b/playbooks/roles/terminal/files/zeronorth/Projects/zeronorth/.npmrc @@ -0,0 +1,2 @@ +@0north:registry=https://npm.pkg.github.com +//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN} diff --git a/playbooks/roles/terminal/meta/main.yml b/playbooks/roles/terminal/meta/main.yml new file mode 100644 index 0000000..6ec6c73 --- /dev/null +++ b/playbooks/roles/terminal/meta/main.yml @@ -0,0 +1,4 @@ +--- +dependencies: + - role: info + - role: system diff --git a/playbooks/roles/terminal/tasks/config.yml b/playbooks/roles/terminal/tasks/config.yml new file mode 100644 index 0000000..99eb265 --- /dev/null +++ b/playbooks/roles/terminal/tasks/config.yml @@ -0,0 +1,26 @@ +--- +- name: "Copy templates : {{ context }}" + tags: + - config + ansible.builtin.template: + src: "{{ item.src }}" + dest: "{{ home }}/{{ item.path | regex_replace('\\.j2$', '') }}" + mode: "{{ item.mode }}" + with_community.general.filetree: + - ../templates/{{ context }} + loop_control: + label: "{{ item.path }}" + when: item.state == 'file' + +- name: Copy config {{ context }} + tags: + - config + ansible.builtin.copy: + src: "{{ item.src }}" + dest: "{{ home }}/{{ item.path }}" + mode: "{{ item.mode }}" + with_community.general.filetree: + - ../files/{{ context }} + loop_control: + label: "{{ item.path }}" + when: item.state == 'file' diff --git a/playbooks/roles/terminal/tasks/install.yml b/playbooks/roles/terminal/tasks/install.yml new file mode 100644 index 0000000..db1b7d0 --- /dev/null +++ b/playbooks/roles/terminal/tasks/install.yml @@ -0,0 +1,33 @@ +--- +- name: "Unload vars : {{ context }}" + ansible.builtin.include_vars: ../vars/empty.yml + tags: + - install + +- name: "Load vars : {{ context }}" + ansible.builtin.include_vars: "{{ item }}" + tags: + - install + with_first_found: + - files: + - "{{ ansible_distribution }}-{{ ansible_distribution_release }}.yml" + - "{{ ansible_distribution }}.yml" + - "{{ ansible_os_family }}.yml" + - default.yml + paths: ../vars/{{ context }} + skip: true + +- name: "Install dependencies : {{ context }}" + tags: + - install + when: terminal_pkgs + ansible.builtin.package: + name: "{{ terminal_pkgs }}" + +- name: "Install casks : {{ context }}" + tags: + - install + when: terminal_casks + community.general.homebrew_cask: + name: "{{ terminal_casks }}" + state: installed diff --git a/playbooks/roles/terminal/tasks/main.yml b/playbooks/roles/terminal/tasks/main.yml new file mode 100644 index 0000000..b701f36 --- /dev/null +++ b/playbooks/roles/terminal/tasks/main.yml @@ -0,0 +1,35 @@ +--- +- name: Install context dependencies + ansible.builtin.include_tasks: install.yml + loop: "{{ contexts }}" + loop_control: + loop_var: context + tags: + - config + +- name: Configure contexts + ansible.builtin.include_tasks: config.yml + loop: "{{ contexts }}" + loop_control: + loop_var: context + tags: + - config + +- name: Install node and set version + tags: + - config + register: nodeinstall + ansible.builtin.shell: source {{ home }}/.nvm/nvm.sh && nvm install 22 + changed_when: "'is already installed' not in nodeinstall.stderr" + args: + executable: /bin/bash + +- name: Configure neovim + tags: + - config + ansible.builtin.git: + repo: https://github.com/morten-olsen/nvim + dest: "{{ home }}/.config/nvim" + accept_newhostkey: true + clone: true + update: true diff --git a/playbooks/roles/terminal/templates/default/.gitconfig.j2 b/playbooks/roles/terminal/templates/default/.gitconfig.j2 new file mode 100644 index 0000000..78ad5cd --- /dev/null +++ b/playbooks/roles/terminal/templates/default/.gitconfig.j2 @@ -0,0 +1,53 @@ +[gpg] + format = ssh + +[gpg "ssh"] + program = "/Applications/1Password.app/Contents/MacOS/op-ssh-sign" + +[alias] + graph = log --graph --color --pretty=format:"%C(yellow)%H%C(green)%d%C(reset)%n%x20%cd%n%x20%cn%C(blue)%x20(%ce)%x20%C(cyan)[gpg:%GK%x20%G?]%C(reset)%n%x20%s%n" + ll = log --oneline + st = status -sb + cm = commit -m + append = commit --amend --no-edit + sobmodules = submodule update --init --recursive + df = difftool -t nvimdiff -y + last = log -1 --stat + br = branch --format='%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(contents:subject) %(color:green)(%(committerdate:relative)) [%(authorname)]' --sort=-committerdate + brr = branch --remote --format='%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(contents:subject) %(color:green)(%(committerdate:relative)) [%(authorname)]' --sort=-committerdate + undo = reset HEAD~1 --mixed + unstage = reset HEAD -- + +[difftool "nvimdiff"] + cmd = "nvim -d \"$LOCAL\" \"$REMOTE\"" +[commit] + gpgsign = true +[url "https://"] + insteadOf = git:// + +[core] + pager = delta + hooksPath = /dev/null + +[interactive] + diffFilter = delta --color-only + +[pull] + ff = only +[init] + defaultBranch = main + +[filter "lfs"] + clean = git-lfs clean -- %f + smudge = git-lfs smudge -- %f + process = git-lfs filter-process + required = true + +[includeIf "gitdir:~/Projects/zeronorth/"] + path = ~/Projects/zeronorth/.gitconfig + +[includeIf "gitdir:~/Projects/private/"] + path = ~/Projects/private/.gitconfig +[push] + autoSetupRemote = true + diff --git a/playbooks/roles/terminal/vars/default/default.yml b/playbooks/roles/terminal/vars/default/default.yml new file mode 100644 index 0000000..e10c3d5 --- /dev/null +++ b/playbooks/roles/terminal/vars/default/default.yml @@ -0,0 +1,17 @@ +--- +terminal_pkgs: + - atuin + - bat + - eza + - direnv + - fzf + - gnupg + - jq + - ripgrep + - neovim + - gh + - starship + - tmux + - zoxide + - git + - git-delta diff --git a/playbooks/roles/terminal/vars/empty.yml b/playbooks/roles/terminal/vars/empty.yml new file mode 100644 index 0000000..6d4ac1e --- /dev/null +++ b/playbooks/roles/terminal/vars/empty.yml @@ -0,0 +1,4 @@ +--- +terminal_pkgs: [] +terminal_casks: [] +terminal_flatpaks: [] diff --git a/playbooks/roles/terminal/vars/zeronorth/default.yml b/playbooks/roles/terminal/vars/zeronorth/default.yml new file mode 100644 index 0000000..b08be9d --- /dev/null +++ b/playbooks/roles/terminal/vars/zeronorth/default.yml @@ -0,0 +1,5 @@ +--- +terminal_pkgs: + - terraform + - awscli + - copier diff --git a/playbooks/setup.yml b/playbooks/setup.yml new file mode 100644 index 0000000..0ce66b8 --- /dev/null +++ b/playbooks/setup.yml @@ -0,0 +1,7 @@ +--- +- name: Setup host + hosts: all + roles: + - role: terminal + - role: desktop + - role: docker diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..e83b825 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,71 @@ +ansible==10.4.0 +ansible-builder==3.1.0 +ansible-compat==24.9.1 +ansible-core==2.17.4 +ansible-creator==24.9.0 +ansible-dev-environment==24.9.0 +ansible-dev-tools==24.9.0 +ansible-lint==24.9.2 +ansible-navigator==24.9.0 +ansible-runner==2.4.0 +ansible-sign==0.1.1 +attrs==24.2.0 +bindep==2.11.0 +black==24.8.0 +bracex==2.5.post1 +cachetools==5.5.0 +cffi==1.17.1 +chardet==5.2.0 +click==8.1.7 +click-help-colors==0.9.4 +colorama==0.4.6 +cryptography==43.0.1 +distlib==0.3.8 +distro==1.9.0 +docutils==0.21.2 +enrich==1.2.7 +execnet==2.1.1 +filelock==3.16.1 +importlib_metadata==8.5.0 +iniconfig==2.0.0 +Jinja2==3.1.4 +jsonschema==4.23.0 +jsonschema-specifications==2023.12.1 +lockfile==0.12.2 +markdown-it-py==3.0.0 +MarkupSafe==2.1.5 +mdurl==0.1.2 +molecule==24.9.0 +mypy-extensions==1.0.0 +onigurumacffi==1.3.0 +packaging==24.1 +Parsley==1.3 +pathspec==0.12.1 +pbr==6.1.0 +pexpect==4.9.0 +platformdirs==4.3.6 +pluggy==1.5.0 +ptyprocess==0.7.0 +pycparser==2.22 +Pygments==2.18.0 +pyproject-api==1.8.0 +pytest==8.3.3 +pytest-ansible==24.9.0 +pytest-xdist==3.6.1 +python-daemon==3.0.1 +python-gnupg==0.5.3 +PyYAML==6.0.2 +referencing==0.35.1 +resolvelib==1.0.1 +rich==13.9.2 +rpds-py==0.20.0 +ruamel.yaml==0.18.6 +ruamel.yaml.clib==0.2.8 +subprocess-tee==0.4.2 +tox==4.21.2 +tox-ansible==24.9.0 +tzdata==2024.2 +virtualenv==20.26.6 +wcmatch==10.0 +yamllint==1.35.1 +zipp==3.20.2 diff --git a/scripts/setup-local.sh b/scripts/setup-local.sh new file mode 100755 index 0000000..5b07dcf --- /dev/null +++ b/scripts/setup-local.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +export ROOT="`dirname "$0"`/.." +MACHINE_NAME="$1"; shift + +. $ROOT/scripts/with-env.sh + +if [ -z "$MACHINE_NAME" ]; then + echo "Usage: $0 " + exit 1 +fi + +echo "Setting up $MACHINE_NAME" +ansible-playbook -i inventory.yml playbooks/setup.yml \ + --connection=local \ + --extra-vars "ansible_python_interpreter=$(which python)" \ + --inventory "$MACHINE_NAME," \ + --limit "$MACHINE_NAME" \ + $@ \ + --ask-become-pass + diff --git a/scripts/with-env.sh b/scripts/with-env.sh new file mode 100644 index 0000000..23917e4 --- /dev/null +++ b/scripts/with-env.sh @@ -0,0 +1,9 @@ +if [ ! -d "$ROOT/.venv" ]; then + echo "Creating virtual environment..." + python3 -m venv $ROOT/.venv + source $ROOT/.venv/bin/activate + pip install -r $ROOT/requirements.txt + touch .venv/touchfile +else + source $ROOT/.venv/bin/activate +fi