sway.scm (8165B)
1 (define-module (home lukejw sway) 2 #:use-module (home lukejw scripts) 3 #:use-module (gnu home services sway) 4 #:use-module (gnu packages image) 5 #:use-module (gnu packages linux) 6 #:use-module (gnu packages lxqt) 7 #:use-module (gnu packages polkit) 8 #:use-module (gnu packages pulseaudio) 9 #:use-module (gnu packages qt) 10 #:use-module (gnu packages terminals) 11 #:use-module (gnu packages wm) 12 #:use-module (gnu packages xdisorg) 13 #:use-module (gnu system keyboard) 14 #:use-module (guix build-system copy) 15 #:use-module (guix gexp) 16 #:use-module (guix git-download) 17 #:use-module (guix packages) 18 #:export (%sway-configuration)) 19 20 (define-public orthodox-wallpapers 21 (package 22 (name "orthodox-wallpapers") 23 (version "12cdd8f") 24 (source (origin 25 (method git-fetch) 26 (uri (git-reference 27 (url "git://loquat.dev/orthodox-wallpapers.git") 28 (commit "12cdd8f5bf80cc1f0c3cebfe64afd2d8d2e175ee"))) 29 (sha256 (base32 "07138figxdsab05ckbmbab4v304ma7zzsh7i0rbhpl7m88rj08m6")) 30 (file-name (git-file-name name version)))) 31 (build-system copy-build-system) 32 (arguments 33 (list #:install-plan 34 #~'(("wallpapers" "share/backgrounds")))) 35 (home-page "https://git.loquat.dev/orthodox-wallpapers") 36 (synopsis "Orthodox wallpapers") 37 (description #f) 38 (license #f))) 39 40 (define %sway-packages 41 (list sway 42 qtwayland 43 foot 44 tofi 45 pulseaudio 46 brightnessctl 47 i3blocks 48 lxqt-policykit 49 wlsunset 50 grim 51 slurp 52 wl-clipboard)) 53 54 (define %sway-inputs 55 (list 56 (sway-input 57 (identifier "1:1:AT_Translated_Set_2_keyboard") 58 (layout (keyboard-layout "us,us" ",dvp" 59 #:options '("grp:alt_shift_toggle")))))) 60 61 (define %sway-variables 62 `((mod . "Mod4") 63 (left . "Left") 64 (down . "Down") 65 (up . "Up") 66 (right . "Right") 67 ;; Programs 68 (term . "footclient") 69 (menu . "tofi-drun --terminal footclient | xargs swaymsg exec --") 70 (pactl . "pactl") 71 (bctl . "brightnessctl -q") 72 ;; Color palette (Flexoki) 73 (bg . "#100F0F") 74 (bg-2 . "#1C1B1A") 75 (ui . "#282726") 76 (ui-2 . "#343331") 77 (ui-3 . "#403E3C") 78 (tx . "#CECDC3") 79 (tx-2 . "#878580") 80 (tx-3 . "#575653") 81 (re . "#D14D41") 82 (re-2 . "#AF3029") 83 (ye . "#D0A215") 84 (ye-2 . "#AD8301"))) 85 86 (define %sway-theme 87 (list "font monospace 14" 88 "client.focused $ui-3 $ui-3 $tx $tx" 89 "client.focused_inactive $ui-2 $ui-2 $tx-2 $tx-2" 90 "client.unfocused $ui $ui $tx-3 $tx-3" 91 "client.urgent $re-2 $re-2 $tx $tx" 92 "titlebar_border_thickness 2")) 93 94 (define %sway-modes 95 (list (sway-mode 96 (mode-name "resize") 97 (keybindings 98 '(($left . "resize shrink width 10px") 99 ($down . "resize grow height 10px") 100 ($up . "resize shrink height 10px") 101 ($right . "resize grow width 10px") 102 (Return . "mode \"default\"") 103 (Escape . "mode \"default\"")))))) 104 105 (define %sway-bar 106 (sway-bar 107 (position 'top) 108 (colors 109 (sway-color 110 (background "$bg-2") 111 (statusline "$tx\n separator $tx-3") 112 (focused-workspace 113 (sway-border-color 114 (border "$ui-3") 115 (background "$ui-3") 116 (text "$tx"))) 117 (active-workspace 118 (sway-border-color 119 (border "$ui-2") 120 (background "$ui-2") 121 (text "$tx-2"))) 122 (inactive-workspace 123 (sway-border-color 124 (border "$ui") 125 (background "$ui") 126 (text "$tx-3"))) 127 (urgent-workspace 128 (sway-border-color 129 (border "$re-2") 130 (background "$re-2") 131 (text "$tx"))))) 132 (status-command "i3blocks\n separator_symbol \" | \""))) 133 134 (define %sway-keybindings 135 `(($mod+Return . "exec $term") 136 ($mod+Shift+q . "kill") 137 ($mod+d . "exec $menu") 138 ($mod+Shift+c . "reload") 139 ;; Exit / poweroff 140 ($mod+l . ,#~(string-append "exec " #$scripts "/bin/tofi-loginctl-prompt.sh")) 141 ($mod+Shift+l . ,#~(string-append "exec " #$scripts "/bin/tofi-exit-sway-prompt.sh")) 142 ;; Password management 143 ($mod+p . "exec sta.sh quick") 144 ($mod+Shift+p . "exec sta.sh") 145 ($mod+Alt+p . "exec sta.sh modify") 146 ($mod+$left . "focus left") 147 ($mod+$down . "focus down") 148 ($mod+$up . "focus up") 149 ($mod+$right . "focus right") 150 ($mod+Shift+$left . "move left") 151 ($mod+Shift+$down . "move down") 152 ($mod+Shift+$up . "move up") 153 ($mod+Shift+$right . "move right") 154 ($mod+1 . "workspace number 1") 155 ($mod+2 . "workspace number 2") 156 ($mod+3 . "workspace number 3") 157 ($mod+4 . "workspace number 4") 158 ($mod+5 . "workspace number 5") 159 ($mod+6 . "workspace number 6") 160 ($mod+7 . "workspace number 7") 161 ($mod+8 . "workspace number 8") 162 ($mod+9 . "workspace number 9") 163 ($mod+Shift+1 . "move container to workspace number 1") 164 ($mod+Shift+2 . "move container to workspace number 2") 165 ($mod+Shift+3 . "move container to workspace number 3") 166 ($mod+Shift+4 . "move container to workspace number 4") 167 ($mod+Shift+5 . "move container to workspace number 5") 168 ($mod+Shift+6 . "move container to workspace number 6") 169 ($mod+Shift+7 . "move container to workspace number 7") 170 ($mod+Shift+8 . "move container to workspace number 8") 171 ($mod+Shift+9 . "move container to workspace number 9") 172 ($mod+b . "splith") 173 ($mod+v . "splitv") 174 ($mod+s . "layout stacking") 175 ($mod+w . "layout tabbed") 176 ($mod+e . "layout toggle split") 177 ($mod+f . "fullscreen") 178 ($mod+Shift+space . "floating toggle") 179 ($mod+space . "focus mode_toggle") 180 ($mod+a . "focus parent") 181 ($mod+Shift+minus . "move scratchpad") 182 ($mod+minus . "scratchpad show") 183 ($mod+r . "mode \"resize\"") 184 ;; Audio controls 185 (XF86AudioMute . "exec $pactl set-sink-mute \\@DEFAULT_SINK@ toggle") 186 (XF86AudioLowerVolume . "exec $pactl set-sink-volume \\@DEFAULT_SINK@ -5%") 187 (XF86AudioRaiseVolume . "exec $pactl set-sink-volume \\@DEFAULT_SINK@ +5%") 188 ;; Brightness controls 189 (XF86MonBrightnessDown . "exec $bctl s 15-") 190 (XF86MonBrightnessUp . "exec $bctl s +15") 191 ;; Screenshot controls 192 (Print . "exec grim") 193 (XF86SelectiveScreenshot . "exec grim -g \"$(slurp)\""))) 194 195 (define %sway-outputs 196 (list ;; Set background color for external monitors 197 (sway-output 198 (identifier '*) 199 (extra-content 200 (list "bg $bg solid_color"))) 201 ;; Set background image for laptop monitor 202 (sway-output 203 (identifier 'eDP-1) 204 (background (file-append orthodox-wallpapers "/share/backgrounds/minimal/prodigal.jpg"))) 205 ;; Work monitor(s) 206 (sway-output 207 (identifier "Dell Inc. DELL P2314H 7R1K343NCB7S") 208 (resolution "1920x1080@60Hz") 209 (extra-content 210 (list "scale 1"))) 211 (sway-output 212 (identifier "Dell Inc. DELL P2214H KW14V53238VB") 213 (resolution "1920x1080@60Hz") 214 (extra-content 215 (list "scale 1"))))) 216 217 (define %sway-startup-programs 218 (list 219 "foot --server" 220 "wlsunset -S 07:00 -s 19:30 -d 1800 -t 1000" 221 "lxqt-policykit-agent")) 222 223 (define %sway-configuration 224 (sway-configuration 225 (variables %sway-variables) 226 (keybindings %sway-keybindings) 227 (gestures '()) 228 (packages %sway-packages) 229 (inputs %sway-inputs) 230 (outputs %sway-outputs) 231 (bar %sway-bar) 232 (modes %sway-modes) 233 (startup-programs %sway-startup-programs) 234 (extra-content (append 235 (list 236 ;; This fixes lxqt-policykit being weird 237 "for_window [title=\"Authentication Required\"] floating enable" 238 ;; Make my camera floating by default 239 "for_window [title=\"/dev/video0\"] floating enable" 240 ;; This removes the title from the foot terminal 241 "for_window [app_id=\"foot\"] border pixel") 242 %sway-theme)))) 243
