16 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
35 changed files with 1028 additions and 428 deletions

View File

@@ -6,6 +6,7 @@ desktop_sessions_enabled:
desktop_default_session: i3
desktop_default_session_env: xorg
desktop_prompt_for_session: true
desktop_source_tools:
- name: gf
@@ -156,10 +157,27 @@ desktop_i3_dotfiles:
dest: .xinitrc
mode: "0644"
noctalia_bar_monitors:
- DP-1
noctalia_screen_overrides: []
desktop_sway_dotfiles:
- name: sway config
src: .config/sway/
dest: .config/sway/
mode: preserve
- name: dunst config
src: .config/dunst/
dest: .config/dunst/
mode: preserve
- name: rofi config
src: .config/rofi/
dest: .config/rofi/
mode: preserve
- name: waybar config
src: .config/waybar/
dest: .config/waybar/
mode: preserve
- name: alacritty config
src: .config/alacritty/
dest: .config/alacritty/
mode: preserve
desktop_flatpak_packages:
- be.alexandervanhee.gradia

View File

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

View File

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

View File

@@ -3,6 +3,7 @@ hostname: nymph
desktop_sessions_enabled:
- i3
- sway
desktop_default_session: i3
desktop_default_session_env: xorg
@@ -30,3 +31,14 @@ host_i3_dotfiles:
- 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

@@ -61,6 +61,11 @@
if 'i3' in (desktop_sessions_enabled | default([]))
else []
)
+ (
(desktop_sway_packages | default([]))
if 'sway' in (desktop_sessions_enabled | default([]))
else []
)
+ (host_packages | default([]))
)
| unique

View File

@@ -246,6 +246,7 @@
mode: "0755"
loop:
- /etc/emptty/xsessions
- /etc/emptty/wayland-sessions
when: "'void' in group_names"
- name: Configure emptty
@@ -463,6 +464,28 @@
- (desktop_flatpak_extensions | default([])) | 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
tags: [packages]
block:

View File

@@ -10,6 +10,7 @@ DEFAULT_SESSION_ENV={{ desktop_default_session_env | default('') }}
DBUS_LAUNCH=false
XINITRC_LAUNCH=true
XORG_SESSIONS_PATH=/etc/emptty/xsessions
WAYLAND_SESSIONS_PATH=/etc/emptty/wayland-sessions
VERTICAL_SELECTION=true
IDENTIFY_ENVS=true
SELECT_LAST_USER=global

View File

@@ -19,3 +19,18 @@
- "'i3' in (desktop_sessions_enabled | default([]))"
- (host_i3_dotfiles | default([])) | length > 0
- name: Copy host-specific sway dotfiles
tags: [dotfiles, dotfiles:desktop, dotfiles:host, sway]
ansible.builtin.copy:
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

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

View File

@@ -0,0 +1,71 @@
---
- name: Ensure sway config directories exist
tags: [dotfiles, dotfiles:desktop, sway]
ansible.builtin.file:
path: "{{ item }}"
state: directory
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "0755"
loop:
- "{{ user_home }}/.config/alacritty"
- "{{ user_home }}/.config/dunst"
- "{{ user_home }}/.config/rofi"
- "{{ user_home }}/.config/sway"
- "{{ user_home }}/.config/sway/scripts"
- "{{ user_home }}/.config/sway/wallpapers"
- "{{ user_home }}/.config/waybar"
when: "'sway' in (desktop_sessions_enabled | default([]))"
- name: Install allowed emptty Wayland sessions
tags: [packages, services, emptty, sway]
ansible.builtin.copy:
src: sway.desktop
dest: /etc/emptty/wayland-sessions/sway.desktop
owner: root
group: root
mode: "0644"
when: "'sway' in (desktop_sessions_enabled | default([]))"
- name: Install Sway session launcher in /usr/local/bin
tags: [packages, services, sway]
ansible.builtin.copy:
src: "{{ playbook_dir }}/../dotfiles/desktop/.local/bin/start-sway"
dest: /usr/local/bin/start-sway
owner: root
group: root
mode: "0755"
when: "'sway' in (desktop_sessions_enabled | default([]))"
- name: Ensure /etc/xdg/xdg-desktop-portal exists
tags: [packages, services, sway, portal]
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]
ansible.builtin.copy:
src: "{{ playbook_dir }}/../dotfiles/desktop/{{ item.src }}"
dest: "{{ user_home }}/{{ item.dest }}"
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "{{ item.mode }}"
loop: "{{ desktop_sway_dotfiles | default([]) }}"
loop_control:
label: "{{ item.dest }}"
when: "'sway' in (desktop_sessions_enabled | default([]))"

