Remove i3 desktop profile and st terminal
Elimina completamente la sessione desktop i3 (X11), ormai non più usata (gli host espongono solo sway e Hyprland su Wayland): - ruolo profile_desktop_i3 e voce emptty i3.desktop - desktop_i3_packages e i guard 'i3' in desktop_sessions_enabled - desktop_i3_dotfiles e host_i3_dotfiles (autorandr X11) - dotfiles i3/X11: .xinitrc, i3, i3blocks, picom, polybar, autorandr - task host-specifici i3 (copy dotfiles, wrap prime-run su nymph) - rimuove st (terminale X11 da sorgente) da desktop_void_source_tools - consolida lo script live in scripts/remove_i3.sh, elimina cleanup-i3.sh - aggiorna la documentazione (README/AGENTS/CLAUDE/knowledge) Config Emacs lasciata invariata di proposito. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@@ -52,23 +52,22 @@ Ansible-driven personal infrastructure repo for Void desktops, Linux workstation
|
||||
- Use `no_log: true` for secret-bearing task inputs or outputs.
|
||||
|
||||
## Desktop Notes
|
||||
- `profile_desktop_common` owns the shared desktop bootstrap; `profile_desktop_i3` (X11), `profile_desktop_sway` (Wayland/SwayFX), and `profile_desktop_hyprland` (Wayland) install their respective sessions in parallel and are wired into the `void` play in `ansible/site.yml`. `desktop_sessions_enabled` and `desktop_default_session` in host vars decide which sessions are exposed in `emptty` and which is preselected.
|
||||
- `profile_desktop_common` owns the shared desktop bootstrap; `profile_desktop_sway` (Wayland/SwayFX) and `profile_desktop_hyprland` (Wayland) install their respective sessions in parallel and are wired into the `void` play in `ansible/site.yml`. `desktop_sessions_enabled` and `desktop_default_session` in host vars decide which sessions are exposed in `emptty` and which is preselected.
|
||||
- `.emacs.d` is deployed by a dedicated `profile_desktop_common` task tagged `emacs`.
|
||||
- NTFS filesystem support is provided by `ntfs-3g` in `ansible/inventory/group_vars/void.yml`.
|
||||
- Void user services are managed by `turnstile` and live under `dotfiles/desktop/.config/service/`.
|
||||
- `ssh-agent` keeps the stable socket `~/.local/state/ssh-agent/socket`.
|
||||
- Critical session entrypoints:
|
||||
- `dotfiles/desktop/.xinitrc` (i3 / X11)
|
||||
- `dotfiles/desktop/.config/sway/config` plus `host.conf` and `session-env` deployed via `host_sway_dotfiles` (sway / Wayland)
|
||||
- `dotfiles/desktop/.config/hypr/hyprland.conf` plus `host.conf` and `session-env` deployed via `host_hyprland_dotfiles` (Hyprland / Wayland)
|
||||
- Do not auto-restart `emptty` during playbook runs on active Void desktop hosts; restart it manually from another TTY/SSH session if needed.
|
||||
- `nymph` is a Void laptop with NVIDIA Optimus, running sway (Wayland) and Hyprland (Wayland); host-specific tasks in `profile_desktop_host/tasks/nymph.yml` handle GRUB NVIDIA cmdline params, `prime-run` wrapper, and the WirePlumber camera priority config. Multi-monitor on X11 is driven by `autorandr`; on sway it is driven by `kanshi` (config deployed via `host_sway_dotfiles`), and on Hyprland by host-specific Hyprland monitor/workspace rules.
|
||||
- `nymph` is a Void laptop with NVIDIA Optimus, running sway (Wayland) and Hyprland (Wayland); host-specific tasks in `profile_desktop_host/tasks/nymph.yml` handle GRUB NVIDIA cmdline params, `prime-run` wrapper, and the WirePlumber camera priority config. Multi-monitor on sway is driven by `kanshi` (config deployed via `host_sway_dotfiles`), and on Hyprland by host-specific Hyprland monitor/workspace rules.
|
||||
|
||||
## Void Package And Dotfile Bucket Rules
|
||||
The four Void desktop package lists in `ansible/inventory/group_vars/void.yml` are kept disjoint by role:
|
||||
- `void_packages_base` — system runtime only (init/services, kernel, audio core, networking, filesystem, firewall, hardware daemons, runit logging).
|
||||
- `desktop_common_packages` — WM-agnostic GUI infra (GTK theme, polkit, keyring, NM-applet, blueman, audio GUI, file manager backend + GVFS, portal, flatpak, printing/scanning).
|
||||
- `desktop_i3_packages` / `desktop_sway_packages` / `desktop_hyprland_packages` — binaries specific to each session. Cross-WM packages used by both (`dunst`, `rofi`, `alacritty`) are intentionally duplicated in the two lists.
|
||||
- `desktop_sway_packages` / `desktop_hyprland_packages` — binaries specific to each session. Cross-WM packages used by both (`dunst`, `rofi`, `alacritty`) are intentionally duplicated in the two lists.
|
||||
`profile_packages` in the same file is cross-distro and is overridden by `group_vars/server.yml` and the workstation group vars; do not move desktop-specific Void entries through it.
|
||||
The dotfile vars follow the same split: `desktop_common_dotfiles` (in `group_vars/desktop.yml`) carries WM-agnostic GUI config and user scripts (Thunar, mimeapps, GTK theme setup, Udiskie, fontconfig, WirePlumber, mpv, …); `desktop_void_dotfiles` (in `group_vars/void.yml`) is reserved for files that need Void runtime (turnstile services, bash runit/dbus/ssh-agent fragments, `update-turnstile-env`).
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ Dotfiles under `dotfiles/` mirror the same layer split: `common/`, `desktop/`, `
|
||||
|
||||
- `void_packages_base` — system runtime (init, kernel, audio core, networking, firewall, hw daemons)
|
||||
- `desktop_common_packages` — WM-agnostic GUI infra (GTK theme, polkit, keyring, portals, flatpak, printing)
|
||||
- `desktop_i3_packages` / `desktop_sway_packages` — session-specific binaries; cross-WM packages used by both (`dunst`, `rofi`, `alacritty`) are intentionally duplicated
|
||||
- `desktop_sway_packages` / `desktop_hyprland_packages` — session-specific binaries; cross-WM packages used by both (`dunst`, `rofi`, `alacritty`) are intentionally duplicated
|
||||
- `profile_packages` — cross-distro; do not move desktop-only Void entries into it
|
||||
|
||||
Dotfile var split follows the same logic: `desktop_common_dotfiles` (WM-agnostic), `desktop_void_dotfiles` (Void runtime — turnstile services, bash fragments).
|
||||
|
||||
12
README.md
@@ -90,7 +90,7 @@ Lo stato attuale del profilo desktop include, tra le altre cose:
|
||||
- pacchetti Void Linux e servizi runit; le liste pacchetti Void desktop sono separate per criterio:
|
||||
- `void_packages_base` per il runtime sistema (init, kernel, audio core, networking, firewall, hw daemons)
|
||||
- `desktop_common_packages` per l'infrastruttura GUI WM-agnostic (tema, polkit, keyring, NM-applet, blueman, audio GUI, file manager backend, portal, flatpak, printing/scanning)
|
||||
- `desktop_i3_packages`, `desktop_sway_packages` e `desktop_hyprland_packages` per i binari specifici di ciascuna sessione
|
||||
- `desktop_sway_packages` e `desktop_hyprland_packages` per i binari specifici di ciascuna sessione
|
||||
- `turnstile` per i servizi utente, inclusi `emacs` e `ssh-agent`
|
||||
- `ssh-agent` con socket stabile condiviso tra shell, SSH ed Emacs in `~/.local/state/ssh-agent/socket`
|
||||
- `.emacs.d` distribuito da un task dedicato Ansible con tag `emacs`
|
||||
@@ -98,7 +98,7 @@ Lo stato attuale del profilo desktop include, tra le altre cose:
|
||||
- Flatpak con remoto Flathub
|
||||
- GNOME Keyring e bootstrap della posta via script dedicato
|
||||
- `udiskie` come backend per automount/LUKS
|
||||
- `autorandr` per profili monitor X11 host-specifici (`nymph` ha profili `dual` e `solo`); sotto sway il multi-monitor è gestito da `kanshi` (config host-specifica in `host_sway_dotfiles` su `nymph`); sotto Hyprland gli override monitor vivono in `host_hyprland_dotfiles`
|
||||
- multi-monitor: sotto sway è gestito da `kanshi` (config host-specifica in `host_sway_dotfiles` su `nymph`); sotto Hyprland gli override monitor vivono in `host_hyprland_dotfiles`
|
||||
- override NVIDIA Optimus su `nymph`: parametri kernel GRUB iniettati in modo idempotente in `GRUB_CMDLINE_LINUX`, wrapper `prime-run` e config WirePlumber per priorità telecamera
|
||||
|
||||
---
|
||||
@@ -247,7 +247,6 @@ I principali ruoli attualmente presenti sono:
|
||||
| services_runit | gestione servizi runit |
|
||||
| services_systemd | gestione servizi systemd |
|
||||
| profile_desktop_common | bootstrap desktop Void condiviso |
|
||||
| profile_desktop_i3 | sessione desktop i3 (X11) |
|
||||
| profile_desktop_sway | sessione desktop sway / SwayFX (Wayland) |
|
||||
| profile_desktop_hyprland | sessione desktop Hyprland (Wayland) |
|
||||
| profile_desktop_host | override desktop specifici per host |
|
||||
@@ -266,7 +265,7 @@ Il playbook `ansible/site.yml` e attualmente composto da sei blocchi:
|
||||
|
||||
```text
|
||||
all -> dotfiles_common
|
||||
void -> packages_void + services_runit + profile_desktop_common + profile_desktop_i3 + profile_desktop_sway + profile_desktop_hyprland + profile_desktop_host
|
||||
void -> packages_void + services_runit + profile_desktop_common + profile_desktop_sway + profile_desktop_hyprland + profile_desktop_host
|
||||
workstation_dev_fedora -> packages_fedora + services_systemd + profile_workstation_dev_common
|
||||
workstation_host_linux -> profile_workstation_gnome
|
||||
workstation_dev_wsl -> packages_ubuntu + services_systemd + profile_workstation_dev_common + profile_workstation_dev_wsl
|
||||
@@ -349,7 +348,7 @@ ansible-playbook ansible/site.yml
|
||||
Allo stato attuale questo comando:
|
||||
|
||||
- distribuisce i dotfiles comuni a tutti gli host
|
||||
- per gli host Void applica bootstrap desktop condiviso, sessione i3 e override specifici per host
|
||||
- per gli host Void applica bootstrap desktop condiviso, sessioni sway/Hyprland e override specifici per host
|
||||
- per `workstation_dev_fedora` applica pacchetti Fedora, servizi systemd e profilo dev comune
|
||||
- per `workstation_host_linux` applica il layer host Linux GNOME
|
||||
- per `workstation_dev_wsl` applica pacchetti Ubuntu, servizi systemd, profilo dev comune e tweak WSL dedicati
|
||||
@@ -409,7 +408,6 @@ Allo stato attuale `ansible/site.yml` espone questi tag:
|
||||
| `dotfiles:workstation` | dotfiles dedicati alle workstation | workstation Linux, WSL |
|
||||
| `emptty` | gestione display manager `emptty` | desktop Void |
|
||||
| `gnome` | configurazione host GNOME | workstation host Linux, parte desktop |
|
||||
| `i3` | sessione/configurazione i3 (X11) | desktop Void |
|
||||
| `sway` | sessione/configurazione sway / SwayFX (Wayland) | desktop Void |
|
||||
| `hyprland` | sessione/configurazione Hyprland (Wayland) | desktop Void |
|
||||
| `npm` | installazione pacchetti npm globali | desktop Void, workstation Linux, WSL |
|
||||
@@ -422,7 +420,7 @@ Allo stato attuale `ansible/site.yml` espone questi tag:
|
||||
Esempi pratici:
|
||||
|
||||
```bash
|
||||
ansible-playbook ansible/site.yml --limit nymph --tags dotfiles:desktop,i3 --check --diff
|
||||
ansible-playbook ansible/site.yml --limit nymph --tags dotfiles:desktop,sway --check --diff
|
||||
ansible-playbook ansible/site.yml --limit ikaros --tags sway,portal --check --diff
|
||||
ansible-playbook ansible/site.yml --limit ikaros --tags hyprland,portal --check --diff
|
||||
ansible-playbook ansible/site.yml --limit deadalus-fedora --tags packages,vscode --check --diff
|
||||
|
||||
@@ -140,44 +140,6 @@ desktop_emacs_dotfiles:
|
||||
dest: .emacs.d/
|
||||
mode: preserve
|
||||
|
||||
desktop_i3_dotfiles:
|
||||
- name: i3 config
|
||||
src: .config/i3/
|
||||
dest: .config/i3/
|
||||
mode: preserve
|
||||
- name: dunst config
|
||||
src: .config/dunst/
|
||||
dest: .config/dunst/
|
||||
mode: preserve
|
||||
- name: i3blocks config
|
||||
src: .config/i3blocks/
|
||||
dest: .config/i3blocks/
|
||||
mode: preserve
|
||||
- name: rofi config
|
||||
src: .config/rofi/
|
||||
dest: .config/rofi/
|
||||
mode: preserve
|
||||
- name: picom config
|
||||
src: .config/picom/picom.conf
|
||||
dest: .config/picom/picom.conf
|
||||
mode: "0644"
|
||||
- name: polybar config
|
||||
src: .config/polybar/config.ini
|
||||
dest: .config/polybar/config.ini
|
||||
mode: "0644"
|
||||
- name: polybar launcher
|
||||
src: .config/polybar/launch.sh
|
||||
dest: .config/polybar/launch.sh
|
||||
mode: "0755"
|
||||
- name: alacritty config
|
||||
src: .config/alacritty/
|
||||
dest: .config/alacritty/
|
||||
mode: preserve
|
||||
- name: .xinitrc
|
||||
src: .xinitrc
|
||||
dest: .xinitrc
|
||||
mode: "0644"
|
||||
|
||||
desktop_sway_dotfiles:
|
||||
- name: alacritty config
|
||||
src: .config/alacritty/
|
||||
|
||||
@@ -3,13 +3,6 @@ void_xbps_repositories:
|
||||
- name: hyprland-void
|
||||
url: https://raw.githubusercontent.com/sofijacom/hyprland-void/repository-x86_64-glibc
|
||||
|
||||
desktop_void_source_tools:
|
||||
- name: st
|
||||
repo: https://codeberg.org/fscotto/st
|
||||
build_cmd: make
|
||||
binary_name: st
|
||||
install_name: st
|
||||
|
||||
void_packages_base:
|
||||
- 7zip
|
||||
- NetworkManager
|
||||
@@ -133,31 +126,6 @@ desktop_common_packages:
|
||||
- xdg-user-dirs
|
||||
- xfce-polkit
|
||||
|
||||
desktop_i3_packages:
|
||||
- arandr
|
||||
- autorandr
|
||||
- feh
|
||||
- i3
|
||||
- i3blocks
|
||||
- i3blocks-blocklets
|
||||
- i3lock-color
|
||||
- i3status
|
||||
- dunst
|
||||
- picom
|
||||
- polybar
|
||||
- rofi
|
||||
- scrot
|
||||
- setxkbmap
|
||||
- volumeicon
|
||||
- xclip
|
||||
- xfce4-clipman-plugin
|
||||
- xfce4-screenshooter
|
||||
- xkbutils
|
||||
- xorg-fonts
|
||||
- xorg-minimal
|
||||
- xss-lock
|
||||
- xdotool
|
||||
|
||||
desktop_sway_packages:
|
||||
- cliphist
|
||||
- dunst
|
||||
|
||||
@@ -33,10 +33,5 @@ host_sshd_allow_users:
|
||||
|
||||
host_authorized_ssh_keys: "{{ vault_ikaros_authorized_ssh_keys | default([]) }}"
|
||||
|
||||
host_i3_dotfiles:
|
||||
- src: .config/autorandr/
|
||||
dest: .config/autorandr/
|
||||
mode: preserve
|
||||
|
||||
host_enabled_services:
|
||||
- sshd
|
||||
|
||||
@@ -24,14 +24,6 @@ host_packages:
|
||||
host_enabled_services:
|
||||
- tlp
|
||||
|
||||
host_i3_dotfiles:
|
||||
- src: .config/autorandr/
|
||||
dest: .config/autorandr/
|
||||
mode: preserve
|
||||
- src: .config/wireplumber/wireplumber.conf.d/60-camera-priority.conf
|
||||
dest: .config/wireplumber/wireplumber.conf.d/60-camera-priority.conf
|
||||
mode: "0644"
|
||||
|
||||
host_sway_dotfiles:
|
||||
- src: .config/sway/host.conf
|
||||
dest: .config/sway/host.conf
|
||||
|
||||
@@ -115,11 +115,6 @@
|
||||
else []
|
||||
)
|
||||
+ (desktop_common_packages | default([]))
|
||||
+ (
|
||||
(desktop_i3_packages | default([]))
|
||||
if 'i3' in (desktop_sessions_enabled | default([]))
|
||||
else []
|
||||
)
|
||||
+ (host_packages | default([]))
|
||||
)
|
||||
| difference(
|
||||
|
||||
@@ -56,11 +56,6 @@
|
||||
+ (void_packages_base | default([]))
|
||||
+ (profile_packages | default([]))
|
||||
+ (desktop_common_packages | default([]))
|
||||
+ (
|
||||
(desktop_i3_packages | default([]))
|
||||
if 'i3' in (desktop_sessions_enabled | default([]))
|
||||
else []
|
||||
)
|
||||
+ (
|
||||
(desktop_sway_packages | default([]))
|
||||
if 'sway' in (desktop_sessions_enabled | default([]))
|
||||
@@ -83,4 +78,4 @@
|
||||
community.general.xbps:
|
||||
name: "{{ host_packages_absent | default([]) }}"
|
||||
state: absent
|
||||
when: (host_packages_absent | default([])) | length > 0
|
||||
when: (host_packages_absent | default([])) | length > 0
|
||||
|
||||
@@ -4,21 +4,6 @@
|
||||
ansible.builtin.include_tasks: nymph.yml
|
||||
when: hostname == 'nymph'
|
||||
|
||||
- name: Copy host-specific i3 dotfiles
|
||||
tags: [dotfiles, dotfiles:desktop, dotfiles:host, i3]
|
||||
ansible.builtin.copy:
|
||||
src: "{{ playbook_dir }}/../dotfiles/{{ hostname }}/{{ item.src }}"
|
||||
dest: "{{ user_home }}/{{ item.dest }}"
|
||||
owner: "{{ username }}"
|
||||
group: "{{ user_group }}"
|
||||
mode: "{{ item.mode }}"
|
||||
loop: "{{ host_i3_dotfiles | default([]) }}"
|
||||
loop_control:
|
||||
label: "{{ item.dest }}"
|
||||
when:
|
||||
- "'i3' in (desktop_sessions_enabled | default([]))"
|
||||
- (host_i3_dotfiles | default([])) | length > 0
|
||||
|
||||
- name: Copy host-specific sway dotfiles
|
||||
tags: [dotfiles, dotfiles:desktop, dotfiles:host, sway]
|
||||
ansible.builtin.copy:
|
||||
|
||||
@@ -53,11 +53,3 @@
|
||||
group: "{{ user_group }}"
|
||||
mode: "0755"
|
||||
force: false
|
||||
|
||||
- name: Wrap alacritty with prime-run for NVIDIA PRIME offload
|
||||
tags: [nvidia, dotfiles, dotfiles:desktop, dotfiles:host]
|
||||
ansible.builtin.lineinfile:
|
||||
path: "{{ user_home }}/.config/i3/config"
|
||||
regexp: '^bindsym \$mod\+Return exec --no-startup-id /usr/bin/alacritty'
|
||||
line: 'bindsym $mod+Return exec --no-startup-id ~/.local/bin/prime-run /usr/bin/alacritty'
|
||||
when: "'i3' in (desktop_sessions_enabled | default([]))"
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
[Desktop Entry]
|
||||
Name=i3
|
||||
Comment=improved dynamic tiling window manager
|
||||
Exec=i3
|
||||
TryExec=i3
|
||||
Type=Application
|
||||
DesktopNames=i3
|
||||
Keywords=tiling;wm;windowmanager;window;manager;
|
||||
@@ -1,41 +0,0 @@
|
||||
---
|
||||
- name: Ensure i3 config directories exist
|
||||
tags: [dotfiles, dotfiles:desktop, i3]
|
||||
ansible.builtin.file:
|
||||
path: "{{ item }}"
|
||||
state: directory
|
||||
owner: "{{ username }}"
|
||||
group: "{{ user_group }}"
|
||||
mode: "0755"
|
||||
loop:
|
||||
- "{{ user_home }}/.config/alacritty"
|
||||
- "{{ user_home }}/.config/dunst"
|
||||
- "{{ user_home }}/.config/i3"
|
||||
- "{{ user_home }}/.config/i3blocks"
|
||||
- "{{ user_home }}/.config/picom"
|
||||
- "{{ user_home }}/.config/polybar"
|
||||
- "{{ user_home }}/.config/rofi"
|
||||
when: "'i3' in (desktop_sessions_enabled | default([]))"
|
||||
|
||||
- name: Install allowed emptty X11 sessions
|
||||
tags: [packages, services, emptty, i3]
|
||||
ansible.builtin.copy:
|
||||
src: i3.desktop
|
||||
dest: /etc/emptty/xsessions/i3.desktop
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
when: "'i3' in (desktop_sessions_enabled | default([]))"
|
||||
|
||||
- name: Copy i3 desktop dotfiles
|
||||
tags: [dotfiles, dotfiles:desktop, i3]
|
||||
ansible.builtin.copy:
|
||||
src: "{{ playbook_dir }}/../dotfiles/desktop/{{ item.src }}"
|
||||
dest: "{{ user_home }}/{{ item.dest }}"
|
||||
owner: "{{ username }}"
|
||||
group: "{{ user_group }}"
|
||||
mode: "{{ item.mode }}"
|
||||
loop: "{{ desktop_i3_dotfiles | default([]) }}"
|
||||
loop_control:
|
||||
label: "{{ item.dest }}"
|
||||
when: "'i3' in (desktop_sessions_enabled | default([]))"
|
||||
@@ -24,7 +24,6 @@
|
||||
- packages_void
|
||||
- services_runit
|
||||
- profile_desktop_common
|
||||
- profile_desktop_i3
|
||||
- profile_desktop_sway
|
||||
- profile_desktop_hyprland
|
||||
- profile_desktop_host
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Desktop
|
||||
|
||||
- i3 primary
|
||||
- XFCE components selectively
|
||||
- Wayland only: sway (SwayFX) and Hyprland
|
||||
- Hyprland is the default session
|
||||
|
||||
@@ -1,249 +0,0 @@
|
||||
# i3 config for nymph
|
||||
|
||||
set $mod Mod4
|
||||
set $refresh_i3status killall -SIGUSR1 i3status
|
||||
|
||||
font pango:LiterationMono Nerd Font 10
|
||||
|
||||
# Start XDG autostart entries (.desktop), useful on Void for pipewire/wireplumber/etc.
|
||||
exec --no-startup-id dex --autostart --environment i3
|
||||
exec --no-startup-id gnome-keyring-daemon --start --components=secrets
|
||||
exec_always --no-startup-id setxkbmap -layout us -variant intl
|
||||
exec_always --no-startup-id feh --bg-center ~/.config/i3/wallpapers/wallpaper-161664.jpg
|
||||
exec_always --no-startup-id ~/.config/i3/scripts/setup-gtk-theme.sh
|
||||
exec --no-startup-id /usr/libexec/xdg-desktop-portal
|
||||
|
||||
# Audio
|
||||
exec --no-startup-id pipewire
|
||||
exec --no-startup-id pipewire-pulse
|
||||
exec --no-startup-id wireplumber
|
||||
|
||||
# Compositor
|
||||
exec_always --no-startup-id picom -b
|
||||
|
||||
# Status bar
|
||||
exec_always --no-startup-id ~/.config/polybar/launch.sh
|
||||
|
||||
# Monitor configuration
|
||||
exec --no-startup-id autorandr --persistent --change
|
||||
|
||||
# Tray services
|
||||
exec --no-startup-id dunst
|
||||
exec --no-startup-id /usr/libexec/xfce-polkit
|
||||
exec --no-startup-id nm-applet
|
||||
exec --no-startup-id blueman-applet
|
||||
exec --no-startup-id udiskie
|
||||
exec --no-startup-id volumeicon
|
||||
exec --no-startup-id xfce4-clipman
|
||||
|
||||
# Lock screen on suspend (handled by elogind)
|
||||
exec --no-startup-id xss-lock -- ~/.config/i3/scripts/lockscreen
|
||||
|
||||
# General behavior
|
||||
focus_follows_mouse no
|
||||
mouse_warping none
|
||||
floating_modifier $mod
|
||||
tiling_drag modifier titlebar
|
||||
|
||||
# Borders
|
||||
default_border pixel 2
|
||||
default_floating_border pixel 2
|
||||
new_window pixel 2
|
||||
new_float pixel 2
|
||||
hide_edge_borders none
|
||||
|
||||
# Gaps (i3 >= 4.22)
|
||||
gaps inner 10
|
||||
gaps outer 4
|
||||
smart_gaps on
|
||||
smart_borders on
|
||||
|
||||
# vim-like directions
|
||||
set $left h
|
||||
set $down j
|
||||
set $up k
|
||||
set $right l
|
||||
|
||||
# Terminal
|
||||
bindsym $mod+Return exec --no-startup-id /usr/bin/alacritty
|
||||
|
||||
# Emergency terminal fallback
|
||||
bindsym $mod+Shift+Return exec --no-startup-id st
|
||||
|
||||
# Emacs client
|
||||
bindsym $mod+Shift+e exec --no-startup-id emacsclient -c -n
|
||||
|
||||
# Launcher
|
||||
#bindsym $mod+d exec --no-startup-id "rofi -modi drun,run -show drun"
|
||||
bindsym $mod+d exec --no-startup-id "rofi -show drun -theme ~/.config/rofi/config.rasi"
|
||||
|
||||
# Audio panel control
|
||||
bindsym $mod+Shift+v exec --no-startup-id pavucontrol
|
||||
|
||||
# File manager
|
||||
bindsym $mod+Shift+f exec thunar
|
||||
|
||||
# Manual lock screen
|
||||
bindsym $mod+Shift+x exec ~/.config/i3/scripts/lockscreen
|
||||
|
||||
# Kill focused window
|
||||
bindsym $mod+Shift+q kill
|
||||
|
||||
# Screenshot
|
||||
bindsym Print exec xfce4-screenshooter
|
||||
bindsym Shift+Print exec xfce4-screenshooter -r
|
||||
bindsym Alt+Print exec xfce4-screenshooter -w
|
||||
|
||||
# Focus
|
||||
bindsym $mod+$left focus left
|
||||
bindsym $mod+$down focus down
|
||||
bindsym $mod+$up focus up
|
||||
bindsym $mod+$right focus right
|
||||
|
||||
bindsym $mod+Left focus left
|
||||
bindsym $mod+Down focus down
|
||||
bindsym $mod+Up focus up
|
||||
bindsym $mod+Right focus right
|
||||
|
||||
# Move windows
|
||||
bindsym $mod+Shift+$left move left
|
||||
bindsym $mod+Shift+$down move down
|
||||
bindsym $mod+Shift+$up move up
|
||||
bindsym $mod+Shift+$right move right
|
||||
|
||||
bindsym $mod+Shift+Left move left
|
||||
bindsym $mod+Shift+Down move down
|
||||
bindsym $mod+Shift+Up move up
|
||||
bindsym $mod+Shift+Right move right
|
||||
|
||||
# Split
|
||||
bindsym $mod+b split h
|
||||
bindsym $mod+v split v
|
||||
|
||||
# Layouts
|
||||
bindsym $mod+f fullscreen toggle
|
||||
bindsym $mod+s layout stacking
|
||||
bindsym $mod+w layout tabbed
|
||||
bindsym $mod+e layout toggle split
|
||||
|
||||
# Floating / focus mode
|
||||
bindsym $mod+Shift+space floating toggle
|
||||
bindsym $mod+space focus mode_toggle
|
||||
bindsym $mod+a focus parent
|
||||
|
||||
# Scratchpad
|
||||
bindsym $mod+Shift+minus move scratchpad
|
||||
bindsym $mod+minus scratchpad show
|
||||
|
||||
# Volume (PipeWire / PulseAudio compatibility)
|
||||
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +5% && $refresh_i3status
|
||||
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -5% && $refresh_i3status
|
||||
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
|
||||
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle
|
||||
|
||||
# Brightness
|
||||
bindsym XF86MonBrightnessUp exec --no-startup-id brightnessctl set +10% && pkill -RTMIN+5 i3blocks
|
||||
bindsym XF86MonBrightnessDown exec --no-startup-id brightnessctl set 10%- && pkill -RTMIN+5 i3blocks
|
||||
|
||||
# Media keys
|
||||
bindsym XF86AudioPlay exec --no-startup-id playerctl play-pause
|
||||
bindsym XF86AudioNext exec --no-startup-id playerctl next
|
||||
bindsym XF86AudioPrev exec --no-startup-id playerctl previous
|
||||
|
||||
# Workspaces
|
||||
set $ws1 "1"
|
||||
set $ws2 "2"
|
||||
set $ws3 "3"
|
||||
set $ws4 "4"
|
||||
set $ws5 "5"
|
||||
set $ws6 "6"
|
||||
set $ws7 "7"
|
||||
set $ws8 "8"
|
||||
set $ws9 "9"
|
||||
set $ws10 "10"
|
||||
|
||||
workspace $ws1 output primary
|
||||
workspace $ws2 output primary
|
||||
workspace $ws3 output primary
|
||||
workspace $ws4 output primary
|
||||
workspace $ws5 output primary
|
||||
workspace $ws6 output primary
|
||||
workspace $ws7 output primary
|
||||
workspace $ws8 output primary
|
||||
workspace $ws9 output primary
|
||||
workspace $ws10 output primary
|
||||
|
||||
bindsym $mod+1 workspace number $ws1
|
||||
bindsym $mod+2 workspace number $ws2
|
||||
bindsym $mod+3 workspace number $ws3
|
||||
bindsym $mod+4 workspace number $ws4
|
||||
bindsym $mod+5 workspace number $ws5
|
||||
bindsym $mod+6 workspace number $ws6
|
||||
bindsym $mod+7 workspace number $ws7
|
||||
bindsym $mod+8 workspace number $ws8
|
||||
bindsym $mod+9 workspace number $ws9
|
||||
bindsym $mod+0 workspace number $ws10
|
||||
bindsym $mod+comma workspace prev
|
||||
bindsym $mod+period workspace next
|
||||
|
||||
bindsym $mod+Shift+1 move container to workspace number $ws1
|
||||
bindsym $mod+Shift+2 move container to workspace number $ws2
|
||||
bindsym $mod+Shift+3 move container to workspace number $ws3
|
||||
bindsym $mod+Shift+4 move container to workspace number $ws4
|
||||
bindsym $mod+Shift+5 move container to workspace number $ws5
|
||||
bindsym $mod+Shift+6 move container to workspace number $ws6
|
||||
bindsym $mod+Shift+7 move container to workspace number $ws7
|
||||
bindsym $mod+Shift+8 move container to workspace number $ws8
|
||||
bindsym $mod+Shift+9 move container to workspace number $ws9
|
||||
bindsym $mod+Shift+0 move container to workspace number $ws10
|
||||
|
||||
# Reload / restart / exit
|
||||
bindsym $mod+Shift+c reload
|
||||
bindsym $mod+Shift+r restart
|
||||
bindsym $mod+Shift+BackSpace exec --no-startup-id i3-msg exit
|
||||
bindsym $mod+Shift+Escape exec --no-startup-id ~/.config/i3/scripts/powermenu.sh
|
||||
|
||||
# Resize mode
|
||||
mode "resize" {
|
||||
bindsym $left resize shrink width 10 px or 10 ppt
|
||||
bindsym $down resize grow height 10 px or 10 ppt
|
||||
bindsym $up resize shrink height 10 px or 10 ppt
|
||||
bindsym $right resize grow width 10 px or 10 ppt
|
||||
|
||||
bindsym Left resize shrink width 10 px or 10 ppt
|
||||
bindsym Down resize grow height 10 px or 10 ppt
|
||||
bindsym Up resize shrink height 10 px or 10 ppt
|
||||
bindsym Right resize grow width 10 px or 10 ppt
|
||||
|
||||
bindsym Return mode "default"
|
||||
bindsym Escape mode "default"
|
||||
bindsym $mod+r mode "default"
|
||||
}
|
||||
|
||||
bindsym $mod+r mode "resize"
|
||||
|
||||
# i3bar + i3status (disabilitato: ora gestito da polybar)
|
||||
# bar {
|
||||
# status_command i3blocks
|
||||
# position bottom
|
||||
# tray_output primary
|
||||
# font pango:Liberation Mono 10
|
||||
#
|
||||
# colors {
|
||||
# background #1f1f28
|
||||
# statusline #d0d0d0
|
||||
# separator #3a3a46
|
||||
#
|
||||
# focused_workspace #4a90d9 #4a90d9 #ffffff
|
||||
# active_workspace #3a3a46 #2b2b36 #d0d0d0
|
||||
# inactive_workspace #1f1f28 #1f1f28 #9a9a9a
|
||||
# urgent_workspace #c7162b #c7162b #ffffff
|
||||
# }
|
||||
# }
|
||||
|
||||
client.focused #4a90d9 #4a90d9 #ffffff #4a90d9 #4a90d9
|
||||
client.focused_inactive #3a3a46 #2b2b36 #eeeeee #3a3a46 #3a3a46
|
||||
client.unfocused #2b2b36 #1f1f28 #bcbcbc #2b2b36 #2b2b36
|
||||
client.urgent #c7162b #c7162b #ffffff #c7162b #c7162b
|
||||
client.placeholder #1f1f28 #1f1f28 #bcbcbc #1f1f28 #1f1f28
|
||||
client.background #1f1f28
|
||||
@@ -1,94 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
battery_json() {
|
||||
local total_now=0
|
||||
local total_full=0
|
||||
local overall_status=""
|
||||
local now full status bat capacity icon color
|
||||
|
||||
shopt -s nullglob
|
||||
|
||||
for bat in /sys/class/power_supply/BAT*; do
|
||||
[[ -d "$bat" ]] || continue
|
||||
|
||||
if [[ -r "$bat/energy_now" && -r "$bat/energy_full" ]]; then
|
||||
now=$(<"$bat/energy_now")
|
||||
full=$(<"$bat/energy_full")
|
||||
elif [[ -r "$bat/charge_now" && -r "$bat/charge_full" ]]; then
|
||||
now=$(<"$bat/charge_now")
|
||||
full=$(<"$bat/charge_full")
|
||||
else
|
||||
continue
|
||||
fi
|
||||
|
||||
status=$(<"$bat/status")
|
||||
|
||||
(( total_now += now ))
|
||||
(( total_full += full ))
|
||||
|
||||
case "$status" in
|
||||
Charging)
|
||||
overall_status="Charging"
|
||||
;;
|
||||
Discharging)
|
||||
[[ "$overall_status" != "Charging" ]] && overall_status="Discharging"
|
||||
;;
|
||||
Full)
|
||||
[[ -z "$overall_status" ]] && overall_status="Full"
|
||||
;;
|
||||
*)
|
||||
[[ -z "$overall_status" ]] && overall_status="$status"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
(( total_full > 0 )) || return 1
|
||||
|
||||
capacity=$(( 100 * total_now / total_full ))
|
||||
|
||||
case "$overall_status" in
|
||||
Charging) icon="⚡" ;;
|
||||
Discharging) icon="🔋" ;;
|
||||
Full) icon="✔" ;;
|
||||
*) icon="?" ;;
|
||||
esac
|
||||
|
||||
if (( capacity <= 15 )); then
|
||||
color="#ff5555"
|
||||
elif (( capacity <= 30 )); then
|
||||
color="#f1fa8c"
|
||||
else
|
||||
color="#ffffff"
|
||||
fi
|
||||
|
||||
printf '{"full_text":"%s %s%%","name":"battery","color":"%s"}' \
|
||||
"$icon" "$capacity" "$color"
|
||||
}
|
||||
|
||||
i3status | while IFS= read -r line; do
|
||||
case "$line" in
|
||||
'{"version":'* | '[')
|
||||
printf '%s\n' "$line"
|
||||
;;
|
||||
,*)
|
||||
batt="$(battery_json)"
|
||||
if [[ -n "$batt" ]]; then
|
||||
line="${line#,}"
|
||||
printf ',[%s,%s\n' "$batt" "${line#\[}"
|
||||
else
|
||||
printf '%s\n' "$line"
|
||||
fi
|
||||
;;
|
||||
\[*)
|
||||
batt="$(battery_json)"
|
||||
if [[ -n "$batt" ]]; then
|
||||
printf '[%s,%s\n' "$batt" "${line#\[}"
|
||||
else
|
||||
printf '%s\n' "$line"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
printf '%s\n' "$line"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
@@ -1,37 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
wallpaper="$HOME/.config/i3/wallpapers/maxresdefault.jpg"
|
||||
cached="$HOME/.cache/i3lock/wallpaper.png"
|
||||
dims_cache="$HOME/.cache/i3lock/dims.txt"
|
||||
dims=$(xdotool getdisplaygeometry | tr ' ' 'x')
|
||||
|
||||
if [ ! -f "$cached" ] || \
|
||||
[ "$(stat -c %Y "$wallpaper")" -gt "$(stat -c %Y "$cached")" ] || \
|
||||
[ "$dims" != "$(cat "$dims_cache" 2>/dev/null)" ]; then
|
||||
mkdir -p "$HOME/.cache/i3lock"
|
||||
convert "$wallpaper" -resize "$dims^" -extent "$dims" PNG:- > "$cached"
|
||||
echo -n "$dims" > "$dims_cache"
|
||||
fi
|
||||
|
||||
i3lock \
|
||||
--image "$cached" \
|
||||
--clock \
|
||||
--indicator \
|
||||
--radius 100 \
|
||||
--ring-width 8 \
|
||||
--color=000000ff \
|
||||
--ring-color=2f4058ff \
|
||||
--inside-color=1f1f28ff \
|
||||
--line-color=00000000 \
|
||||
--separator-color=3a3a46ff \
|
||||
--keyhl-color=6daeeaff \
|
||||
--bshl-color=c7162bff \
|
||||
--ringver-color=4a90d9ff \
|
||||
--insidever-color=1f1f28ff \
|
||||
--ringwrong-color=c7162bff \
|
||||
--insidewrong-color=1f1f28ff \
|
||||
--time-color=d0d0d0ff \
|
||||
--date-color=9a9a9aff \
|
||||
--layout-color=d0d0d0ff \
|
||||
--verif-color=d0d0d0ff \
|
||||
--wrong-color=d0d0d0ff
|
||||
@@ -1,29 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
choice="$(printf "⏻ Shutdown\n Reboot\n Logout\n Lock\n⏾ Suspend" \
|
||||
| rofi -dmenu \
|
||||
-i \
|
||||
-p "Power" \
|
||||
-theme ~/.config/rofi/config.rasi \
|
||||
-theme-str 'window { width: 20%; location: center; anchor: center; } listview { columns: 1; spacing: 6px; }')"
|
||||
|
||||
[ -z "$choice" ] && exit 0
|
||||
|
||||
case "$choice" in
|
||||
*Lock)
|
||||
~/.config/i3/scripts/lockscreen
|
||||
;;
|
||||
*Logout)
|
||||
i3-msg exit
|
||||
;;
|
||||
*Suspend)
|
||||
~/.config/i3/scripts/lockscreen
|
||||
loginctl suspend
|
||||
;;
|
||||
*Reboot)
|
||||
loginctl reboot
|
||||
;;
|
||||
*Shutdown)
|
||||
loginctl poweroff
|
||||
;;
|
||||
esac
|
||||
@@ -1,53 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
THEME="Yaru-blue-dark"
|
||||
ICONS="Yaru-blue-dark"
|
||||
CURSOR="Yaru"
|
||||
|
||||
FONT_UI="Liberation Sans 10"
|
||||
|
||||
mkdir -p "$HOME/.config/gtk-3.0"
|
||||
mkdir -p "$HOME/.config/gtk-4.0"
|
||||
|
||||
cat > "$HOME/.gtkrc-2.0" <<EOF
|
||||
gtk-theme-name="$THEME"
|
||||
gtk-icon-theme-name="$ICONS"
|
||||
gtk-cursor-theme-name="$CURSOR"
|
||||
gtk-font-name="$FONT_UI"
|
||||
gtk-button-images=1
|
||||
gtk-menu-images=1
|
||||
EOF
|
||||
|
||||
cat > "$HOME/.config/gtk-3.0/settings.ini" <<EOF
|
||||
[Settings]
|
||||
gtk-theme-name=$THEME
|
||||
gtk-icon-theme-name=$ICONS
|
||||
gtk-cursor-theme-name=$CURSOR
|
||||
gtk-font-name=$FONT_UI
|
||||
gtk-application-prefer-dark-theme=1
|
||||
gtk-xft-antialias=1
|
||||
gtk-xft-hinting=1
|
||||
gtk-xft-hintstyle=hintslight
|
||||
gtk-xft-rgba=rgb
|
||||
EOF
|
||||
|
||||
cat > "$HOME/.config/gtk-4.0/settings.ini" <<EOF
|
||||
[Settings]
|
||||
gtk-theme-name=$THEME
|
||||
gtk-icon-theme-name=$ICONS
|
||||
gtk-cursor-theme-name=$CURSOR
|
||||
gtk-font-name=$FONT_UI
|
||||
gtk-application-prefer-dark-theme=1
|
||||
EOF
|
||||
|
||||
# esporta variabili utili
|
||||
export GTK_THEME=$THEME
|
||||
export XCURSOR_THEME=$CURSOR
|
||||
export XCURSOR_SIZE=24
|
||||
|
||||
if command -v gsettings >/dev/null 2>&1; then
|
||||
gsettings set org.gnome.desktop.interface gtk-theme "$THEME" >/dev/null 2>&1 || true
|
||||
gsettings set org.gnome.desktop.interface icon-theme "$ICONS" >/dev/null 2>&1 || true
|
||||
gsettings set org.gnome.desktop.interface cursor-theme "$CURSOR" >/dev/null 2>&1 || true
|
||||
gsettings set org.gnome.desktop.interface color-scheme prefer-dark >/dev/null 2>&1 || true
|
||||
fi
|
||||
|
Before Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 2.7 MiB |
|
Before Width: | Height: | Size: 553 KiB |
|
Before Width: | Height: | Size: 116 KiB |
|
Before Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 1.7 MiB |
|
Before Width: | Height: | Size: 118 KiB |
@@ -1,31 +0,0 @@
|
||||
separator=true
|
||||
separator_block_width=15
|
||||
|
||||
[memory]
|
||||
command=~/.config/i3blocks/scripts/memory
|
||||
interval=10
|
||||
color=#d0d0d0
|
||||
|
||||
[temperature]
|
||||
command=~/.config/i3blocks/scripts/temperature
|
||||
interval=10
|
||||
|
||||
[backlight]
|
||||
command=~/.config/i3blocks/scripts/backlight
|
||||
interval=once
|
||||
signal=5
|
||||
color=#7dcfff
|
||||
|
||||
[essid]
|
||||
command=~/.config/i3blocks/scripts/wifi
|
||||
interval=10
|
||||
color=#4a90d9
|
||||
|
||||
[battery]
|
||||
command=~/.config/i3blocks/scripts/battery
|
||||
interval=30
|
||||
|
||||
[time]
|
||||
command=date '+%Y-%m-%d %H:%M'
|
||||
interval=60
|
||||
color=#d0d0d0
|
||||
@@ -1,14 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
cur="$(brightnessctl g 2>/dev/null)"
|
||||
max="$(brightnessctl m 2>/dev/null)"
|
||||
|
||||
[ -n "$cur" ] || exit 0
|
||||
[ -n "$max" ] || exit 0
|
||||
[ "$max" -gt 0 ] || exit 0
|
||||
|
||||
pct=$((100 * cur / max))
|
||||
|
||||
echo "BL ${pct}%"
|
||||
echo "BL ${pct}%"
|
||||
echo "#6daeea"
|
||||
@@ -1,47 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
total_now=0
|
||||
total_full=0
|
||||
status=""
|
||||
|
||||
for bat in /sys/class/power_supply/BAT*; do
|
||||
[ -d "$bat" ] || continue
|
||||
|
||||
if [ -r "$bat/energy_now" ] && [ -r "$bat/energy_full" ]; then
|
||||
now=$(cat "$bat/energy_now")
|
||||
full=$(cat "$bat/energy_full")
|
||||
elif [ -r "$bat/charge_now" ] && [ -r "$bat/charge_full" ]; then
|
||||
now=$(cat "$bat/charge_now")
|
||||
full=$(cat "$bat/charge_full")
|
||||
else
|
||||
continue
|
||||
fi
|
||||
|
||||
st=$(cat "$bat/status" 2>/dev/null)
|
||||
|
||||
total_now=$((total_now + now))
|
||||
total_full=$((total_full + full))
|
||||
|
||||
case "$st" in
|
||||
Charging) status="⚡" ;;
|
||||
Discharging) [ -z "$status" ] && status="🔋" ;;
|
||||
Full) [ -z "$status" ] && status="✔" ;;
|
||||
esac
|
||||
done
|
||||
|
||||
[ "$total_full" -gt 0 ] || exit 0
|
||||
|
||||
pct=$((100 * total_now / total_full))
|
||||
[ -n "$status" ] || status="BAT"
|
||||
|
||||
text="$status $pct%"
|
||||
|
||||
if [ "$pct" -le 15 ]; then
|
||||
color="#ff5555"
|
||||
elif [ "$pct" -le 30 ]; then
|
||||
color="#f1fa8c"
|
||||
else
|
||||
color="#9ece6a"
|
||||
fi
|
||||
|
||||
printf '%s\n%s\n%s\n' "$text" "$text" "$color"
|
||||
@@ -1,17 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
state="$(xset q 2>/dev/null)"
|
||||
|
||||
caps="$(printf '%s\n' "$state" | grep 'Caps Lock:' | awk '{print $4}')"
|
||||
num="$(printf '%s\n' "$state" | grep 'Num Lock:' | awk '{print $8}')"
|
||||
|
||||
out=""
|
||||
|
||||
[ "$caps" = "on" ] && out="${out} CAPS"
|
||||
[ "$num" = "on" ] && out="${out} NUM"
|
||||
|
||||
[ -n "$out" ] || exit 0
|
||||
|
||||
echo "$out"
|
||||
echo "$out"
|
||||
echo "#9a9a9a"
|
||||
@@ -1,19 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
mem=$(free | awk '/^Mem:/ {print $3/$2 * 100.0}')
|
||||
mem=${mem%.*}
|
||||
|
||||
if [ "$mem" -ge 90 ]; then
|
||||
color="#c7162b"
|
||||
elif [ "$mem" -ge 70 ]; then
|
||||
color="#e95420"
|
||||
else
|
||||
color="#d0d0d0"
|
||||
fi
|
||||
|
||||
used=$(free -h | awk '/^Mem:/ {print $3}')
|
||||
total=$(free -h | awk '/^Mem:/ {print $2}')
|
||||
|
||||
echo "RAM $used/$total"
|
||||
echo "RAM $used/$total"
|
||||
echo "$color"
|
||||
@@ -1,18 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
t=$(cat /sys/class/thermal/thermal_zone0/temp 2>/dev/null)
|
||||
[ -n "$t" ] || exit 0
|
||||
|
||||
temp=$((t / 1000))
|
||||
|
||||
if [ "$temp" -ge 85 ]; then
|
||||
color="#c7162b"
|
||||
elif [ "$temp" -ge 70 ]; then
|
||||
color="#e95420"
|
||||
else
|
||||
color="#d0d0d0"
|
||||
fi
|
||||
|
||||
echo "CPU ${temp}°C"
|
||||
echo "CPU ${temp}°C"
|
||||
echo "$color"
|
||||
@@ -1,16 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
mute=$(pactl get-sink-mute @DEFAULT_SINK@ 2>/dev/null | awk '{print $2}')
|
||||
vol=$(pactl get-sink-volume @DEFAULT_SINK@ 2>/dev/null | awk '/Volume:/ {print $5; exit}')
|
||||
|
||||
[ -n "$vol" ] || exit 0
|
||||
|
||||
if [ "$mute" = "yes" ]; then
|
||||
text="VOL mute"
|
||||
color="#7aa2f7"
|
||||
else
|
||||
text="VOL $vol"
|
||||
color="#c0caf5"
|
||||
fi
|
||||
|
||||
printf '%s\n%s\n%s\n' "$text" "$text" "$color"
|
||||
@@ -1,9 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
ssid=$(nmcli -t -f active,ssid dev wifi | awk -F: '$1=="yes"{print $2}')
|
||||
|
||||
[ -n "$ssid" ] || exit 0
|
||||
|
||||
echo "WIFI $ssid"
|
||||
echo "WIFI $ssid"
|
||||
echo "#4a90d9"
|
||||
@@ -1,57 +0,0 @@
|
||||
backend = "glx";
|
||||
vsync = true;
|
||||
use-damage = true;
|
||||
detect-rounded-corners = true;
|
||||
detect-client-opacity = true;
|
||||
detect-transient = true;
|
||||
|
||||
corner-radius = 10;
|
||||
rounded-corners-exclude = [
|
||||
"window_type = 'dock'",
|
||||
"window_type = 'desktop'",
|
||||
"class_g = 'i3-frame'"
|
||||
];
|
||||
|
||||
shadow = true;
|
||||
shadow-radius = 18;
|
||||
shadow-opacity = 0.55;
|
||||
shadow-offset-x = -10;
|
||||
shadow-offset-y = -10;
|
||||
shadow-exclude = [
|
||||
"name = 'Notification'",
|
||||
"class_g = 'Conky'",
|
||||
"class_g ?= 'Notify-osd'",
|
||||
"class_g = 'Cairo-clock'",
|
||||
"_GTK_FRAME_EXTENTS@:c",
|
||||
"window_type = 'dock'",
|
||||
"window_type = 'desktop'"
|
||||
];
|
||||
|
||||
fading = true;
|
||||
fade-in-step = 0.05;
|
||||
fade-out-step = 0.05;
|
||||
fade-delta = 6;
|
||||
|
||||
blur-method = "dual_kawase";
|
||||
blur-strength = 5;
|
||||
blur-background = true;
|
||||
blur-background-frame = true;
|
||||
blur-background-fixed = false;
|
||||
blur-background-exclude = [
|
||||
"window_type = 'dock'",
|
||||
"window_type = 'desktop'",
|
||||
"class_g = 'i3-frame'",
|
||||
"class_g = 'Dunst'",
|
||||
"_GTK_FRAME_EXTENTS@:c"
|
||||
];
|
||||
|
||||
opacity-rule = [];
|
||||
|
||||
wintypes:
|
||||
{
|
||||
tooltip = { fade = true; shadow = true; opacity = 0.95; focus = true; };
|
||||
dock = { shadow = false; };
|
||||
dnd = { shadow = false; };
|
||||
popup_menu = { opacity = 0.95; };
|
||||
dropdown_menu = { opacity = 0.95; };
|
||||
};
|
||||
@@ -1,208 +0,0 @@
|
||||
[colors]
|
||||
background = #1f1f28
|
||||
background-alt = #2b2b36
|
||||
foreground = #d0d0d0
|
||||
foreground-alt = #9a9a9a
|
||||
primary = #4a90d9
|
||||
secondary = #7dcfff
|
||||
warm = #e0af68
|
||||
success = #9ec07c
|
||||
info = #bb9af7
|
||||
alert = #c7162b
|
||||
disabled = #3a3a46
|
||||
|
||||
[bar/main]
|
||||
monitor = ${env:MONITOR:}
|
||||
bottom = false
|
||||
width = 100%
|
||||
height = 24pt
|
||||
radius = 0
|
||||
background = ${colors.background}
|
||||
foreground = ${colors.foreground}
|
||||
line-size = 2pt
|
||||
border-size = 0
|
||||
padding-left = 1
|
||||
padding-right = 1
|
||||
module-margin = 1
|
||||
|
||||
font-0 = LiterationMono Nerd Font:size=10;2
|
||||
font-1 = Symbols Nerd Font Mono:size=12;2
|
||||
|
||||
modules-left = i3
|
||||
modules-center = date
|
||||
modules-right = cpu memory disk temperature backlight wifi battery
|
||||
|
||||
tray-position = right
|
||||
tray-padding = 2
|
||||
|
||||
cursor-click = pointer
|
||||
|
||||
wm-restack = i3
|
||||
override-redirect = false
|
||||
|
||||
[module/i3]
|
||||
type = internal/i3
|
||||
pin-workspaces = false
|
||||
show-urgent = true
|
||||
strip-wsnumbers = true
|
||||
enable-scroll = false
|
||||
index-sort = true
|
||||
|
||||
ws-icon-0 = 1;I
|
||||
ws-icon-1 = 2;II
|
||||
ws-icon-2 = 3;III
|
||||
ws-icon-3 = 4;IV
|
||||
ws-icon-4 = 5;V
|
||||
ws-icon-5 = 6;VI
|
||||
ws-icon-6 = 7;VII
|
||||
ws-icon-7 = 8;VIII
|
||||
ws-icon-8 = 9;IX
|
||||
ws-icon-9 = 10;X
|
||||
ws-icon-default =
|
||||
|
||||
label-focused = %icon%
|
||||
label-focused-foreground = #ffffff
|
||||
label-focused-background = ${colors.primary}
|
||||
label-focused-padding = 1
|
||||
|
||||
label-unfocused = %icon%
|
||||
label-unfocused-foreground = ${colors.foreground-alt}
|
||||
label-unfocused-padding = 1
|
||||
|
||||
label-visible = %icon%
|
||||
label-visible-foreground = ${colors.foreground}
|
||||
label-visible-background = ${colors.background-alt}
|
||||
label-visible-padding = 1
|
||||
|
||||
label-urgent = %icon%
|
||||
label-urgent-foreground = #ffffff
|
||||
label-urgent-background = ${colors.alert}
|
||||
label-urgent-padding = 1
|
||||
|
||||
[module/date]
|
||||
type = internal/date
|
||||
interval = 60
|
||||
date = %Y-%m-%d
|
||||
time = %H:%M
|
||||
format-prefix = " "
|
||||
format-prefix-foreground = ${colors.foreground-alt}
|
||||
label = %date% %time%
|
||||
label-foreground = ${colors.foreground}
|
||||
|
||||
[module/memory]
|
||||
type = internal/memory
|
||||
interval = 10
|
||||
format = <label>
|
||||
format-prefix = " "
|
||||
format-prefix-foreground = ${colors.secondary}
|
||||
label = %gb_used% / %gb_total%
|
||||
label-foreground = ${colors.secondary}
|
||||
|
||||
[module/temperature]
|
||||
type = internal/temperature
|
||||
interval = 10
|
||||
thermal-zone = 0
|
||||
warn-temperature = 80
|
||||
format = <label>
|
||||
format-prefix = " "
|
||||
format-prefix-foreground = ${colors.warm}
|
||||
format-warn = <label-warn>
|
||||
format-warn-prefix = " "
|
||||
format-warn-prefix-foreground = ${colors.alert}
|
||||
label = %temperature-c%
|
||||
label-foreground = ${colors.warm}
|
||||
label-warn = %temperature-c%
|
||||
label-warn-foreground = ${colors.alert}
|
||||
|
||||
[module/backlight]
|
||||
type = internal/backlight
|
||||
card = intel_backlight
|
||||
use-actual-brightness = true
|
||||
enable-scroll = true
|
||||
format = <label>
|
||||
format-prefix = " "
|
||||
format-prefix-foreground = ${colors.foreground}
|
||||
label = %percentage%%
|
||||
label-foreground = ${colors.foreground}
|
||||
|
||||
[module/wifi]
|
||||
type = internal/network
|
||||
interface-type = wireless
|
||||
interval = 5
|
||||
format-connected = <label-connected>
|
||||
format-connected-prefix = " "
|
||||
format-connected-prefix-foreground = ${colors.primary}
|
||||
format-disconnected = <label-disconnected>
|
||||
format-disconnected-prefix = " "
|
||||
format-disconnected-prefix-foreground = ${colors.disabled}
|
||||
label-connected = %essid% %signal%%
|
||||
label-connected-foreground = ${colors.primary}
|
||||
label-disconnected = offline
|
||||
label-disconnected-foreground = ${colors.disabled}
|
||||
|
||||
[module/battery]
|
||||
type = internal/battery
|
||||
battery = BAT0
|
||||
adapter = AC
|
||||
full-at = 98
|
||||
low-at = 15
|
||||
|
||||
format-charging = <animation-charging> <label-charging>
|
||||
format-discharging = <ramp-capacity> <label-discharging>
|
||||
format-full = <label-full>
|
||||
format-low = <label-low>
|
||||
|
||||
format-full-prefix = " "
|
||||
format-full-prefix-foreground = ${colors.success}
|
||||
|
||||
label-charging = %percentage%%
|
||||
label-charging-foreground = ${colors.success}
|
||||
label-discharging = %percentage%%
|
||||
label-discharging-foreground = ${colors.foreground}
|
||||
label-full = full
|
||||
label-full-foreground = ${colors.success}
|
||||
label-low = %percentage%%
|
||||
label-low-foreground = ${colors.alert}
|
||||
|
||||
ramp-capacity-0 =
|
||||
ramp-capacity-1 =
|
||||
ramp-capacity-2 =
|
||||
ramp-capacity-3 =
|
||||
ramp-capacity-4 =
|
||||
ramp-capacity-foreground = ${colors.foreground}
|
||||
|
||||
animation-charging-0 =
|
||||
animation-charging-1 =
|
||||
animation-charging-2 =
|
||||
animation-charging-3 =
|
||||
animation-charging-4 =
|
||||
animation-charging-foreground = ${colors.success}
|
||||
animation-charging-framerate = 750
|
||||
|
||||
[module/cpu]
|
||||
type = internal/cpu
|
||||
interval = 5
|
||||
format = <label>
|
||||
format-prefix = " "
|
||||
format-prefix-foreground = ${colors.info}
|
||||
label = %percentage%%
|
||||
label-foreground = ${colors.info}
|
||||
|
||||
[module/disk]
|
||||
type = internal/fs
|
||||
mount-0 = /
|
||||
interval = 60
|
||||
format-mounted = <label-mounted>
|
||||
format-mounted-prefix = " "
|
||||
format-mounted-prefix-foreground = ${colors.success}
|
||||
label-mounted = %used% / %total%
|
||||
label-mounted-foreground = ${colors.success}
|
||||
format-unmounted = <label-unmounted>
|
||||
format-unmounted-prefix = " "
|
||||
format-unmounted-prefix-foreground = ${colors.disabled}
|
||||
label-unmounted = %mountpoint% n/a
|
||||
label-unmounted-foreground = ${colors.disabled}
|
||||
|
||||
[settings]
|
||||
screenchange-reload = true
|
||||
pseudo-transparency = false
|
||||
@@ -1,20 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Restart polybar on each connected monitor.
|
||||
|
||||
polybar-msg cmd quit >/dev/null 2>&1 || true
|
||||
|
||||
while pgrep -u "$UID" -x polybar >/dev/null; do
|
||||
sleep 0.1
|
||||
done
|
||||
|
||||
if command -v xrandr >/dev/null 2>&1; then
|
||||
monitors=$(xrandr --query | awk '/ connected/ {print $1}')
|
||||
fi
|
||||
|
||||
if [ -n "${monitors:-}" ]; then
|
||||
for m in $monitors; do
|
||||
MONITOR="$m" polybar main >/dev/null 2>&1 &
|
||||
done
|
||||
else
|
||||
polybar main >/dev/null 2>&1 &
|
||||
fi
|
||||
@@ -1,21 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
[ $# -gt 0 ] || set -- i3
|
||||
|
||||
[ -r /etc/profile ] && . /etc/profile
|
||||
[ -r "$HOME/.profile" ] && . "$HOME/.profile"
|
||||
|
||||
session_name=${1##*/}
|
||||
|
||||
export XDG_CURRENT_DESKTOP="$session_name"
|
||||
export XDG_SESSION_DESKTOP="$session_name"
|
||||
export XDG_SESSION_TYPE=x11
|
||||
export SSH_AUTH_SOCK="$HOME/.local/state/ssh-agent/socket"
|
||||
|
||||
exec dbus-run-session sh -eu -c '
|
||||
umask 077
|
||||
printf "%s\n" "$DBUS_SESSION_BUS_ADDRESS" > "$HOME/.dbus-session-bus-address"
|
||||
gpgconf --launch gpg-agent
|
||||
"$HOME/.local/bin/update-turnstile-env"
|
||||
exec "$@"
|
||||
' sh "$@"
|
||||
@@ -1,28 +0,0 @@
|
||||
output HDMI-A-0
|
||||
off
|
||||
output DisplayPort-0
|
||||
off
|
||||
output DisplayPort-1
|
||||
off
|
||||
output DisplayPort-2
|
||||
off
|
||||
output DisplayPort-3
|
||||
off
|
||||
output DisplayPort-4
|
||||
off
|
||||
output DisplayPort-5
|
||||
off
|
||||
output HDMI-A-1
|
||||
crtc 0
|
||||
mode 3440x1440
|
||||
pos 0x0
|
||||
primary
|
||||
rate 99.99
|
||||
x-prop-colorspace Default
|
||||
x-prop-max_bpc 16
|
||||
x-prop-non_desktop 0
|
||||
x-prop-scaling_mode None
|
||||
x-prop-tearfree auto
|
||||
x-prop-underscan off
|
||||
x-prop-underscan_hborder 0
|
||||
x-prop-underscan_vborder 0
|
||||
@@ -1 +0,0 @@
|
||||
HDMI-A-1 00ffffffffffff0061a9443400000000101e0103805021782a64f5ad5049a322135054adcf00714f81c0814081809500a9c0b300d1c0216870a0d0a02950302035001d4e3100001a000000fd0030791eaa3c000a202020202020000000fc004d69204d6f6e69746f720a2020000000ffd03030303030303030303030303001ae020335f14c010203040590111213141f3f23090707830100006a030c001000383c20000067d85dc40178c003681a000001013079ed40d070a0d0a02950584045001d4e3100001ea348b86861a03250304035001d4e3100001ef57c70a0d0a02950302035001d4e3100001a565e00a0a0a02950302035001d4d3100001a000038
|
||||
@@ -1,27 +0,0 @@
|
||||
output HDMI-1
|
||||
off
|
||||
output DP-2
|
||||
off
|
||||
output HDMI-2
|
||||
off
|
||||
output eDP-1
|
||||
crtc 0
|
||||
mode 1920x1080
|
||||
pos 0x0
|
||||
rate 60.01
|
||||
x-prop-broadcast_rgb Automatic
|
||||
x-prop-colorspace Default
|
||||
x-prop-max_bpc 12
|
||||
x-prop-non_desktop 0
|
||||
x-prop-scaling_mode Full aspect
|
||||
output DP-1
|
||||
crtc 1
|
||||
mode 3440x1440
|
||||
pos 1920x0
|
||||
primary
|
||||
rate 100.00
|
||||
x-prop-audio auto
|
||||
x-prop-broadcast_rgb Automatic
|
||||
x-prop-colorspace Default
|
||||
x-prop-max_bpc 12
|
||||
x-prop-non_desktop 0
|
||||
@@ -1,2 +0,0 @@
|
||||
DP-1 00ffffffffffff0061a9443400000000101e0104b55021783b64f5ad5049a322135054adcf00714f81c0814081809500a9c0b300d1c0226870a0d0a02950302035001d4e3100001a20fd70a0d0a03c50302035001d4e3100001e000000fd003090a0a03c010a202020202020000000fc004d69204d6f6e69746f720a202002ac020320f44c010203040590111213141f3f2309070783010000e6060701605d29023a801871382d40582c96001d4e3100001e20ac00a0a0382d40302035001d4e3100001ef0d270a0d0a03c50302035001d4e3100001ea348b86861a03250304035001d4e3100001ef57c70a0d0a02950302035001d4e3100001e00000000006b7012790000030014bf2f01046f0d9f002f001f009f053b000280040007000a0881000804000402100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e190
|
||||
eDP-1 00ffffffffffff0006af3d1000000000001a0104951f117802c32592575a942a22505400000001010101010101010101010101010101143780b2703828403064310035ad100000180000000f0000000000000000000000000020000000fe0041554f0a202020202020202020000000fe004231343048414b30312e30200a00bd
|
||||
@@ -1,19 +0,0 @@
|
||||
output DP-1
|
||||
off
|
||||
output HDMI-1
|
||||
off
|
||||
output DP-2
|
||||
off
|
||||
output HDMI-2
|
||||
off
|
||||
output eDP-1
|
||||
crtc 0
|
||||
mode 1920x1080
|
||||
pos 0x0
|
||||
primary
|
||||
rate 60.01
|
||||
x-prop-broadcast_rgb Automatic
|
||||
x-prop-colorspace Default
|
||||
x-prop-max_bpc 12
|
||||
x-prop-non_desktop 0
|
||||
x-prop-scaling_mode Full aspect
|
||||
@@ -1 +0,0 @@
|
||||
eDP-1 00ffffffffffff0006af3d1000000000001a0104951f117802c32592575a942a22505400000001010101010101010101010101010101143780b2703828403064310035ad100000180000000f0000000000000000000000000020000000fe0041554f0a202020202020202020000000fe004231343048414b30312e30200a00bd
|
||||
@@ -1,103 +0,0 @@
|
||||
#!/usr/bin/env sh
|
||||
# Remove i3 session artifacts: exclusive packages, dotfiles and the emptty
|
||||
# xsessions entry. Shared resources with sway (dunst, rofi, alacritty,
|
||||
# xfce4-screenshooter) are left untouched.
|
||||
|
||||
set -eu
|
||||
|
||||
I3_PACKAGES="
|
||||
arandr
|
||||
autorandr
|
||||
feh
|
||||
i3
|
||||
i3blocks
|
||||
i3blocks-blocklets
|
||||
i3lock-color
|
||||
i3status
|
||||
picom
|
||||
polybar
|
||||
scrot
|
||||
setxkbmap
|
||||
volumeicon
|
||||
xclip
|
||||
xfce4-clipman-plugin
|
||||
xkbutils
|
||||
xorg-fonts
|
||||
xorg-minimal
|
||||
xss-lock
|
||||
xdotool
|
||||
"
|
||||
|
||||
I3_DOTFILES="
|
||||
$HOME/.config/i3
|
||||
$HOME/.config/i3blocks
|
||||
$HOME/.config/picom
|
||||
$HOME/.config/polybar
|
||||
$HOME/.xinitrc
|
||||
"
|
||||
|
||||
EMPTTY_SESSION=/etc/emptty/xsessions/i3.desktop
|
||||
|
||||
confirm() {
|
||||
printf '%s [y/N] ' "$1"
|
||||
read -r answer
|
||||
case "$answer" in
|
||||
y|Y|yes|YES) return 0 ;;
|
||||
*) return 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
filter_installed() {
|
||||
for p in $1; do
|
||||
if xbps-query -p pkgver "$p" >/dev/null 2>&1; then
|
||||
printf '%s\n' "$p"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
if ! command -v xbps-remove >/dev/null 2>&1; then
|
||||
printf 'Error: xbps-remove not found (not a Void host?)\n' >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
installed=$(filter_installed "$I3_PACKAGES" | tr '\n' ' ' | sed 's/ *$//')
|
||||
|
||||
printf '== i3 cleanup ==\n\n'
|
||||
printf 'Packages to remove (installed only):\n'
|
||||
if [ -n "$installed" ]; then
|
||||
printf ' %s\n' $installed
|
||||
else
|
||||
printf ' (none)\n'
|
||||
fi
|
||||
printf '\nDotfiles to remove:\n'
|
||||
for d in $I3_DOTFILES; do
|
||||
if [ -e "$d" ] || [ -L "$d" ]; then
|
||||
printf ' %s\n' "$d"
|
||||
fi
|
||||
done
|
||||
printf '\nEmptty session entry:\n'
|
||||
if [ -e "$EMPTTY_SESSION" ]; then
|
||||
printf ' %s\n' "$EMPTTY_SESSION"
|
||||
else
|
||||
printf ' (absent)\n'
|
||||
fi
|
||||
printf '\nShared (NOT removed): dunst, rofi, alacritty, xfce4-screenshooter and their configs.\n\n'
|
||||
|
||||
confirm 'Proceed?' || { printf 'Aborted.\n'; exit 0; }
|
||||
|
||||
if [ -n "$installed" ]; then
|
||||
# shellcheck disable=SC2086
|
||||
sudo xbps-remove -Ry $installed
|
||||
fi
|
||||
|
||||
for d in $I3_DOTFILES; do
|
||||
if [ -e "$d" ] || [ -L "$d" ]; then
|
||||
rm -rf -- "$d"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -e "$EMPTTY_SESSION" ]; then
|
||||
sudo rm -f -- "$EMPTTY_SESSION"
|
||||
fi
|
||||
|
||||
printf '\nDone.\n'
|
||||
@@ -1,11 +1,13 @@
|
||||
#!/bin/sh
|
||||
# Rimuove i3 e relativi dotfiles dall'host corrente.
|
||||
# Eseguire dopo aver verificato che sway funzioni correttamente.
|
||||
# Rimuove i3 (sessione X11) e relativi artefatti dall'host Void corrente:
|
||||
# pacchetti i3-only, dotfiles, voce emptty e profili autorandr host-specifici.
|
||||
# Eseguire dopo aver verificato che sway/Hyprland funzionino correttamente.
|
||||
# I pacchetti condivisi con sway/Hyprland (dunst, rofi, alacritty) NON vengono rimossi.
|
||||
set -e
|
||||
|
||||
HOSTNAME=$(hostname)
|
||||
|
||||
# Pacchetti i3-only (dunst e rofi sono condivisi con sway, non rimossi)
|
||||
# Pacchetti i3-only (X11). dunst/rofi/alacritty sono condivisi e non vengono rimossi.
|
||||
sudo xbps-remove -R arandr autorandr feh i3 i3blocks i3blocks-blocklets \
|
||||
i3lock-color i3status picom polybar scrot setxkbmap volumeicon xclip \
|
||||
xfce4-clipman-plugin xfce4-screenshooter xkbutils xorg-fonts xorg-minimal \
|
||||
@@ -14,15 +16,15 @@ sudo xbps-remove -R arandr autorandr feh i3 i3blocks i3blocks-blocklets \
|
||||
# Dotfiles i3-only
|
||||
rm -rf ~/.config/i3 ~/.config/i3blocks
|
||||
rm -f ~/.config/picom/picom.conf
|
||||
rmdir --ignore-fail-on-non-empty ~/.config/picom
|
||||
rmdir --ignore-fail-on-non-empty ~/.config/picom 2>/dev/null || true
|
||||
rm -f ~/.config/polybar/config.ini ~/.config/polybar/launch.sh
|
||||
rmdir --ignore-fail-on-non-empty ~/.config/polybar
|
||||
rmdir --ignore-fail-on-non-empty ~/.config/polybar 2>/dev/null || true
|
||||
rm -f ~/.xinitrc
|
||||
|
||||
# Session file emptty
|
||||
# Session file emptty (X11)
|
||||
sudo rm -f /etc/emptty/xsessions/i3.desktop
|
||||
|
||||
# Dotfiles host-specifici
|
||||
# Dotfiles host-specifici (autorandr = multi-monitor X11)
|
||||
case "$HOSTNAME" in
|
||||
ikaros|nymph)
|
||||
rm -rf ~/.config/autorandr
|
||||
|
||||