diff options
| -rwxr-xr-x | archsetup | 31 | ||||
| -rw-r--r-- | dotfiles/common/.config/calibre/viewer-webengine.json | 82 | ||||
| -rw-r--r-- | dotfiles/common/.config/calibre/viewer.json | 51 | ||||
| -rw-r--r-- | dotfiles/hyprland/.config/hypr/hyprland.conf | 1 | ||||
| -rwxr-xr-x | dotfiles/hyprland/.local/bin/hypr-refocus-scratchpad | 24 |
5 files changed, 146 insertions, 43 deletions
@@ -159,8 +159,8 @@ errors_encountered=0 # Installation steps (single source of truth for show_status and main execution) # display_server and window_manager steps are conditional based on $desktop_env STEPS=(intro prerequisites create_user user_customizations aur_installer - essential_services display_server window_manager desktop_environment developer_workstation - supplemental_software boot_ux) + essential_services display_server window_manager desktop_environment gaming + developer_workstation supplemental_software boot_ux) ### Cleanup Trap # Ensures tmpfs is unmounted if script exits unexpectedly @@ -1710,6 +1710,33 @@ desktop_environment() { (systemctl enable cups.service >> "$logfile" 2>&1) || error_warn "$action" "$?" } +### Gaming +gaming() { + display "title" "Gaming" + + # 32-bit graphics support (required for most Steam games) + action="32-bit Graphics Libraries" && display "subtitle" "$action" + pacman_install lib32-mesa + pacman_install lib32-vulkan-radeon # AMD (matches install_gpu_drivers) + pacman_install lib32-vulkan-icd-loader + pacman_install vulkan-icd-loader + + # Performance tools + action="Performance Tools" && display "subtitle" "$action" + pacman_install gamemode # Feral GameMode (CPU governor, GPU perf) + pacman_install lib32-gamemode # 32-bit support for Steam games + pacman_install mangohud # FPS/performance overlay + pacman_install lib32-mangohud # 32-bit overlay for Steam games + + # Steam + action="Steam" && display "subtitle" "$action" + pacman_install steam + + # Enable gamemode service for user + action="enabling gamemode for user" && display "task" "$action" + sudo -u "$username" systemctl --user enable gamemoded.service >> "$logfile" 2>&1 || error_warn "$action" "$?" +} + ### Developer Workstation developer_workstation() { diff --git a/dotfiles/common/.config/calibre/viewer-webengine.json b/dotfiles/common/.config/calibre/viewer-webengine.json index dcd1405..c06652f 100644 --- a/dotfiles/common/.config/calibre/viewer-webengine.json +++ b/dotfiles/common/.config/calibre/viewer-webengine.json @@ -1,50 +1,50 @@ { "geometry-of-main_window_geometry": { "frame_geometry": { - "height": 981, - "width": 1504, + "height": 1314, + "width": 1828, "x": 0, - "y": 22 + "y": 0 }, "full_screened": false, "geometry": { - "height": 981, - "width": 1504, + "height": 1314, + "width": 1828, "x": 0, - "y": 22 + "y": 0 }, - "maximized": false, + "maximized": true, "normal_geometry": { - "height": 981, - "width": 1504, + "height": 1314, + "width": 1828, "x": 0, - "y": 22 + "y": 0 }, "qt": { "__class__": "bytearray", - "__value__": "AdnQywADAAAAAAAAAAAAFgAABd8AAAPqAAAAAAAAABYAAAXfAAAD6gAAAAAAAAAABeAAAAAAAAAAFgAABd8AAAPq" + "__value__": "AdnQywADAAAAAAAAAAAAAAAAByMAAAUhAAAAAAAAAAAAAAcjAAAFIQAAAAACAAAADXAAAAAAAAAAAAAAByMAAAUh" }, "screen": { - "depth": 24, - "device_pixel_ratio": 1.5, + "depth": 32, + "device_pixel_ratio": 1.0, "geometry_in_logical_pixels": { - "height": 1003, - "width": 1504, + "height": 1440, + "width": 3440, "x": 0, "y": 0 }, "index_in_screens_list": 0, - "manufacturer": "", - "model": "", - "name": "eDP-1", + "manufacturer": "Dell Inc.", + "model": "DELL U3419W", + "name": "DP-4", "serial": "", "size_in_logical_pixels": { - "height": 1003, - "width": 1504 + "height": 1440, + "width": 3440 }, "virtual_geometry": { - "height": 1003, - "width": 1504, + "height": 1440, + "width": 3440, "x": 0, "y": 0 } @@ -66,7 +66,7 @@ }, "main_window_state": { "__class__": "bytearray", - "__value__": "AAAA/wAAAAH9AAAAAgAAAAAAAAAAAAAAAPwCAAAAAvsAAAAQAHQAbwBjAC0AZABvAGMAawAAAAAA/////wAAAIsA////+wAAABYAcwBlAGEAcgBjAGgALQBkAG8AYwBrAAAAAAD/////AAAAnAD///8AAAABAAABeAAAA9X8AgAAAAT7AAAAFgBsAG8AbwBrAHUAcAAtAGQAbwBjAGsAAAAAAAAAA9UAAACGAP////sAAAAcAGIAbwBvAGsAbQBhAHIAawBzAC0AZABvAGMAawAAAAAAAAAD1QAAAPcA////+wAAABwAaQBuAHMAcABlAGMAdABvAHIALQBkAG8AYwBrAAAAAAD/////AAAAFAD////7AAAAHgBoAGkAZwBoAGwAaQBnAGgAdABzAC0AZABvAGMAawAAAAAA/////wAAANoA////AAAF4AAAA9UAAAAEAAAABAAAAAgAAAAI/AAAAAEAAAAAAAAAAQAAAB4AYQBjAHQAaQBvAG4AcwBfAHQAbwBvAGwAYgBhAHICAAAAAP////8AAAAAAAAAAA==" + "__value__": "AAAA/wAAAAH9AAAAAgAAAAAAAAAAAAAAAPwCAAAAAvsAAAAQAHQAbwBjAC0AZABvAGMAawAAAAAA/////wAAAIUA////+wAAABYAcwBlAGEAcgBjAGgALQBkAG8AYwBrAAAAAAD/////AAAAkwD///8AAAABAAABeAAAA9X8AgAAAAT7AAAAFgBsAG8AbwBrAHUAcAAtAGQAbwBjAGsAAAAAAAAAA9UAAAB6AP////sAAAAcAGIAbwBvAGsAbQBhAHIAawBzAC0AZABvAGMAawAAAAAAAAAD1QAAAOUA////+wAAABwAaQBuAHMAcABlAGMAdABvAHIALQBkAG8AYwBrAAAAAAD/////AAAAEQD////7AAAAHgBoAGkAZwBoAGwAaQBnAGgAdABzAC0AZABvAGMAawAAAAAA/////wAAAM4A////AAAHJAAABSIAAAAEAAAABAAAAAgAAAAI/AAAAAEAAAAAAAAAAQAAAB4AYQBjAHQAaQBvAG4AcwBfAHQAbwBvAGwAYgBhAHICAAAAAP////8AAAAAAAAAAA==" }, "old_prefs_migrated": true, "session_data": { @@ -108,6 +108,24 @@ "standalone_recently_opened": [ { "authors": [ + "Admin" + ], + "key": "/home/cjennings/documents/google-drive/danneel/Ltr- Owen (02.06.26) v.5.docx", + "pathtoebook": "/home/cjennings/documents/google-drive/danneel/Ltr- Owen (02.06.26) v.5.docx", + "timestamp": "2026-02-09T19:36:19.376Z", + "title": "Ltr- Owen (02.06.26) v.5" + }, + { + "authors": [ + "Craig Jennings" + ], + "key": "/home/cjennings/projects/career/tooling/tooling-proposal.docx", + "pathtoebook": "/home/cjennings/projects/career/tooling/tooling-proposal.docx", + "timestamp": "2026-02-09T16:06:27.024Z", + "title": "DeepSat SDLC Tooling Proposal" + }, + { + "authors": [ "Richard Polt" ], "key": "/home/cjennings/sync/books/Richard Polt/Heidegger_ An Introduction (44728)/Heidegger_ An Introduction - Richard Polt.azw3", @@ -303,24 +321,6 @@ "pathtoebook": "/home/cjennings/Library/Kevin Passmore/Fascism_ A Very Short Introduction (5508)/Fascism_ A Very Short Introduction - Kevin Passmore.mobi", "timestamp": "2021-11-01T00:49:09.044Z", "title": "Fascism: A Very Short Introduction (Very Short Introductions)" - }, - { - "authors": [ - "Lewis Carroll" - ], - "key": "/home/cjennings/Library/Lewis Carroll/Alice's Adventures in Wonderland_ &, Through the Looking-Glass (784)/Alice's Adventures in Wonderland_ &, Throu - Lewis Carroll.mobi", - "pathtoebook": "/home/cjennings/Library/Lewis Carroll/Alice's Adventures in Wonderland_ &, Through the Looking-Glass (784)/Alice's Adventures in Wonderland_ &, Throu - Lewis Carroll.mobi", - "timestamp": "2021-11-01T00:48:02.197Z", - "title": "Alice's Adventures in Wonderland and Through the Looking-Glass" - }, - { - "authors": [ - "Timothy Snyder" - ], - "key": "/home/cjennings/Library/Timothy Snyder/On Tyranny_ Twenty Lessons From the Twentieth Century (635)/On Tyranny_ Twenty Lessons From the Twenti - Timothy Snyder.azw3", - "pathtoebook": "/home/cjennings/Library/Timothy Snyder/On Tyranny_ Twenty Lessons From the Twentieth Century (635)/On Tyranny_ Twenty Lessons From the Twenti - Timothy Snyder.azw3", - "timestamp": "2021-10-31T22:46:48.986Z", - "title": "On Tyranny: Twenty Lessons from the Twentieth Century" } ] } diff --git a/dotfiles/common/.config/calibre/viewer.json b/dotfiles/common/.config/calibre/viewer.json index ecc631e..7a41659 100644 --- a/dotfiles/common/.config/calibre/viewer.json +++ b/dotfiles/common/.config/calibre/viewer.json @@ -1,4 +1,55 @@ { + "geometry-of-print-to-pdf-geometry": { + "frame_geometry": { + "height": 285, + "width": 510, + "x": 649, + "y": 475 + }, + "full_screened": false, + "geometry": { + "height": 285, + "width": 510, + "x": 649, + "y": 475 + }, + "maximized": true, + "normal_geometry": { + "height": 285, + "width": 510, + "x": 649, + "y": 475 + }, + "qt": { + "__class__": "bytearray", + "__value__": "AdnQywADAAAAAAKJAAAB2wAABIYAAAL3AAACiQAAAdsAAASGAAAC9wAAAAACAAAADXAAAAKJAAAB2wAABIYAAAL3" + }, + "screen": { + "depth": 32, + "device_pixel_ratio": 1.0, + "geometry_in_logical_pixels": { + "height": 1440, + "width": 3440, + "x": 0, + "y": 0 + }, + "index_in_screens_list": 0, + "manufacturer": "Dell Inc.", + "model": "DELL U3419W", + "name": "DP-4", + "serial": "", + "size_in_logical_pixels": { + "height": 1440, + "width": 3440 + }, + "virtual_geometry": { + "height": 1440, + "width": 3440, + "x": 0, + "y": 0 + } + } + }, "print-to-pdf-bottom-margin": 1.0, "print-to-pdf-geometry": { "__class__": "bytearray", diff --git a/dotfiles/hyprland/.config/hypr/hyprland.conf b/dotfiles/hyprland/.config/hypr/hyprland.conf index 55a7c35..f258353 100644 --- a/dotfiles/hyprland/.config/hypr/hyprland.conf +++ b/dotfiles/hyprland/.config/hypr/hyprland.conf @@ -33,6 +33,7 @@ exec-once = mpd # Pyprland (scratchpads, magnify, etc.) exec-once = pypr +exec-once = hypr-refocus-scratchpad # Apps that can start later (sleep ensures waybar tray is registered) exec-once = sleep 1 && signal-desktop --start-in-tray --ozone-platform=wayland diff --git a/dotfiles/hyprland/.local/bin/hypr-refocus-scratchpad b/dotfiles/hyprland/.local/bin/hypr-refocus-scratchpad new file mode 100755 index 0000000..7a4bb38 --- /dev/null +++ b/dotfiles/hyprland/.local/bin/hypr-refocus-scratchpad @@ -0,0 +1,24 @@ +#!/bin/bash +# Refocus visible scratchpad after a window closes. +# Without this, closing a regular window while a scratchpad is visible +# leaves focus on the regular workspace instead of the scratchpad. + +SOCKET="$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock" + +socat -U - "UNIX-CONNECT:$SOCKET" | while read -r line; do + if [[ "$line" == closewindow* ]]; then + # Check if a special workspace is active on the current monitor + special=$(hyprctl monitors -j | python3 -c " +import json, sys +for m in json.load(sys.stdin): + sw = m.get('specialWorkspace', {}) + if sw.get('id', 0) != 0: + print(sw['name']) + break +" 2>/dev/null) + if [[ -n "$special" ]]; then + # Focus the top window on the special workspace + hyprctl dispatch focuswindow "workspace:$special" &>/dev/null + fi + fi +done |
