diff --git a/ansible/inventory/group_vars/desktop.yml b/ansible/inventory/group_vars/desktop.yml index 4a38ad1..e0fa0c6 100644 --- a/ansible/inventory/group_vars/desktop.yml +++ b/ansible/inventory/group_vars/desktop.yml @@ -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 diff --git a/ansible/inventory/group_vars/void.yml b/ansible/inventory/group_vars/void.yml index 32660b8..ae181c1 100644 --- a/ansible/inventory/group_vars/void.yml +++ b/ansible/inventory/group_vars/void.yml @@ -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 diff --git a/ansible/inventory/host_vars/ikaros.yml b/ansible/inventory/host_vars/ikaros.yml index 6cc730e..685c2cd 100644 --- a/ansible/inventory/host_vars/ikaros.yml +++ b/ansible/inventory/host_vars/ikaros.yml @@ -3,6 +3,7 @@ hostname: ikaros desktop_sessions_enabled: - i3 + - sway desktop_default_session: i3 desktop_default_session_env: xorg diff --git a/ansible/inventory/host_vars/nymph.yml b/ansible/inventory/host_vars/nymph.yml index 8604813..9b06dc2 100644 --- a/ansible/inventory/host_vars/nymph.yml +++ b/ansible/inventory/host_vars/nymph.yml @@ -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 diff --git a/ansible/roles/packages_void/tasks/main.yml b/ansible/roles/packages_void/tasks/main.yml index 967ea4a..4f0f422 100644 --- a/ansible/roles/packages_void/tasks/main.yml +++ b/ansible/roles/packages_void/tasks/main.yml @@ -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 diff --git a/ansible/roles/profile_desktop_common/tasks/main.yml b/ansible/roles/profile_desktop_common/tasks/main.yml index 6b505e0..2983dc6 100644 --- a/ansible/roles/profile_desktop_common/tasks/main.yml +++ b/ansible/roles/profile_desktop_common/tasks/main.yml @@ -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: diff --git a/ansible/roles/profile_desktop_common/templates/emptty-conf.j2 b/ansible/roles/profile_desktop_common/templates/emptty-conf.j2 index c4f93df..c54363e 100644 --- a/ansible/roles/profile_desktop_common/templates/emptty-conf.j2 +++ b/ansible/roles/profile_desktop_common/templates/emptty-conf.j2 @@ -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 diff --git a/ansible/roles/profile_desktop_host/tasks/main.yml b/ansible/roles/profile_desktop_host/tasks/main.yml index 47cbd98..8bc0567 100644 --- a/ansible/roles/profile_desktop_host/tasks/main.yml +++ b/ansible/roles/profile_desktop_host/tasks/main.yml @@ -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 + diff --git a/ansible/roles/profile_desktop_sway/files/sway-portals.conf b/ansible/roles/profile_desktop_sway/files/sway-portals.conf new file mode 100644 index 0000000..d55d092 --- /dev/null +++ b/ansible/roles/profile_desktop_sway/files/sway-portals.conf @@ -0,0 +1,4 @@ +[preferred] +default=gtk +org.freedesktop.impl.portal.Screenshot=wlr +org.freedesktop.impl.portal.ScreenCast=wlr diff --git a/ansible/roles/profile_desktop_sway/files/sway.desktop b/ansible/roles/profile_desktop_sway/files/sway.desktop new file mode 100644 index 0000000..fe2e57a --- /dev/null +++ b/ansible/roles/profile_desktop_sway/files/sway.desktop @@ -0,0 +1,5 @@ +[Desktop Entry] +Name=Sway +Comment=SwayFX (Wayland) +Exec=/usr/local/bin/start-sway +Type=Application diff --git a/ansible/roles/profile_desktop_sway/tasks/main.yml b/ansible/roles/profile_desktop_sway/tasks/main.yml new file mode 100644 index 0000000..bc374e9 --- /dev/null +++ b/ansible/roles/profile_desktop_sway/tasks/main.yml @@ -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([]))" diff --git a/ansible/site.yml b/ansible/site.yml index 456f2ce..3a754ae 100644 --- a/ansible/site.yml +++ b/ansible/site.yml @@ -25,6 +25,7 @@ - services_runit - profile_desktop_common - profile_desktop_i3 + - profile_desktop_sway - profile_desktop_host - hosts: workstation_dev_ubuntu diff --git a/dotfiles/desktop/.config/noctalia/colors.json b/dotfiles/desktop/.config/noctalia/colors.json deleted file mode 100644 index 64d7b79..0000000 --- a/dotfiles/desktop/.config/noctalia/colors.json +++ /dev/null @@ -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" -} diff --git a/dotfiles/desktop/.config/noctalia/colorschemes/Lilac AMOLED/Lilac AMOLED.json b/dotfiles/desktop/.config/noctalia/colorschemes/Lilac AMOLED/Lilac AMOLED.json deleted file mode 100644 index 4c3508f..0000000 --- a/dotfiles/desktop/.config/noctalia/colorschemes/Lilac AMOLED/Lilac AMOLED.json +++ /dev/null @@ -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" - } - } - } -} diff --git a/dotfiles/desktop/.config/noctalia/colorschemes/Rosey AMOLED/Rosey AMOLED.json b/dotfiles/desktop/.config/noctalia/colorschemes/Rosey AMOLED/Rosey AMOLED.json deleted file mode 100644 index 5b8eedc..0000000 --- a/dotfiles/desktop/.config/noctalia/colorschemes/Rosey AMOLED/Rosey AMOLED.json +++ /dev/null @@ -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" - } - } - } -} diff --git a/dotfiles/desktop/.config/noctalia/colorschemes/Vesper/Vesper.json b/dotfiles/desktop/.config/noctalia/colorschemes/Vesper/Vesper.json deleted file mode 100644 index 07e9a84..0000000 --- a/dotfiles/desktop/.config/noctalia/colorschemes/Vesper/Vesper.json +++ /dev/null @@ -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" - } - } -} diff --git a/dotfiles/desktop/.config/noctalia/plugins.json b/dotfiles/desktop/.config/noctalia/plugins.json deleted file mode 100644 index 435db85..0000000 --- a/dotfiles/desktop/.config/noctalia/plugins.json +++ /dev/null @@ -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 -} diff --git a/dotfiles/desktop/.config/noctalia/plugins/clipper/settings.json b/dotfiles/desktop/.config/noctalia/plugins/clipper/settings.json deleted file mode 100644 index f0d0259..0000000 --- a/dotfiles/desktop/.config/noctalia/plugins/clipper/settings.json +++ /dev/null @@ -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 -} diff --git a/dotfiles/desktop/.config/sway/config b/dotfiles/desktop/.config/sway/config new file mode 100644 index 0000000..bb78f34 --- /dev/null +++ b/dotfiles/desktop/.config/sway/config @@ -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 diff --git a/dotfiles/desktop/.config/sway/host.conf b/dotfiles/desktop/.config/sway/host.conf new file mode 100644 index 0000000..9ae379d --- /dev/null +++ b/dotfiles/desktop/.config/sway/host.conf @@ -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. diff --git a/dotfiles/desktop/.config/sway/scripts/lockscreen b/dotfiles/desktop/.config/sway/scripts/lockscreen new file mode 100755 index 0000000..3199af7 --- /dev/null +++ b/dotfiles/desktop/.config/sway/scripts/lockscreen @@ -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 diff --git a/dotfiles/desktop/.config/sway/scripts/powermenu.sh b/dotfiles/desktop/.config/sway/scripts/powermenu.sh new file mode 100755 index 0000000..b842cff --- /dev/null +++ b/dotfiles/desktop/.config/sway/scripts/powermenu.sh @@ -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 diff --git a/dotfiles/desktop/.config/sway/scripts/screenshot b/dotfiles/desktop/.config/sway/scripts/screenshot new file mode 100755 index 0000000..c63481b --- /dev/null +++ b/dotfiles/desktop/.config/sway/scripts/screenshot @@ -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 diff --git a/dotfiles/desktop/.config/sway/scripts/setup-gtk-theme.sh b/dotfiles/desktop/.config/sway/scripts/setup-gtk-theme.sh new file mode 100755 index 0000000..21116f7 --- /dev/null +++ b/dotfiles/desktop/.config/sway/scripts/setup-gtk-theme.sh @@ -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" < "$HOME/.config/gtk-3.0/settings.ini" < "$HOME/.config/gtk-4.0/settings.ini" </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 diff --git a/dotfiles/desktop/.config/sway/wallpapers/maxresdefault.jpg b/dotfiles/desktop/.config/sway/wallpapers/maxresdefault.jpg new file mode 100755 index 0000000..b0da946 Binary files /dev/null and b/dotfiles/desktop/.config/sway/wallpapers/maxresdefault.jpg differ diff --git a/dotfiles/desktop/.config/sway/wallpapers/wallpaper-161664.jpg b/dotfiles/desktop/.config/sway/wallpapers/wallpaper-161664.jpg new file mode 100755 index 0000000..3296e5b Binary files /dev/null and b/dotfiles/desktop/.config/sway/wallpapers/wallpaper-161664.jpg differ diff --git a/dotfiles/desktop/.config/waybar/config.jsonc b/dotfiles/desktop/.config/waybar/config.jsonc new file mode 100644 index 0000000..00464a7 --- /dev/null +++ b/dotfiles/desktop/.config/waybar/config.jsonc @@ -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": "{calendar}" + }, + + "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 + } +} diff --git a/dotfiles/desktop/.config/waybar/style.css b/dotfiles/desktop/.config/waybar/style.css new file mode 100644 index 0000000..cee9a46 --- /dev/null +++ b/dotfiles/desktop/.config/waybar/style.css @@ -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; } diff --git a/dotfiles/desktop/.local/bin/start-sway b/dotfiles/desktop/.local/bin/start-sway new file mode 100755 index 0000000..d6c16d7 --- /dev/null +++ b/dotfiles/desktop/.local/bin/start-sway @@ -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 +' diff --git a/dotfiles/desktop/.local/bin/update-turnstile-env b/dotfiles/desktop/.local/bin/update-turnstile-env index ad3888f..303efff 100755 --- a/dotfiles/desktop/.local/bin/update-turnstile-env +++ b/dotfiles/desktop/.local/bin/update-turnstile-env @@ -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 diff --git a/dotfiles/nymph/.config/kanshi/config b/dotfiles/nymph/.config/kanshi/config new file mode 100644 index 0000000..a96e34a --- /dev/null +++ b/dotfiles/nymph/.config/kanshi/config @@ -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" +} diff --git a/dotfiles/nymph/.config/sway/host.conf b/dotfiles/nymph/.config/sway/host.conf new file mode 100644 index 0000000..7e3acb5 --- /dev/null +++ b/dotfiles/nymph/.config/sway/host.conf @@ -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 diff --git a/dotfiles/nymph/.config/sway/session-env b/dotfiles/nymph/.config/sway/session-env new file mode 100644 index 0000000..4a16e3a --- /dev/null +++ b/dotfiles/nymph/.config/sway/session-env @@ -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 diff --git a/scripts/cleanup-i3.sh b/scripts/cleanup-i3.sh new file mode 100755 index 0000000..cab98f1 --- /dev/null +++ b/scripts/cleanup-i3.sh @@ -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' diff --git a/scripts/cleanup-sway.sh b/scripts/cleanup-sway.sh new file mode 100755 index 0000000..f16e0c5 --- /dev/null +++ b/scripts/cleanup-sway.sh @@ -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'