mirror of
https://github.com/fscotto/infra.git
synced 2026-05-30 15:39:58 +00:00
Compare commits
9 Commits
204ab24f30
...
feature/no
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
60f177f51c | ||
|
|
dc25960f08 | ||
|
|
a57685d377 | ||
|
|
781f366fe7 | ||
|
|
53b7baf52f | ||
|
|
525b0b0e42 | ||
|
|
57a605587a | ||
|
|
8acd8204b9 | ||
|
|
e5b24fdf2c |
@@ -1,19 +0,0 @@
|
||||
{
|
||||
"permissions": {
|
||||
"allow": [
|
||||
"Bash(xargs ls -la)",
|
||||
"Bash(command -v pacman)",
|
||||
"Bash(command -v paclist)",
|
||||
"Bash(command -v pacinfo)",
|
||||
"Bash(git -C /home/fscotto/AnsiblePlaybook add ansible/inventory/group_vars/arch.yml ansible/roles/services_systemd/tasks/main.yml)",
|
||||
"Bash(git -C /home/fscotto/AnsiblePlaybook commit -m ' *)",
|
||||
"Bash(git -C /home/fscotto/AnsiblePlaybook diff --stat)",
|
||||
"Bash(git -C /home/fscotto/AnsiblePlaybook status --short)",
|
||||
"Bash(git -C /home/fscotto/AnsiblePlaybook log --oneline --all -- ansible/inventory/host_vars/nymph.yml ansible/roles/profile_desktop_host/tasks/nymph.yml 'dotfiles/nymph/*')",
|
||||
"Bash(git *)",
|
||||
"Bash(wlogout --help)",
|
||||
"Bash(xbps-query *)",
|
||||
"Bash(xbps-install --dry-run gtklock)"
|
||||
]
|
||||
}
|
||||
}
|
||||
42
AGENTS.md
42
AGENTS.md
@@ -6,9 +6,7 @@ Ansible-driven personal infrastructure repo for Void desktops, Linux workstation
|
||||
- Main orchestration: `ansible/site.yml`
|
||||
- Inventory and layering inputs: `ansible/inventory/hosts.yml`, `ansible/inventory/group_vars/*.yml`, `ansible/inventory/host_vars/*.yml`
|
||||
- Dotfiles live under `dotfiles/`
|
||||
- AI agent instructions (bootstrap, rules, knowledge) are centralized in `dotfiles/common/.config/ai/` and shared between OpenCode, Codex, and Gemini CLI.
|
||||
- OpenCode loads its entrypoint configuration from `dotfiles/common/.config/opencode/opencode.json`.
|
||||
- Codex config is rendered from `dotfiles/common/.codex/config.toml.j2` so `model_instructions_file` points to the deployed `~/.config/ai/bootstrap.md`.
|
||||
- OpenCode loads global instructions from `dotfiles/desktop/.config/opencode/opencode.json`
|
||||
|
||||
## Topology
|
||||
- Void desktops: `ikaros`, `nymph`
|
||||
@@ -40,7 +38,8 @@ Ansible-driven personal infrastructure repo for Void desktops, Linux workstation
|
||||
- WSL dev: `ansible-playbook ansible/site.yml --limit deadalus-wsl --check --diff`
|
||||
- Server: `ansible-playbook ansible/site.yml --limit prometheus --check --diff`
|
||||
- Focused checks:
|
||||
- Emacs dotfiles only: `ansible-playbook ansible/site.yml --limit ikaros --tags emacs --check --diff` or `--limit nymph --tags emacs --check --diff`
|
||||
- Emacs dotfiles only: `ansible-playbook ansible/site.yml --limit ikaros --tags emacs --check --diff` or `--limit nymph --tags emacs --check --diff`
|
||||
- Sway/Noctalia bootstrap on nymph: `ansible-playbook ansible/site.yml --limit nymph --tags packages,dotfiles:desktop,sway --check --diff`
|
||||
- Mail bootstrap: `sh -n scripts/bootstrap_mail.sh` and `shellcheck scripts/bootstrap_mail.sh`
|
||||
- Windows bootstrap parse: `pwsh -NoProfile -Command "[void][System.Management.Automation.Language.Parser]::ParseFile('scripts/bootstrap_windows_workstation.ps1', [ref]$null, [ref]$null)"`
|
||||
- Server compose render: `docker compose -f /opt/docker/server/docker-compose.yml config`
|
||||
@@ -53,25 +52,19 @@ Ansible-driven personal infrastructure repo for Void desktops, Linux workstation
|
||||
- Put host-specific overrides in `host_vars`, not shared `group_vars`.
|
||||
- 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) and `profile_desktop_sway` (Wayland/SwayFX) install their respective session in parallel and are both 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.
|
||||
## Desktop Void Notes
|
||||
- `profile_desktop_common` owns the shared desktop bootstrap.
|
||||
- `.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`.
|
||||
- User services are managed by `turnstile` and live under `dotfiles/desktop/.config/service/`.
|
||||
- `ssh-agent` runs under `turnstile` with 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)
|
||||
- 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 both i3 (X11) and sway (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`).
|
||||
|
||||
## 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` — 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`).
|
||||
- `dotfiles/desktop/.xinitrc`
|
||||
- `dotfiles/desktop/.local/bin/start-sway-session`
|
||||
- Do not auto-restart `emptty` during playbook runs on active desktop hosts; restart it manually from another TTY/SSH session if needed.
|
||||
- `profile_desktop_sway` owns the Sway session, Noctalia config rendering, and official plugin linking.
|
||||
- Noctalia shared config lives in `dotfiles/desktop/.config/noctalia/`; bar monitors and `screenOverrides` come from inventory (`noctalia_bar_monitors`, `noctalia_screen_overrides`).
|
||||
- On Sway hosts, `udiskie` is the backend for automount/LUKS but runs without tray; USB device UI is handled by `usb-drive-manager`.
|
||||
- Do not re-introduce `network-manager-applet` or `blueman` on Sway hosts without an explicit host-specific reason.
|
||||
|
||||
## Workstation / Windows Notes
|
||||
- Native Linux workstation hosts can combine `workstation_host_linux` with an OS-specific dev group.
|
||||
@@ -80,13 +73,6 @@ The dotfile vars follow the same split: `desktop_common_dotfiles` (in `group_var
|
||||
- `workstation_host_windows` runs with `gather_facts: false` and validates PSRP settings plus `windows_package_backend` before role execution.
|
||||
- Windows taskbar pins are driven by `windows_taskbar_pins` in `ansible/inventory/group_vars/workstation_host_windows.yml`; validate identifiers from a real Windows session before changing them.
|
||||
|
||||
## Coding Agent Notes
|
||||
- Shared agent packages live in `ai_agents_npm_packages` in `ansible/inventory/group_vars/all.yml`.
|
||||
- Shared agent dotfiles live in `ai_agents_dotfiles`; rendered configs live in `ai_agents_templates`.
|
||||
- Desktop, native workstation, and WSL profiles consume the shared agent package list; do not duplicate package entries in profile-specific vars.
|
||||
- `dotfiles_common` copies common dotfiles plus `ai_agents_dotfiles`, then renders `ai_agents_templates`.
|
||||
- Keep `.config/ai/` as the common instruction source; update agent-specific entrypoints to reference it rather than duplicating instruction text.
|
||||
|
||||
## Tooling Notes
|
||||
- Install local tooling with:
|
||||
- `python3 -m pip install ansible ansible-lint yamllint shellcheck-py`
|
||||
|
||||
710
README.md
710
README.md
@@ -15,29 +15,26 @@ Il repository consente di gestire più sistemi operativi e profili macchina mant
|
||||
|
||||
# Architettura del progetto
|
||||
|
||||
```text
|
||||
infra/
|
||||
├── ansible/
|
||||
│ ├── ansible.cfg
|
||||
│ ├── site.yml
|
||||
│ ├── inventory/
|
||||
│ │ ├── hosts.yml
|
||||
│ │ ├── group_vars/
|
||||
│ │ └── host_vars/
|
||||
│ ├── templates/
|
||||
│ └── roles/
|
||||
│
|
||||
├── dotfiles/
|
||||
│ ├── common/
|
||||
│ ├── desktop/
|
||||
│ ├── fedora/
|
||||
│ ├── ubuntu/
|
||||
│ ├── server/
|
||||
│ ├── workstation/
|
||||
│ ├── workstation_host_linux/
|
||||
│ ├── workstation_dev_wsl/
|
||||
│ ├── ikaros/
|
||||
│ └── nymph/
|
||||
```text
|
||||
infra/
|
||||
├── ansible/
|
||||
│ ├── ansible.cfg
|
||||
│ ├── site.yml
|
||||
│ ├── inventory/
|
||||
│ │ ├── hosts.yml
|
||||
│ │ ├── group_vars/
|
||||
│ │ └── host_vars/
|
||||
│ ├── templates/
|
||||
│ └── roles/
|
||||
│
|
||||
├── dotfiles/
|
||||
│ ├── common/
|
||||
│ ├── desktop/
|
||||
│ ├── fedora/
|
||||
│ ├── server/
|
||||
│ ├── workstation/
|
||||
│ ├── ikaros/
|
||||
│ └── nymph/
|
||||
│
|
||||
├── scripts/
|
||||
├── secrets/
|
||||
@@ -53,16 +50,16 @@ Il repository è diviso in due componenti principali:
|
||||
|
||||
---
|
||||
|
||||
# Macchine gestite
|
||||
|
||||
Il repository modella attualmente tre tipologie di profilo e prepara due filoni workstation: Linux nativa e Windows + WSL.
|
||||
|
||||
Nota sullo stato attuale del playbook principale:
|
||||
|
||||
- `ansible/site.yml` applica oggi in automatico il profilo desktop su host Void Linux
|
||||
- `ansible/site.yml` applica la workstation Linux nativa separando il layer dev comune dal layer host GNOME
|
||||
- `ansible/site.yml` applica anche il ramo `workstation_host_windows` + `workstation_dev_wsl` per il modello Windows 11 + WSL
|
||||
- `ansible/site.yml` applica anche il profilo `ubuntu_server` con baseline apt, systemd, dotfiles server e firewall UFW
|
||||
# Macchine gestite
|
||||
|
||||
Il repository modella attualmente tre tipologie di profilo e prepara due filoni workstation: Linux nativa e Windows + WSL.
|
||||
|
||||
Nota sullo stato attuale del playbook principale:
|
||||
|
||||
- `ansible/site.yml` applica oggi in automatico il profilo desktop su host Void Linux
|
||||
- `ansible/site.yml` applica la workstation Linux nativa separando il layer dev comune dal layer host GNOME
|
||||
- `ansible/site.yml` applica anche il ramo `workstation_host_windows` + `workstation_dev_wsl` per il modello Windows 11 + WSL
|
||||
- `ansible/site.yml` applica anche il profilo `ubuntu_server` con baseline apt, systemd, dotfiles server e firewall UFW
|
||||
|
||||
## Desktop
|
||||
|
||||
@@ -70,113 +67,111 @@ Sistema operativo:
|
||||
|
||||
- Void Linux
|
||||
|
||||
Sessioni desktop:
|
||||
|
||||
- `ikaros`: i3 (X11) + sway (Wayland), default i3
|
||||
- `nymph`: i3 (X11) + sway (Wayland), default i3
|
||||
Sessioni desktop:
|
||||
|
||||
- `ikaros`: i3
|
||||
- `nymph`: SwayFX
|
||||
|
||||
Macchine:
|
||||
|
||||
- `ikaros`
|
||||
- `nymph`
|
||||
|
||||
Queste macchine condividono la stessa configurazione base desktop e vengono mantenute allineate tramite Ansible. Sia i3 sia sway/SwayFX sono installate in parallelo e selezionabili da `emptty`; `desktop_default_session` decide quale sessione viene preselezionata al login.
|
||||
|
||||
Queste macchine condividono la stessa configurazione base desktop e vengono mantenute allineate tramite Ansible.
|
||||
|
||||
Lo stato attuale del profilo desktop include, tra le altre cose:
|
||||
|
||||
- dotfiles comuni e desktop
|
||||
- sessioni i3 e sway su entrambi gli host (default i3, sway disponibile via `emptty`)
|
||||
- `emptty` con default host-specific per il desktop attivo, con `XORG_SESSIONS_PATH` puntato a `/etc/emptty/xsessions` e session file Wayland esposti su `WAYLAND_SESSIONS_PATH` per `sway`
|
||||
- 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` e `desktop_sway_packages` per i binari specifici di ciascuna sessione
|
||||
- sessione i3 su `ikaros` e sessione Sway su `nymph`
|
||||
- `emptty` con default host-specific per il desktop attivo su ogni host
|
||||
- pacchetti Void Linux e servizi runit
|
||||
- `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`
|
||||
- `tmux` con plugin gestiti da TPM al bootstrap del profilo desktop
|
||||
- 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`)
|
||||
- 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
|
||||
- shell Noctalia su Sway su `nymph`, con plugin ufficiali per clipboard (`clipper`, `clipboard`), polkit (`polkit-agent`) e gestione USB (`usb-drive-manager`); config condivisa in `dotfiles/desktop/.config/noctalia/` e `settings.json` renderizzato da template Ansible con variabili host-specifiche
|
||||
- `udiskie` come backend per automount/LUKS su Sway, senza tray; la UI dei dispositivi removibili è demandata a `usb-drive-manager`
|
||||
- `kanshi` su `nymph` per il profilo monitor Wayland, con workspace Sway deterministici: in dual monitor `1` resta su `eDP-1` e `2-10` vanno su `DP-1`, mentre in laptop-only tutti tornano su `eDP-1`
|
||||
- monitor Noctalia e `screenOverrides` dichiarati in inventory (`noctalia_bar_monitors`, `noctalia_screen_overrides`) per host `nymph`
|
||||
|
||||
---
|
||||
|
||||
## Workstation
|
||||
## Workstation
|
||||
|
||||
Sistemi operativi supportati:
|
||||
Sistemi operativi supportati:
|
||||
|
||||
- Ubuntu LTS nativa
|
||||
- Fedora Workstation nativa
|
||||
- Windows 11 host + Ubuntu WSL
|
||||
|
||||
- Ubuntu LTS nativa
|
||||
- Fedora Workstation nativa
|
||||
- Windows 11 host + Ubuntu WSL
|
||||
|
||||
Desktop environment host Linux:
|
||||
|
||||
- GNOME
|
||||
|
||||
Macchine attuali:
|
||||
|
||||
- `deadalus-ubuntu` come workstation Ubuntu nativa
|
||||
- `deadalus-fedora` come workstation Fedora nativa
|
||||
- supporto attivo per host Windows 11 + WSL tramite `deadalus-win` e `deadalus-wsl`
|
||||
|
||||
Questo profilo è pensato per sviluppo e lavoro, con separazione tra layer host e layer dev.
|
||||
|
||||
Nel modello Ansible usato qui, un singolo inventory host puo appartenere intenzionalmente a piu gruppi e quindi ricevere piu play nello stesso run: l'associazione non e `1 host = 1 play`, ma `host + gruppi = layering finale`.
|
||||
|
||||
Il profilo workstation e agganciato al playbook principale e ora distingue:
|
||||
|
||||
- layer dev Ubuntu condiviso tra workstation Linux nativa e Ubuntu in WSL
|
||||
- layer dev Fedora nativo parallelo a Ubuntu
|
||||
- layer host Linux GNOME
|
||||
- layer host Windows 11 con bootstrap WSL, remoting `PSRP` su `HTTPS/5986`, gestione app via `winget` con backend configurabile e VS Code lato Windows
|
||||
- layer WSL dedicato per sviluppo con `systemd`
|
||||
|
||||
Per esempio, lo stesso host Linux puo stare in `workstation_host_linux` e in `workstation_dev_fedora` oppure `workstation_dev_ubuntu`, a seconda del layering che vuoi comporre.
|
||||
|
||||
Lo stato attuale del profilo workstation include:
|
||||
|
||||
- installazione pacchetti base Ubuntu via apt
|
||||
- installazione pacchetti base Fedora via dnf per il ramo workstation nativo
|
||||
- installazione e configurazione di Docker dal repository ufficiale
|
||||
- gestione dei dotfiles workstation e rendering dei template dev condivisi
|
||||
- installazione di Google Chrome su Ubuntu e Fedora, `VS Code` su Fedora via repository RPM Microsoft, `IntelliJ IDEA Ultimate` su Fedora via COPR RPM, e applicazioni workstation residue su Fedora via Flatpak
|
||||
- installazione di applicazioni workstation su Ubuntu nativa via Snap, oltre alle estensioni GNOME sul solo host Linux nativo
|
||||
- configurazione del ramo Windows 11 host con app installate dal playbook via `winget`, con backend predefinito `winget_psrp`, tema scuro, pin della taskbar gestiti via policy locale e profilo predefinito di Windows Terminal impostato su `Ubuntu`
|
||||
- preparazione del ramo WSL Ubuntu con `systemd` per il toolchain di sviluppo
|
||||
- attivazione del firewall UFW su Ubuntu nativa e `firewalld` su Fedora nativa
|
||||
- gestione di `gsettings` GNOME host-specifici su `deadalus-fedora`, inclusi shell, Files/Nautilus, file chooser GTK e GNOME Text Editor, allineati allo stato reale della macchina
|
||||
|
||||
Workflow Windows + WSL previsto:
|
||||
|
||||
Prima di eseguire il bootstrap Windows, apri PowerShell come amministratore e verifica la policy di esecuzione:
|
||||
|
||||
```powershell
|
||||
Get-ExecutionPolicy -List
|
||||
```
|
||||
|
||||
Se necessario, abilita l'esecuzione degli script per l'utente corrente:
|
||||
|
||||
```powershell
|
||||
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
|
||||
```
|
||||
|
||||
Se Windows ha bloccato il file di bootstrap, sbloccalo esplicitamente:
|
||||
|
||||
```powershell
|
||||
Unblock-File .\scripts\bootstrap_windows_workstation.ps1
|
||||
```
|
||||
|
||||
1. eseguire `scripts/bootstrap_windows_workstation.ps1` su Windows come amministratore
|
||||
2. riavviare Windows se richiesto dalle feature WSL
|
||||
3. avviare Ubuntu WSL almeno una volta e completare la creazione dell'utente Linux
|
||||
4. installare Ansible dentro WSL Ubuntu
|
||||
5. lanciare il playbook da WSL su `deadalus-wsl` per configurare l'ambiente dev locale
|
||||
6. lanciare da WSL anche il playbook su `deadalus-win` via `psrp` per configurare l'host Windows; per default il backend pacchetti Windows e `winget_psrp`
|
||||
7. usare VS Code con le estensioni Remote (`WSL`, `SSH`, `Dev Containers`) dal lato Windows
|
||||
|
||||
Per il remoting Windows il repository usa di default `PSRP` con `Negotiate` su `HTTPS/5986`. L'utente di default puo essere un `MicrosoftAccount\...`, con host, utente e password forniti via vault o extra vars. Il backend pacchetti Windows e configurabile con `windows_package_backend` oppure `vault_windows_package_backend`; il default e `winget_psrp`.
|
||||
Desktop environment host Linux:
|
||||
|
||||
- GNOME
|
||||
|
||||
Macchine attuali:
|
||||
|
||||
- `deadalus-ubuntu` come workstation Ubuntu nativa
|
||||
- `deadalus-fedora` come workstation Fedora nativa
|
||||
- supporto attivo per host Windows 11 + WSL tramite `deadalus-win` e `deadalus-wsl`
|
||||
|
||||
Questo profilo è pensato per sviluppo e lavoro, con separazione tra layer host e layer dev.
|
||||
|
||||
Nel modello Ansible usato qui, un singolo inventory host puo appartenere intenzionalmente a piu gruppi e quindi ricevere piu play nello stesso run: l'associazione non e `1 host = 1 play`, ma `host + gruppi = layering finale`.
|
||||
|
||||
Il profilo workstation e agganciato al playbook principale e ora distingue:
|
||||
|
||||
- layer dev Ubuntu condiviso tra workstation Linux nativa e Ubuntu in WSL
|
||||
- layer dev Fedora nativo parallelo a Ubuntu
|
||||
- layer host Linux GNOME
|
||||
- layer host Windows 11 con bootstrap WSL, remoting `PSRP` su `HTTPS/5986`, gestione app via `winget` con backend configurabile e VS Code lato Windows
|
||||
- layer WSL dedicato per sviluppo con `systemd`
|
||||
|
||||
Per esempio, lo stesso host Linux puo stare in `workstation_host_linux` e in `workstation_dev_fedora` oppure `workstation_dev_ubuntu`, a seconda del layering che vuoi comporre.
|
||||
|
||||
Lo stato attuale del profilo workstation include:
|
||||
|
||||
- installazione pacchetti base Ubuntu via apt
|
||||
- installazione pacchetti base Fedora via dnf per il ramo workstation nativo
|
||||
- installazione e configurazione di Docker dal repository ufficiale
|
||||
- gestione dei dotfiles workstation e rendering dei template dev condivisi
|
||||
- installazione di Google Chrome su Ubuntu e Fedora, `VS Code` su Fedora via repository RPM Microsoft, `IntelliJ IDEA Ultimate` su Fedora via COPR RPM, e applicazioni workstation residue su Fedora via Flatpak
|
||||
- installazione di applicazioni workstation su Ubuntu nativa via Snap, oltre alle estensioni GNOME sul solo host Linux nativo
|
||||
- configurazione del ramo Windows 11 host con app installate dal playbook via `winget`, con backend predefinito `winget_psrp`, tema scuro, pin della taskbar gestiti via policy locale e profilo predefinito di Windows Terminal impostato su `Ubuntu`
|
||||
- preparazione del ramo WSL Ubuntu con `systemd` per il toolchain di sviluppo
|
||||
- attivazione del firewall UFW su Ubuntu nativa e `firewalld` su Fedora nativa
|
||||
- gestione di `gsettings` GNOME host-specifici su `deadalus-fedora`, inclusi shell, Files/Nautilus, file chooser GTK e GNOME Text Editor, allineati allo stato reale della macchina
|
||||
|
||||
Workflow Windows + WSL previsto:
|
||||
|
||||
Prima di eseguire il bootstrap Windows, apri PowerShell come amministratore e verifica la policy di esecuzione:
|
||||
|
||||
```powershell
|
||||
Get-ExecutionPolicy -List
|
||||
```
|
||||
|
||||
Se necessario, abilita l'esecuzione degli script per l'utente corrente:
|
||||
|
||||
```powershell
|
||||
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
|
||||
```
|
||||
|
||||
Se Windows ha bloccato il file di bootstrap, sbloccalo esplicitamente:
|
||||
|
||||
```powershell
|
||||
Unblock-File .\scripts\bootstrap_windows_workstation.ps1
|
||||
```
|
||||
|
||||
1. eseguire `scripts/bootstrap_windows_workstation.ps1` su Windows come amministratore
|
||||
2. riavviare Windows se richiesto dalle feature WSL
|
||||
3. avviare Ubuntu WSL almeno una volta e completare la creazione dell'utente Linux
|
||||
4. installare Ansible dentro WSL Ubuntu
|
||||
5. lanciare il playbook da WSL su `deadalus-wsl` per configurare l'ambiente dev locale
|
||||
6. lanciare da WSL anche il playbook su `deadalus-win` via `psrp` per configurare l'host Windows; per default il backend pacchetti Windows e `winget_psrp`
|
||||
7. usare VS Code con le estensioni Remote (`WSL`, `SSH`, `Dev Containers`) dal lato Windows
|
||||
|
||||
Per il remoting Windows il repository usa di default `PSRP` con `Negotiate` su `HTTPS/5986`. L'utente di default puo essere un `MicrosoftAccount\...`, con host, utente e password forniti via vault o extra vars. Il backend pacchetti Windows e configurabile con `windows_package_backend` oppure `vault_windows_package_backend`; il default e `winget_psrp`.
|
||||
|
||||
---
|
||||
|
||||
@@ -194,43 +189,43 @@ Macchina:
|
||||
|
||||
- `prometheus`
|
||||
|
||||
Profilo orientato a servizi server e gestione di dotfiles dedicati.
|
||||
|
||||
Lo stato attuale del profilo server include:
|
||||
|
||||
- installazione pacchetti base Ubuntu via apt
|
||||
- installazione e configurazione di Docker dal repository ufficiale
|
||||
- abilitazione dei servizi systemd dichiarati in inventory/group vars
|
||||
- copia dei dotfiles server e rendering dei template server, incluso il `docker-compose.yml` dello stack servizi
|
||||
- attivazione del firewall UFW con regola SSH esplicita
|
||||
- apertura delle porte Syncthing `22000/tcp`, `22000/udp` e `21027/udp`, lasciando la GUI non esposta direttamente su UFW
|
||||
|
||||
Utente del profilo server:
|
||||
|
||||
- il profilo usa `server_username`, `server_user_group` e `server_user_home` definiti in `ansible/inventory/group_vars/server.yml`
|
||||
- per default `server_username` eredita `username`, ma puo essere sovrascritto per tutti gli host server via inventory oppure a runtime con extra vars
|
||||
- esempio override da CLI:
|
||||
|
||||
```bash
|
||||
ansible-playbook ansible/site.yml --limit prometheus -e server_username=myuser
|
||||
```
|
||||
|
||||
- se necessario puoi passare anche:
|
||||
|
||||
```bash
|
||||
ansible-playbook ansible/site.yml --limit prometheus -e server_username=myuser -e server_user_group=mygroup -e server_user_home=/srv/myuser
|
||||
```
|
||||
Profilo orientato a servizi server e gestione di dotfiles dedicati.
|
||||
|
||||
Lo stato attuale del profilo server include:
|
||||
|
||||
- installazione pacchetti base Ubuntu via apt
|
||||
- installazione e configurazione di Docker dal repository ufficiale
|
||||
- abilitazione dei servizi systemd dichiarati in inventory/group vars
|
||||
- copia dei dotfiles server e rendering dei template server, incluso il `docker-compose.yml` dello stack servizi
|
||||
- attivazione del firewall UFW con regola SSH esplicita
|
||||
- apertura delle porte Syncthing `22000/tcp`, `22000/udp` e `21027/udp`, lasciando la GUI non esposta direttamente su UFW
|
||||
|
||||
Utente del profilo server:
|
||||
|
||||
- il profilo usa `server_username`, `server_user_group` e `server_user_home` definiti in `ansible/inventory/group_vars/server.yml`
|
||||
- per default `server_username` eredita `username`, ma puo essere sovrascritto per tutti gli host server via inventory oppure a runtime con extra vars
|
||||
- esempio override da CLI:
|
||||
|
||||
```bash
|
||||
ansible-playbook ansible/site.yml --limit prometheus -e server_username=myuser
|
||||
```
|
||||
|
||||
- se necessario puoi passare anche:
|
||||
|
||||
```bash
|
||||
ansible-playbook ansible/site.yml --limit prometheus -e server_username=myuser -e server_user_group=mygroup -e server_user_home=/srv/myuser
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# Composizione della configurazione
|
||||
|
||||
Deploy mirato della configurazione Emacs sui desktop Void:
|
||||
|
||||
```bash
|
||||
ansible-playbook ansible/site.yml --limit ikaros --tags emacs
|
||||
ansible-playbook ansible/site.yml --limit nymph --tags emacs
|
||||
```
|
||||
# Composizione della configurazione
|
||||
|
||||
Deploy mirato della configurazione Emacs sui desktop Void:
|
||||
|
||||
```bash
|
||||
ansible-playbook ansible/site.yml --limit ikaros --tags emacs
|
||||
ansible-playbook ansible/site.yml --limit nymph --tags emacs
|
||||
```
|
||||
|
||||
La configurazione finale di una macchina è ottenuta combinando più livelli.
|
||||
|
||||
@@ -263,70 +258,67 @@ Questo approccio consente di:
|
||||
|
||||
# Ruoli Ansible
|
||||
|
||||
I principali ruoli attualmente presenti sono:
|
||||
I principali ruoli attualmente presenti sono:
|
||||
|
||||
| Role | Descrizione |
|
||||
| ------------------------- | ----------------------------------- |
|
||||
| base | configurazione base comune |
|
||||
| packages_void | installazione pacchetti su Void |
|
||||
| packages_ubuntu | installazione pacchetti su Ubuntu |
|
||||
| packages_fedora | installazione pacchetti su Fedora |
|
||||
| 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_host | override desktop specifici per host |
|
||||
| profile_workstation_dev_common | configurazione dev workstation condivisa |
|
||||
| profile_workstation_gnome | configurazione host workstation GNOME |
|
||||
| profile_workstation_dev_wsl | configurazione WSL Ubuntu per sviluppo |
|
||||
| profile_workstation_host_windows | configurazione host Windows 11 workstation |
|
||||
| profile_server | configurazione server |
|
||||
| dotfiles_common | distribuzione dotfiles comuni |
|
||||
| dotfiles | distribuzione configurazioni utente |
|
||||
|
||||
---
|
||||
|
||||
# Stato attuale del playbook principale
|
||||
|
||||
Il playbook `ansible/site.yml` e attualmente composto da sette blocchi:
|
||||
|
||||
```text
|
||||
all:!workstation_host_windows -> dotfiles_common
|
||||
void -> packages_void + services_runit + profile_desktop_common + profile_desktop_i3 + profile_desktop_sway + profile_desktop_host
|
||||
workstation_dev_ubuntu -> packages_ubuntu + services_systemd + profile_workstation_dev_common
|
||||
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
|
||||
workstation_host_windows -> profile_workstation_host_windows
|
||||
ubuntu_server -> packages_ubuntu + services_systemd + profile_server
|
||||
```
|
||||
|
||||
Questo significa che, allo stato attuale:
|
||||
|
||||
- i desktop Void (`ikaros`, `nymph`) restano il target operativo piu completo
|
||||
- la workstation Ubuntu (`deadalus-ubuntu`) e gestita separando ambiente dev e layer host GNOME
|
||||
- la workstation Fedora (`deadalus-fedora`) usa lo stesso principio di composizione a gruppi con il ramo Fedora dedicato e con `gsettings` host-specifici dichiarati in inventory
|
||||
- il ramo Windows + WSL e predisposto con bootstrap PowerShell e play Windows/WSL dedicati
|
||||
- il server Ubuntu (`prometheus`) e gestito con pacchetti, servizi, dotfiles server e firewall
|
||||
- lo stack container server include `navidrome`, `postgres`, `gitea`, `nginx-proxy-manager` e `syncthing`, con GUI Syncthing raggiungibile tramite la rete Docker `web`
|
||||
|
||||
# Dotfiles
|
||||
| base | configurazione base comune |
|
||||
| packages_void | installazione pacchetti su Void |
|
||||
| packages_ubuntu | installazione pacchetti su Ubuntu |
|
||||
| packages_fedora | installazione pacchetti su Fedora |
|
||||
| services_runit | gestione servizi runit |
|
||||
| services_systemd | gestione servizi systemd |
|
||||
| profile_desktop_common | bootstrap desktop Void condiviso |
|
||||
| profile_desktop_i3 | sessione desktop i3 |
|
||||
| profile_desktop_sway | sessione desktop Sway |
|
||||
| profile_desktop_host | override desktop specifici per host |
|
||||
| profile_workstation_dev_common | configurazione dev workstation condivisa |
|
||||
| profile_workstation_gnome | configurazione host workstation GNOME |
|
||||
| profile_workstation_dev_wsl | configurazione WSL Ubuntu per sviluppo |
|
||||
| profile_workstation_host_windows | configurazione host Windows 11 workstation |
|
||||
| profile_server | configurazione server |
|
||||
| dotfiles_common | distribuzione dotfiles comuni |
|
||||
| dotfiles | distribuzione configurazioni utente |
|
||||
|
||||
---
|
||||
|
||||
# Stato attuale del playbook principale
|
||||
|
||||
Il playbook `ansible/site.yml` e attualmente composto da sette blocchi:
|
||||
|
||||
```text
|
||||
all:!workstation_host_windows -> dotfiles_common
|
||||
void -> packages_void + services_runit + profile_desktop_common + profile_desktop_i3 + profile_desktop_sway + profile_desktop_host
|
||||
workstation_dev_ubuntu -> packages_ubuntu + services_systemd + profile_workstation_dev_common
|
||||
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
|
||||
workstation_host_windows -> profile_workstation_host_windows
|
||||
ubuntu_server -> packages_ubuntu + services_systemd + profile_server
|
||||
```
|
||||
|
||||
Questo significa che, allo stato attuale:
|
||||
|
||||
- i desktop Void (`ikaros`, `nymph`) restano il target operativo piu completo
|
||||
- la workstation Ubuntu (`deadalus-ubuntu`) e gestita separando ambiente dev e layer host GNOME
|
||||
- la workstation Fedora (`deadalus-fedora`) usa lo stesso principio di composizione a gruppi con il ramo Fedora dedicato e con `gsettings` host-specifici dichiarati in inventory
|
||||
- il ramo Windows + WSL e predisposto con bootstrap PowerShell e play Windows/WSL dedicati
|
||||
- il server Ubuntu (`prometheus`) e gestito con pacchetti, servizi, dotfiles server e firewall
|
||||
- lo stack container server include `navidrome`, `postgres`, `gitea`, `nginx-proxy-manager` e `syncthing`, con GUI Syncthing raggiungibile tramite la rete Docker `web`
|
||||
|
||||
# Dotfiles
|
||||
|
||||
La directory `dotfiles/` contiene le configurazioni utente versionate.
|
||||
|
||||
```text
|
||||
dotfiles/
|
||||
├── common
|
||||
├── desktop
|
||||
├── server
|
||||
├── fedora
|
||||
├── ubuntu
|
||||
├── workstation
|
||||
├── workstation_host_linux
|
||||
├── workstation_dev_wsl
|
||||
├── ikaros
|
||||
└── nymph
|
||||
```text
|
||||
dotfiles/
|
||||
├── common
|
||||
├── desktop
|
||||
├── server
|
||||
├── fedora
|
||||
├── workstation
|
||||
├── ikaros
|
||||
└── nymph
|
||||
```
|
||||
|
||||
Le configurazioni sono applicate tramite Ansible e organizzate per livelli:
|
||||
@@ -341,155 +333,153 @@ Le configurazioni sono applicate tramite Ansible e organizzate per livelli:
|
||||
|
||||
# Requisiti
|
||||
|
||||
Per utilizzare il repository sono necessari:
|
||||
|
||||
- Python 3
|
||||
- Ansible
|
||||
- `ansible-lint`
|
||||
- `yamllint`
|
||||
- `shellcheck`
|
||||
- collection definite in `ansible/collections/requirements.yml`
|
||||
- accesso locale o SSH alle macchine target, in base a come e definito l'inventory
|
||||
|
||||
Installazione base:
|
||||
|
||||
```bash
|
||||
python3 -m pip install ansible ansible-lint yamllint shellcheck-py
|
||||
ansible-galaxy collection install -r ansible/collections/requirements.yml
|
||||
```
|
||||
|
||||
Gestione segreti:
|
||||
|
||||
- il repository supporta il caricamento opzionale di `secrets/vault.yml`
|
||||
- il repository supporta anche `secrets/vault.local.yml` per override locali non versionati
|
||||
- `secrets/vault.yml.example` funge da template/esempio
|
||||
- se `secrets/vault.yml` non e presente, il playbook continua comunque senza caricare variabili locali opzionali
|
||||
- se `secrets/.vault_pass.gpg` esiste viene usato automaticamente per sbloccare i vault tramite `gpg`; in alternativa resta supportato `secrets/.vault_pass` come fallback legacy locale; se nessuno dei due file esiste Ansible richiede la password in modo interattivo
|
||||
- per il ramo Windows puoi anche definire `vault_windows_package_backend`, con valori supportati `winget_psrp` e `winget_wsl_local`; il default e `winget_psrp`
|
||||
Per utilizzare il repository sono necessari:
|
||||
|
||||
- Python 3
|
||||
- Ansible
|
||||
- `ansible-lint`
|
||||
- `yamllint`
|
||||
- `shellcheck`
|
||||
- collection definite in `ansible/collections/requirements.yml`
|
||||
- accesso locale o SSH alle macchine target, in base a come e definito l'inventory
|
||||
|
||||
Installazione base:
|
||||
|
||||
```bash
|
||||
python3 -m pip install ansible ansible-lint yamllint shellcheck-py
|
||||
ansible-galaxy collection install -r ansible/collections/requirements.yml
|
||||
```
|
||||
|
||||
Gestione segreti:
|
||||
|
||||
- il repository supporta il caricamento opzionale di `secrets/vault.yml`
|
||||
- il repository supporta anche `secrets/vault.local.yml` per override locali non versionati
|
||||
- `secrets/vault.yml.example` funge da template/esempio
|
||||
- se `secrets/vault.yml` non e presente, il playbook continua comunque senza caricare variabili locali opzionali
|
||||
- se `secrets/.vault_pass.gpg` esiste viene usato automaticamente per sbloccare i vault tramite `gpg`; in alternativa resta supportato `secrets/.vault_pass` come fallback legacy locale; se nessuno dei due file esiste Ansible richiede la password in modo interattivo
|
||||
- per il ramo Windows puoi anche definire `vault_windows_package_backend`, con valori supportati `winget_psrp` e `winget_wsl_local`; il default e `winget_psrp`
|
||||
|
||||
---
|
||||
|
||||
# Utilizzo
|
||||
|
||||
Eseguire il playbook principale:
|
||||
|
||||
```bash
|
||||
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 `workstation_dev_ubuntu` applica pacchetti Ubuntu, servizi systemd e profilo dev comune
|
||||
- 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
|
||||
- per `workstation_host_windows` applica il layer host Windows 11 via PSRP, con installazione pacchetti Windows eseguita di default tramite `winget_psrp`
|
||||
- per gli host `ubuntu_server` applica pacchetti Ubuntu, servizi systemd, profilo server, UFW, dotfiles e template dedicati
|
||||
- non riavvia automaticamente `emptty`; le modifiche al display manager vanno applicate manualmente da SSH o da una TTY separata
|
||||
- carica `secrets/vault.yml` solo se presente
|
||||
- carica `secrets/vault.local.yml` solo se presente, dopo `vault.yml`, cosi gli override locali hanno precedenza
|
||||
|
||||
Per validare prima di applicare:
|
||||
|
||||
```bash
|
||||
ansible-playbook ansible/site.yml --syntax-check
|
||||
ansible-playbook ansible/site.yml --limit ikaros --check --diff
|
||||
ansible-playbook ansible/site.yml --limit nymph --check --diff
|
||||
ansible-playbook ansible/site.yml --limit deadalus-ubuntu --check --diff
|
||||
ansible-playbook ansible/site.yml --limit deadalus-fedora --check --diff
|
||||
ansible-playbook ansible/site.yml --limit deadalus-wsl --check --diff
|
||||
ansible-playbook ansible/site.yml --limit prometheus --check --diff
|
||||
ansible-lint ansible/site.yml
|
||||
ansible-lint ansible/roles
|
||||
yamllint ansible/
|
||||
```
|
||||
|
||||
Per testare un override dell'utente server senza modificare l'inventory:
|
||||
|
||||
```bash
|
||||
ansible-playbook ansible/site.yml --limit prometheus --check --diff -e server_username=myuser
|
||||
```
|
||||
|
||||
Per validazioni piu mirate:
|
||||
|
||||
```bash
|
||||
ansible-playbook ansible/site.yml --limit <host> --tags <tag1>,<tag2> --check --diff
|
||||
ansible-playbook ansible/site.yml --limit <host> --start-at-task "<task name>" --check --diff
|
||||
ansible-lint ansible/roles/<role>
|
||||
yamllint ansible/path/to/file.yml
|
||||
docker compose -f /opt/docker/server/docker-compose.yml config
|
||||
```
|
||||
|
||||
## Tag supportati dal playbook
|
||||
|
||||
Per vedere l'elenco reale aggiornato dei tag disponibili:
|
||||
|
||||
```bash
|
||||
ansible-playbook ansible/site.yml --list-tags
|
||||
```
|
||||
|
||||
Allo stato attuale `ansible/site.yml` espone questi tag:
|
||||
|
||||
| Tag | Scopo | Ambito principale |
|
||||
| --- | --- | --- |
|
||||
| `always` | pre-task sempre eseguiti, inclusi caricamento vault e validazioni preliminari | common, Windows |
|
||||
| `dotfiles` | distribuzione/configurazione dotfiles | tutti i profili |
|
||||
| `dotfiles:common` | dotfiles comuni condivisi | common, workstation, server |
|
||||
| `dotfiles:desktop` | dotfiles desktop | desktop Void |
|
||||
| `dotfiles:host` | override host-specifici desktop | desktop Void |
|
||||
| `dotfiles:server` | dotfiles dedicati al profilo server | server |
|
||||
| `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 |
|
||||
| `npm` | installazione pacchetti npm globali | desktop Void, workstation Linux, WSL |
|
||||
| `nvidia` | componenti NVIDIA desktop | desktop Void |
|
||||
| `packages` | installazione e aggiornamento pacchetti | tutti i profili |
|
||||
| `services` | gestione servizi runit/systemd/Windows | tutti i profili |
|
||||
| `vscode` | installazione/configurazione VS Code | Fedora, host Linux, Windows |
|
||||
| `wsl` | bootstrap e configurazione WSL | WSL, Windows |
|
||||
|
||||
Esempi pratici:
|
||||
|
||||
```bash
|
||||
ansible-playbook ansible/site.yml --limit nymph --tags dotfiles:desktop,i3 --check --diff
|
||||
ansible-playbook ansible/site.yml --limit ikaros --tags sway,portal --check --diff
|
||||
ansible-playbook ansible/site.yml --limit deadalus-fedora --tags packages,vscode --check --diff
|
||||
ansible-playbook ansible/site.yml --limit prometheus --tags services,dotfiles:server --check --diff
|
||||
```
|
||||
|
||||
---
|
||||
Eseguire il playbook principale:
|
||||
|
||||
```bash
|
||||
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, sessioni i3/Sway e override specifici per host
|
||||
- per `workstation_dev_ubuntu` applica pacchetti Ubuntu, servizi systemd e profilo dev comune
|
||||
- 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
|
||||
- per `workstation_host_windows` applica il layer host Windows 11 via PSRP, con installazione pacchetti Windows eseguita di default tramite `winget_psrp`
|
||||
- per gli host `ubuntu_server` applica pacchetti Ubuntu, servizi systemd, profilo server, UFW, dotfiles e template dedicati
|
||||
- non riavvia automaticamente `emptty`; le modifiche al display manager vanno applicate manualmente da SSH o da una TTY separata
|
||||
- carica `secrets/vault.yml` solo se presente
|
||||
- carica `secrets/vault.local.yml` solo se presente, dopo `vault.yml`, cosi gli override locali hanno precedenza
|
||||
|
||||
Per validare prima di applicare:
|
||||
|
||||
```bash
|
||||
ansible-playbook ansible/site.yml --syntax-check
|
||||
ansible-playbook ansible/site.yml --limit ikaros --check --diff
|
||||
ansible-playbook ansible/site.yml --limit nymph --check --diff
|
||||
ansible-playbook ansible/site.yml --limit deadalus-ubuntu --check --diff
|
||||
ansible-playbook ansible/site.yml --limit deadalus-fedora --check --diff
|
||||
ansible-playbook ansible/site.yml --limit deadalus-wsl --check --diff
|
||||
ansible-playbook ansible/site.yml --limit prometheus --check --diff
|
||||
ansible-lint ansible/site.yml
|
||||
ansible-lint ansible/roles
|
||||
yamllint ansible/
|
||||
```
|
||||
|
||||
Per testare un override dell'utente server senza modificare l'inventory:
|
||||
|
||||
```bash
|
||||
ansible-playbook ansible/site.yml --limit prometheus --check --diff -e server_username=myuser
|
||||
```
|
||||
|
||||
Per validazioni piu mirate:
|
||||
|
||||
```bash
|
||||
ansible-playbook ansible/site.yml --limit <host> --tags <tag1>,<tag2> --check --diff
|
||||
ansible-playbook ansible/site.yml --limit <host> --start-at-task "<task name>" --check --diff
|
||||
ansible-lint ansible/roles/<role>
|
||||
yamllint ansible/path/to/file.yml
|
||||
docker compose -f /opt/docker/server/docker-compose.yml config
|
||||
```
|
||||
|
||||
## Tag supportati dal playbook
|
||||
|
||||
Per vedere l'elenco reale aggiornato dei tag disponibili:
|
||||
|
||||
```bash
|
||||
ansible-playbook ansible/site.yml --list-tags
|
||||
```
|
||||
|
||||
Allo stato attuale `ansible/site.yml` espone questi tag:
|
||||
|
||||
| Tag | Scopo | Ambito principale |
|
||||
| --- | --- | --- |
|
||||
| `always` | pre-task sempre eseguiti, inclusi caricamento vault e validazioni preliminari | common, Windows |
|
||||
| `dotfiles` | distribuzione/configurazione dotfiles | tutti i profili |
|
||||
| `dotfiles:common` | dotfiles comuni condivisi | common, workstation, server |
|
||||
| `dotfiles:desktop` | dotfiles desktop | desktop Void |
|
||||
| `dotfiles:host` | override host-specifici desktop | desktop Void |
|
||||
| `dotfiles:server` | dotfiles dedicati al profilo server | server |
|
||||
| `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 | desktop Void |
|
||||
| `nvidia` | componenti NVIDIA desktop | desktop Void |
|
||||
| `packages` | installazione e aggiornamento pacchetti | tutti i profili |
|
||||
| `services` | gestione servizi runit/systemd/Windows | tutti i profili |
|
||||
| `sway` | sessione/configurazione Sway | desktop Void |
|
||||
| `vscode` | installazione/configurazione VS Code | Fedora, host Linux, Windows |
|
||||
| `wsl` | bootstrap e configurazione WSL | WSL, Windows |
|
||||
|
||||
Esempi pratici:
|
||||
|
||||
```bash
|
||||
ansible-playbook ansible/site.yml --limit nymph --tags dotfiles:desktop,sway --check --diff
|
||||
ansible-playbook ansible/site.yml --limit deadalus-fedora --tags packages,vscode --check --diff
|
||||
ansible-playbook ansible/site.yml --limit prometheus --tags services,dotfiles:server --check --diff
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# Bootstrap di una nuova macchina
|
||||
|
||||
Una nuova macchina può essere inizializzata con i seguenti passaggi:
|
||||
|
||||
```bash
|
||||
git clone <repo>
|
||||
cd <repo-dir>
|
||||
ansible-galaxy collection install -r ansible/collections/requirements.yml
|
||||
ansible-playbook ansible/site.yml
|
||||
```
|
||||
|
||||
Dopo l'esecuzione del playbook la macchina verra configurata secondo il profilo definito e i ruoli attualmente orchestrati.
|
||||
|
||||
Per il flusso mail desktop esiste inoltre uno script dedicato:
|
||||
|
||||
```bash
|
||||
scripts/bootstrap_mail.sh
|
||||
```
|
||||
|
||||
Lo script si occupa del bootstrap dei secret nel keyring, del primo sync con `mbsync` e dell'inizializzazione di `mu` usando la configurazione mail generata dai template.
|
||||
|
||||
Se modifichi questo script, valida almeno con:
|
||||
|
||||
```bash
|
||||
sh -n scripts/bootstrap_mail.sh
|
||||
shellcheck scripts/bootstrap_mail.sh
|
||||
```
|
||||
Una nuova macchina può essere inizializzata con i seguenti passaggi:
|
||||
|
||||
```bash
|
||||
git clone <repo>
|
||||
cd <repo-dir>
|
||||
ansible-galaxy collection install -r ansible/collections/requirements.yml
|
||||
ansible-playbook ansible/site.yml
|
||||
```
|
||||
|
||||
Dopo l'esecuzione del playbook la macchina verra configurata secondo il profilo definito e i ruoli attualmente orchestrati.
|
||||
|
||||
Per il flusso mail desktop esiste inoltre uno script dedicato:
|
||||
|
||||
```bash
|
||||
scripts/bootstrap_mail.sh
|
||||
```
|
||||
|
||||
Lo script si occupa del bootstrap dei secret nel keyring, del primo sync con `mbsync` e dell'inizializzazione di `mu` usando la configurazione mail generata dai template.
|
||||
|
||||
Se modifichi questo script, valida almeno con:
|
||||
|
||||
```bash
|
||||
sh -n scripts/bootstrap_mail.sh
|
||||
shellcheck scripts/bootstrap_mail.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
@@ -509,13 +499,13 @@ Questo consente di ricreare qualsiasi macchina partendo esclusivamente dal repos
|
||||
|
||||
# Roadmap
|
||||
|
||||
Possibili evoluzioni future:
|
||||
|
||||
- hardening sicurezza server
|
||||
- configurazione backup
|
||||
- testing automatico playbook
|
||||
- integrazione CI
|
||||
- supporto ad altre distribuzioni Linux
|
||||
Possibili evoluzioni future:
|
||||
|
||||
- hardening sicurezza server
|
||||
- configurazione backup
|
||||
- testing automatico playbook
|
||||
- integrazione CI
|
||||
- supporto ad altre distribuzioni Linux
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -50,42 +50,6 @@ common_dotfiles:
|
||||
dest: .vimrc
|
||||
mode: "0644"
|
||||
- name: bat config
|
||||
src: .config/bat/
|
||||
src: .config/bat/.config/bat/
|
||||
dest: .config/bat/
|
||||
mode: preserve
|
||||
|
||||
ai_agents_npm_packages:
|
||||
- name: "opencode-ai"
|
||||
state: latest
|
||||
- name: "@anthropic-ai/claude-code"
|
||||
state: latest
|
||||
- name: "@openai/codex"
|
||||
state: latest
|
||||
- name: "@google/gemini-cli"
|
||||
state: latest
|
||||
|
||||
ai_agents_enabled: true
|
||||
|
||||
ai_agents_dotfiles:
|
||||
- name: AI common config
|
||||
src: .config/ai/
|
||||
dest: .config/ai/
|
||||
mode: preserve
|
||||
- name: Gemini CLI config
|
||||
src: .gemini/
|
||||
dest: .gemini/
|
||||
mode: preserve
|
||||
- name: OpenCode config
|
||||
src: .config/opencode/
|
||||
dest: .config/opencode/
|
||||
mode: preserve
|
||||
- name: Claude Code memory
|
||||
src: .claude/
|
||||
dest: .claude/
|
||||
mode: preserve
|
||||
|
||||
ai_agents_templates:
|
||||
- name: Codex config
|
||||
src: .codex/config.toml.j2
|
||||
dest: .codex/config.toml
|
||||
mode: "0644"
|
||||
|
||||
@@ -6,14 +6,147 @@ desktop_sessions_enabled:
|
||||
|
||||
desktop_default_session: i3
|
||||
desktop_default_session_env: xorg
|
||||
desktop_prompt_for_session: true
|
||||
desktop_restart_emptty_automatically: false
|
||||
desktop_emptty_session_error_logging: disabled
|
||||
|
||||
desktop_ui_font_family: Noto Sans
|
||||
desktop_ui_font_size: 10
|
||||
desktop_fixed_font_family: Hack Nerd Font
|
||||
desktop_sway_font_size: 10
|
||||
desktop_alacritty_font_size: 12
|
||||
desktop_emacs_font_size: 14
|
||||
desktop_cursor_theme: Yaru
|
||||
desktop_cursor_size: 24
|
||||
desktop_icon_theme: Yaru-orange-dark
|
||||
|
||||
desktop_common_packages:
|
||||
- brightnessctl
|
||||
- dex
|
||||
- emptty
|
||||
- pinentry-emacs
|
||||
- pinentry-gtk
|
||||
- turnstile
|
||||
- udiskie
|
||||
- xdg-desktop-portal
|
||||
- xdg-desktop-portal-gtk
|
||||
- xdg-user-dirs
|
||||
|
||||
desktop_i3_packages:
|
||||
- arandr
|
||||
- autorandr
|
||||
- feh
|
||||
- i3
|
||||
- i3blocks
|
||||
- i3blocks-blocklets
|
||||
- i3lock-color
|
||||
- i3status
|
||||
- dunst
|
||||
- network-manager-applet
|
||||
- rofi
|
||||
- scrot
|
||||
- setxkbmap
|
||||
- blueman
|
||||
- volumeicon
|
||||
- xclip
|
||||
- xfce-polkit
|
||||
- xfce4-clipman-plugin
|
||||
- xfce4-screenshooter
|
||||
- xkbutils
|
||||
- xorg-fonts
|
||||
- xorg-minimal
|
||||
- xss-lock
|
||||
|
||||
desktop_sway_packages:
|
||||
- adw-gtk-theme
|
||||
- flameshot
|
||||
- grim
|
||||
- kanshi
|
||||
- qt5ct
|
||||
- qt6ct
|
||||
- slurp
|
||||
- swayfx
|
||||
- wl-clipboard
|
||||
- xhost
|
||||
- xdg-desktop-portal-wlr
|
||||
- xorg-server-xwayland
|
||||
|
||||
profile_packages:
|
||||
- alacritty
|
||||
- bluez
|
||||
- bridge-utils
|
||||
- ctags
|
||||
- firefox
|
||||
- deluge-gtk
|
||||
- dnsmasq
|
||||
- emacs-gtk3
|
||||
- poppler-glib
|
||||
- poppler-utils
|
||||
- exo
|
||||
- fontconfig-devel
|
||||
- freetype-devel
|
||||
- gvfs-cdda
|
||||
- gvfs-mtp
|
||||
- gvfs-smb
|
||||
- gufw
|
||||
- libvirt
|
||||
- libspa-bluetooth
|
||||
- libreoffice
|
||||
- liberation-fonts-ttf
|
||||
- libvterm-devel
|
||||
- libX11-devel
|
||||
- libXft-devel
|
||||
- meld
|
||||
- mpv
|
||||
- nerd-fonts-ttf
|
||||
- nerd-fonts-symbols-ttf
|
||||
- pdfarranger
|
||||
- playerctl
|
||||
- qemu
|
||||
- qemu-firmware
|
||||
- qemu-img
|
||||
- qemu-tools
|
||||
- remmina
|
||||
- ripgrep
|
||||
- rustup
|
||||
- ristretto
|
||||
- rsync
|
||||
- shotwell
|
||||
- ruff
|
||||
- terminus-font
|
||||
- texlive
|
||||
- ty
|
||||
- tumbler
|
||||
- uv
|
||||
- Thunar
|
||||
- thunar-archive-plugin
|
||||
- thunar-volman
|
||||
- ffmpegthumbnailer
|
||||
- virt-manager
|
||||
- virt-manager-tools
|
||||
- wireplumber
|
||||
- xarchiver
|
||||
- xournalpp
|
||||
- yaru
|
||||
- yaru-plus
|
||||
- zstd
|
||||
|
||||
desktop_source_tools:
|
||||
- name: st
|
||||
repo: https://codeberg.org/fscotto/st
|
||||
build_cmd: make
|
||||
binary_name: st
|
||||
install_name: st
|
||||
- name: gf
|
||||
repo: https://github.com/nakst/gf.git
|
||||
build_cmd: ./build.sh
|
||||
binary_name: gf2
|
||||
install_name: gf
|
||||
- name: bookokrat
|
||||
repo: https://github.com/bugzmanov/bookokrat
|
||||
build_cmd: cargo build --release
|
||||
binary_name: bookokrat
|
||||
install_name: bookokrat
|
||||
build_output_path: target/release/bookokrat
|
||||
- name: llmfit
|
||||
repo: https://github.com/AlexsJones/llmfit
|
||||
build_cmd: cargo build --release
|
||||
@@ -29,13 +162,27 @@ desktop_source_tools:
|
||||
|
||||
desktop_binary_tools: []
|
||||
|
||||
desktop_npm_packages: "{{ ai_agents_npm_packages + [] }}"
|
||||
desktop_npm_packages:
|
||||
- name: "opencode-ai"
|
||||
state: latest
|
||||
|
||||
desktop_common_dotfiles:
|
||||
- name: XDG autostart entries
|
||||
src: .config/autostart/
|
||||
dest: .config/autostart/
|
||||
mode: preserve
|
||||
- name: alacritty config
|
||||
src: .config/alacritty/
|
||||
dest: .config/alacritty/
|
||||
mode: preserve
|
||||
- name: Thunar config
|
||||
src: .config/Thunar/
|
||||
dest: .config/Thunar/
|
||||
mode: preserve
|
||||
- name: MIME application defaults
|
||||
src: .config/mimeapps.list
|
||||
dest: .config/mimeapps.list
|
||||
mode: "0644"
|
||||
- name: fastfetch config
|
||||
src: .config/fastfetch/
|
||||
dest: .config/fastfetch/
|
||||
@@ -44,26 +191,6 @@ desktop_common_dotfiles:
|
||||
src: .config/fontconfig/
|
||||
dest: .config/fontconfig/
|
||||
mode: preserve
|
||||
- name: GTK theme setup script
|
||||
src: .local/bin/setup-gtk-theme
|
||||
dest: .local/bin/setup-gtk-theme
|
||||
mode: "0755"
|
||||
- name: MIME application defaults
|
||||
src: .config/mimeapps.list
|
||||
dest: .config/mimeapps.list
|
||||
mode: "0644"
|
||||
- name: Thunar config
|
||||
src: .config/Thunar/
|
||||
dest: .config/Thunar/
|
||||
mode: preserve
|
||||
- name: Udiskie config
|
||||
src: .config/udiskie/
|
||||
dest: .config/udiskie/
|
||||
mode: preserve
|
||||
- name: Udiskie password helper
|
||||
src: .local/bin/udiskie-password
|
||||
dest: .local/bin/udiskie-password
|
||||
mode: "0755"
|
||||
- name: WirePlumber config
|
||||
src: .config/wireplumber/
|
||||
dest: .config/wireplumber/
|
||||
@@ -72,38 +199,26 @@ desktop_common_dotfiles:
|
||||
src: .config/yt-dlp/
|
||||
dest: .config/yt-dlp/
|
||||
mode: preserve
|
||||
- name: OpenCode config
|
||||
src: .config/opencode/
|
||||
dest: .config/opencode/
|
||||
mode: preserve
|
||||
- name: MPV config
|
||||
src: .config/mpv/
|
||||
dest: .config/mpv/
|
||||
mode: preserve
|
||||
- name: Bash cargo env fragment
|
||||
src: .bashrc.d/08-cargo-env.sh
|
||||
dest: .bashrc.d/08-cargo-env.sh
|
||||
mode: "0644"
|
||||
- name: Bash GPG TTY fragment
|
||||
src: .bashrc.d/10-gpg-tty.sh
|
||||
dest: .bashrc.d/10-gpg-tty.sh
|
||||
mode: "0644"
|
||||
- name: Bash man page colors fragment
|
||||
src: .bashrc.d/12-manpages.sh
|
||||
dest: .bashrc.d/12-manpages.sh
|
||||
mode: "0644"
|
||||
- name: Bash editor fragment
|
||||
src: .bashrc.d/20-editor-desktop.sh
|
||||
dest: .bashrc.d/20-editor-desktop.sh
|
||||
mode: "0644"
|
||||
- name: Bash Emacs client fragment
|
||||
src: .bashrc.d/25-emacs-client-desktop.sh
|
||||
dest: .bashrc.d/25-emacs-client-desktop.sh
|
||||
mode: "0644"
|
||||
- name: Bash VM helper fragment
|
||||
src: .bashrc.d/30-runvm.sh
|
||||
dest: .bashrc.d/30-runvm.sh
|
||||
mode: "0644"
|
||||
- name: Bash Ansible playbook helper fragment
|
||||
src: .bashrc.d/50-ap.sh
|
||||
dest: .bashrc.d/50-ap.sh
|
||||
mode: "0644"
|
||||
- name: Udiskie config
|
||||
src: .config/udiskie/
|
||||
dest: .config/udiskie/
|
||||
mode: preserve
|
||||
- name: Turnstile user services
|
||||
src: .config/service/
|
||||
dest: .config/service/
|
||||
mode: preserve
|
||||
- name: Bash profile fragments
|
||||
src: .bashrc.d/
|
||||
dest: .bashrc.d/
|
||||
mode: preserve
|
||||
- name: .gitignore_global
|
||||
src: .gitignore_global
|
||||
dest: .gitignore_global
|
||||
@@ -124,10 +239,26 @@ desktop_common_dotfiles:
|
||||
src: .authinfo.gpg
|
||||
dest: .authinfo.gpg
|
||||
mode: "0600"
|
||||
- name: Calibre database Flatpak wrapper
|
||||
src: .local/bin/calibredb
|
||||
dest: .local/bin/calibredb
|
||||
- name: GTK theme setup script
|
||||
src: .local/bin/setup-gtk-theme
|
||||
dest: .local/bin/setup-gtk-theme
|
||||
mode: "0755"
|
||||
- name: Turnstile environment update script
|
||||
src: .local/bin/update-turnstile-env
|
||||
dest: .local/bin/update-turnstile-env
|
||||
mode: "0755"
|
||||
- name: Gufw Sway wrapper
|
||||
src: .local/bin/run-gufw
|
||||
dest: .local/bin/run-gufw
|
||||
mode: "0755"
|
||||
- name: Udiskie password helper
|
||||
src: .local/bin/udiskie-password
|
||||
dest: .local/bin/udiskie-password
|
||||
mode: "0755"
|
||||
- name: Desktop application overrides
|
||||
src: .local/share/applications/
|
||||
dest: .local/share/applications/
|
||||
mode: preserve
|
||||
- name: SSH config
|
||||
src: .ssh/config
|
||||
dest: .ssh/config
|
||||
@@ -156,56 +287,47 @@ desktop_i3_dotfiles:
|
||||
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/
|
||||
dest: .config/alacritty/
|
||||
mode: preserve
|
||||
- name: dunst config
|
||||
src: .config/dunst/
|
||||
dest: .config/dunst/
|
||||
mode: preserve
|
||||
- name: flameshot config
|
||||
src: .config/flameshot/
|
||||
dest: .config/flameshot/
|
||||
mode: preserve
|
||||
- name: rofi config
|
||||
src: .config/rofi/
|
||||
dest: .config/rofi/
|
||||
mode: preserve
|
||||
- name: sway config
|
||||
- name: Sway config
|
||||
src: .config/sway/
|
||||
dest: .config/sway/
|
||||
mode: preserve
|
||||
- name: waybar config
|
||||
src: .config/waybar/
|
||||
dest: .config/waybar/
|
||||
- name: Sway wallpaper assets
|
||||
src: .config/i3/wallpapers/
|
||||
dest: .config/sway/wallpapers/
|
||||
mode: preserve
|
||||
- name: wlogout config
|
||||
src: .config/wlogout/
|
||||
dest: .config/wlogout/
|
||||
- name: Noctalia wallpaper library
|
||||
src: Pictures/Wallpapers/
|
||||
dest: Pictures/Wallpapers/
|
||||
mode: preserve
|
||||
- name: Sway session wrapper
|
||||
src: .local/bin/start-sway-session
|
||||
dest: .local/bin/start-sway-session
|
||||
mode: "0755"
|
||||
- name: Noctalia colors
|
||||
src: .config/noctalia/colors.json
|
||||
dest: .config/noctalia/colors.json
|
||||
mode: "0644"
|
||||
- name: Noctalia plugins
|
||||
src: .config/noctalia/plugins.json
|
||||
dest: .config/noctalia/plugins.json
|
||||
mode: "0644"
|
||||
- name: Noctalia colorschemes
|
||||
src: .config/noctalia/colorschemes/
|
||||
dest: .config/noctalia/colorschemes/
|
||||
mode: preserve
|
||||
|
||||
noctalia_bar_monitors:
|
||||
- DP-1
|
||||
|
||||
noctalia_screen_overrides: []
|
||||
|
||||
noctalia_wallpaper: "{{ user_home }}/Pictures/Wallpapers/star-wars-trio.jpg"
|
||||
|
||||
desktop_flatpak_packages:
|
||||
- be.alexandervanhee.gradia
|
||||
@@ -216,7 +338,16 @@ desktop_flatpak_packages:
|
||||
- com.spotify.Client
|
||||
- io.github.flattool.Warehouse
|
||||
- org.telegram.desktop
|
||||
- org.mozilla.Thunderbird
|
||||
|
||||
desktop_flatpak_extensions:
|
||||
- org.gtk.Gtk3theme.Yaru-Blue-dark//stable
|
||||
- org.gtk.Gtk3theme.Yaru-Orange-dark//3.22
|
||||
|
||||
desktop_flatpak_global_filesystems:
|
||||
- xdg-config/gtk-3.0:ro
|
||||
- xdg-config/gtk-4.0:ro
|
||||
- xdg-config/qt5ct:ro
|
||||
- xdg-config/qt6ct:ro
|
||||
|
||||
desktop_flatpak_global_env:
|
||||
- QT_QPA_PLATFORM=wayland
|
||||
- QT_QPA_PLATFORMTHEME=qt6ct
|
||||
|
||||
@@ -50,9 +50,6 @@ workstation_host_linux_packages_fedora:
|
||||
- code
|
||||
- firewall-config
|
||||
- gnome-extensions-app
|
||||
- gnome-shell-extension-appindicator
|
||||
- gnome-shell-extension-just-perfection
|
||||
- gnome-shell-extension-no-overview
|
||||
- gnome-tweaks
|
||||
- libreoffice
|
||||
- meld
|
||||
@@ -61,7 +58,6 @@ workstation_host_linux_packages_fedora:
|
||||
- pinentry-gnome3
|
||||
- podman
|
||||
- podman-compose
|
||||
- rclone
|
||||
- yubikey-manager
|
||||
|
||||
workstation_flatpak_remote_name: flathub
|
||||
|
||||
@@ -6,7 +6,6 @@ effective_username: "{{ server_username }}"
|
||||
effective_user_group: "{{ server_user_group }}"
|
||||
effective_user_home: "{{ server_user_home }}"
|
||||
server_container_stack_dir: /opt/docker/server
|
||||
ai_agents_enabled: false
|
||||
|
||||
profile_packages:
|
||||
- avahi-daemon
|
||||
@@ -93,14 +92,6 @@ server_directories:
|
||||
owner: "1000"
|
||||
group: "1000"
|
||||
mode: "0755"
|
||||
- path: /srv/nextcloud
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0755"
|
||||
- path: /srv/nextcloud/data
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0755"
|
||||
|
||||
server_ufw_rules:
|
||||
- rule: allow
|
||||
|
||||
@@ -1,63 +1,60 @@
|
||||
---
|
||||
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
|
||||
- avahi
|
||||
- base-system
|
||||
- bat
|
||||
- clang
|
||||
- clang-tools-extra
|
||||
- cmake
|
||||
- cups
|
||||
- cups-filters
|
||||
- cups-pk-helper
|
||||
- delta
|
||||
- elogind
|
||||
- fastfetch
|
||||
- flatpak
|
||||
- fuse3
|
||||
- gcc
|
||||
- gdb
|
||||
- gist
|
||||
- github-cli
|
||||
- gnome-keyring
|
||||
- go
|
||||
- hugo
|
||||
- gvfs
|
||||
- ImageMagick
|
||||
- isync
|
||||
- libsecret
|
||||
- libtool
|
||||
- linux
|
||||
- linux-headers
|
||||
- linux-mainline
|
||||
- linux-mainline-headers
|
||||
- linux-tools
|
||||
- lm_sensors
|
||||
- man-pages-devel
|
||||
- man-pages-posix
|
||||
- msmtp
|
||||
- mu4e
|
||||
- network-manager-applet
|
||||
- nodejs
|
||||
- ntfs-3g
|
||||
- pavucontrol
|
||||
- pipewire
|
||||
- pkg-config
|
||||
- plocate
|
||||
- podman
|
||||
- podman-compose
|
||||
- rclone
|
||||
- sane
|
||||
- sane-airscan
|
||||
- seahorse
|
||||
- simple-scan
|
||||
- socklog
|
||||
- socklog-void
|
||||
- speech-dispatcher
|
||||
- syncthing
|
||||
- tealdeer
|
||||
- system-config-printer
|
||||
- tmux
|
||||
- tealdeer
|
||||
- tree-sitter-grammars
|
||||
- ufw
|
||||
- xdotool
|
||||
- void-repo-nonfree
|
||||
- vpm
|
||||
- vsv
|
||||
- xtools
|
||||
- yt-dlp
|
||||
- plocate
|
||||
|
||||
enabled_services:
|
||||
- NetworkManager
|
||||
@@ -74,162 +71,3 @@ enabled_services:
|
||||
- ufw
|
||||
- virtlockd
|
||||
- virtlogd
|
||||
|
||||
desktop_restart_emptty_automatically: false
|
||||
desktop_emptty_session_error_logging: disabled
|
||||
|
||||
desktop_void_dotfiles:
|
||||
- name: Turnstile user services
|
||||
src: .config/service/
|
||||
dest: .config/service/
|
||||
mode: preserve
|
||||
- name: Bash DBus session fragment
|
||||
src: .bashrc.d/14-dbus-session.sh
|
||||
dest: .bashrc.d/14-dbus-session.sh
|
||||
mode: "0644"
|
||||
- name: Bash SSH agent socket fragment
|
||||
src: .bashrc.d/16-ssh-agent-socket.sh
|
||||
dest: .bashrc.d/16-ssh-agent-socket.sh
|
||||
mode: "0644"
|
||||
- name: Bash runit desktop fragment
|
||||
src: .bashrc.d/15-runit-desktop.sh
|
||||
dest: .bashrc.d/15-runit-desktop.sh
|
||||
mode: "0644"
|
||||
- name: Turnstile environment update script
|
||||
src: .local/bin/update-turnstile-env
|
||||
dest: .local/bin/update-turnstile-env
|
||||
mode: "0755"
|
||||
|
||||
desktop_common_packages:
|
||||
- blueman
|
||||
- brightnessctl
|
||||
- cups
|
||||
- cups-filters
|
||||
- cups-pk-helper
|
||||
- dex
|
||||
- emptty
|
||||
- flatpak
|
||||
- gnome-keyring
|
||||
- gvfs
|
||||
- libsecret
|
||||
- network-manager-applet
|
||||
- pavucontrol
|
||||
- pinentry-emacs
|
||||
- pinentry-gtk
|
||||
- sane
|
||||
- sane-airscan
|
||||
- seahorse
|
||||
- simple-scan
|
||||
- system-config-printer
|
||||
- turnstile
|
||||
- udiskie
|
||||
- xdg-desktop-portal
|
||||
- xdg-desktop-portal-gtk
|
||||
- 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
|
||||
- flameshot
|
||||
- foot
|
||||
- foot-terminfo
|
||||
- grim
|
||||
- kanshi
|
||||
- rofi
|
||||
- slurp
|
||||
- swayfx
|
||||
- swaybg
|
||||
- swayidle
|
||||
- swaylock
|
||||
- SwayOSD
|
||||
- Waybar
|
||||
- wl-clipboard
|
||||
- wlogout
|
||||
- xdg-desktop-portal-wlr
|
||||
- xorg-server-xwayland
|
||||
|
||||
profile_packages:
|
||||
- alacritty
|
||||
- bluez
|
||||
- bridge-utils
|
||||
- ctags
|
||||
- firefox
|
||||
- deluge-gtk
|
||||
- dnsmasq
|
||||
- emacs-gtk3
|
||||
- poppler-glib
|
||||
- poppler-utils
|
||||
- exo
|
||||
- fontconfig-devel
|
||||
- freetype-devel
|
||||
- gvfs-cdda
|
||||
- gvfs-mtp
|
||||
- gvfs-smb
|
||||
- gufw
|
||||
- libvirt
|
||||
- libspa-bluetooth
|
||||
- libreoffice
|
||||
- liberation-fonts-ttf
|
||||
- libvterm-devel
|
||||
- libX11-devel
|
||||
- libXft-devel
|
||||
- meld
|
||||
- mpv
|
||||
- nerd-fonts-ttf
|
||||
- nerd-fonts-symbols-ttf
|
||||
- pdfarranger
|
||||
- playerctl
|
||||
- qemu
|
||||
- qemu-firmware
|
||||
- qemu-img
|
||||
- qemu-tools
|
||||
- remmina
|
||||
- ripgrep
|
||||
- rustup
|
||||
- ristretto
|
||||
- rsync
|
||||
- shotwell
|
||||
- ruff
|
||||
- terminus-font
|
||||
- texlive
|
||||
- ty
|
||||
- tumbler
|
||||
- uv
|
||||
- Thunar
|
||||
- thunar-archive-plugin
|
||||
- thunar-volman
|
||||
- ffmpegthumbnailer
|
||||
- virt-manager
|
||||
- virt-manager-tools
|
||||
- wireplumber
|
||||
- xarchiver
|
||||
- xournalpp
|
||||
- yaru
|
||||
- yaru-plus
|
||||
- zstd
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
---
|
||||
workstation_manage_opencode: true
|
||||
|
||||
workstation_npm_packages: "{{ ai_agents_npm_packages + [] }}"
|
||||
workstation_npm_packages:
|
||||
- name: "opencode-ai"
|
||||
state: latest
|
||||
|
||||
@@ -148,29 +148,3 @@ workstation_gnome_managed_settings:
|
||||
- schema: org.gnome.TextEditor
|
||||
key: wrap-text
|
||||
value: "true"
|
||||
- schema: org.gnome.desktop.background
|
||||
key: picture-uri
|
||||
value: "'file:///usr/share/backgrounds/gnome/lcd-rainbow-l.jxl'"
|
||||
- schema: org.gnome.desktop.background
|
||||
key: picture-uri-dark
|
||||
value: "'file:///usr/share/backgrounds/gnome/lcd-rainbow-d.jxl'"
|
||||
|
||||
workstation_gnome_extension_dconf_settings:
|
||||
- path: /org/gnome/shell/extensions/paperwm/
|
||||
key: selection-border-radius-bottom
|
||||
value: "15"
|
||||
- path: /org/gnome/shell/extensions/paperwm/
|
||||
key: selection-border-radius-top
|
||||
value: "15"
|
||||
- path: /org/gnome/shell/extensions/paperwm/
|
||||
key: selection-border-size
|
||||
value: "5"
|
||||
- path: /org/gnome/shell/extensions/paperwm/
|
||||
key: show-window-position-bar
|
||||
value: "false"
|
||||
- path: /org/gnome/shell/extensions/paperwm/
|
||||
key: show-workspace-indicator
|
||||
value: "false"
|
||||
- path: /org/gnome/shell/extensions/paperwm/
|
||||
key: window-gap
|
||||
value: "10"
|
||||
|
||||
@@ -3,7 +3,6 @@ hostname: ikaros
|
||||
|
||||
desktop_sessions_enabled:
|
||||
- i3
|
||||
- sway
|
||||
|
||||
desktop_default_session: i3
|
||||
desktop_default_session_env: xorg
|
||||
|
||||
@@ -2,21 +2,26 @@
|
||||
hostname: nymph
|
||||
|
||||
desktop_sessions_enabled:
|
||||
- i3
|
||||
- sway
|
||||
|
||||
desktop_default_session: i3
|
||||
desktop_default_session_env: xorg
|
||||
desktop_default_session: sway
|
||||
desktop_default_session_env: wayland
|
||||
desktop_emptty_session_error_logging: rotate
|
||||
|
||||
host_xbps_repositories:
|
||||
- name: noctalia
|
||||
url: https://universalrepo.r1xelelo.workers.dev/void
|
||||
|
||||
host_packages:
|
||||
- nvidia580
|
||||
- linux-mainline-headers
|
||||
- cliphist
|
||||
- grimshot
|
||||
- nvidia
|
||||
- noctalia-shell
|
||||
- power-profiles-daemon
|
||||
- mesa-dri
|
||||
- vulkan-loader
|
||||
- mesa-vulkan-intel
|
||||
- intel-video-accel
|
||||
- power-profiles-daemon
|
||||
- tlp
|
||||
- tlp-rdw
|
||||
- upower
|
||||
@@ -24,14 +29,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
|
||||
@@ -39,6 +36,20 @@ host_sway_dotfiles:
|
||||
- src: .config/sway/session-env
|
||||
dest: .config/sway/session-env
|
||||
mode: "0644"
|
||||
- src: .config/kanshi/
|
||||
dest: .config/kanshi/
|
||||
mode: preserve
|
||||
- src: .config/kanshi/config
|
||||
dest: .config/kanshi/config
|
||||
mode: "0644"
|
||||
|
||||
noctalia_bar_monitors:
|
||||
- DP-1
|
||||
- eDP-1
|
||||
|
||||
noctalia_screen_overrides:
|
||||
- name: DP-1
|
||||
enabled: false
|
||||
- name: eDP-1
|
||||
enabled: false
|
||||
|
||||
host_packages_absent:
|
||||
- network-manager-applet
|
||||
- blueman
|
||||
|
||||
@@ -14,16 +14,7 @@
|
||||
group: "{{ effective_user_group }}"
|
||||
mode: "0755"
|
||||
loop: "{{ xdg_user_directories | default([]) }}"
|
||||
when: "'desktop' in group_names"
|
||||
|
||||
- name: Extract templates kit to Templates directory
|
||||
tags: [dotfiles, dotfiles:common]
|
||||
ansible.builtin.unarchive:
|
||||
src: "{{ playbook_dir }}/../dotfiles/common/templates_kit.zip"
|
||||
dest: "{{ effective_user_home }}/Templates"
|
||||
owner: "{{ effective_username }}"
|
||||
group: "{{ effective_user_group }}"
|
||||
when: "'desktop' in group_names"
|
||||
when: "'void' in group_names"
|
||||
|
||||
- name: Ensure SSH socket directory exists
|
||||
tags: [dotfiles, dotfiles:common]
|
||||
@@ -42,41 +33,10 @@
|
||||
owner: "{{ effective_username }}"
|
||||
group: "{{ effective_user_group }}"
|
||||
mode: "{{ item.mode }}"
|
||||
loop: >-
|
||||
{{
|
||||
(common_dotfiles | default([]))
|
||||
+ ((ai_agents_dotfiles | default([])) if (ai_agents_enabled | default(false)) else [])
|
||||
}}
|
||||
loop: "{{ common_dotfiles | default([]) }}"
|
||||
loop_control:
|
||||
label: "{{ item.dest }}"
|
||||
|
||||
- name: Ensure AI config directories exist
|
||||
tags: [dotfiles, dotfiles:common]
|
||||
ansible.builtin.file:
|
||||
path: "{{ effective_user_home }}/{{ item }}"
|
||||
state: directory
|
||||
owner: "{{ effective_username }}"
|
||||
group: "{{ effective_user_group }}"
|
||||
mode: "0755"
|
||||
loop:
|
||||
- .codex
|
||||
when:
|
||||
- ai_agents_enabled | default(false)
|
||||
- (ai_agents_templates | default([])) | length > 0
|
||||
|
||||
- name: Render AI agent templates
|
||||
tags: [dotfiles, dotfiles:common]
|
||||
ansible.builtin.template:
|
||||
src: "{{ playbook_dir }}/../dotfiles/common/{{ item.src }}"
|
||||
dest: "{{ effective_user_home }}/{{ item.dest }}"
|
||||
owner: "{{ effective_username }}"
|
||||
group: "{{ effective_user_group }}"
|
||||
mode: "{{ item.mode }}"
|
||||
loop: "{{ ai_agents_templates | default([]) }}"
|
||||
loop_control:
|
||||
label: "{{ item.dest }}"
|
||||
when: ai_agents_enabled | default(false)
|
||||
|
||||
- name: Refresh bat cache
|
||||
tags: [dotfiles, dotfiles:common]
|
||||
ansible.builtin.command:
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
changed_when: true
|
||||
when:
|
||||
- not ansible_check_mode
|
||||
- "'void' in group_names"
|
||||
- desktop_restart_emptty_automatically | default(false)
|
||||
|
||||
- name: Report manual emptty restart requirement
|
||||
@@ -17,13 +16,10 @@
|
||||
to avoid dropping the active graphical session.
|
||||
when:
|
||||
- not ansible_check_mode
|
||||
- "'void' in group_names"
|
||||
- not (desktop_restart_emptty_automatically | default(false))
|
||||
|
||||
- name: Reload SSH service with runit
|
||||
- name: Reload SSH service
|
||||
listen: Reload SSH service
|
||||
ansible.builtin.command: sv reload sshd
|
||||
changed_when: true
|
||||
when:
|
||||
- not ansible_check_mode
|
||||
- "'void' in group_names"
|
||||
when: not ansible_check_mode
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
regexp: '^#?HandleLidSwitch='
|
||||
line: 'HandleLidSwitch=suspend'
|
||||
state: present
|
||||
when: "'void' in group_names"
|
||||
|
||||
- name: Ensure common config directories exist
|
||||
tags: [dotfiles, dotfiles:desktop]
|
||||
@@ -19,11 +18,13 @@
|
||||
loop:
|
||||
- "{{ user_home }}/.config"
|
||||
- "{{ user_home }}/.config/autostart"
|
||||
- "{{ user_home }}/.bashrc.d"
|
||||
- "{{ user_home }}/.config/alacritty"
|
||||
- "{{ user_home }}/.config/Thunar"
|
||||
- "{{ user_home }}/.local/share"
|
||||
- "{{ user_home }}/.local/share/applications"
|
||||
- "{{ user_home }}/.tmux"
|
||||
- "{{ user_home }}/.tmux/bin"
|
||||
- "{{ user_home }}/.tmux/plugins"
|
||||
- "{{ user_home }}/.ssh"
|
||||
|
||||
- name: Ensure user local bin directory exists
|
||||
tags: [dotfiles, dotfiles:desktop, dotfiles:host]
|
||||
@@ -41,7 +42,6 @@
|
||||
insertafter: '^auth\s+include\s+system-local-login$'
|
||||
line: "auth optional pam_gnome_keyring.so"
|
||||
state: present
|
||||
when: "'void' in group_names"
|
||||
|
||||
- name: Enable gnome-keyring PAM session hook
|
||||
tags: [packages, gnome]
|
||||
@@ -50,7 +50,6 @@
|
||||
insertafter: '^session\s+include\s+system-local-login$'
|
||||
line: "session optional pam_gnome_keyring.so auto_start"
|
||||
state: present
|
||||
when: "'void' in group_names"
|
||||
|
||||
- name: Enable gnome-keyring PAM password hook
|
||||
tags: [packages, gnome]
|
||||
@@ -59,7 +58,6 @@
|
||||
insertafter: '^password\s+include\s+system-local-login$'
|
||||
line: "password optional pam_gnome_keyring.so use_authtok"
|
||||
state: present
|
||||
when: "'void' in group_names"
|
||||
|
||||
- name: Check whether SSH host ed25519 key exists
|
||||
tags: [services]
|
||||
@@ -183,7 +181,6 @@
|
||||
ansible.builtin.stat:
|
||||
path: /etc/sv/libvirtd
|
||||
register: libvirtd_service_dir
|
||||
when: "'void' in group_names"
|
||||
|
||||
- name: Enable libvirt daemon service
|
||||
tags: [packages, services]
|
||||
@@ -191,9 +188,7 @@
|
||||
src: /etc/sv/libvirtd
|
||||
dest: /var/service/libvirtd
|
||||
state: link
|
||||
when:
|
||||
- "'void' in group_names"
|
||||
- libvirtd_service_dir.stat.exists
|
||||
when: libvirtd_service_dir.stat.exists
|
||||
|
||||
- name: Check virtualization group availability
|
||||
tags: [packages]
|
||||
@@ -234,7 +229,6 @@
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0755"
|
||||
when: "'void' in group_names"
|
||||
|
||||
- name: Ensure emptty session directories exist
|
||||
tags: [packages, services, emptty]
|
||||
@@ -247,7 +241,6 @@
|
||||
loop:
|
||||
- /etc/emptty/xsessions
|
||||
- /etc/emptty/wayland-sessions
|
||||
when: "'void' in group_names"
|
||||
|
||||
- name: Configure emptty
|
||||
tags: [packages, services, emptty]
|
||||
@@ -258,7 +251,6 @@
|
||||
group: root
|
||||
mode: "0644"
|
||||
notify: Restart emptty
|
||||
when: "'void' in group_names"
|
||||
|
||||
- name: Copy common desktop dotfiles
|
||||
tags: [dotfiles, dotfiles:desktop]
|
||||
@@ -268,11 +260,7 @@
|
||||
owner: "{{ username }}"
|
||||
group: "{{ user_group }}"
|
||||
mode: "{{ item.mode }}"
|
||||
loop: >-
|
||||
{{
|
||||
(desktop_common_dotfiles | default([]))
|
||||
+ ((desktop_void_dotfiles | default([])) if 'void' in group_names else [])
|
||||
}}
|
||||
loop: "{{ desktop_common_dotfiles | default([]) }}"
|
||||
loop_control:
|
||||
label: "{{ item.dest }}"
|
||||
|
||||
@@ -434,18 +422,6 @@
|
||||
- "{{ user_home }}/Maildir/iCloudAccount"
|
||||
- "{{ user_home }}/Maildir/ProtonMailAccount"
|
||||
|
||||
- name: Make Qt apps follow the GTK theme
|
||||
tags: [theme]
|
||||
ansible.builtin.copy:
|
||||
dest: /etc/profile.d/10-qt-theme.sh
|
||||
content: |
|
||||
# Use the gtk3 Qt platform theme so Qt5/Qt6 widgets, file dialogs,
|
||||
# icon theme and color scheme follow ~/.config/gtk-3.0/settings.ini.
|
||||
export QT_QPA_PLATFORMTHEME=gtk3
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
|
||||
- name: Ensure flathub remote is configured
|
||||
tags: [packages]
|
||||
community.general.flatpak_remote:
|
||||
@@ -484,9 +460,9 @@
|
||||
path: "{{ user_home }}/.cargo/bin/rustc"
|
||||
register: rustup_initialized
|
||||
|
||||
- name: Run rustup-init
|
||||
ansible.builtin.command:
|
||||
cmd: rustup-init -y --no-modify-path
|
||||
- name: Run rustup-init with cargo env sourced
|
||||
ansible.builtin.shell:
|
||||
cmd: . ~/.cargo/env && rustup-init -y --no-modify-path
|
||||
creates: "{{ user_home }}/.cargo/bin/rustc"
|
||||
become_user: "{{ username }}"
|
||||
environment:
|
||||
@@ -511,8 +487,8 @@
|
||||
file: source_tool.yml
|
||||
apply:
|
||||
tags: [packages]
|
||||
loop: "{{ desktop_source_tools + (desktop_void_source_tools | default([])) }}"
|
||||
when: (desktop_source_tools + (desktop_void_source_tools | default([]))) | length > 0
|
||||
loop: "{{ desktop_source_tools }}"
|
||||
when: desktop_source_tools | length > 0
|
||||
loop_control:
|
||||
loop_var: source_tool
|
||||
label: "{{ source_tool.name }}"
|
||||
@@ -542,7 +518,7 @@
|
||||
label: "{{ binary_tool.name }}"
|
||||
|
||||
- name: Install desktop npm packages
|
||||
tags: [packages, npm]
|
||||
tags: [packages]
|
||||
community.general.npm:
|
||||
name: "{{ item.name }}"
|
||||
global: true
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
- "'i3' in (desktop_sessions_enabled | default([]))"
|
||||
- (host_i3_dotfiles | default([])) | length > 0
|
||||
|
||||
- name: Copy host-specific sway dotfiles
|
||||
- name: Copy host-specific Sway dotfiles
|
||||
tags: [dotfiles, dotfiles:desktop, dotfiles:host, sway]
|
||||
ansible.builtin.copy:
|
||||
src: "{{ playbook_dir }}/../dotfiles/{{ hostname }}/{{ item.src }}"
|
||||
@@ -33,4 +33,3 @@
|
||||
when:
|
||||
- "'sway' in (desktop_sessions_enabled | default([]))"
|
||||
- (host_sway_dotfiles | default([])) | length > 0
|
||||
|
||||
|
||||
@@ -1,38 +1,16 @@
|
||||
---
|
||||
- name: Check if GRUB_CMDLINE_LINUX line exists in /etc/default/grub
|
||||
tags: [packages, nvidia]
|
||||
ansible.builtin.command:
|
||||
cmd: grep -E '^GRUB_CMDLINE_LINUX=' /etc/default/grub
|
||||
register: nymph_grub_cmdline_check
|
||||
changed_when: false
|
||||
failed_when: false
|
||||
|
||||
- name: Initialize empty GRUB_CMDLINE_LINUX line if missing
|
||||
- name: Configure GRUB kernel parameters for NVIDIA hybrid graphics
|
||||
tags: [packages, nvidia]
|
||||
ansible.builtin.lineinfile:
|
||||
path: /etc/default/grub
|
||||
line: 'GRUB_CMDLINE_LINUX=""'
|
||||
insertafter: '^GRUB_CMDLINE_LINUX_DEFAULT='
|
||||
regexp: '^GRUB_CMDLINE_LINUX='
|
||||
line: 'GRUB_CMDLINE_LINUX="rd.luks.uuid=1e15d159-5d05-4a1f-9639-ac200dff9f9c rootflags=subvol=@ apparmor=1 security=apparmor nouveau.modeset=0 nvidia-drm.modeset=1"'
|
||||
state: present
|
||||
when: nymph_grub_cmdline_check.rc != 0
|
||||
register: nymph_grub_cmdline_init
|
||||
|
||||
- name: Append NVIDIA kernel parameters to GRUB_CMDLINE_LINUX if missing
|
||||
tags: [packages, nvidia]
|
||||
ansible.builtin.replace:
|
||||
path: /etc/default/grub
|
||||
regexp: '^(GRUB_CMDLINE_LINUX="(?:(?!{{ item | regex_escape }})[^"])*?)"$'
|
||||
replace: '\1 {{ item }}"'
|
||||
loop:
|
||||
- nouveau.modeset=0
|
||||
- nvidia-drm.modeset=1
|
||||
register: nymph_grub_cmdline_append
|
||||
|
||||
- name: Regenerate GRUB configuration
|
||||
tags: [packages, nvidia]
|
||||
ansible.builtin.command: grub-mkconfig -o /boot/grub/grub.cfg
|
||||
changed_when: true
|
||||
when: nymph_grub_cmdline_init is changed or nymph_grub_cmdline_append is changed
|
||||
|
||||
- name: Configure NVIDIA power management for hybrid graphics
|
||||
tags: [packages, nvidia]
|
||||
@@ -61,3 +39,13 @@
|
||||
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([]))"
|
||||
|
||||
- name: Deploy WirePlumber camera priority config
|
||||
tags: [dotfiles, dotfiles:host]
|
||||
ansible.builtin.copy:
|
||||
src: "{{ playbook_dir }}/../dotfiles/nymph/.config/wireplumber/wireplumber.conf.d/60-camera-priority.conf"
|
||||
dest: "{{ user_home }}/.config/wireplumber/wireplumber.conf.d/60-camera-priority.conf"
|
||||
owner: "{{ username }}"
|
||||
group: "{{ user_group }}"
|
||||
mode: "0644"
|
||||
force: true
|
||||
|
||||
@@ -8,13 +8,8 @@
|
||||
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
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
[preferred]
|
||||
default=gtk
|
||||
org.freedesktop.impl.portal.Screenshot=wlr
|
||||
org.freedesktop.impl.portal.ScreenCast=wlr
|
||||
@@ -1,5 +0,0 @@
|
||||
[Desktop Entry]
|
||||
Name=Sway
|
||||
Comment=SwayFX (Wayland)
|
||||
Exec=/usr/local/bin/start-sway
|
||||
Type=Application
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
- name: Ensure sway config directories exist
|
||||
- name: Ensure Sway config directories exist
|
||||
tags: [dotfiles, dotfiles:desktop, sway]
|
||||
ansible.builtin.file:
|
||||
path: "{{ item }}"
|
||||
@@ -8,56 +8,39 @@
|
||||
group: "{{ user_group }}"
|
||||
mode: "0755"
|
||||
loop:
|
||||
- "{{ user_home }}/.config/alacritty"
|
||||
- "{{ user_home }}/.config/dunst"
|
||||
- "{{ user_home }}/.config/flameshot"
|
||||
- "{{ user_home }}/.config/rofi"
|
||||
- "{{ user_home }}/.config/sway"
|
||||
- "{{ user_home }}/.config/waybar"
|
||||
- "{{ user_home }}/.config/wlogout"
|
||||
- "{{ user_home }}/.config/kanshi"
|
||||
- "{{ user_home }}/.config/qt5ct"
|
||||
- "{{ user_home }}/.config/qt5ct/colors"
|
||||
- "{{ user_home }}/.config/qt6ct"
|
||||
- "{{ user_home }}/.config/qt6ct/colors"
|
||||
when: "'sway' in (desktop_sessions_enabled | default([]))"
|
||||
|
||||
- name: Install allowed emptty Wayland sessions
|
||||
tags: [packages, services, emptty, sway]
|
||||
ansible.builtin.copy:
|
||||
src: sway.desktop
|
||||
dest: /etc/emptty/wayland-sessions/sway.desktop
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
when: "'sway' in (desktop_sessions_enabled | default([]))"
|
||||
|
||||
- name: Install Sway session launcher in /usr/local/bin
|
||||
tags: [packages, services, sway]
|
||||
ansible.builtin.copy:
|
||||
src: "{{ playbook_dir }}/../dotfiles/desktop/.local/bin/start-sway"
|
||||
dest: /usr/local/bin/start-sway
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0755"
|
||||
when: "'sway' in (desktop_sessions_enabled | default([]))"
|
||||
|
||||
- name: Ensure /etc/xdg/xdg-desktop-portal exists
|
||||
tags: [packages, services, sway, portal]
|
||||
- name: Ensure Noctalia config directories exist
|
||||
tags: [dotfiles, dotfiles:desktop, sway, noctalia]
|
||||
ansible.builtin.file:
|
||||
path: /etc/xdg/xdg-desktop-portal
|
||||
path: "{{ item }}"
|
||||
state: directory
|
||||
owner: root
|
||||
group: root
|
||||
owner: "{{ username }}"
|
||||
group: "{{ user_group }}"
|
||||
mode: "0755"
|
||||
loop:
|
||||
- "{{ user_home }}/.config/noctalia"
|
||||
- "{{ user_home }}/.config/noctalia/plugins"
|
||||
- "{{ user_home }}/.local/share/noctalia-plugins"
|
||||
when: "'sway' in (desktop_sessions_enabled | default([]))"
|
||||
|
||||
- name: Configure xdg-desktop-portal backend preferences for sway
|
||||
tags: [packages, services, sway, portal]
|
||||
ansible.builtin.copy:
|
||||
src: sway-portals.conf
|
||||
dest: /etc/xdg/xdg-desktop-portal/sway-portals.conf
|
||||
- name: Install Sway emptty session entry
|
||||
tags: [packages, services, emptty, sway]
|
||||
ansible.builtin.template:
|
||||
src: Sway.desktop.j2
|
||||
dest: /etc/emptty/wayland-sessions/Sway.desktop
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
when: "'sway' in (desktop_sessions_enabled | default([]))"
|
||||
|
||||
- name: Copy sway desktop dotfiles
|
||||
- name: Copy Sway desktop dotfiles
|
||||
tags: [dotfiles, dotfiles:desktop, sway]
|
||||
ansible.builtin.copy:
|
||||
src: "{{ playbook_dir }}/../dotfiles/desktop/{{ item.src }}"
|
||||
@@ -69,3 +52,92 @@
|
||||
loop_control:
|
||||
label: "{{ item.dest }}"
|
||||
when: "'sway' in (desktop_sessions_enabled | default([]))"
|
||||
|
||||
- name: Render Sway shell config
|
||||
tags: [dotfiles, dotfiles:desktop, sway]
|
||||
ansible.builtin.template:
|
||||
src: shell.conf.j2
|
||||
dest: "{{ user_home }}/.config/sway/shell.conf"
|
||||
owner: "{{ username }}"
|
||||
group: "{{ user_group }}"
|
||||
mode: "0644"
|
||||
when: "'sway' in (desktop_sessions_enabled | default([]))"
|
||||
|
||||
- name: Render Noctalia settings template
|
||||
tags: [dotfiles, dotfiles:desktop, sway, noctalia]
|
||||
ansible.builtin.template:
|
||||
src: noctalia-settings.json.j2
|
||||
dest: "{{ user_home }}/.config/noctalia/settings.json"
|
||||
owner: "{{ username }}"
|
||||
group: "{{ user_group }}"
|
||||
mode: "0644"
|
||||
when: "'sway' in (desktop_sessions_enabled | default([]))"
|
||||
|
||||
- name: Render qt5ct config
|
||||
tags: [dotfiles, dotfiles:desktop, sway, noctalia]
|
||||
ansible.builtin.template:
|
||||
src: qt5ct.conf.j2
|
||||
dest: "{{ user_home }}/.config/qt5ct/qt5ct.conf"
|
||||
owner: "{{ username }}"
|
||||
group: "{{ user_group }}"
|
||||
mode: "0644"
|
||||
when: "'sway' in (desktop_sessions_enabled | default([]))"
|
||||
|
||||
- name: Render qt6ct config
|
||||
tags: [dotfiles, dotfiles:desktop, sway, noctalia]
|
||||
ansible.builtin.template:
|
||||
src: qt6ct.conf.j2
|
||||
dest: "{{ user_home }}/.config/qt6ct/qt6ct.conf"
|
||||
owner: "{{ username }}"
|
||||
group: "{{ user_group }}"
|
||||
mode: "0644"
|
||||
when: "'sway' in (desktop_sessions_enabled | default([]))"
|
||||
|
||||
- name: Manage Noctalia shell plugins
|
||||
tags: [dotfiles, dotfiles:desktop, sway, noctalia]
|
||||
ansible.builtin.include_tasks: noctalia.yml
|
||||
when: "'sway' in (desktop_sessions_enabled | default([]))"
|
||||
|
||||
- name: Copy shared Clipper settings
|
||||
tags: [dotfiles, dotfiles:desktop, sway, noctalia]
|
||||
ansible.builtin.copy:
|
||||
src: "{{ playbook_dir }}/../dotfiles/desktop/.config/noctalia/plugins/clipper/settings.json"
|
||||
dest: "{{ user_home }}/.config/noctalia/plugins/clipper/settings.json"
|
||||
owner: "{{ username }}"
|
||||
group: "{{ user_group }}"
|
||||
mode: "0644"
|
||||
when: "'sway' in (desktop_sessions_enabled | default([]))"
|
||||
|
||||
- name: Allow Flatpak apps to read shared theme configs
|
||||
tags: [packages, dotfiles, dotfiles:desktop, sway, noctalia]
|
||||
ansible.builtin.command:
|
||||
argv:
|
||||
- flatpak
|
||||
- override
|
||||
- --user
|
||||
- "--filesystem={{ item }}"
|
||||
become_user: "{{ username }}"
|
||||
environment:
|
||||
HOME: "{{ user_home }}"
|
||||
changed_when: false
|
||||
loop: "{{ desktop_flatpak_global_filesystems | default([]) }}"
|
||||
when:
|
||||
- "'sway' in (desktop_sessions_enabled | default([]))"
|
||||
- (desktop_flatpak_packages | default([])) | length > 0
|
||||
|
||||
- name: Export global Flatpak environment for theme integration
|
||||
tags: [packages, dotfiles, dotfiles:desktop, sway, noctalia]
|
||||
ansible.builtin.command:
|
||||
argv:
|
||||
- flatpak
|
||||
- override
|
||||
- --user
|
||||
- "--env={{ item }}"
|
||||
become_user: "{{ username }}"
|
||||
environment:
|
||||
HOME: "{{ user_home }}"
|
||||
changed_when: false
|
||||
loop: "{{ desktop_flatpak_global_env | default([]) }}"
|
||||
when:
|
||||
- "'sway' in (desktop_sessions_enabled | default([]))"
|
||||
- (desktop_flatpak_packages | default([])) | length > 0
|
||||
|
||||
158
ansible/roles/profile_desktop_sway/tasks/noctalia.yml
Normal file
158
ansible/roles/profile_desktop_sway/tasks/noctalia.yml
Normal file
@@ -0,0 +1,158 @@
|
||||
---
|
||||
- name: Check whether official Clipper plugin directory exists
|
||||
ansible.builtin.stat:
|
||||
path: "{{ user_home }}/.local/share/noctalia-plugins/official/clipper"
|
||||
follow: false
|
||||
register: official_clipper_path_state
|
||||
|
||||
- name: Repair official Clipper plugin permissions before git update
|
||||
ansible.builtin.file:
|
||||
path: "{{ user_home }}/.local/share/noctalia-plugins/official/clipper"
|
||||
state: directory
|
||||
recurse: true
|
||||
owner: "{{ username }}"
|
||||
group: "{{ user_group }}"
|
||||
mode: "u=rwX,go=rX"
|
||||
when:
|
||||
- official_clipper_path_state.stat.exists
|
||||
- official_clipper_path_state.stat.isdir
|
||||
|
||||
- name: Remove untracked files from official Clipper subtree before git update
|
||||
ansible.builtin.command:
|
||||
cmd: git clean -fd -- clipper
|
||||
chdir: "{{ user_home }}/.local/share/noctalia-plugins/official"
|
||||
become_user: "{{ username }}"
|
||||
environment:
|
||||
HOME: "{{ user_home }}"
|
||||
register: official_clipper_clean
|
||||
changed_when: >-
|
||||
(official_clipper_clean.stdout | default('') | trim) != '' or
|
||||
(official_clipper_clean.stderr | default('') | trim) != ''
|
||||
when:
|
||||
- official_clipper_path_state.stat.exists
|
||||
- official_clipper_path_state.stat.isdir
|
||||
|
||||
- name: Bootstrap official Noctalia plugins checkout
|
||||
ansible.builtin.git:
|
||||
repo: https://github.com/noctalia-dev/noctalia-plugins.git
|
||||
dest: "{{ user_home }}/.local/share/noctalia-plugins/official"
|
||||
version: main
|
||||
update: true
|
||||
force: true
|
||||
become_user: "{{ username }}"
|
||||
environment:
|
||||
HOME: "{{ user_home }}"
|
||||
|
||||
- name: Check if Clipper is a real directory (needs migration to symlink)
|
||||
ansible.builtin.stat:
|
||||
path: "{{ user_home }}/.config/noctalia/plugins/clipper"
|
||||
follow: false
|
||||
register: clipper_path_state
|
||||
|
||||
- name: Check whether Clipper pinned data exists
|
||||
ansible.builtin.stat:
|
||||
path: "{{ user_home }}/.config/noctalia/plugins/clipper/pinned.json"
|
||||
register: clipper_pinned_state
|
||||
when:
|
||||
- clipper_path_state.stat.exists
|
||||
- clipper_path_state.stat.isdir
|
||||
- not (clipper_path_state.stat.islnk | default(false))
|
||||
|
||||
- name: Preserve Clipper pinned data before migration
|
||||
ansible.builtin.copy:
|
||||
src: "{{ user_home }}/.config/noctalia/plugins/clipper/pinned.json"
|
||||
dest: "{{ user_home }}/.local/share/noctalia-plugins/official/clipper/pinned.json"
|
||||
remote_src: true
|
||||
owner: "{{ username }}"
|
||||
group: "{{ user_group }}"
|
||||
mode: "0644"
|
||||
become_user: "{{ username }}"
|
||||
environment:
|
||||
HOME: "{{ user_home }}"
|
||||
when:
|
||||
- clipper_pinned_state is defined and clipper_pinned_state.stat is defined and clipper_pinned_state.stat.exists
|
||||
|
||||
- name: Check whether Clipper notecards directory exists
|
||||
ansible.builtin.stat:
|
||||
path: "{{ user_home }}/.config/noctalia/plugins/clipper/notecards"
|
||||
register: clipper_notecards_state
|
||||
when:
|
||||
- clipper_path_state.stat.exists
|
||||
- clipper_path_state.stat.isdir
|
||||
- not (clipper_path_state.stat.islnk | default(false))
|
||||
|
||||
- name: Preserve Clipper notecards before migration
|
||||
ansible.builtin.copy:
|
||||
src: "{{ user_home }}/.config/noctalia/plugins/clipper/notecards/"
|
||||
dest: "{{ user_home }}/.local/share/noctalia-plugins/official/clipper/notecards/"
|
||||
remote_src: true
|
||||
owner: "{{ username }}"
|
||||
group: "{{ user_group }}"
|
||||
mode: preserve
|
||||
become_user: "{{ username }}"
|
||||
environment:
|
||||
HOME: "{{ user_home }}"
|
||||
when:
|
||||
- clipper_notecards_state is defined and clipper_notecards_state.stat is defined and clipper_notecards_state.stat.exists and clipper_notecards_state.stat.isdir
|
||||
|
||||
- name: Remove old Clipper directory (migration to symlink)
|
||||
ansible.builtin.file:
|
||||
path: "{{ user_home }}/.config/noctalia/plugins/clipper"
|
||||
state: absent
|
||||
when:
|
||||
- clipper_path_state.stat.exists
|
||||
- clipper_path_state.stat.isdir
|
||||
- not (clipper_path_state.stat.islnk | default(false))
|
||||
|
||||
- name: Create Clipper symlink to official plugin
|
||||
ansible.builtin.file:
|
||||
src: "{{ user_home }}/.local/share/noctalia-plugins/official/clipper"
|
||||
dest: "{{ user_home }}/.config/noctalia/plugins/clipper"
|
||||
state: link
|
||||
force: true
|
||||
owner: "{{ username }}"
|
||||
group: "{{ user_group }}"
|
||||
|
||||
- name: Check if usb-drive-manager is a real directory (needs migration to symlink)
|
||||
ansible.builtin.stat:
|
||||
path: "{{ user_home }}/.config/noctalia/plugins/usb-drive-manager"
|
||||
follow: false
|
||||
register: usb_drive_manager_path_state
|
||||
|
||||
- name: Remove old usb-drive-manager directory (migration to symlink)
|
||||
ansible.builtin.file:
|
||||
path: "{{ user_home }}/.config/noctalia/plugins/usb-drive-manager"
|
||||
state: absent
|
||||
when:
|
||||
- usb_drive_manager_path_state.stat.exists
|
||||
- usb_drive_manager_path_state.stat.isdir
|
||||
- not (usb_drive_manager_path_state.stat.islnk | default(false))
|
||||
|
||||
- name: Link official Noctalia plugins
|
||||
ansible.builtin.file:
|
||||
src: "{{ user_home }}/.local/share/noctalia-plugins/official/{{ item }}"
|
||||
dest: "{{ user_home }}/.config/noctalia/plugins/{{ item }}"
|
||||
state: link
|
||||
force: true
|
||||
owner: "{{ username }}"
|
||||
group: "{{ user_group }}"
|
||||
loop:
|
||||
- clipboard
|
||||
- polkit-agent
|
||||
- usb-drive-manager
|
||||
|
||||
- name: Ensure Noctalia cache directory exists
|
||||
ansible.builtin.file:
|
||||
path: "{{ user_home }}/.cache/noctalia"
|
||||
state: directory
|
||||
owner: "{{ username }}"
|
||||
group: "{{ user_group }}"
|
||||
mode: "0755"
|
||||
|
||||
- name: Deploy Noctalia wallpapers cache
|
||||
ansible.builtin.template:
|
||||
src: wallpapers.json.j2
|
||||
dest: "{{ user_home }}/.cache/noctalia/wallpapers.json"
|
||||
owner: "{{ username }}"
|
||||
group: "{{ user_group }}"
|
||||
mode: "0644"
|
||||
@@ -0,0 +1,8 @@
|
||||
[Desktop Entry]
|
||||
Name=Sway
|
||||
Comment=Sway Wayland compositor
|
||||
Exec={{ user_home }}/.local/bin/start-sway-session
|
||||
TryExec=sway
|
||||
Type=Application
|
||||
DesktopNames=sway;wlroots
|
||||
Keywords=wayland;wm;windowmanager;window;manager;tiling;compositor;
|
||||
@@ -0,0 +1,636 @@
|
||||
{
|
||||
"appLauncher": {
|
||||
"autoPasteClipboard": false,
|
||||
"clipboardWatchImageCommand": "wl-paste --type image --watch cliphist store",
|
||||
"clipboardWatchTextCommand": "wl-paste --type text --watch cliphist store",
|
||||
"clipboardWrapText": true,
|
||||
"customLaunchPrefix": "",
|
||||
"customLaunchPrefixEnabled": false,
|
||||
"density": "default",
|
||||
"enableClipPreview": true,
|
||||
"enableClipboardChips": true,
|
||||
"enableClipboardHistory": false,
|
||||
"enableClipboardSmartIcons": true,
|
||||
"enableSessionSearch": true,
|
||||
"enableSettingsSearch": true,
|
||||
"enableWindowsSearch": true,
|
||||
"iconMode": "tabler",
|
||||
"ignoreMouseInput": false,
|
||||
"overviewLayer": false,
|
||||
"pinnedApps": [],
|
||||
"position": "center",
|
||||
"screenshotAnnotationTool": "",
|
||||
"showCategories": true,
|
||||
"showIconBackground": false,
|
||||
"sortByMostUsed": true,
|
||||
"terminalCommand": "alacritty -e",
|
||||
"viewMode": "list"
|
||||
},
|
||||
"audio": {
|
||||
"mprisBlacklist": [],
|
||||
"preferredPlayer": "",
|
||||
"spectrumFrameRate": 30,
|
||||
"spectrumMirrored": true,
|
||||
"visualizerType": "linear",
|
||||
"volumeFeedback": false,
|
||||
"volumeFeedbackSoundFile": "",
|
||||
"volumeOverdrive": false,
|
||||
"volumeStep": 5
|
||||
},
|
||||
"bar": {
|
||||
"autoHideDelay": 500,
|
||||
"autoShowDelay": 150,
|
||||
"backgroundOpacity": 0.93,
|
||||
"barType": "simple",
|
||||
"capsuleColorKey": "none",
|
||||
"capsuleOpacity": 1,
|
||||
"contentPadding": 2,
|
||||
"density": "default",
|
||||
"displayMode": "always_visible",
|
||||
"enableExclusionZoneInset": true,
|
||||
"fontScale": 1,
|
||||
"frameRadius": 12,
|
||||
"frameThickness": 8,
|
||||
"hideOnOverview": false,
|
||||
"marginHorizontal": 4,
|
||||
"marginVertical": 4,
|
||||
"middleClickAction": "none",
|
||||
"middleClickCommand": "",
|
||||
"middleClickFollowMouse": false,
|
||||
"monitors": [
|
||||
{% for monitor in noctalia_bar_monitors | default(['DP-1']) %}
|
||||
"{{ monitor }}"{% if not loop.last %},{% endif %}
|
||||
{% endfor %}
|
||||
],
|
||||
"mouseWheelAction": "none",
|
||||
"mouseWheelWrap": true,
|
||||
"outerCorners": true,
|
||||
"position": "top",
|
||||
"reverseScroll": false,
|
||||
"rightClickAction": "controlCenter",
|
||||
"rightClickCommand": "",
|
||||
"rightClickFollowMouse": true,
|
||||
"screenOverrides": [
|
||||
{% for override in noctalia_screen_overrides | default([]) %}
|
||||
{
|
||||
"enabled": {{ override.enabled | lower }},
|
||||
"name": "{{ override.name }}"
|
||||
}{% if not loop.last %},{% endif %}
|
||||
{% endfor %}
|
||||
],
|
||||
"showCapsule": true,
|
||||
"showOnWorkspaceSwitch": true,
|
||||
"showOutline": false,
|
||||
"useSeparateOpacity": false,
|
||||
"widgetSpacing": 6,
|
||||
"widgets": {
|
||||
"center": [
|
||||
{
|
||||
"clockColor": "none",
|
||||
"customFont": "",
|
||||
"formatHorizontal": "HH:mm ddd, MMM dd",
|
||||
"formatVertical": "HH mm - dd MM",
|
||||
"id": "Clock",
|
||||
"tooltipFormat": "HH:mm ddd, MMM dd",
|
||||
"useCustomFont": false
|
||||
},
|
||||
{
|
||||
"compactMode": false,
|
||||
"hideMode": "hidden",
|
||||
"hideWhenIdle": false,
|
||||
"id": "MediaMini",
|
||||
"maxWidth": 145,
|
||||
"panelShowAlbumArt": true,
|
||||
"scrollingMode": "hover",
|
||||
"showAlbumArt": true,
|
||||
"showArtistFirst": true,
|
||||
"showProgressRing": true,
|
||||
"showVisualizer": false,
|
||||
"textColor": "none",
|
||||
"useFixedWidth": false,
|
||||
"visualizerType": "linear"
|
||||
}
|
||||
],
|
||||
"left": [
|
||||
{
|
||||
"characterCount": 2,
|
||||
"colorizeIcons": false,
|
||||
"emptyColor": "secondary",
|
||||
"enableScrollWheel": true,
|
||||
"focusedColor": "primary",
|
||||
"followFocusedScreen": false,
|
||||
"fontWeight": "bold",
|
||||
"groupedBorderOpacity": 1,
|
||||
"hideUnoccupied": false,
|
||||
"iconScale": 0.8,
|
||||
"id": "Workspace",
|
||||
"labelMode": "index",
|
||||
"occupiedColor": "secondary",
|
||||
"pillSize": 0.6,
|
||||
"showApplications": false,
|
||||
"showApplicationsHover": false,
|
||||
"showBadge": true,
|
||||
"showLabelsOnlyWhenOccupied": true,
|
||||
"unfocusedIconsOpacity": 1
|
||||
}
|
||||
],
|
||||
"right": [
|
||||
{
|
||||
"blacklist": [],
|
||||
"chevronColor": "none",
|
||||
"colorizeIcons": false,
|
||||
"drawerEnabled": true,
|
||||
"hidePassive": false,
|
||||
"id": "Tray",
|
||||
"pinned": []
|
||||
},
|
||||
{
|
||||
"compactMode": true,
|
||||
"diskPath": "/",
|
||||
"iconColor": "none",
|
||||
"id": "SystemMonitor",
|
||||
"showCpuCores": false,
|
||||
"showCpuFreq": false,
|
||||
"showCpuTemp": true,
|
||||
"showCpuUsage": true,
|
||||
"showDiskAvailable": false,
|
||||
"showDiskUsage": false,
|
||||
"showDiskUsageAsPercent": false,
|
||||
"showGpuTemp": false,
|
||||
"showLoadAverage": false,
|
||||
"showMemoryAsPercent": false,
|
||||
"showMemoryUsage": true,
|
||||
"showNetworkStats": false,
|
||||
"showSwapUsage": false,
|
||||
"textColor": "none",
|
||||
"useMonospaceFont": true,
|
||||
"usePadding": false
|
||||
},
|
||||
{
|
||||
"defaultSettings": {
|
||||
"autoMount": false,
|
||||
"fileBrowser": "yazi",
|
||||
"hideWhenEmpty": false,
|
||||
"iconColor": "none",
|
||||
"showBadge": false,
|
||||
"showNotifications": true,
|
||||
"terminalCommand": "kitty"
|
||||
},
|
||||
"id": "plugin:usb-drive-manager"
|
||||
},
|
||||
{
|
||||
"defaultSettings": {
|
||||
"autoPaste": false,
|
||||
"autoPasteDelay": 300,
|
||||
"autoPasteOnRightClick": false,
|
||||
"cardColors": {},
|
||||
"customColors": {},
|
||||
"enableTodoIntegration": false,
|
||||
"fullscreenMode": false,
|
||||
"hidePanelBackground": false,
|
||||
"notecardsEnabled": true,
|
||||
"panelHeight": 0,
|
||||
"panelWidth": 1450,
|
||||
"pincardsEnabled": true,
|
||||
"showCloseButton": true
|
||||
},
|
||||
"id": "plugin:clipper"
|
||||
},
|
||||
{
|
||||
"displayMode": "onhover",
|
||||
"iconColor": "none",
|
||||
"id": "Volume",
|
||||
"middleClickCommand": "pwvucontrol || pavucontrol",
|
||||
"textColor": "none"
|
||||
},
|
||||
{
|
||||
"displayMode": "onhover",
|
||||
"iconColor": "none",
|
||||
"id": "Network",
|
||||
"textColor": "none"
|
||||
},
|
||||
{
|
||||
"displayMode": "onhover",
|
||||
"iconColor": "none",
|
||||
"id": "Bluetooth",
|
||||
"textColor": "none"
|
||||
},
|
||||
{
|
||||
"applyToAllMonitors": false,
|
||||
"displayMode": "onhover",
|
||||
"iconColor": "none",
|
||||
"id": "Brightness",
|
||||
"textColor": "none"
|
||||
},
|
||||
{
|
||||
"deviceNativePath": "__default__",
|
||||
"displayMode": "graphic-clean",
|
||||
"hideIfIdle": false,
|
||||
"hideIfNotDetected": true,
|
||||
"id": "Battery",
|
||||
"showNoctaliaPerformance": false,
|
||||
"showPowerProfiles": false
|
||||
},
|
||||
{
|
||||
"colorizeDistroLogo": false,
|
||||
"colorizeSystemIcon": "secondary",
|
||||
"colorizeSystemText": "none",
|
||||
"customIconPath": "",
|
||||
"enableColorization": true,
|
||||
"icon": "settings",
|
||||
"id": "ControlCenter",
|
||||
"useDistroLogo": false
|
||||
},
|
||||
{
|
||||
"hideWhenZero": false,
|
||||
"hideWhenZeroUnread": false,
|
||||
"iconColor": "none",
|
||||
"id": "NotificationHistory",
|
||||
"showUnreadBadge": true,
|
||||
"unreadBadgeColor": "tertiary"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"brightness": {
|
||||
"backlightDeviceMappings": [],
|
||||
"brightnessStep": 5,
|
||||
"enableDdcSupport": false,
|
||||
"enforceMinimum": true
|
||||
},
|
||||
"calendar": {
|
||||
"cards": [
|
||||
{
|
||||
"enabled": true,
|
||||
"id": "calendar-header-card"
|
||||
},
|
||||
{
|
||||
"enabled": true,
|
||||
"id": "calendar-month-card"
|
||||
},
|
||||
{
|
||||
"enabled": true,
|
||||
"id": "weather-card"
|
||||
}
|
||||
]
|
||||
},
|
||||
"colorSchemes": {
|
||||
"darkMode": true,
|
||||
"generationMethod": "tonal-spot",
|
||||
"manualSunrise": "06:30",
|
||||
"manualSunset": "18:30",
|
||||
"monitorForColors": "",
|
||||
"predefinedScheme": "Ayu",
|
||||
"schedulingMode": "off",
|
||||
"syncGsettings": true,
|
||||
"useWallpaperColors": false
|
||||
},
|
||||
"controlCenter": {
|
||||
"cards": [
|
||||
{
|
||||
"enabled": true,
|
||||
"id": "profile-card"
|
||||
},
|
||||
{
|
||||
"enabled": true,
|
||||
"id": "shortcuts-card"
|
||||
},
|
||||
{
|
||||
"enabled": true,
|
||||
"id": "audio-card"
|
||||
},
|
||||
{
|
||||
"enabled": true,
|
||||
"id": "brightness-card"
|
||||
},
|
||||
{
|
||||
"enabled": true,
|
||||
"id": "weather-card"
|
||||
},
|
||||
{
|
||||
"enabled": true,
|
||||
"id": "media-sysmon-card"
|
||||
}
|
||||
],
|
||||
"diskPath": "/",
|
||||
"position": "close_to_bar_button",
|
||||
"shortcuts": {
|
||||
"left": [
|
||||
{"id": "Network"},
|
||||
{"id": "Bluetooth"},
|
||||
{"id": "WallpaperSelector"},
|
||||
{"id": "NoctaliaPerformance"}
|
||||
],
|
||||
"right": [
|
||||
{"id": "Notifications"},
|
||||
{"id": "PowerProfile"},
|
||||
{"id": "KeepAwake"},
|
||||
{"id": "NightLight"}
|
||||
]
|
||||
}
|
||||
},
|
||||
"desktopWidgets": {
|
||||
"enabled": false,
|
||||
"gridSnap": false,
|
||||
"gridSnapScale": false,
|
||||
"monitorWidgets": [],
|
||||
"overviewEnabled": true
|
||||
},
|
||||
"dock": {
|
||||
"animationSpeed": 1,
|
||||
"backgroundOpacity": 1,
|
||||
"colorizeIcons": false,
|
||||
"deadOpacity": 0.6,
|
||||
"displayMode": "auto_hide",
|
||||
"dockType": "floating",
|
||||
"enabled": false,
|
||||
"floatingRatio": 1,
|
||||
"groupApps": false,
|
||||
"groupClickAction": "cycle",
|
||||
"groupContextMenuMode": "extended",
|
||||
"groupIndicatorStyle": "dots",
|
||||
"inactiveIndicators": false,
|
||||
"indicatorColor": "primary",
|
||||
"indicatorOpacity": 0.6,
|
||||
"indicatorThickness": 3,
|
||||
"launcherIcon": "",
|
||||
"launcherIconColor": "none",
|
||||
"launcherPosition": "end",
|
||||
"launcherUseDistroLogo": false,
|
||||
"monitors": [],
|
||||
"onlySameOutput": true,
|
||||
"pinnedApps": [],
|
||||
"pinnedStatic": false,
|
||||
"position": "bottom",
|
||||
"showDockIndicator": false,
|
||||
"showLauncherIcon": false,
|
||||
"sitOnFrame": false,
|
||||
"size": 1
|
||||
},
|
||||
"general": {
|
||||
"allowPanelsOnScreenWithoutBar": true,
|
||||
"allowPasswordWithFprintd": false,
|
||||
"animationDisabled": false,
|
||||
"animationSpeed": 1,
|
||||
"autoStartAuth": false,
|
||||
"avatarImage": "{{ user_home }}/.face",
|
||||
"boxRadiusRatio": 1,
|
||||
"clockFormat": "hh\\nmm",
|
||||
"clockStyle": "custom",
|
||||
"compactLockScreen": false,
|
||||
"dimmerOpacity": 0.2,
|
||||
"enableBlurBehind": true,
|
||||
"enableLockScreenCountdown": true,
|
||||
"enableLockScreenMediaControls": false,
|
||||
"enableShadows": true,
|
||||
"forceBlackScreenCorners": false,
|
||||
"iRadiusRatio": 1,
|
||||
"keybinds": {
|
||||
"keyDown": ["Down"],
|
||||
"keyEnter": ["Return", "Enter"],
|
||||
"keyEscape": ["Esc"],
|
||||
"keyLeft": ["Left"],
|
||||
"keyRemove": ["Del"],
|
||||
"keyRight": ["Right"],
|
||||
"keyUp": ["Up"]
|
||||
},
|
||||
"language": "",
|
||||
"lockOnSuspend": true,
|
||||
"lockScreenAnimations": false,
|
||||
"lockScreenBlur": 0,
|
||||
"lockScreenCountdownDuration": 10000,
|
||||
"lockScreenMonitors": [],
|
||||
"lockScreenTint": 0,
|
||||
"passwordChars": false,
|
||||
"radiusRatio": 1,
|
||||
"reverseScroll": false,
|
||||
"scaleRatio": 1,
|
||||
"screenRadiusRatio": 1,
|
||||
"shadowDirection": "bottom_right",
|
||||
"shadowOffsetX": 2,
|
||||
"shadowOffsetY": 3,
|
||||
"showChangelogOnStartup": true,
|
||||
"showHibernateOnLockScreen": false,
|
||||
"showScreenCorners": false,
|
||||
"showSessionButtonsOnLockScreen": true,
|
||||
"smoothScrollEnabled": true,
|
||||
"telemetryEnabled": false
|
||||
},
|
||||
"hooks": {
|
||||
"colorGeneration": "",
|
||||
"darkModeChange": "",
|
||||
"enabled": false,
|
||||
"performanceModeDisabled": "",
|
||||
"performanceModeEnabled": "",
|
||||
"screenLock": "",
|
||||
"screenUnlock": "",
|
||||
"session": "",
|
||||
"startup": "",
|
||||
"wallpaperChange": ""
|
||||
},
|
||||
"idle": {
|
||||
"customCommands": "[]",
|
||||
"enabled": true,
|
||||
"fadeDuration": 5,
|
||||
"lockCommand": "",
|
||||
"lockTimeout": 660,
|
||||
"resumeLockCommand": "",
|
||||
"resumeScreenOffCommand": "",
|
||||
"resumeSuspendCommand": "",
|
||||
"screenOffCommand": "",
|
||||
"screenOffTimeout": 600,
|
||||
"suspendCommand": "",
|
||||
"suspendTimeout": 1800
|
||||
},
|
||||
"location": {
|
||||
"analogClockInCalendar": false,
|
||||
"autoLocate": false,
|
||||
"firstDayOfWeek": -1,
|
||||
"hideWeatherCityName": false,
|
||||
"hideWeatherTimezone": false,
|
||||
"name": "",
|
||||
"showCalendarEvents": true,
|
||||
"showCalendarWeather": true,
|
||||
"showWeekNumberInCalendar": false,
|
||||
"use12hourFormat": false,
|
||||
"useFahrenheit": false,
|
||||
"weatherEnabled": true,
|
||||
"weatherShowEffects": true,
|
||||
"weatherTaliaMascotAlways": false
|
||||
},
|
||||
"network": {
|
||||
"bluetoothAutoConnect": true,
|
||||
"bluetoothDetailsViewMode": "grid",
|
||||
"bluetoothHideUnnamedDevices": false,
|
||||
"bluetoothRssiPollIntervalMs": 60000,
|
||||
"bluetoothRssiPollingEnabled": false,
|
||||
"disableDiscoverability": false,
|
||||
"networkPanelView": "wifi",
|
||||
"wifiDetailsViewMode": "grid"
|
||||
},
|
||||
"nightLight": {
|
||||
"autoSchedule": true,
|
||||
"dayTemp": "6500",
|
||||
"enabled": false,
|
||||
"forced": false,
|
||||
"manualSunrise": "06:30",
|
||||
"manualSunset": "18:30",
|
||||
"nightTemp": "4000"
|
||||
},
|
||||
"noctaliaPerformance": {
|
||||
"disableDesktopWidgets": true,
|
||||
"disableWallpaper": true
|
||||
},
|
||||
"notifications": {
|
||||
"backgroundOpacity": 1,
|
||||
"clearDismissed": true,
|
||||
"criticalUrgencyDuration": 15,
|
||||
"density": "default",
|
||||
"enableBatteryToast": true,
|
||||
"enableKeyboardLayoutToast": true,
|
||||
"enableMarkdown": false,
|
||||
"enableMediaToast": false,
|
||||
"enabled": true,
|
||||
"location": "top_right",
|
||||
"lowUrgencyDuration": 3,
|
||||
"monitors": [],
|
||||
"normalUrgencyDuration": 8,
|
||||
"overlayLayer": true,
|
||||
"respectExpireTimeout": false,
|
||||
"saveToHistory": {
|
||||
"critical": true,
|
||||
"low": true,
|
||||
"normal": true
|
||||
},
|
||||
"sounds": {
|
||||
"criticalSoundFile": "",
|
||||
"enabled": false,
|
||||
"excludedApps": "discord,firefox,chrome,chromium,edge",
|
||||
"lowSoundFile": "",
|
||||
"normalSoundFile": "",
|
||||
"separateSounds": false,
|
||||
"volume": 0.5
|
||||
}
|
||||
},
|
||||
"osd": {
|
||||
"autoHideMs": 2000,
|
||||
"backgroundOpacity": 1,
|
||||
"enabled": true,
|
||||
"enabledTypes": [0, 1, 2],
|
||||
"location": "top_right",
|
||||
"monitors": [],
|
||||
"overlayLayer": true
|
||||
},
|
||||
"plugins": {
|
||||
"autoUpdate": false,
|
||||
"notifyUpdates": true
|
||||
},
|
||||
"sessionMenu": {
|
||||
"countdownDuration": 10000,
|
||||
"enableCountdown": true,
|
||||
"largeButtonsLayout": "single-row",
|
||||
"largeButtonsStyle": true,
|
||||
"position": "center",
|
||||
"powerOptions": [
|
||||
{"action": "lock", "command": "", "countdownEnabled": true, "enabled": true, "keybind": "1"},
|
||||
{"action": "suspend", "command": "", "countdownEnabled": true, "enabled": true, "keybind": "2"},
|
||||
{"action": "hibernate", "command": "", "countdownEnabled": true, "enabled": true, "keybind": "3"},
|
||||
{"action": "reboot", "command": "", "countdownEnabled": true, "enabled": true, "keybind": "4"},
|
||||
{"action": "logout", "command": "", "countdownEnabled": true, "enabled": true, "keybind": "5"},
|
||||
{"action": "shutdown", "command": "", "countdownEnabled": true, "enabled": true, "keybind": "6"},
|
||||
{"action": "rebootToUefi", "command": "", "countdownEnabled": true, "enabled": true, "keybind": "7"},
|
||||
{"action": "userspaceReboot", "command": "", "countdownEnabled": true, "enabled": false, "keybind": ""}
|
||||
],
|
||||
"showHeader": true,
|
||||
"showKeybinds": true
|
||||
},
|
||||
"settingsVersion": 59,
|
||||
"systemMonitor": {
|
||||
"batteryCriticalThreshold": 5,
|
||||
"batteryWarningThreshold": 20,
|
||||
"cpuCriticalThreshold": 90,
|
||||
"cpuWarningThreshold": 80,
|
||||
"criticalColor": "",
|
||||
"diskAvailCriticalThreshold": 10,
|
||||
"diskAvailWarningThreshold": 20,
|
||||
"diskCriticalThreshold": 90,
|
||||
"diskWarningThreshold": 80,
|
||||
"enableDgpuMonitoring": true,
|
||||
"externalMonitor": "resources || missioncenter || jdsystemmonitor || corestats || system-monitoring-center || gnome-system-monitor || plasma-systemmonitor || mate-system-monitor || ukui-system-monitor || deepin-system-monitor || pantheon-system-monitor",
|
||||
"gpuCriticalThreshold": 90,
|
||||
"gpuWarningThreshold": 80,
|
||||
"memCriticalThreshold": 90,
|
||||
"memWarningThreshold": 80,
|
||||
"swapCriticalThreshold": 90,
|
||||
"swapWarningThreshold": 80,
|
||||
"tempCriticalThreshold": 90,
|
||||
"tempWarningThreshold": 80,
|
||||
"useCustomColors": false,
|
||||
"warningColor": ""
|
||||
},
|
||||
"templates": {
|
||||
"activeTemplates": [
|
||||
{"enabled": true, "id": "alacritty"},
|
||||
{"enabled": true, "id": "gtk"},
|
||||
{"enabled": true, "id": "emacs"},
|
||||
{"enabled": true, "id": "telegram"},
|
||||
{"enabled": true, "id": "qt"},
|
||||
{"enabled": true, "id": "sway"}
|
||||
],
|
||||
"enableUserTheming": false
|
||||
},
|
||||
"ui": {
|
||||
"boxBorderEnabled": false,
|
||||
"fontDefault": "{{ desktop_ui_font_family | default('Noto Sans') }}",
|
||||
"fontDefaultScale": 1,
|
||||
"fontFixed": "{{ desktop_fixed_font_family | default('Hack Nerd Font') }}",
|
||||
"fontFixedScale": 1,
|
||||
"panelBackgroundOpacity": 0.93,
|
||||
"panelsAttachedToBar": true,
|
||||
"scrollbarAlwaysVisible": true,
|
||||
"settingsPanelMode": "centered",
|
||||
"settingsPanelSideBarCardStyle": false,
|
||||
"tooltipsEnabled": true,
|
||||
"translucentWidgets": false
|
||||
},
|
||||
"wallpaper": {
|
||||
"automationEnabled": false,
|
||||
"directory": "{{ user_home }}/Pictures/Wallpapers",
|
||||
"enableMultiMonitorDirectories": false,
|
||||
"enabled": true,
|
||||
"favorites": [],
|
||||
"fillColor": "#000000",
|
||||
"fillMode": "crop",
|
||||
"hideWallpaperFilenames": false,
|
||||
"linkLightAndDarkWallpapers": true,
|
||||
"monitorDirectories": [],
|
||||
"overviewBlur": 0.4,
|
||||
"overviewEnabled": false,
|
||||
"overviewTint": 0.6,
|
||||
"panelPosition": "follow_bar",
|
||||
"randomIntervalSec": 300,
|
||||
"setWallpaperOnAllMonitors": true,
|
||||
"showHiddenFiles": false,
|
||||
"skipStartupTransition": false,
|
||||
"solidColor": "#1a1a2e",
|
||||
"sortOrder": "name",
|
||||
"transitionDuration": 1500,
|
||||
"transitionEdgeSmoothness": 0.05,
|
||||
"transitionType": ["fade", "disc", "stripes", "wipe", "pixelate", "honeycomb"],
|
||||
"useOriginalImages": false,
|
||||
"useSolidColor": false,
|
||||
"useWallhaven": false,
|
||||
"viewMode": "single",
|
||||
"wallhavenApiKey": "",
|
||||
"wallhavenCategories": "111",
|
||||
"wallhavenOrder": "desc",
|
||||
"wallhavenPurity": "100",
|
||||
"wallhavenQuery": "",
|
||||
"wallhavenRatios": "",
|
||||
"wallhavenResolutionHeight": "",
|
||||
"wallhavenResolutionMode": "atleast",
|
||||
"wallhavenResolutionWidth": "",
|
||||
"wallhavenSorting": "relevance",
|
||||
"wallpaperChangeMode": "random"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
[Appearance]
|
||||
color_scheme_path={{ user_home }}/.config/qt5ct/colors/noctalia.conf
|
||||
custom_palette=true
|
||||
icon_theme={{ desktop_icon_theme | default('Yaru-orange-dark') }}
|
||||
standard_dialogs=default
|
||||
style=Fusion
|
||||
@@ -0,0 +1,6 @@
|
||||
[Appearance]
|
||||
color_scheme_path={{ user_home }}/.config/qt6ct/colors/noctalia.conf
|
||||
custom_palette=true
|
||||
icon_theme={{ desktop_icon_theme | default('Yaru-orange-dark') }}
|
||||
standard_dialogs=default
|
||||
style=Fusion
|
||||
32
ansible/roles/profile_desktop_sway/templates/shell.conf.j2
Normal file
32
ansible/roles/profile_desktop_sway/templates/shell.conf.j2
Normal file
@@ -0,0 +1,32 @@
|
||||
set $menu qs -c noctalia-shell ipc call launcher toggle
|
||||
set $audio_panel qs -c noctalia-shell ipc call volume openPanel
|
||||
set $locker qs -c noctalia-shell ipc call lockScreen lock
|
||||
set $powermenu qs -c noctalia-shell ipc call sessionMenu toggle
|
||||
set $screenshot_full sh -c 'QT_QPA_PLATFORM=wayland flameshot full --clipboard'
|
||||
set $screenshot_region sh -c 'QT_QPA_PLATFORM=wayland flameshot gui'
|
||||
set $screenshot_window sh -c 'QT_QPA_PLATFORM=wayland flameshot gui'
|
||||
set $audio_raise qs -c noctalia-shell ipc call volume increase
|
||||
set $audio_lower qs -c noctalia-shell ipc call volume decrease
|
||||
set $audio_mute qs -c noctalia-shell ipc call volume muteOutput
|
||||
set $audio_mic_mute qs -c noctalia-shell ipc call volume muteInput
|
||||
set $brightness_up qs -c noctalia-shell ipc call brightness increase
|
||||
set $brightness_down qs -c noctalia-shell ipc call brightness decrease
|
||||
|
||||
exec dbus-update-activation-environment --systemd WAYLAND_DISPLAY DISPLAY SWAYSOCK XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE XCURSOR_THEME XCURSOR_SIZE
|
||||
exec systemctl --user import-environment WAYLAND_DISPLAY DISPLAY SWAYSOCK XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE XCURSOR_THEME XCURSOR_SIZE
|
||||
exec ~/.local/bin/update-turnstile-env
|
||||
exec dex --autostart --environment sway
|
||||
exec gnome-keyring-daemon --start --components=secrets
|
||||
exec ~/.local/bin/setup-gtk-theme
|
||||
exec pipewire
|
||||
exec pipewire-pulse
|
||||
exec wireplumber
|
||||
exec kanshi
|
||||
exec flameshot
|
||||
exec udiskie --no-tray
|
||||
exec wl-paste --watch cliphist store
|
||||
exec qs -c noctalia-shell
|
||||
|
||||
bindsym $mod+c exec qs -c noctalia-shell ipc call launcher clipboard
|
||||
bindsym $mod+Ctrl+v exec qs -c noctalia-shell ipc call plugin:clipboard toggle
|
||||
bindsym $mod+Ctrl+Shift+v exec qs -c noctalia-shell ipc call plugin:clipboard wipe
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"defaultWallpaper": "/etc/xdg/quickshell/noctalia-shell/Assets/Wallpaper/noctalia.png",
|
||||
"usedRandomWallpapers": {},
|
||||
"wallpapers": {
|
||||
"": {
|
||||
"dark": "{{ noctalia_wallpaper }}",
|
||||
"light": "{{ noctalia_wallpaper }}"
|
||||
},
|
||||
"DP-1": {
|
||||
"dark": "{{ noctalia_wallpaper }}",
|
||||
"light": "{{ noctalia_wallpaper }}"
|
||||
},
|
||||
"eDP-1": {
|
||||
"dark": "{{ noctalia_wallpaper }}",
|
||||
"light": "{{ noctalia_wallpaper }}"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -36,7 +36,7 @@
|
||||
label: "{{ item.dest }}"
|
||||
|
||||
- name: Install workstation npm packages
|
||||
tags: [packages, npm]
|
||||
tags: [packages]
|
||||
community.general.npm:
|
||||
name: "{{ item.name }}"
|
||||
global: true
|
||||
|
||||
@@ -74,20 +74,6 @@
|
||||
changed_when: true
|
||||
when: item.stdout | trim != item.item.value
|
||||
|
||||
- name: Apply workstation GNOME extension dconf settings
|
||||
tags: [gnome]
|
||||
ansible.builtin.command:
|
||||
argv:
|
||||
- dconf
|
||||
- write
|
||||
- "{{ item.path }}{{ item.key }}"
|
||||
- "{{ item.value }}"
|
||||
become_user: "{{ username }}"
|
||||
loop: "{{ workstation_gnome_extension_dconf_settings | default([]) }}"
|
||||
loop_control:
|
||||
label: "{{ item.path }}{{ item.key }}"
|
||||
changed_when: true
|
||||
|
||||
- name: Check whether VS Code CLI is available on workstation host
|
||||
tags: [packages, vscode]
|
||||
ansible.builtin.command:
|
||||
|
||||
@@ -18,4 +18,3 @@
|
||||
loop: "{{ host_enabled_services | default([]) }}"
|
||||
loop_control:
|
||||
label: "{{ item }}"
|
||||
|
||||
|
||||
@@ -36,25 +36,6 @@ services:
|
||||
- web
|
||||
- gitea
|
||||
|
||||
# Disabled: prometheus does not have enough resources to run Nextcloud AIO.
|
||||
# nextcloud-aio-mastercontainer:
|
||||
# image: ghcr.io/nextcloud-releases/all-in-one:latest
|
||||
# container_name: nextcloud-aio-mastercontainer
|
||||
# init: true
|
||||
# restart: always
|
||||
# ports:
|
||||
# - "127.0.0.1:8080:8080"
|
||||
# environment:
|
||||
# APACHE_PORT: "11000"
|
||||
# APACHE_IP_BINDING: "0.0.0.0"
|
||||
# APACHE_ADDITIONAL_NETWORK: "server_web"
|
||||
# NEXTCLOUD_DATADIR: "/srv/nextcloud/data"
|
||||
# volumes:
|
||||
# - "nextcloud_aio_mastercontainer:/mnt/docker-aio-config"
|
||||
# - "/var/run/docker.sock:/var/run/docker.sock:ro"
|
||||
# networks:
|
||||
# - web
|
||||
|
||||
navidromedb:
|
||||
image: postgres:13
|
||||
container_name: navidromedb
|
||||
@@ -106,11 +87,6 @@ services:
|
||||
|
||||
networks:
|
||||
web:
|
||||
name: server_web
|
||||
external: false
|
||||
gitea:
|
||||
external: false
|
||||
|
||||
# volumes:
|
||||
# nextcloud_aio_mastercontainer:
|
||||
# name: nextcloud_aio_mastercontainer
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
# Claude Code Global Context
|
||||
|
||||
Import the shared coding agent bootstrap context:
|
||||
|
||||
@~/.config/ai/bootstrap.md
|
||||
@@ -1,16 +0,0 @@
|
||||
model = "gpt-5.5"
|
||||
model_reasoning_effort = "medium"
|
||||
|
||||
model_instructions_file = "{{ effective_user_home }}/.config/ai/bootstrap.md"
|
||||
|
||||
[projects."/home/fscotto/AnsiblePlaybook"]
|
||||
trust_level = "trusted"
|
||||
|
||||
[tui]
|
||||
theme = "coldark-dark"
|
||||
|
||||
[tui.model_availability_nux]
|
||||
"gpt-5.5" = 3
|
||||
|
||||
[features]
|
||||
memories = true
|
||||
@@ -1,7 +0,0 @@
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": [
|
||||
"~/.config/ai/bootstrap.md",
|
||||
"~/.config/ai/rules/safety.md"
|
||||
]
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
{
|
||||
"security": {
|
||||
"auth": {
|
||||
"selectedType": "oauth-personal"
|
||||
}
|
||||
},
|
||||
"context": {
|
||||
"fileName": [
|
||||
"~/.config/ai/bootstrap.md",
|
||||
"~/.config/ai/rules/safety.md",
|
||||
"~/.config/ai/AGENTS.md"
|
||||
]
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
@@ -1,39 +0,0 @@
|
||||
# Validate DBUS_SESSION_BUS_ADDRESS: a stale value (e.g. inherited from a
|
||||
# dead X session) makes secret-tool, mbsync, msmtp fail with
|
||||
# "Could not connect: No such file or directory".
|
||||
# Fall back to ~/.dbus-session-bus-address (written by .xinitrc) or
|
||||
# /run/user/$UID/bus, mirroring scripts/bootstrap_mail.sh.
|
||||
|
||||
_dbus_addr_socket_path() {
|
||||
printf '%s' "${1#unix:path=}" | sed 's/,.*//'
|
||||
}
|
||||
|
||||
_dbus_addr_is_live() {
|
||||
case "$1" in
|
||||
unix:path=*)
|
||||
[ -S "$(_dbus_addr_socket_path "$1")" ]
|
||||
;;
|
||||
unix:abstract=*)
|
||||
return 0
|
||||
;;
|
||||
*)
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
if ! _dbus_addr_is_live "${DBUS_SESSION_BUS_ADDRESS:-}"; then
|
||||
unset DBUS_SESSION_BUS_ADDRESS
|
||||
if [ -f "$HOME/.dbus-session-bus-address" ]; then
|
||||
_saved=$(tr -d '\n' <"$HOME/.dbus-session-bus-address" 2>/dev/null)
|
||||
if [ -n "$_saved" ] && _dbus_addr_is_live "$_saved"; then
|
||||
export DBUS_SESSION_BUS_ADDRESS="$_saved"
|
||||
fi
|
||||
unset _saved
|
||||
fi
|
||||
if [ -z "${DBUS_SESSION_BUS_ADDRESS:-}" ] && [ -S "/run/user/$(id -u)/bus" ]; then
|
||||
export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$(id -u)/bus"
|
||||
fi
|
||||
fi
|
||||
|
||||
unset -f _dbus_addr_socket_path _dbus_addr_is_live
|
||||
@@ -1 +1,2 @@
|
||||
export SVDIR="$HOME/.config/service"
|
||||
export SSH_AUTH_SOCK="$HOME/.local/state/ssh-agent/socket"
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
export SSH_AUTH_SOCK="$HOME/.local/state/ssh-agent/socket"
|
||||
@@ -1,14 +1,14 @@
|
||||
if command -v emacsclient >/dev/null 2>&1; then
|
||||
ec() {
|
||||
emacsclient -c -n "$@" || {
|
||||
printf '%s\n' "Emacs server is not available. Log into a graphical session and ensure the user 'emacs' service is running." >&2
|
||||
printf '%s\n' "Emacs server is not available. Log into a graphical session and ensure the turnstile-managed 'emacs' service is running." >&2
|
||||
return 1
|
||||
}
|
||||
}
|
||||
|
||||
et() {
|
||||
emacsclient -t "$@" || {
|
||||
printf '%s\n' "Emacs server is not available. Ensure the user 'emacs' service is running in your graphical session." >&2
|
||||
printf '%s\n' "Emacs server is not available. Ensure the turnstile-managed 'emacs' service is running in your graphical session." >&2
|
||||
return 1
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ ap() {
|
||||
cmd+=(--tag "$1")
|
||||
fi
|
||||
|
||||
printf '\033[0;36m+ %s\033[0m\n' "${cmd[*]}"
|
||||
printf '+ %s\n' "${cmd[*]}"
|
||||
"${cmd[@]}"
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
[general]
|
||||
import = ["~/.config/alacritty/themes/noctalia.toml"]
|
||||
|
||||
[window]
|
||||
padding = { x = 8, y = 8 }
|
||||
opacity = 0.90
|
||||
opacity = 1.0
|
||||
|
||||
[font]
|
||||
normal = { family = "Hack Nerd Font", style = "Regular" }
|
||||
@@ -13,33 +16,8 @@ multiplier = 3
|
||||
[cursor]
|
||||
style = { shape = "Beam", blinking = "Off" }
|
||||
|
||||
[colors.primary]
|
||||
background = "#000000"
|
||||
foreground = "#c8c8c8"
|
||||
|
||||
[colors.normal]
|
||||
black = "#1f1f28"
|
||||
red = "#c7162b"
|
||||
green = "#4caf50"
|
||||
yellow = "#e95420"
|
||||
blue = "#4a90d9"
|
||||
magenta = "#7e57c2"
|
||||
cyan = "#6daeea"
|
||||
white = "#eeeeee"
|
||||
|
||||
[colors.bright]
|
||||
black = "#3a3a46"
|
||||
red = "#ff5c5c"
|
||||
green = "#7ad97a"
|
||||
yellow = "#ff8f40"
|
||||
blue = "#6daeea"
|
||||
magenta = "#9575cd"
|
||||
cyan = "#8bd6ff"
|
||||
white = "#ffffff"
|
||||
|
||||
[keyboard]
|
||||
bindings = [
|
||||
{ key = "V", mods = "Control|Shift", action = "Paste" },
|
||||
{ key = "C", mods = "Control|Shift", action = "Copy" },
|
||||
{ key = "Return", mods = "Shift", chars = "\u001B\r" }
|
||||
{ key = "C", mods = "Control|Shift", action = "Copy" }
|
||||
]
|
||||
|
||||
@@ -4,11 +4,11 @@ follow = mouse
|
||||
gap_size = 10
|
||||
|
||||
width = 360
|
||||
height = (0, 120)
|
||||
height = 120
|
||||
origin = top-right
|
||||
offset = (20, 40)
|
||||
offset = 20x40
|
||||
|
||||
font = LiterationMono Nerd Font 10
|
||||
font = Liberation Sans 10
|
||||
line_height = 2
|
||||
|
||||
padding = 12
|
||||
@@ -19,7 +19,7 @@ separator_height = 2
|
||||
frame_width = 2
|
||||
corner_radius = 8
|
||||
|
||||
transparency = 15
|
||||
transparency = 0
|
||||
|
||||
background = "#1f1f28"
|
||||
foreground = "#eeeeee"
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
[General]
|
||||
copyPathAfterSave=false
|
||||
disabledTrayIcon=true
|
||||
drawColor=#4a90d9
|
||||
drawThickness=3
|
||||
filenamePattern=%Y-%m-%d_%H-%M-%S
|
||||
savePath=/home/fscotto/Pictures/Screenshots
|
||||
savePathFixed=true
|
||||
showDesktopNotification=true
|
||||
useGrimAdapter=true
|
||||
showHelp=false
|
||||
showSidePanelButton=true
|
||||
startupLaunch=false
|
||||
@@ -3,13 +3,13 @@
|
||||
set $mod Mod4
|
||||
set $refresh_i3status killall -SIGUSR1 i3status
|
||||
|
||||
font pango:LiterationMono Nerd Font 10
|
||||
font pango:Liberation Mono 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 feh --bg-fill ~/.config/i3/wallpapers/void-minimalist2.png
|
||||
exec_always --no-startup-id ~/.config/i3/scripts/setup-gtk-theme.sh
|
||||
exec --no-startup-id /usr/libexec/xdg-desktop-portal
|
||||
|
||||
@@ -18,12 +18,6 @@ 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
|
||||
|
||||
@@ -52,12 +46,6 @@ 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
|
||||
@@ -162,17 +150,6 @@ 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
|
||||
@@ -222,24 +199,24 @@ mode "resize" {
|
||||
|
||||
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
|
||||
# }
|
||||
# }
|
||||
# i3bar + i3status
|
||||
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
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
wallpaper="$HOME/.config/i3/wallpapers/maxresdefault.jpg"
|
||||
wallpaper="$HOME/.config/i3/wallpapers/void-minimalist.png"
|
||||
cached="$HOME/.cache/i3lock/wallpaper.png"
|
||||
dims_cache="$HOME/.cache/i3lock/dims.txt"
|
||||
dims=$(xdotool getdisplaygeometry | tr ' ' 'x')
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 82 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 116 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 118 KiB |
@@ -1,7 +1,7 @@
|
||||
[Default Applications]
|
||||
text/html=userapp-Firefox-91DVN3.desktop
|
||||
x-scheme-handler/http=userapp-Firefox-91DVN3.desktop
|
||||
x-scheme-handler/https=userapp-Firefox-91DVN3.desktop
|
||||
text/html=firefox.desktop
|
||||
x-scheme-handler/http=firefox.desktop
|
||||
x-scheme-handler/https=firefox.desktop
|
||||
x-scheme-handler/about=firefox.desktop
|
||||
x-scheme-handler/unknown=firefox.desktop
|
||||
application/pdf=com.github.xournalpp.xournalpp.desktop
|
||||
@@ -164,13 +164,6 @@ text/x-readme=emacs.desktop
|
||||
text/x-rst=emacs.desktop
|
||||
text/x-tex=emacs.desktop
|
||||
text/x-texinfo=emacs.desktop
|
||||
x-scheme-handler/chrome=userapp-Firefox-91DVN3.desktop
|
||||
application/x-extension-htm=userapp-Firefox-91DVN3.desktop
|
||||
application/x-extension-html=userapp-Firefox-91DVN3.desktop
|
||||
application/x-extension-shtml=userapp-Firefox-91DVN3.desktop
|
||||
application/xhtml+xml=userapp-Firefox-91DVN3.desktop
|
||||
application/x-extension-xhtml=userapp-Firefox-91DVN3.desktop
|
||||
application/x-extension-xht=userapp-Firefox-91DVN3.desktop
|
||||
|
||||
[Added Associations]
|
||||
application/json=emacs.desktop;
|
||||
@@ -333,6 +326,3 @@ text/x-readme=emacs.desktop;
|
||||
text/x-rst=emacs.desktop;
|
||||
text/x-tex=emacs.desktop;
|
||||
text/x-texinfo=emacs.desktop;
|
||||
x-scheme-handler/http=userapp-Firefox-91DVN3.desktop;
|
||||
x-scheme-handler/https=userapp-Firefox-91DVN3.desktop;
|
||||
x-scheme-handler/chrome=userapp-Firefox-91DVN3.desktop;
|
||||
|
||||
18
dotfiles/desktop/.config/noctalia/colors.json
Normal file
18
dotfiles/desktop/.config/noctalia/colors.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"mError": "#d95757",
|
||||
"mHover": "#39bae6",
|
||||
"mOnError": "#0b0e14",
|
||||
"mOnHover": "#0b0e14",
|
||||
"mOnPrimary": "#0b0e14",
|
||||
"mOnSecondary": "#0b0e14",
|
||||
"mOnSurface": "#d1d1c7",
|
||||
"mOnSurfaceVariant": "#8e959e",
|
||||
"mOnTertiary": "#0b0e14",
|
||||
"mOutline": "#565b66",
|
||||
"mPrimary": "#e6b450",
|
||||
"mSecondary": "#aad94c",
|
||||
"mShadow": "#000000",
|
||||
"mSurface": "#0b0e14",
|
||||
"mSurfaceVariant": "#1e222a",
|
||||
"mTertiary": "#39bae6"
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"dark": {
|
||||
"mPrimary": "#b58fff",
|
||||
"mOnPrimary": "#000000",
|
||||
"mSecondary": "#c79aff",
|
||||
"mOnSecondary": "#000000",
|
||||
"mTertiary": "#d8b4ff",
|
||||
"mOnTertiary": "#000000",
|
||||
"mError": "#ff6f9b",
|
||||
"mOnError": "#000000",
|
||||
"mSurface": "#000000",
|
||||
"mOnSurface": "#e8d8ff",
|
||||
"mSurfaceVariant": "#110d1a",
|
||||
"mOnSurfaceVariant": "#b58fff",
|
||||
"mOutline": "#4c3a70",
|
||||
"mShadow": "#000000",
|
||||
"terminal": {
|
||||
"foreground": "#e8d8ff",
|
||||
"background": "#000000",
|
||||
"selectionFg": "#e8d8ff",
|
||||
"selectionBg": "#4c3a70",
|
||||
"cursorText": "#000000",
|
||||
"cursor": "#e8d8ff",
|
||||
"normal": {
|
||||
"black": "#000000",
|
||||
"red": "#ff6f9b",
|
||||
"green": "#a8e6cf",
|
||||
"yellow": "#d8b4ff",
|
||||
"blue": "#b58fff",
|
||||
"magenta": "#c79aff",
|
||||
"cyan": "#e0c1ff",
|
||||
"white": "#e8d8ff"
|
||||
},
|
||||
"bright": {
|
||||
"black": "#4c3a70",
|
||||
"red": "#ff8cb3",
|
||||
"green": "#b8f0d8",
|
||||
"yellow": "#e6d1ff",
|
||||
"blue": "#c9a8ff",
|
||||
"magenta": "#d4b8ff",
|
||||
"cyan": "#f0e0ff",
|
||||
"white": "#f5f0ff"
|
||||
}
|
||||
}
|
||||
},
|
||||
"light": {
|
||||
"mPrimary": "#8a56d4",
|
||||
"mOnPrimary": "#ffffff",
|
||||
"mSecondary": "#a074ff",
|
||||
"mOnSecondary": "#ffffff",
|
||||
"mTertiary": "#c79aff",
|
||||
"mOnTertiary": "#ffffff",
|
||||
"mError": "#ff6f9b",
|
||||
"mOnError": "#ffffff",
|
||||
"mSurface": "#fbf8ff",
|
||||
"mOnSurface": "#1a1428",
|
||||
"mSurfaceVariant": "#e8e0f8",
|
||||
"mOnSurfaceVariant": "#8a56d4",
|
||||
"mOutline": "#9b85c2",
|
||||
"mShadow": "#e2d8f5",
|
||||
"terminal": {
|
||||
"foreground": "#1a1428",
|
||||
"background": "#fbf8ff",
|
||||
"selectionFg": "#1a1428",
|
||||
"selectionBg": "#e8e0f8",
|
||||
"cursorText": "#fbf8ff",
|
||||
"cursor": "#1a1428",
|
||||
"normal": {
|
||||
"black": "#6b5b95",
|
||||
"red": "#ff6f9b",
|
||||
"green": "#6fb58f",
|
||||
"yellow": "#c79aff",
|
||||
"blue": "#8a56d4",
|
||||
"magenta": "#a074ff",
|
||||
"cyan": "#b89fff",
|
||||
"white": "#1a1428"
|
||||
},
|
||||
"bright": {
|
||||
"black": "#9b85c2",
|
||||
"red": "#ff8cb3",
|
||||
"green": "#85d7a8",
|
||||
"yellow": "#e0c1ff",
|
||||
"blue": "#b58fff",
|
||||
"magenta": "#c79aff",
|
||||
"cyan": "#d8b4ff",
|
||||
"white": "#120f1f"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"dark": {
|
||||
"mPrimary": "#ff8cb3",
|
||||
"mOnPrimary": "#000000",
|
||||
"mSecondary": "#ffb3cc",
|
||||
"mOnSecondary": "#000000",
|
||||
"mTertiary": "#ffcce0",
|
||||
"mOnTertiary": "#000000",
|
||||
"mError": "#ff99b8",
|
||||
"mOnError": "#000000",
|
||||
"mSurface": "#000000",
|
||||
"mOnSurface": "#ffe0eb",
|
||||
"mSurfaceVariant": "#1a0f16",
|
||||
"mOnSurfaceVariant": "#ff8cb3",
|
||||
"mOutline": "#5a3f4d",
|
||||
"mShadow": "#000000",
|
||||
"terminal": {
|
||||
"foreground": "#ffe0eb",
|
||||
"background": "#000000",
|
||||
"selectionFg": "#ffe0eb",
|
||||
"selectionBg": "#5a3f4d",
|
||||
"cursorText": "#000000",
|
||||
"cursor": "#ffe0eb",
|
||||
"normal": {
|
||||
"black": "#000000",
|
||||
"red": "#ff99b8",
|
||||
"green": "#ffccdd",
|
||||
"yellow": "#ffcce0",
|
||||
"blue": "#ff8cb3",
|
||||
"magenta": "#ffb3cc",
|
||||
"cyan": "#ffd6e8",
|
||||
"white": "#ffe0eb"
|
||||
},
|
||||
"bright": {
|
||||
"black": "#5a3f4d",
|
||||
"red": "#ffb8cc",
|
||||
"green": "#ffd6e8",
|
||||
"yellow": "#ffe0f0",
|
||||
"blue": "#ffa8c2",
|
||||
"magenta": "#ffccdd",
|
||||
"cyan": "#ffe8f2",
|
||||
"white": "#fff0f5"
|
||||
}
|
||||
}
|
||||
},
|
||||
"light": {
|
||||
"mPrimary": "#e57399",
|
||||
"mOnPrimary": "#ffffff",
|
||||
"mSecondary": "#ff99b8",
|
||||
"mOnSecondary": "#ffffff",
|
||||
"mTertiary": "#ffb3cc",
|
||||
"mOnTertiary": "#ffffff",
|
||||
"mError": "#ff99b8",
|
||||
"mOnError": "#ffffff",
|
||||
"mSurface": "#fff5fa",
|
||||
"mOnSurface": "#2c1822",
|
||||
"mSurfaceVariant": "#f5d6e3",
|
||||
"mOnSurfaceVariant": "#e57399",
|
||||
"mOutline": "#b38099",
|
||||
"mShadow": "#f0d0e0",
|
||||
"terminal": {
|
||||
"foreground": "#2c1822",
|
||||
"background": "#fff5fa",
|
||||
"selectionFg": "#2c1822",
|
||||
"selectionBg": "#f5d6e3",
|
||||
"cursorText": "#fff5fa",
|
||||
"cursor": "#2c1822",
|
||||
"normal": {
|
||||
"black": "#8c6075",
|
||||
"red": "#ff99b8",
|
||||
"green": "#e599b3",
|
||||
"yellow": "#ffb3cc",
|
||||
"blue": "#e57399",
|
||||
"magenta": "#ff99b8",
|
||||
"cyan": "#ffb8d1",
|
||||
"white": "#2c1822"
|
||||
},
|
||||
"bright": {
|
||||
"black": "#b38099",
|
||||
"red": "#ffb8cc",
|
||||
"green": "#ffccdd",
|
||||
"yellow": "#ffcce0",
|
||||
"blue": "#ff8cb3",
|
||||
"magenta": "#ffb3cc",
|
||||
"cyan": "#ffd6e8",
|
||||
"white": "#1a1015"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
{
|
||||
"dark": {
|
||||
"mPrimary": "#FFC799",
|
||||
"mOnPrimary": "#000000",
|
||||
"mSecondary": "#99FFE4",
|
||||
"mOnSecondary": "#000000",
|
||||
"mTertiary": "#FBADFF",
|
||||
"mOnTertiary": "#000000",
|
||||
"mError": "#FF8080",
|
||||
"mOnError": "#000000",
|
||||
"mSurface": "#0C0C0C",
|
||||
"mOnSurface": "#FFFFFF",
|
||||
"mSurfaceVariant": "#1C1C1C",
|
||||
"mOnSurfaceVariant": "#A0A0A0",
|
||||
"mOutline": "#505050",
|
||||
"mShadow": "#000000",
|
||||
"mHover": "#282828",
|
||||
"mOnHover": "#FFFFFF",
|
||||
"terminal": {
|
||||
"foreground": "#FFFFFF",
|
||||
"background": "#0C0C0C",
|
||||
"normal": {
|
||||
"black": "#0C0C0C",
|
||||
"red": "#FF8080",
|
||||
"green": "#99FFE4",
|
||||
"yellow": "#FFC799",
|
||||
"blue": "#80B3FF",
|
||||
"magenta": "#FBADFF",
|
||||
"cyan": "#99FFE4",
|
||||
"white": "#A0A0A0"
|
||||
},
|
||||
"bright": {
|
||||
"black": "#505050",
|
||||
"red": "#FF8080",
|
||||
"green": "#99FFE4",
|
||||
"yellow": "#FFC799",
|
||||
"blue": "#80B3FF",
|
||||
"magenta": "#FBADFF",
|
||||
"cyan": "#99FFE4",
|
||||
"white": "#FFFFFF"
|
||||
},
|
||||
"cursor": "#FFFFFF",
|
||||
"cursorText": "#000000",
|
||||
"selectionFg": "#000000",
|
||||
"selectionBg": "#FFC799"
|
||||
}
|
||||
},
|
||||
"light": {
|
||||
"mPrimary": "#FFB170",
|
||||
"mOnPrimary": "#0C0C0C",
|
||||
"mSecondary": "#00CC99",
|
||||
"mOnSecondary": "#0C0C0C",
|
||||
"mTertiary": "#FBADFF",
|
||||
"mOnTertiary": "#0C0C0C",
|
||||
"mError": "#FF8080",
|
||||
"mOnError": "#0C0C0C",
|
||||
"mSurface": "#F2F2F2",
|
||||
"mOnSurface": "#0C0C0C",
|
||||
"mSurfaceVariant": "#E5E5E5",
|
||||
"mOnSurfaceVariant": "#282828",
|
||||
"mOutline": "#505050",
|
||||
"mShadow": "#D9D9D9",
|
||||
"mHover": "#E0E0E0",
|
||||
"mOnHover": "#0C0C0C",
|
||||
"terminal": {
|
||||
"foreground": "#0C0C0C",
|
||||
"background": "#F2F2F2",
|
||||
"normal": {
|
||||
"black": "#F2F2F2",
|
||||
"red": "#FF8080",
|
||||
"green": "#00CC99",
|
||||
"yellow": "#FFC799",
|
||||
"blue": "#004A77",
|
||||
"magenta": "#FBADFF",
|
||||
"cyan": "#006B57",
|
||||
"white": "#505050"
|
||||
},
|
||||
"bright": {
|
||||
"black": "#A0A0A0",
|
||||
"red": "#FF8080",
|
||||
"green": "#00CC99",
|
||||
"yellow": "#FFC799",
|
||||
"blue": "#80B3FF",
|
||||
"magenta": "#FBADFF",
|
||||
"cyan": "#99FFE4",
|
||||
"white": "#0C0C0C"
|
||||
},
|
||||
"cursor": "#0C0C0C",
|
||||
"cursorText": "#F2F2F2",
|
||||
"selectionFg": "#F2F2F2",
|
||||
"selectionBg": "#FFC799"
|
||||
}
|
||||
}
|
||||
}
|
||||
28
dotfiles/desktop/.config/noctalia/plugins.json
Normal file
28
dotfiles/desktop/.config/noctalia/plugins.json
Normal file
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"sources": [
|
||||
{
|
||||
"enabled": true,
|
||||
"name": "Noctalia Plugins",
|
||||
"url": "https://github.com/noctalia-dev/noctalia-plugins"
|
||||
}
|
||||
],
|
||||
"states": {
|
||||
"clipboard": {
|
||||
"enabled": true,
|
||||
"sourceUrl": "https://github.com/noctalia-dev/noctalia-plugins"
|
||||
},
|
||||
"clipper": {
|
||||
"enabled": true,
|
||||
"sourceUrl": "https://github.com/noctalia-dev/noctalia-plugins"
|
||||
},
|
||||
"polkit-agent": {
|
||||
"enabled": true,
|
||||
"sourceUrl": "https://github.com/noctalia-dev/noctalia-plugins"
|
||||
},
|
||||
"usb-drive-manager": {
|
||||
"enabled": true,
|
||||
"sourceUrl": "https://github.com/noctalia-dev/noctalia-plugins"
|
||||
}
|
||||
},
|
||||
"version": 2
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"message": "Clipboard Panel",
|
||||
"backgroundColor": "#fabd2f",
|
||||
"cardColors": {
|
||||
"Text": {
|
||||
"bg": "mOutline",
|
||||
"separator": "mSurface",
|
||||
"fg": "mOnSurface"
|
||||
},
|
||||
"Image": {
|
||||
"bg": "mTertiary",
|
||||
"separator": "mSurface",
|
||||
"fg": "mOnTertiary"
|
||||
},
|
||||
"Link": {
|
||||
"bg": "mPrimary",
|
||||
"separator": "mSurface",
|
||||
"fg": "mOnPrimary"
|
||||
},
|
||||
"Code": {
|
||||
"bg": "mSecondary",
|
||||
"separator": "mSurface",
|
||||
"fg": "mOnSecondary"
|
||||
},
|
||||
"Color": {
|
||||
"bg": "mSecondary",
|
||||
"separator": "mSurface",
|
||||
"fg": "mOnSecondary"
|
||||
},
|
||||
"Emoji": {
|
||||
"bg": "mHover",
|
||||
"separator": "mSurface",
|
||||
"fg": "mOnHover"
|
||||
},
|
||||
"File": {
|
||||
"bg": "mError",
|
||||
"separator": "mSurface",
|
||||
"fg": "mOnError"
|
||||
}
|
||||
},
|
||||
"customColors": {},
|
||||
"enableTodoIntegration": true,
|
||||
"autoOpenPinnedPanel": false,
|
||||
"pincardsEnabled": true,
|
||||
"notecardsEnabled": true,
|
||||
"showCloseButton": true,
|
||||
"closeOnBackgroundClick": true
|
||||
}
|
||||
7
dotfiles/desktop/.config/opencode/opencode.json
Normal file
7
dotfiles/desktop/.config/opencode/opencode.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"instructions": [
|
||||
"~/.config/opencode/bootstrap.md",
|
||||
"~/.config/opencode/rules/safety.md"
|
||||
]
|
||||
}
|
||||
@@ -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
|
||||
@@ -2,7 +2,7 @@ configuration {
|
||||
modi: "drun,run,window";
|
||||
show-icons: true;
|
||||
icon-theme: "Yaru";
|
||||
font: "LiterationMono Nerd Font 11";
|
||||
font: "Liberation Sans 11";
|
||||
}
|
||||
|
||||
* {
|
||||
|
||||
@@ -1,198 +1,64 @@
|
||||
# Sway / SwayFX config
|
||||
|
||||
set $mod Mod4
|
||||
|
||||
font pango:LiterationMono Nerd Font 10
|
||||
|
||||
# vim-like directions
|
||||
set $left h
|
||||
set $down j
|
||||
set $up k
|
||||
set $right l
|
||||
|
||||
# Default terminal (hosts can override via host.conf — e.g. nymph wraps it in prime-run)
|
||||
set $terminal alacritty
|
||||
set $fallback_terminal st
|
||||
|
||||
# Workspaces (waybar formatta i numeri in romani via format-icons)
|
||||
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"
|
||||
# Host-specific overrides
|
||||
include ~/.config/sway/host.conf
|
||||
include ~/.config/sway/shell.conf
|
||||
|
||||
# Input devices
|
||||
input * {
|
||||
font pango:Hack Nerd Font 10
|
||||
|
||||
# Input and output defaults
|
||||
seat seat0 xcursor_theme Yaru 24
|
||||
|
||||
input type:keyboard {
|
||||
xkb_layout us
|
||||
xkb_variant intl
|
||||
}
|
||||
|
||||
# Cursor
|
||||
seat * xcursor_theme Yaru 24
|
||||
|
||||
# Outputs
|
||||
output * bg ~/.config/sway/wallpapers/wallpaper-161664.jpg center
|
||||
|
||||
# SwayFX effects
|
||||
corner_radius 8
|
||||
blur enable
|
||||
blur_passes 1
|
||||
blur_radius 5
|
||||
shadows enable
|
||||
default_dim_inactive 0.1
|
||||
|
||||
# Layer effects (Waybar etc.) — sfrutta il blur globale già attivo
|
||||
layer_effects "waybar" blur enable; blur_ignore_transparent enable; shadows disable
|
||||
|
||||
# Allow X11 applications
|
||||
xwayland enable
|
||||
|
||||
# General behavior
|
||||
focus_follows_mouse no
|
||||
mouse_warping none
|
||||
floating_modifier $mod
|
||||
tiling_drag enable
|
||||
floating_modifier $mod normal
|
||||
|
||||
# Borders
|
||||
default_border pixel 2
|
||||
default_floating_border pixel 2
|
||||
hide_edge_borders none
|
||||
|
||||
# Gaps
|
||||
gaps inner 10
|
||||
gaps outer 4
|
||||
smart_gaps on
|
||||
smart_borders on
|
||||
|
||||
# Per-host overrides (terminal wrapper, gaps tweaks, workspace→output bindings, …)
|
||||
include ~/.config/sway/host.conf
|
||||
|
||||
# Window rules
|
||||
for_window [app_id="(?i)polkit"] floating enable
|
||||
for_window [class="(?i)polkit"] floating enable
|
||||
for_window [title="^Authentication Required"] floating enable
|
||||
|
||||
# Floating: dialog X11 (open/save/print, generic transient dialogs)
|
||||
for_window [window_role="pop-up"] floating enable
|
||||
for_window [window_role="dialog"] floating enable
|
||||
for_window [window_role="task_dialog"] floating enable
|
||||
for_window [window_type="dialog"] floating enable
|
||||
for_window [window_type="utility"] floating enable
|
||||
|
||||
# Floating: Bluetooth manager
|
||||
# Floating rules
|
||||
for_window [app_id="Rofi"] floating enable
|
||||
for_window [app_id="org.pulseaudio.pavucontrol"] floating enable
|
||||
for_window [class="Pavucontrol"] floating enable
|
||||
for_window [app_id="nm-connection-editor"] floating enable
|
||||
for_window [class="Nm-connection-editor"] floating enable
|
||||
for_window [app_id="blueman-manager"] floating enable
|
||||
for_window [class="Blueman-manager"] floating enable
|
||||
|
||||
# Floating: NetworkManager connection editor / VPN / pinentry
|
||||
for_window [app_id="nm-connection-editor"] floating enable
|
||||
for_window [class="Nm-connection-editor"] floating enable
|
||||
for_window [app_id="(?i)pinentry"] floating enable
|
||||
for_window [class="(?i)pinentry"] floating enable
|
||||
set $left h
|
||||
set $down j
|
||||
set $up k
|
||||
set $right l
|
||||
|
||||
# Floating: Firefox auxiliary windows (Library/Downloads, About, Preferences, Manager)
|
||||
for_window [class="(?i)firefox" title="^Library$"] floating enable
|
||||
for_window [app_id="(?i)firefox" title="^Library$"] floating enable
|
||||
for_window [class="(?i)firefox" title="^About Mozilla Firefox$"] floating enable
|
||||
for_window [app_id="(?i)firefox" title="^About Mozilla Firefox$"] floating enable
|
||||
for_window [class="(?i)firefox" window_role="Preferences"] floating enable
|
||||
for_window [class="(?i)firefox" window_role="Manager"] floating enable
|
||||
for_window [class="(?i)firefox" window_role="Dialog"] floating enable
|
||||
for_window [class="(?i)firefox" window_role="Popup"] floating enable
|
||||
|
||||
# Floating: file pickers GTK (open/save) — già coperti da window_type=dialog ma ridondante per portal
|
||||
for_window [app_id="org.freedesktop.impl.portal.desktop.gtk"] floating enable
|
||||
|
||||
# Autostart — XDG and session services
|
||||
# Propagate Wayland env to dbus so xdg-desktop-portal backends inherit
|
||||
# WAYLAND_DISPLAY/SWAYSOCK when dbus-activated (otherwise they crash).
|
||||
exec dbus-update-activation-environment DISPLAY WAYLAND_DISPLAY SWAYSOCK XDG_CURRENT_DESKTOP XDG_SESSION_TYPE XDG_SESSION_DESKTOP
|
||||
exec dex --autostart --environment sway
|
||||
exec gnome-keyring-daemon --start --components=secrets
|
||||
exec_always ~/.config/sway/scripts/setup-gtk-theme.sh
|
||||
exec /usr/libexec/xdg-desktop-portal
|
||||
|
||||
# Audio
|
||||
exec pipewire
|
||||
exec pipewire-pulse
|
||||
exec wireplumber
|
||||
|
||||
# Status bar
|
||||
exec waybar
|
||||
|
||||
# OSD daemon (volume/brightness/caps-lock)
|
||||
exec swayosd-server
|
||||
|
||||
# Tray services
|
||||
exec dunst
|
||||
exec /usr/libexec/xfce-polkit
|
||||
exec nm-applet
|
||||
exec blueman-applet
|
||||
exec udiskie
|
||||
exec flameshot
|
||||
|
||||
# Clipboard manager (Wayland-native)
|
||||
exec wl-paste --type text --watch cliphist store
|
||||
exec wl-paste --type image --watch cliphist store
|
||||
|
||||
# Idle / lock policy
|
||||
# 5 min idle → lock
|
||||
# 10 min idle → screen off (DPMS)
|
||||
# resume → screen on
|
||||
# before sleep → lock
|
||||
exec swayidle -w \
|
||||
timeout 300 '~/.config/sway/scripts/lockscreen' \
|
||||
timeout 600 'swaymsg "output * dpms off"' \
|
||||
resume 'swaymsg "output * dpms on"' \
|
||||
before-sleep '~/.config/sway/scripts/lockscreen'
|
||||
|
||||
# Terminal
|
||||
# App launchers and window actions
|
||||
bindsym $mod+Return exec $terminal
|
||||
|
||||
# Emergency terminal fallback
|
||||
bindsym $mod+Shift+Return exec foot
|
||||
|
||||
# Emacs client
|
||||
bindsym $mod+Shift+Return exec $fallback_terminal
|
||||
bindsym $mod+Shift+e exec emacsclient -c -n
|
||||
|
||||
# Launcher
|
||||
bindsym $mod+d exec "rofi -show drun -theme ~/.config/rofi/config.rasi"
|
||||
|
||||
# Clipboard history picker
|
||||
bindsym $mod+c exec "cliphist list | rofi -dmenu -theme ~/.config/rofi/config.rasi | cliphist decode | wl-copy"
|
||||
|
||||
# Audio panel control
|
||||
bindsym $mod+Shift+v exec pavucontrol
|
||||
|
||||
# File manager
|
||||
bindsym $mod+d exec $menu
|
||||
bindsym $mod+Shift+v exec $audio_panel
|
||||
bindsym $mod+Shift+f exec thunar
|
||||
|
||||
# Do not disturb (dunst pause toggle)
|
||||
bindsym $mod+Shift+d exec dunstctl set-paused toggle
|
||||
|
||||
# Manual lock screen
|
||||
bindsym $mod+Shift+x exec ~/.config/sway/scripts/lockscreen
|
||||
|
||||
# Kill focused window
|
||||
bindsym $mod+Shift+x exec $locker
|
||||
bindsym $mod+Shift+q kill
|
||||
|
||||
# Screenshot
|
||||
# Print → flameshot GUI
|
||||
# Shift+Print → grim+slurp region → clipboard
|
||||
# Alt+Print → grim focused output → clipboard
|
||||
bindsym Print exec flameshot gui
|
||||
bindsym Shift+Print exec ~/.config/sway/scripts/screenshot region
|
||||
bindsym Alt+Print exec ~/.config/sway/scripts/screenshot output
|
||||
# Screenshots
|
||||
bindsym Print exec $screenshot_full
|
||||
bindsym Shift+Print exec $screenshot_region
|
||||
bindsym Alt+Print exec $screenshot_window
|
||||
|
||||
# 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
|
||||
@@ -203,23 +69,20 @@ 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
|
||||
# Split and layouts
|
||||
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
|
||||
@@ -228,22 +91,32 @@ bindsym $mod+a focus parent
|
||||
bindsym $mod+Shift+minus move scratchpad
|
||||
bindsym $mod+minus scratchpad show
|
||||
|
||||
# Volume (via swayosd: aggiorna pactl + mostra OSD)
|
||||
bindsym XF86AudioRaiseVolume exec swayosd-client --output-volume raise
|
||||
bindsym XF86AudioLowerVolume exec swayosd-client --output-volume lower
|
||||
bindsym XF86AudioMute exec swayosd-client --output-volume mute-toggle
|
||||
bindsym XF86AudioMicMute exec swayosd-client --input-volume mute-toggle
|
||||
# Volume and brightness OSD
|
||||
bindsym XF86AudioRaiseVolume exec $audio_raise
|
||||
bindsym XF86AudioLowerVolume exec $audio_lower
|
||||
bindsym XF86AudioMute exec $audio_mute
|
||||
bindsym XF86AudioMicMute exec $audio_mic_mute
|
||||
|
||||
# Brightness (via swayosd: aggiorna brightnessctl + mostra OSD)
|
||||
bindsym XF86MonBrightnessUp exec swayosd-client --brightness raise
|
||||
bindsym XF86MonBrightnessDown exec swayosd-client --brightness lower
|
||||
bindsym XF86MonBrightnessUp exec $brightness_up
|
||||
bindsym XF86MonBrightnessDown exec $brightness_down
|
||||
|
||||
# Media keys
|
||||
bindsym XF86AudioPlay exec playerctl play-pause
|
||||
bindsym XF86AudioNext exec playerctl next
|
||||
bindsym XF86AudioPrev exec playerctl previous
|
||||
|
||||
# Workspace switch
|
||||
# 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
|
||||
|
||||
bindsym $mod+1 workspace number $ws1
|
||||
bindsym $mod+2 workspace number $ws2
|
||||
bindsym $mod+3 workspace number $ws3
|
||||
@@ -268,34 +141,29 @@ 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 / exit
|
||||
# Reload and power menu
|
||||
bindsym $mod+Shift+c reload
|
||||
bindsym $mod+Shift+r reload
|
||||
bindsym $mod+Shift+BackSpace exec swaymsg exit
|
||||
bindsym $mod+Shift+Escape exec wlogout -n -b 3 -c 16 -r 16 -L 1344 -R 1344 -T 650 -B 650
|
||||
bindsym $mod+Shift+BackSpace exit
|
||||
bindsym $mod+Shift+Escape exec $powermenu
|
||||
|
||||
# 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 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"
|
||||
|
||||
# Client colors (border, background, text, indicator, child_border)
|
||||
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
|
||||
include ~/.config/sway/noctalia
|
||||
|
||||
@@ -1,3 +1 @@
|
||||
# Per-host sway overrides. Empty by default; hosts that need tuning
|
||||
# ship their own version via host_sway_dotfiles, which overwrites this
|
||||
# placeholder during deploy.
|
||||
# Host-specific Sway overrides live here.
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
exec swaylock \
|
||||
--image "$HOME/.config/sway/wallpapers/maxresdefault.jpg" \
|
||||
--scaling fill \
|
||||
--indicator-radius 100 \
|
||||
--ring-color 2f4058 \
|
||||
--inside-color 1f1f28 \
|
||||
--line-color 00000000 \
|
||||
--separator-color 3a3a46 \
|
||||
--key-hl-color 6daeea \
|
||||
--bs-hl-color c7162b \
|
||||
--ring-ver-color 4a90d9 \
|
||||
--inside-ver-color 1f1f28 \
|
||||
--ring-wrong-color c7162b \
|
||||
--inside-wrong-color 1f1f28 \
|
||||
--text-color d0d0d0
|
||||
@@ -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/sway/scripts/lockscreen
|
||||
;;
|
||||
*Logout)
|
||||
swaymsg exit
|
||||
;;
|
||||
*Suspend)
|
||||
~/.config/sway/scripts/lockscreen
|
||||
loginctl suspend
|
||||
;;
|
||||
*Reboot)
|
||||
loginctl reboot
|
||||
;;
|
||||
*Shutdown)
|
||||
loginctl poweroff
|
||||
;;
|
||||
esac
|
||||
@@ -1,40 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Quick screenshot helpers for sway. Captures via grim, saves to disk and
|
||||
# also copies to the Wayland clipboard. Use the flameshot binding for
|
||||
# annotations / fancy capture.
|
||||
#
|
||||
# Usage: screenshot {full|region|output|window}
|
||||
|
||||
set -eu
|
||||
|
||||
mode="${1:-full}"
|
||||
dir="$HOME/Pictures/Screenshots"
|
||||
mkdir -p "$dir"
|
||||
file="$dir/$(date +%Y%m%d_%H%M%S).png"
|
||||
|
||||
case "$mode" in
|
||||
full)
|
||||
grim "$file"
|
||||
;;
|
||||
region)
|
||||
grim -g "$(slurp)" "$file"
|
||||
;;
|
||||
output)
|
||||
out=$(swaymsg -t get_outputs --raw \
|
||||
| jq -r '.[] | select(.focused) | .name')
|
||||
grim -o "$out" "$file"
|
||||
;;
|
||||
window)
|
||||
geom=$(swaymsg -t get_tree \
|
||||
| jq -r '.. | select(.focused? == true)
|
||||
| "\(.rect.x),\(.rect.y) \(.rect.width)x\(.rect.height)"')
|
||||
grim -g "$geom" "$file"
|
||||
;;
|
||||
*)
|
||||
printf 'Usage: %s {full|region|output|window}\n' "$0" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
wl-copy < "$file"
|
||||
notify-send "Screenshot saved" "$file" -i image-x-generic >/dev/null 2>&1 || true
|
||||
@@ -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
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 365 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 116 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 118 KiB |
@@ -1,115 +0,0 @@
|
||||
{
|
||||
"layer": "top",
|
||||
"position": "top",
|
||||
"height": 26,
|
||||
"spacing": 4,
|
||||
|
||||
"modules-left": ["sway/workspaces"],
|
||||
"modules-center": [],
|
||||
"modules-right": ["cpu", "memory", "disk", "temperature", "backlight", "network", "pulseaudio", "battery", "tray", "clock", "custom/dnd", "custom/power"],
|
||||
|
||||
"sway/workspaces": {
|
||||
"disable-scroll": true,
|
||||
"all-outputs": false,
|
||||
"format": "{icon}",
|
||||
"format-icons": {
|
||||
"1": "I",
|
||||
"2": "II",
|
||||
"3": "III",
|
||||
"4": "IV",
|
||||
"5": "V",
|
||||
"6": "VI",
|
||||
"7": "VII",
|
||||
"8": "VIII",
|
||||
"9": "IX",
|
||||
"10": "X"
|
||||
},
|
||||
"persistent-workspaces": {
|
||||
"*": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
||||
}
|
||||
},
|
||||
|
||||
"clock": {
|
||||
"interval": 60,
|
||||
"format": "{:%Y-%m-%d %H:%M}",
|
||||
"tooltip-format": "<tt>{calendar}</tt>"
|
||||
},
|
||||
|
||||
"cpu": {
|
||||
"interval": 5,
|
||||
"format": " {usage}%"
|
||||
},
|
||||
|
||||
"memory": {
|
||||
"interval": 10,
|
||||
"format": " {used:0.1f}G / {total:0.1f}G"
|
||||
},
|
||||
|
||||
"disk": {
|
||||
"interval": 60,
|
||||
"path": "/",
|
||||
"format": " {used} / {total}"
|
||||
},
|
||||
|
||||
"temperature": {
|
||||
"interval": 10,
|
||||
"critical-threshold": 80,
|
||||
"format": " {temperatureC}°C",
|
||||
"format-critical": " {temperatureC}°C"
|
||||
},
|
||||
|
||||
"backlight": {
|
||||
"format": " {percent}%",
|
||||
"on-scroll-up": "brightnessctl set +5%",
|
||||
"on-scroll-down": "brightnessctl set 5%-"
|
||||
},
|
||||
|
||||
"network": {
|
||||
"interval": 5,
|
||||
"format-wifi": " {essid} {signalStrength}%",
|
||||
"format-ethernet": " {ifname}",
|
||||
"format-disconnected": " offline",
|
||||
"tooltip-format": "{ifname} {ipaddr}"
|
||||
},
|
||||
|
||||
"pulseaudio": {
|
||||
"format": "{icon} {volume}%",
|
||||
"format-muted": " muted",
|
||||
"format-bluetooth": "{icon} {volume}% ",
|
||||
"format-icons": { "default": ["", "", ""] },
|
||||
"on-click": "swayosd-client --output-volume mute-toggle",
|
||||
"on-click-right": "pavucontrol"
|
||||
},
|
||||
|
||||
"battery": {
|
||||
"bat": "BAT0",
|
||||
"interval": 30,
|
||||
"states": {
|
||||
"warning": 30,
|
||||
"critical": 15
|
||||
},
|
||||
"format": "{icon} {capacity}%",
|
||||
"format-charging": " {capacity}%",
|
||||
"format-full": " full",
|
||||
"format-icons": ["", "", "", "", ""]
|
||||
},
|
||||
|
||||
"tray": {
|
||||
"icon-size": 16,
|
||||
"spacing": 6
|
||||
},
|
||||
|
||||
"custom/dnd": {
|
||||
"exec": "dunstctl is-paused | grep -q true && echo '{\"text\":\"\",\"class\":\"paused\"}' || echo '{\"text\":\"\",\"class\":\"\"}'",
|
||||
"return-type": "json",
|
||||
"interval": 2,
|
||||
"on-click": "dunstctl set-paused toggle",
|
||||
"tooltip": false
|
||||
},
|
||||
|
||||
"custom/power": {
|
||||
"format": "⏻",
|
||||
"tooltip": false,
|
||||
"on-click": "wlogout -n -b 3 -c 16 -r 16 -L 1344 -R 1344 -T 650 -B 650"
|
||||
}
|
||||
}
|
||||
@@ -1,89 +0,0 @@
|
||||
* {
|
||||
font-family: "LiterationMono Nerd Font", "Symbols Nerd Font Mono", monospace;
|
||||
font-size: 10pt;
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
window#waybar {
|
||||
background-color: rgba(31, 31, 40, 0.55);
|
||||
color: #d0d0d0;
|
||||
border: none;
|
||||
}
|
||||
|
||||
#workspaces button {
|
||||
padding: 0 8px;
|
||||
margin: 0;
|
||||
color: #9a9a9a;
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
#workspaces button.visible {
|
||||
color: #d0d0d0;
|
||||
background-color: #2b2b36;
|
||||
}
|
||||
|
||||
#workspaces button.focused {
|
||||
color: #ffffff;
|
||||
background-color: #4a90d9;
|
||||
}
|
||||
|
||||
#workspaces button.urgent {
|
||||
color: #ffffff;
|
||||
background-color: #c7162b;
|
||||
}
|
||||
|
||||
#clock,
|
||||
#cpu,
|
||||
#memory,
|
||||
#disk,
|
||||
#temperature,
|
||||
#backlight,
|
||||
#network,
|
||||
#pulseaudio,
|
||||
#battery,
|
||||
#tray,
|
||||
#custom-dnd,
|
||||
#custom-power {
|
||||
padding: 0 8px;
|
||||
}
|
||||
|
||||
#clock { color: #d0d0d0; }
|
||||
#cpu { color: #bb9af7; }
|
||||
#memory { color: #7dcfff; }
|
||||
#disk { color: #9ec07c; }
|
||||
#temperature { color: #e0af68; }
|
||||
#temperature.critical { color: #c7162b; }
|
||||
#backlight { color: #d0d0d0; }
|
||||
#network { color: #4a90d9; }
|
||||
#network.disconnected { color: #3a3a46; }
|
||||
#pulseaudio { color: #7dcfff; }
|
||||
#pulseaudio.muted { color: #8e8e9a; }
|
||||
#battery { color: #d0d0d0; }
|
||||
#battery.charging { color: #9ec07c; }
|
||||
#battery.warning { color: #e0af68; }
|
||||
#battery.critical { color: #c7162b; }
|
||||
#battery.full { color: #9ec07c; }
|
||||
|
||||
#tray { padding: 0 6px; }
|
||||
|
||||
#custom-dnd {
|
||||
color: #8e8e9a;
|
||||
font-size: 11pt;
|
||||
}
|
||||
#custom-dnd.paused {
|
||||
color: #e0af68;
|
||||
}
|
||||
#custom-dnd:hover {
|
||||
background-color: rgba(224, 175, 104, 0.15);
|
||||
}
|
||||
|
||||
#custom-power {
|
||||
color: #c7162b;
|
||||
padding: 0 10px;
|
||||
font-size: 12pt;
|
||||
}
|
||||
#custom-power:hover {
|
||||
background-color: rgba(199, 22, 43, 0.15);
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
{"label": "logout", "action": "swaymsg exit", "text": "Logout", "keybind": "l"}
|
||||
{"label": "reboot", "action": "loginctl reboot", "text": "Reboot", "keybind": "r"}
|
||||
{"label": "shutdown", "action": "loginctl poweroff", "text": "Shutdown", "keybind": "s"}
|
||||
@@ -1,49 +0,0 @@
|
||||
* {
|
||||
background-image: none;
|
||||
box-shadow: none;
|
||||
font-family: "LiterationMono Nerd Font", "Symbols Nerd Font Mono", monospace;
|
||||
font-size: 10pt;
|
||||
min-width: 0;
|
||||
min-height: 0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
window {
|
||||
background-color: rgba(31, 31, 40, 0.75);
|
||||
}
|
||||
|
||||
button {
|
||||
color: #d0d0d0;
|
||||
background-color: #2b2b36;
|
||||
border: 1px solid #3a3a46;
|
||||
border-radius: 10px;
|
||||
margin: 0;
|
||||
padding: 0 0 12px 0;
|
||||
min-width: 240px;
|
||||
min-height: 140px;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center 28%;
|
||||
background-size: 80px 80px;
|
||||
}
|
||||
|
||||
button:focus,
|
||||
button:active,
|
||||
button:hover {
|
||||
color: #ffffff;
|
||||
background-color: #4a90d9;
|
||||
border-color: #4a90d9;
|
||||
outline-style: none;
|
||||
}
|
||||
|
||||
#logout {
|
||||
background-image: image(url("/usr/share/wlogout/icons/logout.png"));
|
||||
}
|
||||
|
||||
#reboot {
|
||||
background-image: image(url("/usr/share/wlogout/icons/reboot.png"));
|
||||
}
|
||||
|
||||
#shutdown {
|
||||
background-image: image(url("/usr/share/wlogout/icons/shutdown.png"));
|
||||
}
|
||||
@@ -45,8 +45,8 @@
|
||||
'misc/rss
|
||||
'misc/terminal
|
||||
'misc/vcs
|
||||
'misc/documents
|
||||
'misc/i3-config
|
||||
'misc/xclip)
|
||||
'misc/pdf
|
||||
'misc/epub
|
||||
'misc/i3-config)
|
||||
|
||||
(message "...user configuration loaded")
|
||||
|
||||
@@ -105,8 +105,8 @@
|
||||
(define-key projectile-command-map (kbd "v") #'fscotto/project-multi-vterm)
|
||||
(define-key projectile-command-map (kbd "V") nil)
|
||||
(define-key projectile-command-map (kbd "x") #'fscotto/project-external-terminal)
|
||||
(define-key projectile-command-map (kbd "a") #'fscotto/project-agent-dwim)
|
||||
(define-key projectile-command-map (kbd "A") #'fscotto/project-agent-session)
|
||||
(define-key projectile-command-map (kbd "a") #'fscotto/project-opencode-dwim)
|
||||
(define-key projectile-command-map (kbd "A") #'fscotto/project-opencode-session)
|
||||
(define-key projectile-command-map (kbd "g") #'fscotto/project-magit-status))
|
||||
|
||||
;;;; LSP
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user