diff --git a/.ansible-lint b/.ansible-lint
index b857e69..fb0464f 100644
--- a/.ansible-lint
+++ b/.ansible-lint
@@ -20,3 +20,4 @@ mock_modules:
- snap
- community.general.npm
- community.general.pacman
+ - community.general.flatpak
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index cd09b29..e8479c3 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -43,7 +43,7 @@ repos:
rev: v0.11.0
hooks:
- id: shellcheck
- exclude: ^roles/(penrose|sway)/
+ exclude: ^roles/penrose/
stages: [pre-commit, pre-push]
# Shell format (mvdan/sh Docker image).
@@ -53,12 +53,12 @@ repos:
- id: shfmt-docker
name: shfmt (check shell)
args: [-d, -i, "2", -ci]
- exclude: ^roles/(penrose|sway)/
+ exclude: ^roles/penrose/
stages: [pre-commit, pre-push]
- id: shfmt-docker
name: shfmt (format shell)
args: [-w, -i, "2", -ci]
- exclude: ^roles/(penrose|sway)/
+ exclude: ^roles/penrose/
stages: [manual]
- repo: local
diff --git a/bin/dot-bootstrap b/bin/dot-bootstrap
index 755c30f..cf0b0f9 100755
--- a/bin/dot-bootstrap
+++ b/bin/dot-bootstrap
@@ -1,21 +1,77 @@
#!/usr/bin/env bash
set -e
-if ! [ -x "$(command -v ansible)" ]; then
- sudo apt install ansible
-fi
-
-# ansible-galaxy install gantsign.antigen --ignore-certs
-if ! [ -x "$(ansible-galaxy collection list community.general)" ]; then
- ansible-galaxy collection install community.general --ignore-certs
-fi
-# if ! [ -x "$(ansible-galaxy list viasite-ansible.zsh)" ]; then
-# ansible-galaxy install viasite-ansible.zsh --force --ignore-certs
-# fi
-
-echo "Setting up local dev environment"
-ansible-playbook -i ~/git/dot-files/hosts ~/git/dot-files/dotfiles.yml --ask-become-pass -v "$@"
-
-if command -v terminal-notifier 1>/dev/null 2>&1; then
- terminal-notifier -title "dotfiles: Bootstrap complete" -message "Successfully set up dev environment."
-fi
+detect_os() {
+ if [ -f /etc/os-release ]; then
+ # shellcheck source=/dev/null
+ . /etc/os-release
+ echo "$ID"
+ else
+ uname -s | tr '[:upper:]' '[:lower:]'
+ fi
+}
+
+install_prereqs() {
+ local os="$1"
+ local pkgs=(ansible just git curl)
+
+ # Check if all packages are already installed
+ local install_needed=false
+ for pkg in "${pkgs[@]}"; do
+ if ! command -v "$pkg" &>/dev/null; then
+ install_needed=true
+ break
+ fi
+ done
+
+ if [ "$install_needed" = false ]; then
+ return 0
+ fi
+
+ case "$os" in
+ ubuntu | debian | pop | mint)
+ echo "Installing Debian/Ubuntu prerequisites..."
+ sudo apt-get update
+ sudo apt-get install -y ansible just git curl
+ ;;
+ arch | manjaro)
+ echo "Installing Arch Linux prerequisites..."
+ sudo pacman -Sy --needed --noconfirm ansible just git curl
+ ;;
+ *)
+ echo "Unsupported OS: $os"
+ echo "Please ensure ansible, just, git, and curl are installed manually."
+ exit 1
+ ;;
+ esac
+}
+
+install_collections() {
+ if ! ansible-galaxy collection list community.general >/dev/null 2>&1; then
+ echo "Installing community.general collection..."
+ ansible-galaxy collection install community.general --ignore-certs
+ fi
+}
+
+run_playbook() {
+ if [[ "$1" == "--check" ]] || [[ "$1" == "dry-run" ]]; then
+ echo "Running dry-run..."
+ shift
+ just dry-run "$@"
+ else
+ echo "Applying dotfiles configuration..."
+ just apply "$@"
+ fi
+}
+
+main() {
+ local os
+ os=$(detect_os)
+ echo "Detected OS: $os"
+
+ install_prereqs "$os"
+ install_collections
+ run_playbook "$@"
+}
+
+main "$@"
diff --git a/dotfiles.yml b/dotfiles.yml
index 21ec37d..8ee5e6b 100644
--- a/dotfiles.yml
+++ b/dotfiles.yml
@@ -12,13 +12,9 @@
- "git"
- "fzf"
- "zsh"
- - "tmux"
- # - "emacs"
- # - "doom-emacs"
+ - "zellij"
- "nvim"
- "rust"
- # - "sway"
- # - "wm"
- "packages"
- "xinput"
@@ -29,49 +25,38 @@
tags:
- "git"
# - {role: fish, tags: ['fish']}
+ - role: programming
+ tags:
+ - "rustup"
+ - "cargo"
+ - "rust"
+ - "go"
+ - "programming"
+ - role: jj
+ tags:
+ - "jj"
- role: fzf
tags:
- "fzf"
- role: zsh
tags:
- "zsh"
- - role: tmux
+ - role: zellij
tags:
- - "tmux"
+ - "zellij"
- role: nvim
tags:
- "nvim"
- # - role: haskell
- # tags:
- # - "stack"
- - role: programming
+ - role: penrose
tags:
- - "rustup"
- - "cargo"
- - "rust"
- - "go"
- - "programming"
- # - role: sway
- # tags:
- # - "sway"
- # - "wm"
- # - role: penrose
- # tags:
- # - "wm"
- # - "penrose"
- # - "bspwm"
- # - role: xmonad
- # tags:
- # - "xmonad"
+ - "wm"
+ - "penrose"
- role: firefox
tags:
- firefox
- role: packages
tags:
- "packages"
- - role: jj
- tags:
- - "jj"
- role: xinput
tags:
- "xinput"
diff --git a/group_vars/local b/group_vars/local
index 1542326..297001a 100644
--- a/group_vars/local
+++ b/group_vars/local
@@ -3,6 +3,7 @@
dotfiles_user: "{{ lookup('env', 'USER') }}"
dotfiles_user_home: "{{ '~' | expanduser }}"
dotfiles_home: "{{dotfiles_user_home}}/git/dot-files"
+xdg_config_home: "{{ lookup('env', 'XDG_CONFIG_HOME') | default(dotfiles_user_home ~ '/.config', true) }}"
full_name: Kevin Oberlies
diff --git a/justfile b/justfile
index c84fffd..0d4b5e2 100644
--- a/justfile
+++ b/justfile
@@ -27,3 +27,11 @@ lint-yaml DIR=".":
# Lint the Ansible playbook and roles with ansible-lint (config: .ansible-lint).
lint-ansible:
uvx ansible-lint
+
+# Run a dry run of the Ansible playbook to see what changes would be made
+dry-run *ARGS:
+ ansible-playbook -i hosts dotfiles.yml -v --check --diff {{ ARGS }}
+
+# Apply the dotfiles configuration to the local system
+apply *ARGS:
+ ansible-playbook -i hosts dotfiles.yml --ask-become-pass -v {{ ARGS }}
diff --git a/mermaid-sample.md b/mermaid-sample.md
new file mode 100644
index 0000000..3bac754
--- /dev/null
+++ b/mermaid-sample.md
@@ -0,0 +1,13 @@
+# Mermaid sample
+
+Open this file in nvim (running directly in kitty) to verify the
+`diagram.nvim` + `image.nvim` setup renders mermaid blocks inline.
+
+```mermaid
+flowchart TD
+ A[Start] --> B{mmdc installed?}
+ B -- yes --> C[Render diagram inline]
+ B -- no --> D[Run packages role]
+ D --> B
+ C --> E[Done]
+```
diff --git a/roles/fzf/tasks/debian.yml b/roles/fzf/tasks/debian.yml
index 6433d9e..d9ea930 100644
--- a/roles/fzf/tasks/debian.yml
+++ b/roles/fzf/tasks/debian.yml
@@ -1,6 +1,20 @@
+- name: Check if fzf is installed
+ command: dpkg-query -W -f='${Status}' fzf
+ register: fzf_check
+ ignore_errors: true
+ changed_when: false
+ become: false
+ check_mode: no
+
+- name: Report fzf installation status (Check Mode Only)
+ debug:
+ msg: "fzf is missing and would be installed"
+ when: ansible_check_mode and fzf_check.rc is defined and fzf_check.rc != 0
+
- name: Install fzf from apt
apt:
name: fzf
state: present
become: true
become_method: sudo
+ when: not ansible_check_mode and fzf_check.rc is defined and fzf_check.rc != 0
diff --git a/roles/git/tasks/debian.yml b/roles/git/tasks/debian.yml
index b169065..27a961b 100644
--- a/roles/git/tasks/debian.yml
+++ b/roles/git/tasks/debian.yml
@@ -1,6 +1,20 @@
+- name: Check if git is installed
+ command: dpkg-query -W -f='${Status}' git
+ register: git_check
+ ignore_errors: true
+ changed_when: false
+ become: false
+ check_mode: no
+
+- name: Report git installation status (Check Mode Only)
+ debug:
+ msg: "git is missing and would be installed"
+ when: ansible_check_mode and git_check.rc is defined and git_check.rc != 0
+
- name: Install git with apt
apt:
name: git
state: present
become_method: sudo
become: true
+ when: not ansible_check_mode and git_check.rc is defined and git_check.rc != 0
diff --git a/roles/haskell/tasks/debian.yml b/roles/haskell/tasks/debian.yml
index 36c62e7..7cf771a 100644
--- a/roles/haskell/tasks/debian.yml
+++ b/roles/haskell/tasks/debian.yml
@@ -1,3 +1,16 @@
+- name: Check if haskell-stack is installed
+ command: dpkg-query -W -f='${Status}' haskell-stack
+ register: haskell_check
+ ignore_errors: true
+ changed_when: false
+ become: false
+ check_mode: no
+
+- name: Report haskell-stack status (Check Mode Only)
+ debug:
+ msg: "haskell-stack is missing and would be installed"
+ when: ansible_check_mode and haskell_check.rc is defined and haskell_check.rc != 0
+
- name: Install haskell-stack
apt:
name:
@@ -6,3 +19,4 @@
force_apt_get: yes
become: true
become_method: sudo
+ when: not ansible_check_mode and haskell_check.rc is defined and haskell_check.rc != 0
diff --git a/roles/jj/tasks/main.yml b/roles/jj/tasks/main.yml
index 73ffa2a..e1181cd 100644
--- a/roles/jj/tasks/main.yml
+++ b/roles/jj/tasks/main.yml
@@ -1,16 +1,17 @@
-- name: Install jj with cargo binstall
- command: cargo binstall -y --strategies crate-meta-data jj-cli
+- name: Install jj with cargo-binstall
+ command: "{{ dotfiles_user_home }}/.cargo/bin/cargo-binstall -y --strategies crate-meta-data jj-cli"
args:
- creates: "{{ ansible_env.HOME }}/.cargo/bin/jj"
+ creates: "{{ dotfiles_user_home }}/.cargo/bin/jj"
+ when: not ansible_check_mode
- name: Create jj config directory
file:
state: directory
- dest: "{{ dotfiles_user_home }}/.config/jj"
+ dest: "{{ xdg_config_home }}/jj"
- name: Hard link jj config.toml
file:
src: "{{ dotfiles_home }}/roles/jj/files/config.toml"
- dest: "{{ dotfiles_user_home }}/.config/jj/config.toml"
+ dest: "{{ xdg_config_home }}/jj/config.toml"
state: hard
force: true
diff --git a/roles/nvim/files/lazy-lock.json b/roles/nvim/files/lazy-lock.json
index d1d8d2f..74f8719 100644
--- a/roles/nvim/files/lazy-lock.json
+++ b/roles/nvim/files/lazy-lock.json
@@ -7,12 +7,13 @@
"black-nvim": { "branch": "master", "commit": "8fb3efc562b67269e6f31f8653297f826534fa4b" },
"blink.cmp": { "branch": "main", "commit": "78336bc89ee5365633bcf754d93df01678b5c08f" },
"blink.compat": { "branch": "main", "commit": "2ed6d9a28b07fa6f3bface818470605f8896408c" },
- "blink.lib": { "branch": "main", "commit": "b127d48bf8e9ac9cf41f6e0fbead317503f76558" },
+ "blink.lib": { "branch": "main", "commit": "e8cd0d6b0ffac8e1cd33ce66df70a8b24808b4cd" },
"cmp-digraphs": { "branch": "master", "commit": "5efc1f0078d7c5f3ea1c8e3aad04da3fd6e081a9" },
"codecompanion-history.nvim": { "branch": "main", "commit": "bc1b4fe06eaaf0aa2399be742e843c22f7f1652a" },
"codecompanion.nvim": { "branch": "main", "commit": "7cc35b7f7f08d093469fa9ae67d3af716bd729c3" },
- "copilot.lua": { "branch": "master", "commit": "b54c05349d406f7af11b150824efa8e4f90015c6" },
+ "copilot.lua": { "branch": "master", "commit": "7df55b20b5b653941f0bcff87e559cabb6fafeb0" },
"crates.nvim": { "branch": "main", "commit": "694357861ec9ebf12475ddcdd04ea45a0923c32d" },
+ "diagram.nvim": { "branch": "master", "commit": "a221810b17cdda2d5fdddba9bab3eba6fab8fabc" },
"diffview.nvim": { "branch": "main", "commit": "4516612fe98ff56ae0415a259ff6361a89419b0a" },
"fern.vim": { "branch": "main", "commit": "3d580357c09e199b0fa7d560b2db1ad05de02b9c" },
"ferris.nvim": { "branch": "main", "commit": "275865530d753a205740804f1ce163af2322db57" },
@@ -23,6 +24,7 @@
"gitsigns.nvim": { "branch": "main", "commit": "25050e4ed39e628282831d4cbecb1850454ce915" },
"hunk.nvim": { "branch": "master", "commit": "c8a8e7b6973576f63e5bf39aa8338d7f37f4dc53" },
"hydra.nvim": { "branch": "main", "commit": "8c4a9f621ec7cdc30411a1f3b6d5eebb12b469dc" },
+ "image.nvim": { "branch": "master", "commit": "88351f1f7d9dbae286e671ce3690a49660dd8a5c" },
"iron.nvim": { "branch": "master", "commit": "88cd340407b959f1168af2a6ae5a3d180e6df32c" },
"jj-diffconflicts": { "branch": "main", "commit": "a2aa9a247b56d2c1a6f6be81bcf41c5450cc82ff" },
"lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
@@ -61,7 +63,7 @@
"pomo.nvim": { "branch": "main", "commit": "7e06e5221d8d1e596a0ab29dd4d7fcee5f3cd05a" },
"popup.nvim": { "branch": "master", "commit": "b7404d35d5d3548a82149238289fa71f7f6de4ac" },
"project.nvim": { "branch": "main", "commit": "8c6bad7d22eef1b71144b401c9f74ed01526a4fb" },
- "schemastore.nvim": { "branch": "main", "commit": "304d2286752923e3b0eb1ddcb3d4002a69b855ad" },
+ "schemastore.nvim": { "branch": "main", "commit": "735540a7602bffd1b07deab7d508affb57b78c64" },
"suda.vim": { "branch": "master", "commit": "c492741b4679b3cdd4d9e34138209784e061d916" },
"tcomment_vim": { "branch": "master", "commit": "48ab639a461d9b8344f7fee06cb69b4374863b13" },
"telescope-fzf-native.nvim": { "branch": "main", "commit": "b25b749b9db64d375d782094e2b9dce53ad53a40" },
diff --git a/roles/nvim/files/lua/plugins/spec/diagram.lua b/roles/nvim/files/lua/plugins/spec/diagram.lua
new file mode 100644
index 0000000..6858d50
--- /dev/null
+++ b/roles/nvim/files/lua/plugins/spec/diagram.lua
@@ -0,0 +1,43 @@
+-- Inline rendering of mermaid (and other) diagrams directly in the buffer via
+-- the kitty graphics protocol. Requires a graphics-capable terminal (kitty),
+-- the `mmdc` CLI (@mermaid-js/mermaid-cli) to render mermaid, and ImageMagick
+-- (`magick`) to process the images -- both installed by the packages role.
+return {
+ {
+ "3rd/image.nvim",
+ event = "VeryLazy",
+ opts = {
+ backend = "kitty",
+ -- Use the ImageMagick CLI rather than the `magick` luarock, so there is
+ -- no luarocks build step to maintain.
+ processor = "magick_cli",
+ -- diagram.nvim drives the rendering; don't also auto-render markdown images.
+ integrations = {},
+ max_width_window_percentage = 80,
+ max_height_window_percentage = 80,
+ },
+ },
+ {
+ "3rd/diagram.nvim",
+ dependencies = { "3rd/image.nvim" },
+ ft = { "markdown" },
+ -- opts is a function so the integration module is required only after the
+ -- plugin is on the runtimepath.
+ opts = function()
+ return {
+ integrations = {
+ require("diagram.integrations.markdown"),
+ },
+ renderer_options = {
+ mermaid = {
+ theme = "dark",
+ -- mmdc drives Chromium via puppeteer; on Ubuntu 23.10+ AppArmor
+ cli_args = vim.env.DOTFILES_TRUSTED_MERMAID == "1"
+ and { "--puppeteerConfigFile", vim.fn.stdpath("config") .. "/puppeteer-config.json" }
+ or {},
+ },
+ },
+ }
+ end,
+ },
+}
diff --git a/roles/nvim/files/puppeteer-config.json b/roles/nvim/files/puppeteer-config.json
new file mode 100644
index 0000000..3201af7
--- /dev/null
+++ b/roles/nvim/files/puppeteer-config.json
@@ -0,0 +1,3 @@
+{
+ "args": ["--no-sandbox"]
+}
diff --git a/roles/nvim/tasks/debian.yml b/roles/nvim/tasks/debian.yml
index e69de29..6ef0e13 100644
--- a/roles/nvim/tasks/debian.yml
+++ b/roles/nvim/tasks/debian.yml
@@ -0,0 +1,4 @@
+- name: noop
+ debug:
+ msg: "noop"
+ when: false
diff --git a/roles/nvim/tasks/main.yml b/roles/nvim/tasks/main.yml
index effc512..0e7ee4b 100644
--- a/roles/nvim/tasks/main.yml
+++ b/roles/nvim/tasks/main.yml
@@ -1,9 +1,20 @@
- import_tasks: debian.yml
when: ansible_os_family == "Debian"
+- name: Install bob-nvim with cargo-binstall
+ command: "{{ dotfiles_user_home }}/.cargo/bin/cargo-binstall -y bob-nvim"
+ args:
+ creates: "{{ dotfiles_user_home }}/.cargo/bin/bob"
+ when: not ansible_check_mode
+
+- name: Install Neovim version via bob
+ command: "{{ dotfiles_user_home }}/.cargo/bin/bob use v0.12.2"
+ args:
+ creates: "{{ dotfiles_user_home }}/.local/share/bob/v0.12.2"
+
- name: Link nvim config directory
file:
src: "{{ dotfiles_home }}/roles/nvim/files/"
- dest: "{{ dotfiles_user_home }}/.config/nvim"
+ dest: "{{ xdg_config_home }}/nvim"
state: link
force: true
diff --git a/roles/packages/defaults/main.yml b/roles/packages/defaults/main.yml
new file mode 100644
index 0000000..2aab5b2
--- /dev/null
+++ b/roles/packages/defaults/main.yml
@@ -0,0 +1,26 @@
+---
+packages_debian_list:
+ - aptitude
+ - qemu
+ - qemu-system
+ - nodejs
+ - npm
+ - sddm
+ - flameshot
+ - runc
+ - podman
+ - autorandr
+ - arandr
+ - steam-installer
+ - pavucontrol
+ - openjdk-8-jdk
+ - net-tools
+ - pcmanfm
+ - imagemagick
+ - 1password
+ - 1password-cli
+
+packages_snap_list:
+ - slack
+ - helm
+ - kubectl
diff --git a/roles/packages/tasks/arch.yml b/roles/packages/tasks/arch.yml
index e006e76..e4cd025 100644
--- a/roles/packages/tasks/arch.yml
+++ b/roles/packages/tasks/arch.yml
@@ -3,11 +3,19 @@
name:
- qemu
- virt-manager
- - nemo
+ - pcmanfm
- npm
- autorandr
- arandr
- bash-language-server
- - the_silver_searcher
+ become: true
+ become_method: sudo
+
+- name: Install 1Password and CLI with yay
+ yay:
+ name:
+ - 1password
+ - 1password-cli
+ state: present
become: true
become_method: sudo
diff --git a/roles/packages/tasks/debian.yml b/roles/packages/tasks/debian.yml
index 71794a4..f3d00ca 100644
--- a/roles/packages/tasks/debian.yml
+++ b/roles/packages/tasks/debian.yml
@@ -14,58 +14,77 @@
become_method: sudo
when: ansible_distribution_version == "20.04"
+- name: Download 1Password GPG key
+ get_url:
+ url: https://downloads.1password.com/linux/keys/1password.asc
+ dest: /usr/share/keyrings/1password-archive-keyring.asc
+ mode: "0644"
+ become: true
+ become_method: sudo
+ when: not ansible_check_mode
+
+- name: Add 1Password apt repository
+ apt_repository:
+ repo: "deb [arch=amd64 signed-by=/usr/share/keyrings/1password-archive-keyring.asc] https://downloads.1password.com/linux/debian/amd64 stable main"
+ state: present
+ filename: 1password
+ become: true
+ become_method: sudo
+ when: not ansible_check_mode
+
+- name: Check which apt packages are missing
+ command: "dpkg-query -W -f='${Package} installed\\n' {{ packages_debian_list | join(' ') }}"
+ register: dpkg_check
+ ignore_errors: true
+ changed_when: false
+ become: false
+ check_mode: no
+
+- name: Set missing apt packages fact
+ set_fact:
+ missing_apt_packages: "{{ packages_debian_list | difference((dpkg_check.stdout_lines | default([])) | map('regex_replace', ' installed$', '') | list) }}"
+
+- name: Check which snap packages are missing
+ command: "snap list {{ packages_snap_list | join(' ') }}"
+ register: snap_check
+ ignore_errors: true
+ changed_when: false
+ become: false
+ check_mode: no
+
+- name: Set missing snap packages fact
+ set_fact:
+ missing_snap_packages: "{{ packages_snap_list | difference(snap_check.stdout_lines | default([]) | map('regex_replace', '^(\\S+)\\s+.*$', '\\1') | list) }}"
+
+- name: Report package differences (Check Mode Only)
+ debug:
+ msg:
+ - "Missing APT packages (would be installed): {{ missing_apt_packages }}"
+ - "Missing Snap packages (would be installed): {{ missing_snap_packages }}"
+ when: ansible_check_mode
+
- name: Install apt packages
apt:
- name:
- - aptitude
- - qemu
- - qemu-system
- - nodejs
- - npm
- - sddm
- - flameshot
- - runc
- - podman
- - autorandr
- - arandr
- - steam-installer
- - pavucontrol
- - gnome-screensaver
- - silversearcher-ag
- - openjdk-8-jdk
- - net-tools
- - nemo
+ name: "{{ missing_apt_packages }}"
state: present
update_cache: true
become_method: sudo
become: true
+ when: not ansible_check_mode and missing_apt_packages | length > 0
- name: Install snap packages (classic confinement)
snap:
- name:
- - slack
- - helm
- - kubectl
+ name: "{{ missing_snap_packages }}"
state: present
classic: true
become: true
become_method: sudo
+ when: not ansible_check_mode and missing_snap_packages | length > 0
-- name: check if multimc is installed
- command: dpkg-query -W multimc
- register: multimc_check_deb
- failed_when: multimc_check_deb.rc > 1
- changed_when: multimc_check_deb.rc == 1
-
-- name: download multimc
- get_url:
- url: "https://files.multimc.org/downloads/multimc_1.4-1.deb"
- dest: "{{ dotfiles_user_home }}/Downloads/multimc_1.4-1.deb"
- when: multimc_check_deb.rc == 1
-
-- name: Install multimc
- apt:
- deb: "{{ dotfiles_user_home }}/Downloads/multimc_1.4-1.deb"
- when: multimc_check_deb.rc == 1
+- name: Install Prism Launcher via Flatpak
+ community.general.flatpak:
+ name: org.prismlauncher.PrismLauncher
+ state: present
become: true
become_method: sudo
+ when: not ansible_check_mode
diff --git a/roles/packages/tasks/main.yml b/roles/packages/tasks/main.yml
index 29fe339..4ac07e5 100644
--- a/roles/packages/tasks/main.yml
+++ b/roles/packages/tasks/main.yml
@@ -3,17 +3,25 @@
- import_tasks: arch.yml
when: ansible_os_family == "Archlinux"
-- name: install bash-language-server
- community.general.npm:
- name: "bash-language-server"
- global: true
- become: true
- become_method: sudo
- when: ansible_os_family != "Archlinux"
+- name: Install global npm packages to user local bin
+ block:
+ - name: install bash-language-server
+ community.general.npm:
+ name: "bash-language-server"
+ global: true
+ when: ansible_os_family != "Archlinux"
-- name: install prettier
- community.general.npm:
- name: "prettier"
- global: true
- become: true
- become_method: sudo
+ - name: install prettier
+ community.general.npm:
+ name: "prettier"
+ global: true
+
+ # Provides `mmdc`, used by diagram.nvim to render mermaid code blocks inline.
+ - name: install mermaid-cli
+ community.general.npm:
+ name: "@mermaid-js/mermaid-cli"
+ global: true
+ when: ansible_os_family != "Archlinux"
+ environment:
+ NPM_CONFIG_PREFIX: "{{ dotfiles_user_home }}/.local"
+ when: not ansible_check_mode
diff --git a/roles/penrose/files/bspwm.desktop b/roles/penrose/files/bspwm.desktop
deleted file mode 100644
index b4e751b..0000000
--- a/roles/penrose/files/bspwm.desktop
+++ /dev/null
@@ -1,5 +0,0 @@
-[Desktop Entry]
-Name=BSPwm
-Comment=Lightweight tiling window manager
-Exec=/usr/bin/bspwm
-Type=XSession
diff --git a/roles/penrose/files/config/bspwm/bspwmrc b/roles/penrose/files/config/bspwm/bspwmrc
deleted file mode 100755
index cfb61ad..0000000
--- a/roles/penrose/files/config/bspwm/bspwmrc
+++ /dev/null
@@ -1,52 +0,0 @@
-#! /bin/bash
-
-_bc() {
- bspc config "$@"
-}
-
-_check() {
- command -v "$1" > /dev/null
-}
-
-
-
-bspc monitor -d 1 2 3 4 5 6 7 8 9
-
-# Window Management
-_bc border_width 1
-_bc window_gap 0
-
-_bc split_ratio 0.67
-_bc borderless_monocle true
-_bc gapless_monocle false
-
-bspc rule -a Gimp desktop='^8' state=floating follow=on
-bspc rule -a Chromium desktop='^2'
-bspc rule -a mplayer2 state=floating
-bspc rule -a Kupfer.py focus=on
-bspc rule -a Screenkey manage=off
-
-# Autostart
-
-pgrep -x sxhkd > /dev/null || sxhkd &
-
-# NOTE the path to the polybar executable. This is the default location
-# when compiling from source.
-# Launch Polybar
-if _check polybar
-then
- bash $HOME/.config/polybar/launch.sh &
-
- # Add padding equal to the panel height to fix an issue where there
- # is an overlap between panel and windows.
- _panel_height() {
- awk -F '=' '/height/ { print $2; exit; }' \
- "$HOME"/.config/polybar/config
- }
-fi
-
-if [ -x /usr/local/bin/polybar ]; then
-fi
-# _check xsetroot &&
-xsetroot -xcf /usr/share/icons/DMZ-White/cursors/left_ptr 16 -solid black
-_check rescuetime && rescuetime &
diff --git a/roles/xmonad/files/config/polybar/config b/roles/penrose/files/config/polybar/config
similarity index 99%
rename from roles/xmonad/files/config/polybar/config
rename to roles/penrose/files/config/polybar/config
index 64f4f7c..b75896d 100644
--- a/roles/xmonad/files/config/polybar/config
+++ b/roles/penrose/files/config/polybar/config
@@ -92,11 +92,7 @@ modules-left = xworkspaces xwindow
modules-center = date
modules-right = volume battery backlight powermenu
-[module/xmonad]
-type = custom/script
-exec = ~/go/bin/xmonad-log
-tail = true
[module/xworkspaces]
type = internal/xworkspaces
diff --git a/roles/xmonad/files/config/polybar/launch.sh b/roles/penrose/files/config/polybar/launch.sh
similarity index 100%
rename from roles/xmonad/files/config/polybar/launch.sh
rename to roles/penrose/files/config/polybar/launch.sh
diff --git a/roles/penrose/files/config/sxhkd/sxhkdrc b/roles/penrose/files/config/sxhkd/sxhkdrc
deleted file mode 100644
index 9053868..0000000
--- a/roles/penrose/files/config/sxhkd/sxhkdrc
+++ /dev/null
@@ -1,126 +0,0 @@
-#
-# wm independent hotkeys
-#
-
-# terminal emulator
-super + Return
- alacritty
-
-# program launcher
-super + r
- rofi -show drun
-
-super + shift + z
- xsecurelock &
- echo -n "deep" > /sys/power/mem_sleep
- echo -n "mem" > /sys/power/state
-
-# make sxhkd reload its configuration files:
-super + q
- pkill -USR1 -x sxhkd
-
-#
-# bspwm hotkeys
-#
-
-# quit/restart bspwm
-super + shift + {q,r}
- bspc {quit,wm -r}
-
-# close and kill
-super + {alt + shift + ,shift + }c
- bspc node -{k,c}
-
-# alternate between the tiled and monocle layout
-super + m
- bspc desktop -l next
-
-# send the newest marked node to the newest preselected node
-super + y
- bspc node newest.marked.local -n newest.!automatic.local
-
-# swap the current node and the biggest window
-super + g
- bspc node -s biggest.window
-
-#
-# state/flags
-#
-
-# set the window state
-super + {t,shift + t,s,f}
- bspc node -t {tiled,pseudo_tiled,floating,fullscreen}
-
-# set the node flags
-super + ctrl + {m,x,y,z}
- bspc node -g {marked,locked,sticky,private}
-
-#
-# focus/swap
-#
-
-# focus the node in the given direction
-super + {_,shift + }{h,j,k,l}
- bspc node -{f,s} {west,south,north,east}
-
-# focus the node for the given path jump
-super + {p,b,comma,period}
- bspc node -f @{parent,brother,first,second}
-
-# focus the next/previous window in the current desktop
-super + {_,shift + }c
- bspc node -f {next,prev}.local.!hidden.window
-
-# focus the next/previous desktop in the current monitor
-super + bracket{left,right}
- bspc desktop -f {prev,next}.local
-
-# focus the last node/desktop
-super + {grave,Tab}
- bspc {node,desktop} -f last
-
-# focus the older or newer node in the focus history
-super + {o,i}
- bspc wm -h off; \
- bspc node {older,newer} -f; \
- bspc wm -h on
-
-# focus or send to the given desktop
-super + {_,shift + }{1-9,0}
- bspc {desktop -f,node -d} '^{1-9,10}'
-
-#
-# preselect
-#
-
-# preselect the direction
-super + ctrl + {h,j,k,l}
- bspc node -p {west,south,north,east}
-
-# preselect the ratio
-super + ctrl + {1-9}
- bspc node -o 0.{1-9}
-
-# cancel the preselection for the focused node
-super + ctrl + space
- bspc node -p cancel
-
-# cancel the preselection for the focused desktop
-super + ctrl + shift + space
- bspc query -N -d | xargs -I id -n 1 bspc node id -p cancel
-
-#
-# move/resize
-#
-
-# expand a window by moving one of its side outward
-super + alt + {h,j,k,l}
- bspc node -z {left -20 0,bottom 0 20,top 0 -20,right 20 0}
-
-# contract a window by moving one of its side inward
-super + alt + shift + {h,j,k,l}
- bspc node -z {right -20 0,top 0 20,bottom 0 -20,left 20 0}
-
-# move a floating window
-super + {Left,Down,Up,Right}
- bspc node -v {-20 0,0 20,0 -20,20 0}
diff --git a/roles/penrose/tasks/debian.yml b/roles/penrose/tasks/debian.yml
index ee7c9d7..8b445a0 100644
--- a/roles/penrose/tasks/debian.yml
+++ b/roles/penrose/tasks/debian.yml
@@ -1,13 +1,19 @@
-- name: Install bspwm dependencies
- apt:
- name:
+- name: Check which penrose packages are missing
+ command: "dpkg-query -W -f='${Package} installed\\n' {{ penrose_packages | join(' ') }}"
+ register: penrose_check
+ ignore_errors: true
+ changed_when: false
+ become: false
+ check_mode: no
+ vars:
+ penrose_packages: &penrose_pkgs
- libglib2.0-dev
- libpango1.0-dev
- libcairo2-dev
- libasound2-dev
- libgirepository1.0-dev
- libxcb-randr0-dev
- - libwebkit2gtk-4.0-dev
+ - libwebkit2gtk-4.1-dev
- libgtksourceview-3.0-dev
- libtinfo-dev
- libdbusmenu-glib-dev
@@ -18,14 +24,28 @@
- polybar
- blueman
- nitrogen
- - sxhkd
- picom
- - bspwm
- rofi
- dunst
- jq
- tint2
+
+- name: Set missing penrose packages fact
+ set_fact:
+ missing_penrose_packages: "{{ penrose_packages | difference((penrose_check.stdout_lines | default([])) | map('regex_replace', ' installed$', '') | list) }}"
+ vars:
+ penrose_packages: *penrose_pkgs
+
+- name: Report missing penrose packages (Check Mode Only)
+ debug:
+ msg: "The following penrose packages are missing and would be installed: {{ missing_penrose_packages }}"
+ when: ansible_check_mode and missing_penrose_packages | length > 0
+
+- name: Install penrose dependencies
+ apt:
+ name: "{{ missing_penrose_packages }}"
state: present
force_apt_get: yes
become: true
become_method: sudo
+ when: not ansible_check_mode and missing_penrose_packages | length > 0
diff --git a/roles/penrose/tasks/main.yml b/roles/penrose/tasks/main.yml
index 701f3ea..0fbeaa2 100644
--- a/roles/penrose/tasks/main.yml
+++ b/roles/penrose/tasks/main.yml
@@ -1,60 +1,41 @@
- import_tasks: debian.yml
when: ansible_os_family == "Debian"
-# - name: Fetch penrose git repo
-# git:
-# repo: https://github.com/favilo/favilrose
-# dest: "{{ dotfiles_user_home }}/git/utilities/favilrose"
-#
-# - name: Build penrose
-# command: "cargo build --release"
-# args:
-# chdir: "{{ dotfiles_user_home }}/git/utilities/favilrose"
-#
-# - name: install penrose
-# command: "cargo install --path ."
-# args:
-# chdir: "{{ dotfiles_user_home }}/git/utilities/favilrose"
-#
-# - name: Install Penrose.desktop file
-# template:
-# src: "{{ dotfiles_home }}/roles/penrose/files/Penrose.desktop"
-# dest: "/usr/share/xsessions/penrose.desktop"
-# become: true
-# become_method: sudo
+- name: Fetch penrose (favilrose) git repo
+ git:
+ repo: https://github.com/favilo/favilrose
+ dest: "{{ dotfiles_user_home }}/git/utilities/favilrose"
+ when: not ansible_check_mode
-- name: Create config directories
- file:
- path: "{{ dotfiles_user_home }}/.config/{{ item.dir }}"
- state: directory
- with_items:
- - dir: bspwm
- - dir: sxhkd
- - dir: polybar
+- name: Build favilrose (release)
+ command: make build
+ args:
+ chdir: "{{ dotfiles_user_home }}/git/utilities/favilrose"
+ creates: "{{ dotfiles_user_home }}/git/utilities/favilrose/target/release/favilo-penrose"
+ when: not ansible_check_mode
+
+# `make install` copies the binary, bin/ + scripts/ helpers, systemd units, and
+# the repo's own penrose.desktop into /usr/local and /usr — all need root.
+- name: Install favilrose
+ command: make install
+ args:
+ chdir: "{{ dotfiles_user_home }}/git/utilities/favilrose"
+ creates: "/usr/local/bin/favilo-penrose"
+ become: true
+ become_method: sudo
+ when: not ansible_check_mode
-- name: bspwm config
+- name: Create polybar config directory
file:
- src: "{{ dotfiles_home }}/roles/penrose/files/config/{{ item.dir }}/{{ item.src }}"
- dest: "{{ dotfiles_user_home }}/.config/{{ item.dir }}/{{ item.src }}"
- state: link
- force: true
- with_items:
- - src: bspwmrc
- dir: bspwm
- - src: sxhkdrc
- dir: sxhkd
+ path: "{{ xdg_config_home }}/polybar"
+ state: directory
- name: polybar config
file:
- src: "{{ dotfiles_home }}/roles/xmonad/files/config/polybar/{{ item.src }}"
- dest: "{{ dotfiles_user_home }}/.config/polybar/{{ item.src }}"
+ src: "{{ dotfiles_home }}/roles/penrose/files/config/polybar/{{ item.src }}"
+ dest: "{{ xdg_config_home }}/polybar/{{ item.src }}"
state: link
force: true
with_items:
- src: launch.sh
- src: config
-
-- name: xmonad-log
- command: "go get github.com/xintron/xmonad-log"
- args:
- creates: "{{ dotfiles_user_home }}/go/bin/xmonad-log"
diff --git a/roles/penrose/templates/penrose.desktop.j2 b/roles/penrose/templates/penrose.desktop.j2
deleted file mode 100644
index b092ea9..0000000
--- a/roles/penrose/templates/penrose.desktop.j2
+++ /dev/null
@@ -1,5 +0,0 @@
-[Desktop Entry]
-Name=Penrose
-Comment=Lightweight tiling window manager w/ Rust
-Exec={{ dotfiles_user_home }}/.cargo/bin/favilrose
-Type=XSession
diff --git a/roles/programming/files/alacritty.toml b/roles/programming/files/alacritty.toml
deleted file mode 100644
index fb139f3..0000000
--- a/roles/programming/files/alacritty.toml
+++ /dev/null
@@ -1,639 +0,0 @@
-enable_experimental_conpty_backend = false
-live_config_reload = true
-working_directory = "None"
-
-[bell]
-animation = "EaseOutExpo"
-color = "0xffffff"
-duration = 0
-
-[colors]
-draw_bold_text_with_bright_colors = true
-indexed_colors = []
-
-[colors.bright]
-black = "0x666666"
-blue = "0x7aa6da"
-cyan = "0x54ced6"
-green = "0x9ec400"
-magenta = "0xb77ee0"
-red = "0xff3334"
-white = "0xffffff"
-yellow = "0xe7c547"
-
-[colors.normal]
-black = "0x000000"
-blue = "0x7aa6da"
-cyan = "0x70c0ba"
-green = "0xb9ca4a"
-magenta = "0xc397d8"
-red = "0xd54e53"
-white = "0xeaeaea"
-yellow = "0xe6c547"
-
-[colors.primary]
-background = "0x000000"
-foreground = "0xeaeaea"
-
-[cursor]
-style = "Block"
-unfocused_hollow = true
-
-[debug]
-log_level = "Warn"
-persistent_logging = true
-print_events = false
-# ref_test = false
-render_timer = false
-
-[env]
-TERM = "xterm-256color"
-
-[font]
-family = "monospace"
-size = 8.0
-
-[font.glyph_offset]
-x = 0
-y = 0
-
-[font.offset]
-x = 0
-y = 0
-
-[[hints.enabled]]
-command = "xdg-open"
-post_processing = true
-regex = "(ipfs:|ipns:|magnet:|mailto:|gemini:|gopher:|https:|http:|news:|file:|git:|ssh:|ftp:)[^\u0000-\u001F\u007F-<>\"\\s{-}\\^⟨⟩`]+"
-
-[hints.enabled.binding]
-key = "U"
-mods = "Control|Shift"
-
-[hints.enabled.mouse]
-enabled = true
-mods = "Shift"
-
-[[keyboard.bindings]]
-action = "Paste"
-key = "Paste"
-
-[[keyboard.bindings]]
-action = "Copy"
-key = "Copy"
-
-[[keyboard.bindings]]
-action = "ClearLogNotice"
-key = "L"
-mods = "Control"
-
-[[keyboard.bindings]]
-chars = "\f"
-key = "L"
-mods = "Control"
-
-[[keyboard.bindings]]
-chars = "\u001B[1;3H"
-key = "Home"
-mods = "Alt"
-
-[[keyboard.bindings]]
-chars = "\u001BOH"
-key = "Home"
-mode = "AppCursor"
-
-[[keyboard.bindings]]
-chars = "\u001B[H"
-key = "Home"
-mode = "~AppCursor"
-
-[[keyboard.bindings]]
-chars = "\u001B[1;3F"
-key = "End"
-mods = "Alt"
-
-[[keyboard.bindings]]
-chars = "\u001BOF"
-key = "End"
-mode = "AppCursor"
-
-[[keyboard.bindings]]
-chars = "\u001B[F"
-key = "End"
-mode = "~AppCursor"
-
-[[keyboard.bindings]]
-action = "ScrollPageUp"
-key = "PageUp"
-mode = "~Alt"
-mods = "Shift"
-
-[[keyboard.bindings]]
-chars = "\u001B[5;2~"
-key = "PageUp"
-mode = "Alt"
-mods = "Shift"
-
-[[keyboard.bindings]]
-chars = "\u001B[5;5~"
-key = "PageUp"
-mods = "Control"
-
-[[keyboard.bindings]]
-chars = "\u001B[5;3~"
-key = "PageUp"
-mods = "Alt"
-
-[[keyboard.bindings]]
-chars = "\u001B[5~"
-key = "PageUp"
-
-[[keyboard.bindings]]
-action = "ScrollPageDown"
-key = "PageDown"
-mode = "~Alt"
-mods = "Shift"
-
-[[keyboard.bindings]]
-chars = "\u001B[6;2~"
-key = "PageDown"
-mode = "Alt"
-mods = "Shift"
-
-[[keyboard.bindings]]
-chars = "\u001B[6;5~"
-key = "PageDown"
-mods = "Control"
-
-[[keyboard.bindings]]
-chars = "\u001B[6;3~"
-key = "PageDown"
-mods = "Alt"
-
-[[keyboard.bindings]]
-chars = "\u001B[6~"
-key = "PageDown"
-
-[[keyboard.bindings]]
-chars = "\u001B[Z"
-key = "Tab"
-mods = "Shift"
-
-[[keyboard.bindings]]
-chars = "\u007F"
-key = "Back"
-
-[[keyboard.bindings]]
-chars = "\u007F"
-key = "Back"
-mods = "Shift"
-
-[[keyboard.bindings]]
-chars = "\u001B\u007F"
-key = "Back"
-mods = "Alt"
-
-[[keyboard.bindings]]
-chars = "\u001B[2~"
-key = "Insert"
-
-[[keyboard.bindings]]
-chars = "\u001B[3~"
-key = "Delete"
-
-[[keyboard.bindings]]
-chars = "\u001B[1;2D"
-key = "Left"
-mods = "Shift"
-
-[[keyboard.bindings]]
-chars = "\u001B[1;5D"
-key = "Left"
-mods = "Control"
-
-[[keyboard.bindings]]
-chars = "\u001B[1;3D"
-key = "Left"
-mods = "Alt"
-
-[[keyboard.bindings]]
-chars = "\u001B[D"
-key = "Left"
-mode = "~AppCursor"
-
-[[keyboard.bindings]]
-chars = "\u001BOD"
-key = "Left"
-mode = "AppCursor"
-
-[[keyboard.bindings]]
-chars = "\u001B[1;2C"
-key = "Right"
-mods = "Shift"
-
-[[keyboard.bindings]]
-chars = "\u001B[1;5C"
-key = "Right"
-mods = "Control"
-
-[[keyboard.bindings]]
-chars = "\u001B[1;3C"
-key = "Right"
-mods = "Alt"
-
-[[keyboard.bindings]]
-chars = "\u001B[C"
-key = "Right"
-mode = "~AppCursor"
-
-[[keyboard.bindings]]
-chars = "\u001BOC"
-key = "Right"
-mode = "AppCursor"
-
-[[keyboard.bindings]]
-chars = "\u001B[1;2A"
-key = "Up"
-mods = "Shift"
-
-[[keyboard.bindings]]
-chars = "\u001B[1;5A"
-key = "Up"
-mods = "Control"
-
-[[keyboard.bindings]]
-chars = "\u001B[1;3A"
-key = "Up"
-mods = "Alt"
-
-[[keyboard.bindings]]
-chars = "\u001B[A"
-key = "Up"
-mode = "~AppCursor"
-
-[[keyboard.bindings]]
-chars = "\u001BOA"
-key = "Up"
-mode = "AppCursor"
-
-[[keyboard.bindings]]
-chars = "\u001B[1;2B"
-key = "Down"
-mods = "Shift"
-
-[[keyboard.bindings]]
-chars = "\u001B[1;5B"
-key = "Down"
-mods = "Control"
-
-[[keyboard.bindings]]
-chars = "\u001B[1;3B"
-key = "Down"
-mods = "Alt"
-
-[[keyboard.bindings]]
-chars = "\u001B[B"
-key = "Down"
-mode = "~AppCursor"
-
-[[keyboard.bindings]]
-chars = "\u001BOB"
-key = "Down"
-mode = "AppCursor"
-
-[[keyboard.bindings]]
-chars = "\u001BOP"
-key = "F1"
-
-[[keyboard.bindings]]
-chars = "\u001BOQ"
-key = "F2"
-
-[[keyboard.bindings]]
-chars = "\u001BOR"
-key = "F3"
-
-[[keyboard.bindings]]
-chars = "\u001BOS"
-key = "F4"
-
-[[keyboard.bindings]]
-chars = "\u001B[15~"
-key = "F5"
-
-[[keyboard.bindings]]
-chars = "\u001B[17~"
-key = "F6"
-
-[[keyboard.bindings]]
-chars = "\u001B[18~"
-key = "F7"
-
-[[keyboard.bindings]]
-chars = "\u001B[19~"
-key = "F8"
-
-[[keyboard.bindings]]
-chars = "\u001B[20~"
-key = "F9"
-
-[[keyboard.bindings]]
-chars = "\u001B[21~"
-key = "F10"
-
-[[keyboard.bindings]]
-chars = "\u001B[23~"
-key = "F11"
-
-[[keyboard.bindings]]
-chars = "\u001B[24~"
-key = "F12"
-
-[[keyboard.bindings]]
-chars = "\u001B[1;2P"
-key = "F1"
-mods = "Shift"
-
-[[keyboard.bindings]]
-chars = "\u001B[1;2Q"
-key = "F2"
-mods = "Shift"
-
-[[keyboard.bindings]]
-chars = "\u001B[1;2R"
-key = "F3"
-mods = "Shift"
-
-[[keyboard.bindings]]
-chars = "\u001B[1;2S"
-key = "F4"
-mods = "Shift"
-
-[[keyboard.bindings]]
-chars = "\u001B[15;2~"
-key = "F5"
-mods = "Shift"
-
-[[keyboard.bindings]]
-chars = "\u001B[17;2~"
-key = "F6"
-mods = "Shift"
-
-[[keyboard.bindings]]
-chars = "\u001B[18;2~"
-key = "F7"
-mods = "Shift"
-
-[[keyboard.bindings]]
-chars = "\u001B[19;2~"
-key = "F8"
-mods = "Shift"
-
-[[keyboard.bindings]]
-chars = "\u001B[20;2~"
-key = "F9"
-mods = "Shift"
-
-[[keyboard.bindings]]
-chars = "\u001B[21;2~"
-key = "F10"
-mods = "Shift"
-
-[[keyboard.bindings]]
-chars = "\u001B[23;2~"
-key = "F11"
-mods = "Shift"
-
-[[keyboard.bindings]]
-chars = "\u001B[24;2~"
-key = "F12"
-mods = "Shift"
-
-[[keyboard.bindings]]
-chars = "\u001B[1;5P"
-key = "F1"
-mods = "Control"
-
-[[keyboard.bindings]]
-chars = "\u001B[1;5Q"
-key = "F2"
-mods = "Control"
-
-[[keyboard.bindings]]
-chars = "\u001B[1;5R"
-key = "F3"
-mods = "Control"
-
-[[keyboard.bindings]]
-chars = "\u001B[1;5S"
-key = "F4"
-mods = "Control"
-
-[[keyboard.bindings]]
-chars = "\u001B[15;5~"
-key = "F5"
-mods = "Control"
-
-[[keyboard.bindings]]
-chars = "\u001B[17;5~"
-key = "F6"
-mods = "Control"
-
-[[keyboard.bindings]]
-chars = "\u001B[18;5~"
-key = "F7"
-mods = "Control"
-
-[[keyboard.bindings]]
-chars = "\u001B[19;5~"
-key = "F8"
-mods = "Control"
-
-[[keyboard.bindings]]
-chars = "\u001B[20;5~"
-key = "F9"
-mods = "Control"
-
-[[keyboard.bindings]]
-chars = "\u001B[21;5~"
-key = "F10"
-mods = "Control"
-
-[[keyboard.bindings]]
-chars = "\u001B[23;5~"
-key = "F11"
-mods = "Control"
-
-[[keyboard.bindings]]
-chars = "\u001B[24;5~"
-key = "F12"
-mods = "Control"
-
-[[keyboard.bindings]]
-chars = "\u001B[1;6P"
-key = "F1"
-mods = "Alt"
-
-[[keyboard.bindings]]
-chars = "\u001B[1;6Q"
-key = "F2"
-mods = "Alt"
-
-[[keyboard.bindings]]
-chars = "\u001B[1;6R"
-key = "F3"
-mods = "Alt"
-
-[[keyboard.bindings]]
-chars = "\u001B[1;6S"
-key = "F4"
-mods = "Alt"
-
-[[keyboard.bindings]]
-chars = "\u001B[15;6~"
-key = "F5"
-mods = "Alt"
-
-[[keyboard.bindings]]
-chars = "\u001B[17;6~"
-key = "F6"
-mods = "Alt"
-
-[[keyboard.bindings]]
-chars = "\u001B[18;6~"
-key = "F7"
-mods = "Alt"
-
-[[keyboard.bindings]]
-chars = "\u001B[19;6~"
-key = "F8"
-mods = "Alt"
-
-[[keyboard.bindings]]
-chars = "\u001B[20;6~"
-key = "F9"
-mods = "Alt"
-
-[[keyboard.bindings]]
-chars = "\u001B[21;6~"
-key = "F10"
-mods = "Alt"
-
-[[keyboard.bindings]]
-chars = "\u001B[23;6~"
-key = "F11"
-mods = "Alt"
-
-[[keyboard.bindings]]
-chars = "\u001B[24;6~"
-key = "F12"
-mods = "Alt"
-
-[[keyboard.bindings]]
-chars = "\u001B[1;3P"
-key = "F1"
-mods = "Super"
-
-[[keyboard.bindings]]
-chars = "\u001B[1;3Q"
-key = "F2"
-mods = "Super"
-
-[[keyboard.bindings]]
-chars = "\u001B[1;3R"
-key = "F3"
-mods = "Super"
-
-[[keyboard.bindings]]
-chars = "\u001B[1;3S"
-key = "F4"
-mods = "Super"
-
-[[keyboard.bindings]]
-chars = "\u001B[15;3~"
-key = "F5"
-mods = "Super"
-
-[[keyboard.bindings]]
-chars = "\u001B[17;3~"
-key = "F6"
-mods = "Super"
-
-[[keyboard.bindings]]
-chars = "\u001B[18;3~"
-key = "F7"
-mods = "Super"
-
-[[keyboard.bindings]]
-chars = "\u001B[19;3~"
-key = "F8"
-mods = "Super"
-
-[[keyboard.bindings]]
-chars = "\u001B[20;3~"
-key = "F9"
-mods = "Super"
-
-[[keyboard.bindings]]
-chars = "\u001B[21;3~"
-key = "F10"
-mods = "Super"
-
-[[keyboard.bindings]]
-chars = "\u001B[23;3~"
-key = "F11"
-mods = "Super"
-
-[[keyboard.bindings]]
-chars = "\u001B[24;3~"
-key = "F12"
-mods = "Super"
-
-[[keyboard.bindings]]
-chars = """
-
-"""
-key = "NumpadEnter"
-
-[mouse]
-hide_when_typing = false
-
-[[mouse.bindings]]
-action = "PasteSelection"
-mouse = "Middle"
-
-[mouse.double_click]
-threshold = 300
-
-[mouse.triple_click]
-threshold = 300
-
-[scrolling]
-auto_scroll = false
-faux_multiplier = 3
-history = 100000
-multiplier = 3
-
-[selection]
-save_to_clipboard = false
-semantic_escape_chars = ",│`|:\"' ()[]{}<>"
-
-[shell]
-args = ["--login"]
-program = "/bin/zsh"
-
-[window]
-class = "Alacritty"
-decorations = "full"
-dynamic_padding = true
-dynamic_title = true
-opacity = 1.0
-startup_mode = "Maximized"
-
-[window.dimensions]
-columns = 0
-lines = 0
-
-[window.padding]
-x = 0
-y = 0
diff --git a/roles/programming/files/alacritty.yml b/roles/programming/files/alacritty.yml
deleted file mode 100644
index 85d9ff7..0000000
--- a/roles/programming/files/alacritty.yml
+++ /dev/null
@@ -1,632 +0,0 @@
-# Configuration for Alacritty, the GPU enhanced terminal emulator.
-
-# Any items in the `env` entry below will be added as
-# environment variables. Some entries may override variables
-# set by alacritty itself.
-env:
- # This value is used to set the `$TERM` environment variable for
- # each instance of Alacritty. If it is not present, alacritty will
- # check the local terminfo database and use `alacritty` if it is
- # available, otherwise `xterm-256color` is used.
- TERM: xterm-256color
-
-window:
- # Window dimensions (changes require restart)
- #
- # Specified in number of columns/lines, not pixels.
- # If both are `0`, this setting is ignored.
- dimensions:
- columns: 0
- lines: 0
-
- # Window position (changes require restart)
- #
- # Specified in number of pixels.
- # If the position is not set, the window manager will handle the placement.
- #position:
- # x: 0
- # y: 0
-
- # Window padding (changes require restart)
- #
- # Blank space added around the window in pixels. This padding is scaled
- # by DPI and the specified value is always added at both opposing sides.
- padding:
- x: 0
- y: 0
-
- # Spread additional padding evenly around the terminal content.
- dynamic_padding: true
- #
- # Allow terminal applications to change Alacritty's window title.
- dynamic_title: true
-
- # Window decorations
- #
- # Values for `decorations`:
- # - full: Borders and title bar
- # - none: Neither borders nor title bar
- #
- # Values for `decorations` (macOS only):
- # - transparent: Title bar, transparent background and title bar buttons
- # - buttonless: Title bar, transparent background, but no title bar buttons
- decorations: full
-
- # Startup Mode (changes require restart)
- #
- # Values for `startup_mode`:
- # - Windowed
- # - Maximized
- # - Fullscreen
- #
- # Values for `startup_mode` (macOS only):
- # - SimpleFullscreen
- startup_mode: Maximized
-
- # Window title
- #title: Alacritty
-
- # Window class (Linux only):
- class: Alacritty
- # Background opacity
- #
- # Window opacity as a floating point number from `0.0` to `1.0`.
- # The value `0.0` is completely transparent and `1.0` is opaque.
- opacity: 1.0
-
-scrolling:
- # Maximum number of lines in the scrollback buffer.
- # Specifying '0' will disable scrolling.
- history: 100000
-
- # Number of lines the viewport will move for every line scrolled when
- # scrollback is enabled (history > 0).
- multiplier: 3
-
- # Faux Scrolling
- #
- # The `faux_multiplier` setting controls the number of lines the terminal
- # should scroll when the alternate screen buffer is active. This is used
- # to allow mouse scrolling for applications like `man`.
- #
- # Specifying `0` will disable faux scrolling.
- faux_multiplier: 3
-
- # Scroll to the bottom when new text is written to the terminal.
- auto_scroll: false
-
-# Spaces per Tab (changes require restart)
-#
-# This setting defines the width of a tab in cells.
-#
-# Some applications, like Emacs, rely on knowing about the width of a tab.
-# To prevent unexpected behavior in these applications, it's also required to
-# change the `it` value in terminfo when altering this setting.
-# tabspaces: 8
-
-# Font configuration (changes require restart)
-font:
- # Normal (roman) font face
- #normal:
- # Font family
- #
- # Default:
- # - (macOS) Menlo
- # - (Linux) monospace
- # - (Windows) Consolas
- family: monospace
-
- # The `style` can be specified to pick a specific face.
- #style: Regular
-
- # Bold font face
- #bold:
- # Font family
- #
- # If the bold family is not specified, it will fall back to the
- # value specified for the normal font.
- #family: monospace
-
- # The `style` can be specified to pick a specific face.
- #style: Bold
-
- # Italic font face
- #italic:
- # Font family
- #
- # If the italic family is not specified, it will fall back to the
- # value specified for the normal font.
- #family: monospace
-
- # The `style` can be specified to pick a specific face.
- #style: Italic
-
- # Point size
- size: 8.0
-
- # Offset is the extra space around each character. `offset.y` can be thought of
- # as modifying the line spacing, and `offset.x` as modifying the letter spacing.
- offset:
- x: 0
- y: 0
-
- # Glyph offset determines the locations of the glyphs within their cells with
- # the default being at the bottom. Increasing `x` moves the glyph to the right,
- # increasing `y` moves the glyph upwards.
- glyph_offset:
- x: 0
- y: 0
-
- # Thin stroke font rendering (macOS only)
- #
- # Thin strokes are suitable for retina displays, but for non-retina screens
- # it is recommended to set `use_thin_strokes` to `false`
- #
- # macOS >= 10.14.x:
- #
- # If the font quality on non-retina display looks bad then set
- # `use_thin_strokes` to `true` and enable font smoothing by running the
- # following command:
- # `defaults write -g CGFontRenderingFontSmoothingDisabled -bool NO`
- #
- # This is a global setting and will require a log out or restart to take
- # effect.
- # use_thin_strokes: true
-
-# If `true`, bold text is drawn using the bright color variants.
-draw_bold_text_with_bright_colors: true
-
-# Colors (Tomorrow Night Bright)
-colors:
- # Default colors
- primary:
- background: "0x000000"
- foreground: "0xeaeaea"
-
- # Bright and dim foreground colors
- #
- # The dimmed foreground color is calculated automatically if it is not present.
- # If the bright foreground color is not set, or `draw_bold_text_with_bright_colors`
- # is `false`, the normal foreground color will be used.
- #dim_foreground: '0x9a9a9a'
- #bright_foreground: '0xffffff'
-
- # Cursor colors
- #
- # Colors which should be used to draw the terminal cursor. If these are unset,
- # the cursor color will be the inverse of the cell color.
- #cursor:
- # text: '0x000000'
- # cursor: '0xffffff'
-
- # Selection colors
- #
- # Colors which should be used to draw the selection area. If selection
- # background is unset, selection color will be the inverse of the cell colors.
- # If only text is unset the cell text color will remain the same.
- #selection:
- # text: '0xeaeaea'
- # background: '0x404040'
-
- # Normal colors
- normal:
- black: "0x000000"
- red: "0xd54e53"
- green: "0xb9ca4a"
- yellow: "0xe6c547"
- blue: "0x7aa6da"
- magenta: "0xc397d8"
- cyan: "0x70c0ba"
- white: "0xeaeaea"
-
- # Bright colors
- bright:
- black: "0x666666"
- red: "0xff3334"
- green: "0x9ec400"
- yellow: "0xe7c547"
- blue: "0x7aa6da"
- magenta: "0xb77ee0"
- cyan: "0x54ced6"
- white: "0xffffff"
-
- # Dim colors
- #
- # If the dim colors are not set, they will be calculated automatically based
- # on the `normal` colors.
- #dim:
- # black: '0x000000'
- # red: '0x8c3336'
- # green: '0x7a8530'
- # yellow: '0x97822e'
- # blue: '0x506d8f'
- # magenta: '0x80638e'
- # cyan: '0x497e7a'
- # white: '0x9a9a9a'
-
- # Indexed Colors
- #
- # The indexed colors include all colors from 16 to 256.
- # When these are not set, they're filled with sensible defaults.
- #
- # Example:
- # `- { index: 16, color: '0xff00ff' }`
- #
- indexed_colors: []
-
-# Visual Bell
-#
-# Any time the BEL code is received, Alacritty "rings" the visual bell. Once
-# rung, the terminal background will be set to white and transition back to the
-# default background color. You can control the rate of this transition by
-# setting the `duration` property (represented in milliseconds). You can also
-# configure the transition function by setting the `animation` property.
-#
-# Values for `animation`:
-# - Ease
-# - EaseOut
-# - EaseOutSine
-# - EaseOutQuad
-# - EaseOutCubic
-# - EaseOutQuart
-# - EaseOutQuint
-# - EaseOutExpo
-# - EaseOutCirc
-# - Linear
-#
-# Specifying a `duration` of `0` will disable the visual bell.
-bell:
- animation: EaseOutExpo
- duration: 0
- color: "0xffffff"
-
-# Mouse bindings
-#
-# Available fields:
-# - mouse
-# - action
-# - mods (optional)
-#
-# Values for `mouse`:
-# - Middle
-# - Left
-# - Right
-# - Numeric identifier such as `5`
-#
-# All available `mods` and `action` values are documented in the key binding
-# section.
-mouse_bindings:
- - { mouse: Middle, action: PasteSelection }
-
-mouse:
- # Click settings
- #
- # The `double_click` and `triple_click` settings control the time
- # alacritty should wait for accepting multiple clicks as one double
- # or triple click.
- double_click: { threshold: 300 }
- triple_click: { threshold: 300 }
-
- # If this is `true`, the cursor is temporarily hidden when typing.
- hide_when_typing: false
-
-hints:
- enabled:
- - regex:
- "(ipfs:|ipns:|magnet:|mailto:|gemini:|gopher:|https:|http:|news:|file:|git:|ssh:|ftp:)\
- [^\u0000-\u001F\u007F-\u009F<>\"\\s{-}\\^⟨⟩`]+"
- command: xdg-open
- post_processing: true
- mouse:
- enabled: true
- mods: Shift
- binding:
- key: U
- mods: Control|Shift
-
-selection:
- semantic_escape_chars: ',│`|:"'' ()[]{}<>'
-
- # When set to `true`, selected text will be copied to the primary clipboard.
- save_to_clipboard: false
-
-cursor:
- # Cursor style
- #
- # Values for `style`:
- # - ▇ Block
- # - _ Underline
- # - | Beam
- style: Block
-
- # If this is `true`, the cursor will be rendered as a hollow box when the
- # window is not focused.
- unfocused_hollow: true
-
-# Live config reload (changes require restart)
-live_config_reload: true
-
-# Shell
-#
-# You can set `shell.program` to the path of your favorite shell, e.g. `/bin/fish`.
-# Entries in `shell.args` are passed unmodified as arguments to the shell.
-#
-# Default:
-# - (macOS) /bin/bash --login
-# - (Linux) user login shell
-# - (Windows) powershell
-shell:
- # program: /usr/bin/zsh
- program: /bin/zsh
- args:
- - --login
-
-# Startup directory
-#
-# Directory the shell is started in. If this is unset, or `None`, the working
-# directory of the parent process will be used.
-working_directory: None
-
-# Windows 10 ConPTY backend (Windows only)
-#
-# This will enable better color support and may resolve other issues,
-# however this API and its implementation is still young and so is
-# disabled by default, as stability may not be as good as the winpty
-# backend.
-#
-# Alacritty will fall back to the WinPTY automatically if the ConPTY
-# backend cannot be initialized.
-enable_experimental_conpty_backend: false
-
-# Send ESC (\x1b) before characters when alt is pressed.
-# alt_send_esc: true
-
-debug:
- # Display the time it takes to redraw each frame.
- render_timer: false
-
- # Keep the log file after quitting Alacritty.
- persistent_logging: true
-
- # Log level
- #
- # Values for `log_level`:
- # - None
- # - Error
- # - Warn
- # - Info
- # - Debug
- # - Trace
- log_level: Warn
-
- # Print all received window events.
- print_events: false
-
- # Record all characters and escape sequences as test data.
- ref_test: false
-
-# Key bindings
-#
-# Key bindings are specified as a list of objects. Each binding will specify a
-# key and modifiers required to trigger it, terminal modes where the binding is
-# applicable, and what should be done when the key binding fires. It can either
-# send a byte sequence to the running application (`chars`), execute a
-# predefined action (`action`) or fork and execute a specified command plus
-# arguments (`command`).
-#
-# Bindings are always filled by default, but will be replaced when a new binding
-# with the same triggers is defined. To unset a default binding, it can be
-# mapped to the `None` action.
-#
-# Example:
-# `- { key: V, mods: Control|Shift, action: Paste }`
-#
-# Available fields:
-# - key
-# - mods (optional)
-# - chars | action | command (exactly one required)
-# - mode (optional)
-#
-# Values for `key`:
-# - `A` -> `Z`
-# - `F1` -> `F12`
-# - `Key1` -> `Key0`
-#
-# A full list with available key codes can be found here:
-# https://docs.rs/glutin/*/glutin/enum.VirtualKeyCode.html#variants
-#
-# Instead of using the name of the keys, the `key` field also supports using
-# the scancode of the desired key. Scancodes have to be specified as a
-# decimal number.
-# This command will allow you to display the hex scancodes for certain keys:
-# `showkey --scancodes`
-#
-# Values for `mods`:
-# - Command
-# - Control
-# - Option
-# - Super
-# - Shift
-# - Alt
-#
-# Multiple `mods` can be combined using `|` like this: `mods: Control|Shift`.
-# Whitespace and capitalization is relevant and must match the example.
-#
-# Values for `chars`:
-# The `chars` field writes the specified string to the terminal. This makes
-# it possible to pass escape sequences.
-# To find escape codes for bindings like `PageUp` ("\x1b[5~"), you can run
-# the command `showkey -a` outside of tmux.
-# Note that applications use terminfo to map escape sequences back to
-# keys. It is therefore required to update the terminfo when
-# changing an escape sequence.
-#
-# Values for `action`:
-# - Paste
-# - PasteSelection
-# - Copy
-# - IncreaseFontSize
-# - DecreaseFontSize
-# - ResetFontSize
-# - ScrollPageUp
-# - ScrollPageDown
-# - ScrollLineUp
-# - ScrollLineDown
-# - ScrollToTop
-# - ScrollToBottom
-# - ClearHistory
-# - Hide
-# - Quit
-# - ClearLogNotice
-# - SpawnNewInstance
-# - ToggleFullscreen
-# - None
-#
-# Values for `action` (macOS only):
-# - ToggleSimpleFullscreen: Enters fullscreen without occupying another space
-#
-# Values for `command`:
-# The `command` field must be a map containing a `program` string and
-# an `args` array of command line parameter strings.
-#
-# Example:
-# `command: { program: "alacritty", args: ["-e", "vttest"] }`
-#
-# Values for `mode`:
-# - ~AppCursor
-# - AppCursor
-# - ~AppKeypad
-# - AppKeypad
-key_bindings:
- # (Windows/Linux only)
- #- { key: V, mods: Control|Shift, action: Paste }
- #- { key: C, mods: Control|Shift, action: Copy }
- #- { key: Insert, mods: Shift, action: PasteSelection }
- #- { key: Key0, mods: Control, action: ResetFontSize }
- #- { key: Equals, mods: Control, action: IncreaseFontSize }
- #- { key: Add, mods: Control, action: IncreaseFontSize }
- #- { key: Subtract, mods: Control, action: DecreaseFontSize }
- #- { key: Minus, mods: Control, action: DecreaseFontSize }
- #- { key: Return, mods: Alt, action: ToggleFullscreen }
-
- # (macOS only)
- #- { key: Key0, mods: Command, action: ResetFontSize }
- #- { key: Equals, mods: Command, action: IncreaseFontSize }
- #- { key: Add, mods: Command, action: IncreaseFontSize }
- #- { key: Minus, mods: Command, action: DecreaseFontSize }
- #- { key: K, mods: Command, action: ClearHistory }
- #- { key: K, mods: Command, chars: "\x0c" }
- #- { key: V, mods: Command, action: Paste }
- #- { key: C, mods: Command, action: Copy }
- #- { key: H, mods: Command, action: Hide }
- #- { key: Q, mods: Command, action: Quit }
- #- { key: W, mods: Command, action: Quit }
- #- { key: F, mods: Command|Control, action: ToggleFullscreen }
-
- - { key: Paste, action: Paste }
- - { key: Copy, action: Copy }
- - { key: L, mods: Control, action: ClearLogNotice }
- - { key: L, mods: Control, chars: "\x0c" }
- - { key: Home, mods: Alt, chars: "\x1b[1;3H" }
- - { key: Home, chars: "\x1bOH", mode: AppCursor }
- - { key: Home, chars: "\x1b[H", mode: ~AppCursor }
- - { key: End, mods: Alt, chars: "\x1b[1;3F" }
- - { key: End, chars: "\x1bOF", mode: AppCursor }
- - { key: End, chars: "\x1b[F", mode: ~AppCursor }
- - { key: PageUp, mods: Shift, action: ScrollPageUp, mode: ~Alt }
- - { key: PageUp, mods: Shift, chars: "\x1b[5;2~", mode: Alt }
- - { key: PageUp, mods: Control, chars: "\x1b[5;5~" }
- - { key: PageUp, mods: Alt, chars: "\x1b[5;3~" }
- - { key: PageUp, chars: "\x1b[5~" }
- - { key: PageDown, mods: Shift, action: ScrollPageDown, mode: ~Alt }
- - { key: PageDown, mods: Shift, chars: "\x1b[6;2~", mode: Alt }
- - { key: PageDown, mods: Control, chars: "\x1b[6;5~" }
- - { key: PageDown, mods: Alt, chars: "\x1b[6;3~" }
- - { key: PageDown, chars: "\x1b[6~" }
- - { key: Tab, mods: Shift, chars: "\x1b[Z" }
- - { key: Back, chars: "\x7f" }
- - { key: Back, mods: Shift, chars: "\x7f" }
- - { key: Back, mods: Alt, chars: "\x1b\x7f" }
- - { key: Insert, chars: "\x1b[2~" }
- - { key: Delete, chars: "\x1b[3~" }
- - { key: Left, mods: Shift, chars: "\x1b[1;2D" }
- - { key: Left, mods: Control, chars: "\x1b[1;5D" }
- - { key: Left, mods: Alt, chars: "\x1b[1;3D" }
- - { key: Left, chars: "\x1b[D", mode: ~AppCursor }
- - { key: Left, chars: "\x1bOD", mode: AppCursor }
- - { key: Right, mods: Shift, chars: "\x1b[1;2C" }
- - { key: Right, mods: Control, chars: "\x1b[1;5C" }
- - { key: Right, mods: Alt, chars: "\x1b[1;3C" }
- - { key: Right, chars: "\x1b[C", mode: ~AppCursor }
- - { key: Right, chars: "\x1bOC", mode: AppCursor }
- - { key: Up, mods: Shift, chars: "\x1b[1;2A" }
- - { key: Up, mods: Control, chars: "\x1b[1;5A" }
- - { key: Up, mods: Alt, chars: "\x1b[1;3A" }
- - { key: Up, chars: "\x1b[A", mode: ~AppCursor }
- - { key: Up, chars: "\x1bOA", mode: AppCursor }
- - { key: Down, mods: Shift, chars: "\x1b[1;2B" }
- - { key: Down, mods: Control, chars: "\x1b[1;5B" }
- - { key: Down, mods: Alt, chars: "\x1b[1;3B" }
- - { key: Down, chars: "\x1b[B", mode: ~AppCursor }
- - { key: Down, chars: "\x1bOB", mode: AppCursor }
- - { key: F1, chars: "\x1bOP" }
- - { key: F2, chars: "\x1bOQ" }
- - { key: F3, chars: "\x1bOR" }
- - { key: F4, chars: "\x1bOS" }
- - { key: F5, chars: "\x1b[15~" }
- - { key: F6, chars: "\x1b[17~" }
- - { key: F7, chars: "\x1b[18~" }
- - { key: F8, chars: "\x1b[19~" }
- - { key: F9, chars: "\x1b[20~" }
- - { key: F10, chars: "\x1b[21~" }
- - { key: F11, chars: "\x1b[23~" }
- - { key: F12, chars: "\x1b[24~" }
- - { key: F1, mods: Shift, chars: "\x1b[1;2P" }
- - { key: F2, mods: Shift, chars: "\x1b[1;2Q" }
- - { key: F3, mods: Shift, chars: "\x1b[1;2R" }
- - { key: F4, mods: Shift, chars: "\x1b[1;2S" }
- - { key: F5, mods: Shift, chars: "\x1b[15;2~" }
- - { key: F6, mods: Shift, chars: "\x1b[17;2~" }
- - { key: F7, mods: Shift, chars: "\x1b[18;2~" }
- - { key: F8, mods: Shift, chars: "\x1b[19;2~" }
- - { key: F9, mods: Shift, chars: "\x1b[20;2~" }
- - { key: F10, mods: Shift, chars: "\x1b[21;2~" }
- - { key: F11, mods: Shift, chars: "\x1b[23;2~" }
- - { key: F12, mods: Shift, chars: "\x1b[24;2~" }
- - { key: F1, mods: Control, chars: "\x1b[1;5P" }
- - { key: F2, mods: Control, chars: "\x1b[1;5Q" }
- - { key: F3, mods: Control, chars: "\x1b[1;5R" }
- - { key: F4, mods: Control, chars: "\x1b[1;5S" }
- - { key: F5, mods: Control, chars: "\x1b[15;5~" }
- - { key: F6, mods: Control, chars: "\x1b[17;5~" }
- - { key: F7, mods: Control, chars: "\x1b[18;5~" }
- - { key: F8, mods: Control, chars: "\x1b[19;5~" }
- - { key: F9, mods: Control, chars: "\x1b[20;5~" }
- - { key: F10, mods: Control, chars: "\x1b[21;5~" }
- - { key: F11, mods: Control, chars: "\x1b[23;5~" }
- - { key: F12, mods: Control, chars: "\x1b[24;5~" }
- - { key: F1, mods: Alt, chars: "\x1b[1;6P" }
- - { key: F2, mods: Alt, chars: "\x1b[1;6Q" }
- - { key: F3, mods: Alt, chars: "\x1b[1;6R" }
- - { key: F4, mods: Alt, chars: "\x1b[1;6S" }
- - { key: F5, mods: Alt, chars: "\x1b[15;6~" }
- - { key: F6, mods: Alt, chars: "\x1b[17;6~" }
- - { key: F7, mods: Alt, chars: "\x1b[18;6~" }
- - { key: F8, mods: Alt, chars: "\x1b[19;6~" }
- - { key: F9, mods: Alt, chars: "\x1b[20;6~" }
- - { key: F10, mods: Alt, chars: "\x1b[21;6~" }
- - { key: F11, mods: Alt, chars: "\x1b[23;6~" }
- - { key: F12, mods: Alt, chars: "\x1b[24;6~" }
- - { key: F1, mods: Super, chars: "\x1b[1;3P" }
- - { key: F2, mods: Super, chars: "\x1b[1;3Q" }
- - { key: F3, mods: Super, chars: "\x1b[1;3R" }
- - { key: F4, mods: Super, chars: "\x1b[1;3S" }
- - { key: F5, mods: Super, chars: "\x1b[15;3~" }
- - { key: F6, mods: Super, chars: "\x1b[17;3~" }
- - { key: F7, mods: Super, chars: "\x1b[18;3~" }
- - { key: F8, mods: Super, chars: "\x1b[19;3~" }
- - { key: F9, mods: Super, chars: "\x1b[20;3~" }
- - { key: F10, mods: Super, chars: "\x1b[21;3~" }
- - { key: F11, mods: Super, chars: "\x1b[23;3~" }
- - { key: F12, mods: Super, chars: "\x1b[24;3~" }
- - { key: NumpadEnter, chars: "\n" }
diff --git a/roles/programming/files/kitty.conf b/roles/programming/files/kitty.conf
new file mode 100644
index 0000000..cce8318
--- /dev/null
+++ b/roles/programming/files/kitty.conf
@@ -0,0 +1 @@
+enable_audio_bell no
diff --git a/roles/programming/tasks/arch.yml b/roles/programming/tasks/arch.yml
index e69de29..6ef0e13 100644
--- a/roles/programming/tasks/arch.yml
+++ b/roles/programming/tasks/arch.yml
@@ -0,0 +1,4 @@
+- name: noop
+ debug:
+ msg: "noop"
+ when: false
diff --git a/roles/programming/tasks/debian.yml b/roles/programming/tasks/debian.yml
index c5fcbf9..904f280 100644
--- a/roles/programming/tasks/debian.yml
+++ b/roles/programming/tasks/debian.yml
@@ -1,13 +1,12 @@
-- name: add alacritty ppa
- command: "add-apt-repository ppa:aslatter/ppa -y"
- become: true
- become_method: sudo
- args:
- creates: "/etc/apt/sources.list.d/aslatter-ubuntu-ppa-impish.list"
-
-- name: Install alacritty dependencies
- apt:
- name:
+- name: Check which compilation packages are missing
+ command: "dpkg-query -W -f='${Package} installed\\n' {{ comp_packages | join(' ') }}"
+ register: comp_check
+ ignore_errors: true
+ changed_when: false
+ become: false
+ check_mode: no
+ vars:
+ comp_packages: &comp_pkgs
- cmake
- pkg-config
- libfreetype6-dev
@@ -15,12 +14,41 @@
- libxcb-xfixes0-dev
- python3
- libssl-dev
- - alacritty
- lld
+
+- name: Set missing compilation packages fact
+ set_fact:
+ missing_comp_packages: "{{ comp_packages | difference((comp_check.stdout_lines | default([])) | map('regex_replace', ' installed$', '') | list) }}"
+ vars:
+ comp_packages: *comp_pkgs
+
+- name: Check if go snap is missing
+ command: "snap list go"
+ register: go_snap_check
+ ignore_errors: true
+ changed_when: false
+ become: false
+ check_mode: no
+
+- name: Set missing go snap fact
+ set_fact:
+ go_snap_missing: "{{ go_snap_check.rc is defined and go_snap_check.rc != 0 }}"
+
+- name: Report missing programming components (Check Mode Only)
+ debug:
+ msg:
+ - "Missing compilation packages (would be installed): {{ missing_comp_packages }}"
+ - "go snap is {{ 'missing and would be installed' if go_snap_missing else 'already installed' }}"
+ when: ansible_check_mode
+
+- name: Install compilation dependencies
+ apt:
+ name: "{{ missing_comp_packages }}"
state: present
force_apt_get: yes
become: true
become_method: sudo
+ when: not ansible_check_mode and missing_comp_packages | length > 0
- name: Install go
snap:
@@ -30,3 +58,4 @@
classic: true
become: true
become_method: sudo
+ when: not ansible_check_mode and go_snap_missing
diff --git a/roles/programming/tasks/main.yml b/roles/programming/tasks/main.yml
index 2cc1eed..a3f30a1 100644
--- a/roles/programming/tasks/main.yml
+++ b/roles/programming/tasks/main.yml
@@ -13,23 +13,23 @@
args:
creates: "{{ dotfiles_user_home }}/.cargo/bin/rustup"
-- name: Install fun crates
+- name: Install cargo-binstall
command: "{{ dotfiles_user_home }}/.cargo/bin/cargo install {{ item.name }}"
args:
creates: "{{ dotfiles_user_home }}/.cargo/bin/{{ item.exe }}"
with_items:
- name: cargo-binstall
exe: cargo-binstall
- - name: cargo-edit
- exe: cargo-add
- - name: sccache
- exe: sccache
- name: Install fun crates
- command: "{{ dotfiles_user_home }}/.cargo/bin/cargo binstall {{ item.name }}"
+ command: "{{ dotfiles_user_home }}/.cargo/bin/cargo-binstall -y {{ item.name }}"
args:
creates: "{{ dotfiles_user_home }}/.cargo/bin/{{ item.exe }}"
with_items:
+ - name: cargo-edit
+ exe: cargo-add
+ - name: sccache
+ exe: sccache
- name: eza
exe: eza
- name: bat
@@ -38,18 +38,17 @@
exe: rg
- name: zoxide
exe: zoxide
- - name: zellij
- exe: zellij
+ when: not ansible_check_mode
-- name: Alacritty config dir
+- name: Kitty config dir
file:
- path: "{{ dotfiles_user_home }}/.config/alacritty"
+ path: "{{ xdg_config_home }}/kitty"
state: directory
-- name: Alacritty config
+- name: Kitty config
file:
- src: "{{ dotfiles_home }}/roles/programming/files/alacritty.toml"
- dest: "{{ dotfiles_user_home }}/.config/alacritty/alacritty.toml"
+ src: "{{ dotfiles_home }}/roles/programming/files/kitty.conf"
+ dest: "{{ xdg_config_home }}/kitty/kitty.conf"
state: link
force: true
diff --git a/roles/sway/files/sway/config b/roles/sway/files/sway/config
deleted file mode 100644
index e6b2925..0000000
--- a/roles/sway/files/sway/config
+++ /dev/null
@@ -1,293 +0,0 @@
-### Variables
-#
-# Logo key. Use Mod1 for Alt.
-set $mod Mod4
-
-#" Your preferred terminal emulator
-set $term alacritty
-
-# Your preferred application launcher
-# Note: it's recommended that you pass the final command to sway
-set $uifont "Ubuntu 14"
-set $highlight #3daee9
-set $prompt #18b218
-set $menu exec --no-startup-id rofi -show run -m -1
-set $wallpaper ~/Pictures/DzNT32SVAAU2o1D.jpg
-set $lock swaylock -f --screenshots --effect-blur 15x10 --fade-in 0.5 --effect-greyscale
-set $gnome-schema org.gnome.desktop.interface
-
-set $bg-color #333333
-set $inactive-bg-color #333333
-set $text-color #f3f4f5
-set $inactive-text-color #676E7D
-set $urgent-bg-color #E53935
-set $focus-text-color #87CEEB
-
-### Needed for xdg-desktop-portal-kde
-# exec dbus-update-activation-environment --systemd --all
-exec systemctl --user import-environment DISPLAY WAYLAND_DISPLAY SWAYSOCK
-exec dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=sway
-
-exec /usr/lib/xdg-desktop-portal --replace
-exec mako
-exec nm-applet --indicator
-exec 1password
-exec dropbox
-
-### Output configuration
-#
-# Default wallpaper (more resolutions are available in /usr/share/backgrounds/sway/)
-output * bg /usr/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill
-#
-# Example configuration:
-#
-# output HDMI-A-1 resolution 1920x1080 position 1920,0
-#
-# You can get the names of your outputs by running: swaymsg -t get_outputs
- # output HDMI-A-2 resolution 2560x1080 position 0,0 background $wallpaper fill
- # output DVI-D-1 resolution 1920x1080 position 2560,0 background $wallpaper fill
-
-### Idle configuration
-#
-# Example configuration:
-#
-exec swayidle -w \
- timeout 300 'swaylock -f --screenshots --effect-blur 15x10 --fade-in 0.5 --effect-greyscale' \
- timeout 600 'swaymsg "output * dpms off"' \
- resume 'swaymsg "output * dpms on"' \
- before-sleep 'swaylock -f --screenshots --effect-blur 15x10 --fade-in 0.5 --effect-greyscale'
- # lock 'swaylock -f --screenshots --effect-blur 15x10 --fade-in 0.5 --effect-greyscale'
-#
-# This will lock your screen after 300 seconds of inactivity, then turn off
-# your displays after another 300 seconds, and turn your screens back on when
-# resumed. It will also lock your screen before your computer goes to sleep.
-
-### Input configuration
-#
-# Example configuration:
-#
-input "type:touchpad" {
- dwt enabled
- tap enabled
- natural_scroll enabled
- middle_emulation enabled
-}
-#
-# You can get the names of your inputs by running: swaymsg -t get_inputs
-# Read `man 5 sway-input` for more information about this section.
- # input "2385:5815:Kingston_HyperX_Alloy_FPS_Mechanical_Gaming_Keyboard" {
- # xkb_layout hr(us)
- # }
-
-### Key bindings
-#
-# Basics:
-#
- # start a terminal
- bindsym $mod+Return exec $term
-
- # kill focused window
- bindsym $mod+Shift+c kill
- # bindsym Mod1+F4 kill
-
- # start your launcher
- bindsym $mod+r $menu
- #bindcode 133 exec $menu
-
- bindsym $mod+d exec makoctl dismiss -a
-
- # Drag floating windows by holding down $mod and left mouse button.
- # Resize them with right mouse button + $mod.
- # Despite the name, also works for non-floating windows.
- # Change normal to inverse to use left mouse button for resizing and right
- # mouse button for dragging.
- floating_modifier $mod normal
-
- # reload the configuration file
- bindsym $mod+q reload
-
- # exit sway (logs you out of your Wayland session)
- bindsym $mod+Shift+q exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit'
- bindsym Control+Mod1+Backspace exec swaymsg exit
-
- for_window [window_role="pop-up"] floating enable
- for_window [window_role="bubble"] floating enable
- for_window [window_role="task_dialog"] floating enable
- for_window [window_role="Preferences"] floating enable
- for_window [window_type="dialog"] floating enable
- for_window [window_type="menu"] floating enable
- for_window [window_role="About"] floating enable
- for_window [class="xdg-desktop-portal-kde"] floating enable
- for_window [class="ksysguard"] floating enable
- for_window [class="ksysguard"] sticky enable
- #for_window [app_id="mpv"] layout tabbed
- for_window [class="Wine"] floating enable
- for_window [app_id="lutris"] floating enable
-
- # bindsym $mod+F12 exec shutdown now
- bindsym Mod4+Shift+z exec $lock
- bindsym Control+Mod1+Delete exec ksysguard
- # bindsym $mod+F1 exec dolphin
- # bindsym $mod+F2 exec cantata
- # bindsym $mod+F3 exec mpv --player-operation-mode=pseudo-gui
- # bindsym $mod+F4 exec firefox
- # bindsym $mod+F5 exec kate
- # bindsym $mod+F6 exec lutris
- # bindsym $mod+F7 exec notify-send $(weather)
- # bindsym $mod+F8 exec pkill kmousetool || kmousetool
- bindsym $mod+shift+F4 exec firefox --private-window
- bindsym Print exec grim -o $(swaymsg -t get_outputs | jq -r '.[] | select(.focused) | .name') $(xdg-user-dir)/Pictures/Screenshot_$(date +'%Y-%m-%d-%H%M%S.png')
- bindsym Alt+Print exec grim $(xdg-user-dir)/Pictures/Screenshot_$(date +'%Y-%m-%d-%H%M%S.png')
- bindsym Control+Print exec grim -g "$(slurp)" $(xdg-user-dir)/Pictures/Screenshot_$(date +'%Y-%m-%d-%H%M%S.png')
- bindsym Shift+Print exec grim -g "$(slurp)" - | wl-copy
- bindsym $mod+tab workspace back_and_forth
-
-#
-# Multimedia keys
-#
-
- # Pulse Audio controls
- bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume 0 +5% #increase sound volume
- bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume 0 -5% #decrease sound volume
- bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute 0 toggle # mute sound
- # Media player controls
- bindsym XF86AudioPlay exec playerctl play-pause
- bindsym XF86AudioNext exec playerctl next
- bindsym XF86AudioPrev exec playerctl previous
-
- bindsym XF86MonBrightnessUp exec light -A 5 # increase screen brightness
- bindsym XF86MonBrightnessDown exec light -U 5 # decrease screen brightness
-#
-# Moving around:
-#
- # Move your focus around use $mod+[up|down|left|right]
- bindsym $mod+Left focus left
- bindsym $mod+h focus left
- bindsym $mod+Down focus down
- bindsym $mod+j focus down
- bindsym $mod+Up focus up
- bindsym $mod+k focus up
- bindsym $mod+Right focus right
- bindsym $mod+l focus right
-
- # _move_ the focused window with the same, but add Shift with arrow keys
- bindsym $mod+Shift+Left move left
- bindsym $mod+Shift+h move left
- bindsym $mod+Shift+Down move down
- bindsym $mod+Shift+j move down
- bindsym $mod+Shift+Up move up
- bindsym $mod+Shift+k move up
- bindsym $mod+Shift+Right move right
- bindsym $mod+Shift+l move right
-#
-# Workspaces:
-#
- # switch to workspace
- bindsym $mod+1 workspace 1
- bindsym $mod+2 workspace 2
- bindsym $mod+3 workspace 3
- bindsym $mod+4 workspace 4
- bindsym $mod+5 workspace 5
- bindsym $mod+6 workspace 6
- bindsym $mod+7 workspace 7
- bindsym $mod+8 workspace 8
- bindsym $mod+9 workspace 9
- bindsym $mod+0 workspace 10
- # move focused container to workspace
- bindsym $mod+Shift+1 move container to workspace 1
- bindsym $mod+Shift+2 move container to workspace 2
- bindsym $mod+Shift+3 move container to workspace 3
- bindsym $mod+Shift+4 move container to workspace 4
- bindsym $mod+Shift+5 move container to workspace 5
- bindsym $mod+Shift+6 move container to workspace 6
- bindsym $mod+Shift+7 move container to workspace 7
- bindsym $mod+Shift+8 move container to workspace 8
- bindsym $mod+Shift+9 move container to workspace 9
- bindsym $mod+Shift+0 move container to workspace 10
- # Note: workspaces can have any name you want, not just numbers.
- # We just use 1-10 as the default.
-#
-# Layout stuff:
-#
- # You can "split" the current object of your focus with
- # $mod+b or $mod+v, for horizontal and vertical splits
- # respectively.
- bindsym $mod+b splith
- bindsym $mod+v splitv
-
- # Switch the current container between different layout styles
- bindsym $mod+s layout stacking
- bindsym $mod+w layout tabbed
- bindsym $mod+e layout toggle split
-
- # Make the current focus fullscreen
- bindsym F11 fullscreen
- bindsym $mod+f fullscreen
-
- # Toggle the current focus between tiling and floating mode
- bindsym $mod+space floating toggle
-
- # Swap focus between the tiling area and the floating area
- bindsym $mod+Shift+space focus mode_toggle
-
- # move focus to the parent container
- bindsym $mod+a focus parent
-#
-# Scratchpad:
-#
- # Sway has a "scratchpad", which is a bag of holding for HHHHows.
- # You can send windows there and get them back later.
-
- # Move the currently focused window to the scratchpad
- bindsym $mod+Shift+minus move scratchpad
-
- # Show the next scratchpad window or hide the focused scratchpad window.
- # If there are multiple scratchpad windows, this command cycles through them.
- bindsym $mod+minus scratchpad show
-#
-# Resizing containers:
-#
-mode "resize" {
- # left will shrink the containers width
- # right will grow the containers width
- # up will shrink the containers height
- # down will grow the containers height
-
- bindsym Left resize shrink width 10px
- bindsym h resize shrink width 10px
- bindsym Down resize grow height 10px
- bindsym j resize grow height 10px
- bindsym Up resize shrink height 10px
- bindsym k resize shrink height 10px
- bindsym Right resize grow width 10px
- bindsym l resize grow width 10px
-
- # return to default mode
- bindsym Return mode "default"
- bindsym Escape mode "default"
-}
-bindsym $mod+Shift+r mode "resize"
-#
-# Status Bar:
-#
-# Read `man 5 sway-bar` for more information about this section.
-bar {
- swaybar_command waybar
- workspace_buttons yes
-}
-#
-# Titlebars
-#
-default_border pixel
-default_floating_border pixel
-hide_edge_borders smart
-#
-# Colors #93cee9
-#
-# class border backgr. text indicator child_border
- client.focused #4c7899 #285577 #ffffff $highlight $highlight
- client.focused_inactive #333333 #5f676a #ffffff #484e50 #5f676a
- client.unfocused #333333 #222222 #888888 #292d2e #222222
- client.urgent #2f343a #900000 #ffffff #900000 #900000
-
-include /etc/sway/config.d/*
diff --git a/roles/sway/files/waybar/config b/roles/sway/files/waybar/config
deleted file mode 100644
index c764fa1..0000000
--- a/roles/sway/files/waybar/config
+++ /dev/null
@@ -1,158 +0,0 @@
-{
- // "layer": "top", // Waybar at top layer
- // "position": "bottom", // Waybar position (top|bottom|left|right)
- // "height": 25, // Waybar height (to be removed for auto height)
- // "width": 1280, // Waybar width
- "spacing": 4, // Gaps between modules (4px)
- // Choose the order of the modules
- "modules-left": ["sway/workspaces", "sway/mode"],
- "modules-center": ["sway/window"],
- "modules-right": [
- "idle_inhibitor",
- "pulseaudio",
- "network",
- "cpu",
- "memory",
- "backlight",
- "keyboard-state",
- "sway/language",
- "battery",
- "battery#bat2",
- "clock",
- "tray"
- ],
- // Modules configuration
- "sway/workspaces": {
- "disable-scroll": true,
- "all-outputs": true,
- "format": "{name}: {icon}",
- "format-icons": {
- "1": "",
- "2": "",
- "3": "",
- "4": "",
- "5": "",
- "urgent": "",
- "focused": "",
- "default": ""
- }
- },
- "keyboard-state": {
- "numlock": true,
- "capslock": true,
- "format": "{name} {icon}",
- "format-icons": {
- "locked": "",
- "unlocked": ""
- }
- },
- "sway/mode": {
- "format": "{}"
- },
- "mpd": {
- "format": "{stateIcon} {consumeIcon}{randomIcon}{repeatIcon}{singleIcon}{artist} - {album} - {title} ({elapsedTime:%M:%S}/{totalTime:%M:%S}) ⸨{songPosition}|{queueLength}⸩ {volume}% ",
- "format-disconnected": "Disconnected ",
- "format-stopped": "{consumeIcon}{randomIcon}{repeatIcon}{singleIcon}Stopped ",
- "unknown-tag": "N/A",
- "interval": 2,
- "consume-icons": {
- "on": " "
- },
- "random-icons": {
- "off": " ",
- "on": " "
- },
- "repeat-icons": {
- "on": " "
- },
- "single-icons": {
- "on": "1 "
- },
- "state-icons": {
- "paused": "",
- "playing": ""
- },
- "tooltip-format": "MPD (connected)",
- "tooltip-format-disconnected": "MPD (disconnected)"
- },
- "idle_inhibitor": {
- "format": "{icon}",
- "format-icons": {
- "activated": "",
- "deactivated": ""
- }
- },
- "tray": {
- // "icon-size": 21,
- "spacing": 10
- },
- "clock": {
- // "timezone": "America/New_York",
- "tooltip-format": "{:%Y %B}\n{calendar}",
- "format-alt": "{:%Y-%m-%d}"
- },
- "cpu": {
- "format": "{usage}% ⏲",
- "tooltip": false
- },
- "memory": {
- "format": "{}% "
- },
- "temperature": {
- // "thermal-zone": 2,
- // "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input",
- "critical-threshold": 80,
- // "format-critical": "{temperatureC}°C {icon}",
- "format": "{temperatureC}°C {icon}",
- "format-icons": ["", "", ""]
- },
- "backlight": {
- // "device": "acpi_video1",
- "format": "{percent}% {icon}",
- "format-icons": ["", ""]
- },
- "battery": {
- "states": {
- "good": 95,
- "warning": 30,
- "critical": 15
- },
- "format": "{capacity}% {icon}",
- "format-charging": "{capacity}% ⚡️",
- "format-plugged": "{capacity}% ",
- "format-alt": "{time} {icon}",
- // "format-good": "", // An empty format will hide the module
- // "format-full": "",
- "format-icons": ["", "", "", "", ""]
- },
- "battery#bat2": {
- "bat": "BAT2"
- },
- "network": {
- "format-wifi": "{essid} ({signalStrength}%) ",
- "format-ethernet": "{ipaddr}/{cidr} ",
- "tooltip-format": "{ifname} via {gwaddr} ",
- "format-linked": "{ifname} (No IP) ",
- "format-disconnected": "Disconnected ⚠",
- "format-alt": "{ifname}: {ipaddr}/{cidr}"
- },
- "pulseaudio": {
- // "scroll-step": 1, // %, can be a float
- "format": "{volume}% {icon} {format_source}",
- "format-bluetooth": "{volume}% {icon} {format_source}",
- "format-bluetooth-muted": " {icon} {format_source}",
- "format-muted": " {format_source}",
- "format-source": "{volume}% ",
- "format-source-muted": "",
- "format-icons": {
- "headphone": "",
- "hands-free": "",
- "headset": "",
- "phone": "",
- "portable": "",
- "car": "",
- "default": ["", "", ""]
- },
- "on-click": "pavucontrol"
- }
-}
diff --git a/roles/sway/files/waybar/style.css b/roles/sway/files/waybar/style.css
deleted file mode 100644
index d979f18..0000000
--- a/roles/sway/files/waybar/style.css
+++ /dev/null
@@ -1,255 +0,0 @@
-* {
- /* `otf-font-awesome` is required to be installed for icons */
- font-family: Roboto, Helvetica, Arial, sans-serif;
- font-size: 13px;
-}
-
-window#waybar {
- background-color: rgba(43, 48, 59, 0.5);
- border-bottom: 3px solid rgba(100, 114, 125, 0.5);
- color: #ffffff;
- transition-property: background-color;
- transition-duration: 0.5s;
-}
-
-window#waybar.hidden {
- opacity: 0.2;
-}
-
-/*
-window#waybar.empty {
- background-color: transparent;
-}
-window#waybar.solo {
- background-color: #FFFFFF;
-}
-*/
-
-window#waybar.termite {
- background-color: #3f3f3f;
-}
-
-window#waybar.chromium {
- background-color: #000000;
- border: none;
-}
-
-#workspaces button {
- padding: 0 5px;
- background-color: transparent;
- color: #ffffff;
- /* Use box-shadow instead of border so the text isn't offset */
- box-shadow: inset 0 -3px transparent;
- /* Avoid rounded borders under each workspace name */
- border: none;
- border-radius: 0;
-}
-
-/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */
-#workspaces button:hover {
- background: rgba(0, 0, 0, 0.2);
- box-shadow: inset 0 -3px #ffffff;
-}
-
-#workspaces button.focused {
- background-color: #64727d;
- box-shadow: inset 0 -3px #ffffff;
-}
-
-#workspaces button.urgent {
- background-color: #eb4d4b;
-}
-
-#mode {
- background-color: #64727d;
- border-bottom: 3px solid #ffffff;
-}
-
-#clock,
-#battery,
-#cpu,
-#memory,
-#disk,
-#temperature,
-#backlight,
-#network,
-#pulseaudio,
-#custom-media,
-#tray,
-#mode,
-#idle_inhibitor,
-#mpd {
- padding: 0 10px;
- color: #ffffff;
-}
-
-#window,
-#workspaces {
- margin: 0 4px;
-}
-
-/* If workspaces is the leftmost module, omit left margin */
-.modules-left > widget:first-child > #workspaces {
- margin-left: 0;
-}
-
-/* If workspaces is the rightmost module, omit right margin */
-.modules-right > widget:last-child > #workspaces {
- margin-right: 0;
-}
-
-#clock {
- background-color: #64727d;
-}
-
-#battery {
- background-color: #ffffff;
- color: #000000;
-}
-
-#battery.charging,
-#battery.plugged {
- color: #ffffff;
- background-color: #26a65b;
-}
-
-@keyframes blink {
- to {
- background-color: #ffffff;
- color: #000000;
- }
-}
-
-#battery.critical:not(.charging) {
- background-color: #f53c3c;
- color: #ffffff;
- animation-name: blink;
- animation-duration: 0.5s;
- animation-timing-function: linear;
- animation-iteration-count: infinite;
- animation-direction: alternate;
-}
-
-label:focus {
- background-color: #000000;
-}
-
-#cpu {
- background-color: #2ecc71;
- color: #000000;
-}
-
-#memory {
- background-color: #9b59b6;
-}
-
-#disk {
- background-color: #964b00;
-}
-
-#backlight {
- background-color: #90b1b1;
-}
-
-#network {
- background-color: #2980b9;
-}
-
-#network.disconnected {
- background-color: #f53c3c;
-}
-
-#pulseaudio {
- background-color: #f1c40f;
- color: #000000;
-}
-
-#pulseaudio.muted {
- background-color: #90b1b1;
- color: #2a5c45;
-}
-
-#custom-media {
- background-color: #66cc99;
- color: #2a5c45;
- min-width: 100px;
-}
-
-#custom-media.custom-spotify {
- background-color: #66cc99;
-}
-
-#custom-media.custom-vlc {
- background-color: #ffa000;
-}
-
-#temperature {
- background-color: #f0932b;
-}
-
-#temperature.critical {
- background-color: #eb4d4b;
-}
-
-#tray {
- background-color: #2980b9;
-}
-
-#tray > .passive {
- -gtk-icon-effect: dim;
-}
-
-#tray > .needs-attention {
- -gtk-icon-effect: highlight;
- background-color: #eb4d4b;
-}
-
-#idle_inhibitor {
- background-color: #2d3436;
-}
-
-#idle_inhibitor.activated {
- background-color: #ecf0f1;
- color: #2d3436;
-}
-
-#mpd {
- background-color: #66cc99;
- color: #2a5c45;
-}
-
-#mpd.disconnected {
- background-color: #f53c3c;
-}
-
-#mpd.stopped {
- background-color: #90b1b1;
-}
-
-#mpd.paused {
- background-color: #51a37a;
-}
-
-#language {
- background: #00b093;
- color: #740864;
- padding: 0 5px;
- margin: 0 5px;
- min-width: 16px;
-}
-
-#keyboard-state {
- background: #97e1ad;
- color: #000000;
- padding: 0 0px;
- margin: 0 5px;
- min-width: 16px;
-}
-
-#keyboard-state > label {
- padding: 0 5px;
-}
-
-#keyboard-state > label.locked {
- background: rgba(0, 0, 0, 0.2);
-}
diff --git a/roles/sway/tasks/arch.yml b/roles/sway/tasks/arch.yml
deleted file mode 100644
index 0331a0c..0000000
--- a/roles/sway/tasks/arch.yml
+++ /dev/null
@@ -1,34 +0,0 @@
-- name: Install sway packages
- community.general.pacman:
- name:
- - cmake
- - wayland-protocols
- - sway
- - waybar
- - rofi-wayland
- - i3status
- - swayidle
- # - swaylock
- - alacritty
- - light
- - ranger
- - powerline-fonts
- - nnn
- - grim
- - playerctl
- become: true
- become_method: sudo
-
-- name: Remove normal swaylock
- community.general.pacman:
- name:
- - swaylock
- - swaylock-effects
- state: absent
- become: true
- become_method: sudo
-
-- name: Install swaylock-effects
- yay:
- name: swaylock-effects-git
- state: latest
diff --git a/roles/sway/tasks/main.yml b/roles/sway/tasks/main.yml
deleted file mode 100644
index d776cae..0000000
--- a/roles/sway/tasks/main.yml
+++ /dev/null
@@ -1,33 +0,0 @@
-# - name: Debian specific sway tasks
-# import_tasks: debian.yml
-# when: ansible_os_family == "Debian"
-- name: Arch specific sway tasks
- import_tasks: arch.yml
- when: ansible_os_family == "Archlinux"
-
-- name: create sway config directory
- file:
- path: "{{ dotfiles_user_home }}/.config/sway"
- state: directory
-
-- name: create waybar config directory
- file:
- path: "{{ dotfiles_user_home }}/.config/waybar"
- state: directory
-
-- name: link sway config
- file:
- src: "{{ dotfiles_home }}/roles/sway/files/sway/config"
- dest: "{{ dotfiles_user_home }}/.config/sway/config"
- state: hard
- force: true
-
-- name: link waybar config
- file:
- src: "{{ dotfiles_home }}/roles/sway/files/waybar/{{ item.name }}"
- dest: "{{ dotfiles_user_home }}/.config/waybar/{{ item.name }}"
- state: hard
- force: true
- with_items:
- - name: config
- - name: style.css
diff --git a/roles/tmux/files/tmux.conf b/roles/tmux/files/tmux.conf
deleted file mode 100644
index 6bd2ab0..0000000
--- a/roles/tmux/files/tmux.conf
+++ /dev/null
@@ -1,65 +0,0 @@
-###############################################################################
-# byobu's tmux f-key keybindings
-#
-# Copyright (C) 2011-2014 Dustin Kirkland
-#
-# Authors: Dustin Kirkland
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, version 3 of the License.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see .
-###############################################################################
-
-set -g history-limit 10000
-unbind R
-bind R source-file ~/.tmux.conf
-
-set -g default-terminal "screen-256color"
-set -g visual-bell on
-# set -g default-shell "/usr/bin/zsh"
-# set -g default-command "reattach-to-user-namespace -l $SHELL""
-# Clear the slate
-#source $BYOBU_PREFIX/share/byobu/keybindings/f-keys.tmux.disable
-
-# Byobu's Keybindings
-# Documented in: $BYOBU_PREFIX/share/doc/byobu/help.tmux.txt
-#bind-key -n F1 new-window -k -n config byobu-config
-#bind-key -n S-F1 new-window -k -n help "sh -c '$BYOBU_PAGER $BYOBU_PREFIX/share/doc/byobu/help.tmux.txt'"
-unbind C-b
-unbind C-Left
-unbind C-Right
-set-option -g prefix C-a
-set-option -sg escape-time 10
-set-option -g set-titles on
-set-option -g set-titles-string '#W #T' # window number,program name, active(or not)
-set-option -sa terminal-features ',XXX:RGB'
-set-window-option -g xterm-keys on
-set-window-option -g mode-keys vi
-
-source ~/.tmux/keybindings/f-keys.conf
-
-#bind-key -n C-a new-window -n "ctrl-a" "byobu-ctrl-a"
-
-set -g -a terminal-overrides ',*:Ss=\E[%p1%d q:Se=\E[2 q'
-set-option -sa terminal-overrides ',screen-256color:RGB'
-
-set -g @plugin 'tmux-plugins/tpm'
-set -g @plugin 'tmux-plugins/tmux-sensible'
-
-# Other examples:
-# set -g @plugin 'tmux-plugins/tmux-resurrect'
-# set -g @plugin 'git@github.com/user/plugin'
-# set -g @plugin 'git@bitbucket.com/user/plugin'
-
-set -g @resurrect-strategy-nvim 'session'
-
-# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
-run '~/.tmux/plugins/tpm/tpm'
diff --git a/roles/tmux/files/tmux/keybindings/f-keys.conf b/roles/tmux/files/tmux/keybindings/f-keys.conf
deleted file mode 100644
index a4f1d43..0000000
--- a/roles/tmux/files/tmux/keybindings/f-keys.conf
+++ /dev/null
@@ -1,63 +0,0 @@
-# Add F12 to the prefix list
-set -g prefix F12
-
-# Clear the slate
-source ~/.tmux/keybindings/f-keys.conf.disable
-
-bind-key C-a send-prefix
-# new-session -n $HOST
-
-bind-key -n F2 new-window -c "#{pane_current_path}" \; rename-window "-"
-bind-key -n C-F2 display-panes \; split-window -h -c "#{pane_current_path}"
-bind-key -n S-F2 display-panes \; split-window -v -c "#{pane_current_path}"
-bind-key -n C-S-F2 new-session
-bind-key -n F3 previous-window
-bind-key -n F4 next-window
-bind-key -n M-Left previous-window
-bind-key -n M-Right next-window
-bind-key -n M-Up switch-client -p
-bind-key -n M-Down switch-client -n
-bind-key -n S-F3 display-panes \; select-pane -t :.-
-bind-key -n S-F4 display-panes \; select-pane -t :.+
-bind-key -n S-Up display-panes \; select-pane -U
-bind-key -n S-Down display-panes \; select-pane -D
-bind-key -n S-Left display-panes \; select-pane -L
-bind-key -n S-Right display-panes \; select-pane -R
-bind-key -n C-F3 display-panes \; swap-pane -s :. -t :.- \; select-pane -t :.-
-bind-key -n C-F4 display-panes \; swap-pane -s :. -t :.+ \; select-pane -t :.+
-bind-key -n C-S-F3 swap-window -t :-1
-bind-key -n C-S-F4 swap-window -t :+1
-bind-key -n M-S-Up resize-pane -U
-bind-key -n M-S-Down resize-pane -D
-bind-key -n M-S-Left resize-pane -L
-bind-key -n M-S-Right resize-pane -R
-#bind-key -n F5 source $BYOBU_PREFIX/share/byobu/profiles/tmuxrc
-#bind-key -n M-F5 run-shell '$BYOBU_PREFIX/lib/byobu/include/toggle-utf8' \; source $BYOBU_PREFIX/share/byobu/profiles/tmuxrc
-#bind-key -n S-F5 new-window -k "$BYOBU_PREFIX/lib/byobu/include/cycle-status" \; source $BYOBU_PREFIX/share/byobu/profiles/tmuxrc
-#bind-key -n C-F5 send-keys ". $BYOBU_PREFIX/bin/byobu-reconnect-sockets" \; send-keys Enter
-#bind-key -n C-S-F5 new-window -d "byobu-select-profile -r"
-bind-key -n F6 detach
-#bind-key -n M-F6 run-shell '$BYOBU_PREFIX/lib/byobu/include/tmux-detach-all-but-current-client'
-#bind-key -n S-F6 run-shell 'exec touch $BYOBU_RUN_DIR/no-logout' \; detach
-bind-key -n C-F6 kill-pane
-bind-key -n F7 copy-mode
-#bind-key -n S-F7 capture-pane -S -32768 \; save-buffer "$BYOBU_RUN_DIR/printscreen" \; delete-buffer \; new-window -n "PRINTSCREEN" "view $BYOBU_RUN_DIR/printscreen"
-bind-key -n M-NPage copy-mode \; send-keys NPage
-bind-key -n M-PPage copy-mode \; send-keys PPage
-bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xclip -in -selection clipboard'
-bind-key -n F8 command-prompt -p "(rename-window) " "rename-window '%%'"
-bind-key -n C-F8 command-prompt -p "(rename-session) " "rename-session '%%'"
-bind-key -n S-F8 next-layout
-#bind-key -n M-S-F8 new-window -k "byobu-layout restore; clear; $SHELL"
-#bind-key -n C-S-F8 command-prompt -p "Save byobu layout as:" "run-shell \"byobu-layout save '%%'\""
-bind-key -n F9 new-window -k -n config byobu-config
-#bind-key -n S-F9 command-prompt -p "Send command to all panes:" "run-shell \"$BYOBU_PREFIX/lib/byobu/include/tmux-send-command-to-all-panes '%%'\""
-#bind-key -n C-F9 command-prompt -p "Send command to all windows:" "run-shell \"$BYOBU_PREFIX/lib/byobu/include/tmux-send-command-to-all-windows '%%'\""
-bind-key -n M-F9 display-panes \; setw synchronize-panes
-bind-key -n M-F11 break-pane
-bind-key -n C-F11 join-pane -h -s :. -t :-1
-bind-key -n S-F11 resize-pane -Z
-#bind-key -n S-F12 source ~/.tmux/keybindings/f-keys.tmux.disable \; display-message "Byobu F-keys: DISABLED"
-#bind-key -n C-S-F12 new-window $BYOBU_PREFIX/lib/byobu/include/mondrian
-#bind-key -n M-F12 source $BYOBU_PREFIX/share/byobu/keybindings/mouse.tmux.enable
-bind-key -n M-IC paste-buffer
diff --git a/roles/tmux/files/tmux/keybindings/f-keys.conf.disable b/roles/tmux/files/tmux/keybindings/f-keys.conf.disable
deleted file mode 100644
index 4c84a5f..0000000
--- a/roles/tmux/files/tmux/keybindings/f-keys.conf.disable
+++ /dev/null
@@ -1,85 +0,0 @@
-###############################################################################
-# disable byobu's tmux f-key keybindings
-#
-# Copyright (C) 2011-2014 Dustin Kirkland
-#
-# Authors: Dustin Kirkland
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, version 3 of the License.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see .
-###############################################################################
-
-# Undo Byobu's Keybindings
-unbind-key -n F1
-unbind-key -n S-F1
-unbind-key -n F2
-unbind-key -n C-F2
-unbind-key -n S-F2
-unbind-key -n C-S-F2
-unbind-key -n F3
-unbind-key -n F4
-unbind-key -n C-Up
-unbind-key -n C-Down
-unbind-key -n C-Left
-unbind-key -n C-Right
-unbind-key -n C-S-Left
-unbind-key -n C-S-Right
-unbind-key -n C-S-Up
-unbind-key -n C-S-Down
-unbind-key -n S-F3
-unbind-key -n S-F4
-unbind-key -n S-Up
-unbind-key -n S-Down
-unbind-key -n S-Left
-unbind-key -n S-Right
-unbind-key -n C-F3
-unbind-key -n C-F4
-unbind-key -n C-S-F3
-unbind-key -n C-S-F4
-unbind-key -n M-Up
-unbind-key -n M-Down
-unbind-key -n M-Left
-unbind-key -n M-Right
-unbind-key -n S-M-Up
-unbind-key -n S-M-Down
-unbind-key -n S-M-Left
-unbind-key -n S-M-Right
-unbind-key -n F5
-unbind-key -n M-F5
-unbind-key -n S-F5
-unbind-key -n C-F5
-unbind-key -n C-S-F5
-unbind-key -n F6
-unbind-key -n M-F6
-unbind-key -n S-F6
-unbind-key -n C-F6
-unbind-key -n F7
-unbind-key -n S-F7
-unbind-key -n M-NPage
-unbind-key -n M-PPage
-unbind-key -n F8
-unbind-key -n C-F8
-unbind-key -n C-S-F8
-unbind-key -n M-S-F8
-unbind-key -n S-F8
-unbind-key -n F9
-unbind-key -n M-F9
-unbind-key -n S-F9
-unbind-key -n C-F9
-unbind-key -n M-F11
-unbind-key -n C-F11
-unbind-key -n S-F11
-bind-key -n S-F12 source ~/.tmux/keybindings.tmux \; display-message "Byobu F-keys: ENABLED"
-unbind-key -n M-F12
-unbind-key -n C-S-F12
-unbind-key -n M-IC
-unbind-key -n C-a
diff --git a/roles/tmux/tasks/debian.yml b/roles/tmux/tasks/debian.yml
deleted file mode 100644
index 565ecc2..0000000
--- a/roles/tmux/tasks/debian.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-- name: Install tmux with apt
- apt:
- name: tmux
- state: present
- become: true
- become_method: sudo
diff --git a/roles/tmux/tasks/main.yml b/roles/tmux/tasks/main.yml
deleted file mode 100644
index 395d9a5..0000000
--- a/roles/tmux/tasks/main.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-- import_tasks: debian.yml
- when: ansible_os_family == "Debian"
-
-- name: Install tpm
- git:
- repo: https://github.com/tmux-plugins/tpm
- dest: "{{dotfiles_user_home}}/.tmux/plugins/tpm"
-
-- name: Symlink .tmux.conf
- file:
- state: link
- src: "{{ dotfiles_home }}/roles/tmux/files/tmux.conf"
- dest: "{{ dotfiles_user_home }}/.tmux.conf"
-
-- name: tmux folder
- file:
- state: directory
- dest: "{{ dotfiles_user_home }}/.tmux/keybindings"
-
-- name: Symlink keybindings
- file:
- state: link
- src: "{{ dotfiles_home }}/roles/tmux/files/tmux/keybindings/{{ item }}"
- dest: "{{ dotfiles_user_home }}/.tmux/keybindings/{{ item }}"
- loop:
- - f-keys.conf
- - f-keys.conf.disable
diff --git a/roles/xinput/tasks/main.yml b/roles/xinput/tasks/main.yml
index 5e40835..2f889b1 100644
--- a/roles/xinput/tasks/main.yml
+++ b/roles/xinput/tasks/main.yml
@@ -4,8 +4,9 @@
state: directory
mode: "0755"
-- name: Copy touchpad fix script to ~/.local/bin
- copy:
- src: fix-touchpad.sh
+- name: Link touchpad fix script to ~/.local/bin
+ file:
+ src: "{{ dotfiles_home }}/roles/xinput/files/fix-touchpad.sh"
dest: "{{ dotfiles_user_home }}/.local/bin/fix-touchpad"
- mode: "0755"
+ state: link
+ force: true
diff --git a/roles/xmonad/files/Xmonad.desktop b/roles/xmonad/files/Xmonad.desktop
deleted file mode 100644
index 051f4c6..0000000
--- a/roles/xmonad/files/Xmonad.desktop
+++ /dev/null
@@ -1,6 +0,0 @@
-[Desktop Entry]
-Name=XMonad
-Comment=Lightweight tiling window manager
-Exec=xmonad-session
-Icon=xmonad.png
-Type=XSession
diff --git a/roles/xmonad/files/xmonad/build b/roles/xmonad/files/xmonad/build
deleted file mode 100755
index 4ad9211..0000000
--- a/roles/xmonad/files/xmonad/build
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-#
-# As of 0.13, xmonad --recompile will look for a custom build script.
-
-set -e
-EXE_NAME=my-xmonad
-OUTPUT=$1
-
-stack build
-stack install ":$EXE_NAME" --local-bin-path bin/
-mv "bin/$EXE_NAME" "$OUTPUT"
diff --git a/roles/xmonad/files/xmonad/lib/.gitignore b/roles/xmonad/files/xmonad/lib/.gitignore
deleted file mode 100644
index 04a4a5b..0000000
--- a/roles/xmonad/files/xmonad/lib/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-# This file is included so that a `lib/` directory will be created.
diff --git a/roles/xmonad/files/xmonad/lib/empty b/roles/xmonad/files/xmonad/lib/empty
deleted file mode 100644
index e69de29..0000000
diff --git a/roles/xmonad/files/xmonad/my-xmonad.cabal b/roles/xmonad/files/xmonad/my-xmonad.cabal
deleted file mode 100644
index 0e68432..0000000
--- a/roles/xmonad/files/xmonad/my-xmonad.cabal
+++ /dev/null
@@ -1,25 +0,0 @@
-name: my-xmonad
-version: 0.1.0.0
-build-type: Simple
-cabal-version: >=1.10
-
-executable my-xmonad
- main-is: ./xmonad.hs
- -- other-modules lists custom modules in my ~/.xmonad/lib/ directory
- other-modules:
- build-depends: base
- , containers
- , dbus
- , gtk3
- , network
- , network-bsd
- , taffybar == 3.2.3
- , utf8-string
- , xmonad >= 0.15
- , xmonad-contrib >= 0.15
- , xmonad-extras >= 0.15
- , X11
- -- hs-source-dirs: lib
- default-language: Haskell2010
- ghc-options: -Wall -Werror -fno-warn-missing-signatures -threaded
- cpp-options: -D__attribute__(A)=
diff --git a/roles/xmonad/files/xmonad/stack.yaml b/roles/xmonad/files/xmonad/stack.yaml
deleted file mode 100644
index f296c4f..0000000
--- a/roles/xmonad/files/xmonad/stack.yaml
+++ /dev/null
@@ -1,31 +0,0 @@
-packages:
- - .
-extra-deps:
- - gtk3-0.15.5@sha256:e036fe5df496fbefff9e1bc029358ba198b4b73bb4677d3f58e59ee6ec03766a,19511
- - taffybar-3.2.3
- - ConfigFile-1.1.4@sha256:ca56261e1deae6ef958a337b03812987bfd94ab37b047e27f262bc3137813165,2056
- - broadcast-chan-0.2.1.1@sha256:61526a7f2fd748565ef6759d2538df9fa21f802f3aef8745e7670ddd5f73eb7e,6146
- - cairo-0.13.8.1@sha256:1938aaeb5d3504678d995774dfe870f6b66cbd43d336b692fa8779b23b2b67a9,4075
- - dbus-hslogger-0.1.0.1@sha256:7c989216bfbd9dce7e6898e608efff13d7385d0e9cf4b5aa8c8e0358b72645be,1489
- - gi-cairo-connector-0.1.0@sha256:a79c34c4f22f81a938c5835f623de55fdf1f0f08435897bad68f58e01ffd1464,1213
- - gi-cairo-render-0.1.0@sha256:cb27b31b373c55c5b384a331e439d1ebc2fb3e02c8a58c9bfb83218d5467af2b,3553
- - gio-0.13.8.1@sha256:7404841eefdfffb50c2b5f63879ffe4bf40fb5ddf90a7f633494eca0e23150a5,3136
- - glib-0.13.8.1@sha256:42670daf0c85309281e08ba8559df75daa2e3be642e79fdfa781bef5e59658b0,3156
- - gtk-sni-tray-0.1.6.0@sha256:c9d355a67f459431c377f628a4853b1ed9a50e6591eceb76b1189b735aa765da,2188
- - gtk-strut-0.1.3.0@sha256:a1ad2b79d5c581366062278fd43db7fbc8b703cc156bacbcf3b94dc57dea7811,1140
- - gtk2hs-buildtools-0.13.8.0@sha256:132f38155fc677430a47ea750918973161c876fb6f281d342ac2f07eb99229ce,5238
- - pango-0.13.8.1@sha256:877b121c0bf87c96d3619effae6751ecfd74b7f7f3227cf3fde012597aed5ed9,3917
- - rate-limit-1.4.2@sha256:78b935d96fe82b4d059908557e2c904925e99fcd465e2b4dfd65b8d2930163a2,930
- - status-notifier-item-0.3.0.5@sha256:a07f6c0a28949615fb2c3738330b745b58b28b26b1b99e8fa2884a6b4f4e5b4f,2576
- - time-units-1.0.0@sha256:27cf54091c4a0ca73d504fc11d5c31ab4041d17404fe3499945e2055697746c1,928
- - xml-helpers-1.0.0@sha256:3b0808db529fa362a67717c78a78a4728859f60f31e9213ae2d32720fbe053a1,610
- - byte-order-0.1.2.0@sha256:e0a5de48cfcf8d01535c43a1c1657c2589c1848b9b209288538d1f0f20474336,1207
- - gi-dbusmenugtk3-0.4.9@sha256:4f92b75281a533bc67cae81f2948df7115b43a4960527a3aaea1bca5447743f9,3416
- - gi-xlib-2.0.9@sha256:eda54f1c3398f4ff2cfd52a90c99554f2d20c30e47c48814d1f7a18a6aab90ca,3511
- - gi-dbusmenu-0.4.8@sha256:3bcf0ccce5c2bb3f083ba2da2fd526d042d1dfc63595a55277135fad1d22168e,3247
- - primitive-unaligned-0.1.1.1@sha256:e38ba9c583f459a6045df523b042dd7794e79100f57ce0f9233368a10ce43173,1277
- - haskell-gi-base-0.24.5
- - haskell-gi-0.24.7
- - gi-harfbuzz-0.0.3
-
-resolver: nightly-2021-02-02
diff --git a/roles/xmonad/files/xmonad/xmonad.hs b/roles/xmonad/files/xmonad/xmonad.hs
deleted file mode 100644
index 81d0260..0000000
--- a/roles/xmonad/files/xmonad/xmonad.hs
+++ /dev/null
@@ -1,329 +0,0 @@
-import XMonad
-import XMonad.Config.Desktop
-
-import XMonad.Layout.Fullscreen
-import XMonad.Layout.Grid
-import XMonad.Layout.Named
-import XMonad.Layout.NoBorders
-
-import XMonad.Hooks.DynamicHooks
-import XMonad.Hooks.DynamicLog
-import XMonad.Hooks.EwmhDesktops ( ewmh )
-import XMonad.Hooks.ManageDocks
-import XMonad.Hooks.ManageHelpers
-import XMonad.Hooks.Minimize
-import XMonad.Hooks.SetWMName
-
-import XMonad.Prompt.Shell
-
-import XMonad.Util.Brightness
-import XMonad.Util.EZConfig
-
-import Graphics.X11.ExtraTypes.XF86
-
-import qualified DBus as D
-import qualified DBus.Client as D
-
-import System.Exit
-
-import System.Taffybar.Support.PagerHints
- ( pagerHints )
-
-import qualified Codec.Binary.UTF8.String as UTF8
-import Control.Concurrent
-import Data.List
-import qualified Data.Map as M
-import qualified XMonad.StackSet as W
-
-main = do
- dbus <- D.connectSession
- _ <- D.requestName
- dbus
- (D.busName_ "org.xmonad.Log")
- [D.nameAllowReplacement, D.nameReplaceExisting, D.nameDoNotQueue]
- xmonad $ ewmh $ pagerHints $ myConfig
- { logHook = dynamicLogWithPP (myLogHook dbus)
- }
-
-myConfig =
- docks
- $ def
- { modMask = mod4Mask
- , terminal = "alacritty"
- , focusFollowsMouse = True
- , manageHook = myManageHook
- , handleEventHook = docksEventHook
- <+> minimizeEventHook
- <+> fullscreenEventHook
- , layoutHook = myLayout
- , keys = myKeys
- , startupHook = myStartupHook
- }
- `additionalKeysP` (easyKeyList myConfig)
-
-easyKeyList conf =
- -- launch a terminal
- [ ( "M-"
- , spawn $ XMonad.terminal conf
- )
- -- launch dmenu
- , ("M-", shellPrompt def)
- , ( "M-r"
- , shellPrompt def
- )
- -- close focused window
- , ( "M-S-c"
- , kill
- )
- -- Rotate through the available layout algorithms
- , ( "M-"
- , sendMessage NextLayout
- )
- -- This doesn't work just yet
- -- , ("M-S-" , setLayout $ XMonad.layoutHook conf)
-
- -- Resize viewed windows to the correct size
- , ( "M-n"
- , refresh
- )
- -- Move focus to the next window
- , ("M-", windows W.focusDown)
- , ( "M-j"
- , windows W.focusDown
- )
- -- Move focus to the previous window
- , ( "M-k"
- , windows W.focusUp
- )
- -- Move focus to the master window
- , ( "M-m"
- , windows W.focusMaster
- )
- -- Swap the focused window and the master window
- , ("M-S-m", windows W.shiftMaster)
- , ( "M-S-"
- , windows W.shiftMaster
- )
- -- Swap the focused window with the next window
- , ( "M-S-j"
- , windows W.swapDown
- )
- -- Swap the focused window with the previous window
- , ( "M-S-k"
- , windows W.swapUp
- )
- -- Shrink the master area
- , ( "M-h"
- , sendMessage Shrink
- )
- -- Expand the master area
- , ("M-l", sendMessage Expand)
- , ( "M-b"
- , sendMessage ToggleStruts
- )
- -- Push window back into tiling
- , ( "M-t"
- , withFocused $ windows . W.sink
- )
- -- Lock screen
- , ("M-S-z", spawn "xsecurelock")
- , ("M-C-w", spawn "firefox")
- -- Cycle Keyboard layouts
- , ( "M-"
- , spawn "~/bin/layout_switch.sh"
- )
- -- Quit xmonad
- , ( "M-S-q"
- , killAndExit
- )
- -- Restart xmonad
- , ("M-q" , killAndRestart)
- , ("" , liftIO $ change (+ 6000) *> (pure ()))
- , ("", liftIO $ change (+ (-6000)) *> (pure ()))
- ]
- where
- killAndExit = io (exitWith ExitSuccess)
- killAndRestart =
- --(spawn "/usr/bin/killall dzen2") <+>
- (liftIO $ threadDelay 1000000) <+> (restart "xmonad" True)
-
-myKeys conf@(XConfig { XMonad.modMask = modm }) =
- M.fromList
- $ [
- -- Reset the layouts on the current workspace to default
- ( (modm .|. shiftMask, xK_space)
- , setLayout $ XMonad.layoutHook conf
- )
-
- -- Increment the number of windows in the master area
- , ( (modm, xK_comma)
- , sendMessage (IncMasterN 1)
- )
-
- -- Deincrement the number of windows in the master area
- , ( (modm, xK_period)
- , sendMessage (IncMasterN (-1))
- )
-
- ------------------------------------------------------------
- -- Special Keys
- ------------------------------------------------------------
- , ((0, xF86XK_AudioLowerVolume), spawn "amixer -D pulse set Master 2%-")
- , ((0, xF86XK_AudioRaiseVolume), spawn "amixer -D pulse set Master 2%+")
- , ((0, xF86XK_AudioMute), spawn "amixer -D pulse set Master toggle")
- , ((0, xK_Print), spawn "flameshot gui")
- ]
- ++
- --
- -- mod-[1..9], Switch to workspace N
- -- mod-shift-[1..9], Move client to workspace N
- --
- [ ((m .|. modm, k), windows $ f i)
- | (i, k) <- zip (XMonad.workspaces conf) ([xK_1 .. xK_9] ++ [xK_0])
- , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]
- ]
- ++
-
- --
- -- mod-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3
- -- mod-shift-{w,e,r}, Move client to screen 1, 2, or 3
- --
- [ ((m .|. modm, key), screenWorkspace sc >>= flip whenJust (windows . f))
- | (key, sc) <- zip [xK_w, xK_e] [0 ..]
- , (f , m ) <- [(W.view, 0), (W.shift, shiftMask)]
- ]
-
-myLayout =
- avoidStruts $ desktopLayoutModifiers $ tall ||| wide ||| full ||| grid
- where
- nmaster = 1
- ratio = 5 / 7
- delta = 5 / 100
- tall = avoidStruts $ Tall nmaster delta ratio
- wide = named "Wide" $ avoidStruts $ Mirror $ Tall nmaster delta ratio
- full = avoidStruts $ noBorders Full
- grid = Grid
-
-red = "#fb4934"
-blue = "#83a598"
-blue2 = "#2266d0"
-
-myLogHook :: D.Client -> PP
-myLogHook dbus = def { ppOutput = dbusOutput dbus
- , ppCurrent = wrap ("%{F" ++ blue2 ++ "} ") " %{F-}"
- , ppVisible = wrap ("%{F" ++ blue ++ "} ") " %{F-}"
- , ppUrgent = wrap ("%{F" ++ red ++ "} ") " %{F-}"
- , ppHidden = wrap " " " "
- , ppWsSep = ""
- , ppSep = " | "
- -- , ppTitle = myAddSpaces 25
- }
-
-dbusOutput :: D.Client -> String -> IO ()
-dbusOutput dbus str = do
- let signal = (D.signal objectPath interfaceName memberName)
- { D.signalBody = [D.toVariant $ UTF8.decodeString str]
- }
- D.emit dbus signal
- where
- objectPath = D.objectPath_ "/org/xmonad/Log"
- interfaceName = D.interfaceName_ "org.xmonad.Log"
- memberName = D.memberName_ "Update"
-
-myStartupHook = do
- spawn "$HOME/.config/polybar/launch.sh"
- spawn "nm-applet"
- spawn "syndaemon -i 0.75 -d -t -K"
- spawn "pa-applet"
- spawn "blueman-applet"
- spawn "xsetroot -cursor_name left_ptr -solid black"
- spawn "rescuetime"
- spawn "flameshot"
- spawn "gnome-screensaver"
- spawn xautolock
- return ()
- setWMName "LG3D"
- checkKeymap myConfig (easyKeyList myConfig)
- where
- xautolock = "xautolock -secure -time 10 " ++ locker ++ notifier
- locker = "-locker \"gnome-screensaver-command --lock\" "
- notifier =
- "-notify 15 --notifier \"notify-send -t 5000 "
- ++ "-i dialog-password -u low 'Security advisory' "
- ++ "'\nLocking session in 15 seconds'\""
-
-
-myManageHook :: ManageHook
-myManageHook = manageDocks <+> dynamicMasterHook <+> manageWindows <+> manageHook def
-
-manageWindows :: ManageHook
-manageWindows =
- composeAll
- . concat
- $ [ [ resource =? r --> doIgnore | r <- myIgnores ]
- , [ className =? c --> doCenterFloat | c <- myFloatCC ]
- , [ fmap (c `isInfixOf`) name --> unfloat | c <- myUnfloatCC ]
- , [ name =? n --> doCenterFloat | n <- myFloatCN ]
- , [ name =? n --> doSideFloat NW | n <- myFloatSN ]
- , [ windowRole =? n --> doSideFloat SW | n <- myFloatSR ]
- , [ className =? c --> doF W.focusDown | c <- myFocusDC ]
- , [isFullscreen --> doFullFloat, isDialog --> doCenterFloat]
- ] where
- name = stringProperty "WM_NAME"
- windowRole = stringProperty "WM_WINDOW_ROLE"
- myIgnores = ["desktop", "desktop_window", "xfce4-panel"]
- -- myAlt3S = ["Amule", "Transmission-gtk"]
- myFloatCC =
- [ "MPlayer"
- , "mplayer2"
- , "File-roller"
- , "zsnes"
- , "Gcalctool"
- , "Exo-helper-1"
- , "Gksu"
- , "Galculator"
- , "Nvidia-settings"
- , "XFontSel"
- , "XCalc"
- , "XClock"
- , "Ossxmix"
- , "Xvidcap"
- , "Main"
- , "Wicd-client.py"
- , "xfrun4"
- , "jetbrains-android-studio"
- ]
- myFloatCN =
- [ "Choose a file"
- , "Open Image"
- , "File Operation Progress"
- , "Firefox Preferences"
- , "Preferences"
- , "Search Engines"
- , "Set up sync"
- , "Passwords and Exceptions"
- , "Autofill Options"
- , "Rename File"
- , "Copying files"
- , "Moving files"
- , "File Properties"
- , "Replace"
- , "Quit GIMP"
- , "Gimp"
- , "Change Foreground Color"
- , "Change Background Color"
- , "Expired/Expiring LOAS Certificate"
- , "action_goobuntu_check.py"
- , "Application Finder"
- , "xmessage"
- , ""
- ]
- myFloatSN = ["Event Tester"]
- myFloatSR = ["pop-up"]
- myFocusDC = ["Event Tester", "Notify-osd"]
- -- Chrome Secure Shell
- myUnfloatCC = ["Secure Shell"]
- -- keepMaster c = assertSlave <+> assertMaster where
- -- assertSlave = fmap (/= c) className --> doF W.swapDown
- -- assertMaster = className =? c --> doF W.swapMaster
- unfloat = ask >>= doF . W.sink
diff --git a/roles/xmonad/tasks/debian.yml b/roles/xmonad/tasks/debian.yml
deleted file mode 100644
index cb0938d..0000000
--- a/roles/xmonad/tasks/debian.yml
+++ /dev/null
@@ -1,38 +0,0 @@
-- name: Enable deb-src repos
- command: "sed -Ei 's/^# deb-src /deb-src /' /etc/apt/sources.list"
- become: true
- become_method: sudo
-
-- name: Install xmonad deps
- apt:
- name:
- - xmonad
- state: build-dep
- update_cache: true
- become: true
- become_method: sudo
-
-- name: More deps
- apt:
- name:
- - libasound2-dev
- - libgirepository1.0-dev
- - libwebkit2gtk-4.0-dev
- - libgtksourceview-3.0-dev
- - libtinfo-dev
- - libdbusmenu-glib-dev
- - libdbusmenu-gtk3-dev
- - xmonad
- - suckless-tools
- state: latest
- become: true
- become_method: sudo
-
-- name: Install gorilla deps
- apt:
- name: polybar
- state: latest
- become: true
- become_method: sudo
- when: ((ansible_distribution_version == "20.10")
- or (ansible_distribution_major_version | int > 20))
diff --git a/roles/xmonad/tasks/main.yml b/roles/xmonad/tasks/main.yml
deleted file mode 100644
index 04d38a3..0000000
--- a/roles/xmonad/tasks/main.yml
+++ /dev/null
@@ -1,62 +0,0 @@
-- import_tasks: debian.yml
- when: ansible_os_family == "Debian"
-
-- name: "create .xmonad folder"
- file:
- path: "{{ dotfiles_user_home }}/.xmonad"
- state: directory
-
-- name: "create .xmonad/lib folder"
- file:
- path: "{{ dotfiles_user_home }}/.xmonad/lib"
- state: directory
-
-- name: Symlink .xmonad files
- file:
- src: "{{ dotfiles_home }}/roles/xmonad/files/xmonad/{{ item.src }}"
- dest: "{{ dotfiles_user_home }}/.xmonad/{{ item.src }}"
- state: link
- force: yes
- with_items:
- - src: "xmonad.hs"
- - src: "stack.yaml"
- - src: "my-xmonad.cabal"
- - src: "build"
-
-- name: Install xmonad
- command: "stack install xmonad"
- args:
- chdir: "{{ dotfiles_user_home }}/.xmonad"
- creates: "{{ dotfiles_user_home }}/.local/bin/xmonad"
-
-- name: Build my-xmonad
- command: "{{ dotfiles_user_home }}/.local/bin/xmonad --recompile"
-
-- name: Install Xmonad.desktop file
- file:
- src: "{{ dotfiles_home }}/roles/xmonad/files/Xmonad.desktop"
- dest: "/usr/share/xsessions/xmonad.desktop"
- state: hard
- force: true
- become: true
- become_method: sudo
-
-- name: Create polybar directory
- file:
- path: "{{ dotfiles_user_home }}/.config/polybar"
- state: directory
-
-- name: polybar config
- file:
- src: "{{ dotfiles_home }}/roles/xmonad/files/config/polybar/{{ item.src }}"
- dest: "{{ dotfiles_user_home }}/.config/polybar/{{ item.src }}"
- state: link
- force: true
- with_items:
- - src: launch.sh
- - src: config
-
-- name: xmonad-log
- command: "go get github.com/xintron/xmonad-log"
- args:
- creates: "{{ dotfiles_user_home }}/go/bin/xmonad-log"
diff --git a/roles/zellij/files/config.kdl b/roles/zellij/files/config.kdl
new file mode 100644
index 0000000..2028ea9
--- /dev/null
+++ b/roles/zellij/files/config.kdl
@@ -0,0 +1,481 @@
+//
+// THIS FILE WAS AUTOGENERATED BY ZELLIJ, THE PREVIOUS FILE AT THIS LOCATION WAS COPIED TO: /home/favilo/.config/zellij/config.kdl.bak.1
+//
+
+keybinds clear-defaults=true {
+ locked {
+ bind "Ctrl g" { SwitchToMode "normal"; }
+ // bind "Alt z" {
+ // // Disable the autolock plugin
+ // MessagePlugin "autolock" {payload "disable";};
+ // }
+ }
+ normal {
+ // bind "Enter" {
+ // // Passthru `Enter`.
+ // WriteChars "\u{000D}";
+ // // Invoke autolock to immediately assess proper lock state.
+ // // (This provides a snappier experience compared to
+ // // solely relying on `reaction_seconds` to elapse.)
+ // MessagePlugin "autolock" {};
+ // }
+ }
+ shared {
+ // bind "Alt Shift z" {
+ // // Enable the autolock plugin
+ // MessagePlugin "autolock" {payload "enable";};
+ // }
+ }
+ pane {
+ bind "left" { MoveFocus "left"; }
+ bind "down" { MoveFocus "down"; }
+ bind "up" { MoveFocus "up"; }
+ bind "right" { MoveFocus "right"; }
+ bind "c" { SwitchToMode "renamepane"; PaneNameInput 0; }
+ bind "d" { NewPane "down"; SwitchToMode "locked"; }
+ bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "locked"; }
+ bind "f" { ToggleFocusFullscreen; SwitchToMode "locked"; }
+ bind "h" { MoveFocus "left"; }
+ bind "i" { TogglePanePinned; SwitchToMode "locked"; }
+ bind "j" { MoveFocus "down"; }
+ bind "k" { MoveFocus "up"; }
+ bind "l" { MoveFocus "right"; }
+ bind "n" { NewPane; SwitchToMode "locked"; }
+ bind "p" { SwitchToMode "normal"; }
+ bind "r" { NewPane "right"; SwitchToMode "locked"; }
+ bind "w" { ToggleFloatingPanes; SwitchToMode "locked"; }
+ bind "x" { CloseFocus; SwitchToMode "locked"; }
+ bind "z" { TogglePaneFrames; SwitchToMode "locked"; }
+ bind "tab" { SwitchFocus; }
+ }
+ tab {
+ bind "left" { GoToPreviousTab; }
+ bind "down" { GoToNextTab; }
+ bind "up" { GoToPreviousTab; }
+ bind "right" { GoToNextTab; }
+ bind "1" { GoToTab 1; SwitchToMode "locked"; }
+ bind "2" { GoToTab 2; SwitchToMode "locked"; }
+ bind "3" { GoToTab 3; SwitchToMode "locked"; }
+ bind "4" { GoToTab 4; SwitchToMode "locked"; }
+ bind "5" { GoToTab 5; SwitchToMode "locked"; }
+ bind "6" { GoToTab 6; SwitchToMode "locked"; }
+ bind "7" { GoToTab 7; SwitchToMode "locked"; }
+ bind "8" { GoToTab 8; SwitchToMode "locked"; }
+ bind "9" { GoToTab 9; SwitchToMode "locked"; }
+ bind "[" { BreakPaneLeft; SwitchToMode "locked"; }
+ bind "]" { BreakPaneRight; SwitchToMode "locked"; }
+ bind "b" { BreakPane; SwitchToMode "locked"; }
+ bind "h" { GoToPreviousTab; }
+ bind "j" { GoToNextTab; }
+ bind "k" { GoToPreviousTab; }
+ bind "l" { GoToNextTab; }
+ bind "n" { NewTab; SwitchToMode "locked"; }
+ bind "r" { SwitchToMode "renametab"; TabNameInput 0; }
+ bind "s" { ToggleActiveSyncTab; SwitchToMode "locked"; }
+ bind "t" { SwitchToMode "normal"; }
+ bind "x" { CloseTab; SwitchToMode "locked"; }
+ bind "tab" { ToggleTab; }
+ }
+ resize {
+ bind "left" { Resize "Increase left"; }
+ bind "down" { Resize "Increase down"; }
+ bind "up" { Resize "Increase up"; }
+ bind "right" { Resize "Increase right"; }
+ bind "+" { Resize "Increase"; }
+ bind "-" { Resize "Decrease"; }
+ bind "=" { Resize "Increase"; }
+ bind "H" { Resize "Decrease left"; }
+ bind "J" { Resize "Decrease down"; }
+ bind "K" { Resize "Decrease up"; }
+ bind "L" { Resize "Decrease right"; }
+ bind "h" { Resize "Increase left"; }
+ bind "j" { Resize "Increase down"; }
+ bind "k" { Resize "Increase up"; }
+ bind "l" { Resize "Increase right"; }
+ bind "r" { SwitchToMode "normal"; }
+ }
+ move {
+ bind "left" { MovePane "left"; }
+ bind "down" { MovePane "down"; }
+ bind "up" { MovePane "up"; }
+ bind "right" { MovePane "right"; }
+ bind "h" { MovePane "left"; }
+ bind "j" { MovePane "down"; }
+ bind "k" { MovePane "up"; }
+ bind "l" { MovePane "right"; }
+ bind "m" { SwitchToMode "normal"; }
+ bind "n" { MovePane; }
+ bind "p" { MovePaneBackwards; }
+ bind "tab" { MovePane; }
+ }
+ scroll {
+ bind "Alt left" { MoveFocusOrTab "left"; SwitchToMode "locked"; }
+ bind "Alt down" { MoveFocus "down"; SwitchToMode "locked"; }
+ bind "Alt up" { MoveFocus "up"; SwitchToMode "locked"; }
+ bind "Alt right" { MoveFocusOrTab "right"; SwitchToMode "locked"; }
+ bind "e" { EditScrollback; SwitchToMode "locked"; }
+ bind "f" { SwitchToMode "entersearch"; SearchInput 0; }
+ bind "Ctrl h" { MoveFocusOrTab "left"; SwitchToMode "locked"; }
+ bind "Ctrl j" { MoveFocus "down"; SwitchToMode "locked"; }
+ bind "Ctrl k" { MoveFocus "up"; SwitchToMode "locked"; }
+ bind "Ctrl l" { MoveFocusOrTab "right"; SwitchToMode "locked"; }
+ bind "s" { SwitchToMode "normal"; }
+ }
+ search {
+ bind "c" { SearchToggleOption "CaseSensitivity"; }
+ bind "n" { Search "down"; }
+ bind "o" { SearchToggleOption "WholeWord"; }
+ bind "p" { Search "up"; }
+ bind "w" { SearchToggleOption "Wrap"; }
+ }
+ session {
+ bind "a" {
+ LaunchOrFocusPlugin "zellij:about" {
+ floating true
+ move_to_focused_tab true
+ }
+ SwitchToMode "locked"
+ }
+ bind "c" {
+ LaunchOrFocusPlugin "configuration" {
+ floating true
+ move_to_focused_tab true
+ }
+ SwitchToMode "locked"
+ }
+ bind "d" { Detach; }
+ bind "o" { SwitchToMode "normal"; }
+ bind "p" {
+ LaunchOrFocusPlugin "plugin-manager" {
+ floating true
+ move_to_focused_tab true
+ }
+ SwitchToMode "locked"
+ }
+ bind "w" {
+ LaunchOrFocusPlugin "session-manager" {
+ floating true
+ move_to_focused_tab true
+ }
+ SwitchToMode "locked"
+ }
+ }
+ shared_among "normal" "locked" {
+ bind "Alt left" { MoveFocusOrTab "left"; }
+ bind "Alt down" { MoveFocus "down"; }
+ bind "Alt up" { MoveFocus "up"; }
+ bind "Alt right" { MoveFocusOrTab "right"; }
+ bind "Alt +" { Resize "Increase"; }
+ bind "Alt -" { Resize "Decrease"; }
+ bind "Alt =" { Resize "Increase"; }
+ bind "Alt [" { PreviousSwapLayout; }
+ bind "Alt ]" { NextSwapLayout; }
+ bind "Alt f" { ToggleFloatingPanes; }
+ bind "Alt h" { MoveFocusOrTab "left"; }
+ bind "Alt j" { MoveFocus "down"; }
+ bind "Alt k" { MoveFocus "up"; }
+ bind "Alt l" { MoveFocusOrTab "right"; }
+ bind "Alt n" { NewPane; }
+ bind "Alt i" { MoveTab "left"; }
+ bind "Alt o" { MoveTab "right"; }
+
+ bind "Ctrl [" { MovePane "left"; }
+ bind "Ctrl ]" { MovePane "right"; }
+
+ // bind "Alt z" {
+ // // Disable the autolock plugin
+ // MessagePlugin "autolock" {payload "disable";};
+ // SwitchToMode "locked";
+ // }
+ }
+ shared_except "locked" "renametab" "renamepane" {
+ bind "Ctrl g" { SwitchToMode "locked"; }
+ // bind "Ctrl q" { Quit; }
+ }
+ shared_except "locked" "entersearch" {
+ bind "enter" { SwitchToMode "locked"; }
+ }
+ shared_except "locked" "entersearch" "renametab" "renamepane" {
+ bind "esc" { SwitchToMode "locked"; }
+ }
+ shared_except "locked" "entersearch" "renametab" "renamepane" "move" {
+ bind "m" { SwitchToMode "move"; }
+ }
+ shared_except "locked" "entersearch" "search" "renametab" "renamepane" "session" {
+ bind "o" { SwitchToMode "session"; }
+ }
+ shared_except "locked" "tab" "entersearch" "renametab" "renamepane" {
+ bind "t" { SwitchToMode "tab"; }
+ }
+ shared_except "locked" "tab" "scroll" "entersearch" "renametab" "renamepane" {
+ bind "s" { SwitchToMode "scroll"; }
+ }
+ shared_among "normal" "resize" "tab" "scroll" "prompt" "tmux" {
+ bind "p" { SwitchToMode "pane"; }
+ }
+ shared_except "locked" "resize" "pane" "tab" "entersearch" "renametab" "renamepane" {
+ bind "r" { SwitchToMode "resize"; }
+ }
+ shared_among "scroll" "search" {
+ bind "PageDown" { PageScrollDown; }
+ bind "PageUp" { PageScrollUp; }
+ bind "left" { PageScrollUp; }
+ bind "down" { ScrollDown; }
+ bind "up" { ScrollUp; }
+ bind "right" { PageScrollDown; }
+ bind "Ctrl b" { PageScrollUp; }
+ bind "Ctrl c" { ScrollToBottom; SwitchToMode "locked"; }
+ bind "d" { HalfPageScrollDown; }
+ bind "Ctrl f" { PageScrollDown; }
+ bind "h" { PageScrollUp; }
+ bind "j" { ScrollDown; }
+ bind "k" { ScrollUp; }
+ bind "l" { PageScrollDown; }
+ bind "u" { HalfPageScrollUp; }
+ }
+ entersearch {
+ bind "Ctrl c" { SwitchToMode "scroll"; }
+ bind "esc" { SwitchToMode "scroll"; }
+ bind "enter" { SwitchToMode "search"; }
+ }
+ renametab {
+ bind "esc" { UndoRenameTab; SwitchToMode "tab"; }
+ }
+ shared_among "renametab" "renamepane" {
+ bind "Ctrl c" { SwitchToMode "locked"; }
+ }
+ renamepane {
+ bind "esc" { UndoRenamePane; SwitchToMode "pane"; }
+ }
+}
+
+// Plugin aliases - can be used to change the implementation of Zellij
+// changing these requires a restart to take effect
+plugins {
+ about location="zellij:about"
+ compact-bar location="zellij:compact-bar"
+ configuration location="zellij:configuration"
+ filepicker location="zellij:strider" {
+ cwd "/"
+ }
+ plugin-manager location="zellij:plugin-manager"
+ session-manager location="zellij:session-manager"
+ status-bar location="zellij:status-bar"
+ strider location="zellij:strider"
+ tab-bar location="zellij:tab-bar"
+ welcome-screen location="zellij:session-manager" {
+ welcome_screen true
+ }
+
+ // // Define the "autolock" plugin.
+ // autolock location="file:~/.config/zellij/plugins/zellij-autolock.wasm" {
+ // // Enabled at start?
+ // is_enabled true
+ // // Lock when any open these programs open.
+ // triggers "nvim|vim|git|fzf|zoxide|atuin"
+ // // Reaction to input occurs after this many seconds. (default=0.3)
+ // // (An existing scheduled reaction prevents additional reactions.)
+ // reaction_seconds "0.3"
+ // // Print to Zellij log? (default=false)
+ // print_to_log true
+ // }
+}
+
+// Plugins to load in the background when a new session starts
+// eg. "file:/path/to/my-plugin.wasm"
+// eg. "https://example.com/my-plugin.wasm"
+load_plugins {
+ // autolock
+}
+
+// Use a simplified UI without special fonts (arrow glyphs)
+// Options:
+// - true
+// - false (Default)
+//
+// simplified_ui true
+
+// Choose the theme that is specified in the themes section.
+// Default: default
+//
+theme "nightfox"
+
+// Choose the base input mode of zellij.
+// Default: normal
+//
+default_mode "locked"
+
+// Choose the path to the default shell that zellij will use for opening new panes
+// Default: $SHELL
+//
+default_shell "zsh"
+
+// Choose the path to override cwd that zellij will use for opening new panes
+//
+// default_cwd "/tmp"
+
+// The name of the default layout to load on startup
+// Default: "default"
+//
+// default_layout "compact"
+
+// The folder in which Zellij will look for layouts
+// (Requires restart)
+//
+// layout_dir "/tmp"
+
+// The folder in which Zellij will look for themes
+// (Requires restart)
+//
+// theme_dir "/tmp"
+
+// Toggle enabling the mouse mode.
+// On certain configurations, or terminals this could
+// potentially interfere with copying text.
+// Options:
+// - true (default)
+// - false
+//
+// mouse_mode false
+
+// Toggle having pane frames around the panes
+// Options:
+// - true (default, enabled)
+// - false
+//
+// pane_frames false
+
+// When attaching to an existing session with other users,
+// should the session be mirrored (true)
+// or should each user have their own cursor (false)
+// (Requires restart)
+// Default: false
+//
+// mirror_session true
+
+// Choose what to do when zellij receives SIGTERM, SIGINT, SIGQUIT or SIGHUP
+// eg. when terminal window with an active zellij session is closed
+// (Requires restart)
+// Options:
+// - detach (Default)
+// - quit
+//
+on_force_close "detach"
+
+// Configure the scroll back buffer size
+// This is the number of lines zellij stores for each pane in the scroll back
+// buffer. Excess number of lines are discarded in a FIFO fashion.
+// (Requires restart)
+// Valid values: positive integers
+// Default value: 10000
+//
+// scroll_buffer_size 10000
+
+// Provide a command to execute when copying text. The text will be piped to
+// the stdin of the program to perform the copy. This can be used with
+// terminal emulators which do not support the OSC 52 ANSI control sequence
+// that will be used by default if this option is not set.
+// Examples:
+//
+// copy_command "xclip -selection clipboard" // x11
+// copy_command "wl-copy" // wayland
+// copy_command "pbcopy" // osx
+//
+// copy_command "pbcopy"
+
+// Choose the destination for copied text
+// Allows using the primary selection buffer (on x11/wayland) instead of the system clipboard.
+// Does not apply when using copy_command.
+// Options:
+// - system (default)
+// - primary
+//
+// copy_clipboard "primary"
+
+// Enable automatic copying (and clearing) of selection when releasing mouse
+// Default: true
+//
+// copy_on_select true
+
+// Path to the default editor to use to edit pane scrollbuffer
+// Default: $EDITOR or $VISUAL
+// scrollback_editor "/usr/bin/vim"
+
+// A fixed name to always give the Zellij session.
+// Consider also setting `attach_to_session true,`
+// otherwise this will error if such a session exists.
+// Default:
+//
+// session_name "My singleton session"
+
+// When `session_name` is provided, attaches to that session
+// if it is already running or creates it otherwise.
+// Default: false
+//
+// attach_to_session true
+
+// Toggle between having Zellij lay out panes according to a predefined set of layouts whenever possible
+// Options:
+// - true (default)
+// - false
+//
+// auto_layout false
+
+// Whether sessions should be serialized to the cache folder (including their tabs/panes, cwds and running commands) so that they can later be resurrected
+// Options:
+// - true (default)
+// - false
+//
+// session_serialization false
+
+// Whether pane viewports are serialized along with the session, default is false
+// Options:
+// - true
+// - false (default)
+//
+// serialize_pane_viewport false
+
+// Scrollback lines to serialize along with the pane viewport when serializing sessions, 0
+// defaults to the scrollback size. If this number is higher than the scrollback size, it will
+// also default to the scrollback size. This does nothing if `serialize_pane_viewport` is not true.
+//
+// scrollback_lines_to_serialize 10000
+
+// Enable or disable the rendering of styled and colored underlines (undercurl).
+// May need to be disabled for certain unsupported terminals
+// (Requires restart)
+// Default: true
+//
+// styled_underlines false
+
+// How often in seconds sessions are serialized
+//
+// serialization_interval 10000
+
+// Enable or disable writing of session metadata to disk (if disabled, other sessions might not know
+// metadata info on this session)
+// (Requires restart)
+// Default: false
+//
+// disable_session_metadata false
+
+// Enable or disable support for the enhanced Kitty Keyboard Protocol (the host terminal must also support it)
+// (Requires restart)
+// Default: true (if the host terminal supports it)
+//
+// support_kitty_keyboard_protocol false
+
+// Whether to stack panes when resizing beyond a certain size
+// Default: true
+//
+// stacked_resize false
+
+// Whether to show tips on startup
+// Default: true
+//
+show_startup_tips false
+
+// Whether to show release notes on first version run
+// Default: true
+//
+// show_release_notes false
diff --git a/roles/zellij/tasks/main.yml b/roles/zellij/tasks/main.yml
new file mode 100644
index 0000000..98d4b96
--- /dev/null
+++ b/roles/zellij/tasks/main.yml
@@ -0,0 +1,17 @@
+- name: Install zellij with cargo-binstall
+ command: "{{ dotfiles_user_home }}/.cargo/bin/cargo-binstall -y zellij"
+ args:
+ creates: "{{ dotfiles_user_home }}/.cargo/bin/zellij"
+ when: not ansible_check_mode
+
+- name: Create zellij config directory
+ file:
+ path: "{{ xdg_config_home }}/zellij"
+ state: directory
+
+- name: Link zellij config.kdl
+ file:
+ src: "{{ dotfiles_home }}/roles/zellij/files/config.kdl"
+ dest: "{{ xdg_config_home }}/zellij/config.kdl"
+ state: link
+ force: true
diff --git a/roles/zsh/tasks/debian.yml b/roles/zsh/tasks/debian.yml
index 7b19ce0..65ad319 100644
--- a/roles/zsh/tasks/debian.yml
+++ b/roles/zsh/tasks/debian.yml
@@ -1,6 +1,20 @@
+- name: Check if zsh is installed
+ command: dpkg-query -W -f='${Status}' zsh
+ register: zsh_check
+ ignore_errors: true
+ changed_when: false
+ become: false
+ check_mode: no
+
+- name: Report zsh installation status (Check Mode Only)
+ debug:
+ msg: "zsh is missing and would be installed"
+ when: ansible_check_mode and zsh_check.rc is defined and zsh_check.rc != 0
+
- name: Install zsh
apt:
name:
- zsh
become_method: sudo
become: true
+ when: not ansible_check_mode and zsh_check.rc is defined and zsh_check.rc != 0
diff --git a/roles/zsh/tasks/main.yml b/roles/zsh/tasks/main.yml
index 132c101..83adcb1 100644
--- a/roles/zsh/tasks/main.yml
+++ b/roles/zsh/tasks/main.yml
@@ -27,7 +27,7 @@
- name: check if ~/.config/zsh exists
stat:
- path: "{{ dotfiles_user_home }}/.config/zsh"
+ path: "{{ xdg_config_home }}/zsh"
register: zsh_config
- name: link .zshrc
@@ -40,7 +40,7 @@
- name: link backup .zshrc
file:
src: "{{ dotfiles_home }}/roles/zsh/files/zshrc"
- dest: "{{ dotfiles_user_home }}/.config/zsh/.zshrc"
+ dest: "{{ xdg_config_home }}/zsh/.zshrc"
state: link
force: true
when: zsh_config.stat.exists