feat: use different .dtfiles config setup

This commit is contained in:
2023-10-11 15:52:30 +02:00
parent 6b431704de
commit b755d66571
175 changed files with 268 additions and 3596 deletions

360
.config/sway/config Normal file
View File

@ -0,0 +1,360 @@
# vim: ft=config
# Default config for sway
#
# Copy this to ~/.config/sway/config and edit it to your liking.
#
# Read `man 5 sway` for a complete reference.
exec dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=GNOME
### 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
# Some menus
set $quickmenu wofi --show drun
# Screenshot section
set $screenshot_dir ~/Pictures/Screenshots/
set $grimshot $sway_scripts/grimshot
set $screenclip wl-copy < "$($grimshot --notify save area $screenshot_dir/scrn-$(date +"%Y-%m-%d-%H-%M-%S").png)"
set $screenshot wl-copy < "$($grimshot --notify save screen $screenshot_dir/scrn-$(date +"%Y-%m-%d-%H-%M-%S").png)"
set $windowshot wl-copy < "$($grimshot --notify save window $screenshot_dir/scrn-$(date +"%Y-%m-%d-%H-%M-%S").png)"
set $screenvideo wf-recorder -g "$(slurp)" -f "$screenshot_dir/scrn-$(date +'%Y-%m-%d-%H-%M-%S').mp4"
# Default Programs
set $term flatpak run org.wezfurlong.wezterm
set $explorer nautilus
set $mail org.gnome.Geary
set $browser google-chrome-beta --enable-features=UseOzonePlatform --ozone-platform=wayland
set $browser firefox-developer-edition
set $password_mngr rofi-rbw --selector wofi --typer wtype --clipboarder wl-copy
set $bluetooth_mngr blueman-manager
set $calculator flatpak run io.github.Qalculate
set $photo_editor gtk-launch ~/.local/share/applications/photopea.desktop
set $translator com.github.gi_lom.dialect
set $settings XDG_CURRENT_DESKTOP=GNOME gnome-control-center
# Scripts
set $wofi_scripts ~/.config/wofi/scripts/
set $sway_scripts ~/.config/sway/scripts/
set $debug_window $sway_scripts/debug-window
set $toggle_layout $sway_scripts/toggle-layout
set $create_floating $sway_scripts/create-floating
set $toggle_gaps $sway_scripts/toggle-gaps
set $toggle_bar $sway_scripts/toggle-bar
set $open_project $wofi_scripts/open-project
set $select_window $sway_scripts/select-window
set $lock_screen $sway_scripts/lock-screen
set $select_emoji $wofi_scripts/select-emoji
set $open_localhost $wofi_scripts/open-localhost
set $select_wifi $wofi_scripts/select-wifi
# Input configuration
input * {
xkb_layout de
xkb_capslock disabled
}
input "type:keyboard" xkb_options caps:escape
smart_gaps off
gaps inner 3
gaps outer 3
default_border none
### Output configuration
#
# Default wallpaper (more resolutions are available in @datadir@/backgrounds/sway/)
set $wallpapers_path $HOME/.customization/background
output * bg `find $wallpapers_path -type f | shuf -n 1` fill
#
# Example configuration:
#
# output eDP-1 resolution 1920x1080
#
# You can get the names of your outputs by running: swaymsg -t get_outputs
### Idle configuration
#
# Example configuration:
#
exec swayidle -w \
timeout 300 '~/.config/sway/scripts/lock_screen.sh' \
timeout 600 'swaymsg "output * dpms off"' \
resume 'swaymsg "output * dpms on"' \
before-sleep $lock_screen
#
# This will lock your screen after 300 seconds of inactivity, then turn off
# your displays after another 300 seconds, and turn your screens back on when
# resumed. It will also lock your screen before your computer goes to sleep.
### Input configuration
#
# Example configuration:
#
input "1739:24385:Synaptics_TM2438-005" {
dwt enabled
tap enabled
natural_scroll enabled
middle_emulation enabled
}
#
# You can get the names of your inputs by running: swaymsg -t get_inputs
# Read `man 5 sway-input` for more information about this section.
### Key bindings
#
# Basics:
#
bindsym $mod+d exec $quickmenu
bindsym $mod+t exec $translator
bindsym $mod+q kill
bindsym $mod+Shift+q exec $wofi_scripts/power-menu
bindsym $mod+Return exec $term
bindsym $mod+Shift+Return exec $create_floating $term
bindsym $mod+e exec $explorer
bindsym $mod+Comma exec $settings
bindsym $mod+b exec $browser
bindsym $mod+Shift+w exec $select_wifi
bindsym $mod+Shift+b exec $bluetooth_mngr
bindsym $mod+Shift+Comma exec $config_editor
bindsym $mod+a exec $web_search
bindsym $mod+p exec $password_mngr
bindsym $mod+Shift+p exec grim -g "$(slurp -p)" -t ppm - | convert - -format '%[pixel:p{0,0}]' txt:- | tail -n 1 | cut -d ' ' -f 4 | wl-copy
# Drag and resize floating windows with mouse right/left drag
floating_modifier $mod normal
# Reload the configuration file
bindsym $mod+Shift+c reload
# Multimedia Audio Keys
bindsym --locked XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle
bindsym --locked XF86AudioNext exec playerctl next
bindsym --locked XF86AudioPrev exec playerctl previous
bindsym --locked XF86AudioPlay exec playerctl play-pause
bindsym --locked XF86AudioLowerVolume exec "pactl -- set-sink-volume @DEFAULT_SINK@ -10%"
bindsym --locked XF86AudioRaiseVolume exec "pactl -- set-sink-volume @DEFAULT_SINK@ +10%"
#Increase brightness
bindsym XF86MonBrightnessUp exec brightnessctl set +20
bindsym XF86MonBrightnessDown exec brightnessctl set 20-
# Exit sway (logs you out of your Wayland session)
bindsym $mod+Shift+e exec swaynag -t warning -m 'Do you really want to exit 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
bindsym $mod+Control+Left move workspace to output left
bindsym $mod+Control+Right move workspace to output right
bindsym $mod+Control+Up move workspace to output up
bindsym $mod+Control+Down move workspace to output down
# 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:
#
#
corner_radius 4
for_window [class="zoom"] floating enable
for_window [app_id="com.github.gi_lom.dialect"] floating enable, resize set 800 400, sticky enable
for_window [app_id="gnome-calculator"] floating enable
for_window [app_id="qalculate-gtk"] floating enable
for_window [title="Zoom Meeting.*"] floating disable
for_window [title="Firefox Developer Edition — Sharing Indicator"] floating enable, sticky enable, move position 10 980, resize set 75 50
for_window [title="Property Browser"] floating enable
for_window [title="Picture in Picture"] floating enable
for_window [title="Zoom Meeting.*"] inhibit_idle visible
for_window [app_id="firefox" title="^Picture-in-Picture$"] floating enable, move position 1300 600, sticky enable, resize set 600 450
set $ws1 "1:  Code"
assign [app_id="Alacritty"] $ws1
assign [app_id="Kitty"] $ws1
set $ws2 "2:  Browser"
assign [class="^Firefox"] $ws2
assign [class="Chromium"] $ws2
assign [class="Google-chrome-beta"] $ws2
assign [app_id="google-chrome-beta"] $ws2
assign [class="Google-chrome"] $ws2
assign [app_id="google-chrome"] $ws2
set $ws3 "3:  Music"
assign [class="Spotify"] $ws3
assign [class="spotify"] $ws3
assign [app_id="feishin"] $ws3
assign [app_id="dev.alextren.Spot"] $ws3
set $ws4 "4:  Chat"
# 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 number 5
bindsym $mod+6 workspace number 6
bindsym $mod+7 workspace number 7
bindsym $mod+8 workspace number 8
bindsym $mod+9 workspace number 9
bindsym $mod+0 workspace number 10
# Move focused container to workspace
bindsym $mod+Shift+1 move container to workspace $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 number 5
bindsym $mod+Shift+6 move container to workspace number 6
bindsym $mod+Shift+7 move container to workspace number 7
bindsym $mod+Shift+8 move container to workspace number 8
bindsym $mod+Shift+9 move container to workspace number 9
bindsym $mod+Shift+0 move container to workspace number 10
# Note: workspaces can have any name you want, not just numbers.
# We just use 1-10 as the default.
#
# Layout stuff:
#
# You can "split" the current object of your focus with
# $mod+b or $mod+v, for horizontal and vertical splits
# respectively.
# bindsym $mod+b splith
# bindsym $mod+v splitv
# Switch the current container between different layout styles
bindsym $mod+w exec $toggle_layout
bindsym $mod+g exec $toggle_gaps
bindsym $mod+Shift+g exec $toggle_bar
# 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
# Screenshots
# -- Entire Screen
bindsym $mod+s exec $screenshot
# -- Area Screenshot
bindsym $mod+Shift+s exec $screenclip
bindsym $mod+Alt+s exec $screenvideo
# -- Select Window
bindsym $mod+Control+s exec $windowshot
bindsym $mod+Alt+h exec clipman pick -t wofi
bindsym $mod+i exec $select_emoji
bindsym $mod+Shift+i exec $debug_window
bindsym $mod+o exec $open_localhost
bindsym $mod+Shift+o exec $open_project
bindsym $mod+Control+l exec $lock_screen
bindsym $mod+c exec $calculator
bindsym $mod+Tab exec $select_window
bindsym $mod+m exec $mail
#
# 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 100px
bindsym $down resize grow height 100px
bindsym $up resize shrink height 100px
bindsym $right resize grow width 100px
bindsym Shift+$left resize shrink width 20px
bindsym Shift+$down resize grow height 20px
bindsym Shift+$up resize shrink height 20px
bindsym Shift+$right resize grow width 20px
# 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"
# Handles notifications
exec_always dunst
# Start Audio
# exec_always pulseaudio --start
# Handle Authentiction requests
exec_always /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
exec_always clipman
exec_always /usr/lib/kdeconnectd
# Dimms the screen
exec_always wlsunset -l 39.47 -L -0.3821346
exec wl-paste -t text --watch clipman store --no-persist
#
# Status Bar:
#
bar {
swaybar_command waybar
mode dock
position top
}
exec "systemctl --user import-environment SWAYSOCK XDG_CURRENT_DESKTOP WAYLAND_DISPLAY";

