Compare commits

..

No commits in common. "c5340022536074e480ba51638646a793b032d070" and "ebe96406fbee6d327c33cd3269ebcdac98a6d396" have entirely different histories.

29 changed files with 277 additions and 614 deletions

View File

@ -1,8 +1,7 @@
# dotfiles # dotfiles
<!-- <!--
SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com> SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-FileCopyrightText: 2024 seven-beep <ebn@entreparentheses.xyz>
SPDX-License-Identifier: CC-BY-SA-4.0 SPDX-License-Identifier: CC-BY-SA-4.0
--> -->
@ -14,8 +13,6 @@ Dotfiles.
* [Description](#description) * [Description](#description)
* [Installation](#installation) * [Installation](#installation)
* [Salt](#salt) * [Salt](#salt)
* [Pillar](#pillar)
* [Pillar example](#pillar-example)
* [Script](#script) * [Script](#script)
* [Usage](#usage) * [Usage](#usage)
* [License](#license) * [License](#license)
@ -62,52 +59,6 @@ Install specific files in Dom0:
sudo qubesctl state.apply dotfiles.copy-dom0,dotfiles.copy-sh,dotfiles.copy-vim,dotfiles.copy-x11 sudo qubesctl state.apply dotfiles.copy-dom0,dotfiles.copy-sh,dotfiles.copy-vim,dotfiles.copy-x11
``` ```
#### Pillar
By default, all states are executed when applied. Each component can be be
deactivated by configuring the corresponding pillar data to a non true value.
You will need a top and a state file in your `pillar_roots`. If you followed
[Qusal's installation instructions](https://github.com/ben-grande/qusal/blob/main/docs/INSTALL.md),
it has already configured the setting for you using the value
`/srv/pillar/qusal`. What you can do, is selectively enable or disable
components.
For a complete example of a pillar state and a list of their corresponding
formulas states, please refer to [pillar.sls.example](pillar.sls.example).
##### Pillar example
On the following example, we will selectively disable only the `dom0`
component, therefore, the state `copy-dom0.sls` is not applied to `dom0`:
Create a pillar top to apply to all targets, write it to
`/srv/pillar/qusal/dotfiles.top`:
```yaml
base:
'*':
- qusal.dotfiles
```
Then, create a pillar state do disable only `dom0` states, write it to
`/srv/pillar/qusal/dotfiles.sls`:
```yaml
qusal:
dotfiles:
dom0: false
```
Add the pillar to the highstate:
```sh
sudo qubesctl top.enable qusal.dotfiles pillar=true
```
From now on, when calling the state `copy-dom0.sls`, it won't execute
anything.
### Script ### Script
You can simply deploy all configurations with: You can simply deploy all configurations with:

View File

@ -1,43 +1,21 @@
{# {#
SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com> SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-FileCopyrightText: 2024 seven-beep <ebn@entreparentheses.xyz>
SPDX-License-Identifier: AGPL-3.0-or-later SPDX-License-Identifier: AGPL-3.0-or-later
#} #}
{%- if salt["pillar.get"]("qusal:dotfiles:all", default=True) or
salt["pillar.get"]("qusal:dotfiles:dom0") or
salt["pillar.get"]("qusal:dotfiles:git") or
salt["pillar.get"]("qusal:dotfiles:gtk") or
salt["pillar.get"]("qusal:dotfiles:mutt") or
salt["pillar.get"]("qusal:dotfiles:net") or
salt["pillar.get"]("qusal:dotfiles:pgp") or
salt["pillar.get"]("qusal:dotfiles:sh") or
salt["pillar.get"]("qusal:dotfiles:ssh") or
salt["pillar.get"]("qusal:dotfiles:tmux") or
salt["pillar.get"]("qusal:dotfiles:vim") or
salt["pillar.get"]("qusal:dotfiles:x11")
-%}
include: include:
- {{ slsdotpath }}.copy-dom0 - .copy-dom0
- {{ slsdotpath }}.copy-git - .copy-git
- {{ slsdotpath }}.copy-gtk - .copy-gtk
- {{ slsdotpath }}.copy-mutt - .copy-net
- {{ slsdotpath }}.copy-net - .copy-pgp
- {{ slsdotpath }}.copy-pgp - .copy-sh
- {{ slsdotpath }}.copy-sh - .copy-ssh
- {{ slsdotpath }}.copy-ssh - .copy-tmux
- {{ slsdotpath }}.copy-tmux - .copy-vim
- {{ slsdotpath }}.copy-vim - .copy-x11
- {{ slsdotpath }}.copy-x11 - .copy-xfce
{%- else -%}
"{{ sls }}-was-disabled-by-pillar":
test.nop
{%- endif -%}
{# {#
Unfortunately salt.states.file does not keep permissions when using salt-ssh. Unfortunately salt.states.file does not keep permissions when using salt-ssh.

View File

@ -1,13 +1,9 @@
{# {#
SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com> SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-FileCopyrightText: 2024 seven-beep <ebn@entreparentheses.xyz>
SPDX-License-Identifier: AGPL-3.0-or-later SPDX-License-Identifier: AGPL-3.0-or-later
#} #}
{%- set qusal_dot = salt["pillar.get"]("qusal:dotfiles:all", default=True) -%}
{%- if salt["pillar.get"]("qusal:dotfiles:dom0", default=qusal_dot) -%}
{%- import "dom0/gui-user.jinja" as gui_user -%} {%- import "dom0/gui-user.jinja" as gui_user -%}
"{{ slsdotpath }}-copy-dom0-home": "{{ slsdotpath }}-copy-dom0-home":
@ -29,10 +25,3 @@ SPDX-License-Identifier: AGPL-3.0-or-later
- user: root - user: root
- group: root - group: root
- makedirs: True - makedirs: True
{%- else -%}
"{{ sls }}-was-disabled-by-pillar":
test.nop
{%- endif %}

View File

@ -1,13 +1,9 @@
{# {#
SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com> SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-FileCopyrightText: 2024 seven-beep <ebn@entreparentheses.xyz>
SPDX-License-Identifier: AGPL-3.0-or-later SPDX-License-Identifier: AGPL-3.0-or-later
#} #}
{%- set qusal_dot = salt["pillar.get"]("qusal:dotfiles:all", default=True) -%}
{%- if salt["pillar.get"]("qusal:dotfiles:git", default=qusal_dot) -%}
{%- import "dom0/gui-user.jinja" as gui_user -%} {%- import "dom0/gui-user.jinja" as gui_user -%}
"{{ slsdotpath }}-copy-git-home": "{{ slsdotpath }}-copy-git-home":
@ -69,10 +65,3 @@ SPDX-License-Identifier: AGPL-3.0-or-later
- mode: '0755' - mode: '0755'
- recurse: - recurse:
- mode - mode
{%- else -%}
"{{ sls }}-was-disabled-by-pillar":
test.nop
{%- endif %}

View File

@ -1,13 +1,9 @@
{# {#
SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com> SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-FileCopyrightText: 2024 seven-beep <ebn@entreparentheses.xyz>
SPDX-License-Identifier: AGPL-3.0-or-later SPDX-License-Identifier: AGPL-3.0-or-later
#} #}
{%- set qusal_dot = salt["pillar.get"]("qusal:dotfiles:all", default=True) -%}
{%- if salt["pillar.get"]("qusal:dotfiles:gtk", default=qusal_dot) -%}
{%- import "dom0/gui-user.jinja" as gui_user -%} {%- import "dom0/gui-user.jinja" as gui_user -%}
"{{ slsdotpath }}-copy-gtk-home": "{{ slsdotpath }}-copy-gtk-home":
@ -27,10 +23,3 @@ SPDX-License-Identifier: AGPL-3.0-or-later
- dir_mode: '0700' - dir_mode: '0700'
- user: root - user: root
- group: root - group: root
{%- else -%}
"{{ sls }}-was-disabled-by-pillar":
test.nop
{%- endif %}

View File

@ -1,13 +1,9 @@
{# {#
SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com> SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-FileCopyrightText: 2024 seven-beep <ebn@entreparentheses.xyz>
SPDX-License-Identifier: AGPL-3.0-or-later SPDX-License-Identifier: AGPL-3.0-or-later
#} #}
{%- set qusal_dot = salt["pillar.get"]("qusal:dotfiles:all", default=True) -%}
{%- if salt["pillar.get"]("qusal:dotfiles:mutt", default=qusal_dot) -%}
{%- import "dom0/gui-user.jinja" as gui_user -%} {%- import "dom0/gui-user.jinja" as gui_user -%}
"{{ slsdotpath }}-copy-mutt-home": "{{ slsdotpath }}-copy-mutt-home":
@ -43,10 +39,3 @@ SPDX-License-Identifier: AGPL-3.0-or-later
- mode: '0755' - mode: '0755'
- recurse: - recurse:
- mode - mode
{%- else -%}
"{{ sls }}-was-disabled-by-pillar":
test.nop
{%- endif %}

View File

@ -1,13 +1,9 @@
{# {#
SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com> SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-FileCopyrightText: 2024 seven-beep <ebn@entreparentheses.xyz>
SPDX-License-Identifier: AGPL-3.0-or-later SPDX-License-Identifier: AGPL-3.0-or-later
#} #}
{%- set qusal_dot = salt["pillar.get"]("qusal:dotfiles:all", default=True) -%}
{%- if salt["pillar.get"]("qusal:dotfiles:net", default=qusal_dot) -%}
{%- import "dom0/gui-user.jinja" as gui_user -%} {%- import "dom0/gui-user.jinja" as gui_user -%}
"{{ slsdotpath }}-copy-net-home": "{{ slsdotpath }}-copy-net-home":
@ -45,10 +41,3 @@ SPDX-License-Identifier: AGPL-3.0-or-later
- mode: '0755' - mode: '0755'
- recurse: - recurse:
- mode - mode
{%- else -%}
"{{ sls }}-was-disabled-by-pillar":
test.nop
{%- endif %}

View File

@ -1,13 +1,9 @@
{# {#
SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com> SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-FileCopyrightText: 2024 seven-beep <ebn@entreparentheses.xyz>
SPDX-License-Identifier: AGPL-3.0-or-later SPDX-License-Identifier: AGPL-3.0-or-later
#} #}
{%- set qusal_dot = salt["pillar.get"]("qusal:dotfiles:all", default=True) -%}
{%- if salt["pillar.get"]("qusal:dotfiles:pgp", default=qusal_dot) -%}
{%- import "dom0/gui-user.jinja" as gui_user -%} {%- import "dom0/gui-user.jinja" as gui_user -%}
"{{ slsdotpath }}-copy-pgp-home": "{{ slsdotpath }}-copy-pgp-home":
@ -31,10 +27,3 @@ SPDX-License-Identifier: AGPL-3.0-or-later
- group: root - group: root
{% endif -%} {% endif -%}
{%- else -%}
"{{ sls }}-was-disabled-by-pillar":
test.nop
{%- endif %}

View File

@ -1,13 +1,9 @@
{# {#
SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com> SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-FileCopyrightText: 2024 seven-beep <ebn@entreparentheses.xyz>
SPDX-License-Identifier: AGPL-3.0-or-later SPDX-License-Identifier: AGPL-3.0-or-later
#} #}
{%- set qusal_dot = salt["pillar.get"]("qusal:dotfiles:all", default=True) -%}
{%- if salt["pillar.get"]("qusal:dotfiles:sh", default=qusal_dot) -%}
{%- import "dom0/gui-user.jinja" as gui_user -%} {%- import "dom0/gui-user.jinja" as gui_user -%}
"{{ slsdotpath }}-copy-sh-home": "{{ slsdotpath }}-copy-sh-home":
@ -47,10 +43,3 @@ SPDX-License-Identifier: AGPL-3.0-or-later
- dir_mode: '0755' - dir_mode: '0755'
- recurse: - recurse:
- mode - mode
{%- else -%}
"{{ sls }}-was-disabled-by-pillar":
test.nop
{%- endif %}

View File

@ -1,13 +1,9 @@
{# {#
SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com> SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-FileCopyrightText: 2024 seven-beep <ebn@entreparentheses.xyz>
SPDX-License-Identifier: AGPL-3.0-or-later SPDX-License-Identifier: AGPL-3.0-or-later
#} #}
{%- set qusal_dot = salt["pillar.get"]("qusal:dotfiles:all", default=True) -%}
{%- if salt["pillar.get"]("qusal:dotfiles:ssh", default=qusal_dot) -%}
{%- import "dom0/gui-user.jinja" as gui_user -%} {%- import "dom0/gui-user.jinja" as gui_user -%}
"{{ slsdotpath }}-copy-ssh-home": "{{ slsdotpath }}-copy-ssh-home":
@ -28,10 +24,3 @@ SPDX-License-Identifier: AGPL-3.0-or-later
- dir_mode: '0700' - dir_mode: '0700'
- user: root - user: root
- group: root - group: root
{%- else -%}
"{{ sls }}-was-disabled-by-pillar":
test.nop
{%- endif %}

View File

@ -1,13 +1,9 @@
{# {#
SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com> SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-FileCopyrightText: 2024 seven-beep <ebn@entreparentheses.xyz>
SPDX-License-Identifier: AGPL-3.0-or-later SPDX-License-Identifier: AGPL-3.0-or-later
#} #}
{%- set qusal_dot = salt["pillar.get"]("qusal:dotfiles:all", default=True) -%}
{%- if salt["pillar.get"]("qusal:dotfiles:tmux", default=qusal_dot) -%}
{%- import "dom0/gui-user.jinja" as gui_user -%} {%- import "dom0/gui-user.jinja" as gui_user -%}
"{{ slsdotpath }}-copy-tmux-home": "{{ slsdotpath }}-copy-tmux-home":
@ -41,10 +37,3 @@ SPDX-License-Identifier: AGPL-3.0-or-later
- mode: '0755' - mode: '0755'
- recurse: - recurse:
- mode - mode
{%- else -%}
"{{ sls }}-was-disabled-by-pillar":
test.nop
{%- endif %}

View File

@ -1,13 +1,9 @@
{# {#
SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com> SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-FileCopyrightText: 2024 seven-beep <ebn@entreparentheses.xyz>
SPDX-License-Identifier: AGPL-3.0-or-later SPDX-License-Identifier: AGPL-3.0-or-later
#} #}
{%- set qusal_dot = salt["pillar.get"]("qusal:dotfiles:all", default=True) -%}
{%- if salt["pillar.get"]("qusal:dotfiles:vim", default=qusal_dot) -%}
{%- import "dom0/gui-user.jinja" as gui_user -%} {%- import "dom0/gui-user.jinja" as gui_user -%}
"{{ slsdotpath }}-copy-vim-home": "{{ slsdotpath }}-copy-vim-home":
@ -27,10 +23,3 @@ SPDX-License-Identifier: AGPL-3.0-or-later
- dir_mode: '0700' - dir_mode: '0700'
- user: root - user: root
- group: root - group: root
{%- else -%}
"{{ sls }}-was-disabled-by-pillar":
test.nop
{%- endif %}

View File

@ -1,13 +1,9 @@
{# {#
SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com> SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-FileCopyrightText: 2024 seven-beep <ebn@entreparentheses.xyz>
SPDX-License-Identifier: AGPL-3.0-or-later SPDX-License-Identifier: AGPL-3.0-or-later
#} #}
{%- set qusal_dot = salt["pillar.get"]("qusal:dotfiles:all", default=True) -%}
{%- if salt["pillar.get"]("qusal:dotfiles:x11", default=qusal_dot) -%}
{%- import "dom0/gui-user.jinja" as gui_user -%} {%- import "dom0/gui-user.jinja" as gui_user -%}
"{{ slsdotpath }}-copy-x11-home": "{{ slsdotpath }}-copy-x11-home":
@ -31,10 +27,3 @@ SPDX-License-Identifier: AGPL-3.0-or-later
- group: root - group: root
- keep_symlinks: True - keep_symlinks: True
- force_symlinks: True - force_symlinks: True
{%- else -%}
"{{ sls }}-was-disabled-by-pillar":
test.nop
{%- endif %}

29
copy-xfce.sls Normal file
View File

@ -0,0 +1,29 @@
{#
SPDX-FileCopyrightText: 2024 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-License-Identifier: AGPL-3.0-or-later
#}
{%- import "dom0/gui-user.jinja" as gui_user -%}
"{{ slsdotpath }}-copy-xfce-home":
file.recurse:
- name: {{ gui_user.gui_user_home }}/
- source: salt://{{ slsdotpath }}/files/xfce/
- file_mode: '0644'
- dir_mode: '0700'
- user: {{ gui_user.gui_user }}
- group: {{ gui_user.gui_user }}
- keep_symlinks: True
- force_symlinks: True
"{{ slsdotpath }}-copy-xfce-skel":
file.recurse:
- name: /etc/skel
- source: salt://{{ slsdotpath }}/files/xfce/
- file_mode: '0644'
- dir_mode: '0700'
- user: root
- group: root
- keep_symlinks: True
- force_symlinks: True

9
copy-xfce.top Normal file
View File

@ -0,0 +1,9 @@
{#
SPDX-FileCopyrightText: 2024 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-License-Identifier: AGPL-3.0-or-later
#}
base:
'*':
- dotfiles.copy-xfce

View File

@ -19,7 +19,6 @@ if ! command -v sensors >/dev/null; then
fi fi
redraw(){ redraw(){
# shellcheck disable=SC2312
stty size </dev/null 2>&1 >&2 | read -r LINES COLUMNS stty size </dev/null 2>&1 >&2 | read -r LINES COLUMNS
tput ed home tput ed home
} }
@ -45,7 +44,7 @@ get_header(){
if test "${sensors}" != "0"; then if test "${sensors}" != "0"; then
sensors | grep -E -e "^(fan[1-9]+|[C|G]PU|temp[1-9]+):" | sensors | grep -E -e "^(fan[1-9]+|[C|G]PU|temp[1-9]+):" |
grep -v -e "0 RPM" -e "+0\.0.C" | grep -v -e "0 RPM" -e "+0\.0.C" |
tr -s "\t" " " | tr "\n" "\t" | sed "s/\s\+$/\n/" || true tr -s "\t" " " | tr "\n" "\t" | sed "s/\s\+$/\n/"
fi fi
printf '%s%-40s %-6s %6s %8s%s\n' "${bold}" 'Qube' 'State' 'CPU(%)' \ printf '%s%-40s %-6s %6s %8s%s\n' "${bold}" 'Qube' 'State' 'CPU(%)' \
'MEM(MiB)' "${nobold}" 'MEM(MiB)' "${nobold}"

View File

@ -1,35 +1,30 @@
#!/bin/sh #!/bin/sh
## SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com> ## SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. <ben.grande.b@gmail.com>
## ##
## SPDX-License-Identifier: AGPL-3.0-or-later ## SPDX-License-Identifier: AGPL-3.0-or-later
set -eu set -eu
if command -v delta >/dev/null; then if command -v delta >/dev/null; then
exec delta -- "${@}" exec delta "${@}"
else else
: "${DIFF_HIGHLIGHT_SOURCE:=/usr/share/doc/git/contrib/diff-highlight}" : "${DIFF_HIGHLIGHT_SOURCE:=/usr/share/doc/git/contrib/diff-highlight}"
: "${DIFF_HIGHLIGHT_EXEC:=/usr/share/git-core/contrib/diff-highlight}" : "${DIFF_HIGHLIGHT_EXEC:=/usr/share/git-core/contrib/diff-highlight}"
git_less(){
exec less -RS -- "${@}"
}
## Debian. ## Debian.
if command -v perl >/dev/null && if command -v perl >/dev/null &&
test -f "${DIFF_HIGHLIGHT_SOURCE}/DiffHighlight.pm" && test -f "${DIFF_HIGHLIGHT_SOURCE}/DiffHighlight.pm" &&
test -f "${DIFF_HIGHLIGHT_SOURCE}/diff-highlight.perl" test -f "${DIFF_HIGHLIGHT_SOURCE}/diff-highlight.perl"
then then
exec perl -I "${DIFF_HIGHLIGHT_SOURCE}" -MDiffHighlight -- \ exec perl -I "${DIFF_HIGHLIGHT_SOURCE}" -MDiffHighlight -- \
"${DIFF_HIGHLIGHT_SOURCE}/diff-highlight.perl" | git_less "${DIFF_HIGHLIGHT_SOURCE}/diff-highlight.perl" | less -RS
exit
## Fedora. ## Fedora.
elif command -v perl >/dev/null && test -f "${DIFF_HIGHLIGHT_EXEC}" elif command -v perl >/dev/null && test -f "${DIFF_HIGHLIGHT_EXEC}"
then then
exec "${DIFF_HIGHLIGHT_EXEC}" | git_less exec "${DIFF_HIGHLIGHT_EXEC}" | less -RS
exit
fi fi
git_less "${@}" exec less -RS "${@}"
fi fi

View File

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
## ##
## SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com> ## SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. <ben.grande.b@gmail.com>
## ##
## SPDX-License-Identifier: AGPL-3.0-or-later ## SPDX-License-Identifier: AGPL-3.0-or-later
## ##
@ -28,14 +28,14 @@ test -f ./setup.sh ||
if test "${qube}" = "dom0"; then if test "${qube}" = "dom0"; then
sh ./dotfiles/setup.sh sh ./dotfiles/setup.sh
user="$(getent group qubes | awk -F "[:,]" '{print $4}')" user_name="$(getent group qubes | awk -F "[:,]" '{print $4}')"
home="$(getent passwd "${user}" | awk -F ":" '{print $6}')" user_home="$(getent passwd "${user_name}" | awk -F ":" '{print $6}')"
sudo -u "${user}" mkdir -pv -- "${home}/.cache" sudo -u "${user_name}" mkdir -pv -- "${user_home}/.cache"
tmpdir="$(sudo -u "${user}" -- mktemp -d -- "${home}/.cache/XXXXXX")" tmpdir="$(sudo -u "${user_name}" -- mktemp -d -- "${user_home}/.cache/XXXXXX")"
trap 'rm -rf -- "${tmpdir}"' EXIT INT HUP QUIT ABRT trap 'rm -rf -- "${tmpdir}"' EXIT INT HUP QUIT ABRT
cp -r -- ./dotfiles "${tmpdir}" cp -r -- ./dotfiles "${tmpdir}"
chown -R -- "${user}:${user}" "${tmpdir}" chown -R -- "${user_name}:${user_name}" "${tmpdir}"
sudo -u "${user}" -- "${tmpdir}/dotfiles/setup.sh" sudo -u "${user_name}" -- "${tmpdir}/dotfiles/setup.sh"
exit exit
fi fi

View File

@ -1,6 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
## SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com> ## SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
## ##
## SPDX-License-Identifier: AGPL-3.0-or-later ## SPDX-License-Identifier: AGPL-3.0-or-later
@ -60,17 +60,15 @@ _reset_line() {
## On pending input, assume it's been echoed and we're not in first column. ## On pending input, assume it's been echoed and we're not in first column.
## Otherwise ask the terminal for current column and read it from input. ## Otherwise ask the terminal for current column and read it from input.
if read -t 0 || { if read -t 0 || {
# shellcheck disable=SC2154 IFS='[;' read -s -r -d'R' -p$'\033[6n' _ _ cur_y && [[ ${cur_y} != 1 ]]
IFS='[;' read -s -r -d'R' -p "${_t_u7}" _ _ cur_y && [[ ${cur_y} != 1 ]]
} }
then then
unset cur_y unset cur_y
## Print line ending char with reversed video and end with newline. ## Print line ending char with reversed video and end with newline.
if test "${color_prompt-}" = "yes"; then if test "${color_prompt-}" = "yes"; then
# shellcheck disable=SC2154 printf '%b' "\033[41m\033[0m\033[7m%\033[0m\n\r"
printf '%s\n\r' "${_t_sgr0}${_t_rev}%${_t_sgr0}"
else else
printf '%s\n\r' "%" printf '%b' "%\n\r"
fi fi
fi fi
} }
@ -78,11 +76,9 @@ _reset_line() {
_print_ec(){ _print_ec(){
test "${_ec_ps1}" = "0" && return test "${_ec_ps1}" = "0" && return
if test "${color_prompt:-}" = "yes"; then if test "${color_prompt:-}" = "yes"; then
# shellcheck disable=SC2154 printf '%b%s%b' "(\001\033[31m\002" "${_ec_ps1}" "\001\033[0m\002)"
printf '(\001%s\002%s\001%s\002)' "${_t_setaf_1}" "${_ec_ps1}" \
"${_t_sgr0}"
else else
printf '(%s)' "${_ec_ps1}" printf '%s' "(${_ec_ps1})"
fi fi
unset _ec_ps1 unset _ec_ps1
} }
@ -94,10 +90,10 @@ newline=$'\n'
# shellcheck disable=SC2154 # shellcheck disable=SC2154
if test "${color_prompt:-}" = "yes"; then if test "${color_prompt:-}" = "yes"; then
# shellcheck disable=SC2154 # shellcheck disable=SC2154
PS1="\$(_reset_line)\$(resize-terminal)\[${_t_setaf_5}\][\[${_t_sgr0}\]" PS1="\$(_reset_line)\$(resize-terminal)\[\033[35m\][\[${reset_color}\]"
PS1="${PS1}${debian_chroot:+(${debian_chroot})}\[${usercolor}\]\u@\h " PS1="${PS1}${debian_chroot:+(${debian_chroot})}\[${usercolor}\]\u@\h "
PS1="${PS1}\[${dircolor}\]\w\[${_t_sgr0}\]\$(_git_prompt_info)" PS1="${PS1}\[${dircolor}\]\w\[${reset_color}\]\$(_git_prompt_info)"
PS1="${PS1}\[${_t_setaf_5}\]]\[${_t_sgr0}\]${newline-}\$(_print_ec)" PS1="${PS1}\[\033[35m\]]\[${reset_color}\]${newline-}\$(_print_ec)"
PS1="${PS1}${ps1_symbol} " PS1="${PS1}${ps1_symbol} "
else else
PS1="\$(_reset_line)\$(resize-terminal)" PS1="\$(_reset_line)\$(resize-terminal)"
@ -128,7 +124,7 @@ if ! shopt -oq posix; then
source_readable /usr/share/bash-completion/bash_completion source_readable /usr/share/bash-completion/bash_completion
fi fi
unset newline ps1_symbol dircolor usercolor unset newline ps1_symbol dircolor reset_color usercolor
## }}} ## }}}
## {{{ Plugins ## {{{ Plugins
if has zoxide; then if has zoxide; then

View File

@ -1,7 +1,7 @@
#!/bin/sh #!/bin/sh
## SPDX-FileCopyrightText: 2004 - 2022 Tim Pope <https://tpo.pe> ## SPDX-FileCopyrightText: 2004 - 2022 Tim Pope <https://tpo.pe>
## SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com> ## SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. <ben.grande.b@gmail.com>
## ##
## SPDX-License-Identifier: AGPL-3.0-or-later ## SPDX-License-Identifier: AGPL-3.0-or-later
@ -34,12 +34,10 @@ alias cp="cp -i"
alias mv="mv -i" alias mv="mv -i"
alias ls="ls -hF --group-directories-first --color=auto" alias ls="ls -hF --group-directories-first --color=auto"
if has lsblk; then if has lsblk; then
_lsblk_options="NAME,FSTYPE,LABEL,SIZE,FSAVAIL,FSUSE%,MOUNTPOINT" lsblk_options="NAME,FSTYPE,LABEL,SIZE,FSAVAIL,FSUSE%,MOUNTPOINT"
# shellcheck disable=SC2139 alias lsblk='lsblk -o ${lsblk_options}'
alias lsblk="lsblk -o ${_lsblk_options}" alias lsblku='lsblk -o ${lsblk_options},UUID,PARTUUID'
# shellcheck disable=SC2139 unset lsblk_options
alias lsblku="lsblk -o ${_lsblk_options},UUID,PARTUUID"
unset _lsblk_options
fi fi
if ! grep --color 2>&1 | grep -qE -e "(unrecognized|unknown) option" && if ! grep --color 2>&1 | grep -qE -e "(unrecognized|unknown) option" &&
! grep --exclude 2>&1 | grep -qE -e "(unrecognized|unknown) option" ! grep --exclude 2>&1 | grep -qE -e "(unrecognized|unknown) option"
@ -113,8 +111,7 @@ has qubesctl && {
alias qctlu="qctl --skip-dom0 --targets" alias qctlu="qctl --skip-dom0 --targets"
qctlus(){ qctlus(){
test -n "${2-}" || return 1 test -n "${2-}" || return 1
# shellcheck disable=SC3058 qubesctl --skip-dom0 --targets "${1}" state.apply "${@}"
qubesctl --skip-dom0 --targets "${1}" state.apply "${@#"${1}"}"
} }
} }
has gpg && alias gpgs="gpg --show-keys" has gpg && alias gpgs="gpg --show-keys"
@ -159,196 +156,24 @@ fi
## }}} ## }}}
## }}} ## }}}
## {{{ Prompt ## {{{ Prompt
# shellcheck disable=SC2034 ## Set ability to color terminal.
_get_term_cap(){ # shellcheck disable=2034
## SGR case "${TERM-}" in
_t_colors="$(tput colors)" 2>/dev/null || true iterm|*-truecolor)
_t_sgr0="$(tput sgr0)" 2>/dev/null || true export COLORTERM=truecolor; color_prompt=yes
_t_bold="$(tput bold)" 2>/dev/null || true ;;
_t_dim="$(tput dim)" 2>/dev/null || true *-color|*-256color|linux*)
_t_sitm="$(tput sitm)" 2>/dev/null || true color_prompt=yes
_t_smul="$(tput smul)" 2>/dev/null || true ;;
_t_blink="$(tput blink)" 2>/dev/null || true ""|dumb|vt100*|vt220*)
_t_rev="$(tput rev)" 2>/dev/null || true color_prompt=no
_t_smso="$(tput rmso)" 2>/dev/null || true ;;
_t_invis="$(tput invis)" 2>/dev/null || true *)
_t_ritm="$(tput ritm)" 2>/dev/null || true color_prompt=no
_t_rmul="$(tput rmul)" 2>/dev/null || true ;;
_t_rmso="$(tput rmso)" 2>/dev/null || true
_t_setaf_0="$(tput setaf 0)" 2>/dev/null || true
_t_setaf_1="$(tput setaf 1)" 2>/dev/null || true
_t_setaf_2="$(tput setaf 2)" 2>/dev/null || true
_t_setaf_3="$(tput setaf 3)" 2>/dev/null || true
_t_setaf_4="$(tput setaf 4)" 2>/dev/null || true
_t_setaf_5="$(tput setaf 5)" 2>/dev/null || true
_t_setaf_6="$(tput setaf 6)" 2>/dev/null || true
_t_setaf_7="$(tput setaf 7)" 2>/dev/null || true
_t_setab_0="$(tput setab 0)" 2>/dev/null || true
_t_setab_1="$(tput setab 1)" 2>/dev/null || true
_t_setab_2="$(tput setab 2)" 2>/dev/null || true
_t_setab_3="$(tput setab 3)" 2>/dev/null || true
_t_setab_4="$(tput setab 4)" 2>/dev/null || true
_t_setab_5="$(tput setab 5)" 2>/dev/null || true
_t_setab_6="$(tput setab 6)" 2>/dev/null || true
_t_setab_7="$(tput setab 7)" 2>/dev/null || true
## Movement
_t_ed="$(tput ed)" 2>/dev/null || true
_t_el="$(tput el)" 2>/dev/null || true
_t_home="$(tput home)" 2>/dev/null || true
_t_cnorm="$(tput cnorm)" 2>/dev/null || true
_t_civis="$(tput civis)" 2>/dev/null || true
_t_smcup="$(tput smcup)" 2>/dev/null || true
_t_rmcup="$(tput rmcup)" 2>/dev/null || true
_t_sc="$(tput sc)" 2>/dev/null || true
_t_clear="$(tput clear)" 2>/dev/null || true
## Extra
_t_cub1="$(tput cub1)" 2>/dev/null || true
_t_cud1="$(tput cud1)" 2>/dev/null || true
_t_ind="$(tput ind)" 2>/dev/null || true
_t_cr="$(tput cr)" 2>/dev/null || true
_t_u7="$(tput u7)" 2>/dev/null || true
_t_u8="$(tput u8)" 2>/dev/null || true
_t_u9="$(tput u9)" 2>/dev/null || true
}
_get_color_support(){
if test -n "${NO_COLOR-}"; then
color_support=-1
return 0
fi
case "${COLORTERM-}" in
truecolor|24bit)
color_support=$((1 << 24))
return 0
;;
*) ;;
esac
if has tput; then
if tput RGB >/dev/null 2>&1; then
color_support=$((1 << 24))
return 0
fi
color_support=${_t_colors}
if test -n "${color_support}"; then
return 0
fi
fi
## Color query from terminfo is relatively new, only available in ncurses
## since 2018. Below is a match based on terminfo revision 1.909 to query
## number of supported colors in case the terminfo database can't be
## queried.
case "${TERM-}" in
*?-truecolor*|*?-direct*)
## TODO: Some terminals such as iTerm should be in this list.
color_support=$((1 << 24))
;;
*?-256color*|absolute|alacritty|Apple_Terminal|domterm|iterm|iterm2|\
iTerm2.app|iTerm.app|kitty|mintty|ms-terminal|nsterm|nsterm-build309|\
nsterm-build326|nsterm-build343|nsterm-build361|nsterm-build400|\
nsterm-build440|scrt|securecrt|terminator|terminology|terminology-0.6.1|\
terminology-1.0.0|terminology-1.8.1|termite|vscode|xterm+256setaf|\
xterm.js)
color_support=256
;;
*?-88color*|rxvt-unicode)
color_support=88
;;
hpterm-color|wy370|wy370-101k|wy370-105k|wy370-EPC|wy370-nk|wy370-rv|\
wy370-vb|wy370-w|wy370-wvb|wyse370)
color_support=64
;;
d430c-dg-ccc|d430c-unix-25-ccc|d430c-unix-ccc|d430c-unix-s-ccc|\
d430c-unix-sr-ccc|d430c-unix-w-ccc|d430-dg-ccc|d430-unix-25-ccc|\
d430-unix-ccc|d430-unix-s-ccc|d430-unix-sr-ccc|d430-unix-w-ccc|dg+ccc|\
dgunix+ccc)
color_support=52
;;
*?-16color*|amiga-vnc|atari-color|atari_st-color|at-color|d430c-dg|\
d430c-unix|d430c-unix-25|d430c-unix-s|d430c-unix-sr|d430c-unix-w|d430-dg|\
d430-unix|d430-unix-25|d430-unix-s|d430-unix-sr|d430-unix-w|d470|d470-7b|\
d470c|d470c-7b|d470c-dg|d470-dg|dg+color|dg+fixed|dgmode+color|\
dgunix+fixed|hp2397|hp2397a|hp+color|ncr260wy325pp|ncr260wy325wpp|\
ncr260wy350pp|ncr260wy350wpp|nsterm-7-c|nsterm-7-c-s|nsterm-acs-c|\
nsterm-acs-c-s|nsterm-bce|nsterm+c|nsterm-c|nsterm-c-7|nsterm-c-acs|\
nsterm-c-s|nsterm-c-s-7|nsterm-c-s-acs|st52-color|tt52|tw52|\
tw52-color)
color_support=16
;;
*?-color*|color_xterm|386at|aixterm|alacritty+common|ansi|ansi80x25|\
ansi80x25-raw|ansi80x30|ansi80x43|ansi80x50|ansi80x60|ansi-emx|ansil|\
ansis|ansi.sys|ansi.sysk|ansisysk|ansi.sys-old|ansiw|arm100|arm100-am|\
arm100-w|arm100-wam|at386|aterm|att6386|beterm|bsdos-pc|bsdos-pc-nobold|\
bsdos-ppc|bterm|cons25|cons25-debian|cons25-iso8859|cons25-koi8-r|\
cons25l1|cons25r|cons25w|cons30|cons43|cons50|cons50-iso8859|\
cons50-koi8r|cons50l1|cons50r|cons60|cons60-iso|cons60-koi8r|cons60l1|\
cons60r|crt|crt-vt220|ctrm|cx|cx100|cygwin|cygwinB19|cygwinDBG|d220|\
d220-7b|d220-dg|d230|d230c|d230c-dg|d230-dg|darwin|darwin-100x37|\
darwin-112x37|darwin-128x40|darwin-128x48|darwin-144x48|darwin-160x64|\
darwin-200x64|darwin-200x75|darwin-256x96|darwin-80x25|darwin-80x30|\
darwin-90x30|darwin-b|darwin-f|darwin-f2|decansi|djgpp|djgpp204|dtterm|\
dumb-emacs-ansi|dvtm|emots|emx-base|Eterm|gnome|gnome-2007|gnome-2008|\
gnome-2012|gnome-fc5|gnome-rh62|gnome-rh72|gnome-rh80|gnome-rh90|gs6300|\
hft|hft-c|hft-c-old|hft-old|hterm|hurd|i3164|ibm3164|ibm5081|ibm5154|\
ibm6154|ibm8503|ibm8507|ibm8512|ibm8513|ibm8514|ibm8604|ibmpc3|ibmpc3r|\
interix|interix-nti|jaixterm|jfbterm|kon|kon2|konsole|konsole-base|\
konsole-linux|konsole-solaris|konsole-vt100|konsole-vt420pc|konsole-xf3x|\
konsole-xf4x|kterm|kterm-co|kvt|linux|linux2.2|linux2.6|linux2.6.26|\
linux3.0|linux-basic|linux-c|linux-c-nc|linux-koi8|linux-koi8r|linux-lat|\
linux-m1|linux-nic|linux-s|linux-vt|mgt|mgterm|minitel1|minitel1b|minix|\
minix-3.0|mintty+common|mlterm|mlterm2|mlterm3|mosh|mrxvt|ms-vt100+|\
ms-vt-utf8|mvterm|nansi.sys|nansisys|nansi.sysk|nansisysk|ncr260intan|\
ncr260intpp|ncr260intwan|ncr260intwpp|ncsa|ncsa-ns|ncsa-vt220|netbsd6|\
nsterm-7|nsterm-7-s|nsterm-acs|nsterm-acs-s|nsterm+c41|nsterm-old|\
nsterm-s|nsterm-s-7|nsterm-s-acs|ntconsole|ntconsole-100|\
ntconsole-100-nti|ntconsole-25|ntconsole-25-nti|ntconsole-25-w|\
ntconsole-25-w-vt|ntconsole-35|ntconsole-35-nti|ntconsole-35-w|\
ntconsole-50|ntconsole-50-nti|ntconsole-50-w|ntconsole-60|\
ntconsole-60-nti|ntconsole-60-w|ntconsole-w|ntconsole-w-vt|nxterm|old-st|\
opennt|opennt-100|opennt-100-nti|opennt-25|opennt-25-nti|opennt-25-w|\
opennt-25-w-vt|opennt-35|opennt-35-nti|opennt-35-w|opennt-50|\
opennt-50-nti|opennt-50-w|opennt-60|opennt-60-nti|opennt-60-w|opennt-nti|\
opennt-w|opennt-w-vt|pc3|pc3-bold|pc3r|pcansi|pcansi-25|pcansi25|\
pcansi-33|pcansi33|pcansi-43|pcansi43|pccon|pccon0|pc-minix|putty|\
putty-m1|putty-noapp|putty-sco|putty-screen|putty-vt100|qansi|qansi-g|\
qansi-m|qansi-t|qansi-w|qnx|qnx4|qnxm|qnxt|qnxt2|qnxt4|qnxw|rxvt|\
rxvt-cygwin|rxvt-cygwin-native|rxvt-xpm|scoansi|scoansi-new|scoansi-old|\
screen|screen4|screen5|screen-base|screen-bce|screen-bce.Eterm|\
screen-bce.gnome|screen-bce.konsole|screen-bce.linux|screen-bce.mrxvt|\
screen-bce.rxvt|screen-bce.xterm-new|screen.Eterm|screen.gnome|\
screen.konsole|screen.linux|screen.linux-m1|screen.linux-s|\
screen.minitel1|screen.minitel1b|screen.mlterm|screen.mrxvt|screen.putty|\
screen.putty-m1|screen.rxvt|screen-s|screen.teraterm|screen.vte|screen-w|\
screen.xterm-new|screen.xterm-xfree86|simpleterm|st|st-0.6|st-0.7|st-0.8|\
stterm|tek4205|teken|teken-2018|teken-2022|teken-sc|teken-vt|teraterm|\
teraterm2.3|teraterm4.59|teraterm4.97|ti928|ti928-8|ti_ansi|tmux|tw100|\
uwin|vt100+|vte|vte-2007|vte-2008|vte-2012|vte-2014|vte-2017|vte-2018|\
vtnt|vt-utf8|vv100|vwmterm|wsvt25|wsvt25m|wy350|wy350-vb|wy350-w|\
wy350-wvb|wyse350|wyse350-vb|wyse350-w|wyse350-wvb|xfce|xiterm|xnuppc|\
xnuppc-100x37|xnuppc-112x37|xnuppc-128x40|xnuppc-128x48|xnuppc-144x48|\
xnuppc-160x64|xnuppc-200x64|xnuppc-200x75|xnuppc-256x96|xnuppc-80x25|\
xnuppc-80x30|xnuppc-90x30|xnuppc-b|xnuppc+c|xnuppc-f|xnuppc-f2|xterm|\
xterm1|xterm-1002|xterm-1003|xterm-1005|xterm-1006|xterm-8bit|\
xterm-basic|xtermc|xterm-debian|xterm-hp|xterm-new|xterm-nic|xterm-noapp|\
xterm+nofkeys|xterm-p370|xterm-p371|xterm-sco|xterms-sun|xterm-sun|\
xterm-utf8|xterm-vt220|xterm-x10mouse|xterm-x11hilite|xterm-x11mouse|\
xterm-xf86-v32|xterm-xf86-v33|xterm-xf86-v333|xterm-xf86-v40|\
xterm-xf86-v43|xterm-xf86-v44|xterm-xfree86|xterm-xi|xwsh)
color_support=8
;;
*)
color_support=-1
;;
esac
}
_get_term_cap
_get_color_support
case "${color_support}" in
$((1 << 24))) export COLORTERM=truecolor; color_prompt=yes;;
[1-9]*) color_prompt=yes;;
*) color_prompt=no;;
esac esac
## Colorise "ls" output.
if test "${color_prompt-}" = "yes"; then if test "${color_prompt-}" = "yes"; then
if has dircolors; then if has dircolors; then
## Use dircolors if available. ## Use dircolors if available.
@ -363,8 +188,7 @@ if test "${color_prompt-}" = "yes"; then
## Fix bold on some terminals. ## Fix bold on some terminals.
case "${TERM-}" in case "${TERM-}" in
xterm*|screen*) xterm*|screen*)
LS_COLORS="$(printf '%s' "${LS_COLORS}" | LS_COLORS="$(printf '%s\n' "${LS_COLORS}" | sed -e 's/01;3/00;9/g')"
sed -e 's/01;3\([0-9]\)/00;9\1/g')"
;; ;;
*) ;; *) ;;
esac esac
@ -375,21 +199,22 @@ if test "${color_prompt-}" = "yes"; then
export CLICOLOR CLICOLOR_FORCE LSCOLORS export CLICOLOR CLICOLOR_FORCE LSCOLORS
fi fi
## Set gcc colors.
GCC_COLORS="error=00;31:warning=01;35:note=01;36:caret=01;32:locus=01" GCC_COLORS="error=00;31:warning=01;35:note=01;36:caret=01;32:locus=01"
GCC_COLORS="${GCC_COLORS}:quote=01" GCC_COLORS="${GCC_COLORS}:quote=01"
export GCC_COLORS export GCC_COLORS
## Colors for programs that uses 'less' such as 'man'. ## Colors for programs that uses less such as 'man'.
GROFF_NO_SGR=1 GROFF_NO_SGR=1
LESS_TERMCAP_mb="${_t_bold}${_t_setaf_2}" LESS_TERMCAP_mb="$(tput bold; tput setaf 2)" # begin blink
LESS_TERMCAP_md="${_t_bold}${_t_setaf_6}" LESS_TERMCAP_md="$(tput bold; tput setaf 6)" # begin bold
LESS_TERMCAP_me="${_t_sgr0}" LESS_TERMCAP_me="$(tput sgr0)" # reset bold/blink
LESS_TERMCAP_so="${_t_bold}${_t_setaf_7}${_t_setab_4}" LESS_TERMCAP_so="$(tput bold; tput setaf 7; tput setab 4)" # begin rev video
LESS_TERMCAP_se="${_t_rmso}${_t_sgr0}" LESS_TERMCAP_se="$(tput rmso; tput sgr0)" # reset rev video
LESS_TERMCAP_us="${_t_smul}${_t_bold}${_t_setaf_2}" LESS_TERMCAP_us="$(tput smul; tput bold; tput setaf 2)" # begin underline
LESS_TERMCAP_ue="${_t_rmul}${_t_sgr0}" LESS_TERMCAP_ue="$(tput rmul; tput sgr0)" # reset underline
LESS_TERMCAP_mr="${_t_rev}" LESS_TERMCAP_mr="$(tput rev)" # revert
LESS_TERMCAP_mh="${_t_dim}" LESS_TERMCAP_mh="$(tput dim)" # dimerize
export GROFF_NO_SGR export GROFF_NO_SGR
export LESS_TERMCAP_mb LESS_TERMCAP_md LESS_TERMCAP_me export LESS_TERMCAP_mb LESS_TERMCAP_md LESS_TERMCAP_me
export LESS_TERMCAP_so LESS_TERMCAP_se LESS_TERMCAP_us export LESS_TERMCAP_so LESS_TERMCAP_se LESS_TERMCAP_us
@ -417,46 +242,46 @@ _git_prompt_info(){
ref="$(git describe --tags --exact-match HEAD 2>/dev/null)" ref="$(git describe --tags --exact-match HEAD 2>/dev/null)"
test "${ref-}" || ref="$(git rev-parse HEAD 2>/dev/null | cut -c 1-7)" test "${ref-}" || ref="$(git rev-parse HEAD 2>/dev/null | cut -c 1-7)"
test "${ref-}" || return test "${ref-}" || return
case "${color_support-}" in # shellcheck disable=2039,3003
256|$((1 << 24))) branchcolor="$(printf '%b' "\033[38;5;31m")";; case "${TERM-}" in
88) branchcolor="$(printf '%b' "\033[38;5;22m")";; *-256color|xterm-kitty) branchcolor=$'\033[38;5;31m' ;;
[1-9]*) branchcolor="${_t_bold}${_t_setaf_4}";; *-88color|rxvt-unicode) branchcolor=$'\033[38;5;22m' ;;
*) branchcolor="";; *) branchcolor=$'\033[0;94m' ;;
esac esac
if test -n "${ZSH_VERSION-}"; then if test -n "${ZSH_VERSION-}"; then
# shellcheck disable=2016 # shellcheck disable=2016
if test "${color_prompt-}" = "yes"; then if test "${color_prompt-}" = "yes"; then
print -Pn '(%%{${branchcolor}%%}%20>...>${ref}%<<%%{${_t_sgr0}%%})' print -Pn '(%%{${branchcolor}%%}%20>...>${ref}%<<%%{\033[0m%%})'
else else
print -Pn '(%20>...>${ref}%<<)' print -Pn '(%20>...>${ref}%<<)'
fi fi
else else
if test "${color_prompt-}" = "yes"; then if test "${color_prompt-}" = "yes"; then
printf '%s' "(${branchcolor}${ref}${_t_sgr0})" printf '%s' "(${branchcolor}${ref}${reset_color})"
else else
printf '%s' "(${ref})" printf '%s' "(${ref})"
fi fi
fi fi
unset ref branchcolor unset ref
} }
# shellcheck disable=SC2034 # shellcheck disable=SC2034
case "${color_support-}" in reset_color="$(printf '%b' '\033[0m')"
256|$((1 << 24)))
# shellcheck disable=SC2034
## Use echotc Co? Only available by default for zsh, not bash.
case "${TERM-}" in
*-256color|xterm-kitty)
usercolor="$(printf '%b' "\033[38;5;184m")" usercolor="$(printf '%b' "\033[38;5;184m")"
dircolor="$(printf '%b' "\033[38;5;27m")" dircolor="$(printf '%b' "\033[38;5;27m")"
;; ;;
88) *-88color|rxvt-unicode)
usercolor="$(printf '%b' "\033[38;5;56m")" usercolor="$(printf '%b' "\033[38;5;56m")"
dircolor="$(printf '%b' "\033[38;5;23m")" dircolor="$(printf '%b' "\033[38;5;23m")"
;; ;;
[1-9]*)
usercolor="${_t_bold}${_t_setaf_3}"
dircolor="${_t_bold}${_t_setaf_4}"
;;
*) *)
usercolor="" usercolor="$(printf '%b' "\033[0;93m")"
dircolor="" dircolor="$(printf '%b' "\033[1;34m")"
;; ;;
esac esac
@ -468,14 +293,16 @@ esac
# shellcheck disable=SC2034 # shellcheck disable=SC2034
uid="$(id -u)" uid="$(id -u)"
if test "${uid}" = "0"; then if test "${uid}" = "0"; then
usercolor="${_t_bold}${_t_setaf_7}" usercolor="$(printf '%b' "\033[0;97m")"
ps1_symbol="#" ps1_symbol="#"
fi fi
unset uid unset uid
## Do not colorize this prompt, Sh fails to count the correct number of
## characters on the prompt leading to problems.
user="$(id -un)" user="$(id -un)"
if test "${color_prompt-}" = "yes"; then if test "${color_prompt-}" = "yes"; then
PS1="[${usercolor}${user} $(hostname -s)${_t_sgr0}]${ps1_symbol} " PS1="[${usercolor}${user} $(hostname -s)${reset_color}]${ps1_symbol} "
else else
PS1="${user}@$(hostname -s)${ps1_symbol} " PS1="${user}@$(hostname -s)${ps1_symbol} "
fi fi

View File

@ -1,7 +1,7 @@
#!/usr/bin/env zsh #!/usr/bin/env zsh
## SPDX-FileCopyrightText: 2004 - 2022 Tim Pope <https://tpo.pe> ## SPDX-FileCopyrightText: 2004 - 2022 Tim Pope <https://tpo.pe>
## SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com> ## SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. <ben.grande.b@gmail.com>
## ##
## SPDX-License-Identifier: AGPL-3.0-or-later ## SPDX-License-Identifier: AGPL-3.0-or-later
@ -20,7 +20,6 @@ source "$HOME/.zprofile"
source "$ENV" source "$ENV"
## }}} ## }}}
## {{{ Options ## {{{ Options
PROMPT_EOL_MARK='%b%B%S%#%s%b'
## - Quiet ## - Quiet
setopt no_beep setopt no_beep
## - Words ## - Words
@ -75,10 +74,10 @@ if test "${color_prompt-}" = "yes"; then
[[ "${COLORTERM-}" == (24bit|truecolor) || [[ "${COLORTERM-}" == (24bit|truecolor) ||
"${terminfo[colors]}" -eq '16777216' ]] || zmodload zsh/nearcolor "${terminfo[colors]}" -eq '16777216' ]] || zmodload zsh/nearcolor
PS1="\$(resize-terminal)%F{magenta}[%{${usercolor}%}%n@%m%F{reset_color%}" PS1="\$(resize-terminal)%F{magenta}[%{$usercolor%}%n@%m%F{reset_color%}"
PS1="${PS1} %{$dircolor%}%50<...<%~%<<%F{reset_color%}\$(_git_prompt_info)" PS1="${PS1} %{$dircolor%}%50<...<%~%<<%F{reset_color%}\$(_git_prompt_info)"
PS1="${PS1}%F{magenta}]%F{reset_color}${newline-}${ps1_symbol} " PS1="${PS1}%F{magenta}]%F{reset_color}${newline-}${ps1_symbol} "
RPS1="%(?..(%F{red%}%?%F{reset_color%}%)%<<)" RPS1="%(?..(%{"$'\033[31m'"%}%?%{$reset_color%}%)%<<)"
else else
PS1="\$(resize-terminal)[%n@%M %~\$(_git_prompt_info)]${newline}" PS1="\$(resize-terminal)[%n@%M %~\$(_git_prompt_info)]${newline}"
PS1="${PS1}${ps1_symbol} " PS1="${PS1}${ps1_symbol} "
@ -100,10 +99,11 @@ _set_title() {
} }
case "${TERM-}" in case "${TERM-}" in
screen*|tmux*) screen*)
precmd() { precmd() {
_set_title "$@" _set_title "$@"
if [ "${STY:-}" -o "${TMUX:-}" ]; then if [ "${STY:-}" -o "${TMUX:-}" ]; then
# print -Pn "\033]1;\a\033]1;@%m\a"
print -Pn '\033k@\033\\' print -Pn '\033k@\033\\'
else else
print -Pn '\033k@%m\033\\' print -Pn '\033k@%m\033\\'
@ -111,17 +111,17 @@ case "${TERM-}" in
} }
preexec() { preexec() {
_set_title "$@" _set_title "$@"
return 0 print -n "\033k"
#print -Pnr '%10>..>$1' | tr '\0-\037' '?' print -Pnr '%10>..>$1' | tr '\0-\037' '?'
#if [ "${STY:-}" -o "${TMUX:-}" ]; then if [ "${STY:-}" -o "${TMUX:-}" ]; then
# print -Pn '\033k@\033\\' print -Pn '@\033\\'
#else else
# print -Pn '\033k@%m\033\\' print -Pn '@%m\033\\'
#fi fi
} }
;; ;;
*?-direct*|xterm*|rxvt*|Eterm*|kterm*|putty*|dtterm*|ansi*|cygwin*) xterm*|rxvt*|Eterm*|kterm*|putty*|dtterm*|ansi*|cygwin*)
precmd () { _set_title "$@" } precmd () { _set_title "$@" }
preexec() { _set_title "$@" } preexec() { _set_title "$@" }
;; ;;
@ -134,8 +134,8 @@ case "${TERM-}" in
;; ;;
esac esac
unset hostcolor hostletter hostcode dircolor usercolor usercode newline \ unset hostcolor hostletter hostcode dircolor usercolor usercode reset_color \
ps1_symbol newline ps1_symbol
## }}} ## }}}
## {{{ Completions ## {{{ Completions
@ -224,10 +224,9 @@ if test "${color_prompt-}" = "yes"; then
## Enable auto-suggestions based on the history ## Enable auto-suggestions based on the history
if test -f /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh; then if test -f /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh; then
ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE=30 ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE=30
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="standout" ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=7,bg=8,underline"
typeset -a ZSH_AUTOSUGGEST_CLEAR_WIDGETS typeset -a ZSH_AUTOSUGGEST_CLEAR_WIDGETS
ZSH_AUTOSUGGEST_STRATEGY=(history completion) ZSH_AUTOSUGGEST_CLEAR_WIDGETS+=(bracketed-paste)
ZSH_AUTOSUGGEST_CLEAR_WIDGETS+=(bracketed-paste accept-line)
source /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh source /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh
fi fi
## Highlight commands as you type ## Highlight commands as you type
@ -237,6 +236,7 @@ if test "${color_prompt-}" = "yes"; then
ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern regexp) ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern regexp)
typeset -A ZSH_HIGHLIGHT_STYLES typeset -A ZSH_HIGHLIGHT_STYLES
ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red' ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red'
ZSH_HIGHLIGHT_STYLES[default]='fg=white'
ZSH_HIGHLIGHT_STYLES[alias]='fg=cyan' ZSH_HIGHLIGHT_STYLES[alias]='fg=cyan'
ZSH_HIGHLIGHT_STYLES[function]='fg=cyan' ZSH_HIGHLIGHT_STYLES[function]='fg=cyan'
ZSH_HIGHLIGHT_STYLES[builtin]='fg=green' ZSH_HIGHLIGHT_STYLES[builtin]='fg=green'

