*: Use tabs for indentation where appropriate
I am a big supporter of the approach to indent with tabs and align with
spaces. (Read [here][1] f.e.) Thus at some places a simple `s/ {4}/\t/g`
(replace 4 with whatever fits) is not enough and a bit more thought is
needed. Because of that there are still places where I plan to
substitute the whitespace in the future.
This patch contains exclusively whitespace changes. Check for yourself
with `git diff --ignore-all-space`.
[1]: https://dmitryfrank.com/articles/indent_with_tabs_align_with_spaces
This commit is contained in:
@@ -1,8 +1,8 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
if [ "$(rfkill -o SOFT --noheadings list wlan)" = "blocked" ]; then
|
if [ "$(rfkill -o SOFT --noheadings list wlan)" = "blocked" ]; then
|
||||||
notify-send "Airplane mode toggled" "On"
|
notify-send "Airplane mode toggled" "On"
|
||||||
else
|
else
|
||||||
notify-send "Airplane mode toggled" "Off"
|
notify-send "Airplane mode toggled" "Off"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -135,31 +135,31 @@ bindsym $mod+Shift+e exec \
|
|||||||
|
|
||||||
# resize window (you can also use the mouse for that)
|
# resize window (you can also use the mouse for that)
|
||||||
mode "resize" {
|
mode "resize" {
|
||||||
bindsym h resize grow left
|
bindsym h resize grow left
|
||||||
bindsym j resize grow down
|
bindsym j resize grow down
|
||||||
bindsym k resize grow up
|
bindsym k resize grow up
|
||||||
bindsym l resize grow right
|
bindsym l resize grow right
|
||||||
|
|
||||||
bindsym Shift+h resize shrink right
|
bindsym Shift+h resize shrink right
|
||||||
bindsym Shift+j resize shrink up
|
bindsym Shift+j resize shrink up
|
||||||
bindsym Shift+k resize shrink down
|
bindsym Shift+k resize shrink down
|
||||||
bindsym Shift+l resize shrink left
|
bindsym Shift+l resize shrink left
|
||||||
|
|
||||||
# Set window size to predefined values
|
# Set window size to predefined values
|
||||||
# firefox anti fingerprinting
|
# firefox anti fingerprinting
|
||||||
bindsym p resize set 1920 1080
|
bindsym p resize set 1920 1080
|
||||||
# scratchpad-terminal default size
|
# scratchpad-terminal default size
|
||||||
bindsym s resize set 1600 900
|
bindsym s resize set 1600 900
|
||||||
# "fullscreen"
|
# "fullscreen"
|
||||||
bindsym f resize set 3200 1770
|
bindsym f resize set 3200 1770
|
||||||
|
|
||||||
# Move window to center
|
# Move window to center
|
||||||
bindsym c move position center
|
bindsym c move position center
|
||||||
|
|
||||||
# back to normal: Enter or Escape
|
# back to normal: Enter or Escape
|
||||||
bindsym Return mode "default"
|
bindsym Return mode "default"
|
||||||
bindsym Escape mode "default"
|
bindsym Escape mode "default"
|
||||||
bindsym $mod+r mode "default"
|
bindsym $mod+r mode "default"
|
||||||
}
|
}
|
||||||
|
|
||||||
bindsym $mod+r mode "resize"
|
bindsym $mod+r mode "resize"
|
||||||
|
|||||||
@@ -2,89 +2,89 @@
|
|||||||
# See https://github.com/polybar/polybar-scripts/pull/237
|
# See https://github.com/polybar/polybar-scripts/pull/237
|
||||||
|
|
||||||
bluetooth_print() {
|
bluetooth_print() {
|
||||||
bluetoothctl | while read -r; do
|
bluetoothctl | while read -r; do
|
||||||
if [[ "$(systemctl is-active "bluetooth.service")" = "active" ]]; then
|
if [[ "$(systemctl is-active "bluetooth.service")" = "active" ]]; then
|
||||||
|
|
||||||
devices_paired=$(
|
devices_paired=$(
|
||||||
echo paired-devices \
|
echo paired-devices \
|
||||||
| bluetoothctl \
|
| bluetoothctl \
|
||||||
| sed -n '/paired-devices/,$p' \
|
| sed -n '/paired-devices/,$p' \
|
||||||
| grep Device \
|
| grep Device \
|
||||||
| cut -d ' ' -f 2
|
| cut -d ' ' -f 2
|
||||||
)
|
)
|
||||||
counter=0
|
counter=0
|
||||||
|
|
||||||
echo "$devices_paired" | while read -r line; do
|
echo "$devices_paired" | while read -r line; do
|
||||||
device_info=$(echo "info $line" | bluetoothctl)
|
device_info=$(echo "info $line" | bluetoothctl)
|
||||||
|
|
||||||
if echo "$device_info" | grep -q "Connected: yes"; then
|
if echo "$device_info" | grep -q "Connected: yes"; then
|
||||||
device_alias=$(
|
device_alias=$(
|
||||||
echo "$device_info" \
|
echo "$device_info" \
|
||||||
| grep "Alias" \
|
| grep "Alias" \
|
||||||
| cut -d ' ' -f 2-
|
| cut -d ' ' -f 2-
|
||||||
)
|
)
|
||||||
|
|
||||||
if [[ $counter -gt 0 ]]; then
|
if [[ $counter -gt 0 ]]; then
|
||||||
printf ", %s" "$device_alias"
|
printf ", %s" "$device_alias"
|
||||||
else
|
else
|
||||||
printf ": %s" "$device_alias"
|
printf ": %s" "$device_alias"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
counter=$((counter + 1))
|
counter=$((counter + 1))
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
if echo show | bluetoothctl | grep -q "Powered: no"; then
|
if echo show | bluetoothctl | grep -q "Powered: no"; then
|
||||||
printf ''
|
printf ''
|
||||||
fi
|
fi
|
||||||
printf '\n'
|
printf '\n'
|
||||||
else
|
else
|
||||||
echo ""
|
echo ""
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
bluetooth_toggle() {
|
bluetooth_toggle() {
|
||||||
if echo show | bluetoothctl | grep -q "Powered: no"; then
|
if echo show | bluetoothctl | grep -q "Powered: no"; then
|
||||||
echo "power on" | bluetoothctl >> /dev/null
|
echo "power on" | bluetoothctl >> /dev/null
|
||||||
sleep 1
|
sleep 1
|
||||||
|
|
||||||
devices_paired=$(
|
devices_paired=$(
|
||||||
echo paired-devices
|
echo paired-devices
|
||||||
| bluetoothctl \
|
| bluetoothctl \
|
||||||
| sed -n '/paired-devices/,$p' \
|
| sed -n '/paired-devices/,$p' \
|
||||||
| grep Device \
|
| grep Device \
|
||||||
| cut -d ' ' -f 2
|
| cut -d ' ' -f 2
|
||||||
)
|
)
|
||||||
echo "$devices_paired" | while read -r line; do
|
echo "$devices_paired" | while read -r line; do
|
||||||
echo "connect $line" | bluetoothctl >> /dev/null
|
echo "connect $line" | bluetoothctl >> /dev/null
|
||||||
done
|
done
|
||||||
else
|
else
|
||||||
devices_paired=$(
|
devices_paired=$(
|
||||||
echo paired-devices \
|
echo paired-devices \
|
||||||
| bluetoothctl \
|
| bluetoothctl \
|
||||||
| sed -n '/paired-devices/,$p' \
|
| sed -n '/paired-devices/,$p' \
|
||||||
| grep Device \
|
| grep Device \
|
||||||
| cut -d ' ' -f 2
|
| cut -d ' ' -f 2
|
||||||
)
|
)
|
||||||
echo "$devices_paired" | while read -r line; do
|
echo "$devices_paired" | while read -r line; do
|
||||||
device_info=$(echo "info $line" | bluetoothctl)
|
device_info=$(echo "info $line" | bluetoothctl)
|
||||||
|
|
||||||
if echo "$device_info" | grep -q "Connected: yes"; then
|
if echo "$device_info" | grep -q "Connected: yes"; then
|
||||||
echo "disconnect $line" | bluetoothctl >> /dev/null
|
echo "disconnect $line" | bluetoothctl >> /dev/null
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
echo "power off" | bluetoothctl >> /dev/null
|
echo "power off" | bluetoothctl >> /dev/null
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
--toggle)
|
--toggle)
|
||||||
bluetooth_toggle
|
bluetooth_toggle
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
bluetooth_print
|
bluetooth_print
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
connection="$(nmcli con show --active | awk '$3 ~ /^(vpn|tun)$/ { print $1 }')"
|
connection="$(nmcli con show --active | awk '$3 ~ /^(vpn|tun)$/ { print $1 }')"
|
||||||
if [ -n "$connection" ]; then
|
if [ -n "$connection" ]; then
|
||||||
echo "VPN: $connection"
|
echo "VPN: $connection"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# [o] is a hack to not grep the grep-command. See:
|
# [o] is a hack to not grep the grep-command. See:
|
||||||
|
|||||||
@@ -48,307 +48,307 @@ OPENSCAD_IMGSIZE=${RNGR_OPENSCAD_IMGSIZE:-1000,1000}
|
|||||||
OPENSCAD_COLORSCHEME=${RNGR_OPENSCAD_COLORSCHEME:-Tomorrow Night}
|
OPENSCAD_COLORSCHEME=${RNGR_OPENSCAD_COLORSCHEME:-Tomorrow Night}
|
||||||
|
|
||||||
handle_extension() {
|
handle_extension() {
|
||||||
case "${FILE_EXTENSION_LOWER}" in
|
case "${FILE_EXTENSION_LOWER}" in
|
||||||
## Archive
|
## Archive
|
||||||
a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|\
|
a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|\
|
||||||
rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip)
|
rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip)
|
||||||
atool --list -- "${FILE_PATH}" && exit 5
|
atool --list -- "${FILE_PATH}" && exit 5
|
||||||
bsdtar --list --file "${FILE_PATH}" && exit 5
|
bsdtar --list --file "${FILE_PATH}" && exit 5
|
||||||
exit 1;;
|
exit 1;;
|
||||||
rar)
|
rar)
|
||||||
## Avoid password prompt by providing empty password
|
## Avoid password prompt by providing empty password
|
||||||
unrar lt -p- -- "${FILE_PATH}" && exit 5
|
unrar lt -p- -- "${FILE_PATH}" && exit 5
|
||||||
exit 1;;
|
exit 1;;
|
||||||
7z)
|
7z)
|
||||||
## Avoid password prompt by providing empty password
|
## Avoid password prompt by providing empty password
|
||||||
7z l -p -- "${FILE_PATH}" && exit 5
|
7z l -p -- "${FILE_PATH}" && exit 5
|
||||||
exit 1;;
|
exit 1;;
|
||||||
|
|
||||||
## PDF
|
## PDF
|
||||||
pdf)
|
pdf)
|
||||||
## Preview as text conversion
|
## Preview as text conversion
|
||||||
pdftotext -l 10 -nopgbrk -q -- "${FILE_PATH}" - | \
|
pdftotext -l 10 -nopgbrk -q -- "${FILE_PATH}" - | \
|
||||||
fmt -w "${PV_WIDTH}" && exit 5
|
fmt -w "${PV_WIDTH}" && exit 5
|
||||||
mutool draw -F txt -i -- "${FILE_PATH}" 1-10 | \
|
mutool draw -F txt -i -- "${FILE_PATH}" 1-10 | \
|
||||||
fmt -w "${PV_WIDTH}" && exit 5
|
fmt -w "${PV_WIDTH}" && exit 5
|
||||||
exiftool "${FILE_PATH}" && exit 5
|
exiftool "${FILE_PATH}" && exit 5
|
||||||
exit 1;;
|
exit 1;;
|
||||||
|
|
||||||
## BitTorrent
|
## BitTorrent
|
||||||
torrent)
|
torrent)
|
||||||
transmission-show -- "${FILE_PATH}" && exit 5
|
transmission-show -- "${FILE_PATH}" && exit 5
|
||||||
exit 1;;
|
exit 1;;
|
||||||
|
|
||||||
## OpenDocument
|
## OpenDocument
|
||||||
odt|ods|odp|sxw)
|
odt|ods|odp|sxw)
|
||||||
## Preview as text conversion
|
## Preview as text conversion
|
||||||
odt2txt "${FILE_PATH}" && exit 5
|
odt2txt "${FILE_PATH}" && exit 5
|
||||||
## Preview as markdown conversion
|
## Preview as markdown conversion
|
||||||
pandoc -s -t markdown -- "${FILE_PATH}" && exit 5
|
pandoc -s -t markdown -- "${FILE_PATH}" && exit 5
|
||||||
exit 1;;
|
exit 1;;
|
||||||
|
|
||||||
## XLSX
|
## XLSX
|
||||||
xlsx)
|
xlsx)
|
||||||
## Preview as csv conversion
|
## Preview as csv conversion
|
||||||
## Uses: https://github.com/dilshod/xlsx2csv
|
## Uses: https://github.com/dilshod/xlsx2csv
|
||||||
xlsx2csv -- "${FILE_PATH}" && exit 5
|
xlsx2csv -- "${FILE_PATH}" && exit 5
|
||||||
exit 1;;
|
exit 1;;
|
||||||
|
|
||||||
## HTML
|
## HTML
|
||||||
htm|html|xhtml)
|
htm|html|xhtml)
|
||||||
## Preview as text conversion
|
## Preview as text conversion
|
||||||
w3m -dump "${FILE_PATH}" && exit 5
|
w3m -dump "${FILE_PATH}" && exit 5
|
||||||
lynx -dump -- "${FILE_PATH}" && exit 5
|
lynx -dump -- "${FILE_PATH}" && exit 5
|
||||||
elinks -dump "${FILE_PATH}" && exit 5
|
elinks -dump "${FILE_PATH}" && exit 5
|
||||||
pandoc -s -t markdown -- "${FILE_PATH}" && exit 5
|
pandoc -s -t markdown -- "${FILE_PATH}" && exit 5
|
||||||
;;
|
;;
|
||||||
|
|
||||||
## JSON
|
## JSON
|
||||||
json)
|
json)
|
||||||
jq --color-output . "${FILE_PATH}" && exit 5
|
jq --color-output . "${FILE_PATH}" && exit 5
|
||||||
python -m json.tool -- "${FILE_PATH}" && exit 5
|
python -m json.tool -- "${FILE_PATH}" && exit 5
|
||||||
;;
|
;;
|
||||||
|
|
||||||
## Direct Stream Digital/Transfer (DSDIFF) and wavpack aren't detected
|
## Direct Stream Digital/Transfer (DSDIFF) and wavpack aren't detected
|
||||||
## by file(1).
|
## by file(1).
|
||||||
dff|dsf|wv|wvc)
|
dff|dsf|wv|wvc)
|
||||||
mediainfo "${FILE_PATH}" && exit 5
|
mediainfo "${FILE_PATH}" && exit 5
|
||||||
exiftool "${FILE_PATH}" && exit 5
|
exiftool "${FILE_PATH}" && exit 5
|
||||||
;; # Continue with next handler on failure
|
;; # Continue with next handler on failure
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
handle_image() {
|
handle_image() {
|
||||||
## Size of the preview if there are multiple options or it has to be
|
## Size of the preview if there are multiple options or it has to be
|
||||||
## rendered from vector graphics. If the conversion program allows
|
## rendered from vector graphics. If the conversion program allows
|
||||||
## specifying only one dimension while keeping the aspect ratio, the width
|
## specifying only one dimension while keeping the aspect ratio, the width
|
||||||
## will be used.
|
## will be used.
|
||||||
local DEFAULT_SIZE="1920x1080"
|
local DEFAULT_SIZE="1920x1080"
|
||||||
|
|
||||||
local mimetype="${1}"
|
local mimetype="${1}"
|
||||||
case "${mimetype}" in
|
case "${mimetype}" in
|
||||||
## SVG
|
## SVG
|
||||||
# image/svg+xml|image/svg)
|
# image/svg+xml|image/svg)
|
||||||
# convert -- "${FILE_PATH}" "${IMAGE_CACHE_PATH}" && exit 6
|
# convert -- "${FILE_PATH}" "${IMAGE_CACHE_PATH}" && exit 6
|
||||||
# exit 1;;
|
# exit 1;;
|
||||||
|
|
||||||
## DjVu
|
## DjVu
|
||||||
# image/vnd.djvu)
|
# image/vnd.djvu)
|
||||||
# ddjvu -format=tiff -quality=90 -page=1 -size="${DEFAULT_SIZE}" \
|
# ddjvu -format=tiff -quality=90 -page=1 -size="${DEFAULT_SIZE}" \
|
||||||
# - "${IMAGE_CACHE_PATH}" < "${FILE_PATH}" \
|
# - "${IMAGE_CACHE_PATH}" < "${FILE_PATH}" \
|
||||||
# && exit 6 || exit 1;;
|
# && exit 6 || exit 1;;
|
||||||
|
|
||||||
## Canon RAW
|
## Canon RAW
|
||||||
image/x-canon-cr2)
|
image/x-canon-cr2)
|
||||||
exiftool -b -PreviewImage "${FILE_PATH}" > "${IMAGE_CACHE_PATH}" && exit 6
|
exiftool -b -PreviewImage "${FILE_PATH}" > "${IMAGE_CACHE_PATH}" && exit 6
|
||||||
exit 1;;
|
exit 1;;
|
||||||
|
|
||||||
## Image
|
## Image
|
||||||
image/*)
|
image/*)
|
||||||
local orientation
|
local orientation
|
||||||
orientation="$( identify -format '%[EXIF:Orientation]\n' -- "${FILE_PATH}" )"
|
orientation="$( identify -format '%[EXIF:Orientation]\n' -- "${FILE_PATH}" )"
|
||||||
## If orientation data is present and the image actually
|
## If orientation data is present and the image actually
|
||||||
## needs rotating ("1" means no rotation)...
|
## needs rotating ("1" means no rotation)...
|
||||||
if [[ -n "$orientation" && "$orientation" != 1 ]]; then
|
if [[ -n "$orientation" && "$orientation" != 1 ]]; then
|
||||||
## ...auto-rotate the image according to the EXIF data.
|
## ...auto-rotate the image according to the EXIF data.
|
||||||
convert -- "${FILE_PATH}" -auto-orient "${IMAGE_CACHE_PATH}" && exit 6
|
convert -- "${FILE_PATH}" -auto-orient "${IMAGE_CACHE_PATH}" && exit 6
|
||||||
fi
|
fi
|
||||||
|
|
||||||
## `w3mimgdisplay` will be called for all images (unless overriden
|
## `w3mimgdisplay` will be called for all images (unless overriden
|
||||||
## as above), but might fail for unsupported types.
|
## as above), but might fail for unsupported types.
|
||||||
exit 7;;
|
exit 7;;
|
||||||
|
|
||||||
## Video
|
## Video
|
||||||
video/*)
|
video/*)
|
||||||
# Thumbnail
|
# Thumbnail
|
||||||
ffmpegthumbnailer -i "${FILE_PATH}" -o "${IMAGE_CACHE_PATH}" -s 0 && exit 6
|
ffmpegthumbnailer -i "${FILE_PATH}" -o "${IMAGE_CACHE_PATH}" -s 0 && exit 6
|
||||||
exit 1;;
|
exit 1;;
|
||||||
|
|
||||||
## PDF
|
## PDF
|
||||||
# application/pdf)
|
# application/pdf)
|
||||||
# pdftoppm -f 1 -l 1 \
|
# pdftoppm -f 1 -l 1 \
|
||||||
# -scale-to-x "${DEFAULT_SIZE%x*}" \
|
# -scale-to-x "${DEFAULT_SIZE%x*}" \
|
||||||
# -scale-to-y -1 \
|
# -scale-to-y -1 \
|
||||||
# -singlefile \
|
# -singlefile \
|
||||||
# -jpeg -tiffcompression jpeg \
|
# -jpeg -tiffcompression jpeg \
|
||||||
# -- "${FILE_PATH}" "${IMAGE_CACHE_PATH%.*}" \
|
# -- "${FILE_PATH}" "${IMAGE_CACHE_PATH%.*}" \
|
||||||
# && exit 6 || exit 1;;
|
# && exit 6 || exit 1;;
|
||||||
|
|
||||||
|
|
||||||
## ePub, MOBI, FB2 (using Calibre)
|
## ePub, MOBI, FB2 (using Calibre)
|
||||||
# application/epub+zip|application/x-mobipocket-ebook|\
|
# application/epub+zip|application/x-mobipocket-ebook|\
|
||||||
# application/x-fictionbook+xml)
|
# application/x-fictionbook+xml)
|
||||||
# # ePub (using https://github.com/marianosimone/epub-thumbnailer)
|
# # ePub (using https://github.com/marianosimone/epub-thumbnailer)
|
||||||
# epub-thumbnailer "${FILE_PATH}" "${IMAGE_CACHE_PATH}" \
|
# epub-thumbnailer "${FILE_PATH}" "${IMAGE_CACHE_PATH}" \
|
||||||
# "${DEFAULT_SIZE%x*}" && exit 6
|
# "${DEFAULT_SIZE%x*}" && exit 6
|
||||||
# ebook-meta --get-cover="${IMAGE_CACHE_PATH}" -- "${FILE_PATH}" \
|
# ebook-meta --get-cover="${IMAGE_CACHE_PATH}" -- "${FILE_PATH}" \
|
||||||
# >/dev/null && exit 6
|
# >/dev/null && exit 6
|
||||||
# exit 1;;
|
# exit 1;;
|
||||||
|
|
||||||
## Font
|
## Font
|
||||||
application/font*|application/*opentype)
|
application/font*|application/*opentype)
|
||||||
preview_png="/tmp/$(basename "${IMAGE_CACHE_PATH%.*}").png"
|
preview_png="/tmp/$(basename "${IMAGE_CACHE_PATH%.*}").png"
|
||||||
if fontimage -o "${preview_png}" \
|
if fontimage -o "${preview_png}" \
|
||||||
--pixelsize "120" \
|
--pixelsize "120" \
|
||||||
--fontname \
|
--fontname \
|
||||||
--pixelsize "80" \
|
--pixelsize "80" \
|
||||||
--text " ABCDEFGHIJKLMNOPQRSTUVWXYZ " \
|
--text " ABCDEFGHIJKLMNOPQRSTUVWXYZ " \
|
||||||
--text " abcdefghijklmnopqrstuvwxyz " \
|
--text " abcdefghijklmnopqrstuvwxyz " \
|
||||||
--text " 0123456789.:,;(*!?') ff fl fi ffi ffl " \
|
--text " 0123456789.:,;(*!?') ff fl fi ffi ffl " \
|
||||||
--text " The quick brown fox jumps over the lazy dog. " \
|
--text " The quick brown fox jumps over the lazy dog. " \
|
||||||
"${FILE_PATH}";
|
"${FILE_PATH}";
|
||||||
then
|
then
|
||||||
convert -- "${preview_png}" "${IMAGE_CACHE_PATH}" \
|
convert -- "${preview_png}" "${IMAGE_CACHE_PATH}" \
|
||||||
&& rm "${preview_png}" \
|
&& rm "${preview_png}" \
|
||||||
&& exit 6
|
&& exit 6
|
||||||
else
|
else
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
|
||||||
## Preview archives using the first image inside.
|
## Preview archives using the first image inside.
|
||||||
## (Very useful for comic book collections for example.)
|
## (Very useful for comic book collections for example.)
|
||||||
# application/zip|application/x-rar|application/x-7z-compressed|\
|
# application/zip|application/x-rar|application/x-7z-compressed|\
|
||||||
# application/x-xz|application/x-bzip2|application/x-gzip|application/x-tar)
|
# application/x-xz|application/x-bzip2|application/x-gzip|application/x-tar)
|
||||||
# local fn=""; local fe=""
|
# local fn=""; local fe=""
|
||||||
# local zip=""; local rar=""; local tar=""; local bsd=""
|
# local zip=""; local rar=""; local tar=""; local bsd=""
|
||||||
# case "${mimetype}" in
|
# case "${mimetype}" in
|
||||||
# application/zip) zip=1 ;;
|
# application/zip) zip=1 ;;
|
||||||
# application/x-rar) rar=1 ;;
|
# application/x-rar) rar=1 ;;
|
||||||
# application/x-7z-compressed) ;;
|
# application/x-7z-compressed) ;;
|
||||||
# *) tar=1 ;;
|
# *) tar=1 ;;
|
||||||
# esac
|
# esac
|
||||||
# { [ "$tar" ] && fn=$(tar --list --file "${FILE_PATH}"); } || \
|
# { [ "$tar" ] && fn=$(tar --list --file "${FILE_PATH}"); } || \
|
||||||
# { fn=$(bsdtar --list --file "${FILE_PATH}") && bsd=1 && tar=""; } || \
|
# { fn=$(bsdtar --list --file "${FILE_PATH}") && bsd=1 && tar=""; } || \
|
||||||
# { [ "$rar" ] && fn=$(unrar lb -p- -- "${FILE_PATH}"); } || \
|
# { [ "$rar" ] && fn=$(unrar lb -p- -- "${FILE_PATH}"); } || \
|
||||||
# { [ "$zip" ] && fn=$(zipinfo -1 -- "${FILE_PATH}"); } || return
|
# { [ "$zip" ] && fn=$(zipinfo -1 -- "${FILE_PATH}"); } || return
|
||||||
#
|
#
|
||||||
# fn=$(echo "$fn" | python -c "import sys; import mimetypes as m; \
|
# fn=$(echo "$fn" | python -c "import sys; import mimetypes as m; \
|
||||||
# [ print(l, end='') for l in sys.stdin if \
|
# [ print(l, end='') for l in sys.stdin if \
|
||||||
# (m.guess_type(l[:-1])[0] or '').startswith('image/') ]" |\
|
# (m.guess_type(l[:-1])[0] or '').startswith('image/') ]" |\
|
||||||
# sort -V | head -n 1)
|
# sort -V | head -n 1)
|
||||||
# [ "$fn" = "" ] && return
|
# [ "$fn" = "" ] && return
|
||||||
# [ "$bsd" ] && fn=$(printf '%b' "$fn")
|
# [ "$bsd" ] && fn=$(printf '%b' "$fn")
|
||||||
#
|
#
|
||||||
# [ "$tar" ] && tar --extract --to-stdout \
|
# [ "$tar" ] && tar --extract --to-stdout \
|
||||||
# --file "${FILE_PATH}" -- "$fn" > "${IMAGE_CACHE_PATH}" && exit 6
|
# --file "${FILE_PATH}" -- "$fn" > "${IMAGE_CACHE_PATH}" && exit 6
|
||||||
# fe=$(echo -n "$fn" | sed 's/[][*?\]/\\\0/g')
|
# fe=$(echo -n "$fn" | sed 's/[][*?\]/\\\0/g')
|
||||||
# [ "$bsd" ] && bsdtar --extract --to-stdout \
|
# [ "$bsd" ] && bsdtar --extract --to-stdout \
|
||||||
# --file "${FILE_PATH}" -- "$fe" > "${IMAGE_CACHE_PATH}" && exit 6
|
# --file "${FILE_PATH}" -- "$fe" > "${IMAGE_CACHE_PATH}" && exit 6
|
||||||
# [ "$bsd" ] || [ "$tar" ] && rm -- "${IMAGE_CACHE_PATH}"
|
# [ "$bsd" ] || [ "$tar" ] && rm -- "${IMAGE_CACHE_PATH}"
|
||||||
# [ "$rar" ] && unrar p -p- -inul -- "${FILE_PATH}" "$fn" > \
|
# [ "$rar" ] && unrar p -p- -inul -- "${FILE_PATH}" "$fn" > \
|
||||||
# "${IMAGE_CACHE_PATH}" && exit 6
|
# "${IMAGE_CACHE_PATH}" && exit 6
|
||||||
# [ "$zip" ] && unzip -pP "" -- "${FILE_PATH}" "$fe" > \
|
# [ "$zip" ] && unzip -pP "" -- "${FILE_PATH}" "$fe" > \
|
||||||
# "${IMAGE_CACHE_PATH}" && exit 6
|
# "${IMAGE_CACHE_PATH}" && exit 6
|
||||||
# [ "$rar" ] || [ "$zip" ] && rm -- "${IMAGE_CACHE_PATH}"
|
# [ "$rar" ] || [ "$zip" ] && rm -- "${IMAGE_CACHE_PATH}"
|
||||||
# ;;
|
# ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# openscad_image() {
|
# openscad_image() {
|
||||||
# TMPPNG="$(mktemp -t XXXXXX.png)"
|
# TMPPNG="$(mktemp -t XXXXXX.png)"
|
||||||
# openscad --colorscheme="${OPENSCAD_COLORSCHEME}" \
|
# openscad --colorscheme="${OPENSCAD_COLORSCHEME}" \
|
||||||
# --imgsize="${OPENSCAD_IMGSIZE/x/,}" \
|
# --imgsize="${OPENSCAD_IMGSIZE/x/,}" \
|
||||||
# -o "${TMPPNG}" "${1}"
|
# -o "${TMPPNG}" "${1}"
|
||||||
# mv "${TMPPNG}" "${IMAGE_CACHE_PATH}"
|
# mv "${TMPPNG}" "${IMAGE_CACHE_PATH}"
|
||||||
# }
|
# }
|
||||||
|
|
||||||
# case "${FILE_EXTENSION_LOWER}" in
|
# case "${FILE_EXTENSION_LOWER}" in
|
||||||
# ## 3D models
|
# ## 3D models
|
||||||
# ## OpenSCAD only supports png image output, and ${IMAGE_CACHE_PATH}
|
# ## OpenSCAD only supports png image output, and ${IMAGE_CACHE_PATH}
|
||||||
# ## is hardcoded as jpeg. So we make a tempfile.png and just
|
# ## is hardcoded as jpeg. So we make a tempfile.png and just
|
||||||
# ## move/rename it to jpg. This works because image libraries are
|
# ## move/rename it to jpg. This works because image libraries are
|
||||||
# ## smart enough to handle it.
|
# ## smart enough to handle it.
|
||||||
# csg|scad)
|
# csg|scad)
|
||||||
# openscad_image "${FILE_PATH}" && exit 6
|
# openscad_image "${FILE_PATH}" && exit 6
|
||||||
# ;;
|
# ;;
|
||||||
# 3mf|amf|dxf|off|stl)
|
# 3mf|amf|dxf|off|stl)
|
||||||
# openscad_image <(echo "import(\"${FILE_PATH}\");") && exit 6
|
# openscad_image <(echo "import(\"${FILE_PATH}\");") && exit 6
|
||||||
# ;;
|
# ;;
|
||||||
# esac
|
# esac
|
||||||
}
|
}
|
||||||
|
|
||||||
handle_mime() {
|
handle_mime() {
|
||||||
local mimetype="${1}"
|
local mimetype="${1}"
|
||||||
case "${mimetype}" in
|
case "${mimetype}" in
|
||||||
## RTF and DOC
|
## RTF and DOC
|
||||||
text/rtf|*msword)
|
text/rtf|*msword)
|
||||||
## Preview as text conversion
|
## Preview as text conversion
|
||||||
## note: catdoc does not always work for .doc files
|
## note: catdoc does not always work for .doc files
|
||||||
## catdoc: http://www.wagner.pp.ru/~vitus/software/catdoc/
|
## catdoc: http://www.wagner.pp.ru/~vitus/software/catdoc/
|
||||||
catdoc -- "${FILE_PATH}" && exit 5
|
catdoc -- "${FILE_PATH}" && exit 5
|
||||||
exit 1;;
|
exit 1;;
|
||||||
|
|
||||||
## DOCX, ePub, FB2 (using markdown)
|
## DOCX, ePub, FB2 (using markdown)
|
||||||
## You might want to remove "|epub" and/or "|fb2" below if you have
|
## You might want to remove "|epub" and/or "|fb2" below if you have
|
||||||
## uncommented other methods to preview those formats
|
## uncommented other methods to preview those formats
|
||||||
*wordprocessingml.document|*/epub+zip|*/x-fictionbook+xml)
|
*wordprocessingml.document|*/epub+zip|*/x-fictionbook+xml)
|
||||||
## Preview as markdown conversion
|
## Preview as markdown conversion
|
||||||
pandoc -s -t markdown -- "${FILE_PATH}" && exit 5
|
pandoc -s -t markdown -- "${FILE_PATH}" && exit 5
|
||||||
exit 1;;
|
exit 1;;
|
||||||
|
|
||||||
## XLS
|
## XLS
|
||||||
*ms-excel)
|
*ms-excel)
|
||||||
## Preview as csv conversion
|
## Preview as csv conversion
|
||||||
## xls2csv comes with catdoc:
|
## xls2csv comes with catdoc:
|
||||||
## http://www.wagner.pp.ru/~vitus/software/catdoc/
|
## http://www.wagner.pp.ru/~vitus/software/catdoc/
|
||||||
xls2csv -- "${FILE_PATH}" && exit 5
|
xls2csv -- "${FILE_PATH}" && exit 5
|
||||||
exit 1;;
|
exit 1;;
|
||||||
|
|
||||||
## Text
|
## Text
|
||||||
text/* | */xml)
|
text/* | */xml)
|
||||||
bat --decorations=always --color=always --paging=never \
|
bat --decorations=always --color=always --paging=never \
|
||||||
--terminal-width="$PV_WIDTH" -- "${FILE_PATH}" && exit 0
|
--terminal-width="$PV_WIDTH" -- "${FILE_PATH}" && exit 0
|
||||||
## Syntax highlight
|
## Syntax highlight
|
||||||
if [[ "$( stat --printf='%s' -- "${FILE_PATH}" )" -gt "${HIGHLIGHT_SIZE_MAX}" ]]; then
|
if [[ "$( stat --printf='%s' -- "${FILE_PATH}" )" -gt "${HIGHLIGHT_SIZE_MAX}" ]]; then
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
if [[ "$( tput colors )" -ge 256 ]]; then
|
if [[ "$( tput colors )" -ge 256 ]]; then
|
||||||
local pygmentize_format='terminal256'
|
local pygmentize_format='terminal256'
|
||||||
local highlight_format='xterm256'
|
local highlight_format='xterm256'
|
||||||
else
|
else
|
||||||
local pygmentize_format='terminal'
|
local pygmentize_format='terminal'
|
||||||
local highlight_format='ansi'
|
local highlight_format='ansi'
|
||||||
fi
|
fi
|
||||||
env HIGHLIGHT_OPTIONS="${HIGHLIGHT_OPTIONS}" highlight \
|
env HIGHLIGHT_OPTIONS="${HIGHLIGHT_OPTIONS}" highlight \
|
||||||
--out-format="${highlight_format}" \
|
--out-format="${highlight_format}" \
|
||||||
--force -- "${FILE_PATH}" && exit 5
|
--force -- "${FILE_PATH}" && exit 5
|
||||||
env COLORTERM=8bit bat --color=always --style="plain" \
|
env COLORTERM=8bit bat --color=always --style="plain" \
|
||||||
-- "${FILE_PATH}" && exit 5
|
-- "${FILE_PATH}" && exit 5
|
||||||
pygmentize -f "${pygmentize_format}" -O "style=${PYGMENTIZE_STYLE}"\
|
pygmentize -f "${pygmentize_format}" -O "style=${PYGMENTIZE_STYLE}"\
|
||||||
-- "${FILE_PATH}" && exit 5
|
-- "${FILE_PATH}" && exit 5
|
||||||
exit 2;;
|
exit 2;;
|
||||||
|
|
||||||
## DjVu
|
## DjVu
|
||||||
image/vnd.djvu)
|
image/vnd.djvu)
|
||||||
## Preview as text conversion (requires djvulibre)
|
## Preview as text conversion (requires djvulibre)
|
||||||
djvutxt "${FILE_PATH}" | fmt -w "${PV_WIDTH}" && exit 5
|
djvutxt "${FILE_PATH}" | fmt -w "${PV_WIDTH}" && exit 5
|
||||||
exiftool "${FILE_PATH}" && exit 5
|
exiftool "${FILE_PATH}" && exit 5
|
||||||
exit 1;;
|
exit 1;;
|
||||||
|
|
||||||
## Image
|
## Image
|
||||||
image/*)
|
image/*)
|
||||||
## Preview as text conversion
|
## Preview as text conversion
|
||||||
# img2txt --gamma=0.6 --width="${PV_WIDTH}" -- "${FILE_PATH}" && exit 4
|
# img2txt --gamma=0.6 --width="${PV_WIDTH}" -- "${FILE_PATH}" && exit 4
|
||||||
exiftool "${FILE_PATH}" && exit 5
|
exiftool "${FILE_PATH}" && exit 5
|
||||||
exit 1;;
|
exit 1;;
|
||||||
|
|
||||||
## Video and audio
|
## Video and audio
|
||||||
video/* | audio/*)
|
video/* | audio/*)
|
||||||
mediainfo "${FILE_PATH}" && exit 5
|
mediainfo "${FILE_PATH}" && exit 5
|
||||||
exiftool "${FILE_PATH}" && exit 5
|
exiftool "${FILE_PATH}" && exit 5
|
||||||
exit 1;;
|
exit 1;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
handle_fallback() {
|
handle_fallback() {
|
||||||
echo '----- File Type Classification -----' && file --dereference --brief -- "${FILE_PATH}" && exit 5
|
echo '----- File Type Classification -----' && file --dereference --brief -- "${FILE_PATH}" && exit 5
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
MIMETYPE="$( file --dereference --brief --mime-type -- "${FILE_PATH}" )"
|
MIMETYPE="$( file --dereference --brief --mime-type -- "${FILE_PATH}" )"
|
||||||
if [[ "${PV_IMAGE_ENABLED}" == 'True' ]]; then
|
if [[ "${PV_IMAGE_ENABLED}" == 'True' ]]; then
|
||||||
handle_image "${MIMETYPE}"
|
handle_image "${MIMETYPE}"
|
||||||
fi
|
fi
|
||||||
handle_extension
|
handle_extension
|
||||||
handle_mime "${MIMETYPE}"
|
handle_mime "${MIMETYPE}"
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ XOFF=0
|
|||||||
FONT="DejaVu Sans Mono 8"
|
FONT="DejaVu Sans Mono 8"
|
||||||
|
|
||||||
# if [ -r "$DIR/config" ]; then
|
# if [ -r "$DIR/config" ]; then
|
||||||
# source "$DIR/config"
|
# source "$DIR/config"
|
||||||
# elif [ -r "$HOME/.config/rofi/wifi" ]; then
|
# elif [ -r "$HOME/.config/rofi/wifi" ]; then
|
||||||
# source "$HOME/.config/rofi/wifi"
|
# source "$HOME/.config/rofi/wifi"
|
||||||
# else
|
# else
|
||||||
|
|||||||
@@ -17,40 +17,40 @@ set shortmess+=c
|
|||||||
" Always show the signcolumn, otherwise it would shift the text each time
|
" Always show the signcolumn, otherwise it would shift the text each time
|
||||||
" diagnostics appear/become resolved.
|
" diagnostics appear/become resolved.
|
||||||
if has("patch-8.1.1564")
|
if has("patch-8.1.1564")
|
||||||
" Recently vim can merge signcolumn and number column into one
|
" Recently vim can merge signcolumn and number column into one
|
||||||
set signcolumn=number
|
set signcolumn=number
|
||||||
else
|
else
|
||||||
set signcolumn=yes
|
set signcolumn=yes
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Use tab for trigger completion with characters ahead and navigate.
|
" Use tab for trigger completion with characters ahead and navigate.
|
||||||
" NOTE: Use command ':verbose imap <tab>' to make sure tab is not mapped by
|
" NOTE: Use command ':verbose imap <tab>' to make sure tab is not mapped by
|
||||||
" other plugin before putting this into your config.
|
" other plugin before putting this into your config.
|
||||||
inoremap <silent><expr> <TAB>
|
inoremap <silent><expr> <TAB>
|
||||||
\ pumvisible() ? "\<C-n>" :
|
\ pumvisible() ? "\<C-n>" :
|
||||||
\ <SID>check_back_space() ? "\<TAB>" :
|
\ <SID>check_back_space() ? "\<TAB>" :
|
||||||
\ coc#refresh()
|
\ coc#refresh()
|
||||||
inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>"
|
inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>"
|
||||||
|
|
||||||
function! s:check_back_space() abort
|
function! s:check_back_space() abort
|
||||||
let col = col('.') - 1
|
let col = col('.') - 1
|
||||||
return !col || getline('.')[col - 1] =~# '\s'
|
return !col || getline('.')[col - 1] =~# '\s'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Use <c-space> to trigger completion.
|
" Use <c-space> to trigger completion.
|
||||||
if has('nvim')
|
if has('nvim')
|
||||||
inoremap <silent><expr> <c-space> coc#refresh()
|
inoremap <silent><expr> <c-space> coc#refresh()
|
||||||
else
|
else
|
||||||
inoremap <silent><expr> <c-@> coc#refresh()
|
inoremap <silent><expr> <c-@> coc#refresh()
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Use <cr> to confirm completion, `<C-g>u` means break undo chain at current
|
" Use <cr> to confirm completion, `<C-g>u` means break undo chain at current
|
||||||
" position. Coc only does snippet and additional edit on confirm.
|
" position. Coc only does snippet and additional edit on confirm.
|
||||||
" <cr> could be remapped by other vim plugin, try `:verbose imap <CR>`.
|
" <cr> could be remapped by other vim plugin, try `:verbose imap <CR>`.
|
||||||
if exists('*complete_info')
|
if exists('*complete_info')
|
||||||
inoremap <expr> <cr> complete_info()["selected"] != "-1" ? "\<C-y>" : "\<C-g>u\<CR>"
|
inoremap <expr> <cr> complete_info()["selected"] != "-1" ? "\<C-y>" : "\<C-g>u\<CR>"
|
||||||
else
|
else
|
||||||
inoremap <expr> <cr> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>"
|
inoremap <expr> <cr> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>"
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" GoTo code navigation.
|
" GoTo code navigation.
|
||||||
@@ -63,11 +63,11 @@ nmap <silent> gr <Plug>(coc-references)
|
|||||||
nnoremap <silent> K :call <SID>show_documentation()<CR>
|
nnoremap <silent> K :call <SID>show_documentation()<CR>
|
||||||
|
|
||||||
function! s:show_documentation()
|
function! s:show_documentation()
|
||||||
if (index(['vim','help'], &filetype) >= 0)
|
if (index(['vim','help'], &filetype) >= 0)
|
||||||
execute 'h '.expand('<cword>')
|
execute 'h '.expand('<cword>')
|
||||||
else
|
else
|
||||||
call CocAction('doHover')
|
call CocAction('doHover')
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Highlight the symbol and its references when holding the cursor.
|
" Highlight the symbol and its references when holding the cursor.
|
||||||
@@ -81,11 +81,11 @@ xmap <leader>f <Plug>(coc-format-selected)
|
|||||||
nmap <leader>f <Plug>(coc-format-selected)
|
nmap <leader>f <Plug>(coc-format-selected)
|
||||||
|
|
||||||
augroup mygroup
|
augroup mygroup
|
||||||
autocmd!
|
autocmd!
|
||||||
" Setup formatexpr specified filetype(s).
|
" Setup formatexpr specified filetype(s).
|
||||||
autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected')
|
autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected')
|
||||||
" Update signature help on jump placeholder.
|
" Update signature help on jump placeholder.
|
||||||
autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp')
|
autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp')
|
||||||
augroup end
|
augroup end
|
||||||
|
|
||||||
" Applying codeAction to the selected region.
|
" Applying codeAction to the selected region.
|
||||||
|
|||||||
@@ -19,16 +19,16 @@ sleep_delay=1
|
|||||||
|
|
||||||
# Run before starting the locker
|
# Run before starting the locker
|
||||||
pre_lock() {
|
pre_lock() {
|
||||||
playerctl pause
|
playerctl pause
|
||||||
"${XDG_CONFIG_HOME:-$HOME/.config}/compositor/launch.sh" -k
|
"${XDG_CONFIG_HOME:-$HOME/.config}/compositor/launch.sh" -k
|
||||||
amixer -q -D pulse sset Master mute
|
amixer -q -D pulse sset Master mute
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
# Run after the locker exits
|
# Run after the locker exits
|
||||||
post_lock() {
|
post_lock() {
|
||||||
"${XDG_CONFIG_HOME:-$HOME/.config}/compositor/launch.sh"
|
"${XDG_CONFIG_HOME:-$HOME/.config}/compositor/launch.sh"
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@@ -39,15 +39,15 @@ pre_lock
|
|||||||
trap 'kill %%' TERM INT
|
trap 'kill %%' TERM INT
|
||||||
|
|
||||||
if [[ -e /dev/fd/${XSS_SLEEP_LOCK_FD:--1} ]]; then
|
if [[ -e /dev/fd/${XSS_SLEEP_LOCK_FD:--1} ]]; then
|
||||||
# lock fd is open, make sure the locker does not inherit a copy
|
# lock fd is open, make sure the locker does not inherit a copy
|
||||||
$locker {XSS_SLEEP_LOCK_FD}<&- &
|
$locker {XSS_SLEEP_LOCK_FD}<&- &
|
||||||
|
|
||||||
sleep $sleep_delay
|
sleep $sleep_delay
|
||||||
|
|
||||||
# now close our fd (only remaining copy) to indicate we're ready to sleep
|
# now close our fd (only remaining copy) to indicate we're ready to sleep
|
||||||
exec {XSS_SLEEP_LOCK_FD}<&-
|
exec {XSS_SLEEP_LOCK_FD}<&-
|
||||||
else
|
else
|
||||||
$locker &
|
$locker &
|
||||||
fi
|
fi
|
||||||
|
|
||||||
wait # for locker to exit
|
wait # for locker to exit
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# ('*/5 * * * * /usr/local/bin/wifi-mute')
|
# ('*/5 * * * * /usr/local/bin/wifi-mute')
|
||||||
|
|
||||||
if [[ "$(nmcli -t -f name con show --active)" =~ eduroam* ]]; then # iwgetid -r
|
if [[ "$(nmcli -t -f name con show --active)" =~ eduroam* ]]; then # iwgetid -r
|
||||||
# TODO: mute only speaker, not headphones
|
# TODO: mute only speaker, not headphones
|
||||||
amixer set Master mute
|
amixer set Master mute
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user