View File

@ -0,0 +1,27 @@
#!/usr/bin/env bash
$@ &
pid=$!
ALL_NODES='recurse(.nodes[]?, .floating_nodes[]?) | select(.pid and .visible)'
sleep 0.3
all_nodes="$(swaymsg -t get_tree | jq -r "$ALL_NODES" | jq -c '.pid')"
window_id="$(swaymsg -t get_tree | jq -r "$ALL_NODES" | jq --argjson pid $pid -c 'select(.pid==$pid).id')"
swaymsg "[ con_id=$window_id ] floating enable, resize set 800 400, move position 1115 670, sticky enable"
# swaymsg -t subscribe -m '[ "window" ]' \
# | jq --unbuffered --argjson pid "$pid" '.container | select(.pid == $pid) | .id' \
# | xargs -I '@' -- swaymsg '[ con_id=@ ] floating enable' &
# subscription=$!
# echo Going into wait state
# # Wait for our process to close
# tail --pid=$pid -f /dev/null
# echo Killing subscription
# kill $subscription

View File

@ -0,0 +1,35 @@
#!/bin/bash
ALL_NODES='recurse(.nodes[]?, .floating_nodes[]?) | select(.pid and .visible)'
WINDOW_NAME='(.app_id // .window_properties.class)'
ID_PREFIX='"\(.pid):"'
WINDOW_PROTOCOL='(if .shell == "xwayland" then "X11" else "wayland" end)'
WINDOW_GEOMETRY='(.rect | "\(.x),\(.y) \(.width)x\(.height) ")'
WINDOW_PID='(.id | tostring)'
CLEAR_OBJ="del(.focus, .pid, .border, .current_border_width, .window_rect, .orientation, .layout, .percent, .deco_rect, .geometry, .window, .urgent, .marks, .sticky, .fullscreen_mode, .nodes, .floating_nodes, .shell, .max_render_time, .visible, .idle_inhibitors, .inhibit_idle)"
# Output format, e.g. "1234 - 12:firefox (wayland)" or "5678 - 17:discord (X11)"
FILT="$ALL_NODES | $WINDOW_GEOMETRY + $WINDOW_PID"
function getprop() {
typeset -A views
local selected
while read POS GEOM INFO; do
views["$POS $GEOM"]="$INFO"
done
selected="$(printf "%s\n" "${!views[@]}" | slurp)"
if [[ -n "$selected" ]]; then
window_id=${views[${selected}]};
SELECT_ID=$(echo ".. | (.nodes? // empty)[] | select(.id == $window_id) | $CLEAR_OBJ ")
selected="$(swaymsg -t get_tree | jq -r "$ALL_NODES" | jq -c ". | select(.id==$window_id)" | jq)"
echo "$selected"
echo "$selected" > /tmp/sway_debug_window.json
notify-send "Debug:" "$(echo $selected | jq -c "$CLEAR_OBJ" | jq)";
wezterm start -- nvim /tmp/sway_debug_window.json;
fi
}
swaymsg -t get_tree | jq -r "$FILT" | getprop

