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