diff --git a/dot_config/sway/config b/dot_config/sway/config new file mode 100644 index 0000000..2e98c03 --- /dev/null +++ b/dot_config/sway/config @@ -0,0 +1,536 @@ +# Please see https://i3wm.org/docs/userguide.html for a complete reference! + +# this sets the mod button -> windows key +set $mod Mod4 +set $mod1 Mod1 + +# Font for window titles. Will also be used by the bar unless a different font +# is used in the bar {} block below. +# font pango:monospace 8 +# overrides title bars -> makes sure i3-gaps can do its thing +for_window [class="^.*"] border pixel 2 + +# for jetbrains windows... focus on dialogs! +for_window [class="^jetbrains-.+"][window_type=dialog] focus +# fix citrix windows +for_window [class="Wfica_Seamless"] floating enable + +# border radius for the rounded windows +# border_radius 0 + +# Define names for default workspaces for which we configure key bindings later on. +# We use variables to avoid repeating the names in multiple places. +# Using the prefix of workspaces in order to be able to define ordering for special workspaces. +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" +set $wsleft "" +set $wsright "" + +# automatically assign programs to workspace +# using workspace names here, otherwise doesn't work as expected +# assign [class="Chromium"] $ws1 +assign [class="Thunderbird"] $ws2 + +# workspace 9: chat +assign [class="Slack"] $ws9 +assign [class="Mattermost"] $ws9 +assign [class="Hamsket"] $ws9 +assign [class="discord"] $ws9 +assign [class="signal"] $ws9 +assign [class="ferdi"] $ws9 +assign [class="microsoft teams - preview"] $ws9 + +assign [class="obsidian"] $ws8 + +assign [class="Wfica_Seamless"] $ws10 +#assign [class="jetbrains-idea"] 7 +#assign [class="jetbrains-webstorm"] 8 +#assign [class="jetbrains-datagrip"] 9 + +#disabled this for now, using Ferdi for socials +#exec --no-startup-id "i3-msg 'workspace 9:9; append_layout /home/joachim/.config/i3/workspace-9.json'" + +# i3-gaps +# 10 +gaps inner 0 +# 5 +gaps outer 0 + +# Disallow endless looping of focus: extreme right is extreme right, don't flip to extreme left whenever you want... +focus_wrapping no + +# font pango:DejaVu Sans Mono 8 +# font xft:Fantasque Sans Mono 9 +font xft:FuraCode Nerd Font 8 + +# Use Mouse+$mod to drag floating windows to their wanted position +floating_modifier $mod + +# start a terminal +bindsym $mod+Return exec alacritty +bindsym $mod+Shift+Return exec kitty + +# TODO make this help window a bit fancier +bindsym $mod+F1 exec alacritty -e chezmoi edit ~/.dotfiles/README.md + +# screenshotting +# Desktop screenshot +#bindsym --release Print exec "scrot ~/Bilder/Bildschirmfotos/$(date --iso-8601='seconds').png -m -e 'xclip -selection c -t image/png < $f'" +# Choose window +#bindsym --release Mod1+Sys_Req exec "import -window `xwininfo | awk '/.*Window id:.*/ {print $4}'` ~/Bilder/Bildschirmfotos/$(date --iso-8601='seconds').png" +# Selection screenshot +#bindsym --release Shift+Print exec "scrot ~/Bilder/Bildschirmfotos/$(date --iso-8601='seconds').png -s -e 'xclip -selection c -t image/png < $f'" +bindsym --release Print exec ~/.config/i3/screenshot.sh + +# kill focused window +bindsym $mod+Shift+q kill + +# start dmenu (a program launcher) +# bindsym $mod+d exec dmenu_run +bindsym $mod+d exec ~/.config/rofi/runrofi.sh +# this uses the output of greenclip (see here https://wiki.archlinux.org/index.php/Greenclip) to show clipboard history in rofi +bindsym $mod+c exec rofi -modi "clipboard:greenclip print" -show clipboard -run-command '{cmd}' + +# do a nice menu with mode +# lock / logout / sleep / hibernate / restart / poweroff +set $mode_system System  l e s鈴 h rﰇ וּsﮤ +mode "$mode_system" { + bindsym l exec --no-startup-id ~/.config/i3/i3exit.sh lock, mode "default" + bindsym e exec --no-startup-id ~/.config/i3/i3exit.sh logout, mode "default" + bindsym s exec --no-startup-id ~/.config/i3/i3exit.sh suspend, mode "default" + bindsym h exec --no-startup-id ~/.config/i3/i3exit.sh hibernate, mode "default" + bindsym r exec --no-startup-id ~/.config/i3/i3exit.sh reboot, mode "default" + bindsym Shift+s exec --no-startup-id ~/.config/i3/i3exit.sh shutdown, mode "default" + # back to normal: Enter or Escape + bindsym Return mode "default" + bindsym Escape mode "default" +} +bindsym $mod+Pause mode "$mode_system" +bindsym $mod+F12 mode "$mode_system" + +# do a nice menu for monitor values +set $mode_redshift Monitor 2,3,4,5,6,7,8洞 j/k +mode "$mode_redshift" { + bindsym 2 exec --no-startup-id redshift -P -O 2000 + bindsym 3 exec --no-startup-id redshift -P -O 3000 + bindsym 4 exec --no-startup-id redshift -P -O 4000 + bindsym 5 exec --no-startup-id redshift -P -O 5000 + bindsym 6 exec --no-startup-id redshift -P -O 6000 + bindsym 7 exec --no-startup-id redshift -P -O 7000 + bindsym 8 exec --no-startup-id redshift -P -O 8000 + + bindsym k exec --no-startup-id "brightnessctl -c backlight s +10%" + bindsym j exec --no-startup-id "brightnessctl -c backlight s 10%-" + + # back to normal: Enter or Escape + bindsym Return mode "default" + bindsym Escape mode "default" +} +bindsym $mod+F9 mode "$mode_redshift" + + +# do a nice menu for keyboard layouts +set $mode_xkbmap Layout aus bus-intl cus-altgr dgb egb-intl fdvorak +mode "$mode_xkbmap" { + bindsym a exec --no-startup-id setxkbmap us, mode "default" + bindsym b exec --no-startup-id setxkbmap us intl, mode "default" + bindsym c exec --no-startup-id setxkbmap us altgr-intl, mode "default" + bindsym d exec --no-startup-id setxkbmap gb, mode "default" + bindsym e exec --no-startup-id setxkbmap gb intl, mode "default" + bindsym f exec --no-startup-id setxkbmap dvorak, mode "default" + + # back to normal: Enter or Escape + bindsym Return mode "default" + bindsym Escape mode "default" +} +bindsym $mod+Ctrl+k mode "$mode_xkbmap" + +# this is a menu dedicated to audio stuff +# some nice symbols to try here: 0|    論b籠i錄  +set $mode_audio Audio    - + 0 y +mode "$mode_audio" { + # Pulse Audio controls + + # Increase / decrease volume for the running sink only + bindsym k exec --no-startup-id pactl set-sink-volume $(pactl list short sinks | grep RUNNING | cut -f 1) +2% + bindsym plus exec --no-startup-id pactl set-sink-volume $(pactl list short sinks | grep RUNNING | cut -f 1) +2% + bindsym bracketleft exec --no-startup-id pactl set-sink-volume $(pactl list short sinks | grep RUNNING | cut -f 1) +2% + + # decrease + bindsym j exec --no-startup-id pactl set-sink-volume $(pactl list short sinks | grep RUNNING | cut -f 1) -2% + bindsym minus exec --no-startup-id pactl set-sink-volume $(pactl list short sinks | grep RUNNING | cut -f 1) -2% + bindsym bracketright exec --no-startup-id pactl set-sink-volume $(pactl list short sinks | grep RUNNING | cut -f 1) -2% + + # Mute sound + bindsym 0 exec --no-startup-id pactl set-sink-mute $(pactl list short sinks | grep RUNNING | cut -f 1) toggle + + # Start mps-youtube + bindsym y exec --no-startup-id urxvt -e mpsyt, mode "default" + + # Media player controls + # Toggle pause/play + bindsym space exec playerctl play-pause + #bindsym XF86AudioPause exec playerctl pause + #bindsym XF86AudioNext exec playerctl next + #bindsym XF86AudioPrev exec playerctl previous + + # back to normal: Enter or Escape + bindsym Return mode "default" + bindsym Escape mode "default" +} +bindsym $mod+F11 mode "$mode_audio" + +# do a nice menu for custom launches +set $mode_launch  adefault start-up bnoise-fix cdual dhorizontal etearing +mode "$mode_launch" { + # These are all the default programs launching at startup. + bindsym a exec thunderbird, exec signal-desktop, exec ferdi, exec obsidian mode "default", exec teams --no-sandbox, exec slack + # This fixes audio noise (lenovo) + # bindsym b exec sudo hda-verb /dev/snd/hwC*D0 0x1d SET_PIN_WIDGET_CONTROL 0x0, mode "default" + # This bypasses weird xrandr bug, resets to single display, then goes back to triple monitor setup (use autorandr profile here, needs to be set up in advance) + #bindsym c exec xrandr --output eDP1 --mode 2560x1440, exec autorandr triple, mode "default" + #bindsym c exec autorandr dual2k, mode "default" + + # execute default horizontal layout of monitors + bindsym d exec autorandr horizontal, mode "default" + + # this fixes tearing on nvidia + # bindsym e exec nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }" + + # back to normal: Enter or Escape + bindsym Return mode "default" + bindsym Escape mode "default" +} +bindsym $mod+F10 mode "$mode_launch" + +# There also is the (new) i3-dmenu-desktop which only displays applications +# shipping a .desktop file. It is a wrapper around dmenu, so you need that +# installed. +# bindsym $mod+d exec --no-startup-id i3-dmenu-desktop + +# these are shortcuts for programs +bindsym $mod+Ctrl+t exec urxvt +bindsym $mod+Ctrl+e exec thunar + +# change focus +bindsym $mod+h focus left +bindsym $mod+j focus down +bindsym $mod+k focus up +bindsym $mod+l focus right + +# alternatively, you can use the cursor keys: +bindsym $mod+Left focus left +bindsym $mod+Down focus down +bindsym $mod+Up focus up +bindsym $mod+Right focus right +# move focused window +bindsym $mod+Shift+h move left +bindsym $mod+Shift+j move down +bindsym $mod+Shift+k move up +bindsym $mod+Shift+l move right + +# alternatively, you can use the cursor 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 + +# move workspace to left and right monitors +bindsym $mod+Shift+bracketleft move workspace to output left +bindsym $mod+Shift+bracketright move workspace to output right + +# explicit bindings for arandr's setups: might not need these anymore... using autorandr now +# bindsym $mod+Shift+Ctrl+1 exec ~/.screenlayout/laptop-only.sh +# bindsym $mod+Shift+Ctrl+2 exec ~/.screenlayout/work-desk.sh + + +# split in horizontal orientation +bindsym $mod+m split h + +# split in vertical orientation +bindsym $mod+n split v + +# enter fullscreen mode for the focused container +bindsym $mod+f fullscreen toggle + +# change container layout (stacked, tabbed, toggle split) +bindsym $mod+s layout stacking +bindsym $mod+w layout tabbed +bindsym $mod+e layout toggle split + +# toggle tiling / floating +bindsym $mod+Shift+space floating toggle + +# change focus between tiling / floating windows +bindsym $mod+space focus mode_toggle + +# focus the parent container +bindsym $mod+i focus parent + +# do some gaps magic: win+shift+g +set $mode_gaps Gaps: (o) outer, (i) inner +set $mode_gaps_outer Outer Gaps: +|-|0 (local), Shift + +|-|0 (global) +set $mode_gaps_inner Inner Gaps: +|-|0 (local), Shift + +|-|0 (global) +bindsym $mod+Shift+g mode "$mode_gaps" + +mode "$mode_gaps" { + bindsym o mode "$mode_gaps_outer" + bindsym i mode "$mode_gaps_inner" + bindsym Return mode "default" + bindsym Escape mode "default" +} + +mode "$mode_gaps_inner" { + bindsym plus gaps inner current plus 5 + bindsym minus gaps inner current minus 5 + bindsym 0 gaps inner current set 0 + bindsym Shift+plus gaps inner all plus 5 + bindsym Shift+minus gaps inner all minus 5 + bindsym Shift+0 gaps inner all set 0 + + bindsym Return mode "default" + bindsym Escape mode "default" +} +mode "$mode_gaps_outer" { + bindsym plus gaps outer current plus 5 + bindsym minus gaps outer current minus 5 + bindsym 0 gaps outer current set 0 + + bindsym Shift+plus gaps outer all plus 5 + bindsym Shift+minus gaps outer all minus 5 + bindsym Shift+0 gaps outer all set 0 + + bindsym Return mode "default" + bindsym Escape mode "default" +} + + +# focus the child container +bindsym $mod+u focus child + +# switch to workspace +bindsym $mod+1 workspace $ws1 +bindsym $mod+2 workspace $ws2 +bindsym $mod+3 workspace $ws3 +bindsym $mod+4 workspace $ws4 +bindsym $mod+5 workspace $ws5 +bindsym $mod+6 workspace $ws6 +bindsym $mod+7 workspace $ws7 +bindsym $mod+8 workspace $ws8 +bindsym $mod+9 workspace $ws9 +bindsym $mod+0 workspace $ws10 +bindsym $mod+comma workspace $wsleft +bindsym $mod+period workspace $wsright + +# Scratchpad +bindsym $mod+Shift+BackSpace move scratchpad +bindsym $mod+BackSpace scratchpad show + +# generic switch +#bindcode 49+34 workspace $ws9 +#bindsym $mod+grave workspace $ws9 +#bindsym $mod+shift+grave workspace $ws9 +# check this out: https://unix.stackexchange.com/questions/338228/i3wm-more-than-10-workspaces-with-double-modifier-key#339985 +bindsym $mod+grave exec i3-input -F 'workspace %s' -P 'go to workspace: ' +bindsym $mod+shift+grave exec i3-input -F 'move container to workspace %s' -P 'move to workspace: ' + +# move focused container to workspace +bindsym $mod+Shift+1 move container to workspace $ws1 +bindsym $mod+Shift+2 move container to workspace $ws2 +bindsym $mod+Shift+3 move container to workspace $ws3 +bindsym $mod+Shift+4 move container to workspace $ws4 +bindsym $mod+Shift+5 move container to workspace $ws5 +bindsym $mod+Shift+6 move container to workspace $ws6 +bindsym $mod+Shift+7 move container to workspace $ws7 +bindsym $mod+Shift+8 move container to workspace $ws8 +bindsym $mod+Shift+9 move container to workspace $ws9 +bindsym $mod+Shift+0 move container to workspace $ws10 +bindsym $mod+Shift+comma move container to workspace $wsleft +bindsym $mod+Shift+period move container to workspace $wsright + + +# reload the configuration file +bindsym $mod+Shift+c exec "i3-msg reload && notify-send ' i3' 'Reloaded config.' -u low" +# restart i3 inplace (preserves your layout/session, can be used to upgrade i3) +bindsym $mod+Shift+r restart +#bindsym $mod+Shift+r exec "i3-msg 'restart' && sleep 3 && notify-send ' i3' 'Restarted.' -u low" +# exit i3 (logs you out of your X session) +bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'" + +# resize window (you can also use the mouse for that) +mode "resize" { + # These bindings trigger as soon as you enter the resize mode + + # Pressing left will shrink the window’s width. + # Pressing right will grow the window’s width. + # Pressing up will shrink the window’s height. + # Pressing down will grow the window’s height. + bindsym h resize shrink width 10 px or 10 ppt + bindsym j resize grow height 10 px or 10 ppt + bindsym k resize shrink height 10 px or 10 ppt + bindsym l resize grow width 10 px or 10 ppt + + # same bindings, but for the arrow keys + 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 + + # back to normal: Enter or Escape or $mod+r + bindsym Return mode "default" + bindsym Escape mode "default" + bindsym $mod+r mode "default" +} +bindsym $mod+r mode "resize" + +# Edit config files +bindsym XF86Tools exec --no-startup-id urxvt -e vim ~/.config/i3/config + +# Pulse Audio controls +bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume 0 +5% #increase sound volume +bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume 0 -5% #decrease sound volume +bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute 0 toggle # mute sound + +bindsym $mod+XF86AudioPlay exec --no-startup-id urxvt -e mpsyt # start terminal youtube player +#bindsym $mod+F11 exec --no-startup-id urxvt -e mpsyt # start terminal youtube player + +# Media player controls +bindsym XF86AudioPlay exec playerctl play-pause +#bindsym XF86AudioPause exec playerctl pause +bindsym XF86AudioNext exec playerctl next +bindsym XF86AudioPrev exec playerctl previous + +# Screen brightness keys +# (This should work for both acpilight or xbacklight.) +bindsym XF86MonBrightnessUp exec xbacklight -inc 20 +bindsym XF86MonBrightnessDown exec xbacklight -dec 20 + + +# Dunst controls +bindsym $mod+Ctrl+space exec dunstctl close +bindsym $mod+Ctrl+Shift+space exec dunstctl close-all +bindsym $mod+Ctrl+$mod1+space exec dunstctl history-pop + +# start multi touch support +exec --no-startup-id libinput-gestures-setup start + +# start polybar +# exec_always --no-startup-id ~/.config/polybar/launch-multi.sh + +# start the network manager applet +exec --no-startup-id nm-applet + +# start bluetooth applet +exec --no-startup-id blueman-applet + +# start the xfce4-power-manager -> helping us do lid / laptop things +exec --no-startup-id xfce4-power-manager + +# load the wallpaper +exec_always --no-startup-id sh ~/.fehbg + +# start picom: compositor that allows, for example, transparency +exec_always --no-startup-id picom --experimental-backends + +# start greenclip, this somehow fails to start at launch (sometimes?) +# exec --no-startup-id systemctl --user start greenclip +exec --no-startup-id greenclip daemon>/dev/null + +# reload the walpaper / color configuratin using pywal +# exec --no-startup-id wal -R -q +# change the wallpaper exec_always feh --bg-scale ~/Documents/private/img/mars-wallpaper-23.jpg + +# gruvbox colors +set $dark0_hard #1d2021 +set $dark0 #282828 +set $dark0_soft #32302f +set $dark1 #3c3836 +set $dark2 #504945 +set $dark3 #665c54 +set $dark4 #7c6f64 +set $gray_245 #928374 +set $gray_244 #928374 +set $light0_hard #f9f5d7 +set $light0 #fbf1c7 +set $light0_soft #f2e5bc +set $light1 #ebdbb2 +set $light2 #d5c4a1 +set $light3 #bdae93 +set $light4 #a89984 +set $bright_red #fb4934 +set $bright_green #b8bb26 +set $bright_yellow #fabd2f +set $bright_blue #83a598 +set $bright_purple #d3869b +set $bright_aqua #8ec07c +set $bright_orange #fe8019 +set $neutral_red #cc241d +set $neutral_green #98971a +set $neutral_yellow #d79921 +set $neutral_blue #458588 +set $neutral_purple #b16286 +set $neutral_aqua #689d6a +set $neutral_orange #d65d0e +set $faded_red #9d0006 +set $faded_green #79740e +set $faded_yellow #b57614 +set $faded_blue #076678 +set $faded_purple #8f3f71 +set $faded_aqua #427b58 +set $faded_orange #af3a03 +set $transparent #ffffff00 + +# Current color set +# This is how you would get a colors from xrdb +# set_from_resource $color0 i3wm.color0 #000000 + +# window color class [border| backgr.| text| indicator| child_border] +client.focused $gray_245 $dark0_hard $light0_hard $bright_orange $bright_green +client.focused_inactive $dark0_hard $dark0_hard $light0_hard $dark0_hard $dark0_hard +client.unfocused $dark0_hard $dark0_hard $light0_hard $dark0_hard #FFFFFF00 +client.urgent $dark0_hard $dark0 $light0_hard $dark0_hard $bright_orange +client.placeholder $dark0_hard $dark0_hard $light0_hard $dark0_hard $dark0_hard +client.background $dark0_hard + +# Took this from the default config +# 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 %I:%M:%S %p'; do sleep 1; done +# +# colors { +# statusline #ffffff +# background $dark0_hard +# inactive_workspace #32323200 #32323200 #5c5c5c +# } +# } + +# Default wallpaper (more resolutions are available in /usr/share/backgrounds/sway/) +output * bg /usr/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill + +# Testing this out +# dwt - disable while typing +# middle_emulation - middle click emulation +input "1267:12590:ELAN0755:00_04F3:312E_Touchpad" { + dwt enabled + tap enabled + natural_scroll enabled + middle_emulation enabled +} + +# start waybar +bar swaybar_command waybar + +# pretty important, loads specific fixes, e.g., https://www.reddit.com/r/swaywm/comments/n13tro/problem_with_dbus_auto_activation_in_archsway/ +include /etc/sway/config.d/* + diff --git a/dot_config/sway/config.old b/dot_config/sway/config.old new file mode 100644 index 0000000..da5c88f --- /dev/null +++ b/dot_config/sway/config.old @@ -0,0 +1,218 @@ +# Default config for sway +# +# Copy this to ~/.config/sway/config and edit it to your liking. +# +# Read `man 5 sway` for a complete reference. + +### Variables +# +# Logo key. Use Mod1 for Alt. +set $mod Mod4 +# Home row direction keys, like vim +set $left h +set $down j +set $up k +set $right l +# Your preferred terminal emulator +set $term alacritty +# Your preferred application launcher +# Note: pass the final command to swaymsg so that the resulting window can be opened +# on the original workspace that the command was run on. +set $menu dmenu_path | dmenu | xargs swaymsg exec -- + +### Output configuration +# +# Default wallpaper (more resolutions are available in /usr/share/backgrounds/sway/) +output * bg /usr/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill +# +# 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 +# +# Example configuration: +# +# input "2:14:SynPS/2_Synaptics_TouchPad" { +# dwt enabled +# tap enabled +# natural_scroll enabled +# middle_emulation enabled +# } +# +# You can get the names of your inputs by running: swaymsg -t get_inputs +# Read `man 5 sway-input` for more information about this section. + +### Key bindings +# +# Basics: +# + # Start a terminal + bindsym $mod+Return exec $term + + # Kill focused window + bindsym $mod+Shift+q kill + + # Start your launcher + bindsym $mod+d exec $menu + + # 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 + + # 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 number 1 + bindsym $mod+2 workspace number 2 + bindsym $mod+3 workspace number 3 + bindsym $mod+4 workspace number 4 + bindsym $mod+5 workspace number 5 + bindsym $mod+6 workspace number 6 + bindsym $mod+7 workspace number 7 + bindsym $mod+8 workspace number 8 + bindsym $mod+9 workspace number 9 + bindsym $mod+0 workspace number 10 + # Move focused container to workspace + bindsym $mod+Shift+1 move container to workspace number 1 + bindsym $mod+Shift+2 move container to workspace number 2 + bindsym $mod+Shift+3 move container to workspace number 3 + bindsym $mod+Shift+4 move container to workspace number 4 + bindsym $mod+Shift+5 move container to workspace number 5 + bindsym $mod+Shift+6 move container to workspace number 6 + bindsym $mod+Shift+7 move container to workspace number 7 + bindsym $mod+Shift+8 move container to workspace number 8 + bindsym $mod+Shift+9 move container to workspace number 9 + bindsym $mod+Shift+0 move container to workspace number 10 + # Note: workspaces can have any name you want, not just numbers. + # We just use 1-10 as the default. +# +# Layout stuff: +# + # You can "split" the current object of your focus with + # $mod+b or $mod+v, for horizontal and vertical splits + # respectively. + bindsym $mod+b 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+Shift+minus 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+minus scratchpad show +# +# Resizing containers: +# +mode "resize" { + # 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 10px + bindsym $down resize grow height 10px + bindsym $up resize shrink height 10px + bindsym $right resize grow width 10px + + # Ditto, with arrow keys + bindsym Left resize shrink width 10px + bindsym Down resize grow height 10px + bindsym Up resize shrink height 10px + bindsym Right resize grow width 10px + + # Return to default mode + bindsym Return mode "default" + bindsym Escape mode "default" +} +bindsym $mod+r mode "resize" + +# +# 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 %I:%M:%S %p'; do sleep 1; done + + colors { + statusline #ffffff + background #323232 + inactive_workspace #32323200 #32323200 #5c5c5c + } +} + +include /etc/sway/config.d/* + diff --git a/dot_config/waybar/config b/dot_config/waybar/config new file mode 100644 index 0000000..7bf3ef5 --- /dev/null +++ b/dot_config/waybar/config @@ -0,0 +1,161 @@ +{ + // "layer": "top", // Waybar at top layer + // "position": "bottom", // Waybar position (top|bottom|left|right) + "height": 30, // Waybar height (to be removed for auto height) + // "width": 1280, // Waybar width + "spacing": 4, // Gaps between modules (4px) + // Choose the order of the modules + "modules-left": ["sway/workspaces", "sway/mode", "custom/media"], + "modules-center": ["sway/window"], + "modules-right": ["mpd", "idle_inhibitor", "pulseaudio", "network", "cpu", "memory", "temperature", "backlight", "keyboard-state", "sway/language", "battery", "battery#bat2", "clock", "tray"], + // Modules configuration + // "sway/workspaces": { + // "disable-scroll": true, + // "all-outputs": true, + // "format": "{name}: {icon}", + // "format-icons": { + // "1": "", + // "2": "", + // "3": "", + // "4": "", + // "5": "", + // "urgent": "", + // "focused": "", + // "default": "" + // } + // }, + "keyboard-state": { + "numlock": true, + "capslock": true, + "format": "{name} {icon}", + "format-icons": { + "locked": "", + "unlocked": "" + } + }, + "sway/mode": { + //"format": "{}" + "format": "{}" + }, + "mpd": { + "format": "{stateIcon} {consumeIcon}{randomIcon}{repeatIcon}{singleIcon}{artist} - {album} - {title} ({elapsedTime:%M:%S}/{totalTime:%M:%S}) ⸨{songPosition}|{queueLength}⸩ {volume}% ", + "format-disconnected": "Disconnected ", + "format-stopped": "{consumeIcon}{randomIcon}{repeatIcon}{singleIcon}Stopped ", + "unknown-tag": "N/A", + "interval": 2, + "consume-icons": { + "on": " " + }, + "random-icons": { + "off": " ", + "on": " " + }, + "repeat-icons": { + "on": " " + }, + "single-icons": { + "on": "1 " + }, + "state-icons": { + "paused": "", + "playing": "" + }, + "tooltip-format": "MPD (connected)", + "tooltip-format-disconnected": "MPD (disconnected)" + }, + "idle_inhibitor": { + "format": "{icon}", + "format-icons": { + "activated": "", + "deactivated": "" + } + }, + "tray": { + // "icon-size": 21, + "spacing": 10 + }, + "clock": { + // "timezone": "America/New_York", + "tooltip-format": "{:%Y %B}\n{calendar}", + "format-alt": "{:%Y-%m-%d}" + }, + "cpu": { + "format": "{usage}% ", + "tooltip": false + }, + "memory": { + "format": "{}% " + }, + "temperature": { + // "thermal-zone": 2, + // "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input", + "critical-threshold": 80, + // "format-critical": "{temperatureC}°C {icon}", + "format": "{temperatureC}°C {icon}", + "format-icons": ["", "", ""] + }, + "backlight": { + // "device": "acpi_video1", + "format": "{percent}% {icon}", + "format-icons": ["", "", "", "", "", "", "", "", ""] + }, + "battery": { + "states": { + // "good": 95, + "warning": 30, + "critical": 15 + }, + "format": "{capacity}% {icon}", + "format-charging": "{capacity}% ", + "format-plugged": "{capacity}% ", + "format-alt": "{time} {icon}", + // "format-good": "", // An empty format will hide the module + // "format-full": "", + "format-icons": ["", "", "", "", ""] + }, + "battery#bat2": { + "bat": "BAT2" + }, + "network": { + // "interface": "wlp2*", // (Optional) To force the use of this interface + "format-wifi": "{essid} ({signalStrength}%) ", + "format-ethernet": "{ipaddr}/{cidr} ", + "tooltip-format": "{ifname} via {gwaddr} ", + "format-linked": "{ifname} (No IP) ", + "format-disconnected": "Disconnected ⚠", + "format-alt": "{ifname}: {ipaddr}/{cidr}" + }, + "pulseaudio": { + // "scroll-step": 1, // %, can be a float + "format": "{volume}% {icon} {format_source}", + "format-bluetooth": "{volume}% {icon} {format_source}", + "format-bluetooth-muted": " {icon} {format_source}", + "format-muted": " {format_source}", + "format-source": "{volume}% ", + "format-source-muted": "", + "format-icons": { + "headphone": "", + "hands-free": "", + "headset": "", + "phone": "", + "portable": "", + "car": "", + "default": ["", "", ""] + }, + "on-click": "pavucontrol" + }, + "custom/media": { + "format": "{icon} {}", + "return-type": "json", + "max-length": 40, + "format-icons": { + "spotify": "", + "default": "🎜" + }, + "escape": true, + "exec": "$HOME/.config/waybar/mediaplayer.py 2> /dev/null" // Script in resources folder + // "exec": "$HOME/.config/waybar/mediaplayer.py --player spotify 2> /dev/null" // Filter player based on name + } +} + + diff --git a/dot_config/waybar/gruvbox.scss b/dot_config/waybar/gruvbox.scss new file mode 100644 index 0000000..af57722 --- /dev/null +++ b/dot_config/waybar/gruvbox.scss @@ -0,0 +1,87 @@ +// ---------------------------------------------------------------------------- +// Gruvbox scss file +// June 18 2017 +// Author: Will Tanna + +// How to Read: +// $gb-dm-dark-red = Gruvbox-DarkMode-Dark-Red +// $gb-lm-dark-red = Gruvbox-LightMode-Dark-Red +// ---------------------------------------------------------------------------- + +// ---------------------------------------------------------------------------- +// Dark Mode +// ---------------------------------------------------------------------------- + +// Dark Background +$bg0: #282828; +$bg0-hard: #1d2021; +$bg0-soft: #32302f; +$bg1: #3c3836; +$bg2: #504945; +$bg3: #665c54; +$bg4: #7c6f64; + +// Dark Foreground +$fg0: #fbf1c7; +$fg1: #ebdbb2; +$fg2: #d5c4a1; +$fg3: #bdae93; +$fg4: #a89984; + +// Dark Colors +$dark-red: #cc241d; +$dark-green: #98971a; +$dark-yellow: #d79921; +$dark-blue: #458588; +$dark-purple: #b16286; +$dark-aqua: #689d6a; +$dark-orange: #d65d0e; +$dark-gray: #928374; + +$light-red: #fb4934; +$light-green: #b8bb26; +$light-yellow: #fabd2f; +$light-blue: #83a598; +$light-purple: #d3869b; +$light-aqua: #8ec07c; +$light-orange: #f38019; +$light-gray: #a89984; + +// ---------------------------------------------------------------------------- +// Light Mode +// ---------------------------------------------------------------------------- + +// Light Background +$gb-lm-bg0: #fbf1c7; +$gb-lm-bg0-hard: #f9f5d7; +$gb-lm-bg0-soft: #f2e5bc; +$gb-lm-bg1: #ebdbb2; +$gb-lm-bg2: #d5c4a1; +$gb-lm-bg3: #bdae93; +$gb-lm-bg4: #a89984; + +// Light Foreground +$gb-lm-fg0: #282828; +$gb-lm-fg1: #3c3836; +$gb-lm-fg2: #504945; +$gb-lm-fg3: #665c54; +$gb-lm-fg4: #7c6f64; + +// Light Colors +$gb-lm-dark-red: #cc241d; +$gb-lm-dark-green: #98971a; +$gb-lm-dark-yellow: #d79921; +$gb-lm-dark-blue: #458588; +$gb-lm-dark-purple: #b16286; +$gb-lm-dark-aqua: #689d6a; +$gb-lm-dark-orange: #d65d0e; +$gb-lm-dark-gray: #928374; + +$gb-lm-light-red: #9d0006; +$gb-lm-light-green: #79740e; +$gb-lm-light-yellow: #b57614; +$gb-lm-light-blue: #076678; +$gb-lm-light-purple: #8f3f71; +$gb-lm-light-aqua: #427b58; +$gb-lm-light-orange: #af3a03; +$gb-lm-light-gray: #7c6f64; diff --git a/dot_config/waybar/style.css b/dot_config/waybar/style.css new file mode 100644 index 0000000..6c7f2f2 --- /dev/null +++ b/dot_config/waybar/style.css @@ -0,0 +1,238 @@ +* { + /* `otf-font-awesome` is required to be installed for icons */ + /* font-family: FontAwesome, Roboto, Helvetica, Arial, sans-serif; */ + font-family: FiraCode Nerd Font Mono; + font-size: 12px; +} + +window#waybar { + background-color: #282828; + border-bottom: 3px solid #7c6f64; + color: #fbf1c7; + transition-property: background-color; + transition-duration: 0.5s; +} + +window#waybar.hidden { + opacity: 0.2; +} + +/* +window#waybar.empty { + background-color: transparent; +} +window#waybar.solo { + background-color: #FFFFFF; +} +*/ +window#waybar.termite { + background-color: #282828; +} + +window#waybar.chromium { + background-color: #282828; + border: none; +} + +#workspaces button { + padding: 0 5px; + background-color: transparent; + color: #fbf1c7; + /* Use box-shadow instead of border so the text isn't offset */ + box-shadow: inset 0 -3px transparent; + /* Avoid rounded borders under each workspace name */ + border: none; + border-radius: 0; + /* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */ +} +#workspaces button:hover { + background: rgba(0, 0, 0, 0.2); + box-shadow: inset 0 -3px #fbf1c7; +} +#workspaces button.focused { + background-color: #504945; + box-shadow: inset 0 -3px #fbf1c7; +} +#workspaces button.urgent { + background-color: #eb4d4b; +} + +#mode { + background-color: #64727D; + border-bottom: 3px solid #fbf1c7; +} + +#clock, +#battery, +#cpu, +#memory, +#disk, +#temperature, +#backlight, +#network, +#pulseaudio, +#custom-media, +#tray, +#mode, +#idle_inhibitor, +#mpd { + padding: 0 10px; + color: #fbf1c7; +} + +#window, +#workspaces { + margin: 0 4px; +} + +/* If workspaces is the leftmost module, omit left margin */ +.modules-left > widget:first-child > #workspaces { + margin-left: 0; +} + +/* If workspaces is the rightmost module, omit right margin */ +.modules-right > widget:last-child > #workspaces { + margin-right: 0; +} + +#clock { + background-color: #64727D; +} + +@keyframes blink { + to { + background-color: #fbf1c7; + color: #000000; + } +} +#battery { + background-color: #fbf1c7; + color: #000000; +} +#battery.charging, #battery.plugged { + color: #fbf1c7; + background-color: #b8bb26; +} +#battery.critical:not(.charging) { + color: #fbf1c7; + background-color: #fb4934; + animation-name: blink; + animation-duration: 0.5s; + animation-timing-function: linear; + animation-iteration-count: infinite; + animation-direction: alternate; +} + +label:focus { + background-color: #282828; +} + +#cpu { + background-color: #b8bb26; + color: #000000; +} + +#memory { + background-color: #fabd2f; +} + +#disk { + background-color: #83a598; +} + +#backlight { + background-color: #d3869b; +} + +#network { + background-color: #8ec07c; +} + +#network.disconnected { + background-color: #cc241d; +} + +#pulseaudio { + background-color: #fabd2f; + color: #000000; +} +#pulseaudio.muted { + background-color: #d79921; + color: #2a5c45; +} + +#custom-media { + background-color: #66cc99; + color: #2a5c45; + min-width: 100px; +} +#custom-media.custom-spotify { + background-color: #66cc99; +} +#custom-media.custom-vlc { + background-color: #ffa000; +} + +#temperature { + background-color: #b8bb26; +} +#temperature.critical { + background-color: #fb4934; +} + +#tray { + background-color: #2980b9; +} +#tray > .passive { + -gtk-icon-effect: dim; +} +#tray > .needs-attention { + -gtk-icon-effect: highlight; + background-color: #eb4d4b; +} + +#idle_inhibitor { + background-color: #7c6f64; +} +#idle_inhibitor.activated { + background-color: #a89984; + color: #7c6f64; +} + +#mpd { + background-color: #b8bb26; + color: #2a5c45; +} +#mpd.disconnected { + background-color: #cc241d; +} +#mpd.stopped { + background-color: #458588; +} +#mpd.paused { + background-color: #83a598; +} + +#language { + background: #00b093; + color: #740864; + padding: 0 5px; + margin: 0 5px; + min-width: 16px; +} + +#keyboard-state { + background: #689d6a; + color: #282828; + padding: 0 0px; + margin: 0 5px; + min-width: 16px; +} +#keyboard-state > label { + padding: 0 5px; +} +#keyboard-state > label.locked { + background: rgba(0, 0, 0, 0.2); +} + +/*# sourceMappingURL=style.css.map */ diff --git a/dot_config/waybar/style.css.map b/dot_config/waybar/style.css.map new file mode 100644 index 0000000..a453afe --- /dev/null +++ b/dot_config/waybar/style.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["style.scss","gruvbox.scss"],"names":[],"mappings":"AAEA;AACI;AACA;EACA;EACA;;;AAGJ;EACI,kBCKE;EDJF;EACA,OCYE;EDXF;EACA;;;AAGJ;EACI;;;AAGJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA;EACI,kBChBE;;;ADmBN;EACI,kBCpBE;EDqBF;;;AAGJ;EACI;EACA;EACA,OClBE;ADmBF;EACA;AACA;EACA;EACA;AAEA;;AACA;EACI;EACA;;AAGJ;EACI,kBCrCF;EDsCE;;AAGJ;EACI;;;AAKR;EACI;EACA;;;AAGJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAcI;EACA,OC9DE;;;ADiEN;AAAA;EAEI;;;AAGJ;AACA;EACI;;;AAGJ;AACA;EACI;;;AAGJ;EACI;;;AAGJ;EACI;IACI,kBCtFF;IDuFE;;;AAIR;EACI,kBC5FE;ED6FF;;AAEA;EACI,OChGF;EDiGE,kBChFM;;ADmFV;EACI,OCrGF;EDsGE,kBCtFI;EDuFJ;EACA;EACA;EACA;EACA;;;AAIR;EACI,kBCzHE;;;AD4HN;EACI,kBCnGU;EDoGV;;;AAGJ;EACI,kBCvGW;;;AD0Gf;EACI,kBC1GS;;;AD6Gb;EACI,kBC7GW;;;ADgHf;EACI,kBChHS;;;ADmHb;EACI,kBClIO;;;ADqIX;EACI,kBC3HW;ED4HX;;AAEA;EACI,kBCxIM;EDyIN;;;AAKR;EACI;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;;AAKR;EACI,kBCtJU;;ADwJV;EACI,kBC1JI;;;AD+JZ;EACI;;AAEA;EACI;;AAGJ;EACI;EACA;;;AAKR;EACI,kBCjME;;ADmMF;EACI,kBC7LF;ED8LE,OCrMF;;;AD0MN;EACI,kBCvLU;EDwLV;;AAEA;EACI,kBCrMG;;ADwMP;EACI,kBCtMI;;ADyMR;EACI,kBCjMK;;;ADqMb;EACI;EACA;EACA;EACA;EACA;;;AAGJ;EACI,YCrNQ;EDsNR,OC3OE;ED4OF;EACA;EACA;;AAEA;EACI;;AAGJ;EACI","file":"style.css"} \ No newline at end of file diff --git a/dot_config/waybar/style.scss b/dot_config/waybar/style.scss new file mode 100644 index 0000000..a4e50d8 --- /dev/null +++ b/dot_config/waybar/style.scss @@ -0,0 +1,263 @@ +@import 'gruvbox.scss'; + +* { + /* `otf-font-awesome` is required to be installed for icons */ + /* font-family: FontAwesome, Roboto, Helvetica, Arial, sans-serif; */ + font-family: FiraCode Nerd Font Mono; + font-size: 12px; +} + +window#waybar { + background-color: $bg0; + border-bottom: 3px solid $bg4; + color: $fg0; + transition-property: background-color; + transition-duration: .5s; +} + +window#waybar.hidden { + opacity: 0.2; +} + +/* +window#waybar.empty { + background-color: transparent; +} +window#waybar.solo { + background-color: #FFFFFF; +} +*/ + +window#waybar.termite { + background-color: $bg0; +} + +window#waybar.chromium { + background-color: $bg0; + border: none; +} + +#workspaces button { + padding: 0 5px; + background-color: transparent; + color: $fg0; + /* Use box-shadow instead of border so the text isn't offset */ + box-shadow: inset 0 -3px transparent; + /* Avoid rounded borders under each workspace name */ + border: none; + border-radius: 0; + + /* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */ + &:hover { + background: rgba(0, 0, 0, 0.2); + box-shadow: inset 0 -3px $fg0; + } + + &.focused { + background-color: $bg2; + box-shadow: inset 0 -3px $fg0; + } + + &.urgent { + background-color: #eb4d4b; + } +} + + +#mode { + background-color: #64727D; + border-bottom: 3px solid $fg0; +} + +#clock, +#battery, +#cpu, +#memory, +#disk, +#temperature, +#backlight, +#network, +#pulseaudio, +#custom-media, +#tray, +#mode, +#idle_inhibitor, +#mpd { + padding: 0 10px; + color: $fg0; +} + +#window, +#workspaces { + margin: 0 4px; +} + +/* If workspaces is the leftmost module, omit left margin */ +.modules-left > widget:first-child > #workspaces { + margin-left: 0; +} + +/* If workspaces is the rightmost module, omit right margin */ +.modules-right > widget:last-child > #workspaces { + margin-right: 0; +} + +#clock { + background-color: #64727D; +} + +@keyframes blink { + to { + background-color: $fg0; + color: #000000; + } +} + +#battery { + background-color: $fg0; + color: #000000; + + &.charging, &.plugged { + color: $fg0; + background-color: $light-green; + } + + &.critical:not(.charging) { + color: $fg0; + background-color: $light-red; + animation-name: blink; + animation-duration: 0.5s; + animation-timing-function: linear; + animation-iteration-count: infinite; + animation-direction: alternate; + } +} + +label:focus { + background-color: $bg0; +} + +#cpu { + background-color: $light-green; + color: #000000; +} + +#memory { + background-color: $light-yellow; +} + +#disk { + background-color: $light-blue; +} + +#backlight { + background-color: $light-purple; +} + +#network { + background-color: $light-aqua; +} + +#network.disconnected { + background-color: $dark-red; +} + +#pulseaudio { + background-color: $light-yellow; + color: #000000; + + &.muted { + background-color: $dark-yellow; + color: #2a5c45; + } +} + + +#custom-media { + background-color: #66cc99; + color: #2a5c45; + min-width: 100px; + + &.custom-spotify { + background-color: #66cc99; + } + + &.custom-vlc { + background-color: #ffa000; + } +} + + +#temperature { + background-color: $light-green; + + &.critical { + background-color: $light-red; + } +} + + +#tray { + background-color: #2980b9; + + & > .passive { + -gtk-icon-effect: dim; + } + + & > .needs-attention { + -gtk-icon-effect: highlight; + background-color: #eb4d4b; + } +} + + +#idle_inhibitor { + background-color: $bg4; + + &.activated { + background-color: $fg4; + color: $bg4; + } +} + + +#mpd { + background-color: $light-green; + color: #2a5c45; + + &.disconnected { + background-color: $dark-red; + } + + &.stopped { + background-color: $dark-blue; + } + + &.paused { + background-color: $light-blue; + } +} + +#language { + background: #00b093; + color: #740864; + padding: 0 5px; + margin: 0 5px; + min-width: 16px; +} + +#keyboard-state { + background: $dark-aqua; + color: $bg0; + padding: 0 0px; + margin: 0 5px; + min-width: 16px; + + & > label { + padding: 0 5px; + } + + & > label.locked { + background: rgba(0, 0, 0, 0.2); + } +}