15 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
29 changed files with 435 additions and 458 deletions

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
@@ -161,10 +162,6 @@ desktop_sway_dotfiles:
src: .config/sway/ src: .config/sway/
dest: .config/sway/ dest: .config/sway/
mode: preserve mode: preserve
- name: Sway session launcher
src: .local/bin/start-sway
dest: .local/bin/start-sway
mode: "0755"
- name: dunst config - name: dunst config
src: .config/dunst/ src: .config/dunst/
dest: .config/dunst/ dest: .config/dunst/
@@ -182,11 +179,6 @@ desktop_sway_dotfiles:
dest: .config/alacritty/ dest: .config/alacritty/
mode: preserve mode: preserve
noctalia_bar_monitors:
- DP-1
noctalia_screen_overrides: []
desktop_flatpak_packages: desktop_flatpak_packages:
- be.alexandervanhee.gradia - be.alexandervanhee.gradia
- ch.protonmail.protonmail-bridge - ch.protonmail.protonmail-bridge

View File

@@ -130,10 +130,6 @@ desktop_void_dotfiles:
src: .local/bin/update-turnstile-env src: .local/bin/update-turnstile-env
dest: .local/bin/update-turnstile-env dest: .local/bin/update-turnstile-env
mode: "0755" mode: "0755"
- name: Noctalia config
src: .config/noctalia/
dest: .config/noctalia/
mode: preserve
desktop_common_packages: desktop_common_packages:
- blueman - blueman
@@ -178,16 +174,19 @@ desktop_i3_packages:
desktop_sway_packages: desktop_sway_packages:
- cliphist - cliphist
- dunst - dunst
- flameshot
- grim
- jq
- kanshi - kanshi
- rofi - rofi
- slurp
- swayfx - swayfx
- swaybg - swaybg
- swayidle - swayidle
- swaylock-effects - swaylock
- SwayOSD - SwayOSD
- waybar - Waybar
- wl-clipboard - wl-clipboard
- xfce4-screenshooter
- xdg-desktop-portal-wlr - xdg-desktop-portal-wlr
- xorg-server-xwayland - xorg-server-xwayland

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

@@ -3,6 +3,7 @@ hostname: nymph
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
@@ -30,3 +31,14 @@ host_i3_dotfiles:
- src: .config/wireplumber/wireplumber.conf.d/60-camera-priority.conf - src: .config/wireplumber/wireplumber.conf.d/60-camera-priority.conf
dest: .config/wireplumber/wireplumber.conf.d/60-camera-priority.conf dest: .config/wireplumber/wireplumber.conf.d/60-camera-priority.conf
mode: "0644" 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

@@ -464,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:

View File

@@ -19,3 +19,18 @@
- "'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
tags: [dotfiles, dotfiles:desktop, dotfiles:host, sway]
ansible.builtin.copy:
src: "{{ playbook_dir }}/../dotfiles/{{ hostname }}/{{ item.src }}"
dest: "{{ user_home }}/{{ item.dest }}"
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "{{ item.mode }}"
loop: "{{ host_sway_dotfiles | default([]) }}"
loop_control:
label: "{{ item.dest }}"
when:
- "'sway' in (desktop_sessions_enabled | default([]))"
- (host_sway_dotfiles | default([])) | length > 0

View File

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

View File

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

View File

@@ -27,6 +27,36 @@
mode: "0644" mode: "0644"
when: "'sway' in (desktop_sessions_enabled | default([]))" when: "'sway' in (desktop_sessions_enabled | default([]))"
- name: Install Sway session launcher in /usr/local/bin
tags: [packages, services, sway]
ansible.builtin.copy:
src: "{{ playbook_dir }}/../dotfiles/desktop/.local/bin/start-sway"
dest: /usr/local/bin/start-sway
owner: root
group: root
mode: "0755"
when: "'sway' in (desktop_sessions_enabled | default([]))"
- name: Ensure /etc/xdg/xdg-desktop-portal exists
tags: [packages, services, sway, portal]
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 - name: Copy sway desktop dotfiles
tags: [dotfiles, dotfiles:desktop, sway] tags: [dotfiles, dotfiles:desktop, sway]
ansible.builtin.copy: ansible.builtin.copy:

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