154
.config/sway/scripts/grimshot Executable file
View File

@ -0,0 +1,154 @@
#!/bin/sh
## Grimshot: a helper for screenshots within sway
## Requirements:
## - `grim`: screenshot utility for wayland
## - `slurp`: to select an area
## - `swaymsg`: to read properties of current window
## - `wl-copy`: clipboard utility
## - `jq`: json utility to parse swaymsg output
## - `notify-send`: to show notifications
## Those are needed to be installed, if unsure, run `grimshot check`
##
## See `man 1 grimshot` or `grimshot usage` for further details.
getTargetDirectory() {
test -f ${XDG_CONFIG_HOME:-~/.config}/user-dirs.dirs && \
. ${XDG_CONFIG_HOME:-~/.config}/user-dirs.dirs
echo ${XDG_SCREENSHOTS_DIR:-${XDG_PICTURES_DIR:-$HOME}}
}
if [ "$1" = "--notify" ]; then
NOTIFY=yes
shift 1
else
NOTIFY=no
fi
ACTION=${1:-usage}
SUBJECT=${2:-screen}
FILE=${3:-$(getTargetDirectory)/$(date -Ins).png}
if [ "$ACTION" != "save" ] && [ "$ACTION" != "copy" ] && [ "$ACTION" != "check" ]; then
echo "Usage:"
echo " grimshot [--notify] (copy|save) [active|screen|output|area|window] [FILE|-]"
echo " grimshot check"
echo " grimshot usage"
echo ""
echo "Commands:"
echo " copy: Copy the screenshot data into the clipboard."
echo " save: Save the screenshot to a regular file or '-' to pipe to STDOUT."
echo " check: Verify if required tools are installed and exit."
echo " usage: Show this message and exit."
echo ""
echo "Targets:"
echo " active: Currently active window."
echo " screen: All visible outputs."
echo " output: Currently active output."
echo " area: Manually select a region."
echo " window: Manually select a window."
exit
fi
notify() {
notify-send -t 3000 -a grimshot "$@"
}
notifyOk() {
[ "$NOTIFY" = "no" ] && return
TITLE=${2:-"Screenshot"}
MESSAGE=${1:-"OK"}
notify "$TITLE" "$MESSAGE"
}
notifyError() {
if [ $NOTIFY = "yes" ]; then
TITLE=${2:-"Screenshot"}
MESSAGE=${1:-"Error taking screenshot with grim"}
notify -u critical "$TITLE" "$MESSAGE"
else
echo $1
fi
}
die() {
MSG=${1:-Bye}
notifyError "Error: $MSG"
exit 2
}
check() {
COMMAND=$1
if command -v "$COMMAND" > /dev/null 2>&1; then
RESULT="OK"
else
RESULT="NOT FOUND"
fi
echo " $COMMAND: $RESULT"
}
takeScreenshot() {
FILE=$1
GEOM=$2
OUTPUT=$3
if [ ! -z "$OUTPUT" ]; then
grim -o "$OUTPUT" "$FILE" || die "Unable to invoke grim"
elif [ -z "$GEOM" ]; then
grim "$FILE" || die "Unable to invoke grim"
else
grim -g "$GEOM" "$FILE" || die "Unable to invoke grim"
fi
}
if [ "$ACTION" = "check" ] ; then
echo "Checking if required tools are installed. If something is missing, install it to your system and make it available in PATH..."
check grim
check slurp
check swaymsg
check wl-copy
check jq
check notify-send
exit
elif [ "$SUBJECT" = "area" ] ; then
GEOM=$(slurp -d)
# Check if user exited slurp without selecting the area
if [ -z "$GEOM" ]; then
exit 1
fi
WHAT="Area"
elif [ "$SUBJECT" = "active" ] ; then
FOCUSED=$(swaymsg -t get_tree | jq -r 'recurse(.nodes[]?, .floating_nodes[]?) | select(.focused)')
GEOM=$(echo "$FOCUSED" | jq -r '.rect | "\(.x),\(.y) \(.width)x\(.height)"')
APP_ID=$(echo "$FOCUSED" | jq -r '.app_id')
WHAT="$APP_ID window"
elif [ "$SUBJECT" = "screen" ] ; then
GEOM=""
WHAT="Screen"
elif [ "$SUBJECT" = "output" ] ; then
GEOM=""
OUTPUT=$(swaymsg -t get_outputs | jq -r '.[] | select(.focused)' | jq -r '.name')
WHAT="$OUTPUT"
elif [ "$SUBJECT" = "window" ] ; then
GEOM=$(swaymsg -t get_tree | jq -r '.. | select(.pid? and .visible?) | .rect | "\(.x),\(.y) \(.width)x\(.height)"' | slurp)
# Check if user exited slurp without selecting the area
if [ -z "$GEOM" ]; then
exit 1
fi
WHAT="Window"
else
die "Unknown subject to take a screen shot from" "$SUBJECT"
fi
if [ "$ACTION" = "copy" ] ; then
takeScreenshot - "$GEOM" "$OUTPUT" | wl-copy --type image/png || die "Clipboard error"
notifyOk "$WHAT copied to buffer"
else
if takeScreenshot "$FILE" "$GEOM" "$OUTPUT"; then
TITLE="Screenshot of $SUBJECT"
MESSAGE=$(basename "$FILE")
notifyOk "$MESSAGE" "$TITLE"
echo $FILE
else
notifyError "Error taking screenshot with grim"
fi
fi

