2024-11-20 20:32:38 +01:00
{ pkgs }:
2024-11-20 18:00:45 +01:00
let
# TODO/FIX: pkgs.sway-unwrapped is not the same sway derivation as the one running the desktop
2024-11-20 20:32:38 +01:00
grim-wrapper =
pkgs . writeShellScript " g r i m - w r a p p e r " # bash
''
OUTPUT_DIR = " $ ( ${ pkgs . xdg-user-dirs } / b i n / x d g - u s e r - d i r P I C T U R E S ) "
DATE = " $ ( ${ pkgs . coreutils } / b i n / d a t e + ' % Y - % m - % d ; % H : % M : % S ; ' ) " ;
WINDOW_LIST = " $ ( ${ pkgs . sway-unwrapped } / b i n / s w a y m s g - t g e t _ t r e e | ${ pkgs . jq } / b i n / j q - r ' . . | s e l e c t ( . p i d ? a n d . v i s i b l e ? ) | " \ ( . rect . x + . window_rect . x ) , \ ( . rect . y + . window_rect . y ) \ ( . window_rect . width ) x \ ( . window_rect . height ) \ ( . app_id ) : \ ( . name ) " ' | ${ pkgs . coreutils } / b i n / t r - d ' " / ; \ \ ' ) " ;
2024-11-20 18:00:45 +01:00
2024-11-20 20:32:38 +01:00
case " ' ' ${ 1 } " in
selection )
# split slurp selection result into jseon selectable screen area (for grim) and output name
SELECTION_FORMAT = ' { " a r e a " : " % x , % y % w x % h " , " n a m e " : " % w x % h ; % o ; % l " } ' ;
SELECTION = " $ ( ${ pkgs . slurp } / b i n / s l u r p - d - f " '' ${ SELECTION_FORMAT } " < < < ''$ { W I N D O W _ L I S T } ) " ;
SELECTION_AREA = " $ ( ${ pkgs . jq } / b i n / j q - r ' . a r e a ' < < < " '' ${ SELECTION } " ) " ;
SELECTION_NAME = " $ ( ${ pkgs . jq } / b i n / j q - r ' . n a m e ' < < < " '' ${ SELECTION } " | ${ pkgs . coreutils } / b i n / t r ' ' ' _ ' ) " ;
OUTNAME = " ' ' ${ OUTPUT_DIR } / ' ' ${ DATE } ' ' ${ SELECTION_NAME } . p n g " ;
$ { pkgs . grim } /bin/grim - g " ' ' ${ SELECTION_AREA } " " ' ' ${ OUTNAME } " ;
; ;
clip )
SELECTION = " $ ( ${ pkgs . slurp } / b i n / s l u r p - d < < < ' ' ${ WINDOW_LIST } ) " ;
$ { pkgs . grim } /bin/grim - | $ { pkgs . wl-clipboard } /bin/wl-copy ;
; ;
* )
DISPLAY = " $ ( ${ pkgs . sway-unwrapped } / b i n / s w a y m s g - t g e t _ o u t p u t s | ${ pkgs . jq } / b i n / j q - r ' . [ ] | s e l e c t ( . f o c u s e d ) | . n a m e ' ) " ;
DISPLAY_RES = " $ ( ${ pkgs . sway-unwrapped } / b i n / s w a y m s g - t g e t _ o u t p u t s | j q - r ' . [ ] | s e l e c t ( . f o c u s e d ) | . c u r r e n t _ m o d e | " \ ( . width ) x \ ( . height ) " ' ) " ;
OUTNAME = " ' ' ${ OUTPUT_DIR } / ' ' ${ DATE } ' ' ${ DISPLAY_RES } ; ' ' ${ DISPLAY } ; . p n g "
$ { pkgs . grim } /bin/grim - o " ' ' ${ DISPLAY } " " ' ' ${ OUTNAME } " ;
; ;
esac ;
'' ;
in
pkgs . writeText " c o n f i g " ''
2024-07-29 11:45:46 +02:00
include /etc/sway/config.d /*
# Read `man 5 sway` for a complete reference.
### Variables
#
# Logo key. Use Mod1 for Alt.
set $ mod Mod4
workspace " H D M I " output HDMI1
workspace_auto_back_and_forth yes
default_border pixel
hide_edge_borders both
# Home row direction keys, like vim
set $ left h
set $ down j
set $ up k
set $ right l
# Your preferred terminal emulator
2024-11-20 18:01:15 +01:00
set $ term $ { pkgs . alacritty } /bin/alacritty
2024-07-29 11:45:46 +02:00
# Your preferred application launcher
# Note: it's recommended that you pass the final command to sway
set $ menu $ { pkgs . rofi-wayland } /bin/rofi - config /etc/rofi.rasi - show combi
input type:keyboard xkb_layout de
input type:keyboard xkb_numlock enabled
input type:touchpad {
tap enabled
natural_scroll disabled
dwt disabled
}
### Output configuration
#
# Default wallpaper
2024-12-01 17:26:37 +01:00
output * bg /persist/data/wallpaper.jpg fill
2024-07-29 11:45:46 +02:00
#output eDP-1 scale 1.5
#
# Example configuration:
#
# output HDMI-A-1 resolution 1920x1080 position 1920,0
#
# You can get the names of your outputs by running: swaymsg -t get_outputs
### Idle configuration
#
# Example configuration:
#
# exec swayidle -w \
# timeout 300 'swaylock -f -c 000000' \
# timeout 600 'swaymsg "output * dpms off"' \
# resume 'swaymsg "output * dpms on"' \
# before-sleep 'swaylock -f -c 000000'
#
# This will lock your screen after 300 seconds of inactivity, then turn off
# your displays after another 300 seconds, and turn your screens back on when
# resumed. It will also lock your screen before your computer goes to sleep.
### Input configuration
# You can get the names of your inputs by running: swaymsg -t get_inputs xkb_options grp:alt_shift_toggle# Read `man 5 sway-input` for more information about this section.
### Key bindings
#
# Basics:
#
# start a terminal
bindsym $ mod + Return exec $ term
2024-11-20 18:01:15 +01:00
bindsym $ mod + o exec $ { pkgs . pcmanfm } /bin/pcmanfm
2024-12-07 22:54:22 +01:00
bindsym $ mod + Alt + l exec loginctl lock-session && $ { pkgs . swaylock } /bin/swaylock - c 000000 - kFe
2024-07-29 11:45:46 +02:00
# kill focused window
bindsym $ mod + Shift + q kill
# start your launcher
bindsym $ mod + d exec $ menu
bindsym XF86AudioPlay exec $ { pkgs . playerctl } /bin/playerctl play
bindsym XF86AudioPause exec $ { pkgs . playerctl } /bin/playerctl pause
bindsym XF86AudioNext exec $ { pkgs . playerctl } /bin/playerctl next
bindsym XF86AudioPrev exec $ { pkgs . playerctl } /bin/playerctl previous
bindsym $ mod + Mod1 + space exec $ { pkgs . playerctl } /bin/playerctl play-pause
bindsym $ mod + Mod1 + Left exec $ { pkgs . playerctl } /bin/playerctl position 1 0 -
bindsym $ mod + Mod1 + Right exec $ { pkgs . playerctl } /bin/playerctl position 10 +
bindsym $ mod + Mod1 + Down exec $ { pkgs . playerctl } /bin/playerctl next
bindsym $ mod + Mod1 + Up exec $ { pkgs . playerctl } /bin/playerctl previous
bindsym $ mod + b border toggle
bindsym $ mod + m bar mode toggle
bindsym $ mod + y move container to output left
bindsym $ mod + x move container to output right
bindsym $ mod + Shift + y move workspace to output left
bindsym $ mod + Shift + x move workspace to output right
bindsym $ mod + minus exec $ { pkgs . alsa-utils } /bin/amixer - c 0 sset Master 1 % -
bindsym $ mod + plus exec $ { pkgs . alsa-utils } /bin/amixer - c 0 sset Master 1 % +
bindsym $ mod + Mod1 + minus exec $ { pkgs . alsa-utils } /bin/amixer - D pulse sset Master 1 % -
bindsym $ mod + Mod1 + plus exec $ { pkgs . alsa-utils } /bin/amixer - D pulse sset Master 1 % +
bindsym $ mod + Shift + minus exec $ { pkgs . acpilight } /bin/xbacklight -5
bindsym $ mod + Shift + plus exec $ { pkgs . acpilight } /bin/xbacklight + 5
bindsym $ mod + Ctrl + 1 exec $ { pkgs . acpilight } /bin/xbacklight - set 0
bindsym $ mod + Ctrl + 2 exec $ { pkgs . acpilight } /bin/xbacklight - set 1
bindsym $ mod + Ctrl + 3 exec $ { pkgs . acpilight } /bin/xbacklight - set 10
bindsym $ mod + Ctrl + 4 exec $ { pkgs . acpilight } /bin/xbacklight - set 25
bindsym $ mod + Ctrl + 5 exec $ { pkgs . acpilight } /bin/xbacklight - set 50
bindsym $ mod + Ctrl + 6 exec $ { pkgs . acpilight } /bin/xbacklight - set 60
bindsym $ mod + Ctrl + 7 exec $ { pkgs . acpilight } /bin/xbacklight - set 70
bindsym $ mod + Ctrl + 8 exec $ { pkgs . acpilight } /bin/xbacklight - set 80
bindsym $ mod + Ctrl + 9 exec $ { pkgs . acpilight } /bin/xbacklight - set 90
bindsym $ mod + Ctrl + 0 exec $ { pkgs . acpilight } /bin/xbacklight - set 100
bindsym $ mod + Shift + w sticky toggle
2024-11-20 18:00:45 +01:00
# Screenshots
bindsym $ mod + Ctrl + s exec $ { grim-wrapper } selection
bindsym $ mod + Ctrl + a exec $ { grim-wrapper }
bindsym $ mod + Ctrl + y exec $ { grim-wrapper } clip
2024-07-29 11:45:46 +02:00
# Drag floating windows by holding down $mod and left mouse button.
# Resize them with right mouse button + $mod.
# Despite the name, also works for non-floating windows.
# Change normal to inverse to use left mouse button for resizing and right
# mouse button for dragging.
floating_modifier $ mod normal
# reload the configuration file
bindsym $ mod + Shift + c reload
# exit sway (logs you out of your Wayland session)
bindsym $ mod + Shift + e exec swaynag - t warning - m ' You pressed the exit shortcut . Do you really want to exit sway ? This will end your Wayland session . ' - b ' Yes , exit sway' ' swaymsg exit'
#
# Moving around:
#
# Move your focus around
bindsym $ mod + $ left focus left
bindsym $ mod + $ down focus down
bindsym $ mod + $ up focus up
bindsym $ mod + $ right focus right
# or use $mod+[up|down|left|right]
bindsym $ mod + Left focus left
bindsym $ mod + Down focus down
bindsym $ mod + Up focus up
bindsym $ mod + Right focus right
2024-12-14 21:45:51 +01:00
# focus urgent
bindsym $ mod + g exec swaymsg " [ u r g e n t = l a t e s t ] f o c u s "
2024-07-29 11:45:46 +02:00
# _move_ the focused window with the same, but add Shift
bindsym $ mod + Shift + $ left move left
bindsym $ mod + Shift + $ down move down
bindsym $ mod + Shift + $ up move up
bindsym $ mod + Shift + $ right move right
# ditto, with arrow keys
bindsym $ mod + Shift + Left move left
bindsym $ mod + Shift + Down move down
bindsym $ mod + Shift + Up move up
bindsym $ mod + Shift + Right move right
#
# Workspaces:
#
# switch to workspace
bindsym $ mod + 1 workspace 1
bindsym $ mod + 2 workspace 2
bindsym $ mod + 3 workspace 3
bindsym $ mod + 4 workspace 4
bindsym $ mod + 5 workspace 5
bindsym $ mod + 6 workspace 6
bindsym $ mod + 7 workspace 7
bindsym $ mod + 8 workspace 8
bindsym $ mod + 9 workspace 9
bindsym $ mod + 0 workspace 10
# move focused container to workspace
bindsym $ mod + Shift + 1 move container to workspace 1
bindsym $ mod + Shift + 2 move container to workspace 2
bindsym $ mod + Shift + 3 move container to workspace 3
bindsym $ mod + Shift + 4 move container to workspace 4
bindsym $ mod + Shift + 5 move container to workspace 5
bindsym $ mod + Shift + 6 move container to workspace 6
bindsym $ mod + Shift + 7 move container to workspace 7
bindsym $ mod + Shift + 8 move container to workspace 8
bindsym $ mod + Shift + 9 move container to workspace 9
bindsym $ mod + Shift + 0 move container to workspace 10
bindsym $ mod + c splith
bindsym $ mod + v splitv
# Switch the current container between different layout styles
bindsym $ mod + s layout stacking
bindsym $ mod + w layout tabbed
bindsym $ mod + e layout toggle split
# Make the current focus fullscreen
bindsym $ mod + f fullscreen
# Toggle the current focus between tiling and floating mode
bindsym $ mod + Shift + space floating toggle
# Swap focus between the tiling area and the floating area
bindsym $ mod + space focus mode_toggle
# move focus to the parent container
bindsym $ mod + a focus parent
#
# Scratchpad:
#
# Sway has a "scratchpad", which is a bag of holding for windows.
# You can send windows there and get them back later.
# Move the currently focused window to the scratchpad
bindsym $ mod + p move scratchpad
# Show the next scratchpad window or hide the focused scratchpad window.
# If there are multiple scratchpad windows, this command cycles through them.
bindsym $ mod + Shift + p scratchpad show
#
# Resizing containers:
#
mode " r e s i z e " {
# left will shrink the containers width
# right will grow the containers width
# up will shrink the containers height
# down will grow the containers height
bindsym $ left resize shrink width 1 0 px
bindsym $ down resize grow height 1 0 px
bindsym $ up resize shrink height 1 0 px
bindsym $ right resize grow width 1 0 px
# ditto, with arrow keys
bindsym Left resize shrink width 1 0 px
bindsym Down resize grow height 1 0 px
bindsym Up resize shrink height 1 0 px
bindsym Right resize grow width 1 0 px
# return to default mode
bindsym Return mode " d e f a u l t "
bindsym Escape mode " d e f a u l t "
}
bindsym $ mod + r mode " r e s i z e "
# Define kanagawa colors
set $ base00 " 1 F 1 F 2 8 "
set $ base01 " 2 A 2 A 3 7 "
set $ base02 " 2 2 3 2 4 9 "
set $ base03 " 7 2 7 1 6 9 "
set $ base04 " C 8 C 0 9 3 "
set $ base05 " D C D 7 B A "
set $ base06 " 9 3 8 A A 9 "
set $ base07 " 3 6 3 6 4 6 "
set $ base08 " C 3 4 0 4 3 "
set $ base09 " F F A 0 6 6 "
set $ base0A " D C A 5 6 1 "
set $ base0B " 9 8 B B 6 C "
set $ base0C " 7 F B 4 C A "
set $ base0D " 7 E 9 C D 8 "
set $ base0E " 9 5 7 F B 8 "
set $ base0F " D 2 7 E 9 9 "
client . focused $ base05 $ base0D $ base00 $ base0D $ base0D
client . focused_inactive $ base01 $ base01 $ base05 $ base03 $ base01
client . unfocused $ base01 $ base00 $ base05 $ base01 $ base01
client . urgent $ base08 $ base08 $ base00 $ base08 $ base08
client . placeholder $ base00 $ base00 $ base05 $ base00 $ base00
client . background $ base07
#
# Status Bar:
#
# Read `man 5 sway-bar` for more information about this section.
bar {
position top
# When the status_command prints a new line to stdout, swaybar updates.
# The default just shows the current date and time.
#status_command while date +'%Y-%m-%d %l:%M:%S %p'; do sleep 1; done
status_command $ { pkgs . python3Packages . py3status } /bin/py3status - c /etc/i3/py3status
colors {
background $ base00
separator $ base01
statusline $ base04
# State Border BG Text
focused_workspace $ base05 $ base0D $ base00
active_workspace $ base05 $ base03 $ base00
inactive_workspace $ base03 $ base01 $ base05
urgent_workspace $ base08 $ base08 $ base00
binding_mode $ base00 $ base0A $ base00
}
}
''