View File

@@ -25,6 +25,7 @@
- services_runit
- profile_desktop_common
- profile_desktop_i3
- profile_desktop_sway
- profile_desktop_host
- hosts: workstation_dev_ubuntu

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,259 @@
# Sway / SwayFX config
set $mod Mod4
font pango:LiterationMono Nerd Font 10
# vim-like directions
set $left h
set $down j
set $up k
set $right l
# Default terminal (hosts can override via host.conf — e.g. nymph wraps it in prime-run)
set $terminal alacritty
# Workspaces (waybar formatta i numeri in romani via format-icons)
set $ws1 "1"
set $ws2 "2"
set $ws3 "3"
set $ws4 "4"
set $ws5 "5"
set $ws6 "6"
set $ws7 "7"
set $ws8 "8"
set $ws9 "9"
set $ws10 "10"
# Input devices
input * {
xkb_layout us
xkb_variant intl
}
# Cursor
seat * xcursor_theme Yaru 24
# Outputs
output * bg ~/.config/sway/wallpapers/wallpaper-161664.jpg center
# SwayFX effects
corner_radius 8
blur enable
blur_passes 2
blur_radius 5
shadows enable
default_dim_inactive 0.1
# Allow X11 applications
xwayland enable
# General behavior
focus_follows_mouse no
mouse_warping none
floating_modifier $mod
tiling_drag enable
# Borders
default_border pixel 2
default_floating_border pixel 2
hide_edge_borders none
# Gaps
gaps inner 10
gaps outer 4
smart_gaps on
smart_borders on
# Per-host overrides (terminal wrapper, gaps tweaks, workspace→output bindings, …)
include ~/.config/sway/host.conf
# Window rules
for_window [app_id="(?i)polkit"] floating enable
for_window [class="(?i)polkit"] floating enable
for_window [title="^Authentication Required"] floating enable
# 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
# Emacs client
bindsym $mod+Shift+e exec emacsclient -c -n
# Launcher
bindsym $mod+d exec "rofi -show drun -theme ~/.config/rofi/config.rasi"
# Clipboard history picker
bindsym $mod+c exec "cliphist list | rofi -dmenu -theme ~/.config/rofi/config.rasi | cliphist decode | wl-copy"
# Audio panel control
bindsym $mod+Shift+v exec pavucontrol
# File manager
bindsym $mod+Shift+f exec thunar
# Manual lock screen
bindsym $mod+Shift+x exec ~/.config/sway/scripts/lockscreen
# Kill focused window
bindsym $mod+Shift+q kill
# Screenshot
# Print → flameshot GUI (annotations, save + clipboard via portal)
# Shift+Print → grim+slurp region → clipboard
# 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
bindsym $mod+$left focus left
bindsym $mod+$down focus down
bindsym $mod+$up focus up
bindsym $mod+$right focus right
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right
# Move windows
bindsym $mod+Shift+$left move left
bindsym $mod+Shift+$down move down
bindsym $mod+Shift+$up move up
bindsym $mod+Shift+$right move right
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right
# Split
bindsym $mod+b split h
bindsym $mod+v split v
# Layouts
bindsym $mod+f fullscreen toggle
bindsym $mod+s layout stacking
bindsym $mod+w layout tabbed
bindsym $mod+e layout toggle split
# Floating / focus mode
bindsym $mod+Shift+space floating toggle
bindsym $mod+space focus mode_toggle
bindsym $mod+a focus parent
# Scratchpad
bindsym $mod+Shift+minus move scratchpad
bindsym $mod+minus scratchpad show
# Volume (via swayosd: aggiorna pactl + mostra OSD)
bindsym XF86AudioRaiseVolume exec swayosd-client --output-volume raise
bindsym XF86AudioLowerVolume exec swayosd-client --output-volume lower
bindsym XF86AudioMute exec swayosd-client --output-volume mute-toggle
bindsym XF86AudioMicMute exec swayosd-client --input-volume mute-toggle
# Brightness (via swayosd: aggiorna brightnessctl + mostra OSD)
bindsym XF86MonBrightnessUp exec swayosd-client --brightness raise
bindsym XF86MonBrightnessDown exec swayosd-client --brightness lower
# Media keys
bindsym XF86AudioPlay exec playerctl play-pause
bindsym XF86AudioNext exec playerctl next
bindsym XF86AudioPrev exec playerctl previous
# Workspace switch
bindsym $mod+1 workspace number $ws1
bindsym $mod+2 workspace number $ws2
bindsym $mod+3 workspace number $ws3
bindsym $mod+4 workspace number $ws4
bindsym $mod+5 workspace number $ws5
bindsym $mod+6 workspace number $ws6
bindsym $mod+7 workspace number $ws7
bindsym $mod+8 workspace number $ws8
bindsym $mod+9 workspace number $ws9
bindsym $mod+0 workspace number $ws10
bindsym $mod+comma workspace prev
bindsym $mod+period workspace next
bindsym $mod+Shift+1 move container to workspace number $ws1
bindsym $mod+Shift+2 move container to workspace number $ws2
bindsym $mod+Shift+3 move container to workspace number $ws3
bindsym $mod+Shift+4 move container to workspace number $ws4
bindsym $mod+Shift+5 move container to workspace number $ws5
bindsym $mod+Shift+6 move container to workspace number $ws6
bindsym $mod+Shift+7 move container to workspace number $ws7
bindsym $mod+Shift+8 move container to workspace number $ws8
bindsym $mod+Shift+9 move container to workspace number $ws9
bindsym $mod+Shift+0 move container to workspace number $ws10
# Reload / exit
bindsym $mod+Shift+c reload
bindsym $mod+Shift+r reload
bindsym $mod+Shift+BackSpace exec swaymsg exit
bindsym $mod+Shift+Escape exec ~/.config/sway/scripts/powermenu.sh
# Resize mode
mode "resize" {
bindsym $left resize shrink width 10 px or 10 ppt
bindsym $down resize grow height 10 px or 10 ppt
bindsym $up resize shrink height 10 px or 10 ppt
bindsym $right resize grow width 10 px or 10 ppt
bindsym Left resize shrink width 10 px or 10 ppt
bindsym Down resize grow height 10 px or 10 ppt
bindsym Up resize shrink height 10 px or 10 ppt
bindsym Right resize grow width 10 px or 10 ppt
bindsym Return mode "default"
bindsym Escape mode "default"
bindsym $mod+r mode "default"
}
bindsym $mod+r mode "resize"
# Client colors (border, background, text, indicator, child_border)
client.focused #4a90d9 #4a90d9 #ffffff #4a90d9 #4a90d9
client.focused_inactive #3a3a46 #2b2b36 #eeeeee #3a3a46 #3a3a46
client.unfocused #2b2b36 #1f1f28 #bcbcbc #2b2b36 #2b2b36
client.urgent #c7162b #c7162b #ffffff #c7162b #c7162b
client.placeholder #1f1f28 #1f1f28 #bcbcbc #1f1f28 #1f1f28
client.background #1f1f28

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

@@ -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

@@ -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

@@ -0,0 +1,27 @@
#!/bin/sh
[ -r /etc/profile ] && . /etc/profile
[ -r "$HOME/.profile" ] && . "$HOME/.profile"
export XDG_CURRENT_DESKTOP=sway
export XDG_SESSION_DESKTOP=sway
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"
# 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 '
umask 077
printf "%s\n" "$DBUS_SESSION_BUS_ADDRESS" > "$HOME/.dbus-session-bus-address"
gpgconf --launch gpg-agent
"$HOME/.local/bin/update-turnstile-env"
exec sway
'

View File

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

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'