View File

@ -0,0 +1,3 @@
#!/usr/bin/sh
swaylock -c 000000

View File

@ -0,0 +1,6 @@
[2023-01-02 18:22:40.854] [info] Using configuration file /home/max/.config/waybar/config
[2023-01-02 18:22:40.854] [info] Using CSS file /home/max/.config/waybar/style.css
[2023-01-02 18:22:40.861] [info] config update for bar-0: id bar-0, mode hide, hidden_state hide
[2023-01-02 18:22:40.862] [warning] As using a timezone, some format args may be missing as the date library haven't got a release since 2018.
[2023-01-02 18:22:40.920] [warning] Requested height: 20 is less than the minimum height: 44 required by the modules
[2023-01-02 18:22:40.920] [info] Bar configured (width: 1920, height: 44) for output: eDP-1

View File

@ -0,0 +1,18 @@
#!/bin/sh
# ------Get available windows:
windows=$(swaymsg -t get_tree | jq -r '
recurse(.nodes[]?) |
recurse(.floating_nodes[]?) |
select(.type=="con"), select(.type=="floating_con") |
(.id | tostring) + " " + .app_id + ": " + .name')
# ------Limit wofi's height with the number of opened windows:
height=$(echo "$windows" | wc -l)
height=$(($height + 2))
# ------Select window with wofi:
selected=$(echo "$windows" | wofi -d --lines $height -i -p "Switch to:" | awk '{print $1}')
# ------Tell sway to focus said window:
swaymsg [con_id="$selected"] focus

18
.config/sway/scripts/toggle-bar Executable file
View File

@ -0,0 +1,18 @@
#!/bin/bash
GAPS=3
# How to get the current inner border from swaymsg
#$ echo $(swaymsg -t get_config | jq ".config") | sed -n '/gaps\ inner/p' | sed 's/gaps\ inner//g' | xargs
bar_mode="$(swaymsg -t get_bar_config bar-0 | jq '.mode')"
if [ "$bar_mode" != "dock" ]; then
swaymsg bar mode hide bar-0
swaymsg gaps outer all set 0;
swaymsg gaps inner all set 0;
else
swaymsg bar mode dock bar-0
swaymsg gaps outer all set $GAPS;
swaymsg gaps inner all set $GAPS;
fi

View File

@ -0,0 +1,16 @@
#!/bin/bash
GAPS=3
# How to get the current inner border from swaymsg
#$ echo $(swaymsg -t get_config | jq ".config") | sed -n '/gaps\ inner/p' | sed 's/gaps\ inner//g' | xargs
if [ "$(ps cax | grep waybar$)" != "" ]; then
swaymsg gaps outer all set 0;
swaymsg gaps inner all set 0;
killall waybar;
else
swaymsg gaps outer all set $GAPS;
swaymsg gaps inner all set $GAPS;
nohup waybar & 2&> /dev/null;
fi

View File

@ -0,0 +1,31 @@
#!/bin/bash
WORKSPACE=$(swaymsg -t get_workspaces --raw | jq '.[] | select(.focused == true)')
WORKSPACE_ID=$(echo $WORKSPACE | jq ".name" | tr -d '"')
WORKSPACE_MODE=$(swaymsg -t get_tree | jq 'recurse(.nodes[]) | select(.nodes[].focused == true).layout');
echo "WORKSPACE: $WORKSPACE_MODE"
MODE_SPLITH='"splith"'
MODE_SPLITV='"splitv"'
MODE_TABBED='"tabbed"'
MODE_STACKED='"stacked"'
function set_layout(){
swaymsg "workspace $(swaymsg -t get_workspaces --raw | jq '.[] | select(.focused == true) .name'); layout $1"
}
if [ $WORKSPACE_MODE = $MODE_SPLITH ]; then
set_layout splitv
elif [ $WORKSPACE_MODE = $MODE_SPLITV ]; then
set_layout tabbed
# elif [ $WORKSPACE_MODE = $MODE_TABBED ]; then
# set_layout stacking
elif [ $WORKSPACE_MODE = $MODE_TABBED ]; then
set_layout splith
fi
if [ "$1" != "" ]; then
set_layout $1
fi

114
.config/sway/scripts/wl-present Executable file
View File

@ -0,0 +1,114 @@
#!/bin/bash
usage() {
echo "usage: wl-present <command> [argument]"
echo
echo "start wl-mirror and control the mirrored output and region in a convenient way"
echo
echo "commands:"
echo " help show this help"
echo " mirror [output] start wl-mirror on output [output] (default asks via slurp)"
echo " set-output [output] set the recorded output (default asks via slurp)"
echo " set-region [region] set the recorded region (default asks via slurp)"
echo " set-scaling [scale] set the scaling mode (default asks via rofi)"
echo " freeze freeze the screen"
echo " unfreeze resume the screen capture after freeze"
echo " toggle-freeze toggle freeze state of screen capture"
echo " custom [options] send custom options to wl-mirror (default asks via rofi)"
echo
echo "dependencies:"
echo " wl-mirror, pipectl, slurp, and rofi or dmenu"
exit 0
}
type -p rofi >/dev/null
if [[ $? -eq 0 ]]; then
DMENU=dmenu-rofi
else
DMENU=dmenu
fi
dmenu-rofi() {
rofi -dmenu -width 30 -columns 1 "$@"
}
slurp-output() {
slurp -b \#00000000 -B \#00000000 -c \#859900 -w 4 -f %o -or 2>/dev/null
}
slurp-region() {
slurp -b \#00000000 -c \#859900 -w 2 2>/dev/null
}
mirror() {
pipectl -n wl-present -o | wl-mirror -S "$1"
}
mirror-cmd() {
pipectl -n wl-present -i <<< "$1"
}
set-output() {
mirror-cmd "$1"
}
set-region() {
mirror-cmd "-r '$1'"
}
set-scaling() {
mirror-cmd "-s $1"
}
ask-output() {
slurp-output
[[ $? -ne 0 ]] && exit 1
}
ask-region() {
slurp-region
[[ $? -ne 0 ]] && exit 1
}
ask-scaling() {
(echo linear; echo nearest; echo exact) | "$DMENU" -p "wl-present scaling"
[[ $? -ne 0 ]] && exit 1
}
ask-custom() {
cat <<EOF | "$DMENU" -p "wl-present custom"
--verbose
--no-verbose
--show-cursor
--no-show-cursor
--invert-colors
--no-invert-colors
--freeze
--unfreeze
--toggle-freeze
--scaling linear
--scaling nearest
--scaling exact
--transform
--region
--no-region
EOF
[[ $? -ne 0 ]] && exit 1
}
if [[ $# -eq 0 || $# -gt 2 ]]; then
usage
fi
case "$1" in
help) usage;;
mirror) mirror "${2:-$(ask-output)}";;
set-output) set-output "${2:-$(ask-output)}";;
set-region) set-region "${2:-$(ask-region)}";;
set-scaling) set-scaling "${2:-$(ask-scaling)}";;
freeze) mirror-cmd --freeze;;
unfreeze) mirror-cmd --unfreeze;;
toggle-freeze) mirror-cmd --toggle-freeze;;
custom) mirror-cmd "${2:-$(ask-custom)}";;
*) usage;;
esac