37 Commits

Author SHA1 Message Date
Fabio Scotto di Santolo
c6a8ca4a5a nymph: add kanshi profiles for laptop / dock switching
Two profiles, auto-selected from connected outputs:
- solo: only eDP-1, all workspaces routed there.
- dual: eDP-1 + DP-1 (3440x1440@100Hz dock), workspace 1 on the laptop
  panel and 2-10 on the dock; each profile reissues swaymsg "workspace
  N, move workspace to output X" on activation so workspaces follow.

host.conf autostarts kanshi and drops the redundant gaps/corner_radius
overrides, leaving the base sway/config values in effect.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 23:53:51 +02:00
Fabio Scotto di Santolo
b23123ae4e sway: per-host overrides via host.conf and session-env
Adds a host_sway_dotfiles mechanism mirroring host_i3_dotfiles: hosts
drop a host.conf into ~/.config/sway/ to override sway settings, and
optionally a session-env file sourced by start-sway for per-host
environment variables. The base sway/config defines $terminal and
includes ~/.config/sway/host.conf; an empty placeholder ships with the
base profile so the include never warns on hosts without overrides.

nymph gets its own host.conf wrapping alacritty in prime-run (NVIDIA
PRIME offload), bumping gaps/corner_radius, and pinning workspaces to
eDP-1 / DP-1, plus a session-env exporting SWAY_UNSUPPORTED_GPU=1 and
WLR_DRM_DEVICES for the hybrid Intel+NVIDIA setup.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 23:50:01 +02:00
Fabio Scotto di Santolo
25379afe2e sway: create /etc/xdg/xdg-desktop-portal before writing portal config
The portal config copy assumed the parent directory existed, but on a
fresh install xdg-desktop-portal hasn't shipped it yet. Add an explicit
file directory task ahead of the copy so the playbook is robust on
hosts that don't already have it.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 23:49:50 +02:00
Fabio Scotto di Santolo
b84a57fc5b hosts: enable sway alongside i3 on ikaros and nymph
Adds sway to desktop_sessions_enabled on both desktops so the next run
installs the sway profile and emptty exposes it in the picker. Default
session stays i3; users select Sway from emptty's picker (already on
via desktop_prompt_for_session).

Note: nymph still lacks a kanshi config, so multi-monitor workspace
pinning isn't tuned yet — sway will fall back to default placement.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 23:29:48 +02:00
Fabio Scotto di Santolo
63cd774f6f sway: screenshots, polkit floating, flatpak dark theme
Screenshots
- Swap xfce4-screenshooter for flameshot + grim/slurp/jq; xfce4 used
  the X11 selection so clipboard didn't round-trip to Wayland clients.
  Print invokes flameshot's editor; Shift/Alt+Print are quick
  grim-based captures via a small wrapper script. Flameshot is now
  autostarted so the first capture isn't slow.

Polkit
- Add for_window rules so the xfce-polkit dialog (and any other polkit
  agent) always opens floating.

