Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Dotfiles

This will apply settings(dotfiles) for a large variety of programs. There are filters in place to selectivly apply them. Users are strongly encouraged to set their own project, layouts, aliases, etc.

The bare minimum would be:

Base Example:

# devbox.yml
---
tool_provider: "devbox"
projects:
  ars:
    name: "pbonh/ars"
    url: "https://github.com/pbonh/ars.git"
    path: "{{ code_checkout_path_github }}/pbonh/ars"
zellij_kdl_layouts:
  dotfiles:
    name: dotfiles
    cwd: "{{ ansible_env.HOME }}"
    template_info: "{{ zellij_kdl_template_info_default }}"
    layout_info: |
      tab name="Ars" split_direction="vertical" cwd="{{ projects['ars']['path'] }}" focus=true {
          pane {
              command "{{ nvim_exe }}"
              args "README.md"
              start_suspended true
          }
      }

Optional Git-Enabled Example:

# devbox-git.yml
---
tool_provider: "devbox"
dev_machine: true
git_name: "Your Name"
git_email: "your_name@address.com"
github_username: "username"
projects:
  ars:
    name: "pbonh/ars"
    url: "{{ github_ssh_url }}:pbonh/ars.git"
    path: "{{ code_checkout_path_github }}/pbonh/ars"

Optional SSH Overlay (YubiKey/FIDO2 defaults):

# devbox-git-yubikey.yml
---
dev_machine: true
git_name: "Your Name"
git_email: "your_name@address.com"
github_username: "username"
projects:
  ars:
    url: "{{ github_ssh_url }}:pbonh/ars.git"

# Uses role defaults:
# bash_ssh_fido2_enabled: true
# zsh_ssh_fido2_enabled: true
# dev_ssh_manage_fido2_stanza: true

Optional SSH Overlay (plain ssh-agent config):

# devbox-git-plain-ssh.yml
---
dev_machine: true
git_name: "Your Name"
git_email: "your_name@address.com"
github_username: "username"
projects:
  ars:
    url: "{{ github_ssh_url }}:pbonh/ars.git"

bash_ssh_fido2_enabled: false
zsh_ssh_fido2_enabled: false
dev_ssh_manage_fido2_stanza: false

The above settings can be applied by running:

ansible-pull -U https://github.com/pbonh/ars.git ars.yml --skip-tags "install" -e "@devbox.yml"

Apply optional Git/SSH + Git tooling config:

ansible-pull -U https://github.com/pbonh/ars.git dev.yml -e "@devbox-git.yml"
ansible-pull -U https://github.com/pbonh/ars.git dev.yml -e "@devbox-git-yubikey.yml"
ansible-pull -U https://github.com/pbonh/ars.git dev.yml -e "@devbox-git-plain-ssh.yml"

If checking out the ars repo directly, then create vars/local.yml, and add configuration there, no -e option necessary.

ansible-playbook playbook.yml --skip-tags "install"

Bitwarden CLI + wl-clipboard (Flatpak)

This is a quick way to copy passwords to the Wayland clipboard using the Flatpak Bitwarden CLI.

Set a Flatpak wrapper alias and unlock once per shell session:

alias bw='flatpak run --command=bw com.bitwarden.desktop'
export BW_SESSION="$(bw unlock --raw)"

Copy by exact item name:

bw get password "Item Name" | wl-copy

Search and pick an item ID (requires jq):

bw list items --search "query" | jq -r '.[] | "\(.id)\t\(.name)"'
bw get password <id> | wl-copy

Bashrc helpers

# ~/.bashrc
alias bw='flatpak run --command=bw com.bitwarden.desktop'

bw_unlock() {
  export BW_SESSION="$(bw unlock --raw)"
}

bw_copy_name() {
  bw get password "$1" | wl-copy
}

bw_search() {
  bw list items --search "$1" | jq -r '.[] | "\(.id)\t\(.name)"'
}

bw_copy_id() {
  bw get password "$1" | wl-copy
}

bw_pick_copy() {
  local selection
  selection="$(bw list items --search "$1" | jq -r '.[] | "\(.id)\t\(.name)"' | fzf)"
  [ -n "$selection" ] || return 1
  bw get password "${selection%%$'\t'*}" | wl-copy
}

Clipboard auto-clear (optional): check wl-copy --help for a --clear flag; if available, you can clear after a delay.

bw_copy_name_clear() {
  bw get password "$1" | wl-copy
  (sleep 20; wl-copy --clear) &
}

Available Tags

The dotfiles role supports selective application via tags. Use --tags to apply specific configurations or --skip-tags to exclude them.

Tool-Specific Tags

TagDescriptionJust Task
envEnvironment setup (shell configs, directories)just dot (default), just shell
bashBash configurationjust bash
zshZsh configurationjust zsh
tcshTcsh configurationjust tcsh
nushellNushell configurationjust nushell
scriptsShell scripts and aliasesjust scripts

Editor Tags

TagDescriptionJust Task
neovim-configNeovim configurationjust neovim
neovim-config-cleanClean and rebuild Neovim configjust rebuild-neovim
helix-configHelix editor configuration-
editorAll editor configurations-

Terminal Multiplexer Tags

TagDescriptionJust Task
zellijZellij configurationjust zellij
tmuxTmux configuration-
sessionAll session managers-

File Manager Tags

TagDescriptionJust Task
yaziYazi file manager configjust yazi
naviNavi cheatsheet tooljust navi
brootBroot file manager-
rangerRanger file manager-

AI Tool Tags

TagDescriptionJust Task
aiAll AI tools configurationjust ai
piPi coding agent config-
opencodeOpenCode configuration-
claudeClaude Code configuration-
codexCodex CLI configuration-
sidecarSidecar configuration-
superpowersSuperpowers skills-

Other Tags

TagDescriptionJust Task
direnvDirenv configuration-
joplinJoplin notes configuration-
bookmarksBookmarks configuration-
setupDirectory and environment setup-

Common Usage Patterns

Apply only shell configurations:

ansible-playbook ars.yml --tags "env" --skip-tags "install"

Apply only AI tool configurations:

ansible-playbook ars.yml --tags "ai" --skip-tags "install"

Apply only editor configurations:

ansible-playbook ars.yml --tags "editor" --skip-tags "install"

Exclude specific tools:

ansible-playbook ars.yml --skip-tags "install,neovim-config"