diff --git a/sway-all/sway/README.md b/sway-all/sway/README.md new file mode 100644 index 0000000..731aae7 --- /dev/null +++ b/sway-all/sway/README.md @@ -0,0 +1,11 @@ +# Sway config + +Maybe an overkill with `config.d/` but wth. + +## Waybar + +``` +sudo pacman -S waybar +ln -s $XDG_CONFIG_HOME/sway/waybar $XDG_CONFIG_HOME/waybar +systemctl --user enable --now waybar.service +``` diff --git a/sway-all/sway/config b/sway-all/sway/config new file mode 100644 index 0000000..5b13f8f --- /dev/null +++ b/sway-all/sway/config @@ -0,0 +1,2 @@ +include /etc/sway/config.d/* +include ~/.config/sway/config.d/* diff --git a/sway-all/sway/config.d/00-output.conf b/sway-all/sway/config.d/00-output.conf new file mode 100644 index 0000000..8732443 --- /dev/null +++ b/sway-all/sway/config.d/00-output.conf @@ -0,0 +1,48 @@ +### Output configuration +# +# 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 +# +output "eDP-1" { + mode 1920x1080@60.033Hz + pos 0 720 + transform normal + scale 1.0 + scale_filter nearest + adaptive_sync off + dpms on + bg ~/.config/sway/screen.png fill +} +output "DP-1" { + mode 3840x2160@59.997Hz + pos 1920 0 + transform normal + scale 1.2 + scale_filter linear + adaptive_sync off + dpms on + bg ~/.config/sway/screen.png fill +} +output "DP-2" { + mode 3840x2160@59.997Hz + pos 1920 0 + transform normal + scale 1.2 + scale_filter linear + adaptive_sync off + dpms on + bg ~/.config/sway/screen.png fill +} +output "HDMI-A-1" { + mode 3840x2160@59.997Hz + pos 1920 0 + transform normal + scale 1.2 + scale_filter linear + adaptive_sync off + dpms on + bg ~/.config/sway/screen.png fill +} diff --git a/sway-all/sway/config.d/10-variables.conf b/sway-all/sway/config.d/10-variables.conf new file mode 100644 index 0000000..afc9aff --- /dev/null +++ b/sway-all/sway/config.d/10-variables.conf @@ -0,0 +1,15 @@ +### 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: it's recommended that you pass the final command to sway +# set $menu wofi -c $HOME/.config/wofi/config -s $HOME/.config/wofi/style.css | xargs swaymsg exec -- +set $menu ~/src/wldash/target/release/wldash diff --git a/sway-all/sway/config.d/30-input.conf b/sway-all/sway/config.d/30-input.conf new file mode 100644 index 0000000..0f168bc --- /dev/null +++ b/sway-all/sway/config.d/30-input.conf @@ -0,0 +1,29 @@ +### 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. + +input 1:1:AT_Translated_Set_2_keyboard { + xkb_layout "us,mk" + xkb_variant "typewriter" + xkb_options "grp:caps_toggle" +} + +# Pulse Audio controls +bindsym XF86AudioRaiseVolume exec pactl set-sink-volume 0 +5% #increase sound volume +bindsym XF86AudioLowerVolume exec pactl set-sink-volume 0 -5% #decrease sound volume +bindsym XF86AudioMute exec pactl set-sink-mute 0 toggle # mute sound +bindsym XF86AudioMicMute exec pactl set-source-mute alsa_input.pci-0000_00_1b.0.analog-stereo toggle # mute mic + +# Sreen brightness controls +bindsym XF86MonBrightnessUp exec brightnessctl -q s +10% +bindsym XF86MonBrightnessDown exec brightnessctl -q s 10%- diff --git a/sway-all/sway/config.d/50-style.conf b/sway-all/sway/config.d/50-style.conf new file mode 100644 index 0000000..a2c938c --- /dev/null +++ b/sway-all/sway/config.d/50-style.conf @@ -0,0 +1,36 @@ + +# Remove title from windows +default_border pixel 1 +default_floating_border normal +bindsym $mod+t border toggle + +hide_edge_borders smart + +# Background +set $bg #232425 +# Background active +set $ba #191919 +# Background inactive +set $bi #3f3f3f +# Foreground active +set $fa #eff1f5 +# Foreground inactive +set $fi #646464 +# Border active +set $bra #9a9a9a +# Border inactive +set $bri #000000 + +# class border backgr. text indicator child_border +client.focused $bra $bra $bg $bg $bra +client.focused_inactive $bra $ba $fa $bg $bri +client.unfocused $bri $bi $fi $bg $bri +#client.urgent $br $br $fg $bg $br #currently not implemented +#client.placeholder $br $br $fg $bg $br #currently not implemented +client.background $bg + +gaps inner 0 +gaps outer 0 +#smart_gaps on + +for_window [app_id=".*"] border normal diff --git a/sway-all/sway/config.d/60-app-windows.conf b/sway-all/sway/config.d/60-app-windows.conf new file mode 100644 index 0000000..e5221e2 --- /dev/null +++ b/sway-all/sway/config.d/60-app-windows.conf @@ -0,0 +1,34 @@ +for_window [class="Firefox"] mark Browser +for_window [class="Firefox" window_role="Browser"] { + border normal 0 +} +# firefox floating menus +for_window [window_role="pop-up"] floating enable +for_window [window_role="task_dialog"] floating enable +for_window [window_role="pop-up"] floating enable +for_window [window_role="bubble"] floating enable +for_window [window_role="task_dialog"] floating enable +for_window [window_role="Preferences"] floating enable +for_window [window_type="dialog"] floating enable +for_window [window_type="menu"] floating enable +for_window [title="About Mozilla Firefox"] floating enabled +for_window [title="Password Required - Mozilla Firefox"] floating enabled +for_window [app_id="pinentry-qt"] { + move position center + floating enable +} +for_window [app_id="pavucontrol"] { + move position center + floating enable +} +for_window [app_id="wdisplays"] { + floating enable +} +for_window [app_id="com.nextcloud.desktopclient.nextcloud"] { + border normal 1 + floating enable +} + +for_window [app_id="avizo-service"] border pixel 0 +for_window [app_id="avizo-service"] sticky toggle +no_focus [app_id="avizo-service"] diff --git a/sway-all/sway/config.d/90-bindings.conf b/sway-all/sway/config.d/90-bindings.conf new file mode 100644 index 0000000..51af250 --- /dev/null +++ b/sway-all/sway/config.d/90-bindings.conf @@ -0,0 +1,150 @@ +### 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 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 + # 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 + + + +# Lock screen +bindsym $mod+z exec swaylock -c 000000 + +# Take full screen screenshot with PrtScr +bindsym Print exec grim -t png /tmp/screen.png +# Take area screenshot with Shift+PrtScr +bindsym Shift+Print exec grim -g "$(slurp)" /tmp/screen.png + +# +# Resizing containers: +# + bindsym $mod+r mode "resize" + + 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" + } + diff --git a/sway-all/sway/config.d/91-swaysome.conf b/sway-all/sway/config.d/91-swaysome.conf new file mode 100644 index 0000000..7f5308f --- /dev/null +++ b/sway-all/sway/config.d/91-swaysome.conf @@ -0,0 +1,52 @@ +# Change focus between workspaces +unbindsym $mod+1 +unbindsym $mod+2 +unbindsym $mod+3 +unbindsym $mod+4 +unbindsym $mod+5 +unbindsym $mod+6 +unbindsym $mod+7 +unbindsym $mod+8 +unbindsym $mod+9 +unbindsym $mod+0 +bindsym $mod+1 exec "swaysome focus 1" +bindsym $mod+2 exec "swaysome focus 2" +bindsym $mod+3 exec "swaysome focus 3" +bindsym $mod+4 exec "swaysome focus 4" +bindsym $mod+5 exec "swaysome focus 5" +bindsym $mod+6 exec "swaysome focus 6" +bindsym $mod+7 exec "swaysome focus 7" +bindsym $mod+8 exec "swaysome focus 8" +bindsym $mod+9 exec "swaysome focus 9" +bindsym $mod+0 exec "swaysome focus 0" + +# Move containers between workspaces +unbindsym $mod+Shift+1 +unbindsym $mod+Shift+2 +unbindsym $mod+Shift+3 +unbindsym $mod+Shift+4 +unbindsym $mod+Shift+5 +unbindsym $mod+Shift+6 +unbindsym $mod+Shift+7 +unbindsym $mod+Shift+8 +unbindsym $mod+Shift+9 +unbindsym $mod+Shift+0 +bindsym $mod+Shift+1 exec "swaysome move 1" +bindsym $mod+Shift+2 exec "swaysome move 2" +bindsym $mod+Shift+3 exec "swaysome move 3" +bindsym $mod+Shift+4 exec "swaysome move 4" +bindsym $mod+Shift+5 exec "swaysome move 5" +bindsym $mod+Shift+6 exec "swaysome move 6" +bindsym $mod+Shift+7 exec "swaysome move 7" +bindsym $mod+Shift+8 exec "swaysome move 8" +bindsym $mod+Shift+9 exec "swaysome move 9" +bindsym $mod+Shift+0 exec "swaysome move 0" + +# Move focused container to next output +bindsym $mod+o exec "swaysome next_output" + +# Move focused container to previous output +bindsym $mod+Shift+o exec "swaysome prev_output" + +# Init workspaces for every screen +exec "swaysome init 1" diff --git a/sway-all/sway/config.d/99-startup.conf b/sway-all/sway/config.d/99-startup.conf new file mode 100644 index 0000000..dd448c8 --- /dev/null +++ b/sway-all/sway/config.d/99-startup.conf @@ -0,0 +1,3 @@ +exec "~/.config/sway/bin/keyboard-layout-per-window.py" +exec "systemctl --user start sway-session.target" +exec dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=sway diff --git a/sway-all/sway/screen.png b/sway-all/sway/screen.png new file mode 100644 index 0000000..7acdb58 Binary files /dev/null and b/sway-all/sway/screen.png differ diff --git a/sway-all/swayidle/config b/sway-all/swayidle/config new file mode 100644 index 0000000..a8f314c --- /dev/null +++ b/sway-all/swayidle/config @@ -0,0 +1,7 @@ +# ~/.config/swayidle/config +timeout 300 'swaylock -f' +timeout 600 'swaymsg "output * dpms off"' resume 'swaymsg "output * dpms on"' +before-sleep 'swaylock -f' +after-resume 'swaymsg "output * dpms on"' +unlock 'swaymsg "output * dpms on"' +lock 'swaylock -f' diff --git a/sway-all/swaylock/config b/sway-all/swaylock/config new file mode 100644 index 0000000..46471b7 --- /dev/null +++ b/sway-all/swaylock/config @@ -0,0 +1 @@ +color=222222 diff --git a/sway-all/waybar/config b/sway-all/waybar/config new file mode 100644 index 0000000..4312297 --- /dev/null +++ b/sway-all/waybar/config @@ -0,0 +1,90 @@ +{ + "layer": "top", // Waybar at top layer + "position": "bottom", // Waybar position (top|bottom|left|right) + "height": 30, + "modules-left": ["sway/workspaces", "sway/mode", "sway/window"], + "modules-center": [], + "modules-right": ["temperature", "network", "battery", "pulseaudio", "backlight", "cpu", "memory", "custom/layout", "clock", "tray"], + // Module config + "sway/mode": { + "tooltip": true, + "format": "{}" + }, + "temperature": { + "thermal-zone": 1, + "hwmon-path": "/sys/class/hwmon/hwmon2/temp3_input", + "critical-threshold": 80, + "format-critical": "🌡 {temperatureC}°C", + "format": "ī‹‹ {temperatureC}°C" + }, + "custom/vpn": { + }, + "network": { + "tooltip": false, + "interface": "wlp3s0*", + "format-wifi": "ī‡Ģ {essid} ({signalStrength}%)", + "format-ethernet": "{ifname}: {ipaddr}/{cidr}", + "format-linked": "{ifname} (No IP)", + "format-alt": "{ifname}: {ipaddr}", + "format-disconnected": "No internet" + }, + "battery": { + "tooltip": false, + "states": { + "good": 95, + "warning": 30, + "critical": 15 + }, + "format": "{icon} {capacity}%", + "format-alt": "{time} {icon} {power}", + "format-charging": "ī‡Ļ {capacity}%", + "format-icons": ["đŸĒĢ", "ī‰", "🔋"], + "format-plugged": "ī‡Ļ {capacity}%" + }, + "backlight": { + "device": "amdgpu_bl0", + "format": "{icon} {percent}%", + "format-icons": ["ī„‘", "ī†…"] + }, + "pulseaudio": { + "tooltip": true, + "scroll-step": 1.0, + "format": "{icon} {volume}%", + "format-bluetooth": "ī‚ą {volume}%", + "format-muted": "🔇", + "format-source": "{volume}%", + "format-source-muted": "🔇", + "format-icons": { + "headphones": "🎧", + "handsfree": "🎧", + "headset": "🎧", + "phone": "ī‚•", + "portable": "ī‚•", + "car": "ī†š", + "default": ["🔊"] + }, + "on-click": "pavucontrol" + }, + "cpu": { + "interval": 5, + "tooltip": false, + "format": "ī„ˆ {usage}%" + }, + "memory": { + "format": "īƒ‰ {}%" + }, + "custom/layout": { + "exec": "~/.config/waybar/keyboard-layout.py", + "return-type": "json", + "format": "| {}" + }, + "clock": { + "tooltip": false, + "format": "| {:%d.%m.%Y %H:%M}" + }, + "tray": { + "tooltip": false, + "icon-size": 18, + "spacing": 5 + } +} diff --git a/sway-all/waybar/config.yaml b/sway-all/waybar/config.yaml new file mode 100644 index 0000000..2ea7ee7 --- /dev/null +++ b/sway-all/waybar/config.yaml @@ -0,0 +1,82 @@ +--- +outputMode: active +scale: 1 +background: + red: 0.0 + green: 0.0 + blue: 0.0 + opacity: 0.8999999761581421 +widget: + margin: + margins: + - 20 + - 20 + - 20 + - 20 + widget: + verticalLayout: + - horizontalLayout: + - margin: + margins: + - 0 + - 88 + - 0 + - 32 + widget: + verticalLayout: + - date: + font: ~ + font_size: 64.0 + - clock: + font: ~ + font_size: 256.0 + - verticalLayout: + - margin: + margins: + - 0 + - 0 + - 0 + - 8 + widget: + battery: + font: ~ + font_size: 24.0 + length: 0 + - margin: + margins: + - 0 + - 0 + - 0 + - 8 + widget: + backlight: + device: intel_backlight + font: ~ + font_size: 24.0 + length: 0 + - margin: + margins: + - 0 + - 0 + - 0 + - 8 + widget: + pulseAudio: + font: ~ + font_size: 24.0 + length: 0 + - calendar: + font_primary: ~ + font_secondary: ~ + font_size: 16.0 + sections: 3 + - launcher: + font: ~ + font_size: 32.0 + length: 0 + app_opener: "" + term_opener: "" + url_opener: "" +fonts: + sans: sans + mono: mono diff --git a/sway-all/waybar/keyboard-layout.py b/sway-all/waybar/keyboard-layout.py new file mode 100755 index 0000000..92f132a --- /dev/null +++ b/sway-all/waybar/keyboard-layout.py @@ -0,0 +1,36 @@ +#!/usr/bin/python +import i3ipc +import json + + +long_to_short = { + 'English (US)': 'en', + 'Macedonian': 'mk', +} + +def print_status(keyboard): + layout = keyboard.xkb_active_layout_name + short_code = long_to_short.get(layout, layout) + output = {"text": short_code, "tooltip": layout, "class": short_code} + print(json.dumps(output), flush=True) + +def find_keyboard(sway): + # *the* keyboard is the one with more than one layout + for input_dev in sway.get_inputs(): + if input_dev.type == 'keyboard' and len(input_dev.xkb_layout_names) > 1: + return input_dev + +def on_input(sway, event): + if event.change == "xkb_layout" and \ + event.input.identifier == sway.keyboard.identifier: + print_status(event.input) + +def main(): + sway = i3ipc.Connection() + sway.keyboard = find_keyboard(sway) + print_status(sway.keyboard) + + sway.on(i3ipc.Event.INPUT, on_input) + sway.main() + +main() diff --git a/sway-all/waybar/style.css b/sway-all/waybar/style.css new file mode 100644 index 0000000..1bd9166 --- /dev/null +++ b/sway-all/waybar/style.css @@ -0,0 +1,123 @@ +* { + border: none; + border-radius: 0; + font-family: Consolas, "Material Design Icons"; + font-size: 1em; + min-height: 0; +} + +window#waybar { + background-color: rgba(11, 11, 11, 0.8); + color: #ffffff; + transition-property: background-color; + transition-duration: .5s; +} + +window#waybar.hidden { + opacity: 0.2; +} + +#window { + padding: 0 15px; +} + +window { + color: rgba(217, 216, 216, 1); + background: rgba(35, 31, 32, 0.00); +} + +window#waybar.solo { + color: rgba(217, 216, 216, 1); + background: rgba(35, 31, 32, 0.85); +} + +/* +window#waybar.empty { + background-color: transparent; +} +window#waybar.solo { + background-color: #FFFFFF; +} +*/ + +/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */ +#workspaces button { + padding: 0 5px; + background-color: transparent; + border-bottom: 2px solid rgba(180, 14, 25, 0.5); + color: #999999; +} + +#workspaces button.focused { + color: #ffffff; + background-color: #333333; + border-bottom: 2px solid #ff9600; +} + +#workspaces button.urgent { + background-color: #eb4d4b; +} + +#clock, +#custom-vpn, +#battery, +#cpu, +#memory, +#backlight, +#network, +#pulseaudio, +#tray, +#temperature, +#mode, +#idle_inhibitor { + padding: 0 5px; + margin: 0 4px; + background-color: transparent; + border-bottom: 2px solid #bdbd45; + color: #ffffff; +} + +#temperature { + border-bottom: 2px solid #42a832; +} +#mode { + background-color: #00ff96; + color: #000000; +} + +#pulseaudio, +#clock, +#tray, +#cpu { + border-bottom: transparent; +} + +#battery { + border-bottom: 2px solid #bff874; +} + +#battery.charging { + border-bottom: 2px solid #00ff96; +} + +#custom-vpn.down, +#temperature.critical, +#battery.critical:not(.charging) { + border-bottom: 2px solid #dd2241; +} + +label:focus { + background-color: #000000; +} + +#network.disconnected { + border-bottom: 2px solid #dd2241; +} + +#pulseaudio.bluetooth { + border-bottom: 2px solid #1a8cff; +} + +#pulseaudio.muted { + border-bottom: 2px solid #fff569; +}