View File

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
## SPDX-FileCopyrightText: 2024 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com> ## SPDX-FileCopyrightText: 2024 Benjamin Grande M. S. <ben.grande.b@gmail.com>
## ##
## SPDX-License-Identifier: GFDL-1.3-or-later ## SPDX-License-Identifier: GFDL-1.3-or-later
## ##
@ -14,10 +14,8 @@ if test -n "${TERM_RESIZE_DISABLE:-}"; then
fi fi
test -t 0 || exit 0 test -t 0 || exit 0
case "${TERM-}" in
dumb) exit 0;; msg_unsupported="error: cannot resize screen: unsupported terminal emulator"
*);;
esac
## If argument is provided, allow user to bypass tty check. ## If argument is provided, allow user to bypass tty check.
if test "${#}" -eq 0; then if test "${#}" -eq 0; then
@ -48,17 +46,9 @@ if test "${#}" -eq 0; then
unset term_file_active unset term_file_active
fi fi
get_caps(){
sc="$(tput sc || printf '%b' '\0337')"
rc="$(tput rc || printf '%b' '\0338')"
cup="$(tput cup 99999 99999 || printf '%b' '\033[99999;99999H')"
csr="$(tput csr || printf '%b' '\033[r')"
gc="$(tput u7 || printf '%b' '\033[6n')"
}
## POSIX compliant. ## POSIX compliant.
# shellcheck disable=SC3045 # shellcheck disable=SC3045
if ! (printf '%s\n' "R" | read -r -t 1 -sd R 2>/dev/null); then if ! printf '%s\n' "R" | read -r -t 1 -sd R 2>/dev/null; then
## Fast but depends on XTerm. ## Fast but depends on XTerm.
if has resize; then if has resize; then
resize_cmd="$(resize)" resize_cmd="$(resize)"
@ -66,21 +56,18 @@ if ! (printf '%s\n' "R" | read -r -t 1 -sd R 2>/dev/null); then
exit 0 exit 0
fi fi
## Slow due to heavy stty calls. ## Slow due to heavy stty calls.
get_caps
termios="$(stty -g)" termios="$(stty -g)"
stty raw -echo min 0 time 1 stty raw -echo min 0 time 1
printf '%s' "${sc}${csr}${cup}${gc}${rc}" >/dev/tty printf '\0337\033[r\033[99999;99999H\033[6n\0338' >/dev/tty
IFS='[;R' read -r _ rows cols _ </dev/tty IFS='[;R' read -r _ rows cols _ </dev/tty
stty "${termios}" cols "${cols}" rows "${rows}" stty "${termios}" cols "${cols}" rows "${rows}"
unset termios unset termios
exit 0 exit 0
fi fi
msg_unsupported="error: cannot resize screen: unsupported terminal emulator"
## Non-POSIX compliant and fast. ## Non-POSIX compliant and fast.
get_caps
stty -echo stty -echo
printf '%s' "${sc}${csr}${cup}${gc}${rc}" >/dev/tty printf '\0337\033[r\033[99999;99999H\033[6n\0338' >/dev/tty
# shellcheck disable=3045,SC2034 # shellcheck disable=3045,SC2034
IFS='[;R' read -r -t 1 -s -d R _ rows cols _ </dev/tty || { IFS='[;R' read -r -t 1 -s -d R _ rows cols _ </dev/tty || {
printf '%s\n' "${msg_unsupported}" >&2 printf '%s\n' "${msg_unsupported}" >&2

View File

@ -1,6 +1,6 @@
## tmux.conf ## tmux.conf
## SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com> ## SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
## ##
## SPDX-License-Identifier: AGPL-3.0-or-later ## SPDX-License-Identifier: AGPL-3.0-or-later
@ -17,13 +17,8 @@ set-option -g history-limit 10000
set-option -g repeat-time 2000 set-option -g repeat-time 2000
set-option -g escape-time 50 set-option -g escape-time 50
set-option -g status-position top set-option -g status-position top
run-shell '\ set-option -g default-terminal screen-256color
colors=$(tput colors) || true 2>/dev/null; \ # set-option -g default-terminal tmux-256color # on newer ncurses
if test "$colors" -lt 256; then \
tmux set-option -g default-terminal tmux; \
elif test "$colors" -ge 256; then \
tmux set-option -g default-terminal tmux-256color; \
fi'
set-option -g display-panes-time 2000 set-option -g display-panes-time 2000
set-option -g display-time 2000 set-option -g display-time 2000
set-option -g focus-events on set-option -g focus-events on

View File

@ -1,5 +1,5 @@
" SPDX-FileCopyrightText: 2004 - 2022 Tim Pope <https://tpo.pe> " SPDX-FileCopyrightText: 2004 - 2022 Tim Pope <https://tpo.pe>
" SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com> " SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
" "
" SPDX-License-Identifier: Vim " SPDX-License-Identifier: Vim
" "
@ -556,9 +556,6 @@ if (&t_Co > 2 || has('gui_running')) && has('syntax')
endif endif
if has('vim_starting') if has('vim_starting')
set list set list
if has('termguicolors') && &t_Co > 256
setglobal termguicolors
endif
if !exists('g:colors_name') if !exists('g:colors_name')
colorscheme vividchalk colorscheme vividchalk
endif endif

View File

@ -48,34 +48,12 @@ desktop_autostart(){
for f in "${autostart_etc}"/*.desktop "${autostart_home}"/*.desktop; do for f in "${autostart_etc}"/*.desktop "${autostart_home}"/*.desktop; do
test -r "${f}" || continue test -r "${f}" || continue
## TODO: check other conditions: (Not|Only)ShowIn
# shellcheck disable=SC2091 # shellcheck disable=SC2091
autostart_hidden="$(awk -F '=' -- '/^Hidden=/{print $2}' "${f}")"
if test "${autostart_hidden}" = "true"; then
continue
fi
autostart_tryexec="$(awk -F '=' -- '/^TryExec=/{print $2}' "${f}")"
if test -n "${autostart_tryexec}"; then
case "${autostart_tryexec}" in
/*) test -x "${autostart_tryexec}" || continue;;
*) command -v "${autostart_tryexec}" >/dev/null || continue;;
esac
fi
autostart_path="$(awk -F '=' -- '/^Path=/{print $2}' "${f}")"
autostart_exec="$(awk -F '=' -- '/^Exec=/{print $2}' "${f}")" autostart_exec="$(awk -F '=' -- '/^Exec=/{print $2}' "${f}")"
case "${autostart_exec}" in command -v "${autostart_exec%% *}" >/dev/null || continue
/*) test -x "${autostart_exec}" || continue;;
*) command -v "${autostart_exec}" >/dev/null || continue;;
esac
if test -n "${autostart_path}"; then
if ! test -d "${autostart_path}"; then
continue
fi
cd "${autostart_path}" || continue
fi
${autostart_exec} & ${autostart_exec} &
done done
unset f autostart_hidden autostart_tryexec autostart_exec autostart_path unset f
} }
## Source Xorg profiles. ## Source Xorg profiles.

View File

@ -1,14 +1,15 @@
! ~/.Xresources ! ~/.Xresources
! vim:set foldmethod=expr foldexpr=getline(v\:lnum)=~'^!##'?'>1'\:'=':
! SPDX-FileCopyrightText: 2004 - 2016 Tim Pope <https://tpo.pe> ! SPDX-FileCopyrightText: 2004 - 2016 Tim Pope <https://tpo.pe>
! SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com> ! SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
! !
! SPDX-License-Identifier: AGPL-3.0-or-later ! SPDX-License-Identifier: AGPL-3.0-or-later
!
! Credits: https://github.com/tpope/dotfiles/blob/master/.Xresources ! Credits: https://github.com/tpope/dotfiles/blob/master/.Xresources
! vim:set foldmethod=expr foldexpr=getline(v\:lnum)=~'^!##'?'>1'\:'=':
*international: true *international: true
*customization: -color *customization: -color
!## TERMINAL COMMON !## TERMINAL COMMON
#ifndef FIXED #ifndef FIXED
@ -23,6 +24,100 @@
#endif #endif
#endif #endif
! http://www.calmar.ws/vim/256-xterm-24bit-rgb-color-chart.html
! https://en.wikipedia.org/wiki/X11_color_names
! https://upload.wikimedia.org/wikipedia/commons/1/15/Xterm_256color_chart.svg
! RGB to HEX https://unix.stackexchange.com/a/269085
! https://misc.flogisoft.com/bash/tip_colors_and_formatting
! https://stackoverflow.com/questions/5947742/how-to-change-the-output-color-of-echo-in-linux
! https://unix.stackexchange.com/questions/124407/what-color-codes-can-i-use-in-my-bash-ps1-prompt
! name dark light
! black 0 8
! red 1 9
! green 2 10
! yellow 3 11
! blue 4 12
! purple 5 13
! cyan 6 14
! white 7 15
! Tpope colors
*color0: #000000
*color1: #aa0000
*color2: #00aa00
*color3: #aa5522
*color4: #0000ee
*color5: #aa00aa
*color6: #00aaaa
*color7: #aaaaaa
*color8: #555555
*color9: #ff4444
*color10: #44ff44
*color11: #ffff00
*color12: #5c5cff
*color13: #ff00ff
*color14: #00ffff
*color15: #ffffff
*colorBD: #ffffff
! *.cursorColor: #ffffff
! *color0: #000000
! *color1: #aa0000
! *color2: #00aa00
! *color3: #aa5522
! *color4: #0000ee
! *color5: #aa00aa
! *color6: #00aaaa
! *color7: #aaaaaa
! *color8: #555555
! *color9: #ff4444
! *color10: #44ff44
! *color11: #ffff00
! *color12: #5c5cff
! *color13: #ff00ff
! *color14: #00ffff
! *color15: #ffffff
! *colorBD: #ffffff
! ! Black / Grey
! *.color0: #000000
! ! *.color8: #808080
! *.color8: #767676
! ! Red / Bright Red
! *.color1: #800000
! *.color9: #FF0000
! ! Green + Bright Green
! ! *.color2: #008000
! *.color2: #00af00
! *.color10: #00ff00
! ! Yellow (Orange) + Bright Yellow (Yellow)
! *.color3: #808000
! *.color11: #ffff00
! ! Blue + Bright Blue
! *.color4: #000080
! *.color12: #0000ff
! ! Magenta (Purple) + Bright Magenta
! ! *.color5: #800080
! *.color5: #af00d7
! *.color13: #0000ff
! ! Cyan (Aqua) + Bright Cyan
! ! *.color6: #800080
! *.color6: #008b8b
! ! *.color14: #ff00ff
! *.color14: #00d7ff
! ! Light Grey (Selection) + White (Current Line)
! *.color7: #c0c0c0
! *.color15: #ffffff
!## [U]XTERM !## [U]XTERM
*.selectToClipboard: true *.selectToClipboard: true
*.VT100saveLines: 4096 *.VT100saveLines: 4096
@ -34,20 +129,16 @@
*.VT100.background: black *.VT100.background: black
*.foreground: white *.foreground: white
*.VT100.foreground: white *.VT100.foreground: white
*.termName: xterm-direct256 *.termName: xterm-256color
*.ttyModes: start ^- stop ^- *.ttyModes: start ^- stop ^-
*.boldMode: false *.boldMode: false
*.allowBoldFonts: false *.allowBoldFonts: false
*.colorMode: true
*.dynamicColors: true
*.colorBDMode: false
*.colorULMode: false
*.underline: false
*.VT100.geometry: 80x24 *.VT100.geometry: 80x24
*.VT100.scaleHeight: 1.1 *.VT100.scaleHeight: 1.1
! For some reason, '*scrollBar' was not working on Fedora. ! For some reason, '*scrollBar' was not working on Fedora.
XTerm*.scrollBar: false XTerm*.scrollBar: false
UXTerm*.scrollBar: false UXTerm*.scrollBar: false
*.colorBDMode: true
*.visualBell: false *.visualBell: false
*.eightBitInput: false *.eightBitInput: false
*.modifyCursorKeys: 2 *.modifyCursorKeys: 2

View File

@ -0,0 +1,9 @@
## SPDX-FileCopyrightText: 2024 Benjamin Grande M. S. <ben.grande.b@gmail.com>
##
## SPDX-License-Identifier: AGPL-3.0-or-later
# vim: ft=confini
FileManager=thunar
MailReaders=thunderbid
WebBrowser=x-www-browser
TerminalEmulator=x-terminal-emulator

View File

@ -1,37 +0,0 @@
{#
SPDX-FileCopyrightText: 2024 seven-beep <ebn@entreparentheses.xyz>
SPDX-FileCopyrightText: 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-License-Identifier: CC-BY-SA-4.0
Example of a pillar state structure for https://github.com/ben-grande/dotfiles
For this file to be active:
1. Copy the file to the pillar_roots directory without the '.example' suffix;
2. Reference this state by a pillar highstate.
See the README for detailed instructions.
Each pillar component is optional. Disable a single component by setting them
to 'false'. To selectively enable few components, disable 'all' and enable
each desired component by setting them to 'true'.
Entries example: 'dom0' corresponds to 'copy-dom0.sls'.
#}
qusal:
dotfiles:
all: true
dom0: true
git: true
gtk: true
mutt: true
net: true
pgp: true
sh: true
ssh: true
tmux: true
vim: true
x11: true

View File

@ -1,20 +0,0 @@
{#
SPDX-FileCopyrightText: 2024 seven-beep <ebn@entreparentheses.xyz>
SPDX-FileCopyrightText: 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-License-Identifier: CC-BY-SA-4.0
Example of a pillar top structure for https://github.com/ben-grande/dotfiles
For this file to be active:
1. Copy the file to the pillar_roots directory without the '.example' suffix;
2. Enable the pillar highstate.
See the README for detailed instructions.
#}
base:
'*':
- qusal.dotfiles