Flatpak dark theme
- Write /etc/flatpak/overrides/global with GTK_THEME=Yaru-Blue-dark for
  legacy GTK apps, plus a sway-portals.conf so the Settings portal is
  served by xdg-desktop-portal-gtk (wlr doesn't implement it). That
  lets libadwaita apps see color-scheme=prefer-dark.

cleanup-sway: track the new package set.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 23:26:45 +02:00
Fabio Scotto di Santolo
e5a2b4ee41 sway: restore Nerd Font glyphs in powermenu
The Reboot, Logout and Lock PUA glyphs (U+F01E, U+F08B, U+F023) were
lost from the sway powermenu and rendered as blanks. Re-inject them so
the menu matches the i3 version.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 22:24:33 +02:00
Fabio Scotto di Santolo
2065164459 sway/waybar: fix muted glyph, dedupe bar on reload, relocate clock, match lock wallpaper
- Switch muted glyph from U+F6A9 to U+F026 (volume-off), which is
  present in every Nerd Font variant including LiterationMono.
- Use exec for waybar instead of exec_always, so reloading sway no
  longer spawns a second bar.
- Move the clock to the right of the tray and drop the leading
  calendar glyph from its format.
- Lock screen now uses maxresdefault.jpg, matching the i3 lockscreen;
  the asset is copied into sway/wallpapers/ so the sway profile stays
  self-contained.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 22:21:36 +02:00
Fabio Scotto di Santolo
85bf7cfd03 waybar: restore audio glyphs and raise muted-state contrast
The pulseaudio module had empty strings where Nerd Font glyphs were
meant to be, so the volume / mute / bluetooth indicators rendered
blank. Re-inject the proper PUA codepoints (F027/F028 volume,
F6A9 mute, F293 bluetooth). Bump #pulseaudio.muted from #3a3a46
to #8e8e9a so it stays readable against the bar background.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 22:09:16 +02:00
Fabio Scotto di Santolo
b7c1cb4482 sway: center wallpaper, fix lockscreen flags and add idle timeouts
- Use bg mode 'center' so the wallpaper keeps its native size.
- Drop --clock and --indicator from the lockscreen invocation; those
  flags belong to swaylock-effects and made vanilla swaylock exit with
  an unknown-option error. Keep --indicator-idle-visible to preserve
  the ring while idle.
- Replace the suspend-only swayidle line with a full idle policy:
  5 min lock, 10 min DPMS off, DPMS on on resume, lock before sleep.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 22:05:17 +02:00
Fabio Scotto di Santolo
69efe18e2b sway: deploy start-sway system-wide and fix runtime warnings
- Move start-sway to /usr/local/bin so emptty resolves it without a user
  PATH (it runs the launcher with an absolute path). The role copies the
  script as root; the user dotfile entry is removed.
- Fix runtime errors / deprecations in sway/config: tiling_drag accepts
  only enable|disable|toggle; new_window / new_float have been
  superseded by default_border / default_floating_border.
- Simplify workspace names to numeric only; waybar already maps them to
  roman numerals via format-icons.
- Update cleanup-sway.sh to remove /usr/local/bin/start-sway and the
  emptty session entry together as system files.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 21:20:01 +02:00
Fabio Scotto di Santolo
0910ecbd87 scripts: add cleanup-i3 and cleanup-sway uninstallers
Two POSIX sh scripts to undo a session install on a Void host: remove
session-exclusive packages (filtered to those actually installed),
exclusive dotfiles and runtime state, plus the emptty session entry.
Shared resources (dunst, rofi, alacritty, xfce4-screenshooter) are left
in place so the other session keeps working. Confirmation prompt before
any destructive action.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 21:01:11 +02:00
Fabio Scotto di Santolo
a6fc0573f2 desktop: enable emptty session prompt instead of auto-selecting i3
Flip desktop_prompt_for_session to true so emptty stops auto-selecting
i3 and shows the session picker — needed now that sway is an alternative
target. desktop_default_session is kept as a fallback for future flips.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 20:54:38 +02:00
Fabio Scotto di Santolo
47a45cb285 desktop: drop noctalia dotfiles and inventory vars
Remove the noctalia config tree and its desktop_void_dotfiles entry,
plus the unused noctalia_bar_monitors / noctalia_screen_overrides vars.
Not used by any role.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 20:53:25 +02:00
Fabio Scotto di Santolo
ae8c311044 sway: use vanilla swaylock and fix Waybar package case
swaylock-effects is not packaged in Void; switch the lockscreen script
to vanilla swaylock and drop the unsupported --effect-blur / --fade-in
flags. Also correct the case-sensitive package name Waybar so xbps-install
can resolve it.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 20:39:44 +02:00
Fabio Scotto di Santolo
b827ea97a1 Fix Waybar package name 2026-05-16 20:25:21 +02:00
Fabio Scotto di Santolo
2d3fb543de desktop: add sway/swayfx profile (dormant) with waybar, kanshi, cliphist
New profile_desktop_sway role gated by desktop_sessions_enabled, with
SwayFX effects, Waybar bar (1:1 with Polybar layout + pulseaudio),
swayidle + swaylock-effects for locking, swayosd for OSD, cliphist for
clipboard history and kanshi for multi-monitor profiles. Emptty gains
WAYLAND_SESSIONS_PATH + wayland-sessions dir. start-sway wrapper handles
session env (dbus-run-session, gpg-agent, turnstile env). Profile stays
dormant until a host opts in via desktop_sessions_enabled.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 19:39:11 +02:00
Fabio Scotto di Santolo
5023722505 configure xclip package for Emacs 2026-05-16 09:17:39 +02:00
Fabio Scotto di Santolo
1bcaaca92e desktop: unify mono font to LiterationMono Nerd Font, add alacritty dotfiles 2026-05-15 22:18:31 +02:00
Fabio Scotto di Santolo
0b3f5e4f0c desktop: add polybar dotfiles 2026-05-15 20:24:32 +02:00
Fabio Scotto di Santolo
dfa1bd194f Added X11 compositor (picom) and configure background transparancy 2026-05-14 23:48:26 +02:00
Fabio Scotto di Santolo
5c510220a3 Fix nvidia driver version on desktop 2026-05-14 19:50:42 +02:00
Fabio Scotto di Santolo
c9b02d8793 desktop: add Thunderbird flatpak 2026-05-14 18:36:37 +02:00
Fabio Scotto di Santolo
712face3f3 Align README and AGENTS docs with current repository state
Remove all remaining Sway/Noctalia/Wayland references after their
removal from the playbook. Update topology and playbook composition
to reflect that both ikaros and nymph now run i3, drop the
profile_desktop_sway role row, remove the sway tag and any sway-tag
example. Update the dotfiles tree to include the actual subdirectories
(ubuntu, workstation_host_linux, workstation_dev_wsl). Document the
emptty XORG_SESSIONS_PATH whitelist and the nymph NVIDIA Optimus
overrides (GRUB cmdline, prime-run, WirePlumber camera priority).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 00:25:04 +02:00
Fabio Scotto di Santolo
1763a309ef claude: add local settings permissions 2026-05-14 00:19:10 +02:00
Fabio Scotto di Santolo
4854b1ae11 Rewrite GRUB cmdline NVIDIA param injection with grep+replace
Replace the slurp/set_fact Jinja-heavy approach (which was clobbering
pre-existing GRUB_CMDLINE_LINUX content) with a straightforward
sequence: grep to detect whether the line exists, lineinfile to
initialize an empty one when missing, then two replace tasks using a
tempered-greedy-token regex that appends each NVIDIA parameter only
when not already present. Idempotent and preserves any existing
content in GRUB_CMDLINE_LINUX.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 00:05:13 +02:00
Fabio Scotto di Santolo
5a3d32cb0e Rewrite GRUB cmdline merge using slurp + fact-based merge
The previous lineinfile-with-backrefs negative-lookahead regex was
not appending NVIDIA parameters when missing. Switch to a clearer
approach: slurp the file, extract the current GRUB_CMDLINE_LINUX
value, build a merged target value that appends missing NVIDIA
params, then write back the line. lineinfile sees no diff when the
target matches the current line, preserving idempotency.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 23:54:49 +02:00
Fabio Scotto di Santolo
fd07d6ad1f Append NVIDIA params to GRUB cmdline instead of overwriting
Previously the task hardcoded GRUB_CMDLINE_LINUX to a fixed string
containing nymph's rd.luks.uuid, rootflags and apparmor parameters,
clobbering whatever the host had. Switch to an idempotent
lineinfile-with-backrefs loop that appends nouveau.modeset=0 and
nvidia-drm.modeset=1 only when missing, preserving the existing
kernel cmdline. grub-mkconfig now runs only when the cmdline changed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 23:44:14 +02:00
Fabio Scotto di Santolo
bff3d542ef Deploy nymph WirePlumber camera config via host_i3_dotfiles
Consolidate the WirePlumber camera priority file under the same
host_i3_dotfiles mechanism used for autorandr, dropping the bespoke
copy task from profile_desktop_host/tasks/nymph.yml.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 22:41:33 +02:00
Fabio Scotto di Santolo
e9466b24cc Deploy nymph autorandr profiles via host_i3_dotfiles
The dual/solo autorandr profiles existed under dotfiles/nymph/ but
were never deployed (no host_i3_dotfiles entry). Mirror the ikaros
pattern so they land in ~/.config/autorandr/.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 22:36:25 +02:00
Fabio Scotto di Santolo
8e54448943 Restore nymph hardware and power management config
Re-add NVIDIA/Intel GPU packages, tlp/power-profiles-daemon, and
emptty error logging to host_vars/nymph.yml — these were dropped
when the Arch path was removed but are independent of Arch and
needed for nymph laptop hardware. Drop two orphaned Wayland/Sway
residues: kanshi config and the historical Sway cleanup script.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 22:27:51 +02:00
Fabio Scotto di Santolo
a755920fcf Restore minimal nymph host_vars for Void/i3
hostname was undefined after nymph.yml was deleted with the Arch path,
causing the profile_desktop_host include_tasks condition to fail.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 22:18:00 +02:00
Fabio Scotto di Santolo
43619b714f Remove remaining Arch references from profile_desktop_common
Drop the Arch-specific systemd SSH reload handler and remove
.config/systemd/user from the common dir creation loop (no longer
needed without the Arch path).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 21:59:44 +02:00
Fabio Scotto di Santolo
ef65841030 Remove orphaned systemd user service dotfiles
dotfiles/desktop/.config/systemd/user/ (emacs, rclone-pcloud,
ssh-agent, syncthing services) was deployed only via desktop_arch_dotfiles,
which was removed with the Arch path. The equivalent Void services live
in dotfiles/desktop/.config/service/ under Turnstile.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 21:56:45 +02:00
Fabio Scotto di Santolo
8dea4ec07d Fix rustup-init failing on fresh systems
~/.cargo/env does not exist before rustup-init runs — sourcing it
upfront caused the task to fail on clean installs. Switch to a plain
command invocation without the premature source.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 21:37:59 +02:00
Fabio Scotto di Santolo
36a8762e4d Remove Arch/nymph path, restore nymph as Void desktop
Delete all Arch-specific files (packages_arch role, profile_desktop_gnome
role, arch.yml group_vars, nymph.yml host_vars, arch dotfiles). Revert
nymph to the void group in inventory, remove the arch play from site.yml,
and restore profile_desktop_host/tasks/nymph.yml to its pre-Arch state
(GRUB + NVIDIA + prime-run). Preserve Void improvements introduced
alongside Arch work (desktop_void_dotfiles, desktop_void_source_tools,
profile_desktop_i3 dir additions, void-specific conditions).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 20:06:20 +02:00
Fabio Scotto di Santolo
ac0d779f0f Remove Sway from the playbook, keep Noctalia configs
Drop the profile_desktop_sway role (tasks, templates), all Sway
dotfiles, desktop_sway_* vars, and wayland-sessions emptty path.
Noctalia dotfiles are preserved and deployed via desktop_void_dotfiles
on Void hosts; noctalia_bar_monitors/noctalia_screen_overrides kept
as config vars. Only i3 remains as the Void desktop session.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 18:44:56 +02:00
Fabio Scotto di Santolo
e7570d3bd3 Replace gnome-console with ptyxis on Arch
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 11:45:02 +02:00
64 changed files with 1260 additions and 2268 deletions

View File

@@ -1,7 +1,16 @@
{ {
"permissions": { "permissions": {
"allow": [ "allow": [
"Bash(xargs ls -la)" "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 *)"
] ]
} }
} }

View File

@@ -1,6 +1,6 @@
# AGENTS.md # AGENTS.md
Ansible-driven personal infrastructure repo for Void/Arch desktops, Linux workstations, Windows+WSL, and an Ubuntu server. Ansible-driven personal infrastructure repo for Void desktops, Linux workstations, Windows+WSL, and an Ubuntu server.
## Source Of Truth ## Source Of Truth
- Main orchestration: `ansible/site.yml` - Main orchestration: `ansible/site.yml`
@@ -11,8 +11,7 @@ Ansible-driven personal infrastructure repo for Void/Arch desktops, Linux workst
- Codex config is rendered from `dotfiles/common/.codex/config.toml.j2` so `model_instructions_file` points to the deployed `~/.config/ai/bootstrap.md`. - Codex config is rendered from `dotfiles/common/.codex/config.toml.j2` so `model_instructions_file` points to the deployed `~/.config/ai/bootstrap.md`.
## Topology ## Topology
- Void desktops: `ikaros` - Void desktops: `ikaros`, `nymph`
- Arch desktops: `nymph`
- Native Linux workstations: `deadalus-ubuntu`, `deadalus-fedora` - Native Linux workstations: `deadalus-ubuntu`, `deadalus-fedora`
- Windows host + WSL dev: `deadalus-win`, `deadalus-wsl` - Windows host + WSL dev: `deadalus-win`, `deadalus-wsl`
- Ubuntu server: `prometheus` - Ubuntu server: `prometheus`
@@ -35,15 +34,13 @@ Ansible-driven personal infrastructure repo for Void/Arch desktops, Linux workst
- `ansible-lint ansible/roles` - `ansible-lint ansible/roles`
- `yamllint ansible/` - `yamllint ansible/`
- Host-focused dry runs: - Host-focused dry runs:
- Void desktop work: `ansible-playbook ansible/site.yml --limit ikaros --check --diff` - Void desktop work: `ansible-playbook ansible/site.yml --limit ikaros --check --diff` or `--limit nymph --check --diff`
- Arch desktop work: `ansible-playbook ansible/site.yml --limit nymph --check --diff`
- Ubuntu workstation: `ansible-playbook ansible/site.yml --limit deadalus-ubuntu --check --diff` - Ubuntu workstation: `ansible-playbook ansible/site.yml --limit deadalus-ubuntu --check --diff`
- Fedora workstation: `ansible-playbook ansible/site.yml --limit deadalus-fedora --check --diff` - Fedora workstation: `ansible-playbook ansible/site.yml --limit deadalus-fedora --check --diff`
- WSL dev: `ansible-playbook ansible/site.yml --limit deadalus-wsl --check --diff` - WSL dev: `ansible-playbook ansible/site.yml --limit deadalus-wsl --check --diff`
- Server: `ansible-playbook ansible/site.yml --limit prometheus --check --diff` - Server: `ansible-playbook ansible/site.yml --limit prometheus --check --diff`
- Focused checks: - 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`
- Arch GNOME desktop bootstrap on nymph: `ansible-playbook ansible/site.yml --limit nymph --tags packages,services,gnome --check --diff`
- Mail bootstrap: `sh -n scripts/bootstrap_mail.sh` and `shellcheck scripts/bootstrap_mail.sh` - 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)"` - 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` - Server compose render: `docker compose -f /opt/docker/server/docker-compose.yml config`
@@ -61,18 +58,11 @@ Ansible-driven personal infrastructure repo for Void/Arch desktops, Linux workst
- `.emacs.d` is deployed by a dedicated `profile_desktop_common` task tagged `emacs`. - `.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`. - 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/`. - Void user services are managed by `turnstile` and live under `dotfiles/desktop/.config/service/`.
- Arch user services are systemd user units under `dotfiles/desktop/.config/systemd/user/`.
- `ssh-agent` keeps the stable socket `~/.local/state/ssh-agent/socket`. - `ssh-agent` keeps the stable socket `~/.local/state/ssh-agent/socket`.
- Critical session entrypoints: - Critical session entrypoints:
- `dotfiles/desktop/.xinitrc` - `dotfiles/desktop/.xinitrc`
- `dotfiles/desktop/.local/bin/start-sway-session`
- Do not auto-restart `emptty` during playbook runs on active Void desktop hosts; restart it manually from another TTY/SSH session if needed. - 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 an Arch GNOME/GDM desktop; do not route it through Void/i3/Sway/emptty tasks. - `nymph` is an i3/X11 Void laptop with NVIDIA Optimus; host-specific tasks in `profile_desktop_host/tasks/nymph.yml` handle GRUB NVIDIA cmdline params, `prime-run` wrapper, and the WirePlumber camera priority config.
- `nymph` uses systemd-boot; keep loader entries and kernel cmdline in `ansible/inventory/host_vars/nymph.yml`.
- `profile_desktop_sway` owns the Sway session, Noctalia config rendering, and official plugin linking when a Sway desktop is explicitly enabled.
- 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.
- 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 ## Workstation / Windows Notes
- Native Linux workstation hosts can combine `workstation_host_linux` with an OS-specific dev group. - Native Linux workstation hosts can combine `workstation_host_linux` with an OS-specific dev group.

View File

@@ -31,8 +31,11 @@ infra/
│ ├── common/ │ ├── common/
│ ├── desktop/ │ ├── desktop/
│ ├── fedora/ │ ├── fedora/
│ ├── ubuntu/
│ ├── server/ │ ├── server/
│ ├── workstation/ │ ├── workstation/
│ ├── workstation_host_linux/
│ ├── workstation_dev_wsl/
│ ├── ikaros/ │ ├── ikaros/
│ └── nymph/ │ └── nymph/
@@ -70,7 +73,7 @@ Sistema operativo:
Sessioni desktop: Sessioni desktop:
- `ikaros`: i3 - `ikaros`: i3
- `nymph`: SwayFX - `nymph`: i3
Macchine: Macchine:
@@ -82,8 +85,8 @@ Queste macchine condividono la stessa configurazione base desktop e vengono mant
Lo stato attuale del profilo desktop include, tra le altre cose: Lo stato attuale del profilo desktop include, tra le altre cose:
- dotfiles comuni e desktop - dotfiles comuni e desktop
- sessione i3 su `ikaros` e sessione Sway su `nymph` - sessione i3 su entrambi gli host
- `emptty` con default host-specific per il desktop attivo su ogni host - `emptty` con default host-specific per il desktop attivo, con `XORG_SESSIONS_PATH` puntato a `/etc/emptty/xsessions` per esporre solo le sessioni esplicitamente whitelistate
- pacchetti Void Linux e servizi runit - pacchetti Void Linux e servizi runit
- `turnstile` per i servizi utente, inclusi `emacs` e `ssh-agent` - `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` - `ssh-agent` con socket stabile condiviso tra shell, SSH ed Emacs in `~/.local/state/ssh-agent/socket`
@@ -91,10 +94,9 @@ Lo stato attuale del profilo desktop include, tra le altre cose:
- `tmux` con plugin gestiti da TPM al bootstrap del profilo desktop - `tmux` con plugin gestiti da TPM al bootstrap del profilo desktop
- Flatpak con remoto Flathub - Flatpak con remoto Flathub
- GNOME Keyring e bootstrap della posta via script dedicato - GNOME Keyring e bootstrap della posta via script dedicato
- shell Noctalia su Sway su `nymph`, con plugin ufficiali per clipboard (`clipper`), polkit (`polkit-agent`), screenshot (`screenshot`) 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
- `udiskie` come backend per automount/LUKS su Sway, senza tray; la UI dei dispositivi removibili è demandata a `usb-drive-manager` - `autorandr` per profili monitor host-specifici (`nymph` ha profili `dual` e `solo`)
- `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` - 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
- monitor Noctalia e `screenOverrides` dichiarati in inventory (`noctalia_bar_monitors`, `noctalia_screen_overrides`) per host `nymph`
--- ---
@@ -270,7 +272,6 @@ I principali ruoli attualmente presenti sono:
| services_systemd | gestione servizi systemd | | services_systemd | gestione servizi systemd |
| profile_desktop_common | bootstrap desktop Void condiviso | | profile_desktop_common | bootstrap desktop Void condiviso |
| profile_desktop_i3 | sessione desktop i3 | | profile_desktop_i3 | sessione desktop i3 |
| profile_desktop_sway | sessione desktop Sway |
| profile_desktop_host | override desktop specifici per host | | profile_desktop_host | override desktop specifici per host |
| profile_workstation_dev_common | configurazione dev workstation condivisa | | profile_workstation_dev_common | configurazione dev workstation condivisa |
| profile_workstation_gnome | configurazione host workstation GNOME | | profile_workstation_gnome | configurazione host workstation GNOME |
@@ -288,7 +289,7 @@ Il playbook `ansible/site.yml` e attualmente composto da sette blocchi:
```text ```text
all:!workstation_host_windows -> dotfiles_common all:!workstation_host_windows -> dotfiles_common
void -> packages_void + services_runit + profile_desktop_common + profile_desktop_i3 + profile_desktop_sway + profile_desktop_host void -> packages_void + services_runit + profile_desktop_common + profile_desktop_i3 + profile_desktop_host
workstation_dev_ubuntu -> packages_ubuntu + services_systemd + profile_workstation_dev_common workstation_dev_ubuntu -> packages_ubuntu + services_systemd + profile_workstation_dev_common
workstation_dev_fedora -> packages_fedora + services_systemd + profile_workstation_dev_common workstation_dev_fedora -> packages_fedora + services_systemd + profile_workstation_dev_common
workstation_host_linux -> profile_workstation_gnome workstation_host_linux -> profile_workstation_gnome
@@ -316,7 +317,10 @@ dotfiles/
├── desktop ├── desktop
├── server ├── server
├── fedora ├── fedora
├── ubuntu
├── workstation ├── workstation
├── workstation_host_linux
├── workstation_dev_wsl
├── ikaros ├── ikaros
└── nymph └── nymph
``` ```
@@ -372,7 +376,7 @@ ansible-playbook ansible/site.yml
Allo stato attuale questo comando: Allo stato attuale questo comando:
- distribuisce i dotfiles comuni a tutti gli host - 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 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_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_dev_fedora` applica pacchetti Fedora, servizi systemd e profilo dev comune
- per `workstation_host_linux` applica il layer host Linux GNOME - per `workstation_host_linux` applica il layer host Linux GNOME
@@ -440,14 +444,13 @@ Allo stato attuale `ansible/site.yml` espone questi tag:
| `nvidia` | componenti NVIDIA desktop | desktop Void | | `nvidia` | componenti NVIDIA desktop | desktop Void |
| `packages` | installazione e aggiornamento pacchetti | tutti i profili | | `packages` | installazione e aggiornamento pacchetti | tutti i profili |
| `services` | gestione servizi runit/systemd/Windows | 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 | | `vscode` | installazione/configurazione VS Code | Fedora, host Linux, Windows |
| `wsl` | bootstrap e configurazione WSL | WSL, Windows | | `wsl` | bootstrap e configurazione WSL | WSL, Windows |
Esempi pratici: Esempi pratici:
```bash ```bash
ansible-playbook ansible/site.yml --limit nymph --tags dotfiles:desktop,sway --check --diff ansible-playbook ansible/site.yml --limit nymph --tags dotfiles:desktop,i3 --check --diff
ansible-playbook ansible/site.yml --limit deadalus-fedora --tags packages,vscode --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 ansible-playbook ansible/site.yml --limit prometheus --tags services,dotfiles:server --check --diff
``` ```

View File

@@ -1,160 +0,0 @@
---
arch_packages_base:
- 7zip
- archlinux-keyring
- avahi
- base-devel
- bluez
- clang
- cmake
- cups
- cups-filters
- cups-pk-helper
- fastfetch
- flatpak
- fuse3
- gcc
- gdb
- git-delta
- github-cli
- gnome-keyring
- go
- gvfs
- gvfs-mtp
- gvfs-smb
- imagemagick
- isync
- libsecret
- libtool
- linux
- linux-headers
- lm_sensors
- man-db
- man-pages
- msmtp
- networkmanager
- nodejs
- npm
- pavucontrol
- pipewire
- pipewire-alsa
- pipewire-jack
- pipewire-pulse
- pkgconf
- plocate
- podman
- podman-compose
- rclone
- sane
- sane-airscan
- seahorse
- simple-scan
- speech-dispatcher
- syncthing
- tealdeer
- tmux
- tree-sitter-cli
- ufw
- wireplumber
- xdotool
- yt-dlp
arch_desktop_common_packages:
- brightnessctl
- dex
- pinentry
- xdg-desktop-portal
- xdg-desktop-portal-gtk
- xdg-user-dirs
arch_desktop_gnome_packages:
- baobab
- gdm
- gnome-backgrounds
- gnome-calculator
- gnome-calendar
- gnome-characters
- gnome-clocks
- gnome-console
- gnome-control-center
- gnome-disk-utility
- gnome-font-viewer
- gnome-session
- gnome-settings-daemon
- gnome-shell
- gnome-shell-extensions
- gnome-tweaks
- gvfs-afc
- gvfs-dnssd
- gvfs-goa
- gvfs-gphoto2
- gvfs-nfs
- gvfs-onedrive
- gvfs-wsdd
- loupe
- mutter
- nautilus
- papers
- rygel
- showtime
- snapshot
- sushi
- xdg-desktop-portal-gnome
- xdg-user-dirs-gtk
arch_profile_packages:
- deluge
- dnsmasq
- edk2-ovmf
- emacs-wayland
- ffmpegthumbnailer
- firefox
- fontconfig
- freetype2
- gufw
- iproute2
- libvterm
- libx11
- libxft
- libvirt
- libreoffice-fresh
- meld
- mpv
- noto-fonts
- noto-fonts-emoji
- pdfarranger
- poppler
- poppler-glib
- qemu-desktop
- remmina
- ripgrep
- rsync
- ruff
- rustup
- texlive-basic
- texlive-binextra
- texlive-latex
- texlive-latexextra
- ttf-hack-nerd
- ttf-liberation
- ttf-nerd-fonts-symbols
- ctags
- uv
- virt-manager
- xournalpp
- zstd
enabled_services:
- NetworkManager
- avahi-daemon
- bluetooth
- cups
- libvirtd
- ufw
enabled_services_only:
- gdm
desktop_systemd_user_services:
- syncthing.service
- rclone-pcloud.service

View File

@@ -6,6 +6,7 @@ desktop_sessions_enabled:
desktop_default_session: i3 desktop_default_session: i3
desktop_default_session_env: xorg desktop_default_session_env: xorg
desktop_prompt_for_session: true
desktop_source_tools: desktop_source_tools:
- name: gf - name: gf
@@ -112,20 +113,6 @@ desktop_common_dotfiles:
dest: .ssh/config dest: .ssh/config
mode: "0600" mode: "0600"
desktop_arch_dotfiles:
- name: rclone pcloud systemd user service
src: .config/systemd/user/rclone-pcloud.service
dest: .config/systemd/user/rclone-pcloud.service
mode: "0644"
- name: syncthing systemd user service
src: .config/systemd/user/syncthing.service
dest: .config/systemd/user/syncthing.service
mode: "0644"
- name: MIME application defaults
src: .config/mimeapps.arch.list
dest: .config/mimeapps.list
mode: "0644"
desktop_emacs_dotfiles: desktop_emacs_dotfiles:
- name: Emacs config - name: Emacs config
src: .emacs.d/ src: .emacs.d/
@@ -149,41 +136,48 @@ desktop_i3_dotfiles:
src: .config/rofi/ src: .config/rofi/
dest: .config/rofi/ dest: .config/rofi/
mode: preserve 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 - name: .xinitrc
src: .xinitrc src: .xinitrc
dest: .xinitrc dest: .xinitrc
mode: "0644" mode: "0644"
desktop_sway_dotfiles: desktop_sway_dotfiles:
- name: Sway config - name: sway config
src: .config/sway/ src: .config/sway/
dest: .config/sway/ dest: .config/sway/
mode: preserve mode: preserve
- name: Sway wallpaper assets - name: dunst config
src: .config/i3/wallpapers/ src: .config/dunst/
dest: .config/sway/wallpapers/ dest: .config/dunst/
mode: preserve mode: preserve
- name: Sway session wrapper - name: rofi config
src: .local/bin/start-sway-session src: .config/rofi/
dest: .local/bin/start-sway-session dest: .config/rofi/
mode: "0755" mode: preserve
- name: Noctalia colors - name: waybar config
src: .config/noctalia/colors.json src: .config/waybar/
dest: .config/noctalia/colors.json dest: .config/waybar/
mode: "0644" mode: preserve
- name: Noctalia plugins - name: alacritty config
src: .config/noctalia/plugins.json src: .config/alacritty/
dest: .config/noctalia/plugins.json dest: .config/alacritty/
mode: "0644"
- name: Noctalia colorschemes
src: .config/noctalia/colorschemes/
dest: .config/noctalia/colorschemes/
mode: preserve mode: preserve
noctalia_bar_monitors:
- DP-1
noctalia_screen_overrides: []
desktop_flatpak_packages: desktop_flatpak_packages:
- be.alexandervanhee.gradia - be.alexandervanhee.gradia
@@ -194,6 +188,7 @@ desktop_flatpak_packages:
- com.spotify.Client - com.spotify.Client
- io.github.flattool.Warehouse - io.github.flattool.Warehouse
- org.telegram.desktop - org.telegram.desktop
- org.mozilla.Thunderbird
desktop_flatpak_extensions: desktop_flatpak_extensions:
- org.gtk.Gtk3theme.Yaru-Blue-dark//stable - org.gtk.Gtk3theme.Yaru-Blue-dark//stable

View File

@@ -63,7 +63,6 @@ void_packages_base:
- tealdeer - tealdeer
- tree-sitter-grammars - tree-sitter-grammars
- ufw - ufw
- xdotool
- void-repo-nonfree - void-repo-nonfree
- vpm - vpm
- vsv - vsv
@@ -115,10 +114,6 @@ desktop_void_dotfiles:
src: .bashrc.d/15-runit-desktop.sh src: .bashrc.d/15-runit-desktop.sh
dest: .bashrc.d/15-runit-desktop.sh dest: .bashrc.d/15-runit-desktop.sh
mode: "0644" mode: "0644"
- name: alacritty config
src: .config/alacritty/
dest: .config/alacritty/
mode: preserve
- name: GTK theme setup script - name: GTK theme setup script
src: .local/bin/setup-gtk-theme src: .local/bin/setup-gtk-theme
dest: .local/bin/setup-gtk-theme dest: .local/bin/setup-gtk-theme
@@ -137,9 +132,11 @@ desktop_void_dotfiles:
mode: "0755" mode: "0755"
desktop_common_packages: desktop_common_packages:
- blueman
- brightnessctl - brightnessctl
- dex - dex
- emptty - emptty
- network-manager-applet
- pinentry-emacs - pinentry-emacs
- pinentry-gtk - pinentry-gtk
- turnstile - turnstile
@@ -147,6 +144,7 @@ desktop_common_packages:
- xdg-desktop-portal - xdg-desktop-portal
- xdg-desktop-portal-gtk - xdg-desktop-portal-gtk
- xdg-user-dirs - xdg-user-dirs
- xfce-polkit
desktop_i3_packages: desktop_i3_packages:
- arandr - arandr
@@ -158,28 +156,39 @@ desktop_i3_packages:
- i3lock-color - i3lock-color
- i3status - i3status
- dunst - dunst
- network-manager-applet - picom
- polybar
- rofi - rofi
- scrot - scrot
- setxkbmap - setxkbmap
- blueman
- volumeicon - volumeicon
- xclip - xclip
- xfce-polkit
- xfce4-clipman-plugin - xfce4-clipman-plugin
- xfce4-screenshooter - xfce4-screenshooter
- xkbutils - xkbutils
- xorg-fonts - xorg-fonts
- xorg-minimal - xorg-minimal
- xss-lock - xss-lock
- xdotool
desktop_sway_packages: desktop_sway_packages:
- cliphist
- dunst
- flameshot
- grim - grim
- jq
- kanshi - kanshi
- rofi
- slurp - slurp
- swayfx - swayfx
- swaybg
- swayidle
- swaylock
- SwayOSD
- Waybar
- wl-clipboard - wl-clipboard
- xdg-desktop-portal-wlr - xdg-desktop-portal-wlr
- xorg-server-xwayland
profile_packages: profile_packages:
- alacritty - alacritty

View File

@@ -3,6 +3,7 @@ hostname: ikaros
desktop_sessions_enabled: desktop_sessions_enabled:
- i3 - i3
- sway
desktop_default_session: i3 desktop_default_session: i3
desktop_default_session_env: xorg desktop_default_session_env: xorg

View File

@@ -2,48 +2,43 @@
hostname: nymph hostname: nymph
desktop_sessions_enabled: desktop_sessions_enabled:
- gnome - i3
- sway
desktop_default_session: gnome desktop_default_session: i3
desktop_default_session_env: wayland desktop_default_session_env: xorg
desktop_emptty_session_error_logging: rotate
host_kernel_cmdline: >-
rd.luks.uuid=1e15d159-5d05-4a1f-9639-ac200dff9f9c rootflags=subvol=@
apparmor=1 security=apparmor nouveau.modeset=0 nvidia-drm.modeset=1
host_systemd_boot_esp_path: /boot
host_systemd_boot_default: arch.conf
host_systemd_boot_timeout: 3
host_systemd_boot_console_mode: max
host_systemd_boot_editor: false
host_systemd_boot_entries:
- filename: arch.conf
title: Arch Linux
linux: /vmlinuz-linux
initrds:
- /intel-ucode.img
- /initramfs-linux.img
options: "{{ host_kernel_cmdline }}"
- filename: arch-fallback.conf
title: Arch Linux fallback
linux: /vmlinuz-linux
initrds:
- /intel-ucode.img
- /initramfs-linux-fallback.img
options: "{{ host_kernel_cmdline }}"
host_packages: host_packages:
- intel-ucode - nvidia580
- intel-media-driver - linux-mainline-headers
- libva-intel-driver - mesa-dri
- mesa - vulkan-loader
- nvidia-open - mesa-vulkan-intel
- nvidia-settings - intel-video-accel
- nvidia-utils
- power-profiles-daemon - power-profiles-daemon
- tlp
- tlp-rdw
- upower - upower
- vulkan-icd-loader
- vulkan-intel
host_enabled_services: host_enabled_services:
- power-profiles-daemon - 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
mode: "0644"
- src: .config/sway/session-env
dest: .config/sway/session-env
mode: "0644"
- src: .config/kanshi/
dest: .config/kanshi/
mode: preserve

View File

@@ -5,10 +5,8 @@ all:
hosts: hosts:
ikaros: ikaros:
ansible_connection: local ansible_connection: local
nymph:
arch: ansible_connection: local
children:
arch_desktop:
desktop: desktop:
hosts: hosts:
@@ -57,11 +55,6 @@ all:
deadalus-fedora: deadalus-fedora:
ansible_connection: local ansible_connection: local
arch_desktop:
hosts:
nymph:
ansible_connection: local
workstation_host_linux: workstation_host_linux:
hosts: hosts:
deadalus-ubuntu: deadalus-ubuntu:

View File

@@ -1,27 +0,0 @@
---
- name: Synchronize and upgrade Arch Linux packages
tags: [packages]
community.general.pacman:
update_cache: true
upgrade: true
- name: Install packages on Arch Linux
tags: [packages]
community.general.pacman:
name: >-
{{
(
(common_packages | default([]))
+ (arch_packages_base | default([]))
+ (arch_desktop_common_packages | default([]))
+ (
(arch_desktop_gnome_packages | default([]))
if 'gnome' in (desktop_sessions_enabled | default([]))
else []
)
+ (arch_profile_packages | default([]))
+ (host_packages | default([]))
)
| unique
}}
state: present

View File

@@ -27,12 +27,3 @@
when: when:
- not ansible_check_mode - not ansible_check_mode
- "'void' in group_names" - "'void' in group_names"
- name: Reload SSH service with systemd
listen: Reload SSH service
ansible.builtin.systemd:
name: "{{ desktop_ssh_service_name | default('sshd') }}"
state: reloaded
when:
- not ansible_check_mode
- "'arch' in group_names"

View File

@@ -19,12 +19,11 @@
loop: loop:
- "{{ user_home }}/.config" - "{{ user_home }}/.config"
- "{{ user_home }}/.config/autostart" - "{{ user_home }}/.config/autostart"
- "{{ user_home }}/.config/systemd"
- "{{ user_home }}/.config/systemd/user"
- "{{ user_home }}/.bashrc.d" - "{{ user_home }}/.bashrc.d"
- "{{ user_home }}/.tmux" - "{{ user_home }}/.tmux"
- "{{ user_home }}/.tmux/bin" - "{{ user_home }}/.tmux/bin"
- "{{ user_home }}/.tmux/plugins" - "{{ user_home }}/.tmux/plugins"
- "{{ user_home }}/.ssh"
- name: Ensure user local bin directory exists - name: Ensure user local bin directory exists
tags: [dotfiles, dotfiles:desktop, dotfiles:host] tags: [dotfiles, dotfiles:desktop, dotfiles:host]
@@ -273,37 +272,10 @@
{{ {{
(desktop_common_dotfiles | default([])) (desktop_common_dotfiles | default([]))
+ ((desktop_void_dotfiles | default([])) if 'void' in group_names else []) + ((desktop_void_dotfiles | default([])) if 'void' in group_names else [])
+ ((desktop_arch_dotfiles | default([])) if 'arch' in group_names else [])
}} }}
loop_control: loop_control:
label: "{{ item.dest }}" label: "{{ item.dest }}"
- name: Ensure systemd user enablement directory exists
tags: [services, dotfiles, dotfiles:desktop]
ansible.builtin.file:
path: "{{ user_home }}/.config/systemd/user/default.target.wants"
state: directory
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "0755"
when:
- "'arch' in group_names"
- (desktop_systemd_user_services | default([])) | length > 0
- name: Enable desktop systemd user services
tags: [services, dotfiles, dotfiles:desktop]
ansible.builtin.file:
src: "{{ user_home }}/.config/systemd/user/{{ item }}"
dest: "{{ user_home }}/.config/systemd/user/default.target.wants/{{ item }}"
state: link
owner: "{{ username }}"
group: "{{ user_group }}"
force: true
loop: "{{ desktop_systemd_user_services | default([]) }}"
loop_control:
label: "{{ item }}"
when: "'arch' in group_names"
- name: Copy Emacs desktop dotfiles - name: Copy Emacs desktop dotfiles
tags: [dotfiles, dotfiles:desktop, emacs] tags: [dotfiles, dotfiles:desktop, emacs]
ansible.builtin.copy: ansible.builtin.copy:
@@ -492,6 +464,28 @@
- (desktop_flatpak_extensions | default([])) | length > 0 - (desktop_flatpak_extensions | default([])) | length > 0
- item | length > 0 - item | length > 0
- name: Ensure /etc/flatpak/overrides exists
tags: [packages, flatpak, theme]
ansible.builtin.file:
path: /etc/flatpak/overrides
state: directory
owner: root
group: root
mode: "0755"
when: (desktop_flatpak_packages | default([])) | length > 0
- name: Force dark GTK theme for Flatpak applications
tags: [packages, flatpak, theme]
ansible.builtin.copy:
dest: /etc/flatpak/overrides/global
content: |
[Environment]
GTK_THEME={{ desktop_flatpak_gtk_theme | default('Yaru-Blue-dark') }}
owner: root
group: root
mode: "0644"
when: (desktop_flatpak_packages | default([])) | length > 0
- name: Bootstrap rustup toolchain installer - name: Bootstrap rustup toolchain installer
tags: [packages] tags: [packages]
block: block:
@@ -500,27 +494,14 @@
path: "{{ user_home }}/.cargo/bin/rustc" path: "{{ user_home }}/.cargo/bin/rustc"
register: rustup_initialized register: rustup_initialized
- name: Run rustup-init with cargo env sourced (Void) - name: Run rustup-init
ansible.builtin.shell:
cmd: . ~/.cargo/env && rustup-init -y --no-modify-path
creates: "{{ user_home }}/.cargo/bin/rustc"
become_user: "{{ username }}"
environment:
HOME: "{{ user_home }}"
when:
- not rustup_initialized.stat.exists
- "'void' in group_names"
- name: Install Rust stable toolchain via rustup (Arch)
ansible.builtin.command: ansible.builtin.command:
cmd: rustup toolchain install stable cmd: rustup-init -y --no-modify-path
creates: "{{ user_home }}/.cargo/bin/rustc" creates: "{{ user_home }}/.cargo/bin/rustc"
become_user: "{{ username }}" become_user: "{{ username }}"
environment: environment:
HOME: "{{ user_home }}" HOME: "{{ user_home }}"
when: when: not rustup_initialized.stat.exists
- not rustup_initialized.stat.exists
- "'arch' in group_names"
- name: Ensure cargo env is sourced in shell profile - name: Ensure cargo env is sourced in shell profile
ansible.builtin.lineinfile: ansible.builtin.lineinfile:

View File

@@ -1,59 +0,0 @@
---
- name: Ensure GNOME desktop session is enabled for this profile
tags: [gnome]
ansible.builtin.assert:
that:
- "'gnome' in (desktop_sessions_enabled | default([]))"
fail_msg: >-
profile_desktop_gnome requires desktop_sessions_enabled to include gnome.
- name: Ensure systemd boots to the graphical target
tags: [services, gnome]
ansible.builtin.file:
src: /usr/lib/systemd/system/graphical.target
dest: /etc/systemd/system/default.target
state: link
force: true
owner: root
group: root
- name: Enable emacs user service from package
tags: [services, emacs]
ansible.builtin.systemd:
name: emacs.service
enabled: true
scope: user
become_user: "{{ username }}"
- name: Deploy gpg-agent.conf for GNOME (pinentry-gnome3, no ssh-support)
tags: [dotfiles, dotfiles:desktop, gnome]
ansible.builtin.copy:
src: "{{ playbook_dir }}/../dotfiles/desktop/.gnupg/gpg-agent.arch.conf"
dest: "{{ user_home }}/.gnupg/gpg-agent.conf"
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "0600"
- name: Enable gnome-keyring PAM auth hook for GDM
tags: [gnome]
ansible.builtin.lineinfile:
path: /etc/pam.d/gdm-password
insertafter: '^auth\s+include\s+system-local-login$'
line: "auth optional pam_gnome_keyring.so"
state: present
- name: Enable gnome-keyring PAM session hook for GDM
tags: [gnome]
ansible.builtin.lineinfile:
path: /etc/pam.d/gdm-password
insertafter: '^session\s+include\s+system-local-login$'
line: "session optional pam_gnome_keyring.so auto_start"
state: present
- name: Enable gnome-keyring PAM password hook for GDM
tags: [gnome]
ansible.builtin.lineinfile:
path: /etc/pam.d/gdm-password
insertafter: '^password\s+include\s+system-local-login$'
line: "password optional pam_gnome_keyring.so use_authtok"
state: present

View File

@@ -19,7 +19,7 @@
- "'i3' in (desktop_sessions_enabled | default([]))" - "'i3' in (desktop_sessions_enabled | default([]))"
- (host_i3_dotfiles | default([])) | length > 0 - (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] tags: [dotfiles, dotfiles:desktop, dotfiles:host, sway]
ansible.builtin.copy: ansible.builtin.copy:
src: "{{ playbook_dir }}/../dotfiles/{{ hostname }}/{{ item.src }}" src: "{{ playbook_dir }}/../dotfiles/{{ hostname }}/{{ item.src }}"
@@ -33,3 +33,4 @@
when: when:
- "'sway' in (desktop_sessions_enabled | default([]))" - "'sway' in (desktop_sessions_enabled | default([]))"
- (host_sway_dotfiles | default([])) | length > 0 - (host_sway_dotfiles | default([])) | length > 0

View File

@@ -1,75 +1,38 @@
--- ---
- name: Ensure systemd-boot loader entries directory exists - name: Check if GRUB_CMDLINE_LINUX line exists in /etc/default/grub
tags: [packages, nvidia]
ansible.builtin.file:
path: "{{ host_systemd_boot_esp_path }}/loader/entries"
state: directory
owner: root
group: root
mode: "0755"
when: host_systemd_boot_esp_path is defined
- name: Check whether systemd-boot is installed
tags: [packages, nvidia] tags: [packages, nvidia]
ansible.builtin.command: ansible.builtin.command:
argv: cmd: grep -E '^GRUB_CMDLINE_LINUX=' /etc/default/grub
- bootctl register: nymph_grub_cmdline_check
- "--esp-path={{ host_systemd_boot_esp_path }}"
- is-installed
register: nymph_systemd_boot_state
changed_when: false changed_when: false
failed_when: false failed_when: false
when:
- host_systemd_boot_esp_path is defined
- not ansible_check_mode
- name: Install systemd-boot - name: Initialize empty GRUB_CMDLINE_LINUX line if missing
tags: [packages, nvidia] tags: [packages, nvidia]
ansible.builtin.command: ansible.builtin.lineinfile:
argv: path: /etc/default/grub
- bootctl line: 'GRUB_CMDLINE_LINUX=""'
- "--esp-path={{ host_systemd_boot_esp_path }}" insertafter: '^GRUB_CMDLINE_LINUX_DEFAULT='
- install 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 changed_when: true
when: when: nymph_grub_cmdline_init is changed or nymph_grub_cmdline_append is changed
- host_systemd_boot_esp_path is defined
- not ansible_check_mode
- nymph_systemd_boot_state.rc | default(1) != 0
- name: Configure systemd-boot loader defaults
tags: [packages, nvidia]
ansible.builtin.copy:
dest: "{{ host_systemd_boot_esp_path }}/loader/loader.conf"
content: |
default {{ host_systemd_boot_default }}
timeout {{ host_systemd_boot_timeout | default(3) }}
console-mode {{ host_systemd_boot_console_mode | default('max') }}
editor {{ 'yes' if host_systemd_boot_editor | default(false) else 'no' }}
owner: root
group: root
mode: "0644"
when:
- host_systemd_boot_esp_path is defined
- host_systemd_boot_default is defined
- name: Configure systemd-boot Arch entries
tags: [packages, nvidia]
ansible.builtin.copy:
dest: "{{ host_systemd_boot_esp_path }}/loader/entries/{{ item.filename }}"
content: |-
title {{ item.title }}
linux {{ item.linux }}
{% for initrd in item.initrds | default([]) %}
initrd {{ initrd }}
{% endfor %}
options {{ item.options }}
owner: root
group: root
mode: "0644"
loop: "{{ host_systemd_boot_entries | default([]) }}"
loop_control:
label: "{{ item.filename }}"
when: host_systemd_boot_esp_path is defined
- name: Configure NVIDIA power management for hybrid graphics - name: Configure NVIDIA power management for hybrid graphics
tags: [packages, nvidia] tags: [packages, nvidia]
@@ -98,13 +61,3 @@
regexp: '^bindsym \$mod\+Return exec --no-startup-id /usr/bin/alacritty' 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' line: 'bindsym $mod+Return exec --no-startup-id ~/.local/bin/prime-run /usr/bin/alacritty'
when: "'i3' in (desktop_sessions_enabled | default([]))" 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

View File

@@ -12,6 +12,8 @@
- "{{ user_home }}/.config/dunst" - "{{ user_home }}/.config/dunst"
- "{{ user_home }}/.config/i3" - "{{ user_home }}/.config/i3"
- "{{ user_home }}/.config/i3blocks" - "{{ user_home }}/.config/i3blocks"
- "{{ user_home }}/.config/picom"
- "{{ user_home }}/.config/polybar"
- "{{ user_home }}/.config/rofi" - "{{ user_home }}/.config/rofi"
when: "'i3' in (desktop_sessions_enabled | default([]))" when: "'i3' in (desktop_sessions_enabled | default([]))"

View File

@@ -0,0 +1,4 @@
[preferred]
default=gtk
org.freedesktop.impl.portal.Screenshot=wlr
org.freedesktop.impl.portal.ScreenCast=wlr

View File

@@ -0,0 +1,5 @@
[Desktop Entry]
Name=Sway
Comment=SwayFX (Wayland)
Exec=/usr/local/bin/start-sway
Type=Application

View File

@@ -1,5 +1,5 @@
--- ---
- name: Ensure Sway config directories exist - name: Ensure sway config directories exist
tags: [dotfiles, dotfiles:desktop, sway] tags: [dotfiles, dotfiles:desktop, sway]
ansible.builtin.file: ansible.builtin.file:
path: "{{ item }}" path: "{{ item }}"
@@ -8,35 +8,56 @@
group: "{{ user_group }}" group: "{{ user_group }}"
mode: "0755" mode: "0755"
loop: loop:
- "{{ user_home }}/.config/alacritty"
- "{{ user_home }}/.config/dunst"
- "{{ user_home }}/.config/rofi"
- "{{ user_home }}/.config/sway" - "{{ user_home }}/.config/sway"
- "{{ user_home }}/.config/kanshi" - "{{ user_home }}/.config/sway/scripts"
- "{{ user_home }}/.config/sway/wallpapers"
- "{{ user_home }}/.config/waybar"
when: "'sway' in (desktop_sessions_enabled | default([]))" when: "'sway' in (desktop_sessions_enabled | default([]))"
- name: Ensure Noctalia config directories exist - name: Install allowed emptty Wayland sessions
tags: [dotfiles, dotfiles:desktop, sway, noctalia]
ansible.builtin.file:
path: "{{ item }}"
state: directory
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: Install Sway emptty session entry
tags: [packages, services, emptty, sway] tags: [packages, services, emptty, sway]
ansible.builtin.template: ansible.builtin.copy:
src: Sway.desktop.j2 src: sway.desktop
dest: /etc/emptty/wayland-sessions/Sway.desktop dest: /etc/emptty/wayland-sessions/sway.desktop
owner: root owner: root
group: root group: root
mode: "0644" mode: "0644"
when: "'sway' in (desktop_sessions_enabled | default([]))" when: "'sway' in (desktop_sessions_enabled | default([]))"
- name: Copy Sway desktop dotfiles - 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]
ansible.builtin.file:
path: /etc/xdg/xdg-desktop-portal
state: directory
owner: root
group: root
mode: "0755"
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
owner: root
group: root
mode: "0644"
when: "'sway' in (desktop_sessions_enabled | default([]))"
- name: Copy sway desktop dotfiles
tags: [dotfiles, dotfiles:desktop, sway] tags: [dotfiles, dotfiles:desktop, sway]
ansible.builtin.copy: ansible.builtin.copy:
src: "{{ playbook_dir }}/../dotfiles/desktop/{{ item.src }}" src: "{{ playbook_dir }}/../dotfiles/desktop/{{ item.src }}"
@@ -48,38 +69,3 @@
loop_control: loop_control:
label: "{{ item.dest }}" label: "{{ item.dest }}"
when: "'sway' in (desktop_sessions_enabled | default([]))" 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: 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([]))"

View File

@@ -1,142 +0,0 @@
---
- 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:
- polkit-agent
- screenshot
- usb-drive-manager

View File

@@ -1,8 +0,0 @@
[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;

View File

@@ -1,622 +0,0 @@
{
"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"
},
{
"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"}
],
"enableUserTheming": false
},
"ui": {
"boxBorderEnabled": false,
"fontDefault": "Sans Serif",
"fontDefaultScale": 1,
"fontFixed": "monospace",
"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"
}
}

View File

@@ -1,29 +0,0 @@
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 qs -c noctalia-shell ipc call plugin:screenshot takeScreenshot output
set $screenshot_region qs -c noctalia-shell ipc call plugin:screenshot takeScreenshot region
set $screenshot_window qs -c noctalia-shell ipc call plugin:screenshot takeScreenshot window
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 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

View File

@@ -19,11 +19,3 @@
loop_control: loop_control:
label: "{{ item }}" label: "{{ item }}"
- name: Enable systemd services without starting them
tags: [services, packages]
ansible.builtin.systemd:
name: "{{ item }}"
enabled: true
loop: "{{ enabled_services_only | default([]) }}"
loop_control:
label: "{{ item }}"

View File

@@ -28,16 +28,6 @@
- profile_desktop_sway - profile_desktop_sway
- profile_desktop_host - profile_desktop_host
- hosts: arch
become: true
roles:
- packages_arch
- services_systemd
- profile_desktop_common
- profile_desktop_gnome
- profile_desktop_host
- hosts: workstation_dev_ubuntu - hosts: workstation_dev_ubuntu
become: true become: true

View File

@@ -1,6 +1,6 @@
[window] [window]
padding = { x = 8, y = 8 } padding = { x = 8, y = 8 }
opacity = 1.0 opacity = 0.90
[font] [font]
normal = { family = "Hack Nerd Font", style = "Regular" } normal = { family = "Hack Nerd Font", style = "Regular" }

View File

@@ -4,11 +4,11 @@ follow = mouse
gap_size = 10 gap_size = 10
width = 360 width = 360
height = 120 height = (0, 120)
origin = top-right origin = top-right
offset = 20x40 offset = (20, 40)
font = Liberation Sans 10 font = LiterationMono Nerd Font 10
line_height = 2 line_height = 2
padding = 12 padding = 12
@@ -19,7 +19,7 @@ separator_height = 2
frame_width = 2 frame_width = 2
corner_radius = 8 corner_radius = 8
transparency = 0 transparency = 15
background = "#1f1f28" background = "#1f1f28"
foreground = "#eeeeee" foreground = "#eeeeee"

View File

@@ -3,7 +3,7 @@
set $mod Mod4 set $mod Mod4
set $refresh_i3status killall -SIGUSR1 i3status set $refresh_i3status killall -SIGUSR1 i3status
font pango:Liberation Mono 10 font pango:LiterationMono Nerd Font 10
# Start XDG autostart entries (.desktop), useful on Void for pipewire/wireplumber/etc. # Start XDG autostart entries (.desktop), useful on Void for pipewire/wireplumber/etc.
exec --no-startup-id dex --autostart --environment i3 exec --no-startup-id dex --autostart --environment i3
@@ -18,6 +18,12 @@ exec --no-startup-id pipewire
exec --no-startup-id pipewire-pulse exec --no-startup-id pipewire-pulse
exec --no-startup-id wireplumber 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 # Monitor configuration
exec --no-startup-id autorandr --persistent --change exec --no-startup-id autorandr --persistent --change
@@ -46,6 +52,12 @@ new_window pixel 2
new_float pixel 2 new_float pixel 2
hide_edge_borders none hide_edge_borders none
# Gaps (i3 >= 4.22)
gaps inner 10
gaps outer 4
smart_gaps on
smart_borders on
# vim-like directions # vim-like directions
set $left h set $left h
set $down j set $down j
@@ -150,6 +162,17 @@ set $ws8 "8"
set $ws9 "9" set $ws9 "9"
set $ws10 "10" 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+1 workspace number $ws1
bindsym $mod+2 workspace number $ws2 bindsym $mod+2 workspace number $ws2
bindsym $mod+3 workspace number $ws3 bindsym $mod+3 workspace number $ws3
@@ -199,24 +222,24 @@ mode "resize" {
bindsym $mod+r mode "resize" bindsym $mod+r mode "resize"
# i3bar + i3status # i3bar + i3status (disabilitato: ora gestito da polybar)
bar { # bar {
status_command i3blocks # status_command i3blocks
position bottom # position bottom
tray_output primary # tray_output primary
font pango:Liberation Mono 10 # font pango:Liberation Mono 10
#
colors { # colors {
background #1f1f28 # background #1f1f28
statusline #d0d0d0 # statusline #d0d0d0
separator #3a3a46 # separator #3a3a46
#
focused_workspace #4a90d9 #4a90d9 #ffffff # focused_workspace #4a90d9 #4a90d9 #ffffff
active_workspace #3a3a46 #2b2b36 #d0d0d0 # active_workspace #3a3a46 #2b2b36 #d0d0d0
inactive_workspace #1f1f28 #1f1f28 #9a9a9a # inactive_workspace #1f1f28 #1f1f28 #9a9a9a
urgent_workspace #c7162b #c7162b #ffffff # urgent_workspace #c7162b #c7162b #ffffff
} # }
} # }
client.focused #4a90d9 #4a90d9 #ffffff #4a90d9 #4a90d9 client.focused #4a90d9 #4a90d9 #ffffff #4a90d9 #4a90d9
client.focused_inactive #3a3a46 #2b2b36 #eeeeee #3a3a46 #3a3a46 client.focused_inactive #3a3a46 #2b2b36 #eeeeee #3a3a46 #3a3a46

View File

@@ -1,250 +0,0 @@
[Default Applications]
text/html=userapp-Firefox-91DVN3.desktop
x-scheme-handler/http=userapp-Firefox-91DVN3.desktop
x-scheme-handler/https=userapp-Firefox-91DVN3.desktop
x-scheme-handler/about=firefox.desktop
x-scheme-handler/unknown=firefox.desktop
application/pdf=com.github.xournalpp.xournalpp.desktop
application/json=emacs.desktop
application/json5=emacs.desktop
application/xml=emacs.desktop
application/xml-external-parsed-entity=emacs.desktop
application/x-shellscript=emacs.desktop
application/yaml=emacs.desktop
inode/directory=org.gnome.Nautilus.desktop
audio/aac=mpv.desktop
audio/flac=mpv.desktop
audio/m4a=mpv.desktop
audio/mp3=mpv.desktop
audio/mpeg=mpv.desktop
audio/mp4=mpv.desktop
audio/ogg=mpv.desktop
audio/opus=mpv.desktop
audio/vnd.wave=mpv.desktop
audio/wav=mpv.desktop
audio/webm=mpv.desktop
audio/x-aac=mpv.desktop
audio/x-m4a=mpv.desktop
audio/x-matroska=mpv.desktop
audio/x-mp3=mpv.desktop
audio/x-mpegurl=mpv.desktop
audio/x-ms-wma=mpv.desktop
audio/x-ogg=mpv.desktop
audio/x-pn-wav=mpv.desktop
audio/x-scpls=mpv.desktop
audio/x-wav=mpv.desktop
video/3gp=mpv.desktop
video/3gpp=mpv.desktop
video/3gpp2=mpv.desktop
video/avi=mpv.desktop
video/mp2t=mpv.desktop
video/mp4=mpv.desktop
video/mp4v-es=mpv.desktop
video/mpeg=mpv.desktop
video/ogg=mpv.desktop
video/quicktime=mpv.desktop
video/vnd.avi=mpv.desktop
video/webm=mpv.desktop
video/x-avi=mpv.desktop
video/x-flc=mpv.desktop
video/x-flic=mpv.desktop
video/x-flv=mpv.desktop
video/x-m4v=mpv.desktop
video/x-matroska=mpv.desktop
video/x-mpeg2=mpv.desktop
video/x-ms-asf=mpv.desktop
video/x-ms-wmv=mpv.desktop
video/x-msvideo=mpv.desktop
video/x-ogm+ogg=mpv.desktop
video/x-theora=mpv.desktop
video/x-theora+ogg=mpv.desktop
application/msword=libreoffice-writer.desktop
application/rtf=libreoffice-writer.desktop
application/vnd.ms-word=libreoffice-writer.desktop
application/vnd.ms-word.document.macroEnabled.12=libreoffice-writer.desktop
application/vnd.ms-word.template.macroEnabled.12=libreoffice-writer.desktop
application/vnd.oasis.opendocument.text=libreoffice-writer.desktop
application/vnd.oasis.opendocument.text-template=libreoffice-writer.desktop
application/vnd.openxmlformats-officedocument.wordprocessingml.document=libreoffice-writer.desktop
application/vnd.openxmlformats-officedocument.wordprocessingml.template=libreoffice-writer.desktop
application/x-doc=libreoffice-writer.desktop
text/rtf=libreoffice-writer.desktop
application/csv=libreoffice-calc.desktop
application/excel=libreoffice-calc.desktop
application/msexcel=libreoffice-calc.desktop
application/tab-separated-values=libreoffice-calc.desktop
application/vnd.ms-excel=libreoffice-calc.desktop
application/vnd.ms-excel.sheet.binary.macroEnabled.12=libreoffice-calc.desktop
application/vnd.ms-excel.sheet.macroEnabled.12=libreoffice-calc.desktop
application/vnd.ms-excel.template.macroEnabled.12=libreoffice-calc.desktop
application/vnd.oasis.opendocument.spreadsheet=libreoffice-calc.desktop
application/vnd.oasis.opendocument.spreadsheet-template=libreoffice-calc.desktop
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet=libreoffice-calc.desktop
application/vnd.openxmlformats-officedocument.spreadsheetml.template=libreoffice-calc.desktop
application/x-dos_ms_excel=libreoffice-calc.desktop
application/x-excel=libreoffice-calc.desktop
application/x-ms-excel=libreoffice-calc.desktop
application/x-msexcel=libreoffice-calc.desktop
text/comma-separated-values=libreoffice-calc.desktop
text/csv=libreoffice-calc.desktop
text/tab-separated-values=libreoffice-calc.desktop
text/x-comma-separated-values=libreoffice-calc.desktop
text/x-csv=libreoffice-calc.desktop
application/mspowerpoint=libreoffice-impress.desktop
application/vnd.ms-powerpoint=libreoffice-impress.desktop
application/vnd.ms-powerpoint.presentation.macroEnabled.12=libreoffice-impress.desktop
application/vnd.ms-powerpoint.slideshow.macroEnabled.12=libreoffice-impress.desktop
application/vnd.ms-powerpoint.template.macroEnabled.12=libreoffice-impress.desktop
application/vnd.oasis.opendocument.presentation=libreoffice-impress.desktop
application/vnd.oasis.opendocument.presentation-template=libreoffice-impress.desktop
application/vnd.openxmlformats-officedocument.presentationml.presentation=libreoffice-impress.desktop
application/vnd.openxmlformats-officedocument.presentationml.slide=libreoffice-impress.desktop
application/vnd.openxmlformats-officedocument.presentationml.slideshow=libreoffice-impress.desktop
application/vnd.openxmlformats-officedocument.presentationml.template=libreoffice-impress.desktop
text/markdown=emacs.desktop
text/org=emacs.desktop
text/plain=emacs.desktop
text/rust=emacs.desktop
text/x-c++hdr=emacs.desktop
text/x-c++src=emacs.desktop
text/x-chdr=emacs.desktop
text/x-csrc=emacs.desktop
text/x-emacs-lisp=emacs.desktop
text/x-go=emacs.desktop
text/x-java=emacs.desktop
text/x-makefile=emacs.desktop
text/x-patch=emacs.desktop
text/x-python=emacs.desktop
text/x-python3=emacs.desktop
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;
application/json5=emacs.desktop;
application/pdf=com.github.xournalpp.xournalpp.desktop;
application/xml=emacs.desktop;
application/xml-external-parsed-entity=emacs.desktop;
application/x-shellscript=emacs.desktop;
application/yaml=emacs.desktop;
text/plain=emacs.desktop;
inode/directory=org.gnome.Nautilus.desktop;
audio/aac=mpv.desktop;
audio/flac=mpv.desktop;
audio/m4a=mpv.desktop;
audio/mp3=mpv.desktop;
audio/mpeg=mpv.desktop;
audio/mp4=mpv.desktop;
audio/ogg=mpv.desktop;
audio/opus=mpv.desktop;
audio/vnd.wave=mpv.desktop;
audio/wav=mpv.desktop;
audio/webm=mpv.desktop;
audio/x-aac=mpv.desktop;
audio/x-m4a=mpv.desktop;
audio/x-matroska=mpv.desktop;
audio/x-mp3=mpv.desktop;
audio/x-mpegurl=mpv.desktop;
audio/x-ms-wma=mpv.desktop;
audio/x-ogg=mpv.desktop;
audio/x-pn-wav=mpv.desktop;
audio/x-scpls=mpv.desktop;
audio/x-wav=mpv.desktop;
video/3gp=mpv.desktop;
video/3gpp=mpv.desktop;
video/3gpp2=mpv.desktop;
video/avi=mpv.desktop;
video/mp2t=mpv.desktop;
video/mp4=mpv.desktop;
video/mp4v-es=mpv.desktop;
video/mpeg=mpv.desktop;
video/ogg=mpv.desktop;
video/quicktime=mpv.desktop;
video/vnd.avi=mpv.desktop;
video/webm=mpv.desktop;
video/x-avi=mpv.desktop;
video/x-flc=mpv.desktop;
video/x-flic=mpv.desktop;
video/x-flv=mpv.desktop;
video/x-m4v=mpv.desktop;
video/x-matroska=mpv.desktop;
video/x-mpeg2=mpv.desktop;
video/x-ms-asf=mpv.desktop;
video/x-ms-wmv=mpv.desktop;
video/x-msvideo=mpv.desktop;
video/x-ogm+ogg=mpv.desktop;
video/x-theora=mpv.desktop;
video/x-theora+ogg=mpv.desktop;
application/msword=libreoffice-writer.desktop;
application/rtf=libreoffice-writer.desktop;
application/vnd.ms-word=libreoffice-writer.desktop;
application/vnd.ms-word.document.macroEnabled.12=libreoffice-writer.desktop;
application/vnd.ms-word.template.macroEnabled.12=libreoffice-writer.desktop;
application/vnd.oasis.opendocument.text=libreoffice-writer.desktop;
application/vnd.oasis.opendocument.text-template=libreoffice-writer.desktop;
application/vnd.openxmlformats-officedocument.wordprocessingml.document=libreoffice-writer.desktop;
application/vnd.openxmlformats-officedocument.wordprocessingml.template=libreoffice-writer.desktop;
application/x-doc=libreoffice-writer.desktop;
text/rtf=libreoffice-writer.desktop;
application/csv=libreoffice-calc.desktop;
application/excel=libreoffice-calc.desktop;
application/msexcel=libreoffice-calc.desktop;
application/tab-separated-values=libreoffice-calc.desktop;
application/vnd.ms-excel=libreoffice-calc.desktop;
application/vnd.ms-excel.sheet.binary.macroEnabled.12=libreoffice-calc.desktop;
application/vnd.ms-excel.sheet.macroEnabled.12=libreoffice-calc.desktop;
application/vnd.ms-excel.template.macroEnabled.12=libreoffice-calc.desktop;
application/vnd.oasis.opendocument.spreadsheet=libreoffice-calc.desktop;
application/vnd.oasis.opendocument.spreadsheet-template=libreoffice-calc.desktop;
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet=libreoffice-calc.desktop;
application/vnd.openxmlformats-officedocument.spreadsheetml.template=libreoffice-calc.desktop;
application/x-dos_ms_excel=libreoffice-calc.desktop;
application/x-excel=libreoffice-calc.desktop;
application/x-ms-excel=libreoffice-calc.desktop;
application/x-msexcel=libreoffice-calc.desktop;
text/comma-separated-values=libreoffice-calc.desktop;
text/csv=libreoffice-calc.desktop;
text/tab-separated-values=libreoffice-calc.desktop;
text/x-comma-separated-values=libreoffice-calc.desktop;
text/x-csv=libreoffice-calc.desktop;
application/mspowerpoint=libreoffice-impress.desktop;
application/vnd.ms-powerpoint=libreoffice-impress.desktop;
application/vnd.ms-powerpoint.presentation.macroEnabled.12=libreoffice-impress.desktop;
application/vnd.ms-powerpoint.slideshow.macroEnabled.12=libreoffice-impress.desktop;
application/vnd.ms-powerpoint.template.macroEnabled.12=libreoffice-impress.desktop;
application/vnd.oasis.opendocument.presentation=libreoffice-impress.desktop;
application/vnd.oasis.opendocument.presentation-template=libreoffice-impress.desktop;
application/vnd.openxmlformats-officedocument.presentationml.presentation=libreoffice-impress.desktop;
application/vnd.openxmlformats-officedocument.presentationml.slide=libreoffice-impress.desktop;
application/vnd.openxmlformats-officedocument.presentationml.slideshow=libreoffice-impress.desktop;
application/vnd.openxmlformats-officedocument.presentationml.template=libreoffice-impress.desktop;
text/markdown=emacs.desktop;
text/org=emacs.desktop;
text/rust=emacs.desktop;
text/x-c++hdr=emacs.desktop;
text/x-c++src=emacs.desktop;
text/x-chdr=emacs.desktop;
text/x-csrc=emacs.desktop;
text/x-emacs-lisp=emacs.desktop;
text/x-go=emacs.desktop;
text/x-java=emacs.desktop;
text/x-makefile=emacs.desktop;
text/x-patch=emacs.desktop;
text/x-python=emacs.desktop;
text/x-python3=emacs.desktop;
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;

View File

@@ -1,18 +0,0 @@
{
"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"
}

View File

@@ -1,90 +0,0 @@
{
"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"
}
}
}
}

View File

@@ -1,90 +0,0 @@
{
"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"
}
}
}
}

View File

@@ -1,94 +0,0 @@
{
"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"
}
}
}

View File

@@ -1,28 +0,0 @@
{
"sources": [
{
"enabled": true,
"name": "Noctalia Plugins",
"url": "https://github.com/noctalia-dev/noctalia-plugins"
}
],
"states": {
"clipper": {
"enabled": true,
"sourceUrl": "https://github.com/noctalia-dev/noctalia-plugins"
},
"polkit-agent": {
"enabled": true,
"sourceUrl": "https://github.com/noctalia-dev/noctalia-plugins"
},
"screenshot": {
"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
}

View File

@@ -1,84 +0,0 @@
{
"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": {
"Text": {
"bg": "#555555",
"separator": "#000000",
"fg": "#e9e4f0"
},
"Image": {
"bg": "#e0b7c9",
"separator": "#000000",
"fg": "#20161f"
},
"Link": {
"bg": "#c7a1d8",
"separator": "#000000",
"fg": "#1a151f"
},
"Code": {
"bg": "#a984c4",
"separator": "#000000",
"fg": "#f3edf7"
},
"Color": {
"bg": "#a984c4",
"separator": "#000000",
"fg": "#f3edf7"
},
"Emoji": {
"bg": "#e0b7c9",
"separator": "#000000",
"fg": "#20161f"
},
"File": {
"bg": "#e9899d",
"separator": "#000000",
"fg": "#1e1418"
}
},
"enableTodoIntegration": true,
"autoOpenPinnedPanel": false,
"pincardsEnabled": true,
"notecardsEnabled": true,
"showCloseButton": true,
"closeOnBackgroundClick": true
}

View File

@@ -0,0 +1,57 @@
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; };
};

View File

@@ -0,0 +1,208 @@
[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

View File

@@ -0,0 +1,20 @@
#!/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

View File

@@ -2,7 +2,7 @@ configuration {
modi: "drun,run,window"; modi: "drun,run,window";
show-icons: true; show-icons: true;
icon-theme: "Yaru"; icon-theme: "Yaru";
font: "Liberation Sans 11"; font: "LiterationMono Nerd Font 11";
} }
* { * {

View File

@@ -1,64 +1,156 @@
# Sway / SwayFX config
set $mod Mod4 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 $terminal alacritty
set $fallback_terminal st
# Host-specific overrides # Workspaces (waybar formatta i numeri in romani via format-icons)
include ~/.config/sway/host.conf set $ws1 "1"
include ~/.config/sway/shell.conf 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"
font pango:Liberation Mono 10 # Input devices
input * {
# Input and output defaults
seat seat0 xcursor_theme Yaru 24
input type:keyboard {
xkb_layout us xkb_layout us
xkb_variant intl 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 2
blur_radius 5
shadows enable
default_dim_inactive 0.1
# Allow X11 applications
xwayland enable
# General behavior
focus_follows_mouse no focus_follows_mouse no
mouse_warping none mouse_warping none
floating_modifier $mod normal floating_modifier $mod
tiling_drag enable
# Borders # Borders
default_border pixel 2 default_border pixel 2
default_floating_border pixel 2 default_floating_border pixel 2
hide_edge_borders none hide_edge_borders none
# Floating rules # Gaps
for_window [app_id="Rofi"] floating enable gaps inner 10
for_window [app_id="org.pulseaudio.pavucontrol"] floating enable gaps outer 4
for_window [class="Pavucontrol"] floating enable smart_gaps on
for_window [app_id="nm-connection-editor"] floating enable smart_borders on
for_window [class="Nm-connection-editor"] floating enable
for_window [app_id="blueman-manager"] floating enable
for_window [class="Blueman-manager"] floating enable
set $left h # Per-host overrides (terminal wrapper, gaps tweaks, workspace→output bindings, …)
set $down j include ~/.config/sway/host.conf
set $up k
set $right l
# App launchers and window actions # Window rules
for_window [app_id="(?i)polkit"] floating enable
for_window [class="(?i)polkit"] floating enable
for_window [title="^Authentication Required"] floating enable
# Autostart — XDG and session services
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
bindsym $mod+Return exec $terminal bindsym $mod+Return exec $terminal
bindsym $mod+Shift+Return exec $fallback_terminal
# Emacs client
bindsym $mod+Shift+e exec emacsclient -c -n bindsym $mod+Shift+e exec emacsclient -c -n
bindsym $mod+d exec $menu
bindsym $mod+Shift+v exec $audio_panel # 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+Shift+f exec thunar bindsym $mod+Shift+f exec thunar
bindsym $mod+Shift+x exec $locker
# Manual lock screen
bindsym $mod+Shift+x exec ~/.config/sway/scripts/lockscreen
# Kill focused window
bindsym $mod+Shift+q kill bindsym $mod+Shift+q kill
# Screenshots # Screenshot
bindsym Print exec $screenshot_full # Print → flameshot GUI (annotations, save + clipboard via portal)
bindsym Shift+Print exec $screenshot_region # Shift+Print → grim+slurp region → clipboard
bindsym Alt+Print exec $screenshot_window # Alt+Print → grim focused output → clipboard
bindsym Print exec flameshot gui --path "$HOME/Pictures/Screenshots" --clipboard
bindsym Shift+Print exec ~/.config/sway/scripts/screenshot region
bindsym Alt+Print exec ~/.config/sway/scripts/screenshot output
# Focus # Focus
bindsym $mod+$left focus left bindsym $mod+$left focus left
bindsym $mod+$down focus down bindsym $mod+$down focus down
bindsym $mod+$up focus up bindsym $mod+$up focus up
bindsym $mod+$right focus right bindsym $mod+$right focus right
bindsym $mod+Left focus left bindsym $mod+Left focus left
bindsym $mod+Down focus down bindsym $mod+Down focus down
bindsym $mod+Up focus up bindsym $mod+Up focus up
@@ -69,20 +161,23 @@ bindsym $mod+Shift+$left move left
bindsym $mod+Shift+$down move down bindsym $mod+Shift+$down move down
bindsym $mod+Shift+$up move up bindsym $mod+Shift+$up move up
bindsym $mod+Shift+$right move right bindsym $mod+Shift+$right move right
bindsym $mod+Shift+Left move left bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right bindsym $mod+Shift+Right move right
# Split and layouts # Split
bindsym $mod+b split h bindsym $mod+b split h
bindsym $mod+v split v bindsym $mod+v split v
# Layouts
bindsym $mod+f fullscreen toggle bindsym $mod+f fullscreen toggle
bindsym $mod+s layout stacking bindsym $mod+s layout stacking
bindsym $mod+w layout tabbed bindsym $mod+w layout tabbed
bindsym $mod+e layout toggle split bindsym $mod+e layout toggle split
# Floating / focus mode
bindsym $mod+Shift+space floating toggle bindsym $mod+Shift+space floating toggle
bindsym $mod+space focus mode_toggle bindsym $mod+space focus mode_toggle
bindsym $mod+a focus parent bindsym $mod+a focus parent
@@ -91,32 +186,22 @@ bindsym $mod+a focus parent
bindsym $mod+Shift+minus move scratchpad bindsym $mod+Shift+minus move scratchpad
bindsym $mod+minus scratchpad show bindsym $mod+minus scratchpad show
# Volume and brightness OSD # Volume (via swayosd: aggiorna pactl + mostra OSD)
bindsym XF86AudioRaiseVolume exec $audio_raise bindsym XF86AudioRaiseVolume exec swayosd-client --output-volume raise
bindsym XF86AudioLowerVolume exec $audio_lower bindsym XF86AudioLowerVolume exec swayosd-client --output-volume lower
bindsym XF86AudioMute exec $audio_mute bindsym XF86AudioMute exec swayosd-client --output-volume mute-toggle
bindsym XF86AudioMicMute exec $audio_mic_mute bindsym XF86AudioMicMute exec swayosd-client --input-volume mute-toggle
bindsym XF86MonBrightnessUp exec $brightness_up # Brightness (via swayosd: aggiorna brightnessctl + mostra OSD)
bindsym XF86MonBrightnessDown exec $brightness_down bindsym XF86MonBrightnessUp exec swayosd-client --brightness raise
bindsym XF86MonBrightnessDown exec swayosd-client --brightness lower
# Media keys # Media keys
bindsym XF86AudioPlay exec playerctl play-pause bindsym XF86AudioPlay exec playerctl play-pause
bindsym XF86AudioNext exec playerctl next bindsym XF86AudioNext exec playerctl next
bindsym XF86AudioPrev exec playerctl previous bindsym XF86AudioPrev exec playerctl previous
# Workspaces # Workspace switch
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+1 workspace number $ws1
bindsym $mod+2 workspace number $ws2 bindsym $mod+2 workspace number $ws2
bindsym $mod+3 workspace number $ws3 bindsym $mod+3 workspace number $ws3
@@ -141,31 +226,31 @@ bindsym $mod+Shift+8 move container to workspace number $ws8
bindsym $mod+Shift+9 move container to workspace number $ws9 bindsym $mod+Shift+9 move container to workspace number $ws9
bindsym $mod+Shift+0 move container to workspace number $ws10 bindsym $mod+Shift+0 move container to workspace number $ws10
# Reload and power menu # Reload / exit
bindsym $mod+Shift+c reload bindsym $mod+Shift+c reload
bindsym $mod+Shift+r reload bindsym $mod+Shift+r reload
bindsym $mod+Shift+BackSpace exit bindsym $mod+Shift+BackSpace exec swaymsg exit
bindsym $mod+Shift+Escape exec $powermenu bindsym $mod+Shift+Escape exec ~/.config/sway/scripts/powermenu.sh
# Resize mode # Resize mode
mode "resize" { mode "resize" {
bindsym $left resize shrink 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 $down resize grow height 10 px or 10 ppt
bindsym $up resize shrink 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 $right resize grow width 10 px or 10 ppt
bindsym Left resize shrink 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 Down resize grow height 10 px or 10 ppt
bindsym Up resize shrink 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 Right resize grow width 10 px or 10 ppt
bindsym Return mode "default" bindsym Return mode "default"
bindsym Escape mode "default" bindsym Escape mode "default"
bindsym $mod+r mode "default" bindsym $mod+r mode "default"
} }
bindsym $mod+r mode "resize" bindsym $mod+r mode "resize"
# Client colors (border, background, text, indicator, child_border)
client.focused #4a90d9 #4a90d9 #ffffff #4a90d9 #4a90d9 client.focused #4a90d9 #4a90d9 #ffffff #4a90d9 #4a90d9
client.focused_inactive #3a3a46 #2b2b36 #eeeeee #3a3a46 #3a3a46 client.focused_inactive #3a3a46 #2b2b36 #eeeeee #3a3a46 #3a3a46
client.unfocused #2b2b36 #1f1f28 #bcbcbc #2b2b36 #2b2b36 client.unfocused #2b2b36 #1f1f28 #bcbcbc #2b2b36 #2b2b36

View File

@@ -1 +1,3 @@
# Host-specific Sway overrides live here. # 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.

View File

@@ -0,0 +1,17 @@
#!/bin/sh
exec swaylock \
--image "$HOME/.config/sway/wallpapers/maxresdefault.jpg" \
--scaling fill \
--indicator-idle-visible \
--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

View File

@@ -0,0 +1,29 @@
#!/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

View File

@@ -0,0 +1,40 @@
#!/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

View File

@@ -0,0 +1,53 @@
#!/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.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

View File

@@ -1,11 +0,0 @@
[Unit]
Description=Emacs daemon
[Service]
Type=simple
WorkingDirectory=%h
ExecStart=/usr/bin/emacs --fg-daemon
Restart=on-failure
[Install]
WantedBy=default.target

View File

@@ -1,12 +0,0 @@
[Unit]
Description=Mount pCloud remote with rclone
[Service]
Type=simple
ExecStart=/bin/sh -lc 'mkdir -p "$HOME/.cache/rclone/pcloud" "$HOME/Remotes/pCloud"; mountpoint -q "$HOME/Remotes/pCloud" && exit 0; exec /usr/bin/rclone mount pcloud: "$HOME/Remotes/pCloud" --config "$HOME/.config/rclone/rclone.conf" --cache-dir "$HOME/.cache/rclone/pcloud" --vfs-cache-mode writes --dir-cache-time 10m --poll-interval 1m --log-level INFO'
ExecStop=/bin/sh -lc 'mountpoint -q "$HOME/Remotes/pCloud" && exec /usr/bin/fusermount3 -u "$HOME/Remotes/pCloud" || exit 0'
Restart=on-failure
RestartSec=10
[Install]
WantedBy=default.target

View File

@@ -1,13 +0,0 @@
[Unit]
Description=SSH key agent
[Service]
Type=simple
Environment=SSH_AUTH_SOCK=%h/.local/state/ssh-agent/socket
ExecStartPre=/usr/bin/mkdir -p %h/.local/state/ssh-agent
ExecStartPre=/usr/bin/rm -f %h/.local/state/ssh-agent/socket
ExecStart=/usr/bin/ssh-agent -D -a %h/.local/state/ssh-agent/socket
Restart=on-failure
[Install]
WantedBy=default.target

View File

@@ -1,10 +0,0 @@
[Unit]
Description=Syncthing file synchronization
[Service]
Type=simple
ExecStart=/usr/bin/syncthing serve --no-browser --no-restart --logfile=default
Restart=on-failure
[Install]
WantedBy=default.target

View File

@@ -0,0 +1,101 @@
{
"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"],
"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
}
}

View File

@@ -0,0 +1,67 @@
* {
font-family: "LiterationMono Nerd Font", "Symbols Nerd Font Mono", monospace;
font-size: 10pt;
min-height: 0;
}
window#waybar {
background-color: #1f1f28;
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 {
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; }

View File

@@ -46,6 +46,7 @@
'misc/terminal 'misc/terminal
'misc/vcs 'misc/vcs
'misc/documents 'misc/documents
'misc/i3-config) 'misc/i3-config
'misc/xclip)
(message "...user configuration loaded") (message "...user configuration loaded")

View File

@@ -7,10 +7,10 @@
(load-theme 'nordic-night t)) (load-theme 'nordic-night t))
;; Setting default font ;; Setting default font
(set-frame-font "Liberation Mono 14" nil t) (set-frame-font "LiterationMono Nerd Font 14" nil t)
(add-to-list 'default-frame-alist (add-to-list 'default-frame-alist
'(font . "Liberation Mono-14")) '(font . "FantasqueSansM Nerd Font-14"))
;; Remove toolbar ;; Remove toolbar
(tool-bar-mode -1) (tool-bar-mode -1)

View File

@@ -0,0 +1,11 @@
;;; misc-xclip.el -*- lexical-binding: t; -*-
(use-package xclip
:ensure t
:config
(xclip-mode t)
(setq xclip-method 'xclip))
(provide 'xclip)
;;; xclip.el ends here

View File

@@ -1,3 +0,0 @@
pinentry-program /usr/bin/pinentry-gnome3
default-cache-ttl 600
max-cache-ttl 7200

View File

@@ -1,28 +1,27 @@
#!/bin/sh #!/bin/sh
[ -r /etc/profile ] && . /etc/profile [ -r /etc/profile ] && . /etc/profile
[ -r "$HOME/.profile" ] && . "$HOME/.profile" [ -r "$HOME/.profile" ] && . "$HOME/.profile"
[ -r "$HOME/.config/sway/session-env" ] && . "$HOME/.config/sway/session-env"
set -eu export XDG_CURRENT_DESKTOP=sway
export XDG_SESSION_DESKTOP=sway
session_name=sway
export XDG_CURRENT_DESKTOP="$session_name"
export XDG_SESSION_DESKTOP="$session_name"
export XDG_SESSION_TYPE=wayland export XDG_SESSION_TYPE=wayland
export MOZ_ENABLE_WAYLAND=1
export QT_QPA_PLATFORM='wayland;xcb'
export _JAVA_AWT_WM_NONREPARENTING=1
export SDL_VIDEODRIVER=wayland
export GDK_BACKEND='wayland,x11'
export SSH_AUTH_SOCK="$HOME/.local/state/ssh-agent/socket" export SSH_AUTH_SOCK="$HOME/.local/state/ssh-agent/socket"
if [ "${SWAY_UNSUPPORTED_GPU:-0}" = "1" ]; then # Per-host session environment (GPU / Wayland tuning, etc.)
set -- sway --unsupported-gpu [ -r "$HOME/.config/sway/session-env" ] && . "$HOME/.config/sway/session-env"
else
set -- sway
fi
exec dbus-run-session sh -eu -c ' exec dbus-run-session sh -eu -c '
umask 077 umask 077
printf "%s\n" "$DBUS_SESSION_BUS_ADDRESS" > "$HOME/.dbus-session-bus-address" printf "%s\n" "$DBUS_SESSION_BUS_ADDRESS" > "$HOME/.dbus-session-bus-address"
gpgconf --launch gpg-agent gpgconf --launch gpg-agent
"$HOME/.local/bin/update-turnstile-env" "$HOME/.local/bin/update-turnstile-env"
exec "$@" exec sway
' sh "$@" '

View File

@@ -6,13 +6,10 @@ if ! command -v turnstile-update-runit-env >/dev/null 2>&1; then
exit 0 exit 0
fi fi
turnstile-update-runit-env \ vars="DISPLAY XAUTHORITY DBUS_SESSION_BUS_ADDRESS SSH_AUTH_SOCK XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE"
DISPLAY \
WAYLAND_DISPLAY \ [ -n "${WAYLAND_DISPLAY:-}" ] && vars="$vars WAYLAND_DISPLAY"
XAUTHORITY \ [ -n "${SWAYSOCK:-}" ] && vars="$vars SWAYSOCK"
DBUS_SESSION_BUS_ADDRESS \
SSH_AUTH_SOCK \ # shellcheck disable=SC2086
XDG_CURRENT_DESKTOP \ turnstile-update-runit-env $vars >/dev/null 2>&1 || true
XDG_SESSION_DESKTOP \
XDG_SESSION_TYPE \
SWAYSOCK >/dev/null 2>&1 || true

View File

@@ -1,8 +1,7 @@
set $terminal ~/.local/bin/prime-run /usr/bin/alacritty set $terminal ~/.local/bin/prime-run /usr/bin/alacritty
gaps inner 10 # Multi-monitor profile switching (laptop standalone vs dock)
gaps outer 5 exec kanshi
corner_radius 10
workspace 1 output eDP-1 workspace 1 output eDP-1
workspace 2 output DP-1 workspace 2 output DP-1

View File

@@ -1,4 +1,6 @@
export LIBVA_DRIVER_NAME=iHD export LIBVA_DRIVER_NAME=iHD
export QT_QPA_PLATFORM=wayland
export QT_QPA_PLATFORMTHEME=qt6ct
export SWAY_UNSUPPORTED_GPU=1 export SWAY_UNSUPPORTED_GPU=1
export WLR_DRM_DEVICES=/dev/dri/card0:/dev/dri/card1 export WLR_DRM_DEVICES=/dev/dri/card0:/dev/dri/card1
export WLR_NO_HARDWARE_CURSORS=1 export WLR_NO_HARDWARE_CURSORS=1

103
scripts/cleanup-i3.sh Executable file
View File

@@ -0,0 +1,103 @@
#!/usr/bin/env sh
# Remove i3 session artifacts: exclusive packages, dotfiles and the emptty
# xsessions entry. Shared resources with sway (dunst, rofi, alacritty,
# xfce4-screenshooter) are left untouched.
set -eu
I3_PACKAGES="
arandr
autorandr
feh
i3
i3blocks
i3blocks-blocklets
i3lock-color
i3status
picom
polybar
scrot
setxkbmap
volumeicon
xclip
xfce4-clipman-plugin
xkbutils
xorg-fonts
xorg-minimal
xss-lock
xdotool
"
I3_DOTFILES="
$HOME/.config/i3
$HOME/.config/i3blocks
$HOME/.config/picom
$HOME/.config/polybar
$HOME/.xinitrc
"
EMPTTY_SESSION=/etc/emptty/xsessions/i3.desktop
confirm() {
printf '%s [y/N] ' "$1"
read -r answer
case "$answer" in
y|Y|yes|YES) return 0 ;;
*) return 1 ;;
esac
}
filter_installed() {
for p in $1; do
if xbps-query -p pkgver "$p" >/dev/null 2>&1; then
printf '%s\n' "$p"
fi
done
}
if ! command -v xbps-remove >/dev/null 2>&1; then
printf 'Error: xbps-remove not found (not a Void host?)\n' >&2
exit 1
fi
installed=$(filter_installed "$I3_PACKAGES" | tr '\n' ' ' | sed 's/ *$//')
printf '== i3 cleanup ==\n\n'
printf 'Packages to remove (installed only):\n'
if [ -n "$installed" ]; then
printf ' %s\n' $installed
else
printf ' (none)\n'
fi
printf '\nDotfiles to remove:\n'
for d in $I3_DOTFILES; do
if [ -e "$d" ] || [ -L "$d" ]; then
printf ' %s\n' "$d"
fi
done
printf '\nEmptty session entry:\n'
if [ -e "$EMPTTY_SESSION" ]; then
printf ' %s\n' "$EMPTTY_SESSION"
else
printf ' (absent)\n'
fi
printf '\nShared (NOT removed): dunst, rofi, alacritty, xfce4-screenshooter and their configs.\n\n'
confirm 'Proceed?' || { printf 'Aborted.\n'; exit 0; }
if [ -n "$installed" ]; then
# shellcheck disable=SC2086
sudo xbps-remove -Ry $installed
fi
for d in $I3_DOTFILES; do
if [ -e "$d" ] || [ -L "$d" ]; then
rm -rf -- "$d"
fi
done
if [ -e "$EMPTTY_SESSION" ]; then
sudo rm -f -- "$EMPTTY_SESSION"
fi
printf '\nDone.\n'

101
scripts/cleanup-sway.sh Executable file
View File

@@ -0,0 +1,101 @@
#!/usr/bin/env sh
# Remove sway session artifacts: exclusive packages, dotfiles, runtime state
# and the emptty wayland-sessions entry. Shared resources with i3 (dunst,
# rofi, alacritty, xfce4-screenshooter) are left untouched.
set -eu
SWAY_PACKAGES="
cliphist
flameshot
grim
jq
kanshi
slurp
swayfx
swaybg
swayidle
swaylock
SwayOSD
Waybar
wl-clipboard
xdg-desktop-portal-wlr
xorg-server-xwayland
"
SWAY_DOTFILES="
$HOME/.config/sway
$HOME/.config/waybar
$HOME/.cache/cliphist
"
SWAY_SYSTEM_FILES="
/etc/emptty/wayland-sessions/sway.desktop
/usr/local/bin/start-sway
"
confirm() {
printf '%s [y/N] ' "$1"
read -r answer
case "$answer" in
y|Y|yes|YES) return 0 ;;
*) return 1 ;;
esac
}
filter_installed() {
for p in $1; do
if xbps-query -p pkgver "$p" >/dev/null 2>&1; then
printf '%s\n' "$p"
fi
done
}
if ! command -v xbps-remove >/dev/null 2>&1; then
printf 'Error: xbps-remove not found (not a Void host?)\n' >&2
exit 1
fi
installed=$(filter_installed "$SWAY_PACKAGES" | tr '\n' ' ' | sed 's/ *$//')
printf '== sway cleanup ==\n\n'
printf 'Packages to remove (installed only):\n'
if [ -n "$installed" ]; then
printf ' %s\n' $installed
else
printf ' (none)\n'
fi
printf '\nDotfiles / state to remove:\n'
for d in $SWAY_DOTFILES; do
if [ -e "$d" ] || [ -L "$d" ]; then
printf ' %s\n' "$d"
fi
done
printf '\nSystem files to remove:\n'
for f in $SWAY_SYSTEM_FILES; do
if [ -e "$f" ] || [ -L "$f" ]; then
printf ' %s\n' "$f"
fi
done
printf '\nShared (NOT removed): dunst, rofi, alacritty, xfce4-screenshooter and their configs.\n\n'
confirm 'Proceed?' || { printf 'Aborted.\n'; exit 0; }
if [ -n "$installed" ]; then
# shellcheck disable=SC2086
sudo xbps-remove -Ry $installed
fi
for d in $SWAY_DOTFILES; do
if [ -e "$d" ] || [ -L "$d" ]; then
rm -rf -- "$d"
fi
done
for f in $SWAY_SYSTEM_FILES; do
if [ -e "$f" ] || [ -L "$f" ]; then
sudo rm -f -- "$f"
fi
done
printf '\nDone.\n'

View File

@@ -1,73 +0,0 @@
#!/usr/bin/env sh
set -eu
PACKAGES="
swayfx
kanshi
grim
grimshot
slurp
wl-clipboard
xdg-desktop-portal-wlr
cliphist
noctalia-shell
"
USER_PATHS="
$HOME/.config/sway
$HOME/.config/kanshi
$HOME/.config/noctalia
$HOME/.local/share/noctalia-plugins
$HOME/.local/bin/start-sway-session
"
SYSTEM_FILES="
/etc/emptty/wayland-sessions/Sway.desktop
/etc/xbps.d/noctalia.conf
"
check_host() {
if [ "$(hostname)" != "nymph" ]; then
printf 'Error: questo script è destinato solo a nymph (hostname attuale: %s)\n' "$(hostname)" >&2
exit 1
fi
}
remove_packages() {
printf 'Rimozione pacchetti swayfx+noctalia...\n'
# shellcheck disable=SC2086
sudo xbps-remove -Ry $PACKAGES
printf 'Rimozione dipendenze orfane...\n'
sudo xbps-remove -o
}
remove_user_configs() {
printf 'Rimozione configurazioni utente...\n'
for path in $USER_PATHS; do
if [ -e "$path" ]; then
rm -rf "$path"
printf ' rimosso: %s\n' "$path"
fi
done
}
remove_system_files() {
printf 'Rimozione file di sistema...\n'
for file in $SYSTEM_FILES; do
if [ -e "$file" ]; then
sudo rm -f "$file"
printf ' rimosso: %s\n' "$file"
fi
done
}
main() {
check_host
remove_packages
remove_user_configs
remove_system_files
printf 'Cleanup completato.\n'
}
main "$@"