diff --git a/bin/lock b/bin/lock new file mode 100755 index 0000000..fd870db --- /dev/null +++ b/bin/lock @@ -0,0 +1,34 @@ +if test -f "/tmp/wallpaper-blur.png"; then + exit +fi + +#cmd[0]="cmatrix" +#cmd[1]="hollywood" +#cmd[2]="termsaver sysmon" +#cmd[3]="termsaver wttr" +#cmd=${cmd[$[$RANDOM % ${#cmd[@]}]]} + +cmd="btop" +term="foot" + +grim "/tmp/swaylock.png" +convert "/tmp/swaylock.png" -filter Gaussian -blur 0x8 "/tmp/swaylock-blur.png" + +rm "/tmp/swaylock.png" + +workspace="$(swaymsg -t get_workspaces -p | grep -oP '(?<=Workspace\s).*?(?=\s\(focused\))')" +swaymsg workspace "screensaver" +swaymsg exec $term $cmd + +sleep 0.5 + +swaymsg fullscreen + +swayidle -w timeout 1 "" resume "pkill -n 'swayidle'" + +swaylock -f -i "/tmp/swaylock-blur.png" + +pkill -n -f "$term $cmd" & +#pkill -n -f "byobu" & +swaymsg workspace $workspace & +rm "/tmp/swaylock-blur.png" & diff --git a/config/foot/foot.ini b/config/foot/foot.ini new file mode 100644 index 0000000..1eadbac --- /dev/null +++ b/config/foot/foot.ini @@ -0,0 +1,181 @@ +# -*- conf -*- + +# shell=$SHELL (if set, otherwise user's default shell from /etc/passwd) +# term=foot (or xterm-256color if built with -Dterminfo=disabled) +# login-shell=no + +# app-id=foot +# title=foot +# locked-title=no + +#font=Terminus:style=Bold:size=8 + +# font=monospace:size=8 +# font-bold= +# font-italic= +# font-bold-italic= +# line-height= +# letter-spacing=0 +# horizontal-letter-offset=0 +# vertical-letter-offset=0 +# underline-offset= +# box-drawings-uses-font-glyphs=no +# dpi-aware=yes + +# initial-window-size-pixels=700x500 # Or, +# initial-window-size-chars= +# initial-window-mode=windowed +pad=5x5 # optionally append 'center' +# resize-delay-ms=100 + +# notify=notify-send -a ${app-id} -i ${app-id} ${title} ${body} + +# bold-text-in-bright=no +# bell=none +# word-delimiters=,│`|:"'()[]{}<> +# selection-target=primary +# workers= + +[bell] +# urgent=no +# notify=no +# command= +# command-focused=no + +[scrollback] +# lines=1000 +# multiplier=3.0 +# indicator-position=relative +# indicator-format= + +[url] +# launch=xdg-open ${url} +# label-letters=sadfjklewcmpgh +# osc8-underline=url-mode +# protocols=http, https, ftp, ftps, file, gemini, gopher +# uri-characters=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.,~:;/?#@!$&%*+="' + +[cursor] +# style=block +# color=111111 dcdccc +# blink=no +# beam-thickness=1.5 +# underline-thickness= + +[mouse] +# hide-when-typing=no +# alternate-scroll-mode=yes + +[colors] +alpha=0.85 +#foreground=dcdccc +#background=222222 + +## Normal/regular colors (color palette 0-7) +regular0=555555 # black +regular1=cc9393 # red +regular2=7f9f7f # green +regular3=d0bf8f # yellow +regular4=6ca0a3 # blue +regular5=dc8cc3 # magenta +regular6=93e0e3 # cyan +regular7=dcdccc # white + +## Bright colors (color palette 8-15) +bright0=666666 # bright black +bright1=dca3a3 # bright red +bright2=bfebbf # bright green +bright3=f0dfaf # bright yellow +bright4=8cd0d3 # bright blue +bright5=fcace3 # bright magenta +bright6=b3ffff # bright cyan +bright7=ffffff # bright white + +## dimmed colors (see foot.ini(5) man page) +# dim0= +# ... +# dim7= + +## The remaining 256-color palette +# 16 = <256-color palette #16> +# ... +# 255 = <256-color palette #255> + +## Misc colors +# selection-foreground= +# selection-background= +# jump-labels= +# urls= +# scrollback-indicator= + +[csd] +# preferred=server +# size=26 +# font= +# color= +# border-width=0 +# border-color= +# button-width=26 +# button-color= +# button-minimize-color= +# button-maximize-color= +# button-close-color= + +[key-bindings] +# scrollback-up-page=Shift+Page_Up +# scrollback-up-half-page=none +# scrollback-up-line=none +# scrollback-down-page=Shift+Page_Down +# scrollback-down-half-page=none +# scrollback-down-line=none +# clipboard-copy=Control+Shift+c +# clipboard-paste=Control+Shift+v +# primary-paste=Shift+Insert +# search-start=Control+Shift+r +# font-increase=Control+plus Control+equal Control+KP_Add +# font-decrease=Control+minus Control+KP_Subtract +# font-reset=Control+0 Control+KP_0 +# spawn-terminal=Control+Shift+n +# minimize=none +# maximize=none +# fullscreen=none +# pipe-visible=[sh -c "xurls | fuzzel | xargs -r firefox"] none +# pipe-scrollback=[sh -c "xurls | fuzzel | xargs -r firefox"] none +# pipe-selected=[xargs -r firefox] none +# show-urls-launch=Control+Shift+u +# show-urls-copy=none +# noop=none + +[search-bindings] +# cancel=Control+g Control+c Escape +# commit=Return +# find-prev=Control+r +# find-next=Control+s +# cursor-left=Left Control+b +# cursor-left-word=Control+Left Mod1+b +# cursor-right=Right Control+f +# cursor-right-word=Control+Right Mod1+f +# cursor-home=Home Control+a +# cursor-end=End Control+e +# delete-prev=BackSpace +# delete-prev-word=Mod1+BackSpace Control+BackSpace +# delete-next=Delete +# delete-next-word=Mod1+d Control+Delete +# extend-to-word-boundary=Control+w +# extend-to-next-whitespace=Control+Shift+w +# clipboard-paste=Control+v Control+y +# primary-paste=Shift+Insert + +[url-bindings] +# cancel=Control+g Control+c Control+d Escape +# toggle-url-visible=t + +[mouse-bindings] +# primary-paste=BTN_MIDDLE +# select-begin=BTN_LEFT +# select-begin-block=Control+BTN_LEFT +# select-extend=BTN_RIGHT +# select-extend-character-wise=Control+BTN_RIGHT +# select-word=BTN_LEFT-2 +# select-word-whitespace=Control+BTN_LEFT-2 +# select-row=BTN_LEFT-3 diff --git a/config/foot/foot/foot.ini b/config/foot/foot/foot.ini new file mode 100644 index 0000000..46f1917 --- /dev/null +++ b/config/foot/foot/foot.ini @@ -0,0 +1,181 @@ +# -*- conf -*- + +# shell=$SHELL (if set, otherwise user's default shell from /etc/passwd) +# term=foot (or xterm-256color if built with -Dterminfo=disabled) +# login-shell=no + +# app-id=foot +# title=foot +# locked-title=no + +font=UbuntuMonoNerdFont:size=8 + +# font=monospace:size=8 +# font-bold= +# font-italic= +# font-bold-italic= +# line-height= +# letter-spacing=0 +# horizontal-letter-offset=0 +# vertical-letter-offset=0 +# underline-offset= +# box-drawings-uses-font-glyphs=no +# dpi-aware=yes + +# initial-window-size-pixels=700x500 # Or, +# initial-window-size-chars= +# initial-window-mode=windowed +pad=5x5 # optionally append 'center' +# resize-delay-ms=100 + +# notify=notify-send -a ${app-id} -i ${app-id} ${title} ${body} + +# bold-text-in-bright=no +# bell=none +# word-delimiters=,│`|:"'()[]{}<> +# selection-target=primary +# workers= + +[bell] +# urgent=no +# notify=no +# command= +# command-focused=no + +[scrollback] +# lines=1000 +# multiplier=3.0 +# indicator-position=relative +# indicator-format= + +[url] +# launch=xdg-open ${url} +# label-letters=sadfjklewcmpgh +# osc8-underline=url-mode +# protocols=http, https, ftp, ftps, file, gemini, gopher +# uri-characters=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.,~:;/?#@!$&%*+="' + +[cursor] +# style=block +# color=111111 dcdccc +# blink=no +# beam-thickness=1.5 +# underline-thickness= + +[mouse] +# hide-when-typing=no +# alternate-scroll-mode=yes + +[colors] +alpha=0.85 +#foreground=dcdccc +#background=222222 + +## Normal/regular colors (color palette 0-7) +regular0=555555 # black +regular1=cc9393 # red +regular2=7f9f7f # green +regular3=d0bf8f # yellow +regular4=6ca0a3 # blue +regular5=dc8cc3 # magenta +regular6=93e0e3 # cyan +regular7=dcdccc # white + +## Bright colors (color palette 8-15) +bright0=666666 # bright black +bright1=dca3a3 # bright red +bright2=bfebbf # bright green +bright3=f0dfaf # bright yellow +bright4=8cd0d3 # bright blue +bright5=fcace3 # bright magenta +bright6=b3ffff # bright cyan +bright7=ffffff # bright white + +## dimmed colors (see foot.ini(5) man page) +# dim0= +# ... +# dim7= + +## The remaining 256-color palette +# 16 = <256-color palette #16> +# ... +# 255 = <256-color palette #255> + +## Misc colors +# selection-foreground= +# selection-background= +# jump-labels= +# urls= +# scrollback-indicator= + +[csd] +# preferred=server +# size=26 +# font= +# color= +# border-width=0 +# border-color= +# button-width=26 +# button-color= +# button-minimize-color= +# button-maximize-color= +# button-close-color= + +[key-bindings] +# scrollback-up-page=Shift+Page_Up +# scrollback-up-half-page=none +# scrollback-up-line=none +# scrollback-down-page=Shift+Page_Down +# scrollback-down-half-page=none +# scrollback-down-line=none +# clipboard-copy=Control+Shift+c +# clipboard-paste=Control+Shift+v +# primary-paste=Shift+Insert +# search-start=Control+Shift+r +# font-increase=Control+plus Control+equal Control+KP_Add +# font-decrease=Control+minus Control+KP_Subtract +# font-reset=Control+0 Control+KP_0 +# spawn-terminal=Control+Shift+n +# minimize=none +# maximize=none +# fullscreen=none +# pipe-visible=[sh -c "xurls | fuzzel | xargs -r firefox"] none +# pipe-scrollback=[sh -c "xurls | fuzzel | xargs -r firefox"] none +# pipe-selected=[xargs -r firefox] none +# show-urls-launch=Control+Shift+u +# show-urls-copy=none +# noop=none + +[search-bindings] +# cancel=Control+g Control+c Escape +# commit=Return +# find-prev=Control+r +# find-next=Control+s +# cursor-left=Left Control+b +# cursor-left-word=Control+Left Mod1+b +# cursor-right=Right Control+f +# cursor-right-word=Control+Right Mod1+f +# cursor-home=Home Control+a +# cursor-end=End Control+e +# delete-prev=BackSpace +# delete-prev-word=Mod1+BackSpace Control+BackSpace +# delete-next=Delete +# delete-next-word=Mod1+d Control+Delete +# extend-to-word-boundary=Control+w +# extend-to-next-whitespace=Control+Shift+w +# clipboard-paste=Control+v Control+y +# primary-paste=Shift+Insert + +[url-bindings] +# cancel=Control+g Control+c Control+d Escape +# toggle-url-visible=t + +[mouse-bindings] +# primary-paste=BTN_MIDDLE +# select-begin=BTN_LEFT +# select-begin-block=Control+BTN_LEFT +# select-extend=BTN_RIGHT +# select-extend-character-wise=Control+BTN_RIGHT +# select-word=BTN_LEFT-2 +# select-word-whitespace=Control+BTN_LEFT-2 +# select-row=BTN_LEFT-3 diff --git a/config/foot/foot/info.txt b/config/foot/foot/info.txt new file mode 100644 index 0000000..002a512 --- /dev/null +++ b/config/foot/foot/info.txt @@ -0,0 +1 @@ +foot terminal configuration \ No newline at end of file diff --git a/config/foot/info.txt b/config/foot/info.txt new file mode 100644 index 0000000..002a512 --- /dev/null +++ b/config/foot/info.txt @@ -0,0 +1 @@ +foot terminal configuration \ No newline at end of file diff --git a/config/sway/UbuntuMonoNerdFontMono-Regular.ttf b/config/sway/UbuntuMonoNerdFontMono-Regular.ttf new file mode 100644 index 0000000..8396c0e Binary files /dev/null and b/config/sway/UbuntuMonoNerdFontMono-Regular.ttf differ diff --git a/config/sway/config b/config/sway/config new file mode 100644 index 0000000..2447bcb --- /dev/null +++ b/config/sway/config @@ -0,0 +1,231 @@ +set $mod Mod4 +set $left h +set $down j +set $up k +set $right l +set $term foot + +set $fb thunar +set $wb firefox + +#xwayland enable + +#set $menu dmenu_path | dmenu | xargs swaymsg exec -- + +include /etc/sway/config-vars.d/* + +#exec_always python3 ~/.config/sway/neofetch.py +#exec waybar + +set $configdir /home/astatin3/.config/sway/ + + +exec_always pkill -f swaybg +exec_always python3 ~/.config/sway/neofetch.py +exec_always dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY SWAYSOCK & +exec_always pkill -f waybar +exec_always waybar + +exec swayidle -w \ + timeout 300 "/bin/bash $configdir/lock.sh ss" \ + before-sleep "/bin/bash $configdir/lock.sh lock" + +for_window [app_id="^launcher$"] floating enable, sticky enable, resize set 30 ppt 60 ppt, border pixel none +set $menu exec $term -a launcher -e env ~/.config/sway/sway-launcher-desktop.sh + +for_window [title="Picture-in-Picture"] floating enable, sticky enable +for_window [title="Application Finder"] floating enable, sticky enable, resize set 30 ppt 60 ppt, border pixel none +set $menug exec xfce4-appfinder + +bindsym Print exec 'date="$(date '+%T')" && grim /tmp/$date.png && swaynag -m "Took screenshot, saved at $date"' + +for_window [title="xfce4-notifyd"] floating enable, sticky enable, move position 0 0 + +#default_floating_border csd +default_border normal pixel 2 +#gaps outer 5 + +focus_follows_mouse always + +client.focused #373e48aa #1C1F24FF #D0D0D0FF #373e48aa #373e48aa +client.unfocused #1C1F2400 #1C1F24FF #D0D0D0FF #1C1F2400 #1C1F2400 +client.focused_inactive #373e48aa #1C1F24FF #D0D0D0FF #373e48aa #373e48aa +floating_maximum_size 1920 x 1080 + +#exec_always ~/.config/sway/startapps.sh + + # Start a terminal + bindsym $mod+Return exec $term + + # Kill focused window + bindsym $mod+Shift+q kill + + # Keybind to launch file browser + bindsym $mod+Shift+s exec $fb ~ + + # Keybind to launch web browser + bindsym $mod+Shift+a exec $wb ~ + + # Start your launcher + bindsym $mod+d exec $menu + bindsym $mod+Shift+d exec $menug + + bindsym $mod+l exec "/bin/bash $configdir/lock.sh lock" + bindsym $mod+Shift+l exec "/bin/bash $configdir/lock.sh ss" + + + # 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 + + # Switch to workspace(with numpad) + bindsym $mod+KP_End workspace number 1 + bindsym $mod+KP_Down workspace number 2 + bindsym $mod+KP_Next workspace number 3 + bindsym $mod+KP_Left workspace number 4 + bindsym $mod+KP_Begin workspace number 5 + bindsym $mod+KP_Right workspace number 6 + bindsym $mod+KP_Home workspace number 7 + bindsym $mod+KP_Up workspace number 8 + bindsym $mod+KP_Prior workspace number 9 + bindsym $mod+KP_Insert 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 + + # move focused container to workspace (with numpad) + bindsym $mod+Shift+KP_End move container to workspace 1 + bindsym $mod+Shift+KP_Down move container to workspace 2 + bindsym $mod+Shift+KP_Next move container to workspace 3 + bindsym $mod+Shift+KP_Left move container to workspace 4 + bindsym $mod+Shift+KP_Begin move container to workspace 5 + bindsym $mod+Shift+KP_Right move container to workspace 6 + bindsym $mod+Shift+KP_Home move container to workspace 7 + bindsym $mod+Shift+KP_Up move container to workspace 8 + bindsym $mod+Shift+KP_Prior move container to workspace 9 + bindsym $mod+Shift+KP_Insert 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 +# +# 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" + +include /etc/sway/config.d/* + +bindsym XF86MonBrightnessUp exec brightnessctl s +5% +bindsym XF86MonBrightnessDown exec brightnessctl s 5%- diff --git a/config/sway/config.d/50-systemd-user.conf b/config/sway/config.d/50-systemd-user.conf new file mode 100644 index 0000000..af204fb --- /dev/null +++ b/config/sway/config.d/50-systemd-user.conf @@ -0,0 +1,9 @@ +# import variables into system-user enviroment +# based on the instructions in the sway wiki +# see also https://github.com/swaywm/sway/issues/5732 +# and https://github.com/systemd/systemd/blob/dfc637d0ff756889e8e5b7cb4ec991eb06069aa1/xorg/50-systemd-user.sh + +exec systemctl --user import-environment DISPLAY WAYLAND_DISPLAY SWAYSOCK + +exec hash dbus-update-activation-environment 2>/dev/null && \ + dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY SWAYSOCK diff --git a/config/sway/icon.png b/config/sway/icon.png new file mode 100644 index 0000000..a8ad46e Binary files /dev/null and b/config/sway/icon.png differ diff --git a/config/sway/icon.txt b/config/sway/icon.txt new file mode 100644 index 0000000..5c14c3a --- /dev/null +++ b/config/sway/icon.txt @@ -0,0 +1,17 @@ + _,met$$$$$gg. + ,g$$$$$$$$$$$$$$$P. + ,g$$P" """Y$$.". + ,$$P' `$$$. +',$$P ,ggs. `$$b: +`d$$' ,$P"' . $$$ + $$P d$' , $$P + $$: $$. - ,d$$' + $$; Y$b._ _,d$P' + Y$$. `.`"Y$$$$P"' + `$$b "-.__ + `Y$$ + `Y$$. + `$$b. + `Y$$b. + `"Y$b._ + `""" \ No newline at end of file diff --git a/config/sway/lock.sh b/config/sway/lock.sh new file mode 100755 index 0000000..7aadc6a --- /dev/null +++ b/config/sway/lock.sh @@ -0,0 +1,55 @@ +screenshotloc=/tmp/screensaver.png +sscommand="btop" +terminal="foot" + +lockscreensaverdelay=30 +termopendelay=0.2 + +curworkspace=$(swaymsg -pt get_workspaces | grep -o -P '(?<=Workspace\s).*(?=\s\(focused\))') +brightness=$(brightnessctl g) + +function start { + #Create screenshot and blur + grim $screenshotloc + convert $screenshotloc -filter Gaussian -blur 0x8 $screenshotloc + + #Open screensaver program for quick-change + swaymsg workspace "screensaver" + sleep 0.1 + swaymsg exec $terminal $sscommand & + sleep "$termopendelay" + swaymsg fullscreen toggle +} + +function stop { + swaymsg workspace $curworkspace + pkill -fn $sscommand + rm $screenshotloc +} + +function doscreensaver { + swayidle timeout 1 "" resume "pkill -n swayidle" + dolock +} + +function dolock { + pkill swaylock + swaymsg exec "swaylock -i $screenshotloc && pkill -n swayidle" & + swayidle timeout "$lockscreensaverdelay" "pkill -n swayidle" + if [[ "$(pidof 'swaylock')" != "" ]]; then + pkill swaylock + doscreensaver + fi +} + +if [[ $1 == "lock" ]]; then + start + dolock + stop +elif [[ $1 == "ss" ]]; then + start + doscreensaver + stop +else + echo "invalid command, try 'ss' or 'lock'" +fi diff --git a/config/sway/neofetch.py b/config/sway/neofetch.py new file mode 100644 index 0000000..d8af653 --- /dev/null +++ b/config/sway/neofetch.py @@ -0,0 +1,62 @@ +import subprocess +import datetime +import os + +from PIL import Image +from PIL import ImageFont +from PIL import ImageDraw + +try: + os.ulink("/tmp/wallpaper.png") +except: + x = None # Do nothing + +#file = open("/home/astatin3/.config/sway/icon.txt","r") +#lines = file.readlines() +#file.close() + +output = (subprocess.run(['neofetch', '--stdout'], capture_output=True, text=True).stdout).split("\n") + +screenX = 0 +screenY = 0 + +for i in range(0, len(output)-2, 1): + #lines[i] = lines[i][:-1] + output[i] + + #print(lines[i]) + + if i == 0: + output[0] += f"at ({datetime.datetime.now().strftime('%m-%d %H:%M:%S')})" + + if i == 8: + res = output[i].split(" ")[1].split("x") + screenX = int(res[0]) + screenY = int(res[1]) + +#neofetch = "\n".join(lines) + +icon = Image.open("/home/astatin3/.config/sway/icon.png") +iconsizeX, iconsizeY = icon.size + +neofetch = "\n".join(output) + +textSize = 0.01 + +iconscale = 0.0005 + +textoffsetX = 0.0 #Percentages +textoffsetY = -0.16 + +iconoffsetX = -0.145 +iconoffsetY = -0.16 + +img = Image.new('RGB', (screenX, screenY), (31, 26, 32)) +draw = ImageDraw.Draw(img) +font = ImageFont.truetype("/home/astatin3/.config/sway/UbuntuMonoNerdFontMono-Regular.ttf", textSize*screenX) +draw.text((textoffsetX*screenX+screenX/2, textoffsetY*screenY+screenY/2),neofetch,(199,0,57),font=font) +icon = icon.resize((round(iconscale*iconsizeX*screenY), round(iconscale*iconsizeY*screenY)), Image.Resampling.LANCZOS) +img.paste(icon, (round(iconoffsetX*screenX+screenX/2), round(iconoffsetY*screenY+screenY/2))) +img.save("/tmp/wallpaper.png") +#img.show() + +subprocess.run(["swaybg", "-m", "fill", "-i", "/tmp/wallpaper.png"]) diff --git a/config/sway/screensaver.sh b/config/sway/screensaver.sh new file mode 100755 index 0000000..f62608b --- /dev/null +++ b/config/sway/screensaver.sh @@ -0,0 +1,34 @@ +if [[ "$(pgrep -f 'lock')" != '' ]] +then + exit +fi + +#cmd[0]="cmatrix" +#cmd[1]="hollywood" +#cmd[2]="termsaver sysmon" +#cmd[3]="termsaver wttr" +#cmd=${cmd[$[$RANDOM % ${#cmd[@]}]]} + +cmd="hollywood" +term="foot" + +grim "/tmp/swaylock.png" +convert "/tmp/swaylock.png" -filter Gaussian -blur 0x8 "/tmp/swaylock-blur.png" + +rm "/tmp/swaylock.png" + +workspace="$(swaymsg -t get_workspaces -p | grep -oP '(?<=Workspace\s).*?(?=\s\(focused\))')" +swaymsg workspace "screensaver" +swaymsg exec $term $cmd + +sleep 0.5 + +swaymsg fullscreen + +swayidle -w timeout 1 "" resume "pkill -n 'swayidle'" + +swaylock -f -i "/tmp/swaylock-blur.png" + +pkill -n -f "$term $cmd" & +swaymsg workspace $workspace & +rm "/tmp/swaylock-blur.png" & diff --git a/config/sway/startapps.sh b/config/sway/startapps.sh new file mode 100755 index 0000000..bc89b8d --- /dev/null +++ b/config/sway/startapps.sh @@ -0,0 +1,5 @@ +dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY SWAYSOCK & +pkill -f waybar & +pkill -f swaybg & +python3 ~/.config/sway/neofetch.py & +waybar & diff --git a/config/sway/sway-launcher-desktop.sh b/config/sway/sway-launcher-desktop.sh new file mode 100755 index 0000000..d162e78 --- /dev/null +++ b/config/sway/sway-launcher-desktop.sh @@ -0,0 +1,368 @@ +#!/usr/bin/env bash +# terminal application launcher for sway, using fzf +# Based on: https://gitlab.com/FlyingWombat/my-scripts/blob/master/sway-launcher +# https://gist.github.com/Biont/40ef59652acf3673520c7a03c9f22d2a +shopt -s nullglob globstar +set -o pipefail +if ! { exec 0>&3; } 1>/dev/null 2>&1; then + exec 3>/dev/null # If file descriptor 3 is unused in parent shell, output to /dev/null +fi +# shellcheck disable=SC2154 +trap 's=$?; echo "$0: Error on line "$LINENO": $BASH_COMMAND"; exit $s' ERR +IFS=$'\n\t' +DEL=$'\34' + +TERMINAL_COMMAND="${TERMINAL_COMMAND:="$TERMINAL"}" +GLYPH_COMMAND="${GLYPH_COMMAND- }" +GLYPH_DESKTOP="${GLYPH_DESKTOP- }" +CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/sway-launcher-desktop" +PROVIDERS_FILE="${PROVIDERS_FILE:=providers.conf}" +if [[ "${PROVIDERS_FILE#/}" == "${PROVIDERS_FILE}" ]]; then + # $PROVIDERS_FILE is a relative path, prepend $CONFIG_DIR + PROVIDERS_FILE="${CONFIG_DIR}/${PROVIDERS_FILE}" +fi + +# Provider config entries are separated by the field separator \034 and have the following structure: +# list_cmd,preview_cmd,launch_cmd,purge_cmd +declare -A PROVIDERS +if [ -f "${PROVIDERS_FILE}" ]; then + eval "$(awk -F= ' + BEGINFILE{ provider=""; } + /^\[.*\]/{sub("^\\[", "");sub("\\]$", "");provider=$0} + /^(launch|list|preview|purge)_cmd/{st = index($0,"=");providers[provider][$1] = substr($0,st+1)} + ENDFILE{ + for (key in providers){ + if(!("list_cmd" in providers[key])){continue;} + if(!("launch_cmd" in providers[key])){continue;} + if(!("preview_cmd" in providers[key])){continue;} + if(!("purge_cmd" in providers[key])){providers[key]["purge_cmd"] = "exit 0";} + for (entry in providers[key]){ + gsub(/[\x27,\047]/,"\x27\"\x27\"\x27", providers[key][entry]) + } + print "PROVIDERS[\x27" key "\x27]=\x27" providers[key]["list_cmd"] "\034" providers[key]["preview_cmd"] "\034" providers[key]["launch_cmd"] "\034" providers[key]["purge_cmd"] "\x27\n" + } + }' "${PROVIDERS_FILE}")" + if [[ ! -v HIST_FILE ]]; then + HIST_FILE="${XDG_CACHE_HOME:-$HOME/.cache}/${0##*/}-${PROVIDERS_FILE##*/}-history.txt" + fi +else + PROVIDERS['desktop']="${0} list-entries${DEL}${0} describe-desktop \"{1}\"${DEL}${0} run-desktop '{1}' {2}${DEL}test -f '{1}' || exit 43" + PROVIDERS['command']="${0} list-commands${DEL}${0} describe-command \"{1}\"${DEL}${TERMINAL_COMMAND} {1}${DEL}command -v '{1}' || exit 43" + if [[ ! -v HIST_FILE ]]; then + HIST_FILE="${XDG_CACHE_HOME:-$HOME/.cache}/${0##*/}-history.txt" + fi +fi +PROVIDERS['user']="exit${DEL}exit${DEL}{1}" # Fallback provider that simply executes the exact command if there were no matches + +if [[ -n "${HIST_FILE}" ]]; then + mkdir -p "${HIST_FILE%/*}" && touch "$HIST_FILE" + readarray HIST_LINES <"$HIST_FILE" +fi + +function describe() { + # shellcheck disable=SC2086 + readarray -d ${DEL} -t PROVIDER_ARGS <<<${PROVIDERS[${1}]} + # shellcheck disable=SC2086 + [ -n "${PROVIDER_ARGS[1]}" ] && eval "${PROVIDER_ARGS[1]//\{1\}/${2}}" +} +function describe-desktop() { + description=$(sed -ne '/^Comment=/{s/^Comment=//;p;q}' "$1") + echo -e "\033[33m$(sed -ne '/^Name=/{s/^Name=//;p;q}' "$1")\033[0m" + echo "${description:-No description}" +} +function describe-command() { + readarray arr < <(whatis -l "$1" 2>/dev/null) + description="${arr[0]}" + description="${description#* - }" + echo -e "\033[33m${1}\033[0m" + echo "${description:-No description}" +} + +function provide() { + # shellcheck disable=SC2086 + readarray -d ${DEL} -t PROVIDER_ARGS <<<${PROVIDERS[$1]} + eval "${PROVIDER_ARGS[0]}" +} +function list-commands() { + IFS=: read -ra path <<<"$PATH" + for dir in "${path[@]}"; do + printf '%s\n' "$dir/"* | + awk -F / -v pre="$GLYPH_COMMAND" '{print $NF "\034command\034\033[31m" pre "\033[0m" $NF;}' + done | sort -u +} +function list-entries() { + # Get locations of desktop application folders according to spec + # https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html + IFS=':' read -ra DIRS <<<"${XDG_DATA_HOME-${HOME}/.local/share}:${XDG_DATA_DIRS-/usr/local/share:/usr/share}" + for i in "${!DIRS[@]}"; do + if [[ ! -d "${DIRS[i]}" ]]; then + unset -v 'DIRS[$i]' + else + DIRS[$i]="${DIRS[i]}/applications/**/*.desktop" + fi + done + # shellcheck disable=SC2068 + entries ${DIRS[@]} +} +function entries() { + # shellcheck disable=SC2068 + awk -v pre="$GLYPH_DESKTOP" -F= ' + function desktopFileID(filename){ + sub("^.*applications/", "", filename); + sub("/", "-", filename); + return filename + } + BEGINFILE{ + application=0; + hidden=0; + block=""; + a=0 + + id=desktopFileID(FILENAME) + if(id in fileIds){ + nextfile; + }else{ + fileIds[id]=0 + } + } + /^\[Desktop Entry\]/{block="entry"} + /^Type=Application/{application=1} + /^\[Desktop Action/{ + sub("^\\[Desktop Action ", ""); + sub("\\]$", ""); + block="action"; + a++; + actions[a,"key"]=$0 + } + /^\[X-/{ + sub("^\\[X-", ""); + sub("\\]$", ""); + block="action"; + a++; + actions[a,"key"]=$0 + } + /^Name=/{ (block=="action")? actions[a,"name"]=$2 : name=$2 } + /^NoDisplay=true/{ (block=="action")? actions[a,"hidden"]=1 : hidden=1 } + ENDFILE{ + if (application){ + if (!hidden) + print FILENAME "\034desktop\034\033[33m" pre name "\033[0m"; + if (a>0) + for (i=1; i<=a; i++) + if (!actions[i, "hidden"]) + print FILENAME "\034desktop\034\033[33m" pre name "\033[0m (" actions[i, "name"] ")\034" actions[i, "key"] + } + }' \ + $@ &3)" + echo "Generated Launch command from .desktop file: ${CMD}" >&3 + eval "${CMD}" +} +function generate-command() { + # Define the search pattern that specifies the block to search for within the .desktop file + PATTERN="^\\\\[Desktop Entry\\\\]" + if [[ -n $2 ]]; then + PATTERN="^\\\\[Desktop Action ${2}\\\\]" + fi + echo "Searching for pattern: ${PATTERN}" >&3 + # 1. We see a line starting [Desktop, but we're already searching: deactivate search again + # 2. We see the specified pattern: start search + # 3. We see an Exec= line during search: remove field codes and set variable + # 3. We see a Path= line during search: set variable + # 4. Finally, build command line + awk -v pattern="${PATTERN}" -v terminal_cmd="${TERMINAL_COMMAND}" -F= ' + BEGIN{a=0;exec=0;path=0} + /^\[Desktop/{ + if(a){ a=0 } + } + $0 ~ pattern{ a=1 } + /^Terminal=/{ + sub("^Terminal=", ""); + if ($0 == "true") { terminal=1 } + } + /^Exec=/{ + if(a && !exec){ + sub("^Exec=", ""); + gsub(" ?%[cDdFfikmNnUuv]", ""); + exec=$0; + } + } + /^Path=/{ + if(a && !path){ path=$2 } + } + END{ + if(path){ printf "cd " path " && " } + printf "exec " + if (terminal){ printf terminal_cmd " " } + print exec + }' "$1" +} + +function shouldAutostart() { + local condition="$(cat $1 | grep "AutostartCondition" | cut -d'=' -f2)" + local filename="${XDG_CONFIG_HOME-${HOME}/.config}/${condition#* }" + case $condition in + if-exists*) + [[ -e $filename ]] + ;; + unless-exists*) + [[ ! -e $filename ]] + ;; + *) + return 0 + ;; + esac +} + +function autostart() { + for application in $(list-autostart); do + if shouldAutostart "$application" ; then + (exec setsid /bin/sh -c "$(run-desktop "${application}")" &>/dev/null &) + fi + done +} + +function list-autostart() { + # Get locations of desktop application folders according to spec + # https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html + IFS=':' read -ra DIRS <<<"${XDG_CONFIG_HOME-${HOME}/.config}:${XDG_CONFIG_DIRS-/etc/xdg}" + for i in "${!DIRS[@]}"; do + if [[ ! -d "${DIRS[i]}" ]]; then + unset -v 'DIRS[$i]' + else + DIRS[$i]="${DIRS[i]}/autostart/*.desktop" + fi + done + + # shellcheck disable=SC2068 + awk -v pre="$GLYPH_DESKTOP" -F= ' + function desktopFileID(filename){ + sub("^.*autostart/", "", filename); + sub("/", "-", filename); + return filename + } + BEGINFILE{ + application=0; + block=""; + disabled=0; + a=0 + + id=desktopFileID(FILENAME) + if(id in fileIds){ + nextfile; + }else{ + fileIds[id]=0 + } + } + /^\[Desktop Entry\]/{block="entry"} + /^Type=Application/{application=1} + /^Name=/{ iname=$2 } + /^Hidden=true/{disabled=1} + ENDFILE{ + if (application && !disabled){ + print FILENAME; + } + }' \ + ${DIRS[@]} "${HIST_FILE}" + declare -A PURGE_CMDS + for PROVIDER_NAME in "${!PROVIDERS[@]}"; do + readarray -td ${DEL} PROVIDER_ARGS <<<${PROVIDERS[${PROVIDER_NAME}]} + PURGE_CMD=${PROVIDER_ARGS[3]} + [ -z "${PURGE_CMD}" ] && PURGE_CMD='test -f "{1}" || exit 43' + PURGE_CMDS[$PROVIDER_NAME]="${PURGE_CMD%$'\n'}" + done + for HIST_LINE in "${HIST_LINES[@]#*' '}"; do + readarray -td $'\034' HIST_ENTRY <<<${HIST_LINE} + ENTRY=${HIST_ENTRY[1]} + readarray -td ' ' FILTER <<<${PURGE_CMDS[$ENTRY]//\{1\}/${HIST_ENTRY[0]}} + (eval "${FILTER[@]}" 1>/dev/null) # Run filter command discarding output. We only want the exit status + if [[ $? -ne 43 ]]; then + echo "1 ${HIST_LINE[@]%$'\n'}" >> "${HIST_FILE}" + fi + done +} + +case "$1" in +describe | describe-desktop | describe-command | entries | list-entries | list-commands | list-autostart | generate-command | autostart | run-desktop | provide | purge) + "$@" + exit + ;; +esac +echo "Starting launcher instance with the following providers:" "${!PROVIDERS[@]}" >&3 + +FZFPIPE=$(mktemp -u) +mkfifo "$FZFPIPE" +trap 'rm "$FZFPIPE"' EXIT INT + +# Append Launcher History, removing usage count +(printf '%s' "${HIST_LINES[@]#* }" >>"$FZFPIPE") & + +# Iterate over providers and run their list-command +for PROVIDER_NAME in "${!PROVIDERS[@]}"; do + (bash -c "${0} provide ${PROVIDER_NAME}" >>"$FZFPIPE") & +done + +readarray -t COMMAND_STR <<<$( + fzf --ansi +s -x -d '\034' --nth ..3 --with-nth 3 \ + --print-query \ + --preview "$0 describe {2} {1}" \ + --preview-window=up:2:noborder \ + --no-multi --cycle \ + --prompt="${GLYPH_PROMPT-# }" \ + --header='' --no-info --margin='1,2' \ + --color='16,gutter:-1' \ + <"$FZFPIPE" +) || exit 1 +# Get the last line of the fzf output. If there were no matches, it contains the query which we'll treat as a custom command +# If there were matches, it contains the selected item +COMMAND_STR=$(printf '%s\n' "${COMMAND_STR[@]: -1}") +# We still need to format the query to conform to our fallback provider. +# We check for the presence of field separator character to determine if we're dealing with a custom command +if [[ $COMMAND_STR != *$'\034'* ]]; then + COMMAND_STR="${COMMAND_STR}"$'\034user\034'"${COMMAND_STR}"$'\034' + SKIP_HIST=1 # I chose not to include custom commands in the history. If this is a bad idea, open an issue please +fi + +[ -z "$COMMAND_STR" ] && exit 1 + +if [[ -n "${HIST_FILE}" && ! "$SKIP_HIST" ]]; then + # update history + for i in "${!HIST_LINES[@]}"; do + if [[ "${HIST_LINES[i]}" == *" $COMMAND_STR"$'\n' ]]; then + HIST_COUNT=${HIST_LINES[i]%% *} + HIST_LINES[$i]="$((HIST_COUNT + 1)) $COMMAND_STR"$'\n' + match=1 + break + fi + done + if ! ((match)); then + HIST_LINES+=("1 $COMMAND_STR"$'\n') + fi + + printf '%s' "${HIST_LINES[@]}" | sort -nr >"$HIST_FILE" +fi + +# shellcheck disable=SC2086 +readarray -d $'\034' -t PARAMS <<<${COMMAND_STR} +# shellcheck disable=SC2086 +readarray -d ${DEL} -t PROVIDER_ARGS <<<${PROVIDERS[${PARAMS[1]}]} +# Substitute {1}, {2} etc with the correct values +COMMAND=${PROVIDER_ARGS[2]//\{1\}/${PARAMS[0]}} +COMMAND=${COMMAND//\{2\}/${PARAMS[3]}} +COMMAND=${COMMAND%%[[:space:]]} + +if [ -t 1 ]; then + echo "Launching command: ${COMMAND}" >&3 + setsid /bin/sh -c "${COMMAND}" >&/dev/null diff --git a/config/waybar/browser.svg b/config/waybar/browser.svg new file mode 100644 index 0000000..6ddd3b7 --- /dev/null +++ b/config/waybar/browser.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/config/waybar/config b/config/waybar/config new file mode 100644 index 0000000..ba9e6cb --- /dev/null +++ b/config/waybar/config @@ -0,0 +1,250 @@ +{ + "layer": "bottom", + "height": 16, + "modules-left": [ + "sway/workspaces", + "sway/mode" + ], + + "modules-center": [ + "cpu", + "custom/gap", + "memory", + "custom/gap", + "disk", + "custom/gap", + "backlight", + "custom/gap", + "pulseaudio", + "custom/gap", + "battery", + "custom/gap", + "network" + ], + + "modules-right": [ + "custom/gap", + "clock" + ], + + "sway/workspaces": { + "persistent_workspaces": { + "1": [], + "2": [], + "3": [], + "4": [], + "5": [], + "6": [], + "7": [], + "8": [], + "9": [] + }, + "all-outputs": true + }, + "custom/terminal": { + "format": " ", + "interval": "once", + "on-click": "swaymsg exec foot", + }, + "custom/filemanager": { + "format": " ", + "interval": "once", + "on-click": "swaymsg exec 'nautilus --new-window'", + }, + "custom/browser": { + "format": " ", + "interval": "once", + "on-click": "swaymsg exec 'chromium --ozone-platform-hint=auto'", + }, + "custom/libre": { + "format": " ", + "interval": "once", + "on-click": "swaymsg exec libreoffice", + }, + "custom/mmfm": { + "format": " ", + "interval": "once", + "on-click": "swaymsg exec mmfm", + }, + "custom/vmp": { + "format": " ", + "interval": "once", + "on-click": "swaymsg exec vmp", + }, + "custom/printer": { + "format": " ", + "interval": "once", + "on-click": "swaymsg exec system-config-printer", + }, + "custom/software": { + "format": " ", + "interval": "once", + "on-click": "swaymsg exec QT_QPA_PLATFORM=xcb appstore", + }, + "custom/apps": { + "tooltip-format": "desktop", + "format": " ", + "interval": "once", + "on-click": "swaymsg exec 'wofi --show run'", + }, + "custom/overview": { + "format": " ", + "interval": "once", + "on-click": "swaymsg exec 'echo 2 > /tmp/sov'", + }, + "custom/settings": { + "tooltip-format": "shutdown/logout", + "format": " ", + "interval": "once", + "on-click": "swaymsg exec 'echo 2 > /tmp/wcp'", + }, + "sway/language": { + "format": "{short} {variant}", + }, + "sway/mode": { + "format": "{}" + }, + "sway/window":{ + "max-length":50 + }, + "idle_inhibitor": { + "format": "idle | ", + "format-icons": { + "activated": "", + "deactivated": "" + } + }, + "tray": { + "icon-size": 8, + "spacing": 20 + }, + "custom/clock-icon": { + "format": "", + "interval": "once", + }, + "clock": { + "timezone": "America/Denver", + "tooltip-format": "{:%Y %B}\n{calendar}", + "format-alt": " {:%Y-%m-%d} ", + "format": " {:%H:%M} " + }, + "custom/cpu-icon": { + "format": "", + "interval": "once", + }, + "cpu": { + "format": "[cpu:{usage:02}%]", + "tooltip": false + }, + "custom/mem-icon": { + "format": "", + "interval": "once", + }, + "memory": { + "interval": 20, + "format": "[mem:{avail:0.1f}]" + }, + "custom/disc-icon": { + "format": "", + "interval": "once", + }, + "disk":{ + "interval": 60, + "format":"[ssd:{free}]" + }, + "custom/light-icon": { + "format": "", + "interval": "once", + }, + "backlight": { + "format": "[lcd:{percent}%]", + "format-icons": ["", ""], + "on-scroll-up" : "brightnessctl s 1%+", + "on-scroll-down" : "brightnessctl s 1%-" + }, + "custom/batt-icon": { + "format": "", + "interval": "once", + }, + "battery": { + "states": { + // "good": 95, + "warning": 30, + "critical": 15 + }, + "format": "[bat:{capacity}%]", + "format-charging": "[bat:{capacity}%]", + "format-plugged": "[bat:{capacity}%]", + "format-alt": "[bat:{time}]", + "format-icons": ["", "", "", "", ""] + }, + "battery#bat2": { + "bat": "BAT2" + }, + "custom/net-icon": { + "format": " ", + "interval": "once", + "on-click": "iwgtk" + }, + "network": { + "format-wifi": "[{essid} {ipaddr}]", + "format-ethernet": "[Eth {ipaddr}]", + "format-linked": "[{ifname} (CONF)]", + "format-disconnected": "[Disconnected]", + "on-click": "gnome-control-center network" + }, + "custom/vol-icon": { + "format": " ", + "interval": "once", + "on-click": "pavucontrol" + }, + "custom/energy-icon": { + "format": " ", + "interval": "once", + "on-click": "tlpui" + }, + "custom/hardware-icon": { + "format": " ", + "interval": "once", + "on-click": "GDK_BACKEND=x11 hardinfo" + }, + "pulseaudio": { + "format": "[vol:{volume}%]", + "format-bluetooth": "[vol:{volume}%]", + "format-bluetooth-muted": "[Muted]", + "format-muted": "[Muted {format_source}]", + "format-source": "[{volume}%]", + "format-source-muted": "[Muted]", + "format-icons": { + "headphone": "", + "hands-free": "", + "headset": "", + "phone": "", + "portable": "", + "car": "", + "default": ["", "", ""] + }, + "on-click": "pavucontrol" + }, + "custom/lang-icon": { + "format": " |", + "interval": "once", + }, + "custom/gap": { + "format": " ", + "interval": "once", + }, + "custom/dash": { + "format": "--", + "interval": "once", + }, + "custom/lang": { + "format": " kbd:{} ", + "exec" : "swaymsg -t get_inputs | jq -r '.[] | select(.identifier == \"1165:49408:ITE_Tech._Inc._ITE_Device(8910)_Keyboard\") | .xkb_active_layout_name' | tail -1 | cut -c1,2", + "interval": 60 + }, + "tray": { + "icon-size": 14, + "spacing": 10 + } +} diff --git a/config/waybar/filemanager.svg b/config/waybar/filemanager.svg new file mode 100644 index 0000000..a3b6d51 --- /dev/null +++ b/config/waybar/filemanager.svg @@ -0,0 +1,18 @@ + + + + folder + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff --git a/config/waybar/info.txt b/config/waybar/info.txt new file mode 100644 index 0000000..addbdf9 --- /dev/null +++ b/config/waybar/info.txt @@ -0,0 +1 @@ +waybar status bar configuration \ No newline at end of file diff --git a/config/waybar/mmfm.svg b/config/waybar/mmfm.svg new file mode 100644 index 0000000..c5fb44b --- /dev/null +++ b/config/waybar/mmfm.svg @@ -0,0 +1,14 @@ + + + + image_picture [#971] + Created with Sketch. + + + + + + + + + \ No newline at end of file diff --git a/config/waybar/overview.svg b/config/waybar/overview.svg new file mode 100644 index 0000000..baa451f --- /dev/null +++ b/config/waybar/overview.svg @@ -0,0 +1,7 @@ + + + + + + diff --git a/config/waybar/printer.svg b/config/waybar/printer.svg new file mode 100644 index 0000000..abbf25d --- /dev/null +++ b/config/waybar/printer.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/config/waybar/settings.svg b/config/waybar/settings.svg new file mode 100644 index 0000000..9884a55 --- /dev/null +++ b/config/waybar/settings.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/config/waybar/software.svg b/config/waybar/software.svg new file mode 100644 index 0000000..a48bee0 --- /dev/null +++ b/config/waybar/software.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/config/waybar/style.css b/config/waybar/style.css new file mode 100644 index 0000000..0d6a365 --- /dev/null +++ b/config/waybar/style.css @@ -0,0 +1,304 @@ +* { + border: 0; + border-radius: 0; + /* `otf-font-awesome` is required to be installed for icons */ + /*font-family: Roboto, Helvetica, Arial, sans-serif;*/ + /*font-family: Ubuntu;*/ + font-family: "Terminus"; + font-size: 16px; + font-weight: bold; + /* min-height: 16px; */ + padding: 0; + margin: 0; +} + +window#waybar { + background-color: rgba(0, 0, 0, 0); + color: #dedede; + /* border-bottom: 0.5px solid rgba(0, 0, 0, 0.1); */ + + /* 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: #3F3F3F; +} + +window#waybar.chromium { + background-color: #000000; + border: none; +} + +#tray { + margin-right: 5px; +} + +#workspaces { + margin-left: 2px; + margin-top: 2px; +} + +#workspaces button { + min-width: 15px; + padding-left: 3px; + padding-right: 3px; + /* margin: 0 0px; */ + background-color: transparent; + color: #aeaeae; + /* border-bottom: 1px solid rgba(255,255,255,0.7); */ +} + +/* 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: inherit; + /* border-bottom: 1px solid #ffffff; */ +} + +#workspaces button.visible { + /* border-bottom: 1px solid rgba(255, 255, 255, 1.0); */ + color: #666666; +} + +#workspaces button.focused { + /* border-bottom: 1px solid rgba(255, 255, 255, 1.0); */ + color: #fefefe; +} + +#workspaces button.urgent { + color: #eb4d4b; +} + +#workspaces button.persistent { + color: #555; +} + +#mode { + background-color: #64727D; + /* border-bottom: 1px solid #ffffff; */ +} + +#backlight, +#pulseaudio, +#custom-lang, +#disk, +#battery, +#memory, +#network, +#cpu +{ + color: rgba(255,255,255,0.3); + background-color: transparent; + /* border-bottom: 1px solid rgba(255, 255, 255, 0.7); */ +} + +#clock, +#temperature, +#custom-media, +#custom-wlogout, +#custom-pamac, +#tray, +#mode, +#idle_inhibitor, +#mpd { + color: #dedede; + /* border-bottom: 1px solid rgba(255, 255, 255, 0.7); */ + margin-top: 2px; +} + +#clock { +} + +#battery { +} + +#battery.charging { + background-color: #26A65B; +} + +@keyframes blink { + to { + background-color: #ffffff; + color: #000000; + } +} + +#battery.critical:not(.charging) { + background-color: #f53c3c; + color: #ffffff; + animation-name: blink; + animation-duration: 0.5s; + animation-timing-function: linear; + animation-iteration-count: infinite; + animation-direction: alternate; +} + +label:focus { + background-color: #000000; +} + +#cpu { +} + +#memory { +} + +#backlight { +} + +#network { +} + +#network.disconnected { + background-color: #f53c3c; +} + +#pulseaudio { +} + +#custom-apps { + background-image: url('/home/milgra/.config/waybar/apps.svg'); + background-repeat: no-repeat; + margin-left: 5px; + margin-top: 7px; +} + +#custom-terminal { + background-image: url('/home/milgra/.config/waybar/terminal.svg'); + background-repeat: no-repeat; + margin-top: 5px; +} + +#custom-filemanager { + background-image: url('/home/milgra/.config/waybar/filemanager.svg'); + background-repeat: no-repeat; + margin-left: 9px; + margin-top: 6px; +} + +#custom-browser { + background-image: url('/home/milgra/.config/waybar/browser.svg'); + background-repeat: no-repeat; + margin-left: 7px; + margin-top: 6px; +} + +#custom-libre { + background-image: url('/home/milgra/.config/waybar/word.svg'); + background-repeat: no-repeat; + margin-left: 4px; + margin-top: 6px; +} + +#custom-mmfm { + background-image: url('/home/milgra/.config/waybar/mmfm.svg'); + background-repeat: no-repeat; + /* background-position: center; */ + margin-left: 7px; + margin-top: 7px; +} + +#custom-vmp { + background-image: url('/home/milgra/.config/waybar/vmp.svg'); + background-repeat: no-repeat; + /* background-position: center; */ + margin-left: 9px; + margin-top: 7px; +} + +#custom-printer { + background-image: url('/home/milgra/.config/waybar/printer.svg'); + background-repeat: no-repeat; + margin-left: 4px; + margin-top: 6px; +} + +#custom-software { + background-image: url('/home/milgra/.config/waybar/software.svg'); + background-repeat: no-repeat; + margin-top: 6px; +} + +#custom-overview { + background-image: url('/home/milgra/.config/waybar/overview.svg'); + background-repeat: no-repeat; + margin-left: 4px; + margin-top: 6px; +} + +#custom-settings { + background-image: url('/home/milgra/.config/waybar/settings.svg'); + background-repeat: no-repeat; + margin-left: 5px; + margin-top: 7px; +} + +#custom-month { + margin-top: 6px; +} + +#pulseaudio.muted { + background-color: #90b1b1; + color: #2a5c45; +} + +#custom-media { + color: #2a5c45; + min-width: 100px; +} + +#custom-media.custom-spotify { + background-color: #66cc99; +} + +#custom-media.custom-vlc { + background-color: #ffa000; +} + +#temperature { +} + +#temperature.critical { + background-color: #eb4d4b; +} + +#tray { +} + +#idle_inhibitor { +} + +#idle_inhibitor.activated { + background-color: #ecf0f1; + color: #2d3436; +} + +#mpd { + color: #2a5c45; +} + +#mpd.disconnected { + background-color: #f53c3c; +} + +#mpd.stopped { + background-color: #90b1b1; +} + +#mpd.paused { + background-color: #51a37a; +} diff --git a/config/waybar/terminal.svg b/config/waybar/terminal.svg new file mode 100644 index 0000000..e8c7512 --- /dev/null +++ b/config/waybar/terminal.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/config/waybar/vmp.svg b/config/waybar/vmp.svg new file mode 100644 index 0000000..76ddd15 --- /dev/null +++ b/config/waybar/vmp.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/config/waybar/waybar/apps.svg b/config/waybar/waybar/apps.svg new file mode 100644 index 0000000..1e9efd5 --- /dev/null +++ b/config/waybar/waybar/apps.svg @@ -0,0 +1 @@ + diff --git a/config/waybar/waybar/browser.svg b/config/waybar/waybar/browser.svg new file mode 100644 index 0000000..6ddd3b7 --- /dev/null +++ b/config/waybar/waybar/browser.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/config/waybar/waybar/config b/config/waybar/waybar/config new file mode 100644 index 0000000..12a9842 --- /dev/null +++ b/config/waybar/waybar/config @@ -0,0 +1,252 @@ +{ + "layer": "bottom", + "height": 16, + "modules-left": [ + "sway/workspaces", + "sway/mode" + ], + + "modules-center": [ + "cpu", + "custom/gap", + "memory", + "custom/gap", + "disk", + "custom/gap", + "backlight", + "custom/gap", + "pulseaudio", + "custom/gap", + "battery", + "custom/gap", + "network" + ], + + "modules-right": [ + "custom/gap", + "clock" + ], + + "sway/workspaces": { + "persistent_workspaces": { + "1": [], + "2": [], + "3": [], + "4": [], + "5": [], + "6": [], + "7": [], + "8": [], + "9": [] + }, + "all-outputs": true + }, + "custom/terminal": { + "format": " ", + "interval": "once", + "on-click": "swaymsg exec foot", + }, + "custom/filemanager": { + "format": " ", + "interval": "once", + "on-click": "swaymsg exec 'nautilus --new-window'", + }, + "custom/browser": { + "format": " ", + "interval": "once", + "on-click": "swaymsg exec 'chromium --ozone-platform-hint=auto'", + }, + "custom/libre": { + "format": " ", + "interval": "once", + "on-click": "swaymsg exec libreoffice", + }, + "custom/mmfm": { + "format": " ", + "interval": "once", + "on-click": "swaymsg exec mmfm", + }, + "custom/vmp": { + "format": " ", + "interval": "once", + "on-click": "swaymsg exec vmp", + }, + "custom/printer": { + "format": " ", + "interval": "once", + "on-click": "swaymsg exec system-config-printer", + }, + "custom/software": { + "format": " ", + "interval": "once", + "on-click": "swaymsg exec QT_QPA_PLATFORM=xcb appstore", + }, + "custom/apps": { + "tooltip-format": "desktop", + "format": " ", + "interval": "once", + "on-click": "swaymsg exec 'wofi --show run'", + }, + "custom/overview": { + "format": " ", + "interval": "once", + "on-click": "swaymsg exec 'echo 2 > /tmp/sov'", + }, + "custom/settings": { + "tooltip-format": "shutdown/logout", + "format": " ", + "interval": "once", + "on-click": "swaymsg exec 'echo 2 > /tmp/wcp'", + }, + "sway/language": { + "format": "{short} {variant}", + }, + "sway/mode": { + "format": "{}" + }, + "sway/window":{ + "max-length":50 + }, + "idle_inhibitor": { + "format": "idle | ", + "format-icons": { + "activated": "", + "deactivated": "" + } + }, + "tray": { + "icon-size": 8, + "spacing": 20 + }, + "custom/clock-icon": { + "format": "", + "interval": "once", + }, + "clock": { + "timezone": "America/Denver", + "tooltip-format": "{:%Y %B}\n{calendar}", + "format-alt": " {:%Y-%m-%d} ", + "format": " {:%H:%M} " + }, + "custom/cpu-icon": { + "format": "", + "interval": "once" + }, + "cpu": { + "format": "[cpu:{usage:02}%]", + "tooltip": false, + "on-click": "lxtask" + }, + "custom/mem-icon": { + "format": "", + "interval": "once", + }, + "memory": { + "interval": 20, + "format": "[mem:{avail:0.1f}]", + "on-click": "lxtask" + }, + "custom/disc-icon": { + "format": "", + "interval": "once", + }, + "disk":{ + "interval": 60, + "format":"[ssd:{free}]" + }, + "custom/light-icon": { + "format": "", + "interval": "once", + }, + "backlight": { + "format": "[lcd:{percent}%]", + "format-icons": ["", ""], + "on-scroll-up" : "brightnessctl s 1%+", + "on-scroll-down" : "brightnessctl s 1%-" + }, + "custom/batt-icon": { + "format": "", + "interval": "once", + }, + "battery": { + "states": { + // "good": 95, + "warning": 30, + "critical": 15 + }, + "format": "[bat:{capacity}%]", + "format-charging": "[bat:{capacity}%]", + "format-plugged": "[bat:{capacity}%]", + "format-alt": "[bat:{time}]", + "format-icons": ["", "", "", "", ""] + }, + "battery#bat2": { + "bat": "BAT2" + }, + "custom/net-icon": { + "format": " ", + "interval": "once", + "on-click": "iwgtk" + }, + "network": { + "format-wifi": "[{essid} {ipaddr}]", + "format-ethernet": "[Eth {ipaddr}]", + "format-linked": "[{ifname} (CONF)]", + "format-disconnected": "[Disconnected]", + "on-click": "nm-connection-editor" + }, + "custom/vol-icon": { + "format": " ", + "interval": "once", + "on-click": "pavucontrol" + }, + "custom/energy-icon": { + "format": " ", + "interval": "once", + "on-click": "tlpui" + }, + "custom/hardware-icon": { + "format": " ", + "interval": "once", + "on-click": "GDK_BACKEND=x11 hardinfo" + }, + "pulseaudio": { + "format": "[vol:{volume}%]", + "format-bluetooth": "[vol:{volume}%]", + "format-bluetooth-muted": "[Muted]", + "format-muted": "[Muted {format_source}]", + "format-source": "[{volume}%]", + "format-source-muted": "[Muted]", + "format-icons": { + "headphone": "", + "hands-free": "", + "headset": "", + "phone": "", + "portable": "", + "car": "", + "default": ["", "", ""] + }, + "on-click": "pavucontrol" + }, + "custom/lang-icon": { + "format": " |", + "interval": "once", + }, + "custom/gap": { + "format": " ", + "interval": "once", + }, + "custom/dash": { + "format": "--", + "interval": "once", + }, + "custom/lang": { + "format": " kbd:{} ", + "exec" : "swaymsg -t get_inputs | jq -r '.[] | select(.identifier == \"1165:49408:ITE_Tech._Inc._ITE_Device(8910)_Keyboard\") | .xkb_active_layout_name' | tail -1 | cut -c1,2", + "interval": 60 + }, + "tray": { + "icon-size": 14, + "spacing": 10 + } +} diff --git a/config/waybar/waybar/filemanager.svg b/config/waybar/waybar/filemanager.svg new file mode 100644 index 0000000..a3b6d51 --- /dev/null +++ b/config/waybar/waybar/filemanager.svg @@ -0,0 +1,18 @@ + + + + folder + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff --git a/config/waybar/waybar/info.txt b/config/waybar/waybar/info.txt new file mode 100644 index 0000000..addbdf9 --- /dev/null +++ b/config/waybar/waybar/info.txt @@ -0,0 +1 @@ +waybar status bar configuration \ No newline at end of file diff --git a/config/waybar/waybar/mmfm.svg b/config/waybar/waybar/mmfm.svg new file mode 100644 index 0000000..c5fb44b --- /dev/null +++ b/config/waybar/waybar/mmfm.svg @@ -0,0 +1,14 @@ + + + + image_picture [#971] + Created with Sketch. + + + + + + + + + \ No newline at end of file diff --git a/config/waybar/waybar/overview.svg b/config/waybar/waybar/overview.svg new file mode 100644 index 0000000..baa451f --- /dev/null +++ b/config/waybar/waybar/overview.svg @@ -0,0 +1,7 @@ + + + + + + diff --git a/config/waybar/waybar/printer.svg b/config/waybar/waybar/printer.svg new file mode 100644 index 0000000..abbf25d --- /dev/null +++ b/config/waybar/waybar/printer.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/config/waybar/waybar/settings.svg b/config/waybar/waybar/settings.svg new file mode 100644 index 0000000..9884a55 --- /dev/null +++ b/config/waybar/waybar/settings.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/config/waybar/waybar/software.svg b/config/waybar/waybar/software.svg new file mode 100644 index 0000000..a48bee0 --- /dev/null +++ b/config/waybar/waybar/software.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/config/waybar/waybar/style.css b/config/waybar/waybar/style.css new file mode 100644 index 0000000..0d6a365 --- /dev/null +++ b/config/waybar/waybar/style.css @@ -0,0 +1,304 @@ +* { + border: 0; + border-radius: 0; + /* `otf-font-awesome` is required to be installed for icons */ + /*font-family: Roboto, Helvetica, Arial, sans-serif;*/ + /*font-family: Ubuntu;*/ + font-family: "Terminus"; + font-size: 16px; + font-weight: bold; + /* min-height: 16px; */ + padding: 0; + margin: 0; +} + +window#waybar { + background-color: rgba(0, 0, 0, 0); + color: #dedede; + /* border-bottom: 0.5px solid rgba(0, 0, 0, 0.1); */ + + /* 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: #3F3F3F; +} + +window#waybar.chromium { + background-color: #000000; + border: none; +} + +#tray { + margin-right: 5px; +} + +#workspaces { + margin-left: 2px; + margin-top: 2px; +} + +#workspaces button { + min-width: 15px; + padding-left: 3px; + padding-right: 3px; + /* margin: 0 0px; */ + background-color: transparent; + color: #aeaeae; + /* border-bottom: 1px solid rgba(255,255,255,0.7); */ +} + +/* 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: inherit; + /* border-bottom: 1px solid #ffffff; */ +} + +#workspaces button.visible { + /* border-bottom: 1px solid rgba(255, 255, 255, 1.0); */ + color: #666666; +} + +#workspaces button.focused { + /* border-bottom: 1px solid rgba(255, 255, 255, 1.0); */ + color: #fefefe; +} + +#workspaces button.urgent { + color: #eb4d4b; +} + +#workspaces button.persistent { + color: #555; +} + +#mode { + background-color: #64727D; + /* border-bottom: 1px solid #ffffff; */ +} + +#backlight, +#pulseaudio, +#custom-lang, +#disk, +#battery, +#memory, +#network, +#cpu +{ + color: rgba(255,255,255,0.3); + background-color: transparent; + /* border-bottom: 1px solid rgba(255, 255, 255, 0.7); */ +} + +#clock, +#temperature, +#custom-media, +#custom-wlogout, +#custom-pamac, +#tray, +#mode, +#idle_inhibitor, +#mpd { + color: #dedede; + /* border-bottom: 1px solid rgba(255, 255, 255, 0.7); */ + margin-top: 2px; +} + +#clock { +} + +#battery { +} + +#battery.charging { + background-color: #26A65B; +} + +@keyframes blink { + to { + background-color: #ffffff; + color: #000000; + } +} + +#battery.critical:not(.charging) { + background-color: #f53c3c; + color: #ffffff; + animation-name: blink; + animation-duration: 0.5s; + animation-timing-function: linear; + animation-iteration-count: infinite; + animation-direction: alternate; +} + +label:focus { + background-color: #000000; +} + +#cpu { +} + +#memory { +} + +#backlight { +} + +#network { +} + +#network.disconnected { + background-color: #f53c3c; +} + +#pulseaudio { +} + +#custom-apps { + background-image: url('/home/milgra/.config/waybar/apps.svg'); + background-repeat: no-repeat; + margin-left: 5px; + margin-top: 7px; +} + +#custom-terminal { + background-image: url('/home/milgra/.config/waybar/terminal.svg'); + background-repeat: no-repeat; + margin-top: 5px; +} + +#custom-filemanager { + background-image: url('/home/milgra/.config/waybar/filemanager.svg'); + background-repeat: no-repeat; + margin-left: 9px; + margin-top: 6px; +} + +#custom-browser { + background-image: url('/home/milgra/.config/waybar/browser.svg'); + background-repeat: no-repeat; + margin-left: 7px; + margin-top: 6px; +} + +#custom-libre { + background-image: url('/home/milgra/.config/waybar/word.svg'); + background-repeat: no-repeat; + margin-left: 4px; + margin-top: 6px; +} + +#custom-mmfm { + background-image: url('/home/milgra/.config/waybar/mmfm.svg'); + background-repeat: no-repeat; + /* background-position: center; */ + margin-left: 7px; + margin-top: 7px; +} + +#custom-vmp { + background-image: url('/home/milgra/.config/waybar/vmp.svg'); + background-repeat: no-repeat; + /* background-position: center; */ + margin-left: 9px; + margin-top: 7px; +} + +#custom-printer { + background-image: url('/home/milgra/.config/waybar/printer.svg'); + background-repeat: no-repeat; + margin-left: 4px; + margin-top: 6px; +} + +#custom-software { + background-image: url('/home/milgra/.config/waybar/software.svg'); + background-repeat: no-repeat; + margin-top: 6px; +} + +#custom-overview { + background-image: url('/home/milgra/.config/waybar/overview.svg'); + background-repeat: no-repeat; + margin-left: 4px; + margin-top: 6px; +} + +#custom-settings { + background-image: url('/home/milgra/.config/waybar/settings.svg'); + background-repeat: no-repeat; + margin-left: 5px; + margin-top: 7px; +} + +#custom-month { + margin-top: 6px; +} + +#pulseaudio.muted { + background-color: #90b1b1; + color: #2a5c45; +} + +#custom-media { + color: #2a5c45; + min-width: 100px; +} + +#custom-media.custom-spotify { + background-color: #66cc99; +} + +#custom-media.custom-vlc { + background-color: #ffa000; +} + +#temperature { +} + +#temperature.critical { + background-color: #eb4d4b; +} + +#tray { +} + +#idle_inhibitor { +} + +#idle_inhibitor.activated { + background-color: #ecf0f1; + color: #2d3436; +} + +#mpd { + color: #2a5c45; +} + +#mpd.disconnected { + background-color: #f53c3c; +} + +#mpd.stopped { + background-color: #90b1b1; +} + +#mpd.paused { + background-color: #51a37a; +} diff --git a/config/waybar/waybar/terminal.svg b/config/waybar/waybar/terminal.svg new file mode 100644 index 0000000..e8c7512 --- /dev/null +++ b/config/waybar/waybar/terminal.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/config/waybar/waybar/vmp.svg b/config/waybar/waybar/vmp.svg new file mode 100644 index 0000000..76ddd15 --- /dev/null +++ b/config/waybar/waybar/vmp.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/config/waybar/waybar/word.svg b/config/waybar/waybar/word.svg new file mode 100644 index 0000000..caa6e2d --- /dev/null +++ b/config/waybar/waybar/word.svg @@ -0,0 +1 @@ + Document \ No newline at end of file diff --git a/config/waybar/word.svg b/config/waybar/word.svg new file mode 100644 index 0000000..caa6e2d --- /dev/null +++ b/config/waybar/word.svg @@ -0,0 +1 @@ + Document \ No newline at end of file