@@ -10,17 +10,20 @@ set $down j
set $up k set $up k
set $right l set $right l
# Workspaces (etichette in numeri romani) # Default terminal (hosts can override via host.conf — e.g. nymph wraps it in prime-run)
set $ws1 "1: I" set $terminal alacritty
set $ws2 "2: II"
set $ws3 "3: III" # Workspaces (waybar formatta i numeri in romani via format-icons)
set $ws4 "4: IV" set $ws1 "1"
set $ws5 "5: V" set $ws2 "2"
set $ws6 "6: VI" set $ws3 "3"
set $ws7 "7: VII" set $ws4 "4"
set $ws8 "8: VIII" set $ws5 "5"
set $ws9 "9: IX" set $ws6 "6"
set $ws10 "10: X" set $ws7 "7"
set $ws8 "8"
set $ws9 "9"
set $ws10 "10"
# Input devices # Input devices
input * { input * {
@@ -32,7 +35,7 @@ input * {
seat * xcursor_theme Yaru 24 seat * xcursor_theme Yaru 24
# Outputs # Outputs
output * bg ~/.config/sway/wallpapers/wallpaper-161664.jpg fill output * bg ~/.config/sway/wallpapers/wallpaper-161664.jpg center
# SwayFX effects # SwayFX effects
corner_radius 8 corner_radius 8
@@ -49,13 +52,11 @@ xwayland enable
focus_follows_mouse no focus_follows_mouse no
mouse_warping none mouse_warping none
floating_modifier $mod floating_modifier $mod
tiling_drag modifier titlebar tiling_drag enable
# Borders # Borders
default_border pixel 2 default_border pixel 2
default_floating_border pixel 2 default_floating_border pixel 2
new_window pixel 2
new_float pixel 2
hide_edge_borders none hide_edge_borders none
# Gaps # Gaps
@@ -64,6 +65,14 @@ gaps outer 4
smart_gaps on smart_gaps on
smart_borders on smart_borders on
# Per-host overrides (terminal wrapper, gaps tweaks, workspace→output bindings, …)
include ~/.config/sway/host.conf
# Window rules
for_window [app_id="(?i)polkit"] floating enable
for_window [class="(?i)polkit"] floating enable
for_window [title="^Authentication Required"] floating enable
# Autostart — XDG and session services # Autostart — XDG and session services
exec dex --autostart --environment sway exec dex --autostart --environment sway
exec gnome-keyring-daemon --start --components=secrets exec gnome-keyring-daemon --start --components=secrets
@@ -76,7 +85,7 @@ exec pipewire-pulse
exec wireplumber exec wireplumber
# Status bar # Status bar
exec_always waybar exec waybar
# OSD daemon (volume/brightness/caps-lock) # OSD daemon (volume/brightness/caps-lock)
exec swayosd-server exec swayosd-server
@@ -87,16 +96,25 @@ exec /usr/libexec/xfce-polkit
exec nm-applet exec nm-applet
exec blueman-applet exec blueman-applet
exec udiskie exec udiskie
exec flameshot
# Clipboard manager (Wayland-native) # Clipboard manager (Wayland-native)
exec wl-paste --type text --watch cliphist store exec wl-paste --type text --watch cliphist store
exec wl-paste --type image --watch cliphist store exec wl-paste --type image --watch cliphist store
# Lock on suspend # Idle / lock policy
exec swayidle -w before-sleep '~/.config/sway/scripts/lockscreen' # 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 # Terminal
bindsym $mod+Return exec alacritty bindsym $mod+Return exec $terminal
# Emacs client # Emacs client
bindsym $mod+Shift+e exec emacsclient -c -n bindsym $mod+Shift+e exec emacsclient -c -n
@@ -119,10 +137,13 @@ bindsym $mod+Shift+x exec ~/.config/sway/scripts/lockscreen
# Kill focused window # Kill focused window
bindsym $mod+Shift+q kill bindsym $mod+Shift+q kill
# Screenshot (xfce4-screenshooter via xdg-desktop-portal-wlr) # Screenshot
bindsym Print exec xfce4-screenshooter # Print → flameshot GUI (annotations, save + clipboard via portal)
bindsym Shift+Print exec xfce4-screenshooter -r # Shift+Print → grim+slurp region → clipboard
bindsym Alt+Print exec xfce4-screenshooter -w # 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

View File

@@ -0,0 +1,3 @@
# 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

@@ -1,12 +1,9 @@
#!/bin/sh #!/bin/sh
exec swaylock-effects \ exec swaylock \
--image "$HOME/.config/sway/wallpapers/wallpaper-161664.jpg" \ --image "$HOME/.config/sway/wallpapers/maxresdefault.jpg" \
--scaling fill \ --scaling fill \
--clock \ --indicator-idle-visible \
--indicator \
--effect-blur 7x5 \
--fade-in 0.3 \
--ring-color 2f4058 \ --ring-color 2f4058 \
--inside-color 1f1f28 \ --inside-color 1f1f28 \
--line-color 00000000 \ --line-color 00000000 \

View File

@@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
choice="$(printf "⏻ Shutdown\n Reboot\n Logout\n Lock\n⏾ Suspend" \ choice="$(printf "⏻ Shutdown\n Reboot\n Logout\n Lock\n⏾ Suspend" \
| rofi -dmenu \ | rofi -dmenu \
-i \ -i \
-p "Power" \ -p "Power" \

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

View File

@@ -5,8 +5,8 @@
"spacing": 4, "spacing": 4,
"modules-left": ["sway/workspaces"], "modules-left": ["sway/workspaces"],
"modules-center": ["clock"], "modules-center": [],
"modules-right": ["cpu", "memory", "disk", "temperature", "backlight", "network", "pulseaudio", "battery", "tray"], "modules-right": ["cpu", "memory", "disk", "temperature", "backlight", "network", "pulseaudio", "battery", "tray", "clock"],
"sway/workspaces": { "sway/workspaces": {
"disable-scroll": true, "disable-scroll": true,
@@ -31,7 +31,7 @@
"clock": { "clock": {
"interval": 60, "interval": 60,
"format": "{:%Y-%m-%d %H:%M}", "format": "{:%Y-%m-%d %H:%M}",
"tooltip-format": "<tt>{calendar}</tt>" "tooltip-format": "<tt>{calendar}</tt>"
}, },
@@ -74,9 +74,9 @@
"pulseaudio": { "pulseaudio": {
"format": "{icon} {volume}%", "format": "{icon} {volume}%",
"format-muted": " muted", "format-muted": " muted",
"format-bluetooth": "{icon} {volume}% ", "format-bluetooth": "{icon} {volume}% ",
"format-icons": { "default": ["", "", ""] }, "format-icons": { "default": ["", "", ""] },
"on-click": "swayosd-client --output-volume mute-toggle", "on-click": "swayosd-client --output-volume mute-toggle",
"on-click-right": "pavucontrol" "on-click-right": "pavucontrol"
}, },

View File

@@ -57,7 +57,7 @@ window#waybar {
#network { color: #4a90d9; } #network { color: #4a90d9; }
#network.disconnected { color: #3a3a46; } #network.disconnected { color: #3a3a46; }
#pulseaudio { color: #7dcfff; } #pulseaudio { color: #7dcfff; }
#pulseaudio.muted { color: #3a3a46; } #pulseaudio.muted { color: #8e8e9a; }
#battery { color: #d0d0d0; } #battery { color: #d0d0d0; }
#battery.charging { color: #9ec07c; } #battery.charging { color: #9ec07c; }
#battery.warning { color: #e0af68; } #battery.warning { color: #e0af68; }

View File

@@ -15,6 +15,9 @@ 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"
# Per-host session environment (GPU / Wayland tuning, etc.)
[ -r "$HOME/.config/sway/session-env" ] && . "$HOME/.config/sway/session-env"
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"

View File

@@ -0,0 +1,17 @@
profile solo {
output DP-1 disable
output DP-2 disable
output HDMI-A-1 disable
output HDMI-A-2 disable
output eDP-1 enable mode 1920x1080 position 0,0
exec swaymsg "workspace 1, move workspace to output eDP-1; workspace 2, move workspace to output eDP-1; workspace 3, move workspace to output eDP-1; workspace 4, move workspace to output eDP-1; workspace 5, move workspace to output eDP-1; workspace 6, move workspace to output eDP-1; workspace 7, move workspace to output eDP-1; workspace 8, move workspace to output eDP-1; workspace 9, move workspace to output eDP-1; workspace 10, move workspace to output eDP-1"
}
profile dual {
output DP-2 disable
output HDMI-A-1 disable
output HDMI-A-2 disable
output eDP-1 enable mode 1920x1080 position 0,0
output DP-1 enable mode 3440x1440@100Hz position 1920,0
exec swaymsg "workspace 1, move workspace to output eDP-1; workspace 2, move workspace to output DP-1; workspace 3, move workspace to output DP-1; workspace 4, move workspace to output DP-1; workspace 5, move workspace to output DP-1; workspace 6, move workspace to output DP-1; workspace 7, move workspace to output DP-1; workspace 8, move workspace to output DP-1; workspace 9, move workspace to output DP-1; workspace 10, move workspace to output DP-1"
}

View File

@@ -0,0 +1,15 @@
set $terminal ~/.local/bin/prime-run /usr/bin/alacritty
# Multi-monitor profile switching (laptop standalone vs dock)
exec kanshi
workspace 1 output eDP-1
workspace 2 output DP-1
workspace 3 output DP-1
workspace 4 output DP-1
workspace 5 output DP-1
workspace 6 output DP-1
workspace 7 output DP-1
workspace 8 output DP-1
workspace 9 output DP-1
workspace 10 output DP-1

View File

@@ -0,0 +1,6 @@
export LIBVA_DRIVER_NAME=iHD
export QT_QPA_PLATFORM=wayland
export QT_QPA_PLATFORMTHEME=qt6ct
export SWAY_UNSUPPORTED_GPU=1
export WLR_DRM_DEVICES=/dev/dri/card0:/dev/dri/card1
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'