From 11838c0f9855d1d785ad1ab3e8bf5d129d211e17 Mon Sep 17 00:00:00 2001 From: Adam French Date: Thu, 5 Mar 2026 14:47:40 +0000 Subject: [PATCH] add sway and waybar configs --- i3config | 3 +- sh/waybar-history | 14 ++ swayconfig | 333 ++++++++++++++++++++++++++++++++++++++++++++++ waybar_config | 107 +++++++++++++++ waybar_style.css | 112 ++++++++++++++++ wofi_style.css | 48 +++++++ 6 files changed, 616 insertions(+), 1 deletion(-) create mode 100755 sh/waybar-history create mode 100644 swayconfig create mode 100644 waybar_config create mode 100644 waybar_style.css create mode 100644 wofi_style.css diff --git a/i3config b/i3config index 4453962..52b8529 100644 --- a/i3config +++ b/i3config @@ -329,7 +329,8 @@ for_window [urgent=latest] focus # Start i3bar to display a workspace bar (plus the system information i3status if available) bar { - status_command i3blocks -c ~/scripts/i3blocks.conf + #status_command i3blocks -c ~/scripts/i3blocks.conf + status_command i3status position bottom tray_output primary diff --git a/sh/waybar-history b/sh/waybar-history new file mode 100755 index 0000000..bd383f4 --- /dev/null +++ b/sh/waybar-history @@ -0,0 +1,14 @@ +#!/bin/bash +# waybar-history: streams last zsh history command, updates on each new entry + +histfile="$HOME/.zsh_history" + +output() { + tail -1 "$histfile" | cut -d';' -f2- +} + +output + +while inotifywait -qq -e close_write "$histfile" 2>/dev/null; do + output +done diff --git a/swayconfig b/swayconfig new file mode 100644 index 0000000..a35ca09 --- /dev/null +++ b/swayconfig @@ -0,0 +1,333 @@ +output * scale 1.2 + + +# WORKSPACE NAMES ----------------------------------- +set $ws1 1:ツ +set $ws2 2:ಠ‿ಠ +set $ws3 3:◕‿◕ +set $ws4 4:ʘ‿ʘ +set $ws5 5:˘◡˘ +set $ws6 6:◠‿◠ +set $ws7 7:ᵔᴥᵔ +set $ws8 8:æ + +# DEFAULT STARTUP -------------------------------------- +# Keyboard: caps:swapescape via sway input (replaces setxkbmap) +exec_always export XKB_DEFAULT_OPTIONS="caps:escape" +input * { + xkb_options caps:swapescape + xkb_layout gb +} + +exec --no-startup-id volctl +exec --no-startup-id fcitx5 +exec --no-startup-id /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 +exec --no-startup-id nm-applet --indicator +exec --no-startup-id pamac-tray +# clipit is X11-only; use cliphist + wl-paste instead: +exec wl-paste --watch cliphist store +exec --no-startup-id dunst +# swayidle replaces xautolock +exec swayidle -w timeout 1800 'swaylock -f' before-sleep 'swaylock -f' +exec --no-startup-id waterfox +exec --no-startup-id steam +exec --no-startup-id surfshark + +# picom is X11-only; sway has a built-in compositor — no exec needed + +# PACTL BINDINGS --------------------------------------- + +set $refresh_i3status killall -SIGUSR1 i3status +bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% +bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% +bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle +bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle + +# BRIGHTNESSCTL BINDINGS ---------------------------------- + +bindsym XF86MonBrightnessUp exec --no-startup-id brightnessctl set +5% +bindsym XF86MonBrightnessDown exec --no-startup-id brightnessctl set 5%- + +# DEFAULT WINDOW LAYOUT ------------------------------------- + +workspace_layout stacking +default_border pixel 1 +default_floating_border normal +hide_edge_borders none + +# KEYBINDS -------------------------------------------------- + +set $mod Mod4 + +# change borders +bindsym $mod+u border none +bindsym $mod+y border pixel 1 +bindsym $mod+n border normal + +# Use Mouse+$mod to drag floating windows +floating_modifier $mod normal + +# start a terminal +bindsym $mod+Return exec kitty +# kill focused window +bindsym $mod+Shift+q kill +# start program launcher +bindsym $mod+d exec --no-startup-id wofi --show drun --style ~/scripts/wofi_style.css + +bindsym $mod+Ctrl+m exec pavucontrol + +# Start Applications +bindsym $mod+F2 exec waterfox +bindsym $mod+F3 exec kitty -e ranger +bindsym $mod+Shift+F3 exec pcmanfm +bindsym $mod+F5 exec kitty -e 'mocp' +# picom keybinds removed (not applicable on Wayland) +bindsym $mod+Shift+d --release exec "killall dunst; exec notify-send 'restart dunst'" +# Screenshots: grim + slurp replace i3-scrot / flameshot +bindsym Print exec grim -g "$(slurp)" +bindsym $mod+Print exec grim -g "$(swaymsg -t get_tree | jq -r '.. | select(.focused?) | .rect | "\(.x),\(.y) \(.width)x\(.height)"')" +bindsym $mod+Shift+Print exec grim -g "$(slurp)" +# xkill not available on Wayland; swaymsg kill is the closest equivalent +bindsym $mod+Ctrl+x exec swaymsg kill + +focus_follows_mouse yes + +# 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 + +# workspace back and forth (with/without active container) +workspace_auto_back_and_forth yes +bindsym $mod+b workspace back_and_forth +bindsym $mod+Shift+b move container to workspace back_and_forth; workspace back_and_forth + +# split orientation +bindsym $mod+g split h;exec notify-send 'tile horizontally' +bindsym $mod+v split v;exec notify-send 'tile vertically' +bindsym $mod+q split toggle + +# toggle fullscreen mode for the focused container +bindsym $mod+f fullscreen toggle + +# change container layout (stacked, tabbed, toggle split) +bindsym $mod+s layout stacking;exec notify-send 'layout stacking' +bindsym $mod+w layout tabbed; exec notify-send 'layout tabbed' +bindsym $mod+e layout toggle split; exec notify-send 'layout split' + +# toggle tiling / floating +bindsym $mod+Shift+space floating toggle + +# change focus between tiling / floating windows +bindsym $mod+space focus mode_toggle + +# toggle sticky +bindsym $mod+Shift+s sticky toggle + +# focus the parent container +bindsym $mod+a focus parent + +# 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. +bindsym $mod+minus scratchpad show + +#navigate workspaces next / previous +bindsym $mod+Ctrl+Right workspace next +bindsym $mod+Ctrl+Left workspace prev + + +# 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 + +# Move focused container to workspace +bindsym $mod+Ctrl+1 move container to workspace $ws1 +bindsym $mod+Ctrl+2 move container to workspace $ws2 +bindsym $mod+Ctrl+3 move container to workspace $ws3 +bindsym $mod+Ctrl+4 move container to workspace $ws4 +bindsym $mod+Ctrl+5 move container to workspace $ws5 +bindsym $mod+Ctrl+6 move container to workspace $ws6 +bindsym $mod+Ctrl+7 move container to workspace $ws7 +bindsym $mod+Ctrl+8 move container to workspace $ws8 + +# Move to workspace with focused container +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; + +# reload the configuration file +bindsym $mod+Shift+c reload + +# restart sway inplace +bindsym $mod+Shift+r 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' + +# Set shut down, restart and locking features +bindsym $mod+0 mode "$mode_system" +set $mode_system (l)ock, (e)xit, switch_(u)ser, (s)uspend, (h)ibernate, (r)eboot, (Shift+s)hutdown +mode "$mode_system" { + bindsym l exec swaylock -f, mode "default" + bindsym s exec systemctl suspend, mode "default" + bindsym u exec dm-tool switch-to-greeter, mode "default" + bindsym e exit + bindsym h exec systemctl hibernate, mode "default" + bindsym r exec systemctl reboot + bindsym Shift+s exec systemctl poweroff + + # exit system mode: "Enter" or "Escape" + bindsym Return mode "default" + bindsym Escape mode "default" +} + +# Resize window (you can also use the mouse for that) +bindsym $mod+r mode "resize" +mode "resize" { + bindsym h resize shrink width 5 px or 5 ppt + bindsym j resize grow height 5 px or 5 ppt + bindsym k resize shrink height 5 px or 5 ppt + bindsym l resize grow width 5 px or 5 ppt + + 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 + + bindsym Return mode "default" + bindsym Escape mode "default" +} + +# Gaps mode +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" +} + + +# Lock screen +bindsym $mod+9 exec --no-startup-id swaylock -f + +# APPLICATION WORKSPACES ---------------------------------------------------- +assign [app_id="Surfshark"] $ws8 + +# APPLICATION WINDOW MODES -------------------------------------------------- +# Note: use app_id for native Wayland apps, class for XWayland apps +for_window [title="Picture-in-Picture"] floating disable border pixel 0 + +for_window [title="alsamixer"] floating enable border pixel 1 +for_window [class="calamares"] floating enable border normal +for_window [class="Clipgrab"] floating enable +for_window [title="File Transfer*"] floating enable +for_window [class="fpakman"] floating enable +for_window [class="Galculator"] floating enable border pixel 1 +for_window [class="GParted"] floating enable border normal +for_window [title="i3_help"] floating enable sticky enable border normal +for_window [class="Lightdm-settings"] floating enable +for_window [class="Lxappearance"] floating enable sticky enable border normal +for_window [class="Manjaro-hello"] floating enable +for_window [class="Manjaro Settings Manager"] floating enable border normal +for_window [title="MuseScore: Play Panel"] floating enable +for_window [class="Nitrogen"] floating enable sticky enable border normal +for_window [class="Oblogout"] fullscreen enable +for_window [class="octopi"] floating enable +for_window [title="About Pale Moon"] floating enable +for_window [class="Pamac-manager"] floating enable +for_window [app_id="pavucontrol"] floating enable +for_window [class="qt5ct"] floating enable sticky enable border normal +for_window [class="Qtconfig-qt4"] floating enable sticky enable border normal +for_window [class="Simple-scan"] floating enable border normal +for_window [class="(?i)System-config-printer.py"] floating enable border normal +for_window [class="Skype"] floating enable border normal +for_window [class="Timeset-gui"] floating enable border normal +for_window [class="(?i)virtualbox"] floating enable border normal +for_window [class="Xfburn"] floating enable + +# switch to workspace with urgent window automatically +for_window [urgent=latest] focus + +# AESTETICS ---------------------------------------------------------------- + +exec_always waybar -c ~/scripts/waybar_config -s ~/scripts/waybar_style.css + +# Theme colors +# class border backgr. text indic. child_border +client.focused #82AAFF #C792EA #FFFFFF #C792EA +client.focused_inactive #C792EA #2A2B3D #F0F0F0 #FF79C6 +client.unfocused #6272A4 #2A2B3D #F0F0F0 #C792EA +client.urgent #FF5370 #2A2B3D #FFFFFF #FF79C6 +client.placeholder #1A1B2F #1A1B2F #FFFFFF #1A1B2F + +client.background #1A1B2F + +# Set inner/outer gaps +gaps inner 10 +gaps outer 0 +smart_gaps on + +smart_borders on diff --git a/waybar_config b/waybar_config new file mode 100644 index 0000000..c2ec1d2 --- /dev/null +++ b/waybar_config @@ -0,0 +1,107 @@ +{ + "layer": "bottom", + "position": "bottom", + "height": 30, + "spacing": 0, + + "modules-left": ["sway/workspaces", "sway/mode"], + "modules-right": [ + "custom/greetings", + "custom/history", + "custom/claudebar", + "pulseaudio", + "cpu", + "memory", + "disk", + "network", + "clock", + "tray" + ], + + "sway/workspaces": { + "disable-scroll": true, + "on-click": "activate", + "format": "{icon}", + "format-icons": { + "1:ツ": "ツ", + "2:ಠ‿ಠ": "ಠ‿ಠ", + "3:◕‿◕": "◕‿◕", + "4:ʘ‿ʘ": "ʘ‿ʘ", + "5:˘◡˘": "˘◡˘", + "6:◠‿◠": "◠‿◠", + "7:ᵔᴥᵔ": "ᵔᴥᵔ", + "8:æ": "æ" + } + }, + + "sway/mode": { + "format": " {} " + }, + + "custom/greetings": { + "exec": "echo $USER!", + "interval": "once", + "format": "{}", + "tooltip": false + }, + + "custom/history": { + "exec": "~/scripts/sh/waybar-history", + "format": "$ {}", + "tooltip": false + }, + + + "custom/claudebar": { + "exec": "claudebar", + "return-type": "json", + "interval": 60, + "signal": 13, + "tooltip": true, + "on-click": "xdg-open https://claude.ai/settings/usage" + }, + + "pulseaudio": { + "format": "VOL: {volume}%", + "format-muted": "VOL: mute", + "on-click": "pavucontrol", + "tooltip": false + }, + + "cpu": { + "format": "CPU: {usage}%", + "interval": 1, + "tooltip": false + }, + + "memory": { + "format": "MEM: {used:0.1f}G/{total:0.1f}G", + "interval": 5, + "tooltip": false + }, + + "disk": { + "format": "DISK: {used}/{total}", + "interval": 30, + "path": "/", + "tooltip": false + }, + + "network": { + "format-wifi": "WIFI: {essid}", + "format-ethernet": "ETH: {ifname}", + "format-disconnected": "WIFI: --", + "interval": 10, + "tooltip": false + }, + + "clock": { + "format": "{:%Y-%m-%d %H:%M}", + "interval": 1, + "tooltip": false + }, + + "tray": { + "spacing": 10 + } +} diff --git a/waybar_style.css b/waybar_style.css new file mode 100644 index 0000000..746e269 --- /dev/null +++ b/waybar_style.css @@ -0,0 +1,112 @@ +* { + font-family: "URWGothic-Book", monospace; + font-size: 16px; + min-height: 0; + border: none; + border-radius: 0; + padding: 0; + margin: 0; +} + +window#waybar { + background-color: #1A1B2F; + color: #C792EA; +} + +/* Workspaces */ +#workspaces button { + padding: 0 8px; + background-color: #2A2B3D; + color: #FFFFFF; + border-bottom: 2px solid transparent; +} + +#workspaces button:hover { + background-color: #2A2B3D; + border-bottom: 2px solid #C792EA; + box-shadow: none; +} + +#workspaces button.focused, +#workspaces button.active { + background-color: #1A1B2F; + color: #FFFFFF; + border-bottom: 2px solid #C792EA; +} + +#workspaces button.urgent { + background-color: #FF5370; + color: #FFFFFF; +} + +#mode { + background-color: #FF79C6; + color: #1A1B2F; + padding: 0 8px; + font-style: italic; +} + +/* Right-side modules */ +#custom-greetings, +#custom-history, +#custom-claudebar, +#pulseaudio, +#cpu, +#memory, +#disk, +#network, +#clock { + padding: 0 10px; + color: #C792EA; +} + +/* Pink separators between modules (matching i3bar separator color) */ +#custom-history, +#custom-claudebar, +#pulseaudio, +#cpu, +#memory, +#disk, +#network, +#clock { + border-left: 1px solid #FF79C6; +} + +#custom-greetings { + color: #f5af19; +} + +#clock { + color: #FF79C6; +} + +/* claudebar severity classes */ +#custom-claudebar.low { + color: #50FA7B; +} + +#custom-claudebar.mid { + color: #F1FA8C; +} + +#custom-claudebar.high { + color: #FFB86C; +} + +#custom-claudebar.critical { + color: #FF5370; +} + +#tray { + padding: 0 8px; + border-left: 1px solid #FF79C6; +} + +#tray>.passive { + -gtk-icon-effect: dim; +} + +#tray>.needs-attention { + -gtk-icon-effect: highlight; + background-color: #FF5370; +} diff --git a/wofi_style.css b/wofi_style.css new file mode 100644 index 0000000..bd85610 --- /dev/null +++ b/wofi_style.css @@ -0,0 +1,48 @@ +window { + margin: 0px; + border: 1px solid #82AAFF; + background-color: #1A1B2F; + border-radius: 8px; +} + +#input { + padding: 4px 8px; + margin: 6px; + color: #F0F0F0; + background-color: #2A2B3D; + border: 1px solid #C792EA; + border-radius: 4px; +} + +#inner-box { + background-color: #1A1B2F; +} + +#outer-box { + margin: 4px; + padding: 4px; + background-color: #1A1B2F; +} + +#scroll { + margin: 0px; + padding: 4px; +} + +#text { + margin: 2px 8px; + color: #C792EA; +} + +#entry { + border-radius: 4px; +} + +#entry:selected { + background-color: #2A2B3D; + border: 1px solid #C792EA; +} + +#text:selected { + color: #FF79C6; +}