loquatdev

MonasTech system configurations dogfooded by yours truly
Log | Files | Refs | README

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