chore: cleanup
This commit is contained in:
parent
7acbafb7fe
commit
29eed372ff
@ -62,6 +62,10 @@ lsp.jsonls.setup {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lsp.svelte.setup {}
|
||||||
|
|
||||||
|
lsp.tsserver.setup {}
|
||||||
|
|
||||||
lsp.ltex.setup {
|
lsp.ltex.setup {
|
||||||
cmd = { os.getenv("HOME") .. '/.local/share/nvim/lsp_servers/ltex/ltex-ls/bin/ltex-ls' },
|
cmd = { os.getenv("HOME") .. '/.local/share/nvim/lsp_servers/ltex/ltex-ls/bin/ltex-ls' },
|
||||||
settings = {
|
settings = {
|
||||||
|
@ -1,39 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# FEATURES
|
|
||||||
# - Doesn't show the sink that is already the default
|
|
||||||
# - Automatically switches all running input sinks when switching the default sink
|
|
||||||
|
|
||||||
# Get the current default sink
|
|
||||||
SINK_DEFAULT=$(pactl info | ag "Default Sink" | ag -o "(?!.*:)[^\s].*")
|
|
||||||
# Get the audio sink names
|
|
||||||
SINK_NAMES=$(pactl list sinks | ag Name | cut --complement -c 1-7)
|
|
||||||
|
|
||||||
# Get the index of the default sink
|
|
||||||
DEFAULT_INDEX=$(printf "%s" "$SINK_NAMES" | ag --number "$SINK_DEFAULT" | sed 's/:.*//' )
|
|
||||||
|
|
||||||
# Get the audio sink descriptions
|
|
||||||
SINK_DESCRIPTIONS=$(pactl list sinks | ag Description | cut --complement -c 1-13 | sed 's/^ \+//' | sed 's/ \+$//')
|
|
||||||
# Get all the programs that revieve the audio from the sinks
|
|
||||||
SINK_INPUTS=$(pactl list sink-inputs | ag "Sink Input #")
|
|
||||||
|
|
||||||
# Get the descriptions from the sinks without the default sink to display to the user and have the user pick a sink
|
|
||||||
SINK_DESCRIPTION=$(printf "%s" "$SINK_DESCRIPTIONS" | sed "${DEFAULT_INDEX}d" | dmenu -i -fn "Roboto Mono for Powerline-11" -p "Select sink:")
|
|
||||||
SINK_DESCRIPTION=$(printf "%s" "$SINK_DESCRIPTION" | sed 's/(/\\(/' | sed 's/)/\\)/')
|
|
||||||
|
|
||||||
# Get the index for the answer that the user wrote
|
|
||||||
DESCRIPTION_INDEX=$(printf "%s\n" "$SINK_DESCRIPTIONS" | ag --number "$SINK_DESCRIPTION" | sed 's/:.*//')
|
|
||||||
DESCRIPTION_INDEX=$((DESCRIPTION_INDEX - 1)) # Correct the index hihi
|
|
||||||
|
|
||||||
# Set the default sink
|
|
||||||
pactl set-default-sink $DESCRIPTION_INDEX
|
|
||||||
|
|
||||||
# Change all the ouputs for the programs that are using the default sink
|
|
||||||
printf "%s\n" "$SINK_INPUTS" | while read -r SINK_INPUT
|
|
||||||
do
|
|
||||||
# Get the index for the program
|
|
||||||
SINK_INPUT_INDEX=$(printf "%s" "$SINK_INPUT" | ag -o "(?!Sink Input#)[0-9]+")
|
|
||||||
pactl move-sink-input "$SINK_INPUT_INDEX" "$DESCRIPTION_INDEX"
|
|
||||||
done
|
|
@ -1,246 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# This script defines just a mode for rofi instead of being a self-contained
|
|
||||||
# executable that launches rofi by itself. This makes it more flexible than
|
|
||||||
# running rofi inside this script as now the user can call rofi as one pleases.
|
|
||||||
# For instance:
|
|
||||||
#
|
|
||||||
# rofi -show powermenu -modi powermenu:./rofi-power-menu
|
|
||||||
#
|
|
||||||
# See README.md for more information.
|
|
||||||
|
|
||||||
set -e
|
|
||||||
set -u
|
|
||||||
|
|
||||||
# All supported choices
|
|
||||||
all=(shutdown reboot suspend hibernate logout lockscreen)
|
|
||||||
|
|
||||||
# By default, show all (i.e., just copy the array)
|
|
||||||
show=("${all[@]}")
|
|
||||||
|
|
||||||
declare -A texts
|
|
||||||
texts[lockscreen]="lock screen"
|
|
||||||
texts[switchuser]="switch user"
|
|
||||||
texts[logout]="log out"
|
|
||||||
texts[suspend]="suspend"
|
|
||||||
texts[hibernate]="hibernate"
|
|
||||||
texts[reboot]="reboot"
|
|
||||||
texts[shutdown]="shut down"
|
|
||||||
|
|
||||||
declare -A icons
|
|
||||||
icons[lockscreen]="\uf023"
|
|
||||||
icons[switchuser]="\uf518"
|
|
||||||
icons[logout]="\uf842"
|
|
||||||
icons[suspend]="\uf9b1"
|
|
||||||
icons[hibernate]="\uf7c9"
|
|
||||||
icons[reboot]="\ufc07"
|
|
||||||
icons[shutdown]="\uf011"
|
|
||||||
icons[cancel]="\u00d7"
|
|
||||||
|
|
||||||
declare -A actions
|
|
||||||
actions[lockscreen]="loginctl lock-session ${XDG_SESSION_ID-}"
|
|
||||||
#actions[switchuser]="???"
|
|
||||||
actions[logout]="loginctl terminate-session ${XDG_SESSION_ID-}"
|
|
||||||
actions[suspend]="systemctl suspend"
|
|
||||||
actions[hibernate]="systemctl hibernate"
|
|
||||||
actions[reboot]="systemctl reboot"
|
|
||||||
actions[shutdown]="systemctl poweroff"
|
|
||||||
|
|
||||||
# By default, ask for confirmation for actions that are irreversible
|
|
||||||
confirmations=(reboot shutdown logout)
|
|
||||||
|
|
||||||
# By default, no dry run
|
|
||||||
dryrun=false
|
|
||||||
showsymbols=true
|
|
||||||
|
|
||||||
function check_valid {
|
|
||||||
option="$1"
|
|
||||||
shift 1
|
|
||||||
for entry in "${@}"
|
|
||||||
do
|
|
||||||
if [ -z "${actions[$entry]+x}" ]
|
|
||||||
then
|
|
||||||
echo "Invalid choice in $1: $entry" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# Parse command-line options
|
|
||||||
parsed=$(getopt --options=h --longoptions=help,dry-run,confirm:,choices:,choose:,symbols,no-symbols --name "$0" -- "$@")
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo 'Terminating...' >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
eval set -- "$parsed"
|
|
||||||
unset parsed
|
|
||||||
while true; do
|
|
||||||
case "$1" in
|
|
||||||
"-h"|"--help")
|
|
||||||
echo "rofi-power-menu - a power menu mode for Rofi"
|
|
||||||
echo
|
|
||||||
echo "Usage: rofi-power-menu [--choices CHOICES] [--confirm CHOICES]"
|
|
||||||
echo " [--choose CHOICE] [--dry-run] [--symbols|--no-symbols]"
|
|
||||||
echo
|
|
||||||
echo "Use with Rofi in script mode. For instance, to ask for shutdown or reboot:"
|
|
||||||
echo
|
|
||||||
echo " rofi -show menu -modi \"menu:rofi-power-menu --choices=shutdown/reboot\""
|
|
||||||
echo
|
|
||||||
echo "Available options:"
|
|
||||||
echo " --dry-run Don't perform the selected action but print it to stderr."
|
|
||||||
echo " --choices CHOICES Show only the selected choices in the given order. Use / "
|
|
||||||
echo " as the separator. Available choices are lockscreen, logout,"
|
|
||||||
echo " suspend, hibernate, reboot and shutdown. By default, all"
|
|
||||||
echo " available choices are shown."
|
|
||||||
echo " --confirm CHOICES Require confirmation for the gives choices only. Use / as"
|
|
||||||
echo " the separator. Available choices are lockscreen, logout,"
|
|
||||||
echo " suspend, hibernate, reboot and shutdown. By default, only"
|
|
||||||
echo " irreversible actions logout, reboot and shutdown require"
|
|
||||||
echo " confirmation."
|
|
||||||
echo " --choose CHOICE Preselect the given choice and only ask for a confirmation"
|
|
||||||
echo " (if confirmation is set to be requested). It is strongly"
|
|
||||||
echo " recommended to combine this option with --confirm=CHOICE"
|
|
||||||
echo " if the choice wouldn't require confirmation by default."
|
|
||||||
echo " Available choices are lockscreen, logout, suspend,"
|
|
||||||
echo " hibernate, reboot and shutdown."
|
|
||||||
echo " --[no-]symbols Show Unicode symbols or not. Requires a font with support"
|
|
||||||
echo " for the symbols. Use, for instance, fonts from the"
|
|
||||||
echo " Nerdfonts collection. By default, they are shown"
|
|
||||||
echo " -h,--help Show this help text."
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
"--dry-run")
|
|
||||||
dryrun=true
|
|
||||||
shift 1
|
|
||||||
;;
|
|
||||||
"--confirm")
|
|
||||||
IFS='/' read -ra confirmations <<< "$2"
|
|
||||||
check_valid "$1" "${confirmations[@]}"
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
"--choices")
|
|
||||||
IFS='/' read -ra show <<< "$2"
|
|
||||||
check_valid "$1" "${show[@]}"
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
"--choose")
|
|
||||||
# Check that the choice is valid
|
|
||||||
check_valid "$1" "$2"
|
|
||||||
selectionID="$2"
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
"--symbols")
|
|
||||||
showsymbols=true
|
|
||||||
shift 1
|
|
||||||
;;
|
|
||||||
"--no-symbols")
|
|
||||||
showsymbols=false
|
|
||||||
shift 1
|
|
||||||
;;
|
|
||||||
"--")
|
|
||||||
shift
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "Internal error" >&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
# Define the messages after parsing the CLI options so that it is possible to
|
|
||||||
# configure them in the future.
|
|
||||||
|
|
||||||
function write_message {
|
|
||||||
icon="<span font_size=\"medium\">$1</span>"
|
|
||||||
text="<span font_size=\"medium\">$2</span>"
|
|
||||||
if [ "$showsymbols" = "true" ]
|
|
||||||
then
|
|
||||||
echo -n "\u200e$icon \u2068$text\u2069"
|
|
||||||
else
|
|
||||||
echo -n "$text"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function print_selection {
|
|
||||||
echo -e "$1" | $(read -r -d '' entry; echo "echo $entry")
|
|
||||||
}
|
|
||||||
|
|
||||||
declare -A messages
|
|
||||||
declare -A confirmationMessages
|
|
||||||
for entry in "${all[@]}"
|
|
||||||
do
|
|
||||||
messages[$entry]=$(write_message "${icons[$entry]}" "${texts[$entry]^}")
|
|
||||||
done
|
|
||||||
for entry in "${all[@]}"
|
|
||||||
do
|
|
||||||
confirmationMessages[$entry]=$(write_message "${icons[$entry]}" "Yes, ${texts[$entry]}")
|
|
||||||
done
|
|
||||||
confirmationMessages[cancel]=$(write_message "${icons[cancel]}" "No, cancel")
|
|
||||||
|
|
||||||
if [ $# -gt 0 ]
|
|
||||||
then
|
|
||||||
# If arguments given, use those as the selection
|
|
||||||
selection="${@}"
|
|
||||||
else
|
|
||||||
# Otherwise, use the CLI passed choice if given
|
|
||||||
if [ -n "${selectionID+x}" ]
|
|
||||||
then
|
|
||||||
selection="${messages[$selectionID]}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Don't allow custom entries
|
|
||||||
echo -e "\0no-custom\x1ftrue"
|
|
||||||
# Use markup
|
|
||||||
echo -e "\0markup-rows\x1ftrue"
|
|
||||||
|
|
||||||
if [ -z "${selection+x}" ]
|
|
||||||
then
|
|
||||||
echo -e "\0prompt\x1fPower menu"
|
|
||||||
for entry in "${show[@]}"
|
|
||||||
do
|
|
||||||
echo -e "${messages[$entry]}\0icon\x1f${icons[$entry]}"
|
|
||||||
done
|
|
||||||
else
|
|
||||||
for entry in "${show[@]}"
|
|
||||||
do
|
|
||||||
if [ "$selection" = "$(print_selection "${messages[$entry]}")" ]
|
|
||||||
then
|
|
||||||
# Check if the selected entry is listed in confirmation requirements
|
|
||||||
for confirmation in "${confirmations[@]}"
|
|
||||||
do
|
|
||||||
if [ "$entry" = "$confirmation" ]
|
|
||||||
then
|
|
||||||
# Ask for confirmation
|
|
||||||
echo -e "\0prompt\x1fAre you sure"
|
|
||||||
echo -e "${confirmationMessages[$entry]}\0icon\x1f${icons[$entry]}"
|
|
||||||
echo -e "${confirmationMessages[cancel]}\0icon\x1f${icons[cancel]}"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
# If not, then no confirmation is required, so mark confirmed
|
|
||||||
selection=$(print_selection "${confirmationMessages[$entry]}")
|
|
||||||
fi
|
|
||||||
if [ "$selection" = "$(print_selection "${confirmationMessages[$entry]}")" ]
|
|
||||||
then
|
|
||||||
if [ $dryrun = true ]
|
|
||||||
then
|
|
||||||
# Tell what would have been done
|
|
||||||
echo "Selected: $entry" >&2
|
|
||||||
else
|
|
||||||
# Perform the action
|
|
||||||
${actions[$entry]}
|
|
||||||
fi
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
if [ "$selection" = "$(print_selection "${confirmationMessages[cancel]}")" ]
|
|
||||||
then
|
|
||||||
# Do nothing
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
# The selection didn't match anything, so raise an error
|
|
||||||
echo "Invalid selection: $selection" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
@ -20,12 +20,11 @@ set $up k
|
|||||||
set $right l
|
set $right l
|
||||||
|
|
||||||
# Some menus
|
# Some menus
|
||||||
set $wofi_scripts ~/.config/wofi
|
|
||||||
set $quickmenu wofi --show drun
|
set $quickmenu wofi --show drun
|
||||||
|
|
||||||
# Screenshot section
|
# Screenshot section
|
||||||
set $screenshot_dir ~/Pictures/Screenshots/
|
set $screenshot_dir ~/Pictures/Screenshots/
|
||||||
set $grimshot ~/.config/sway/grimshot.sh
|
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 $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 $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 $windowshot wl-copy < "$($grimshot --notify save window $screenshot_dir/scrn-$(date +"%Y-%m-%d-%H-%M-%S").png)"
|
||||||
@ -41,20 +40,23 @@ set $bluetooth_mngr blueman-manager
|
|||||||
set $calculator flatpak run io.github.Qalculate
|
set $calculator flatpak run io.github.Qalculate
|
||||||
set $photo_editor gtk-launch ~/.local/share/applications/photopea.desktop
|
set $photo_editor gtk-launch ~/.local/share/applications/photopea.desktop
|
||||||
set $translator com.github.gi_lom.dialect
|
set $translator com.github.gi_lom.dialect
|
||||||
|
set $settings gnome-control-center
|
||||||
|
|
||||||
# Scripts
|
# Scripts
|
||||||
set $config_editor ~/.config/sway/config_editor.sh
|
|
||||||
set $debug_window ~/.config/sway/debug_window.sh
|
set $wofi_scripts ~/.config/wofi/scripts/
|
||||||
set $settings gnome-control-center
|
set $sway_scripts ~/.config/sway/scripts/
|
||||||
set $toggle_layout ~/.config/sway/toggle_layout.sh
|
|
||||||
set $create_floating ~/.config/sway/create_floating.sh
|
set $debug_window $sway_scripts/debug-window
|
||||||
set $toggle_gaps ~/.config/sway/toggle_gaps.sh
|
set $toggle_layout $sway_scripts/toggle-layout
|
||||||
set $toggle_bar ~/.config/sway/toggle_bar.sh
|
set $create_floating $sway_scripts/create-floating
|
||||||
set $web_search $wofi_scripts/web-search.sh
|
set $toggle_gaps $sway_scripts/toggle-gaps
|
||||||
set $select_window ~/.config/sway/select_window.sh
|
set $toggle_bar $sway_scripts/toggle-bar
|
||||||
set $lock_screen ~/.config/sway/lock_screen.sh
|
set $select_window $sway_scripts/select-window
|
||||||
set $select_emoji $wofi_scripts/wofi-emoji
|
set $lock_screen $sway_scripts/lock-screen
|
||||||
|
set $select_emoji $wofi_scripts/select-emoji
|
||||||
set $open_localhost $wofi_scripts/open-localhost
|
set $open_localhost $wofi_scripts/open-localhost
|
||||||
|
set $select_wifi $wofi_scripts/select-wifi
|
||||||
|
|
||||||
# Input configuration
|
# Input configuration
|
||||||
input * {
|
input * {
|
||||||
@ -76,7 +78,7 @@ output * bg `find $wallpapers_path -type f | shuf -n 1` fill
|
|||||||
#
|
#
|
||||||
# Example configuration:
|
# Example configuration:
|
||||||
#
|
#
|
||||||
# output HDMI-A-1 resolution 1920x1080 position 1920,0
|
# output eDP-1 resolution 1920x1080
|
||||||
#
|
#
|
||||||
# You can get the names of your outputs by running: swaymsg -t get_outputs
|
# You can get the names of your outputs by running: swaymsg -t get_outputs
|
||||||
|
|
||||||
@ -89,8 +91,7 @@ exec swayidle -w \
|
|||||||
timeout 600 'swaymsg "output * dpms off"' \
|
timeout 600 'swaymsg "output * dpms off"' \
|
||||||
timeout 660 'systemctl suspend' \
|
timeout 660 'systemctl suspend' \
|
||||||
resume 'swaymsg "output * dpms on"' \
|
resume 'swaymsg "output * dpms on"' \
|
||||||
before-sleep '~/.config/sway/lock_screen.sh'
|
before-sleep $lock_screen
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# This will lock your screen after 300 seconds of inactivity, then turn off
|
# This will lock your screen after 300 seconds of inactivity, then turn off
|
||||||
@ -118,12 +119,13 @@ input "1739:24385:Synaptics_TM2438-005" {
|
|||||||
bindsym $mod+d exec $quickmenu
|
bindsym $mod+d exec $quickmenu
|
||||||
bindsym $mod+t exec $translator
|
bindsym $mod+t exec $translator
|
||||||
bindsym $mod+q kill
|
bindsym $mod+q kill
|
||||||
bindsym $mod+Shift+q exec $wofi_scripts/wofi-power-menu.sh
|
bindsym $mod+Shift+q exec $wofi_scripts/power-menu
|
||||||
bindsym $mod+Return exec $term
|
bindsym $mod+Return exec $term
|
||||||
bindsym $mod+Shift+Return exec $create_floating $term
|
bindsym $mod+Shift+Return exec $create_floating $term
|
||||||
bindsym $mod+e exec $explorer
|
bindsym $mod+e exec $explorer
|
||||||
bindsym $mod+Comma exec $settings
|
bindsym $mod+Comma exec $settings
|
||||||
bindsym $mod+b exec $browser
|
bindsym $mod+b exec $browser
|
||||||
|
bindsym $mod+Shift+w exec $select_wifi
|
||||||
bindsym $mod+Shift+b exec $bluetooth_mngr
|
bindsym $mod+Shift+b exec $bluetooth_mngr
|
||||||
bindsym $mod+Shift+Comma exec $config_editor
|
bindsym $mod+Shift+Comma exec $config_editor
|
||||||
bindsym $mod+a exec $web_search
|
bindsym $mod+a exec $web_search
|
||||||
@ -187,7 +189,6 @@ input "1739:24385:Synaptics_TM2438-005" {
|
|||||||
for_window [title="Zoom Meeting.*"] inhibit_idle visible
|
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
|
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"
|
set $ws1 "1: Code"
|
||||||
assign [app_id="Alacritty"] $ws1
|
assign [app_id="Alacritty"] $ws1
|
||||||
assign [app_id="Kitty"] $ws1
|
assign [app_id="Kitty"] $ws1
|
||||||
@ -270,7 +271,7 @@ input "1739:24385:Synaptics_TM2438-005" {
|
|||||||
bindsym $mod+o exec $open_localhost
|
bindsym $mod+o exec $open_localhost
|
||||||
bindsym $mod+Control+l exec $lock_screen
|
bindsym $mod+Control+l exec $lock_screen
|
||||||
bindsym $mod+c exec $calculator
|
bindsym $mod+c exec $calculator
|
||||||
bindsym Alt+Tab exec $select_window
|
bindsym $mod+Tab exec $select_window
|
||||||
bindsym $mod+m exec $mail
|
bindsym $mod+m exec $mail
|
||||||
#
|
#
|
||||||
# Scratchpad:
|
# Scratchpad:
|
||||||
@ -315,8 +316,6 @@ mode "resize" {
|
|||||||
}
|
}
|
||||||
bindsym $mod+r mode "resize"
|
bindsym $mod+r mode "resize"
|
||||||
|
|
||||||
# Do we need that?
|
|
||||||
|
|
||||||
# Handles notifications
|
# Handles notifications
|
||||||
exec_always mako
|
exec_always mako
|
||||||
# Start Audio
|
# Start Audio
|
||||||
@ -331,7 +330,6 @@ exec wl-paste -t text --watch clipman store --no-persist
|
|||||||
#
|
#
|
||||||
# Status Bar:
|
# Status Bar:
|
||||||
#
|
#
|
||||||
# Read `man 5 sway-bar` for more information about this section.
|
|
||||||
bar {
|
bar {
|
||||||
swaybar_command waybar
|
swaybar_command waybar
|
||||||
mode dock
|
mode dock
|
||||||
@ -339,5 +337,4 @@ bar {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
include @sysconfdir@/sway/config.d/*
|
|
||||||
exec "systemctl --user import-environment SWAYSOCK XDG_CURRENT_DESKTOP WAYLAND_DISPLAY";
|
exec "systemctl --user import-environment SWAYSOCK XDG_CURRENT_DESKTOP WAYLAND_DISPLAY";
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
#!/bin/zsh
|
|
||||||
alacritty -e zsh -c "/home/jim/.asdf/shims/nvim ~/.dotfiles"
|
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
# ------Get available windows:
|
# ------Get available windows:
|
@ -1,20 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
cd "$(dirname "$0")"
|
|
||||||
|
|
||||||
arecord -f cd -t raw -d 4 -q | lame -r -q - output.mp3 2>/dev/null
|
|
||||||
|
|
||||||
if [ ! -f "./output.mp3" ]; then
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
JSON=$(songrec audio-file-to-recognized-song output.mp3)
|
|
||||||
|
|
||||||
RETRYMS=$(echo $JSON | jq '.retryms')
|
|
||||||
|
|
||||||
if [ $RETRYMS != null ]; then
|
|
||||||
echo $(expr $RETRYMS / 1000)
|
|
||||||
else
|
|
||||||
SONG=$(echo $JSON | tr '\r\n' ' ' | jq '.track.share.subject')
|
|
||||||
echo $SONG
|
|
||||||
rm -rf output.mp3
|
|
||||||
fi
|
|
@ -5,110 +5,44 @@
|
|||||||
"ipc": true,
|
"ipc": true,
|
||||||
"mode": "hide",
|
"mode": "hide",
|
||||||
"hidden_state": "show",
|
"hidden_state": "show",
|
||||||
"modules-left": ["custom/clock", "custom/waybar-mpris"],
|
"modules-left": [
|
||||||
"modules-center": ["sway/workspaces", "sway/mode"],
|
"clock",
|
||||||
"modules-right": ["custom/theme","pulseaudio", "network", "battery"],
|
"custom/waybar-mpris"
|
||||||
|
],
|
||||||
|
"modules-center": [
|
||||||
|
"sway/workspaces",
|
||||||
|
"sway/mode"
|
||||||
|
],
|
||||||
|
"modules-right": [
|
||||||
|
"custom/dpi",
|
||||||
|
"custom/theme",
|
||||||
|
"pulseaudio",
|
||||||
|
"network",
|
||||||
|
"battery"
|
||||||
|
],
|
||||||
"sway/workspaces": {
|
"sway/workspaces": {
|
||||||
"disable-scroll": true,
|
"disable-scroll": true,
|
||||||
"all-outputs": false,
|
"all-outputs": false,
|
||||||
"format": "{name}",
|
"format": "{name}"
|
||||||
"format-icons": {
|
|
||||||
"urgent": "",
|
|
||||||
"focused": "",
|
|
||||||
"default": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"keyboard-state": {
|
|
||||||
"numlock": true,
|
|
||||||
"capslock": true,
|
|
||||||
"format": "{name} {icon}",
|
|
||||||
"format-icons": {
|
|
||||||
"locked": "",
|
|
||||||
"unlocked": ""
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"custom/theme": {
|
"custom/theme": {
|
||||||
"exec": "~/.config/waybar/theme.sh",
|
"exec": "~/.config/waybar/scripts/toggle-theme",
|
||||||
"on-click": "~/.config/waybar/theme.sh --toggle",
|
"on-click": "~/.config/waybar/scripts/toggle-theme --toggle",
|
||||||
"restart-interval": 1,
|
"restart-interval": 1
|
||||||
},
|
},
|
||||||
"custom/spotify": {
|
"custom/dpi": {
|
||||||
"exec": "/usr/bin/python3 /home/jim/.config/waybar/mediaplayer.py --player spotify",
|
"exec": "~/.config/waybar/scripts/toggle-hdpi",
|
||||||
"format": "{} ",
|
"on-click": "~/.config/waybar/scripts/toggle-hdpi --toggle",
|
||||||
"return-type": "json",
|
"restart-interval": 1
|
||||||
"on-click": "playerctl play-pause",
|
|
||||||
"on-scroll-up": "playerctl next",
|
|
||||||
"on-scroll-down": "playerctl previous"
|
|
||||||
},
|
},
|
||||||
"sway/mode": {
|
"sway/mode": {
|
||||||
"format": "<span style=\"italic\">{}</span>"
|
"format": "<span style=\"italic\">{}</span>"
|
||||||
},
|
},
|
||||||
"mpd": {
|
|
||||||
"format": "{stateIcon} {consumeIcon}{randomIcon}{repeatIcon}{singleIcon}{artist} - {album} - {title} ({elapsedTime:%M:%S}/{totalTime:%M:%S}) ⸨{songPosition}|{queueLength}⸩ {volume}% ",
|
|
||||||
"format-disconnected": "",
|
|
||||||
"format-stopped": "{consumeIcon}{randomIcon}{repeatIcon}{singleIcon}Stopped ",
|
|
||||||
"unknown-tag": "N/A",
|
|
||||||
"interval": 2,
|
|
||||||
"consume-icons": {
|
|
||||||
"on": " "
|
|
||||||
},
|
|
||||||
"random-icons": {
|
|
||||||
"off": "<span color=\"#f53c3c\"></span> ",
|
|
||||||
"on": " "
|
|
||||||
},
|
|
||||||
"repeat-icons": {
|
|
||||||
"on": " "
|
|
||||||
},
|
|
||||||
"single-icons": {
|
|
||||||
"on": "1 "
|
|
||||||
},
|
|
||||||
"state-icons": {
|
|
||||||
"paused": "",
|
|
||||||
"playing": ""
|
|
||||||
},
|
|
||||||
"tooltip-format": "MPD (connected)",
|
|
||||||
"tooltip-format-disconnected": "MPD (disconnected)"
|
|
||||||
},
|
|
||||||
"idle_inhibitor": {
|
|
||||||
"format": "{icon}",
|
|
||||||
"format-icons": {
|
|
||||||
"activated": "",
|
|
||||||
"deactivated": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"tray": {
|
|
||||||
"spacing": 10
|
|
||||||
},
|
|
||||||
"clock": {
|
"clock": {
|
||||||
"interval": 60,
|
"interval": 60,
|
||||||
"format": "{:%H:%M}",
|
"format": "{:%H:%M}",
|
||||||
"max-length": 25
|
"max-length": 25
|
||||||
},
|
},
|
||||||
"custom/clock": {
|
|
||||||
"exec": "date +'%H:%M'",
|
|
||||||
"interval": 10,
|
|
||||||
"on-click": "nm-applet"
|
|
||||||
},
|
|
||||||
"cpu": {
|
|
||||||
"format": "{usage}% ",
|
|
||||||
"tooltip": false
|
|
||||||
},
|
|
||||||
"memory": {
|
|
||||||
"format": "{}% "
|
|
||||||
},
|
|
||||||
"temperature": {
|
|
||||||
// "thermal-zone": 2,media
|
|
||||||
// "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input",
|
|
||||||
"critical-threshold": 80,
|
|
||||||
// "format-critical": "{temperatureC}°C {icon}",
|
|
||||||
"format": "{temperatureC}°C {icon}",
|
|
||||||
"format-icons": ["", "", ""]
|
|
||||||
},
|
|
||||||
"backlight": {
|
|
||||||
// "device": "acpi_video1",
|
|
||||||
"format": "{percent}% {icon}",
|
|
||||||
"format-icons": ["", ""]
|
|
||||||
},
|
|
||||||
"battery": {
|
"battery": {
|
||||||
"states": {
|
"states": {
|
||||||
"warning": 30,
|
"warning": 30,
|
||||||
@ -118,12 +52,13 @@
|
|||||||
"format-charging": "{capacity}% ",
|
"format-charging": "{capacity}% ",
|
||||||
"format-plugged": "{capacity}% ",
|
"format-plugged": "{capacity}% ",
|
||||||
"format-alt": "{time} {icon}",
|
"format-alt": "{time} {icon}",
|
||||||
// "format-good": "", // An empty format will hide the module
|
"format-icons": [
|
||||||
// "format-full": "",
|
"",
|
||||||
"format-icons": ["", "", "", "", ""]
|
"",
|
||||||
},
|
"",
|
||||||
"battery#bat2": {
|
"",
|
||||||
"bat": "BAT2"
|
""
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"network": {
|
"network": {
|
||||||
// "interface": "wlp2*", // (Optional) To force the use of this interface
|
// "interface": "wlp2*", // (Optional) To force the use of this interface
|
||||||
@ -135,7 +70,6 @@
|
|||||||
"format-alt": "{ifname}: {ipaddr}/{cidr}"
|
"format-alt": "{ifname}: {ipaddr}/{cidr}"
|
||||||
},
|
},
|
||||||
"pulseaudio": {
|
"pulseaudio": {
|
||||||
// "scroll-step": 1, // %, can be a float
|
|
||||||
"format": "{volume}% {icon} {format_source}",
|
"format": "{volume}% {icon} {format_source}",
|
||||||
"format-bluetooth": "{volume}% {icon} {format_source}",
|
"format-bluetooth": "{volume}% {icon} {format_source}",
|
||||||
"format-bluetooth-muted": " {icon} {format_source}",
|
"format-bluetooth-muted": " {icon} {format_source}",
|
||||||
@ -149,19 +83,14 @@
|
|||||||
"phone": "",
|
"phone": "",
|
||||||
"portable": "",
|
"portable": "",
|
||||||
"car": "",
|
"car": "",
|
||||||
"default": ["", "", ""]
|
"default": [
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
""
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"on-click": "pavucontrol"
|
"on-click": "pavucontrol"
|
||||||
},
|
},
|
||||||
"custom/cpu_speed": {
|
|
||||||
"interval": 10,
|
|
||||||
"return-type": "json",
|
|
||||||
"exec": "~/.config/waybar/cpu_speed.sh",
|
|
||||||
"format": "<span font='Font Awesome 5 Free 11'>{icon}</span> {}",
|
|
||||||
"format-icons": [""],
|
|
||||||
"escape": true,
|
|
||||||
"on-click": "kitty -e htop"
|
|
||||||
},
|
|
||||||
"custom/waybar-mpris": {
|
"custom/waybar-mpris": {
|
||||||
"max-length": 30,
|
"max-length": 30,
|
||||||
"return-type": "json",
|
"return-type": "json",
|
||||||
@ -176,17 +105,5 @@
|
|||||||
// "on-scroll-up": "waybar-mpris --send next",
|
// "on-scroll-up": "waybar-mpris --send next",
|
||||||
// "on-scroll-down": "waybar-mpris --send prev",
|
// "on-scroll-down": "waybar-mpris --send prev",
|
||||||
"escape": true
|
"escape": true
|
||||||
},
|
|
||||||
"custom/media": {
|
|
||||||
"format": "{icon} {}",
|
|
||||||
"return-type": "json",
|
|
||||||
"max-length": 40,
|
|
||||||
"format-icons": {
|
|
||||||
"spotify": "",
|
|
||||||
"default": "🎜"
|
|
||||||
},
|
|
||||||
"escape": true,
|
|
||||||
"exec": "$HOME/.config/waybar/mediaplayer.py 2> /dev/null" // Script in resources folder
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
class=cpu_speed
|
|
||||||
speed_mhz=$(lscpu | grep "CPU MHz" | sed --expression "s/CPU MHz:[[:space:]]*//g" | xargs printf "%.*f\n" 0)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# speed_ghz=`echo $(($speed_mhz / 1000))`
|
|
||||||
|
|
||||||
speed_ghz=`bc -l <<< "$speed_mhz / 1000"`
|
|
||||||
|
|
||||||
info=$(echo $speed_ghz | xargs printf "%.*f\n" 2)
|
|
||||||
|
|
||||||
echo -e "{\"text\":\""$info GHz"\", \"class\":\""$class"\"}"
|
|
@ -1,13 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
CONFIG_FILES="$HOME/.config/waybar/config $HOME/.config/waybar/*.css $HOME/.config/waybar/*.sh"
|
|
||||||
|
|
||||||
killall waybar;
|
|
||||||
|
|
||||||
trap "killall waybar" EXIT
|
|
||||||
|
|
||||||
while true; do
|
|
||||||
waybar &
|
|
||||||
inotifywait -e create,modify $CONFIG_FILES
|
|
||||||
killall waybar
|
|
||||||
done
|
|
@ -1,130 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
import argparse
|
|
||||||
import logging
|
|
||||||
import sys
|
|
||||||
import signal
|
|
||||||
import gi
|
|
||||||
import json
|
|
||||||
from os.path import expanduser
|
|
||||||
gi.require_version('Playerctl', '2.0')
|
|
||||||
from gi.repository import Playerctl, GLib
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
|
|
||||||
def write_output(text, player):
|
|
||||||
logger.info('Writing output')
|
|
||||||
|
|
||||||
output = {'text': text.replace("\n", " ").strip(),
|
|
||||||
'class': 'custom-' + player.props.player_name,
|
|
||||||
'alt': player.props.player_name}
|
|
||||||
|
|
||||||
sys.stdout.write(json.dumps(output) + '\n')
|
|
||||||
sys.stdout.flush()
|
|
||||||
|
|
||||||
|
|
||||||
def on_play(player, _, manager):
|
|
||||||
logger.info('Received new playback status')
|
|
||||||
on_metadata(player, player.props.metadata, manager)
|
|
||||||
|
|
||||||
|
|
||||||
def on_metadata(player, metadata, _):
|
|
||||||
logger.info('Received new metadata')
|
|
||||||
track_info = ''
|
|
||||||
|
|
||||||
if player.props.player_name == 'spotify' and \
|
|
||||||
'mpris:trackid' in metadata.keys() and \
|
|
||||||
':ad:' in player.props.metadata['mpris:trackid']:
|
|
||||||
track_info = 'AD PLAYING'
|
|
||||||
elif player.get_artist() != '' and player.get_title() != '':
|
|
||||||
track_info = '{artist} - {title}'.format(artist=player.get_artist(),
|
|
||||||
title=player.get_title())
|
|
||||||
else:
|
|
||||||
track_info = player.get_title()
|
|
||||||
|
|
||||||
if player.props.status != 'Playing' and track_info:
|
|
||||||
track_info = ' ' + track_info
|
|
||||||
write_output(track_info, player)
|
|
||||||
|
|
||||||
|
|
||||||
def on_player_appeared(manager, player, selected_player=None):
|
|
||||||
if player is not None and (selected_player is None or player.name == selected_player):
|
|
||||||
init_player(manager, player)
|
|
||||||
else:
|
|
||||||
logger.debug("New player appeared, but it's not the selected player, skipping")
|
|
||||||
|
|
||||||
|
|
||||||
def on_player_vanished(manager, player):
|
|
||||||
logger.info('Player has vanished')
|
|
||||||
sys.stdout.write('\n')
|
|
||||||
sys.stdout.flush()
|
|
||||||
|
|
||||||
|
|
||||||
def init_player(manager, name):
|
|
||||||
logger.debug('Initialize player: {player}'.format(player=name.name))
|
|
||||||
player = Playerctl.Player.new_from_name(name)
|
|
||||||
player.connect('playback-status', on_play, manager)
|
|
||||||
player.connect('metadata', on_metadata, manager)
|
|
||||||
manager.manage_player(player)
|
|
||||||
on_metadata(player, player.props.metadata, manager)
|
|
||||||
|
|
||||||
|
|
||||||
def signal_handler(sig, frame):
|
|
||||||
logger.debug('Received signal to stop, exiting')
|
|
||||||
sys.stdout.write('\n')
|
|
||||||
sys.stdout.flush()
|
|
||||||
# loop.quit()
|
|
||||||
sys.exit(0)
|
|
||||||
|
|
||||||
|
|
||||||
def parse_arguments():
|
|
||||||
parser = argparse.ArgumentParser()
|
|
||||||
|
|
||||||
# Increase verbosity with every occurrence of -v
|
|
||||||
parser.add_argument('-v', '--verbose', action='count', default=0)
|
|
||||||
|
|
||||||
# Define for which player we're listening
|
|
||||||
parser.add_argument('--player')
|
|
||||||
|
|
||||||
return parser.parse_args()
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
arguments = parse_arguments()
|
|
||||||
|
|
||||||
# Initialize logging
|
|
||||||
# LOG=expanduser("~")+"/.dotfiles/configs/waybar/media.log"
|
|
||||||
# logging.basicConfig(level=logging.DEBUG, filename=LOG,
|
|
||||||
# format='%(name)s %(levelname)s %(message)s')
|
|
||||||
|
|
||||||
# Logging is set by default to WARN and higher.
|
|
||||||
# With every occurrence of -v it's lowered by one
|
|
||||||
logger.setLevel(max((3 - arguments.verbose) * 10, 0))
|
|
||||||
logger.setLevel(0)
|
|
||||||
|
|
||||||
# Log the sent command line arguments
|
|
||||||
logger.debug('Arguments received {}'.format(vars(arguments)))
|
|
||||||
|
|
||||||
manager = Playerctl.PlayerManager()
|
|
||||||
loop = GLib.MainLoop()
|
|
||||||
|
|
||||||
manager.connect('name-appeared', lambda *args: on_player_appeared(*args, arguments.player))
|
|
||||||
manager.connect('player-vanished', on_player_vanished)
|
|
||||||
|
|
||||||
signal.signal(signal.SIGINT, signal_handler)
|
|
||||||
signal.signal(signal.SIGTERM, signal_handler)
|
|
||||||
|
|
||||||
for player in manager.props.player_names:
|
|
||||||
if arguments.player is not None and arguments.player != player.name:
|
|
||||||
logger.debug('{player} is not the filtered player, skipping it'
|
|
||||||
.format(player=player.name)
|
|
||||||
)
|
|
||||||
continue
|
|
||||||
|
|
||||||
init_player(manager, player)
|
|
||||||
|
|
||||||
loop.run()
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
@ -1,146 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
import argparse
|
|
||||||
import logging
|
|
||||||
import sys
|
|
||||||
import signal
|
|
||||||
import time
|
|
||||||
import gi
|
|
||||||
import json
|
|
||||||
gi.require_version('Playerctl', '2.0')
|
|
||||||
from gi.repository import Playerctl, GLib
|
|
||||||
import subprocess
|
|
||||||
from os.path import expanduser
|
|
||||||
home = expanduser("~")
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
playerVisible = False
|
|
||||||
|
|
||||||
def write_output(text, player_name):
|
|
||||||
logger.info('Writing output')
|
|
||||||
|
|
||||||
output = {'text': text.replace("&", "&"),
|
|
||||||
'class': 'custom-' + player_name,
|
|
||||||
'alt': player_name}
|
|
||||||
|
|
||||||
sys.stdout.write(json.dumps(output) + '\n')
|
|
||||||
sys.stdout.flush()
|
|
||||||
|
|
||||||
|
|
||||||
def on_play(player, status, manager):
|
|
||||||
logger.info('Received new playback status')
|
|
||||||
on_metadata(player, player.props.metadata, manager)
|
|
||||||
|
|
||||||
def on_metadata(player, metadata, manager):
|
|
||||||
logger.info('Received new metadata')
|
|
||||||
track_info = ''
|
|
||||||
|
|
||||||
if player.props.player_name == 'spotify' and \
|
|
||||||
'mpris:trackid' in metadata.keys() and \
|
|
||||||
':ad:' in player.props.metadata['mpris:trackid']:
|
|
||||||
track_info = 'AD PLAYING'
|
|
||||||
elif player.get_artist() != '' and player.get_title() != '':
|
|
||||||
track_info = '{artist} - {title}'.format(artist=player.get_artist(),
|
|
||||||
title=player.get_title())
|
|
||||||
else:
|
|
||||||
track_info = player.get_title()
|
|
||||||
|
|
||||||
if player.props.status != 'Playing' and track_info:
|
|
||||||
track_info = ' ' + track_info
|
|
||||||
write_output(track_info, player.props.player_name)
|
|
||||||
|
|
||||||
|
|
||||||
def update_song():
|
|
||||||
global playerVisible
|
|
||||||
while not playerVisible:
|
|
||||||
result = subprocess.run("./capture_mp3.sh",stdout=subprocess.PIPE)
|
|
||||||
resultString = result.stdout.decode("utf-8")
|
|
||||||
logger.debug(resultString);
|
|
||||||
write_output(resultString, "Spotify")
|
|
||||||
time.sleep(6)
|
|
||||||
|
|
||||||
def on_player_appeared(manager, player, selected_player=None):
|
|
||||||
global playerVisible
|
|
||||||
if player is not None and (selected_player is None or player.name == selected_player):
|
|
||||||
playerVisible = True
|
|
||||||
init_player(manager, player)
|
|
||||||
else:
|
|
||||||
logger.debug("New player appeared, but it's not the selected player, skipping")
|
|
||||||
|
|
||||||
|
|
||||||
def on_player_vanished(manager, player):
|
|
||||||
global playerVisible
|
|
||||||
logger.info('Player has vanished')
|
|
||||||
playerVisible = False
|
|
||||||
update_song()
|
|
||||||
sys.stdout.write('\n')
|
|
||||||
sys.stdout.flush()
|
|
||||||
|
|
||||||
|
|
||||||
def init_player(manager, name):
|
|
||||||
logger.debug('Initialize player: {player}'.format(player=name.name))
|
|
||||||
player = Playerctl.Player.new_from_name(name)
|
|
||||||
player.connect('playback-status', on_play, manager)
|
|
||||||
player.connect('metadata', on_metadata, manager)
|
|
||||||
update_song()
|
|
||||||
manager.manage_player(player)
|
|
||||||
on_metadata(player, player.props.metadata, manager)
|
|
||||||
|
|
||||||
|
|
||||||
def signal_handler(sig, frame):
|
|
||||||
logger.debug('Received signal to stop, exiting')
|
|
||||||
sys.stdout.write('\n')
|
|
||||||
sys.stdout.flush()
|
|
||||||
loop.quit()
|
|
||||||
sys.exit(0)
|
|
||||||
|
|
||||||
|
|
||||||
def parse_arguments():
|
|
||||||
parser = argparse.ArgumentParser()
|
|
||||||
|
|
||||||
# Increase verbosity with every occurrence of -v
|
|
||||||
parser.add_argument('-v', '--verbose', action='count', default=0)
|
|
||||||
|
|
||||||
# Define for which player we're listening
|
|
||||||
parser.add_argument('--player')
|
|
||||||
|
|
||||||
return parser.parse_args()
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
|
|
||||||
arguments = parse_arguments()
|
|
||||||
|
|
||||||
# Initialize logging
|
|
||||||
LOG = home+"/.dotfiles/configs/waybar/media.log" logger.setLevel(max((3 - arguments.verbose) * 10, 0))
|
|
||||||
logging.basicConfig(stream=sys.stderr, filename=LOG, level=logging.DEBUG,
|
|
||||||
format='%(name)s %(levelname)s %(message)s')
|
|
||||||
|
|
||||||
logger.setLevel(0)
|
|
||||||
|
|
||||||
# Log the sent command line arguments
|
|
||||||
logger.debug('Arguments received {}'.format(vars(arguments)))
|
|
||||||
|
|
||||||
manager = Playerctl.PlayerManager()
|
|
||||||
loop = GLib.MainLoop()
|
|
||||||
|
|
||||||
manager.connect('name-appeared', lambda *args: on_player_appeared(*args, arguments.player))
|
|
||||||
manager.connect('player-vanished', on_player_vanished)
|
|
||||||
|
|
||||||
signal.signal(signal.SIGINT, signal_handler)
|
|
||||||
signal.signal(signal.SIGTERM, signal_handler)
|
|
||||||
|
|
||||||
for player in manager.props.player_names:
|
|
||||||
if arguments.player is not None and arguments.player != player.name:
|
|
||||||
logger.debug('{player} is not the filtered player, skipping it'
|
|
||||||
.format(player=player.name)
|
|
||||||
)
|
|
||||||
continue
|
|
||||||
|
|
||||||
init_player(manager, player)
|
|
||||||
|
|
||||||
update_song()
|
|
||||||
loop.run()
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
Binary file not shown.
@ -1,3 +0,0 @@
|
|||||||
MAX_FREQ=$(lscpu | grep "CPU max MHz" | sed --expression "s/CPU max MHz:[[:space:]]*//g" | xargs printf "%.*f\n" 0)
|
|
||||||
CURRENT_MAX_FREG=$(cpufreq-info | grep "c")
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
22
configs/waybar/scripts/toggle-hdpi
Executable file
22
configs/waybar/scripts/toggle-hdpi
Executable file
@ -0,0 +1,22 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
CURRENT=$(swaymsg -t get_outputs --raw | jq '.[] | [.current_mode.width, .current_mode.height] | join("x")')
|
||||||
|
|
||||||
|
HIGH="ﳍ"
|
||||||
|
STANDARD="ﳭ"
|
||||||
|
|
||||||
|
if [ "$CURRENT" = '"3840x2160"' ]; then
|
||||||
|
if [ "$1" = "--toggle" ]; then
|
||||||
|
swaymsg "output eDP-1 mode --custom 1920x1080@60Hz"
|
||||||
|
killall waybar
|
||||||
|
nohup waybar
|
||||||
|
fi
|
||||||
|
echo $HIGH
|
||||||
|
elif [ "$CURRENT" = '"1920x1080"' ]; then
|
||||||
|
if [ "$1" = "--toggle" ]; then
|
||||||
|
swaymsg "output eDP-1 mode --custom 3840x2160@60Hz"
|
||||||
|
killall waybar
|
||||||
|
nohup waybar
|
||||||
|
fi
|
||||||
|
echo $STANDARD
|
||||||
|
fi
|
||||||
|
|
@ -3,17 +3,14 @@
|
|||||||
DARK_MODE_STATUS_FILE=~/.cache/dark-mode
|
DARK_MODE_STATUS_FILE=~/.cache/dark-mode
|
||||||
CURRENT_DARK_MODE=$( cat $DARK_MODE_STATUS_FILE )
|
CURRENT_DARK_MODE=$( cat $DARK_MODE_STATUS_FILE )
|
||||||
|
|
||||||
LIGHT="☀️"
|
LIGHT="盛"
|
||||||
DARK="🌙"
|
DARK=""
|
||||||
|
|
||||||
echo "\$1 $1"
|
|
||||||
echo "MODE: $CURRENT_DARK_MODE"
|
|
||||||
|
|
||||||
if [ "$1" == "--toggle" ]; then
|
if [ "$1" == "--toggle" ]; then
|
||||||
if [ $CURRENT_DARK_MODE == "light" ]; then
|
if [ $CURRENT_DARK_MODE == "light" ]; then
|
||||||
~/.config/waybar/dark-mode.sh dark
|
~/.config/waybar/scripts/set-theme dark
|
||||||
else
|
else
|
||||||
~/.config/waybar/dark-mode.sh light
|
~/.config/waybar/scripts/set-theme light
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
@ -4,3 +4,4 @@ width=500
|
|||||||
dynamic_lines=true
|
dynamic_lines=true
|
||||||
term=kitty
|
term=kitty
|
||||||
insensitive=true
|
insensitive=true
|
||||||
|
layer=overlay
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
entries="⏻ Shutdown\n⭮ Reboot\n⇠ Logout\n⏾ Suspend"
|
entries="⏻ Shutdown\n↺ Reboot\n⇠ Logout\n⏾ Suspend"
|
||||||
|
|
||||||
selected=$(echo -e $entries|wofi --width 250 --height 210 --dmenu --cache-file /dev/null | awk '{print tolower($2)}')
|
selected=$(echo -e $entries|wofi --width 250 --height 150 --dmenu --cache-file /dev/null | awk '{print tolower($2)}')
|
||||||
|
|
||||||
case $selected in
|
case $selected in
|
||||||
logout)
|
logout)
|
@ -1,25 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
swaymsg -t get_tree | jq -r '
|
|
||||||
# descend to workspace or scratchpad
|
|
||||||
.nodes[].nodes[].nodes[]
|
|
||||||
# save workspace name as .w
|
|
||||||
| {"w": .name} + (
|
|
||||||
if .nodes then # workspace
|
|
||||||
[recurse(.nodes[])]
|
|
||||||
else # scratchpad
|
|
||||||
[]
|
|
||||||
end
|
|
||||||
+ .floating_nodes
|
|
||||||
| .[]
|
|
||||||
# select nodes with no children (windows)
|
|
||||||
| select(.nodes==[])
|
|
||||||
)
|
|
||||||
| ((.id | tostring) + "\t "
|
|
||||||
# remove markup and index from workspace name, replace scratch with "[S]"
|
|
||||||
+ (.w | gsub("^[^:]*:|<[^>]*>"; "") | sub("__i3_scratch"; "[S]"))
|
|
||||||
+ "\t " + .name)
|
|
||||||
' | wofi --show dmenu| {
|
|
||||||
read -r id name
|
|
||||||
swaymsg "[con_id=$id]" focus
|
|
||||||
}
|
|
@ -1,122 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Swytch is a script providing a window switcher for sway using rofi, awk and jq.
|
|
||||||
# The script is based on:
|
|
||||||
# https://www.reddit.com/r/swaywm/comments/aolf3u/quick_script_for_rofi_alttabbing_window_switcher/
|
|
||||||
# Copyright (C) 2019 Björn Sonnenschein
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
|
|
||||||
# todo: first, query all existing workspaces from sway and build color dict, so that
|
|
||||||
# all workspaces always get the same color, even if no windows at some workspace in between exists.
|
|
||||||
|
|
||||||
# obtain command to execute with swaymsg for selected window
|
|
||||||
if [ -z "$1" ]
|
|
||||||
then
|
|
||||||
command_=focus
|
|
||||||
else
|
|
||||||
command_=$1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Obtain the avaliable windows' workspaces, names and IDs as strings
|
|
||||||
mapfile -t windows < <(
|
|
||||||
swaymsg -t get_tree | jq -r '[
|
|
||||||
recurse(.nodes[]?)
|
|
||||||
|recurse(.floating_nodes[]?)
|
|
||||||
|select(.type=="workspace")
|
|
||||||
| . as $workspace | recurse(.nodes[]?)
|
|
||||||
|select(.type=="con" and .name!=null)
|
|
||||||
|{workspace: $workspace.name, name: .name, id: .id, focused: .focused, app_id: .app_id}]
|
|
||||||
|sort_by(.workspace, .name)[]
|
|
||||||
|.workspace + if .focused then "* " else " " end + .app_id + " - " + .name + " " + (.id|tostring)'
|
|
||||||
)
|
|
||||||
rm $HOME/.cache/wofi-dmenu
|
|
||||||
|
|
||||||
windows_separators=()
|
|
||||||
colors=(blue green orange red magenta)
|
|
||||||
workspace_previous=''
|
|
||||||
index_workspace_active=0
|
|
||||||
num_separators=0
|
|
||||||
index_color=0
|
|
||||||
bold=-1
|
|
||||||
for index_window in "${!windows[@]}"
|
|
||||||
do
|
|
||||||
window="${windows[$index_window]}"
|
|
||||||
# todo: consider arbitraty workspace name length by separating by space instead of simply taking first argument.
|
|
||||||
workspace=${window:0:1}
|
|
||||||
# obtain index of the active window
|
|
||||||
if [ "${window:1:1}" == "*" ]
|
|
||||||
then
|
|
||||||
index_workspace_active=$(($index_window))
|
|
||||||
fi
|
|
||||||
|
|
||||||
# if window has different workspace than previous, use next color. Cycle through colors
|
|
||||||
if [ "$workspace" != "$workspace_previous" ] && [ ! -z "$workspace_previous" ]
|
|
||||||
then
|
|
||||||
index_color=$index_color+1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if (($index_color == ${#colors[@]}))
|
|
||||||
then
|
|
||||||
index_color=0
|
|
||||||
fi
|
|
||||||
if (( $bold == 1))
|
|
||||||
then
|
|
||||||
windows_separators+=("<b><span foreground=\"${colors[$index_color]}\">[${workspace}]</span>${window:1}</b>")
|
|
||||||
else
|
|
||||||
windows_separators+=("<span foreground=\"${colors[$index_color]}\">[${workspace}]</span>${window:1}")
|
|
||||||
fi
|
|
||||||
workspace_previous=$workspace
|
|
||||||
done
|
|
||||||
|
|
||||||
HEIGHT=$(( $(printf '%s\n' "${windows_separators[@]}" | wc -l) * 30 ))
|
|
||||||
|
|
||||||
echo $HEIGHT
|
|
||||||
# Select window with rofi, obtaining ID of selected window
|
|
||||||
idx_selected=$(printf '%s\n' "${windows_separators[@]}" | wofi -d -p "$command_" -m -H $HEIGHT )
|
|
||||||
selected=${windows[$idx_selected]}
|
|
||||||
id_selected=$(echo $selected | awk '{print $NF}')
|
|
||||||
workspace_selected=${selected:0:1}
|
|
||||||
|
|
||||||
|
|
||||||
### unmaximize all maximized windows on the workspace of the selected window
|
|
||||||
# Obtain the avaliable windows' workspaces, names and IDs as strings
|
|
||||||
mapfile -t ids_windows_maximized < <(
|
|
||||||
swaymsg -t get_tree | jq -r '[
|
|
||||||
recurse(.nodes[]?)
|
|
||||||
|recurse(.floating_nodes[]?)
|
|
||||||
|select(.type=="workspace")
|
|
||||||
| . as $workspace | recurse(.nodes[]?)
|
|
||||||
|select(.type=="con" and .name!=null and .fullscreen_mode==1 and $workspace.name=="'"$workspace_selected"'")
|
|
||||||
|{workspace: $workspace.name, name: .name, id: .id, focused: .focused, app_id: .app_id}]
|
|
||||||
|sort_by(.workspace, .name)[]
|
|
||||||
|(.id|tostring)'
|
|
||||||
)
|
|
||||||
|
|
||||||
# unmaximize the maximized windows that are not the selected one
|
|
||||||
for id_window_maximized in "${ids_windows_maximized[@]}"
|
|
||||||
do
|
|
||||||
if [ "$id_window_maximized" != "$id_selected" ]
|
|
||||||
then
|
|
||||||
swaymsg "[con_id=$id_window_maximized] fullscreen disable"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# Tell sway to focus said window
|
|
||||||
# todo: do not execute if selected is the separator
|
|
||||||
if [ ! -z "$id_selected" ]
|
|
||||||
then
|
|
||||||
swaymsg "[con_id=$id_selected] $command_"
|
|
||||||
fi
|
|
@ -1,3 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
rofimoji
|
|
@ -1,138 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Source: https://gist.github.com/NearHuscarl/5d366e1a3b788814bcbea62c1f66241d
|
|
||||||
#
|
|
||||||
# Use wofi to pick emoji because that's what this
|
|
||||||
# century is about apparently...
|
|
||||||
#
|
|
||||||
# Requirements:
|
|
||||||
# wofi, wlroots based compositor
|
|
||||||
#
|
|
||||||
# Usage:
|
|
||||||
# 1. Download all emoji
|
|
||||||
# $ wofi-emoji --download
|
|
||||||
#
|
|
||||||
# 2. Run it!
|
|
||||||
# $ wofi-emoji
|
|
||||||
#
|
|
||||||
# Notes:
|
|
||||||
# * You'll need a emoji font like "Noto Emoji" or "EmojiOne".
|
|
||||||
# * Confirming an item will automatically paste it WITHOUT
|
|
||||||
# writing it to your clipboard.
|
|
||||||
# * Ctrl+C will copy it to your clipboard WITHOUT pasting it.
|
|
||||||
#
|
|
||||||
|
|
||||||
# Where to save the emojis file.
|
|
||||||
EMOJI_FILE="$HOME/.cache/emojis.txt"
|
|
||||||
|
|
||||||
# Urls of emoji to download.
|
|
||||||
# You can remove what you don't need.
|
|
||||||
URLS=(
|
|
||||||
'https://emojipedia.org/people/'
|
|
||||||
'https://emojipedia.org/nature/'
|
|
||||||
'https://emojipedia.org/food-drink/'
|
|
||||||
'https://emojipedia.org/activity/'
|
|
||||||
'https://emojipedia.org/travel-places/'
|
|
||||||
'https://emojipedia.org/objects/'
|
|
||||||
'https://emojipedia.org/symbols/'
|
|
||||||
'https://emojipedia.org/flags/'
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
function notify() {
|
|
||||||
if [ "$(command -v notify-send)" ]; then
|
|
||||||
notify-send "$1" "$2"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function download() {
|
|
||||||
notify "$(basename "$0")" 'Downloading all emoji for your pleasure'
|
|
||||||
|
|
||||||
echo "" > "$EMOJI_FILE"
|
|
||||||
|
|
||||||
for url in "${URLS[@]}"; do
|
|
||||||
echo "Downloading: $url"
|
|
||||||
|
|
||||||
# Download the list of emoji and remove all the junk around it
|
|
||||||
emojis=$(curl -s "$url" | \
|
|
||||||
xmllint --html \
|
|
||||||
--xpath '//ul[@class="emoji-list"]' - 2>/dev/null)
|
|
||||||
|
|
||||||
# Get rid of starting/closing ul tags
|
|
||||||
emojis=$(echo "$emojis" | head -n -1 | tail -n +1)
|
|
||||||
|
|
||||||
# Extract the emoji and its description
|
|
||||||
emojis=$(echo "$emojis" | \
|
|
||||||
sed -rn 's/.*<span class="emoji">(.*)<\/span> (.*)<\/a><\/li>/\1 \2/p')
|
|
||||||
|
|
||||||
echo "$emojis" >> "$EMOJI_FILE"
|
|
||||||
done
|
|
||||||
|
|
||||||
notify "$(basename "$0")" "We're all set!"
|
|
||||||
}
|
|
||||||
|
|
||||||
function wofi_menu() { # {{{
|
|
||||||
wofi -width 25 -lines 7 -dmenu -i -p 'emoji: ' \
|
|
||||||
-kb-row-tab '' \
|
|
||||||
-kb-row-select Tab \
|
|
||||||
-kb-custom-1 Ctrl+c
|
|
||||||
}
|
|
||||||
# }}}
|
|
||||||
|
|
||||||
function repeat() { # {{{
|
|
||||||
local rplc str="$1" count="$2"
|
|
||||||
rplc="$(printf "%${count}s")"
|
|
||||||
echo "${rplc// /"$str"}"
|
|
||||||
}
|
|
||||||
# }}}
|
|
||||||
|
|
||||||
function toclipboard() { # {{{
|
|
||||||
wl-copy
|
|
||||||
}
|
|
||||||
# }}}
|
|
||||||
|
|
||||||
function pastedirectly() { #{{{
|
|
||||||
wtype -
|
|
||||||
}
|
|
||||||
# }}}
|
|
||||||
|
|
||||||
function display() {
|
|
||||||
local emoji line exit_code quantifier
|
|
||||||
|
|
||||||
emoji=$(cat "$EMOJI_FILE" | grep -v '#' | grep -v '^[[:space:]]*$')
|
|
||||||
line="$(echo "$emoji" | wofi_menu)"
|
|
||||||
exit_code=$?
|
|
||||||
|
|
||||||
line=($line)
|
|
||||||
last=${line[${#line[@]}-1]}
|
|
||||||
quantifier="${last:${#last}-1:1}"
|
|
||||||
if [[ ! "$quantifier" =~ [0-9] ]]; then
|
|
||||||
quantifier=1
|
|
||||||
fi
|
|
||||||
emoijs="$(repeat "${line[0]}" "$quantifier")"
|
|
||||||
|
|
||||||
if [ $exit_code == 0 ]; then
|
|
||||||
echo -n "$emoijs" | pastedirectly
|
|
||||||
elif [ $exit_code == 10 ]; then
|
|
||||||
echo -n "$emoijs" | toclipboard
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Some simple argparsing
|
|
||||||
if [[ "$1" =~ -D|--download ]]; then
|
|
||||||
download
|
|
||||||
exit 0
|
|
||||||
elif [[ "$1" =~ -h|--help ]]; then
|
|
||||||
echo "usage: $0 [-D|--download]"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Download all emoji if they don't exist yet
|
|
||||||
if [ ! -f "$EMOJI_FILE" ]; then
|
|
||||||
download
|
|
||||||
fi
|
|
||||||
|
|
||||||
# display displays :)
|
|
||||||
display
|
|
Loading…
Reference in New Issue
Block a user