Compare commits
174 Commits
Author | SHA1 | Date | |
---|---|---|---|
bb862e0f89 | |||
92b077aa67 | |||
be5021e9d8 | |||
3ba6345b5a | |||
12e3906e6b | |||
54948ab328 | |||
![]() |
29ff6e270f | ||
![]() |
6a024f2122 | ||
![]() |
5e86c77a2c | ||
![]() |
f9e8ed1667 | ||
![]() |
3fe7b2bb1e | ||
![]() |
1eb155ce47 | ||
![]() |
2f5fae6e10 | ||
![]() |
eaa596816f | ||
![]() |
b62eda14d6 | ||
![]() |
18d2845f78 | ||
![]() |
278d896eaa | ||
![]() |
1522fd4128 | ||
![]() |
fa57046245 | ||
![]() |
73416c9280 | ||
![]() |
5e7e07841f | ||
![]() |
2cde05382d | ||
![]() |
99f01be21f | ||
![]() |
542d6507cf | ||
![]() |
853690a704 | ||
![]() |
61aa02754f | ||
![]() |
0535059f7d | ||
![]() |
97447367f6 | ||
21d694822a | |||
f605068505 | |||
8758473866 | |||
da7e951159 | |||
9b0f6a3414 | |||
a264835cdd | |||
49aa6be220 | |||
9df61b2d32 | |||
b74c03d688 | |||
af7890dfdf | |||
46b64a713a | |||
8d92365ffb | |||
![]() |
1654cde76d | ||
![]() |
824ad04d59 | ||
![]() |
b8c42390be | ||
![]() |
819c5fad58 | ||
![]() |
bd6473dcfb | ||
![]() |
582b51ccca | ||
![]() |
e4ffce9a69 | ||
![]() |
6638fc402b | ||
![]() |
6a3269d358 | ||
![]() |
f24d0f7e1d | ||
![]() |
1b8d58e2ca | ||
![]() |
8249219793 | ||
![]() |
0de5c282ab | ||
![]() |
4e0715d87a | ||
![]() |
1caf280dd8 | ||
![]() |
aa56356463 | ||
![]() |
ab79ed6f72 | ||
![]() |
b09469d965 | ||
![]() |
b83b2e4f18 | ||
![]() |
7c487c3e0f | ||
![]() |
bbec613e8a | ||
![]() |
f479a599f6 | ||
![]() |
38e450902f | ||
![]() |
e2f767bde8 | ||
![]() |
86555424ed | ||
![]() |
37b50b6798 | ||
![]() |
598058494b | ||
![]() |
7ba7990a55 | ||
![]() |
c1b2803fcf | ||
![]() |
7a77851c9a | ||
![]() |
09a3b63b94 | ||
![]() |
d13ee22779 | ||
![]() |
db1614b7b7 | ||
![]() |
2c961c8c95 | ||
![]() |
03990468c0 | ||
![]() |
612f053d0c | ||
![]() |
5be5a97090 | ||
![]() |
7710b6211f | ||
![]() |
9a5babd048 | ||
![]() |
2dc137ce57 | ||
![]() |
5b6ddc7510 | ||
![]() |
e0efe35a2d | ||
![]() |
c33408abb5 | ||
![]() |
e55d30d2ad | ||
![]() |
df539391e5 | ||
b1e5d75162 | |||
c7df343008 | |||
![]() |
2547af4cbc | ||
![]() |
25c1827b5f | ||
![]() |
195f77d2cf | ||
![]() |
e1493cff6a | ||
![]() |
0210047512 | ||
![]() |
e99ef4e2e3 | ||
![]() |
b175f17acd | ||
![]() |
a4bbfd525f | ||
b579015748 | |||
![]() |
05fd5112d5 | ||
![]() |
ae7fd89b46 | ||
2db9353edb | |||
![]() |
7a7188bddc | ||
![]() |
d92f57f213 | ||
![]() |
0e3315b57b | ||
![]() |
17e4e917a7 | ||
![]() |
55aac86762 | ||
![]() |
0766872097 | ||
![]() |
c95f3d9e7b | ||
![]() |
ef8254681c | ||
![]() |
ee180f6e51 | ||
![]() |
e6c02e3bc3 | ||
![]() |
e2b2c510a2 | ||
![]() |
0acdebf0a7 | ||
![]() |
3fbcf32fee | ||
![]() |
a2d5d2ed08 | ||
![]() |
086d8de5f8 | ||
![]() |
a9c2c3b4bf | ||
![]() |
86dcf85612 | ||
![]() |
ebe88d9ef9 | ||
![]() |
f61bb64aca | ||
![]() |
ebb2c3e47e | ||
![]() |
471dce2b9e | ||
![]() |
22c3f178cd | ||
![]() |
788810268c | ||
![]() |
871caa7394 | ||
![]() |
6ce754385c | ||
![]() |
4c6840b4ff | ||
![]() |
56c7df703d | ||
![]() |
bd41443f55 | ||
![]() |
31dc146bde | ||
![]() |
d42739d1a2 | ||
![]() |
69b16dd017 | ||
![]() |
d9dd4d4ab6 | ||
![]() |
3abfb24924 | ||
![]() |
3ecbf9a727 | ||
![]() |
4394816f16 | ||
![]() |
0e39ef1c2d | ||
![]() |
af86f64500 | ||
![]() |
bd9eca7dd4 | ||
![]() |
700bee1659 | ||
![]() |
3a70be4fd7 | ||
![]() |
228b936f08 | ||
![]() |
da36357b4f | ||
0d56424cbc | |||
9e16a9fa47 | |||
![]() |
a69fbb2222 | ||
![]() |
a63a678077 | ||
![]() |
2a1782f397 | ||
![]() |
0791b182e9 | ||
![]() |
095678e77f | ||
![]() |
d0384a7cae | ||
![]() |
4a6b4f6981 | ||
7a4ccd3ec7 | |||
![]() |
f9605bc9c8 | ||
![]() |
628a5675b2 | ||
![]() |
333ec06d68 | ||
![]() |
fc24835fd5 | ||
![]() |
f57a4b0985 | ||
![]() |
5508e06ffe | ||
![]() |
f4479b8d8c | ||
![]() |
e0ecf42cb7 | ||
![]() |
853ad37d23 | ||
![]() |
90f00ef11a | ||
![]() |
f0888bbd03 | ||
![]() |
91070791ee | ||
![]() |
1373bc682e | ||
![]() |
2c0c56dfca | ||
835cece3da | |||
f86ec92ac5 | |||
d1787481a2 | |||
1a15c8dd11 | |||
![]() |
8b10c99a09 | ||
![]() |
8f16045a20 | ||
![]() |
bb0c5578b1 | ||
![]() |
dcde1d9d04 | ||
![]() |
979815a5ce |
@@ -5,15 +5,10 @@ packages:
|
||||
- shellspec
|
||||
- gojq
|
||||
- jq
|
||||
- icu-dev
|
||||
sources:
|
||||
- https://git.sr.ht/~mil/sxmo-utils
|
||||
tasks:
|
||||
- shellcheck: |
|
||||
- test: |
|
||||
cd sxmo-utils
|
||||
find . -type f -name '*.sh' -print0 | xargs -0 shellcheck -x --shell=sh
|
||||
- shellspec: |
|
||||
cd sxmo-utils
|
||||
shellspec
|
||||
- editorconfig-check: |
|
||||
cd sxmo-utils
|
||||
ec
|
||||
make test
|
||||
|
46
Makefile
46
Makefile
@@ -1,12 +1,20 @@
|
||||
DESTDIR=
|
||||
PREFIX:=/usr
|
||||
SYSCONFDIR:=/etc
|
||||
SHAREDIR=$(PREFIX)/share
|
||||
MANDIR=$(SHAREDIR)/man
|
||||
|
||||
# use $(PREFIX)/lib/systemd/user for systemd integration
|
||||
SERVICEDIR:=$(PREFIX)/share/superd/services
|
||||
|
||||
# Install services for packages outside sxmo
|
||||
EXTERNAL_SERVICES:=1
|
||||
|
||||
SCDOC=scdoc
|
||||
|
||||
.PHONY: install shellcheck
|
||||
.PHONY: install test shellcheck shellspec test_legacy_nerdfont
|
||||
|
||||
VERSION:=1.13.0
|
||||
VERSION:=1.15.2
|
||||
|
||||
GITVERSION:=$(shell git describe --tags)
|
||||
|
||||
@@ -25,11 +33,20 @@ docs/%: docs/%.scd
|
||||
|
||||
all: $(PROGRAMS) $(DOCS)
|
||||
|
||||
test: shellcheck
|
||||
test: shellcheck shellspec test_legacy_nerdfont
|
||||
|
||||
shellcheck:
|
||||
find . -type f -name '*.sh' -print0 | xargs -0 shellcheck -x --shell=sh
|
||||
|
||||
shellspec:
|
||||
shellspec
|
||||
|
||||
test_legacy_nerdfont: programs/test_legacy_nerdfont
|
||||
programs/test_legacy_nerdfont < configs/default_hooks/sxmo_hook_icons.sh
|
||||
|
||||
programs/test_legacy_nerdfont: programs/test_legacy_nerdfont.c
|
||||
$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ $< $(shell pkg-config --cflags --libs icu-io)
|
||||
|
||||
programs/%: programs/%.c
|
||||
$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ $<
|
||||
|
||||
@@ -58,24 +75,19 @@ install-scripts: $(PROGRAMS)
|
||||
|
||||
cd resources && find . -type f -exec install -D -m 0644 "{}" "$(DESTDIR)$(PREFIX)/share/sxmo/{}" \; && cd ..
|
||||
|
||||
# Configs
|
||||
if [ "$(OPENRC)" = "1" ]; then \
|
||||
install -D -m 0755 -t $(DESTDIR)/etc/init.d configs/openrc/sxmo-setpermissions; \
|
||||
fi
|
||||
|
||||
install -D -m 0644 -t $(DESTDIR)/usr/lib/udev/rules.d/ configs/udev/*.rules
|
||||
install -D -m 0644 -t $(DESTDIR)$(PREFIX)/lib/udev/rules.d/ configs/udev/*.rules
|
||||
|
||||
install -D -m 0644 -t $(DESTDIR)$(PREFIX)/share/applications/ configs/xdg/mimeapps.list
|
||||
|
||||
install -D -m 0640 -t $(DESTDIR)/etc/doas.d/ configs/doas/sxmo.conf
|
||||
install -D -m 0640 -t $(DESTDIR)$(SYSCONFDIR)/doas.d/ configs/doas/sxmo.conf
|
||||
|
||||
install -D -m 0644 -T configs/xorg/monitor.conf $(DESTDIR)$(PREFIX)/share/X11/xorg.conf.d/90-monitor.conf
|
||||
|
||||
mkdir -p $(DESTDIR)/etc/NetworkManager/dispatcher.d
|
||||
mkdir -p $(DESTDIR)$(SYSCONFDIR)/NetworkManager/dispatcher.d
|
||||
|
||||
install -D -m 0644 -T configs/appcfg/mpv_input.conf $(DESTDIR)/etc/mpv/input.conf
|
||||
install -D -m 0644 -T configs/appcfg/mpv_input.conf $(DESTDIR)$(SYSCONFDIR)/mpv/input.conf
|
||||
|
||||
install -D -m 0755 -T configs/profile.d/sxmo_init.sh $(DESTDIR)/etc/profile.d/sxmo_init.sh
|
||||
install -D -m 0755 -T configs/profile.d/sxmo_init.sh $(DESTDIR)$(SYSCONFDIR)/profile.d/sxmo_init.sh
|
||||
|
||||
# Migrations
|
||||
install -D -t $(DESTDIR)$(PREFIX)/share/sxmo/migrations migrations/*
|
||||
@@ -93,9 +105,11 @@ install-scripts: $(PROGRAMS)
|
||||
mkdir -p "$(DESTDIR)$(PREFIX)/share/sxmo/appscripts"
|
||||
cd scripts/appscripts && find . -name 'sxmo_*.sh' | xargs -I{} ln -fs "$(PREFIX)/bin/{}" "$(DESTDIR)$(PREFIX)/share/sxmo/appscripts/{}" && cd ../..
|
||||
|
||||
|
||||
mkdir -p "$(DESTDIR)$(PREFIX)/share/superd/services"
|
||||
install -m 0644 -t $(DESTDIR)$(PREFIX)/share/superd/services configs/superd/services/*
|
||||
mkdir -p "$(DESTDIR)$(SERVICEDIR)"
|
||||
install -m 0644 -t "$(DESTDIR)$(SERVICEDIR)" configs/services/*
|
||||
if [ "$(EXTERNAL_SERVICES)" = "1" ]; then \
|
||||
install -m 0644 -t "$(DESTDIR)$(SERVICEDIR)" configs/external-services/*; \
|
||||
fi
|
||||
|
||||
@echo "-------------------------------------------------------------------">&2
|
||||
@echo "NOTICE 1: Do not forget to add sxmo-setpermissions to your init system, e.g. for openrc: rc-update add sxmo-setpermissions default && rc-service sxmo-setpermissions start" >&2
|
||||
|
@@ -28,7 +28,10 @@ command -v firefox >/dev/null && export BROWSER=firefox
|
||||
#export SXMO_SUBREDDITS="postmarketos pinephoneOfficial pinephone unixporn"
|
||||
|
||||
# Change the default terminal command
|
||||
# export TERMCMD="st -e"
|
||||
export TERMCMD="sxmo_terminal.sh"
|
||||
|
||||
# Change the used terminal command
|
||||
# export SXMO_TERMINAL="st -e"
|
||||
|
||||
# When scrolling past the beginning or end of a menu, wrap it around:
|
||||
#export DMENU_WRAP_AROUND=1
|
||||
|
@@ -20,28 +20,38 @@ set $term sxmo_terminal.sh
|
||||
# on the original workspace that the command was run on.
|
||||
set $menu bemenu-run
|
||||
|
||||
font "Sxmo 10"
|
||||
font "Sxmo 11"
|
||||
|
||||
exec_always sxmo_swayinitconf.sh
|
||||
|
||||
exec_always dbus-update-activation-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
|
||||
exec_always dbus-update-activation-environment WAYLAND_DISPLAY DISPLAY XDG_CURRENT_DESKTOP
|
||||
|
||||
mode "menu" {
|
||||
bindsym --input-device=1:1:1c21800.lradc XF86AudioMute exec nothing # just a placeholder for "menu" mode
|
||||
# This is slower than remapping the keys using a keymap, but we don't need
|
||||
# to know the device names, so use it as a fallback so this functionality
|
||||
# keeps working if a deviceprofile doesn't exist.
|
||||
# TODO: the correct way to do this is to implement custom keybindings in
|
||||
# bemenu
|
||||
bindsym XF86PowerOff exec wtype -k Return
|
||||
bindsym XF86AudioRaiseVolume exec wtype -k Up
|
||||
bindsym XF86AudioLowerVolume exec wtype -k Down
|
||||
}
|
||||
|
||||
### Key bindings
|
||||
#
|
||||
# Basics:
|
||||
#
|
||||
input * xkb_options compose:ralt
|
||||
|
||||
# Start a terminal
|
||||
bindsym $mod+Return exec $term
|
||||
|
||||
# Launch appmenu
|
||||
bindsym $mod+p exec sxmo_appmenu.sh
|
||||
bindsym $mod+Shift+p exec sxmo_appmenu.sh sys
|
||||
|
||||
# Launch scripts menu
|
||||
bindsym $mod+i exec sxmo_appmenu.sh scripts
|
||||
# Wm menu switcher
|
||||
bindsym $mod+i exec sxmo_wmmenu.sh windowswitcher
|
||||
|
||||
# Kill focused window
|
||||
bindsym $mod+Shift+q kill
|
||||
@@ -133,7 +143,7 @@ mode "menu" {
|
||||
bindsym $mod+e layout toggle split
|
||||
|
||||
# Make the current focus fullscreen
|
||||
# bindsym $mod+f fullscreen
|
||||
bindsym $mod+f fullscreen
|
||||
|
||||
# Toggle the current focus between tiling and floating mode
|
||||
bindsym $mod+Shift+space floating toggle
|
||||
@@ -143,6 +153,13 @@ mode "menu" {
|
||||
|
||||
# Move focus to the parent container
|
||||
bindsym $mod+a focus parent
|
||||
|
||||
# Manual locker
|
||||
bindsym $mod+g exec sxmo_hook_locker.sh
|
||||
|
||||
# Shutdown
|
||||
bindsym $mod+t exec sxmo_appmenu.sh power
|
||||
|
||||
#
|
||||
# Scratchpad:
|
||||
#
|
||||
@@ -163,16 +180,16 @@ mode "resize" {
|
||||
# right will grow the containers width
|
||||
# up will shrink the containers height
|
||||
# down will grow the containers height
|
||||
bindsym $left resize shrink width 10px
|
||||
bindsym $down resize grow height 10px
|
||||
bindsym $up resize shrink height 10px
|
||||
bindsym $right resize grow width 10px
|
||||
bindsym $left resize shrink width 30px
|
||||
bindsym $down resize grow height 30px
|
||||
bindsym $up resize shrink height 30px
|
||||
bindsym $right resize grow width 30px
|
||||
|
||||
# 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
|
||||
bindsym Left resize shrink width 30px
|
||||
bindsym Down resize grow height 30px
|
||||
bindsym Up resize shrink height 30px
|
||||
bindsym Right resize grow width 30px
|
||||
|
||||
# Return to default mode
|
||||
bindsym Return mode "default"
|
||||
@@ -197,17 +214,35 @@ bar {
|
||||
statusline #ffffff
|
||||
background #323232
|
||||
inactive_workspace #32323200 #32323200 #5c5c5c
|
||||
font "Sxmo"
|
||||
font "Sxmo 11"
|
||||
}
|
||||
}
|
||||
|
||||
for_window [app_id="pinentry-.*"] floating true
|
||||
for_window [app_id="foot" title=".*sxmo/modem/.*/draft.txt.*"] resize set height 25
|
||||
for_window [title="megapixels"] inhibit_idle open
|
||||
for_window [title="ep[yr].*"] inhibit_idle visible
|
||||
|
||||
default_border pixel 3
|
||||
titlebar_border_thickness 3
|
||||
hide_edge_borders smart
|
||||
|
||||
# Need playerctl installed and running
|
||||
bindsym XF86AudioPlay exec playerctl play-pause
|
||||
bindsym XF86AudioStop exec playerctl stop
|
||||
bindsym XF86AudioNext exec playerctl next
|
||||
bindsym XF86AudioPrev exec playerctl previous
|
||||
|
||||
bindsym XF86MonBrightnessUp exec sxmo_brightness.sh up
|
||||
bindsym XF86MonBrightnessDown exec sxmo_brightness.sh down
|
||||
|
||||
bindsym Print exec sxmo_screenshot.sh
|
||||
|
||||
bindsym button2 kill
|
||||
|
||||
bindswitch lid:on exec sxmo_wm.sh dpms on
|
||||
bindswitch lid:off exec sxmo_wm.sh dpms off
|
||||
|
||||
include /etc/sway/config.d/*
|
||||
|
||||
exec 'printf %s "$SWAYSOCK" > "$XDG_RUNTIME_DIR"/sxmo.swaysock'
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[Desktop Entry]
|
||||
Name=sxiv Image Viewer
|
||||
Exec=sxiv
|
||||
Name=nsxiv Image Viewer
|
||||
Exec=nsxiv
|
||||
Terminal=false
|
||||
Type=Application
|
||||
MimeType=image/jpeg;image/png;image/gif
|
@@ -1,13 +0,0 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: AGPL-3.0-only
|
||||
# Copyright 2022 Sxmo Contributors
|
||||
|
||||
sxmo_wakelock.sh lock not_screenoff infinite
|
||||
|
||||
# Go to locker after 5 minutes of inactivity
|
||||
if [ -e "$XDG_CACHE_HOME/sxmo/sxmo.noidle" ]; then
|
||||
sxmo_daemons.sh stop idle_locker
|
||||
else
|
||||
sxmo_daemons.sh start idle_locker sxmo_idle.sh -w \
|
||||
timeout 300 'sxmo_hook_locker.sh'
|
||||
fi
|
@@ -1 +0,0 @@
|
||||
three_button_touchscreen
|
@@ -1 +0,0 @@
|
||||
three_button_touchscreen
|
@@ -1,299 +0,0 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: AGPL-3.0-only
|
||||
# Copyright 2022 Sxmo Contributors
|
||||
|
||||
# This script handles input actions, it is called by lisgd for gestures
|
||||
# and by dwm for button presses
|
||||
|
||||
ACTION="$1"
|
||||
|
||||
# include common definitions
|
||||
# shellcheck source=scripts/core/sxmo_common.sh
|
||||
. sxmo_common.sh
|
||||
|
||||
XPROPOUT="$(sxmo_wm.sh focusedwindow)"
|
||||
WMCLASS="$(printf %s "$XPROPOUT" | grep app: | cut -d" " -f2- | tr '[:upper:]' '[:lower:]')"
|
||||
WMNAME="$(printf %s "$XPROPOUT" | grep title: | cut -d" " -f2- | tr '[:upper:]' '[:lower:]')"
|
||||
|
||||
sxmo_debug "ACTION: $ACTION WMNAME: $WMNAME WMCLASS: $WMCLASS XPROPOUT: $XPROPOUT"
|
||||
|
||||
#special context-sensitive handling
|
||||
case "$WMCLASS" in
|
||||
*"mpv"*)
|
||||
case "$ACTION" in
|
||||
"oneright")
|
||||
sxmo_type.sh -k Left
|
||||
exit 0
|
||||
;;
|
||||
"oneleft")
|
||||
sxmo_type.sh -k Right
|
||||
exit 0
|
||||
;;
|
||||
"oneup")
|
||||
sxmo_type.sh m
|
||||
exit 0
|
||||
;;
|
||||
"onedown")
|
||||
sxmo_type.sh p
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*"foot"*|*"st"*)
|
||||
# First we try to handle the app running inside st:
|
||||
case "$WMNAME" in
|
||||
*"weechat"*)
|
||||
case "$ACTION" in
|
||||
*"oneleft")
|
||||
sxmo_type.sh -M Alt -k a
|
||||
exit 0
|
||||
;;
|
||||
*"oneright")
|
||||
sxmo_type.sh -M Alt -k less
|
||||
exit 0
|
||||
;;
|
||||
*"oneup")
|
||||
sxmo_type.sh -k Page_Down
|
||||
exit 0
|
||||
;;
|
||||
*"onedown")
|
||||
sxmo_type.sh -k Page_Up
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*" sms")
|
||||
case "$ACTION" in
|
||||
*"upbottomedge")
|
||||
number="$(printf %s "$WMNAME" | sed -e 's|^\"||' -e 's|\"$||' | cut -f1 -d' ')"
|
||||
sxmo_terminal.sh sxmo_modemtext.sh conversationloop "$number" &
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*"tuir"*)
|
||||
if [ "$ACTION" = "rightbottomedge" ]; then
|
||||
sxmo_type.sh o
|
||||
exit 0
|
||||
elif [ "$ACTION" = "leftbottomedge" ]; then
|
||||
sxmo_type.sh s
|
||||
exit 0
|
||||
fi
|
||||
;;
|
||||
*"less"*)
|
||||
case "$ACTION" in
|
||||
"leftbottomedge")
|
||||
sxmo_type.sh q
|
||||
exit 0
|
||||
;;
|
||||
"leftrightedge_short")
|
||||
sxmo_type.sh q
|
||||
exit 0
|
||||
;;
|
||||
*"onedown")
|
||||
sxmo_type.sh u
|
||||
exit 0
|
||||
;;
|
||||
*"oneup")
|
||||
sxmo_type.sh d
|
||||
exit 0
|
||||
;;
|
||||
*"oneleft")
|
||||
sxmo_type.sh ":n" -k Return
|
||||
exit 0
|
||||
;;
|
||||
*"oneright")
|
||||
sxmo_type.sh ":p" -k Return
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*"amfora"*)
|
||||
case "$ACTION" in
|
||||
"downright")
|
||||
sxmo_type.sh -k Tab
|
||||
exit 0
|
||||
;;
|
||||
"upleft")
|
||||
sxmo_type.sh -M Shift -k Tab
|
||||
exit 0
|
||||
;;
|
||||
*"onedown")
|
||||
sxmo_type.sh u
|
||||
exit 0
|
||||
;;
|
||||
*"oneup")
|
||||
sxmo_type.sh d
|
||||
exit 0
|
||||
;;
|
||||
*"oneright")
|
||||
sxmo_type.sh -k Return
|
||||
exit 0
|
||||
;;
|
||||
"upright")
|
||||
sxmo_type.sh -M Ctrl t
|
||||
exit 0
|
||||
;;
|
||||
*"oneleft")
|
||||
sxmo_type.sh b
|
||||
exit 0
|
||||
;;
|
||||
"downleft")
|
||||
sxmo_type.sh -M Ctrl w
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
# Now we try generic actions for terminal
|
||||
case "$ACTION" in
|
||||
*"onedown")
|
||||
case "$WMCLASS" in
|
||||
*"foot"*)
|
||||
sxmo_type.sh -M Shift -k Page_Up
|
||||
exit 0
|
||||
;;
|
||||
*"st"*)
|
||||
sxmo_type.sh -M Ctrl -M Shift -k b
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*"oneup")
|
||||
case "$WMCLASS" in
|
||||
*"foot"*)
|
||||
sxmo_type.sh -M Shift -k Page_Down
|
||||
exit 0
|
||||
;;
|
||||
*"st"*)
|
||||
sxmo_type.sh -M Ctrl -M Shift -k f
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
esac
|
||||
|
||||
#standard handling
|
||||
case "$ACTION" in
|
||||
"powerbutton_one")
|
||||
if echo "$WMCLASS" | grep -i "megapixels"; then
|
||||
sxmo_type.sh -k space
|
||||
fi
|
||||
# swallow: postwake calls sxmo_hook_unlock.sh
|
||||
exit 0
|
||||
;;
|
||||
"powerbutton_two")
|
||||
sxmo_keyboard.sh toggle
|
||||
exit 0
|
||||
;;
|
||||
"powerbutton_three")
|
||||
sxmo_killwindow.sh
|
||||
exit 0
|
||||
;;
|
||||
"rightleftedge")
|
||||
sxmo_wm.sh previousworkspace
|
||||
exit 0
|
||||
;;
|
||||
"leftrightedge")
|
||||
sxmo_wm.sh nextworkspace
|
||||
exit 0
|
||||
;;
|
||||
"twoleft")
|
||||
sxmo_wm.sh movepreviousworkspace
|
||||
exit 0
|
||||
;;
|
||||
"tworight")
|
||||
sxmo_wm.sh movenextworkspace
|
||||
exit 0
|
||||
;;
|
||||
"righttopedge")
|
||||
sxmo_brightness.sh up
|
||||
exit 0
|
||||
;;
|
||||
"lefttopedge")
|
||||
sxmo_brightness.sh down
|
||||
exit 0
|
||||
;;
|
||||
"upleftedge")
|
||||
sxmo_audio.sh vol up
|
||||
exit 0
|
||||
;;
|
||||
"downleftedge")
|
||||
sxmo_audio.sh vol down
|
||||
exit 0
|
||||
;;
|
||||
"upbottomedge")
|
||||
sxmo_keyboard.sh open
|
||||
exit 0
|
||||
;;
|
||||
"downbottomedge")
|
||||
sxmo_keyboard.sh close
|
||||
exit 0
|
||||
;;
|
||||
"downtopedge")
|
||||
sxmo_dmenu.sh isopen || sxmo_appmenu.sh &
|
||||
exit 0
|
||||
;;
|
||||
"twodowntopedge")
|
||||
sxmo_dmenu.sh isopen || sxmo_appmenu.sh sys &
|
||||
exit 0
|
||||
;;
|
||||
"uptopedge")
|
||||
sxmo_dmenu.sh close
|
||||
if pgrep mako >/dev/null; then
|
||||
makoctl dismiss --all
|
||||
elif pgrep dunst >/dev/null; then
|
||||
dunstctl close-all
|
||||
fi
|
||||
exit 0
|
||||
;;
|
||||
"twodownbottomedge")
|
||||
sxmo_killwindow.sh
|
||||
exit 0
|
||||
;;
|
||||
"uprightedge")
|
||||
sxmo_type.sh -k Up
|
||||
exit 0
|
||||
;;
|
||||
"downrightedge")
|
||||
sxmo_type.sh -k Down
|
||||
exit 0
|
||||
;;
|
||||
"leftrightedge_short")
|
||||
sxmo_type.sh -k Left
|
||||
exit 0
|
||||
;;
|
||||
"rightrightedge_short")
|
||||
sxmo_type.sh -k Right
|
||||
exit 0
|
||||
;;
|
||||
"rightbottomedge")
|
||||
sxmo_type.sh -k Return
|
||||
exit 0
|
||||
;;
|
||||
"leftbottomedge")
|
||||
sxmo_type.sh -k BackSpace
|
||||
exit 0
|
||||
;;
|
||||
"topleftcorner")
|
||||
sxmo_appmenu.sh sys &
|
||||
exit 0
|
||||
;;
|
||||
"toprightcorner")
|
||||
sxmo_appmenu.sh scripts &
|
||||
exit 0
|
||||
;;
|
||||
"bottomleftcorner")
|
||||
# could go into suspend? leaving blank for now.
|
||||
exit 0
|
||||
;;
|
||||
"bottomrightcorner")
|
||||
if [ "$(sxmo_rotate.sh isrotated)" = "right" ]; then
|
||||
sxmo_rotate.sh rotinvert
|
||||
else
|
||||
sxmo_rotate.sh rotright
|
||||
fi
|
||||
exit 0
|
||||
;;
|
||||
esac
|
@@ -1,28 +0,0 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: AGPL-3.0-only
|
||||
# Copyright 2022 Sxmo Contributors
|
||||
|
||||
# This hook is called when the system becomes unlocked again
|
||||
|
||||
# include common definitions
|
||||
# shellcheck source=scripts/core/sxmo_common.sh
|
||||
. sxmo_common.sh
|
||||
|
||||
sxmo_log "transitioning to stage unlock"
|
||||
printf unlock > "$SXMO_STATE"
|
||||
|
||||
sxmo_wakelock.sh lock stay_awake "${SXMO_UNLOCK_IDLE_TIME:-120}s"
|
||||
|
||||
sxmo_hook_statusbar.sh state_change &
|
||||
|
||||
sxmo_wm.sh dpms off
|
||||
sxmo_wm.sh inputevent touchscreen on
|
||||
sxmo_wm.sh inputevent stylus on
|
||||
superctl start sxmo_hook_lisgd
|
||||
|
||||
# suspend after if no activity after 120s
|
||||
sxmo_daemons.sh start idle_locker sxmo_idle.sh -w \
|
||||
timeout "1" '' \
|
||||
resume "sxmo_wakelock.sh lock stay_awake \"${SXMO_UNLOCK_IDLE_TIME:-120}s\""
|
||||
|
||||
wait
|
@@ -1 +0,0 @@
|
||||
three_button_touchscreen
|
@@ -1 +0,0 @@
|
||||
three_button_touchscreen
|
@@ -1 +0,0 @@
|
||||
three_button_touchscreen/
|
@@ -1 +0,0 @@
|
||||
three_button_touchscreen
|
@@ -1 +0,0 @@
|
||||
one_button_e_reader
|
@@ -1 +0,0 @@
|
||||
three_button_touchscreen
|
@@ -1 +0,0 @@
|
||||
three_button_touchscreen
|
@@ -1 +0,0 @@
|
||||
three_button_touchscreen
|
@@ -1 +0,0 @@
|
||||
three_button_touchscreen
|
@@ -1 +0,0 @@
|
||||
three_button_touchscreen
|
@@ -1 +0,0 @@
|
||||
three_button_touchscreen
|
@@ -1 +0,0 @@
|
||||
three_button_touchscreen
|
@@ -1 +0,0 @@
|
||||
three_button_touchscreen
|
@@ -1 +0,0 @@
|
||||
three_button_touchscreen
|
@@ -1 +0,0 @@
|
||||
three_button_touchscreen/
|
@@ -1 +0,0 @@
|
||||
three_button_touchscreen
|
@@ -1 +0,0 @@
|
||||
three_button_touchscreen
|
@@ -1 +0,0 @@
|
||||
three_button_touchscreen
|
@@ -1 +0,0 @@
|
||||
three_button_touchscreen
|
5
configs/default_hooks/sxmo_hook_after_call.sh
Normal file
5
configs/default_hooks/sxmo_hook_after_call.sh
Normal file
@@ -0,0 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
# This script is executed after the last call finished
|
||||
|
||||
sxmo_playerctl.sh resume_all
|
@@ -15,28 +15,40 @@ write_line_app() {
|
||||
executable="$1"
|
||||
label="$2"
|
||||
command="$3"
|
||||
inline="$4"
|
||||
if command -v "$executable" >/dev/null; then
|
||||
write_line "$label" "$command"
|
||||
if [ "$inline" != "" ]; then
|
||||
write_line "$label" "$command"
|
||||
else
|
||||
write_line "$label" "sxmo_wm.sh exec $command"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
write_line_app gnome-2048 "$icon_gam 2048" "gnome-2048"
|
||||
write_line_app jami-qt "$icon_msg Jami" "jami-qt"
|
||||
write_line_app aerc "$icon_eml Aerc" "sxmo_terminal.sh aerc"
|
||||
write_line_app geary "$icon_eml Geary" "geary"
|
||||
write_line_app amberol "$icon_mus Amberol" "amberol $XDG_MUSIC_DIR"
|
||||
write_line_app amfora "$icon_glb Amfora" "sxmo_terminal.sh amfora"
|
||||
write_line_app animatch "$icon_gam Animatch" "animatch"
|
||||
write_line_app harbour-amazfish-ui "$icon_wat Amazfish" "harbour-amazfish-ui"
|
||||
write_line_app alpine "$icon_eml Alpine" "sxmo_terminal.sh alpine"
|
||||
write_line_app anbox-launch "$icon_and Anbox" "anbox"
|
||||
write_line_app anki "$icon_str Anki" "anki"
|
||||
write_line_app audacity "$icon_mic Audacity" "audacity"
|
||||
write_line_app badwolf "$icon_glb Badwolf" "badwolf"
|
||||
write_line_app gnome-calculator "$icon_clc Calculator" "gnome-calculator"
|
||||
write_line_app calcurse "$icon_clk Calcurse" "sxmo_terminal.sh calcurse"
|
||||
write_line_app chatty "$icon_msg Chatty" "chatty"
|
||||
write_line_app cmus "$icon_mus Cmus" "sxmo_terminal.sh cmus"
|
||||
write_line_app com.github.geigi.cozy "$icon_mus Cozy" "com.github.geigi.cozy"
|
||||
write_line_app dino "$icon_msg Dino" "GDK_SCALE=1 dino"
|
||||
write_line_app dolphin "$icon_dir Dolphin" "dolphin"
|
||||
write_line_app emacs "$icon_edt Emacs (Terminal)" "sxmo_terminal.sh emacs -nw"
|
||||
write_line_app emacs "$icon_edt Emacs (X)" "emacs"
|
||||
write_line_app epiphany "$icon_glb Epiphany" "epiphany"
|
||||
write_line_app epy "$icon_bok Epy" "sxmo_terminal.sh epy"
|
||||
write_line_app epr "$icon_bok Epr" "sxmo_terminal.sh epr"
|
||||
write_line_app evince "$icon_bok Evince" "evince"
|
||||
write_line_app falkon "$icon_flk Falkon" "falkon"
|
||||
write_line_app firefox "$icon_ffx Firefox" "firefox"
|
||||
@@ -45,13 +57,16 @@ write_line_app foliate "$icon_bok Foliate" "foliate"
|
||||
( [ "$SXMO_WM" = sway ] && command -v foot >/dev/null) && \
|
||||
write_line "$icon_trm Foot" "foot $SHELL"
|
||||
write_line_app foxtrotgps "$icon_gps Foxtrotgps" "foxtrotgps"
|
||||
write_line_app g4music "$icon_mus G4Music" "g4music"
|
||||
write_line_app geany "$icon_eml Geany" "geany"
|
||||
write_line_app geary "$icon_eml Geary" "geary"
|
||||
write_line_app gedit "$icon_edt Gedit" "gedit"
|
||||
write_line_app geeqie "$icon_img Geeqie" "geeqie"
|
||||
write_line_app geopard "$icon_glb Geopard" "geopard"
|
||||
write_line_app gerbil "$icon_glb Gerbil" "gerbil"
|
||||
write_line_app giara "$icon_red Giara" "giara"
|
||||
write_line_app gnome-chess "$icon_chs Gnome Chess" "gnome-chess"
|
||||
write_line_app gnome-weather "$icon_wtr Gnome Weather" "gnome-weather"
|
||||
write_line_app gomuks "$icon_msg Gomuks" "sxmo_terminal.sh gomuks"
|
||||
write_line_app gpodder "$icon_rss gPodder" "gpodder"
|
||||
write_line_app gucharmap "$icon_inf Gucharmap" "gucharmap"
|
||||
@@ -62,17 +77,23 @@ write_line_app ii "$icon_msg Ii" "sxmo_terminal.sh ii"
|
||||
write_line_app ipython "$icon_trm IPython" "sxmo_terminal.sh ipython"
|
||||
write_line_app kasts "$icon_rss Kasts" "kasts"
|
||||
write_line_app kmail "$icon_eml KMail" "kmail"
|
||||
write_line_app komikku "$icon_bok Komikku" "komikku"
|
||||
write_line_app kontact "$icon_msg Kontact" "kontact"
|
||||
write_line_app konversation "$icon_msg Konversation" "konversation"
|
||||
write_line_app koreader "$icon_bok KOReader" "koreader"
|
||||
write_line_app kwrite "$icon_edt Kwrite" "kwrite"
|
||||
write_line_app lagrange "$icon_glb Lagrange" "lagrange"
|
||||
write_line_app lemoa "$icon_grp Lemoa" "lemoa"
|
||||
write_line_app lf "$icon_dir Lf" "sxmo_terminal.sh lf"
|
||||
write_line_app librewolf "$icon_glb Librewolf" "librewolf"
|
||||
write_line_app lollypop "$icon_mus Lollypop" "lollypop"
|
||||
write_line_app luakit "$icon_glb Luakit" "luakit"
|
||||
write_line_app marble "$icon_map Marble" "marble"
|
||||
write_line_app gnome-maps "$icon_map Maps" "gnome-maps"
|
||||
write_line_app micro "$icon_edt Micro" "sxmo_terminal.sh micro"
|
||||
write_line_app midori "$icon_glb Midori" "midori"
|
||||
write_line_app mutt "$icon_eml Mutt" "sxmo_terminal.sh mutt"
|
||||
write_line_app mumble "$icon_grp Mumble" mumble
|
||||
write_line_app nano "$icon_edt Nano" "sxmo_terminal.sh nano"
|
||||
write_line_app navit "$icon_gps Navit" "navit"
|
||||
write_line_app ncmpcpp "$icon_mus Ncmpcpp" "sxmo_terminal.sh ncmpcpp"
|
||||
@@ -83,11 +104,15 @@ write_line_app netsurf "$icon_glb Netsurf" "netsurf"
|
||||
write_line_app newsboat "$icon_rss Newsboat" "sxmo_terminal.sh newsboat"
|
||||
write_line_app com.gitlab.newsflash "$icon_rss Newsflash" com.gitlab.newsflash
|
||||
write_line_app nnn "$icon_dir Nnn" "sxmo_terminal.sh nnn"
|
||||
write_line_app io.github.lainsce.Notejot "$icon_drw Notejot" io.github.lainsce.Notejot
|
||||
write_line_app numberstation "$icon_clc Numberstation" "numberstation"
|
||||
write_line_app osmin "$icon_map Osmin" "osmin"
|
||||
write_line_app pidgin "$icon_msg Pidgin" "pidgin"
|
||||
write_line_app pulsemixer "$icon_mus Pulsemixer" "sxmo_terminal.sh pulsemixer"
|
||||
write_line_app pure-maps "$icon_map Pure-Maps" "pure-maps"
|
||||
write_line_app mepo "$icon_map mepo" "mepo"
|
||||
write_line_app podboat "$icon_rss Podboat" "sxmo_terminal.sh podboat"
|
||||
write_line_app dev.tchx84.Portfolio "$icon_dir Portfolio" "dev.tchx84.Portfolio"
|
||||
write_line_app profanity "$icon_msg Profanity" "sxmo_terminal.sh profanity"
|
||||
write_line_app qutebrowser "$icon_glb Qutebrowser" "qutebrowser"
|
||||
write_line_app ranger "$icon_dir Ranger" "sxmo_terminal.sh ranger"
|
||||
@@ -99,16 +124,20 @@ write_line_app sic "$icon_msg Sic" "sxmo_terminal.sh sic"
|
||||
write_line "$icon_trm St" "st -e $SHELL"
|
||||
write_line_app surf "$icon_glb Surf" "surf"
|
||||
write_line_app syncthing "$icon_rld Syncthing" "syncthing"
|
||||
write_line_app syncthing-gtk "$icon_rld Syncthing GTK" "syncthing-gtk"
|
||||
write_line_app telegram-desktop "$icon_tgm Telegram" "telegram-desktop"
|
||||
write_line_app termite "$icon_trm Termite" "termite -e $SHELL"
|
||||
write_line_app thunar "$icon_dir Thunar" "sxmo_terminal.sh thunar"
|
||||
write_line_app thunderbird "$icon_eml Thunderbird" "thunderbird"
|
||||
write_line_app com.github.bleakgrey.tootle "$icon_msg Tootle" "com.github.bleakgrey.tootle"
|
||||
write_line_app re.sonny.Tangram "$icon_glb Tangram" "re.sonny.Tangram"
|
||||
write_line_app totem "$icon_mvi Totem" "totem"
|
||||
write_line_app dev.geopjr.Tuba "$icon_msg Tuba" "dev.geopjr.Tuba"
|
||||
write_line_app tuir "$icon_red Tuir" "sxmo_terminal.sh tuir"
|
||||
write_line_app tut "$icon_msg Tut" "sxmo_terminal.sh tut"
|
||||
write_line_app waydroid "$icon_and Waydroid" "waydroid show-full-ui"
|
||||
write_line_app weechat "$icon_msg Weechat" "sxmo_terminal.sh weechat"
|
||||
write_line_app wike "$icon_bok Wike" "wike"
|
||||
write_line_app pavucontrol "$icon_mus Pavucontrol" "pavucontrol"
|
||||
write_line_app w3m "$icon_glb W3m" "sxmo_terminal.sh w3m duck.com"
|
||||
write_line_app vim "$icon_vim Vim" "sxmo_terminal.sh vim"
|
||||
@@ -122,4 +151,4 @@ write_line_app vte-2.91-gtk4 "$icon_trm VTE 3 (GTK-4)" "vte-2.91-gtk4"
|
||||
write_line_app xournal "$icon_bok Xournal" "xournal"
|
||||
write_line_app xournalpp "$icon_bok Xournalpp" "xournalpp"
|
||||
write_line_app zathura "$icon_bok Zathura" "zathura"
|
||||
write_line_app j4-dmenu-desktop "$icon_grd All apps" "j4-dmenu-desktop --dmenu=sxmo_dmenu.sh --term=sxmo_terminal.sh"
|
||||
write_line_app j4-dmenu-desktop "$icon_grd All apps" "j4-dmenu-desktop --dmenu=sxmo_dmenu.sh --term=sxmo_terminal.sh --wrapper='sxmo_wm.sh exec'" "inline"
|
||||
|
41
configs/default_hooks/sxmo_hook_battery.sh
Executable file
41
configs/default_hooks/sxmo_hook_battery.sh
Executable file
@@ -0,0 +1,41 @@
|
||||
#!/bin/sh
|
||||
|
||||
load_data() {
|
||||
data="$(upower -i "$1" | grep . | sed -e 's|^ \+||' -e 's|: \+|:|')"
|
||||
type="$(printf "%b" "$data" | grep -m1 -v : | sed -e 's|^ \+||')"
|
||||
}
|
||||
|
||||
data_get() {
|
||||
printf "%b" "$data" | grep "^$1:" | cut -d: -f2
|
||||
}
|
||||
|
||||
device_changed() {
|
||||
name="$(data_get "native-path")"
|
||||
state="$(data_get "state")"
|
||||
percentage="$(data_get "percentage" | cut -d% -f1)"
|
||||
|
||||
if [ -z "$name" ] || [ -z "$state" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ "$state" = unknown ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
sxmo_hook_statusbar.sh battery "$name" "$state" "$percentage"
|
||||
}
|
||||
|
||||
object="$1"
|
||||
event="$2"
|
||||
|
||||
load_data "$object"
|
||||
|
||||
if [ "$type" != "battery" ]; then
|
||||
exit
|
||||
fi
|
||||
|
||||
case "$event" in
|
||||
"device changed")
|
||||
device_changed "$object"
|
||||
;;
|
||||
esac
|
@@ -30,6 +30,7 @@ delay() {
|
||||
wait_item() {
|
||||
delay_time=1
|
||||
while $1 > /dev/null 2>&1; do
|
||||
sxmo_log "Blocking suspend for $1"
|
||||
waited=1
|
||||
${2:-delay}
|
||||
done
|
||||
@@ -47,6 +48,10 @@ in_call() {
|
||||
pgrep -f sxmo_modemcall.sh
|
||||
}
|
||||
|
||||
in_call_dino() {
|
||||
command -v pw-link && [ -n "$(pw-link -o Dino)" ]
|
||||
}
|
||||
|
||||
hotspot_active() {
|
||||
nmcli -t c show --active | grep -q ^Hotspot
|
||||
}
|
||||
@@ -68,7 +73,7 @@ playing_mpc() {
|
||||
}
|
||||
|
||||
playing_mpris() {
|
||||
command -v playerctl && [ "$(playerctl status)" = "Playing" ]
|
||||
command -v playerctl && playerctl -a status | grep -q "Playing"
|
||||
}
|
||||
|
||||
photos_processing() {
|
||||
@@ -82,6 +87,7 @@ while [ "$waited" != "0" ]; do
|
||||
waited=0
|
||||
wait_item suspend_disabled
|
||||
wait_item in_call
|
||||
wait_item in_call_dino
|
||||
wait_item hotspot_active
|
||||
wait_item ssh_connected
|
||||
wait_item active_mosh
|
||||
|
@@ -21,6 +21,7 @@ if [ "$1" = "enable" ]; then
|
||||
|
||||
# Add other things here, e.g., volume boosters
|
||||
|
||||
sxmo_modemaudio.sh is_disabled_speaker && sxmo_modemaudio.sh is_unmuted_mic
|
||||
# Phonecall ended
|
||||
elif [ "$1" = "disable" ]; then
|
||||
sxmo_log "Attempting hack to get things just right."
|
||||
@@ -30,4 +31,5 @@ elif [ "$1" = "disable" ]; then
|
||||
|
||||
# Add other things here, e.g., volume boosters
|
||||
|
||||
sxmo_modemaudio.sh is_enabled_speaker
|
||||
fi
|
||||
|
@@ -19,7 +19,7 @@ superd_service_isrunning() {
|
||||
}
|
||||
|
||||
sxmo_service_isrunning() {
|
||||
sxmo_daemons.sh running "$1" > /dev/null
|
||||
sxmo_jobs.sh running "$1" > /dev/null
|
||||
}
|
||||
|
||||
if [ -z "$XPROPOUT" ]; then
|
||||
@@ -74,7 +74,7 @@ case "$WMCLASS" in
|
||||
$icon_cfg Gestures $(
|
||||
superd_service_isrunning "sxmo_hook_lisgd" &&
|
||||
printf "%s" "$icon_ton" || printf "%s" "$icon_tof"
|
||||
) ^ 1 ^ supertoggle_daemon 'sxmo_hook_lisgd'
|
||||
) ^ 1 ^ supertoggle_daemon 'sxmo_hook_lisgd' && (rm $XDG_CACHE_HOME/sxmo/sxmo.nogesture 2>/dev/null || touch $XDG_CACHE_HOME/sxmo/sxmo.nogesture)
|
||||
$icon_cfg Toggle Bar ^ 0 ^ sxmo_wm.sh togglebar
|
||||
$icon_bth Bluetooth $(
|
||||
rfkill list bluetooth | grep -q "yes" &&
|
||||
@@ -85,21 +85,25 @@ case "$WMCLASS" in
|
||||
$icon_clk Change Timezone ^ 1 ^ sxmo_timezonechange.sh
|
||||
$icon_zzz Auto-suspend $(
|
||||
[ -e "$XDG_CACHE_HOME"/sxmo/sxmo.nosuspend ] && printf "%s" "$icon_tof" || printf "%s" "$icon_ton"
|
||||
) ^ 1 ^ (rm $XDG_CACHE_HOME/sxmo/sxmo.nosuspend || touch $XDG_CACHE_HOME/sxmo/sxmo.nosuspend)
|
||||
) ^ 1 ^ (rm $XDG_CACHE_HOME/sxmo/sxmo.nosuspend 2>/dev/null || touch $XDG_CACHE_HOME/sxmo/sxmo.nosuspend)
|
||||
$icon_zzz Auto-screen-off $(
|
||||
[ -e "$XDG_CACHE_HOME/sxmo/sxmo.noidle" ] && printf "%s" "$icon_tof" || printf "%s" "$icon_ton"
|
||||
) ^ 1 ^ (rm $XDG_CACHE_HOME/sxmo/sxmo.noidle || touch $XDG_CACHE_HOME/sxmo/sxmo.noidle) && sxmo_hook_unlock.sh
|
||||
) ^ 1 ^ (rm $XDG_CACHE_HOME/sxmo/sxmo.noidle 2>/dev/null || touch $XDG_CACHE_HOME/sxmo/sxmo.noidle) && sxmo_state.sh set unlock
|
||||
$icon_ror Autorotate $(
|
||||
sxmo_daemons.sh running autorotate -q &&
|
||||
sxmo_jobs.sh running autorotate -q &&
|
||||
printf "%s" "$icon_ton" || printf "%s" "$icon_tof"
|
||||
) ^ 1 ^ toggle_daemon 'Autorotate' autorotate sxmo_autorotate.sh
|
||||
$([ -n "$SXMO_KEYBOARD_SLIDER_EVENT_DEVICE" ] && echo "$icon_ror Autorotate on Keyboard Open/Close $(
|
||||
sxmo_jobs.sh running kb_autorotate -q &&
|
||||
printf "%s" "$icon_ton" || printf "%s" "$icon_tof"
|
||||
) ^ 1 ^ toggle_daemon 'Keyboard Autorotate' kb_autorotate sxmo_keyboard_autorotate.sh")
|
||||
$icon_ror Rotate ^ 1 ^ sxmo_rotate.sh rotate
|
||||
$icon_trm Hooks ^ 0 ^ sxmo_hookmenu.sh
|
||||
$icon_upc Upgrade Pkgs ^ 0 ^ sxmo_terminal.sh sxmo_upgrade.sh
|
||||
$icon_sfl Migrate configuration ^ 0 ^ sxmo_terminal.sh sxmo_migrate.sh
|
||||
$icon_cfg Edit configuration ^ 0 ^ sxmo_terminal.sh $EDITOR $XDG_CONFIG_HOME/sxmo/$(test "$SXMO_WM" = sway && printf sway || printf xinit)
|
||||
$(command -v pmos-tweaks >/dev/null && echo "$icon_cfg PostmarketOS Tweaks ^ 0 ^ GDK_SCALE=1 pmos-tweaks")
|
||||
$icon_cfg Suspend Blockers ^ 0 ^ sxmo_terminal.sh sxmo_wakelock.sh debug watch
|
||||
$icon_cfg Suspend Blockers ^ 0 ^ sxmo_terminal.sh sxmo_debug_suspend.sh
|
||||
$icon_inf Version ^ 0 ^ sxmo_terminal.sh sxmo_version.sh --block
|
||||
"
|
||||
WINNAME=Config
|
||||
@@ -107,8 +111,8 @@ case "$WMCLASS" in
|
||||
power)
|
||||
# Power menu
|
||||
CHOICES="
|
||||
$icon_lck Lock ^ 0 ^ sxmo_hook_lock.sh
|
||||
$icon_lck Lock (Screen off) ^ 0 ^ sxmo_hook_screenoff.sh
|
||||
$icon_lck Lock ^ 0 ^ sxmo_state.sh set lock
|
||||
$icon_lck Lock (Screen off) ^ 0 ^ sxmo_state.sh set screenoff
|
||||
$icon_out Logout ^ 0 ^ confirm Logout && sxmo_power.sh logout
|
||||
$([ -f "$(xdg_data_path xsessions/sxmo.desktop)" ] &&
|
||||
[ -f "$(xdg_data_path wayland-sessions/swmo.desktop)" ] &&
|
||||
@@ -136,6 +140,14 @@ case "$WMCLASS" in
|
||||
"
|
||||
WINNAME=Mpv
|
||||
;;
|
||||
io.bassi.amberol)
|
||||
CHOICES="
|
||||
$icon_pau Play/Pause ^ 0 ^ playerctl play-pause
|
||||
$icon_prv Previous Track ^ 1 ^ playerctl previous
|
||||
$icon_nxt Next Track ^ 1 ^ playerctl next
|
||||
"
|
||||
WINNAME=Amberol
|
||||
;;
|
||||
*feh*)
|
||||
# Feh
|
||||
CHOICES="
|
||||
@@ -598,6 +610,7 @@ case "$WMCLASS" in
|
||||
*geopard*)
|
||||
# Geopard
|
||||
CHOICES="
|
||||
$icon_flt Pipe URL ^ 0 ^ sxmo_urlhandler.sh
|
||||
$icon_pls New Tab ^ 0 ^ sxmo_type -M Ctrl t
|
||||
$icon_cls Close Tab ^ 0 ^ sxmo_type -M Ctrl w
|
||||
$icon_bok Open Bookmarks ^ 0 ^ sxmo_type -M Ctrl b
|
||||
@@ -627,6 +640,19 @@ case "$WMCLASS" in
|
||||
"
|
||||
WINNAME=Lagrange
|
||||
;;
|
||||
org.gnome.maps)
|
||||
CHOICES="
|
||||
$icon_gps Toggle Geoclue ^ 0 ^ superctl status geoclue-agent |grep started >/dev/null && superctl stop geoclue-agent || superctl start geoclue-agent
|
||||
$icon_zmi Zoom in ^ 1 ^ sxmo_type -M ctrl =
|
||||
$icon_zmo Zoom out ^ 1 ^ sxmo_type -M ctrl -k minus
|
||||
$icon_fnd Explore POI ^ 0 ^ sxmo_type -M ctrl -M Shift F
|
||||
$icon_fnd Search ^ 0 ^ sxmo_type -M ctrl f && sxmo_keyboard.sh open
|
||||
$icon_lst Show last results ^ 0 ^ sxmo_type -M ctrl r
|
||||
$icon_map Toggle route planner ^ 0 ^ sxmo_type -M ctrl d
|
||||
$icon_gps Show current location ^ 0 ^ sxmo_type -M ctrl l
|
||||
"
|
||||
WINNAME=Maps
|
||||
;;
|
||||
*mepo*)
|
||||
# Mepo
|
||||
# The choices / hotkeys for the contextmenu are generated through mepo's
|
||||
@@ -671,6 +697,7 @@ case "$WMCLASS" in
|
||||
$icon_net Networks ^ 0 ^ sxmo_networks.sh
|
||||
$icon_mus Audio ^ 0 ^ sxmo_audio.sh
|
||||
$icon_phn Modem ^ 0 ^ sxmo_appmenu.sh modem
|
||||
$icon_win Windows ^ 0 ^ sxmo_wmmenu.sh
|
||||
$icon_cfg Config ^ 0 ^ sxmo_appmenu.sh config
|
||||
$icon_pwr Power ^ 0 ^ sxmo_appmenu.sh power
|
||||
"
|
||||
|
@@ -7,10 +7,6 @@
|
||||
# up the call).
|
||||
|
||||
# kill existing ring playback
|
||||
if [ -e "$XDG_RUNTIME_DIR/sxmo.ring.pid" ]; then
|
||||
MPVID="$(cat "$XDG_RUNTIME_DIR/sxmo.ring.pid")"
|
||||
kill "$MPVID"
|
||||
rm "$XDG_RUNTIME_DIR/sxmo.ring.pid"
|
||||
fi
|
||||
sxmo_jobs.sh stop ringing
|
||||
|
||||
sxmo_playerctl.sh resume_all
|
||||
|
@@ -1,5 +1,3 @@
|
||||
#!/bin/sh
|
||||
|
||||
# This script is executed (asynchronously) when you hangup an incoming call
|
||||
|
||||
sxmo_playerctl.sh resume_all
|
||||
|
@@ -57,7 +57,7 @@ icon_fil="" #file
|
||||
icon_flk="" #falkon
|
||||
icon_fll="" #flashlight
|
||||
icon_flt="" #filter/pipe
|
||||
icon_fnd="" #search/find
|
||||
icon_fnd="" #search/find
|
||||
icon_gam="" # gaming controller (🎮)
|
||||
icon_glb="" #globe
|
||||
icon_gps='' #gps
|
||||
@@ -65,6 +65,7 @@ icon_grd=""
|
||||
icon_grp="" #group
|
||||
icon_hdp="" #headphones
|
||||
icon_hom=""
|
||||
icon_hst="" #headset🗣️
|
||||
icon_img=""
|
||||
icon_inf="" #info
|
||||
icon_itm="" #item (default)
|
||||
@@ -135,8 +136,8 @@ icon_wn2=""
|
||||
icon_wrh=""
|
||||
icon_wtr="" #weather
|
||||
icon_ytb="" #youtube
|
||||
icon_zmi=""
|
||||
icon_zmo=""
|
||||
icon_zmi="" # Zoom in/magnify
|
||||
icon_zmo="" # Zoom out/demagnify
|
||||
icon_zzz="" #sleep/suspend/crust
|
||||
|
||||
# modem states
|
||||
|
@@ -12,30 +12,7 @@ ACTION="$1"
|
||||
. sxmo_common.sh
|
||||
|
||||
stop_proximity_lock() {
|
||||
sxmo_daemons.sh stop proximity_lock
|
||||
}
|
||||
|
||||
# this action will move the lock state $1 levels higher
|
||||
lock_screen_action() {
|
||||
count="${1:-1}"
|
||||
|
||||
state="$(cat "$SXMO_STATE")"
|
||||
while [ "$count" -gt 0 ]; do
|
||||
case "$state" in
|
||||
unlock)
|
||||
state=screenoff
|
||||
;;
|
||||
screenoff)
|
||||
state=lock
|
||||
;;
|
||||
lock)
|
||||
state=unlock
|
||||
;;
|
||||
esac
|
||||
count=$((count-1))
|
||||
done
|
||||
|
||||
sxmo_hook_"$state".sh
|
||||
sxmo_jobs.sh stop proximity_lock
|
||||
}
|
||||
|
||||
XPROPOUT="$(sxmo_wm.sh focusedwindow)"
|
||||
@@ -45,19 +22,29 @@ WMNAME="$(printf %s "$XPROPOUT" | grep title: | cut -d" " -f2- | tr '[:upper:]'
|
||||
sxmo_debug "STATE: $(cat "$SXMO_STATE") ACTION: $ACTION WMCLASS: $WMCLASS WMNAME: $WMNAME"
|
||||
|
||||
if ! grep -q unlock "$SXMO_STATE"; then
|
||||
case "$WMNAME" in # Handle programs
|
||||
*"epy"*|*"epr"*)
|
||||
case "$ACTION" in
|
||||
"voldown_one")
|
||||
sxmo_type.sh l
|
||||
exit 0
|
||||
;;
|
||||
"volup_one")
|
||||
sxmo_type.sh h
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
case "$ACTION" in
|
||||
"powerbutton_one")
|
||||
lock_screen_action
|
||||
sxmo_state.sh click
|
||||
;;
|
||||
"powerbutton_two")
|
||||
lock_screen_action 2
|
||||
sxmo_state.sh click 2
|
||||
;;
|
||||
"powerbutton_three")
|
||||
if grep -q proximity "$SXMO_STATE"; then
|
||||
stop_proximity_lock
|
||||
else
|
||||
lock_screen_action 2
|
||||
fi
|
||||
sxmo_state.sh click 2
|
||||
;;
|
||||
"voldown_one")
|
||||
sxmo_audio.sh vol down 5
|
||||
@@ -110,9 +97,75 @@ case "$WMCLASS" in
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*"foot"*|*"st"*|*"vte"*|"terminal")
|
||||
# First we try to handle the app running inside st:
|
||||
case "$WMNAME" in
|
||||
*"foot"*|*"st"*|*"vte"*|"terminal") # Terminals
|
||||
case "$WMCLASS" in # Handle programs without touch support
|
||||
*"st"*)
|
||||
case "$WMNAME" in
|
||||
*"weechat"*|*'gomuks'*)
|
||||
case "$ACTION" in
|
||||
*"onedown")
|
||||
sxmo_type.sh -k Page_Up
|
||||
exit 0
|
||||
;;
|
||||
*"oneup")
|
||||
sxmo_type.sh -k Page_Down
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*"less"*|*"amfora"*)
|
||||
case "$ACTION" in
|
||||
*"onedown")
|
||||
sxmo_type.sh u
|
||||
exit 0
|
||||
;;
|
||||
*"oneup")
|
||||
sxmo_type.sh d
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*'irssi'*)
|
||||
case "$ACTION" in
|
||||
"onedown")
|
||||
sxmo_type.sh -M Alt p
|
||||
exit 0
|
||||
;;
|
||||
"oneup")
|
||||
sxmo_type.sh -M Alt n
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*'epy'*|*'epr'*)
|
||||
case "$ACTION" in
|
||||
"onedown")
|
||||
sxmo_type.sh h
|
||||
exit 0
|
||||
;;
|
||||
"oneup")
|
||||
sxmo_type.sh l
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*'nnn'*|'lf')
|
||||
case "$ACTION" in
|
||||
"onedown")
|
||||
sxmo_type.sh -k Down
|
||||
exit 0
|
||||
;;
|
||||
"oneup")
|
||||
sxmo_type.sh -k Up
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$WMNAME" in # Handle programs
|
||||
*"weechat"*)
|
||||
case "$ACTION" in
|
||||
*"oneleft")
|
||||
@@ -123,14 +176,6 @@ case "$WMCLASS" in
|
||||
sxmo_type.sh -M Alt -k less
|
||||
exit 0
|
||||
;;
|
||||
*"oneup")
|
||||
sxmo_type.sh -k Page_Down
|
||||
exit 0
|
||||
;;
|
||||
*"onedown")
|
||||
sxmo_type.sh -k Page_Up
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*" sms")
|
||||
@@ -161,14 +206,6 @@ case "$WMCLASS" in
|
||||
sxmo_type.sh q
|
||||
exit 0
|
||||
;;
|
||||
*"onedown")
|
||||
sxmo_type.sh u
|
||||
exit 0
|
||||
;;
|
||||
*"oneup")
|
||||
sxmo_type.sh d
|
||||
exit 0
|
||||
;;
|
||||
*"oneleft")
|
||||
sxmo_type.sh ":n" -k Return
|
||||
exit 0
|
||||
@@ -189,14 +226,6 @@ case "$WMCLASS" in
|
||||
sxmo_type.sh -M Shift -k Tab
|
||||
exit 0
|
||||
;;
|
||||
*"onedown")
|
||||
sxmo_type.sh u
|
||||
exit 0
|
||||
;;
|
||||
*"oneup")
|
||||
sxmo_type.sh d
|
||||
exit 0
|
||||
;;
|
||||
*"oneright")
|
||||
sxmo_type.sh -k Return
|
||||
exit 0
|
||||
@@ -215,76 +244,59 @@ case "$WMCLASS" in
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*'irssi'*)
|
||||
*"epy"*|*"epr"*)
|
||||
case "$ACTION" in
|
||||
"onedown")
|
||||
sxmo_type.sh -M Alt p
|
||||
*"left"|"voldown_one")
|
||||
sxmo_type.sh l
|
||||
exit 0
|
||||
;;
|
||||
"oneup")
|
||||
sxmo_type.sh -M Alt n
|
||||
*"right"|"volup_one")
|
||||
sxmo_type.sh h
|
||||
exit 0
|
||||
;;
|
||||
"voldown_three"|"twodownbottomedge")
|
||||
sxmo_type.sh q
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*'gomuks'*)
|
||||
*'nnn'*|'lf')
|
||||
case "$ACTION" in
|
||||
*"oneup")
|
||||
sxmo_type.sh -k Page_Down
|
||||
*"left")
|
||||
sxmo_type.sh -k Right
|
||||
exit 0
|
||||
;;
|
||||
*"onedown")
|
||||
sxmo_type.sh -k Page_Up
|
||||
*"right")
|
||||
sxmo_type.sh -k Left
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
# Now we try generic actions for terminal
|
||||
case "$ACTION" in
|
||||
*"onedown")
|
||||
case "$WMCLASS" in
|
||||
*"foot"*)
|
||||
sxmo_type.sh -M Shift -k Page_Up
|
||||
exit 0
|
||||
;;
|
||||
*"st"*)
|
||||
|
||||
case "$WMCLASS" in # Handle general scrolling without touch support
|
||||
*"st"*)
|
||||
case "$ACTION" in
|
||||
*"onedown")
|
||||
sxmo_type.sh -M Ctrl -M Shift -k b
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*"oneup")
|
||||
case "$WMCLASS" in
|
||||
*"foot"*)
|
||||
sxmo_type.sh -M Shift -k Page_Down
|
||||
exit 0
|
||||
;;
|
||||
*"st"*)
|
||||
*"oneup")
|
||||
sxmo_type.sh -M Ctrl -M Shift -k f
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
"uprightedge")
|
||||
case "$WMCLASS" in
|
||||
"org.gnome.vte.application"|"terminal")
|
||||
# For VTE, fallback to doing nothing,
|
||||
# you're probably dragging the scrollbar
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
"downrightedge")
|
||||
case "$WMCLASS" in
|
||||
"org.gnome.vte.application"|"terminal")
|
||||
# For VTE, fallback to doing nothing,
|
||||
# you're probably dragging the scrollbar
|
||||
exit 0
|
||||
;;
|
||||
"org.gnome.vte.application"|"terminal")
|
||||
case "$ACTION" in
|
||||
# For VTE, fallback to doing nothing,
|
||||
# you're probably dragging the scrollbar
|
||||
*"uprightedge") exit 0 ;;
|
||||
*"downrightedge") exit 0 ;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
||||
#standard handling
|
||||
@@ -293,20 +305,16 @@ case "$ACTION" in
|
||||
if echo "$WMCLASS" | grep -i "megapixels"; then
|
||||
sxmo_type.sh -k space
|
||||
else
|
||||
lock_screen_action
|
||||
sxmo_state.sh click
|
||||
fi
|
||||
exit 0
|
||||
;;
|
||||
"powerbutton_two")
|
||||
lock_screen_action 2
|
||||
sxmo_state.sh click 2
|
||||
exit 0
|
||||
;;
|
||||
"powerbutton_three")
|
||||
if grep -q proximity "$SXMO_STATE"; then
|
||||
stop_proximity_lock
|
||||
else
|
||||
sxmo_terminal.sh
|
||||
fi
|
||||
sxmo_terminal.sh
|
||||
exit 0
|
||||
;;
|
||||
"voldown_one")
|
||||
@@ -427,14 +435,12 @@ case "$ACTION" in
|
||||
exit 0
|
||||
;;
|
||||
"bottomleftcorner")
|
||||
if grep -q proximity "$SXMO_STATE"; then
|
||||
exit
|
||||
fi
|
||||
sxmo_dmenu.sh close
|
||||
sxmo_keyboard.sh close
|
||||
if [ -n "$WMCLASS" ]; then
|
||||
sxmo_hook_lock.sh
|
||||
sxmo_state.sh set lock
|
||||
else
|
||||
sxmo_hook_screenoff.sh
|
||||
sxmo_state.sh set screenoff
|
||||
fi
|
||||
exit 0
|
||||
;;
|
@@ -8,7 +8,7 @@
|
||||
|
||||
LISGD_THRESHOLD="${SXMO_LISGD_THRESHOLD:-125}"
|
||||
LISGD_THRESHOLD_PRESSED="${SXMO_LISGD_THRESHOLD_PRESSED:-60}"
|
||||
LISGD_INPUT_DEVICE="${SXMO_LISGD_INPUT_DEVICE:-"/dev/input/touchscreen"}"
|
||||
LISGD_INPUT_DEVICE="${SXMO_LISGD_INPUT_DEVICE:-"/dev/input/by-path/first-touchscreen"}"
|
||||
|
||||
if [ dwm = "$SXMO_WM" ]; then
|
||||
case "$(xrandr | grep primary | cut -d' ' -f 5)" in
|
||||
@@ -23,7 +23,7 @@ fi
|
||||
# fingers,swipe,edge,distance,command
|
||||
#order matters, only the first match gets executed
|
||||
lisgd "$@" -d "$LISGD_INPUT_DEVICE" ${orientation:+-o $orientation} \
|
||||
-t "$LISGD_THRESHOLD" -T "$LISGD_THRESHOLD_PRESSED" \
|
||||
-s "${LISGD_EDGE_SIZE:-1.0}" -t "$LISGD_THRESHOLD" -T "$LISGD_THRESHOLD_PRESSED" \
|
||||
-g "1,DRUL,BR,*,setsid -f sxmo_hook_inputhandler.sh bottomrightcorner" \
|
||||
-g "1,DLUR,BL,*,setsid -f sxmo_hook_inputhandler.sh bottomleftcorner" \
|
||||
-g "1,ULDR,TL,*,setsid -f sxmo_hook_inputhandler.sh topleftcorner" \
|
||||
|
@@ -14,30 +14,23 @@
|
||||
# shellcheck source=scripts/core/sxmo_common.sh
|
||||
. sxmo_common.sh
|
||||
|
||||
exec 3<> "$SXMO_STATE.lock"
|
||||
flock -x 3
|
||||
|
||||
sxmo_log "transitioning to stage lock"
|
||||
printf lock > "$SXMO_STATE"
|
||||
|
||||
sxmo_wakelock.sh lock not_screenoff infinite
|
||||
|
||||
# This hook is called when the system reaches a locked state
|
||||
|
||||
sxmo_led.sh blink blue &
|
||||
sxmo_hook_statusbar.sh state_change &
|
||||
|
||||
[ "$SXMO_WM" = "sway" ] && swaymsg mode default
|
||||
sxmo_wm.sh dpms off
|
||||
sxmo_wm.sh inputevent touchscreen off
|
||||
|
||||
sxmo_daemons.sh stop periodic_blink
|
||||
sxmo_daemons.sh stop periodic_wakelock_check
|
||||
sxmo_jobs.sh stop periodic_blink
|
||||
sxmo_jobs.sh stop periodic_wakelock_check
|
||||
|
||||
# Go to screenoff after 8 seconds of inactivity
|
||||
if ! [ -e "$XDG_CACHE_HOME/sxmo/sxmo.noidle" ]; then
|
||||
sxmo_daemons.sh start idle_locker sxmo_idle.sh -w \
|
||||
timeout 8 "sxmo_hook_screenoff.sh"
|
||||
# Go down after 8 seconds of inactivity
|
||||
if [ -e "$XDG_CACHE_HOME/sxmo/sxmo.noidle" ]; then
|
||||
sxmo_jobs.sh stop idle_locker
|
||||
else
|
||||
sxmo_jobs.sh start idle_locker sxmo_idle.sh -w \
|
||||
timeout "${SXMO_LOCK_IDLE_TIME:-8}" "sxmo_state.sh idle"
|
||||
fi
|
||||
|
||||
wait
|
@@ -2,7 +2,7 @@
|
||||
# SPDX-License-Identifier: AGPL-3.0-only
|
||||
# Copyright 2022 Sxmo Contributors
|
||||
|
||||
sxmo_daemons.sh start idle_locker sxmo_idle.sh -w \
|
||||
sxmo_jobs.sh start idle_locker sxmo_idle.sh -w \
|
||||
timeout 10 'sxmo_wm.sh dpms on' \
|
||||
resume 'sxmo_wm.sh dpms off'
|
||||
|
||||
@@ -15,4 +15,5 @@ case "$SXMO_WM" in
|
||||
;;
|
||||
esac
|
||||
|
||||
sxmo_hook_unlock.sh
|
||||
# need & cause we are still holding flock
|
||||
sxmo_state.sh set unlock &
|
@@ -9,10 +9,4 @@
|
||||
# $1 = Contact Name or Number (if not in contacts)
|
||||
|
||||
# kill existing ring playback
|
||||
if [ -e "$XDG_RUNTIME_DIR/sxmo.ring.pid" ]; then
|
||||
MPVID="$(cat "$XDG_RUNTIME_DIR/sxmo.ring.pid")"
|
||||
kill "$MPVID"
|
||||
rm "$XDG_RUNTIME_DIR/sxmo.ring.pid"
|
||||
fi
|
||||
|
||||
sxmo_playerctl.sh resume_all
|
||||
sxmo_jobs.sh stop ringing
|
||||
|
@@ -24,7 +24,6 @@ case "$newstate" in
|
||||
"enabling")
|
||||
sxmo_log "State is enabling. Clearing stale call files."
|
||||
rm "$XDG_RUNTIME_DIR"/sxmo_calls/* 2>/dev/null
|
||||
rm -f "$XDG_RUNTIME_DIR"/sxmo.ring.pid 2>/dev/null
|
||||
rm -f "$SXMO_NOTIFDIR"/incomingcall* 2>/dev/null
|
||||
;;
|
||||
"registered")
|
||||
|
@@ -6,8 +6,6 @@
|
||||
# incoming call, i.e., ignore the call ringing in.
|
||||
|
||||
# kill existing ring playback
|
||||
if [ -e "$XDG_RUNTIME_DIR/sxmo.ring.pid" ]; then
|
||||
MPVID="$(cat "$XDG_RUNTIME_DIR/sxmo.ring.pid")"
|
||||
kill "$MPVID"
|
||||
rm "$XDG_RUNTIME_DIR/sxmo.ring.pid"
|
||||
fi
|
||||
sxmo_jobs.sh stop ringing
|
||||
|
||||
sxmo_playerctl.sh resume_all
|
||||
|
@@ -8,9 +8,9 @@
|
||||
#if [ ! -f "$XDG_CONFIG_HOME"/sxmo/.novibrate ]; then
|
||||
# VIBS=5
|
||||
# VIBI=0
|
||||
# while [ $VIBI -lt $VIBS ]; do
|
||||
# sxmo_vibrate 400 &
|
||||
# while [ "$VIBI" -lt "$VIBS" ]; do
|
||||
# sxmo_vibrate 400 "${SXMO_VIBRATE_STRENGTH:-1}" &
|
||||
# sleep 0.5
|
||||
# VIBI=$(echo $VIBI+1 | bc)
|
||||
# VIBI="$(echo "$VIBI+1" | bc)"
|
||||
# done
|
||||
#fi
|
||||
|
@@ -5,10 +5,4 @@
|
||||
# This script is executed (asynchronously) when you pick up an incoming call
|
||||
|
||||
# kill existing ring playback
|
||||
if [ -e "$XDG_RUNTIME_DIR/sxmo.ring.pid" ]; then
|
||||
xargs -r kill < "$XDG_RUNTIME_DIR/sxmo.ring.pid"
|
||||
rm "$XDG_RUNTIME_DIR/sxmo.ring.pid"
|
||||
fi
|
||||
|
||||
sxmo_playerctl.sh pause_all
|
||||
|
||||
sxmo_jobs.sh stop ringing
|
||||
|
@@ -6,6 +6,12 @@
|
||||
# shellcheck source=scripts/core/sxmo_common.sh
|
||||
. sxmo_common.sh
|
||||
|
||||
sxmo_wakelock.sh lock stay_awake "${SXMO_UNLOCK_IDLE_TIME:-120}s"
|
||||
if [ -z "$SXMO_NO_MODEM" ]; then
|
||||
MMCLI="$(mmcli -m any -J 2>/dev/null)"
|
||||
if [ -z "$MMCLI" ]; then
|
||||
sxmo_notify_user.sh "Modem crashed! 30s recovery."
|
||||
sxmo_wakelock.sh lock sxmo_modem_crashed 30s
|
||||
fi
|
||||
fi
|
||||
|
||||
# Add here whatever you want to do
|
8
configs/default_hooks/sxmo_hook_power.sh
Normal file
8
configs/default_hooks/sxmo_hook_power.sh
Normal file
@@ -0,0 +1,8 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: AGPL-3.0-only
|
||||
# Copyright 2022 Sxmo Contributors
|
||||
|
||||
# This script is executed before reboot and poweroff the system
|
||||
#
|
||||
# The following parameters are provided:
|
||||
# $1 = Action (poweroff or reboot)
|
@@ -100,4 +100,4 @@ if ! daemon_isrunning modemmanager; then
|
||||
exit 1
|
||||
fi
|
||||
# we want 120s before sleeping again
|
||||
sxmo_wakelock.sh lock modem_manually_reset 120s
|
||||
sxmo_wakelock.sh lock sxmo_modem_manually_reset 120s
|
||||
|
@@ -14,7 +14,7 @@
|
||||
if sxmo_modemcall.sh list_active_calls \
|
||||
| grep -v ringing-in \
|
||||
| grep -q .; then
|
||||
sxmo_vibrate 1500
|
||||
sxmo_vibrate 1500 "${SXMO_VIBRATE_STRENGTH:-1}"
|
||||
exit
|
||||
fi
|
||||
|
||||
@@ -25,6 +25,28 @@ if ! sxmo_modemcall.sh list_active_calls \
|
||||
exit
|
||||
fi
|
||||
|
||||
finish() {
|
||||
trap - INT TERM EXIT
|
||||
jobs -p | xargs -r kill
|
||||
exit
|
||||
}
|
||||
|
||||
ring() {
|
||||
mpv --no-resume-playback --quiet --no-video \
|
||||
--loop="${SXMO_RINGNUMBER:-10}" "$SXMO_RINGTONE" >/dev/null &
|
||||
}
|
||||
|
||||
vibrate() {
|
||||
while : ; do
|
||||
trap 'finish' INT TERM EXIT
|
||||
sxmo_vibrate 1500 "${SXMO_VIBRATE_STRENGTH:-1}" &
|
||||
wait "$!"
|
||||
|
||||
sleep 0.5 &
|
||||
wait "$!"
|
||||
done &
|
||||
}
|
||||
|
||||
# RING & VIBRATE MODE (DEFAULT)
|
||||
if [ ! -f "$XDG_CONFIG_HOME"/sxmo/.noring ] && [ ! -f "$XDG_CONFIG_HOME"/sxmo/.novibrate ]; then
|
||||
sxmo_log "RING AND VIBRATE"
|
||||
@@ -33,15 +55,8 @@ if [ ! -f "$XDG_CONFIG_HOME"/sxmo/.noring ] && [ ! -f "$XDG_CONFIG_HOME"/sxmo/.n
|
||||
# In order for this to work with mpv, you will need to install mpv-mdis.
|
||||
sxmo_playerctl.sh pause_all
|
||||
|
||||
timeout "$SXMO_RINGTIME" mpv --no-resume-playback --quiet --no-video \
|
||||
--loop="$SXMO_RINGNUMBER" "$SXMO_RINGTONE" >/dev/null &
|
||||
MPVID=$!
|
||||
echo "$MPVID" > "$XDG_RUNTIME_DIR/sxmo.ring.pid"
|
||||
# vibrate while mpv is running
|
||||
while kill -0 $MPVID; do
|
||||
sxmo_vibrate 1500
|
||||
sleep 0.5
|
||||
done
|
||||
ring
|
||||
vibrate
|
||||
|
||||
# RING-ONLY MODE
|
||||
elif [ ! -f "$XDG_CONFIG_HOME"/sxmo/.noring ] && [ -f "$XDG_CONFIG_HOME"/sxmo/.novibrate ]; then
|
||||
@@ -51,16 +66,15 @@ elif [ ! -f "$XDG_CONFIG_HOME"/sxmo/.noring ] && [ -f "$XDG_CONFIG_HOME"/sxmo/.n
|
||||
# In order for this to work with mpv, you will need to install mpv-mdis.
|
||||
sxmo_playerctl.sh pause_all
|
||||
|
||||
timeout "$SXMO_RINGTIME" mpv --no-resume-playback --quiet --no-video \
|
||||
--loop="$SXMO_RINGNUMBER" "$SXMO_RINGTONE" >/dev/null &
|
||||
echo "$!" > "$XDG_RUNTIME_DIR/sxmo.ring.pid"
|
||||
ring
|
||||
|
||||
# VIBRATE-ONLY MODE
|
||||
elif [ ! -f "$XDG_CONFIG_HOME"/sxmo/.novibrate ] && [ -f "$XDG_CONFIG_HOME"/sxmo/.noring ]; then
|
||||
smxo_log "VIBRATE ONLY"
|
||||
for _ in $(seq 5); do
|
||||
sxmo_vibrate 1500
|
||||
sleep 0.5
|
||||
done &
|
||||
echo "$!" > "$XDG_RUNTIME_DIR/sxmo.ring.pid"
|
||||
|
||||
vibrate
|
||||
fi
|
||||
|
||||
trap 'finish' INT TERM EXIT
|
||||
sleep "${SXMO_RINGTIME:-20}" &
|
||||
wait "$!"
|
||||
|
@@ -8,4 +8,4 @@
|
||||
|
||||
# The following parameters are provided:
|
||||
# $1 = the new orientation
|
||||
# possible values are "normal", "left" and "right"
|
||||
# possible values are "normal", "invert", "left" and "right"
|
||||
|
@@ -16,30 +16,24 @@
|
||||
|
||||
# This hook is called when the system reaches a off state (screen off)
|
||||
|
||||
exec 3<> "$SXMO_STATE.lock"
|
||||
flock -x 3
|
||||
|
||||
sxmo_log "transitioning to stage off"
|
||||
printf screenoff > "$SXMO_STATE"
|
||||
sxmo_hook_statusbar.sh state_change &
|
||||
sxmo_led.sh blink red blue &
|
||||
|
||||
[ "$SXMO_WM" = "sway" ] && swaymsg mode default
|
||||
sxmo_wm.sh dpms on
|
||||
sxmo_wm.sh inputevent touchscreen off
|
||||
|
||||
sxmo_daemons.sh start periodic_blink sxmo_run_periodically.sh 2 sxmo_led.sh blink red blue
|
||||
sxmo_jobs.sh start periodic_blink sxmo_run_periodically.sh - 2 sxmo_led.sh blink red blue
|
||||
|
||||
case "$SXMO_WM" in
|
||||
dwm)
|
||||
# dmenu will grab input focus (i.e. power button) so kill it before going to
|
||||
# screenoff unless proximity lock is running (i.e. there's a phone call).
|
||||
if ! sxmo_daemons.sh running proximity_lock -q; then
|
||||
if ! sxmo_jobs.sh running proximity_lock -q; then
|
||||
sxmo_dmenu.sh close
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
wait
|
||||
sxmo_jobs.sh stop idle_locker
|
||||
|
||||
sxmo_wakelock.sh lock hold_a_bit 3s # avoid immediate suspension
|
||||
sxmo_wakelock.sh unlock not_screenoff
|
||||
wait
|
@@ -20,11 +20,13 @@
|
||||
if ! sxmo_modemcall.sh list_active_calls | grep -q active; then
|
||||
|
||||
if [ ! -f "$XDG_CONFIG_HOME"/sxmo/.noring ]; then
|
||||
mpv --no-resume-playback --quiet --no-video "$SXMO_TEXTSOUND" >> /dev/null 2>&1
|
||||
mpv --no-resume-playback --quiet --no-video "$SXMO_TEXTSOUND" >> /dev/null 2>&1 &
|
||||
fi
|
||||
|
||||
if [ ! -f "$XDG_CONFIG_HOME"/sxmo/.novibrate ]; then
|
||||
sxmo_vibrate 500
|
||||
sxmo_vibrate 500 "${SXMO_VIBRATE_STRENGTH:-1}" &
|
||||
fi
|
||||
|
||||
wait
|
||||
|
||||
fi
|
||||
|
@@ -3,7 +3,7 @@
|
||||
# Copyright 2022 Sxmo Contributors
|
||||
|
||||
# Allow user to override what we log in the sms.txt file. Note if you change
|
||||
# this you probably should change sxmo_hook_parselog.sh
|
||||
# this you probably should change sxmo_hook_tailtextlog.sh
|
||||
|
||||
# include common definitions
|
||||
# shellcheck source=scripts/core/sxmo_common.sh
|
||||
@@ -26,10 +26,10 @@ fi
|
||||
|
||||
# if group chain also print the sender
|
||||
if [ "$NUM" != "$LOGDIRNUM" ] && [ "$ACTION" = "recv" ]; then
|
||||
printf "%s from %s at %s:\n%s\n" \
|
||||
printf "%s from %s at %s:\n%b\n" \
|
||||
"$VERB" "$NUM" "$TIME" "$TEXT"
|
||||
else
|
||||
printf "%s at %s:\n%s\n" \
|
||||
printf "%s at %s:\n%b\n" \
|
||||
"$VERB" "$TIME" "$TEXT"
|
||||
fi
|
||||
|
||||
|
@@ -9,26 +9,38 @@
|
||||
# Create xdg user directories, such as ~/Pictures
|
||||
xdg-user-dirs-update
|
||||
|
||||
sxmo_daemons.sh start daemon_manager superd -v
|
||||
sxmo_jobs.sh start daemon_manager superd
|
||||
|
||||
# let time to superd to start correctly
|
||||
while ! superctl status > /dev/null 2>&1; do
|
||||
sleep 0.5
|
||||
done
|
||||
|
||||
# Not dangerous if "locker" isn't an available state
|
||||
sxmo_state.sh set locker
|
||||
|
||||
if [ -n "$SXMO_ROTATE_START" ]; then
|
||||
sxmo_rotate.sh
|
||||
fi
|
||||
|
||||
# Load our sound daemons
|
||||
|
||||
if [ "$(command -v pulseaudio)" ]; then
|
||||
superctl start pulseaudio
|
||||
elif [ "$(command -v pipewire)" ]; then
|
||||
# pipewire-pulse will start pipewire
|
||||
superctl start pipewire-pulse
|
||||
superctl start wireplumber
|
||||
if [ -z "$SXMO_NO_AUDIO" ]; then
|
||||
if [ "$(command -v pulseaudio)" ]; then
|
||||
superctl start pulseaudio
|
||||
elif [ "$(command -v pipewire)" ]; then
|
||||
# pipewire-pulse will start pipewire
|
||||
superctl start pipewire-pulse
|
||||
superctl start wireplumber
|
||||
fi
|
||||
|
||||
# monitor for headphone for statusbar
|
||||
superctl start sxmo_soundmonitor
|
||||
fi
|
||||
|
||||
# Periodically update some status bar components
|
||||
sxmo_hook_statusbar.sh all
|
||||
sxmo_daemons.sh start statusbar_periodics sxmo_run_aligned.sh 60 \
|
||||
sxmo_jobs.sh start statusbar_periodics sxmo_run_aligned.sh 60 \
|
||||
sxmo_hook_statusbar.sh periodics
|
||||
|
||||
# mako/dunst are required for warnings.
|
||||
@@ -61,24 +73,27 @@ case "$SXMO_WM" in
|
||||
;;
|
||||
esac
|
||||
|
||||
# To setup initial lock state
|
||||
sxmo_hook_unlock.sh
|
||||
|
||||
# Turn on auto-suspend
|
||||
if [ -w "/sys/power/wakeup_count" ] && [ -f "/sys/power/wake_lock" ]; then
|
||||
if sxmo_wakelock.sh isenabled; then
|
||||
sxmo_wakelock.sh lock sxmo_not_suspendable infinite
|
||||
superctl start sxmo_autosuspend
|
||||
fi
|
||||
|
||||
# Turn on lisgd
|
||||
superctl start sxmo_hook_lisgd
|
||||
# To setup initial unlock state
|
||||
sxmo_state.sh set unlock
|
||||
|
||||
if [ "$(command -v ModemManager)" ]; then
|
||||
# Turn on lisgd
|
||||
if [ ! -e "$XDG_CACHE_HOME"/sxmo/sxmo.nogesture ]; then
|
||||
superctl start sxmo_hook_lisgd
|
||||
fi
|
||||
|
||||
if [ -z "$SXMO_NO_MODEM" ] && command -v ModemManager > /dev/null; then
|
||||
# Turn on the dbus-monitors for modem-related tasks
|
||||
superctl start sxmo_modemmonitor
|
||||
|
||||
# place a wakelock for 120s to allow the modem to fully warm up (eg25 +
|
||||
# elogind/systemd would do this for us, but we don't use those.)
|
||||
sxmo_wakelock.sh lock modem_warming_up 120s
|
||||
sxmo_wakelock.sh lock sxmo_modem_warming_up 120s
|
||||
fi
|
||||
|
||||
# Start the desktop widget (e.g. clock)
|
||||
@@ -93,26 +108,25 @@ superctl start sxmo_networkmonitor
|
||||
# The daemon that display notifications popup messages
|
||||
superctl start sxmo_notificationmonitor
|
||||
|
||||
# monitor for headphone for statusbar
|
||||
superctl start sxmo_soundmonitor
|
||||
|
||||
# Play a funky startup tune if you want (disabled by default)
|
||||
#mpv --quiet --no-video ~/welcome.ogg &
|
||||
|
||||
# mmsd and vvmd
|
||||
if [ -f "${SXMO_MMS_BASE_DIR:-"$HOME"/.mms/modemmanager}/mms" ]; then
|
||||
superctl start mmsd-tng
|
||||
fi
|
||||
if [ -z "$SXMO_NO_MODEM" ]; then
|
||||
if [ -f "${SXMO_MMS_BASE_DIR:-"$HOME"/.mms/modemmanager}/mms" ]; then
|
||||
superctl start mmsd-tng
|
||||
fi
|
||||
|
||||
if [ -f "${SXMO_VVM_BASE_DIR:-"$HOME"/.vvm/modemmanager}/vvm" ]; then
|
||||
superctl start vvmd
|
||||
if [ -f "${SXMO_VVM_BASE_DIR:-"$HOME"/.vvm/modemmanager}/vvm" ]; then
|
||||
superctl start vvmd
|
||||
fi
|
||||
fi
|
||||
|
||||
# add some warnings if things are not setup correctly
|
||||
deviceprofile="$(command -v "sxmo_deviceprofile_$SXMO_DEVICE_NAME.sh")"
|
||||
|
||||
[ -f "$deviceprofile" ] || sxmo_notify_user.sh --urgency=critical \
|
||||
"No deviceprofile found $SXMO_DEVICE_NAME. See: https://sxmo.org/deviceprofile"
|
||||
if ! command -v "sxmo_deviceprofile_$SXMO_DEVICE_NAME.sh"; then
|
||||
sxmo_notify_user.sh --urgency=critical \
|
||||
"No deviceprofile found $SXMO_DEVICE_NAME. See: https://sxmo.org/deviceprofile"
|
||||
fi
|
||||
|
||||
sxmo_migrate.sh state || sxmo_notify_user.sh --urgency=critical \
|
||||
"Config needs migration" "$? file(s) in your sxmo configuration are out of date and disabled - using defaults until you migrate (run sxmo_migrate.sh)"
|
||||
|
@@ -27,11 +27,13 @@ set_state() {
|
||||
return
|
||||
fi
|
||||
|
||||
if sxmo_jobs.sh running proximity_lock; then
|
||||
sxmobar -a -e bold -f orange state 90 "$icon_state_proximity" # circle with dot
|
||||
return
|
||||
fi
|
||||
|
||||
STATE_LABEL="$(cat "$SXMO_STATE")"
|
||||
case "$STATE_LABEL" in
|
||||
proximity*)
|
||||
sxmobar -a -e bold -f orange state 90 "$icon_state_proximity" # circle with dot
|
||||
;;
|
||||
screenoff)
|
||||
sxmobar -a -e bold -f red state 90 "$icon_state_screenoff" # filled circle
|
||||
;;
|
||||
@@ -227,7 +229,7 @@ set_wifi() {
|
||||
|
||||
# if they have a vpn nmcli c shown --active should also list:
|
||||
# tun0 ef5fcce9-fdae-4ffe-a540-b16fc7b42852 tun tun0
|
||||
if printf %b "$CONN" | cut -d':' -f3 | grep -q ^tun$; then
|
||||
if printf %b "$CONN" | cut -d':' -f3 | grep -q -E "^tun$|^wireguard$"; then
|
||||
wifivpn=1
|
||||
else
|
||||
wifivpn=0
|
||||
@@ -271,87 +273,89 @@ set_wifi() {
|
||||
sxmobar -a wifi-status 30 "$icon_wif"
|
||||
}
|
||||
|
||||
# $1 = type (wifi, tun)
|
||||
# $2 = interface name (wlan0, tun0)
|
||||
set_ethernet() {
|
||||
conname="$(nmcli -t device show "$2" | grep ^GENERAL.CONNECTION | cut -d: -f2-)"
|
||||
if [ "$conname" = "--" ]; then
|
||||
# not used device
|
||||
sxmobar -d ethernet-status-"$2" 30
|
||||
return
|
||||
fi
|
||||
|
||||
if nmcli -t connection show "$conname" | grep ^ipv4.method | grep -q :shared; then
|
||||
sxmobar -a ethernet-status-"$2" 30 "$icon_lnk"
|
||||
else
|
||||
sxmobar -d ethernet-status-"$2" 30
|
||||
fi
|
||||
}
|
||||
|
||||
# $1: type (reported by nmcli, e.g., wifi, tun)
|
||||
# $2: interface name (reported by nmcli, e.g., wlan0, tun0)
|
||||
set_network() {
|
||||
case "$1" in
|
||||
wifi|tun) set_wifi "$@" ;;
|
||||
ethernet) set_ethernet "$@" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
set_battery() {
|
||||
for power_supply in /sys/class/power_supply/*; do
|
||||
power_name="$(basename "$power_supply")"
|
||||
fgcolor=default
|
||||
bgcolor=default
|
||||
style=normal
|
||||
BATCMP=
|
||||
name="$1"
|
||||
state="$2"
|
||||
percentage="$3"
|
||||
|
||||
if [ "$(cat "$power_supply"/type)" = "Battery" ]; then
|
||||
if [ -e "$power_supply"/capacity ]; then
|
||||
PCT="$(cat "$power_supply"/capacity)"
|
||||
elif [ -e "$power_supply"/charge_now ]; then
|
||||
CHARGE_NOW="$(cat "$power_supply"/charge_now)"
|
||||
CHARGE_FULL="$(cat "$power_supply"/charge_full_design)"
|
||||
PCT="$(printf "scale=2; %s / %s * 100\n" "$CHARGE_NOW" "$CHARGE_FULL" | bc | cut -d'.' -f1)"
|
||||
fgcolor=default
|
||||
bgcolor=default
|
||||
style=normal
|
||||
BATCMP=
|
||||
|
||||
case "$state" in
|
||||
fully-charged)
|
||||
BATCMP="$icon_bat_c_3"
|
||||
;;
|
||||
charging)
|
||||
if [ "$percentage" -lt 25 ]; then
|
||||
BATCMP="$icon_bat_c_0"
|
||||
elif [ "$percentage" -lt 50 ]; then
|
||||
BATCMP="$icon_bat_c_1"
|
||||
elif [ "$percentage" -lt 75 ]; then
|
||||
BATCMP="$icon_bat_c_2"
|
||||
else
|
||||
continue
|
||||
# Treat 'Full' status as same as 'fully-charged'
|
||||
BATCMP="$icon_bat_c_3"
|
||||
fi
|
||||
|
||||
if [ -e "$power_supply"/status ]; then
|
||||
# The status is not always given for the battery device.
|
||||
# (sometimes it's linked to the charger device).
|
||||
BATSTATUS="$(cut -c1 "$power_supply"/status)"
|
||||
fi
|
||||
|
||||
# fixes a bug with keyboard case where
|
||||
# /sys/class/power_supply/ip5xxx-charger/capacity
|
||||
# exists but returns 'Not a tty'
|
||||
if [ -z "$PCT" ]; then
|
||||
BATCMP="ERR"
|
||||
elif [ "$BATSTATUS" = "C" ] || [ "$BATSTATUS" = "F" ]; then
|
||||
if [ "$PCT" -lt 25 ]; then
|
||||
BATCMP="$icon_bat_c_0"
|
||||
elif [ "$PCT" -lt 50 ]; then
|
||||
BATCMP="$icon_bat_c_1"
|
||||
elif [ "$PCT" -lt 75 ]; then
|
||||
BATCMP="$icon_bat_c_2"
|
||||
else
|
||||
# Treat 'Full' status as same as 'Charging'
|
||||
BATCMP="$icon_bat_c_3"
|
||||
fi
|
||||
else
|
||||
if [ "$PCT" -lt 25 ]; then
|
||||
fgcolor=red
|
||||
if [ "$PCT" -lt 5 ]; then
|
||||
BATCMP="$icon_bat_0"
|
||||
elif [ "$PCT" -lt 10 ]; then
|
||||
BATCMP="$icon_bat_1"
|
||||
elif [ "$PCT" -lt 15 ]; then
|
||||
BATCMP="$icon_bat_2"
|
||||
else
|
||||
BATCMP="$icon_bat_3"
|
||||
fi
|
||||
elif [ "$PCT" -lt 50 ]; then
|
||||
fgcolor=orange
|
||||
;;
|
||||
discharging)
|
||||
if [ "$percentage" -lt 25 ]; then
|
||||
fgcolor=red
|
||||
if [ "$percentage" -lt 5 ]; then
|
||||
BATCMP="$icon_bat_0"
|
||||
elif [ "$percentage" -lt 10 ]; then
|
||||
BATCMP="$icon_bat_1"
|
||||
elif [ "$PCT" -lt 75 ]; then
|
||||
elif [ "$percentage" -lt 15 ]; then
|
||||
BATCMP="$icon_bat_2"
|
||||
else
|
||||
BATCMP="$icon_bat_3"
|
||||
fi
|
||||
fi
|
||||
|
||||
sxmobar -a -t "$style" -b "$bgcolor" -f "$fgcolor" \
|
||||
"battery-icon-$power_name" 40 "$BATCMP"
|
||||
|
||||
if [ -z "$SXMO_BAR_SHOW_BAT_PER" ]; then
|
||||
sxmobar -d "battery-status-$power_name"
|
||||
elif [ "$percentage" -lt 50 ]; then
|
||||
fgcolor=orange
|
||||
BATCMP="$icon_bat_1"
|
||||
elif [ "$percentage" -lt 75 ]; then
|
||||
BATCMP="$icon_bat_2"
|
||||
else
|
||||
sxmobar -a "battery-status-$power_name" 41 "$PCT%"
|
||||
BATCMP="$icon_bat_3"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
;;
|
||||
esac
|
||||
|
||||
sxmobar -a -t "$style" -b "$bgcolor" -f "$fgcolor" \
|
||||
"battery-icon-$name" 40 "$BATCMP"
|
||||
|
||||
if [ -z "$SXMO_BAR_SHOW_BAT_PER" ]; then
|
||||
sxmobar -d "battery-status-$name"
|
||||
else
|
||||
sxmobar -a "battery-status-$name" 41 "$percentage%"
|
||||
fi
|
||||
}
|
||||
|
||||
set_notifications() {
|
||||
@@ -367,51 +371,48 @@ set_notifications() {
|
||||
set_volume() {
|
||||
VOLCMP=""
|
||||
|
||||
if sxmo_modemaudio.sh is_call_audio_mode; then
|
||||
if sxmo_modemaudio.sh is_muted_mic; then
|
||||
VOLCMP="$icon_mmc"
|
||||
else
|
||||
VOLCMP="$icon_mic"
|
||||
fi
|
||||
if sxmo_modemaudio.sh is_enabled_speaker; then
|
||||
VOLCMP="$VOLCMP $icon_spk"
|
||||
else
|
||||
VOLCMP="$VOLCMP $icon_ear"
|
||||
fi
|
||||
sxmobar -a -f green volume 50 "$VOLCMP"
|
||||
return;
|
||||
fi
|
||||
|
||||
if sxmo_audio.sh mic ismuted; then
|
||||
VOLCMP="$icon_mmc"
|
||||
else
|
||||
VOLCMP="$icon_mic"
|
||||
case "$(sxmo_audio.sh device getinput 2>/dev/null)" in
|
||||
*Headset*)
|
||||
VOLCMP="$icon_hst"
|
||||
;;
|
||||
*)
|
||||
VOLCMP="$icon_mic"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
case "$(sxmo_audio.sh device get 2>/dev/null)" in
|
||||
Speaker|"")
|
||||
# nothing for default or pulse devices
|
||||
;;
|
||||
Headphones|Headphone)
|
||||
VOLCMP="$VOLCMP $icon_hdp"
|
||||
;;
|
||||
Earpiece)
|
||||
VOLCMP="$VOLCMP $icon_ear"
|
||||
;;
|
||||
esac
|
||||
|
||||
VOL="$(sxmo_audio.sh vol get)"
|
||||
if [ -z "$VOL" ] || [ "$VOL" = "muted" ]; then
|
||||
if sxmo_audio.sh vol ismuted; then
|
||||
VOLCMP="$VOLCMP $icon_mut"
|
||||
elif [ "$VOL" -gt 66 ]; then
|
||||
VOLCMP="$VOLCMP $icon_spk"
|
||||
elif [ "$VOL" -gt 33 ]; then
|
||||
VOLCMP="$VOLCMP $icon_spm"
|
||||
elif [ "$VOL" -ge 0 ]; then
|
||||
VOLCMP="$VOLCMP $icon_spl"
|
||||
else
|
||||
case "$(sxmo_audio.sh device get 2>/dev/null)" in
|
||||
*Speaker*|"")
|
||||
# nothing for default or pulse devices
|
||||
;;
|
||||
*Headphone*)
|
||||
VOLCMP="$VOLCMP $icon_hdp"
|
||||
;;
|
||||
*Earpiece*)
|
||||
VOLCMP="$VOLCMP $icon_ear"
|
||||
;;
|
||||
esac
|
||||
VOL="$(sxmo_audio.sh vol get)"
|
||||
if [ "$VOL" -gt 66 ]; then
|
||||
VOLCMP="$VOLCMP $icon_spk"
|
||||
elif [ "$VOL" -gt 33 ]; then
|
||||
VOLCMP="$VOLCMP $icon_spm"
|
||||
elif [ "$VOL" -ge 0 ]; then
|
||||
VOLCMP="$VOLCMP $icon_spl"
|
||||
fi
|
||||
fi
|
||||
|
||||
sxmobar -a volume 50 "$VOLCMP"
|
||||
if sxmo_modemaudio.sh is_call_audio_mode; then
|
||||
sxmobar -a -f green volume 50 "$VOLCMP"
|
||||
else
|
||||
sxmobar -a volume 50 "$VOLCMP"
|
||||
fi
|
||||
}
|
||||
|
||||
sxmo_debug "$@"
|
||||
@@ -420,22 +421,30 @@ case "$1" in
|
||||
shift
|
||||
set_network "$@"
|
||||
;;
|
||||
time|modem|battery|volume|state|notifications)
|
||||
battery)
|
||||
shift
|
||||
set_battery "$@"
|
||||
;;
|
||||
time|modem|volume|state|notifications)
|
||||
set_"$1"
|
||||
;;
|
||||
periodics|state_change) # 55 s loop and screenlock triggers
|
||||
set_time
|
||||
set_modem
|
||||
set_battery
|
||||
if [ -z "$SXMO_NO_MODEM" ]; then
|
||||
set_modem
|
||||
fi
|
||||
set_state
|
||||
set_network wifi wlan0
|
||||
;;
|
||||
all)
|
||||
sxmobar -r
|
||||
set_time
|
||||
set_modem
|
||||
set_battery
|
||||
set_volume
|
||||
if [ -z "$SXMO_NO_MODEM" ]; then
|
||||
set_modem
|
||||
fi
|
||||
if [ -z "$SXMO_NO_AUDIO" ]; then
|
||||
set_volume
|
||||
fi
|
||||
set_state
|
||||
set_notifications
|
||||
set_network wifi wlan0
|
||||
@@ -444,4 +453,3 @@ case "$1" in
|
||||
exit # swallow it !
|
||||
;;
|
||||
esac
|
||||
|
||||
|
@@ -15,7 +15,9 @@ export TERMNAME
|
||||
# If it's already open, switch to it.
|
||||
if [ "$SXMO_WM" = "sway" ] && [ -z "$SSH_CLIENT" ]; then
|
||||
regesc_termname="$(echo "$TERMNAME" | sed 's|+|\\+|g')"
|
||||
swaymsg "[title=\"^$regesc_termname\$\"]" focus && exit 0
|
||||
if swaymsg -q "[title=\"^$regesc_termname\$\"]" focus; then
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
mkcontactssedcmd() {
|
||||
@@ -31,7 +33,7 @@ mkcontactssedcmd() {
|
||||
TODAY="$(date +%F)"
|
||||
YESTERDAY="$(date -d "- 1 day" +%F)"
|
||||
TWO_DAYS="$(date -d "- 2 day" +%F)"
|
||||
DATESEDCMD="s/at.*${TODAY}T/today at /; s/at.*${YESTERDAY}T/yesterday at /; s/at.*${TWO_DAYS}T/two days ago at /; s/-[0-9][0-9][0-9][0-9]://; s/\(-[0-9][0-9]\)T\([0-9][0-9]\)/\1 \2/;"
|
||||
DATESEDCMD="s/at.*${TODAY}T/today at /; s/at.*${YESTERDAY}T/yesterday at /; s/at.*${TWO_DAYS}T/two days ago at /; s/[-+][0-9][0-9][0-9][0-9]://; s/\(-[0-9][0-9]\)T\([0-9][0-9]\)/\1 \2/;"
|
||||
|
||||
# TODO
|
||||
#ALIGNSEDCMD="s/^Sent/<right align>/;s/^Received/<left align>/;"
|
||||
@@ -46,4 +48,3 @@ CONTACTSSEDCMD="$(mkcontactssedcmd)"
|
||||
|
||||
sxmo_terminal.sh sh -c "tail -n9999 -f \"$SXMO_LOGDIR/$LOGDIRNUM/sms.txt\" |\
|
||||
sed -e \"$CONTACTSSEDCMD\" -e \"$DATESEDCMD\" -e \"$COLORSEDCMD\""
|
||||
#sxmo_terminal.sh sh -c "sxmo_hook_parselog.sh \"$NUMBER\""
|
||||
|
38
configs/default_hooks/sxmo_hook_unlock.sh
Executable file
38
configs/default_hooks/sxmo_hook_unlock.sh
Executable file
@@ -0,0 +1,38 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: AGPL-3.0-only
|
||||
# Copyright 2022 Sxmo Contributors
|
||||
|
||||
# include common definitions
|
||||
# shellcheck source=scripts/core/sxmo_common.sh
|
||||
. sxmo_common.sh
|
||||
|
||||
# This hook is called when the system becomes unlocked again
|
||||
|
||||
sxmo_led.sh blink red green &
|
||||
|
||||
sxmo_wm.sh dpms off
|
||||
sxmo_wm.sh inputevent touchscreen on
|
||||
|
||||
sxmo_jobs.sh stop periodic_blink
|
||||
sxmo_jobs.sh stop periodic_wakelock_check
|
||||
|
||||
# Go to the next idle state after 120 seconds of inactivity
|
||||
if [ -e "$XDG_CACHE_HOME/sxmo/sxmo.noidle" ]; then
|
||||
sxmo_jobs.sh stop idle_locker
|
||||
else
|
||||
case "$SXMO_WM" in
|
||||
sway)
|
||||
sxmo_jobs.sh start idle_locker sxmo_idle.sh -w \
|
||||
timeout "${SXMO_UNLOCK_IDLE_TIME:-120}" 'sh -c "
|
||||
swaymsg mode default;
|
||||
exec sxmo_state.sh idle
|
||||
"'
|
||||
;;
|
||||
dwm)
|
||||
sxmo_jobs.sh start idle_locker sxmo_idle.sh -w \
|
||||
timeout "${SXMO_UNLOCK_IDLE_TIME:-120}" "sxmo_state.sh idle"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
wait
|
@@ -1,21 +0,0 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: AGPL-3.0-only
|
||||
# Copyright 2022 Sxmo Contributors
|
||||
|
||||
# include common definitions
|
||||
# shellcheck source=scripts/core/sxmo_common.sh
|
||||
. sxmo_common.sh
|
||||
|
||||
MMCLI="$(mmcli -m any -J 2>/dev/null)"
|
||||
if [ -z "$MMCLI" ]; then
|
||||
sxmo_notify_user.sh "Modem crashed! 30s recovery."
|
||||
sxmo_wakelock.sh lock modem_crashed 30s
|
||||
fi
|
||||
|
||||
# see the comments in sxmo_hook_lock.sh
|
||||
# and https://todo.sr.ht/~mil/sxmo-tickets/150
|
||||
if [ 1 = "$SXMO_RTW_SCAN_INTERVAL" ]; then
|
||||
echo 1200 > "/sys/module/$SXMO_WIFI_MODULE/parameters/rtw_scan_interval_thr"
|
||||
fi
|
||||
|
||||
# Add here whatever you want to do
|
@@ -1,56 +0,0 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: AGPL-3.0-only
|
||||
# Copyright 2022 Sxmo Contributors
|
||||
|
||||
# include common definitions
|
||||
# shellcheck source=scripts/core/sxmo_common.sh
|
||||
. sxmo_common.sh
|
||||
|
||||
# This hook is called when the system becomes unlocked again
|
||||
|
||||
exec 3<> "$SXMO_STATE.lock"
|
||||
flock -x 3
|
||||
|
||||
sxmo_log "transitioning to stage unlock"
|
||||
printf unlock > "$SXMO_STATE"
|
||||
|
||||
sxmo_wakelock.sh lock not_screenoff infinite
|
||||
|
||||
sxmo_led.sh blink red green &
|
||||
sxmo_hook_statusbar.sh state_change &
|
||||
|
||||
sxmo_wm.sh dpms off
|
||||
sxmo_wm.sh inputevent touchscreen on
|
||||
|
||||
sxmo_daemons.sh stop periodic_blink
|
||||
sxmo_daemons.sh stop periodic_wakelock_check
|
||||
|
||||
# see https://todo.sr.ht/~mil/sxmo-tickets/150
|
||||
# We set the scan interval threshold here to
|
||||
# 16000 (16s) the default, since in sxmo_hook_postwake.sh
|
||||
# we set it to 1200 (.12s) so that we can reconnect to wifi
|
||||
# quicker after resuming from suspend.
|
||||
if [ 1 = "$SXMO_RTW_SCAN_INTERVAL" ]; then
|
||||
echo 16000 > "/sys/module/$SXMO_WIFI_MODULE/parameters/rtw_scan_interval_thr"
|
||||
fi
|
||||
|
||||
# Go to lock after 120 seconds of inactivity
|
||||
if [ -e "$XDG_CACHE_HOME/sxmo/sxmo.noidle" ]; then
|
||||
sxmo_daemons.sh stop idle_locker
|
||||
else
|
||||
case "$SXMO_WM" in
|
||||
sway)
|
||||
sxmo_daemons.sh start idle_locker sxmo_idle.sh -w \
|
||||
timeout "${SXMO_UNLOCK_IDLE_TIME:-120}" 'sh -c "
|
||||
swaymsg mode default;
|
||||
exec sxmo_hook_lock.sh
|
||||
"'
|
||||
;;
|
||||
dwm)
|
||||
sxmo_daemons.sh start idle_locker sxmo_idle.sh -w \
|
||||
timeout "${SXMO_UNLOCK_IDLE_TIME:-120}" "sxmo_hook_lock.sh"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
wait
|
@@ -16,5 +16,7 @@ permit nopass :wheel as root cmd systemctl args start eg25-manager
|
||||
permit nopass :wheel as root cmd systemctl args stop eg25-manager
|
||||
permit nopass :wheel as root cmd systemctl args start ModemManager
|
||||
permit nopass :wheel as root cmd systemctl args stop ModemManager
|
||||
permit nopass :wheel as root cmd rtcwake
|
||||
permit nopass :wheel as root cmd tee args -a /sys/power/wake_lock
|
||||
permit nopass :wheel as root cmd tee args -a /sys/power/wake_unlock
|
||||
permit nopass :wheel as root cmd tee args /sys/power/wakeup_count
|
||||
|
10
configs/external-services/pipewire-filter-chain.service
Normal file
10
configs/external-services/pipewire-filter-chain.service
Normal file
@@ -0,0 +1,10 @@
|
||||
[Unit]
|
||||
Description=Pipewire filter chain
|
||||
After=pipewire
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
Restart=always
|
||||
ExecStart=/usr/bin/pipewire -c filter-chain.conf
|
||||
ExecOnFailure=/usr/bin/sxmo_notify_user.sh "superd failed to start pipewire-filter-chain"
|
||||
RestartSec=1s
|
@@ -1,5 +0,0 @@
|
||||
#!/sbin/openrc-run
|
||||
|
||||
description="Set user permissions to aspects of the hardware kernel interface"
|
||||
|
||||
command="/usr/bin/sxmo_setpermissions.sh"
|
@@ -9,15 +9,18 @@
|
||||
_sxmo_is_running() {
|
||||
unset SXMO_WM
|
||||
|
||||
if [ -f "${XDG_RUNTIME_DIR}"/sxmo.swaysock ]; then
|
||||
unset SWAYSOCK
|
||||
if SWAYSOCK="$(cat "${XDG_RUNTIME_DIR}"/sxmo.swaysock)" \
|
||||
swaymsg 2>/dev/null; then
|
||||
_XDG_RUNTIME_DIR="$(_sxmo_find_runtime_dir)"
|
||||
|
||||
if [ -f "${_XDG_RUNTIME_DIR}"/sxmo.swaysock ]; then
|
||||
if SWAYSOCK="$(cat "${_XDG_RUNTIME_DIR}"/sxmo.swaysock)" swaymsg 2>/dev/null
|
||||
then
|
||||
printf "Detected the Sway environment\n" >&2
|
||||
export SXMO_WM=sway
|
||||
unset _XDG_RUNTIME_DIR
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
unset _XDG_RUNTIME_DIR
|
||||
|
||||
if DISPLAY=:0 xrandr >/dev/null 2>&1; then
|
||||
printf "Detected the Dwm environment\n" >&2
|
||||
@@ -36,10 +39,14 @@ _sxmo_find_runtime_dir() {
|
||||
return
|
||||
fi
|
||||
|
||||
if [ -d "/var/run/user/$(id -u)" ]; then
|
||||
printf "/var/run/user/%s" "$(id -u)"
|
||||
return
|
||||
fi
|
||||
# Try something existing
|
||||
for root in /run /var/run; do
|
||||
path="$root/user/$(id -u)"
|
||||
if [ -d "$path" ] && [ -w "$path" ]; then
|
||||
printf %s "$path"
|
||||
return
|
||||
fi
|
||||
done
|
||||
|
||||
# Fallback to a shared memory location
|
||||
printf "/dev/shm/user/%s" "$(id -u)"
|
||||
@@ -80,57 +87,49 @@ _sxmo_load_environments() {
|
||||
export BROWSER="${BROWSER:-firefox}"
|
||||
export SHELL="${SHELL:-/bin/sh}"
|
||||
|
||||
# The user can already forced a $SXMO_DEVICE_NAME value
|
||||
if [ -z "$SXMO_DEVICE_NAME" ] && [ -e /proc/device-tree/compatible ]; then
|
||||
SXMO_DEVICE_NAME="$(tr -c '\0[:alnum:].,-' '_' < /proc/device-tree/compatible |
|
||||
tr '\0' '\n' | head -n1)"
|
||||
export SXMO_DEVICE_NAME
|
||||
deviceprofile="$(command -v "sxmo_deviceprofile_$SXMO_DEVICE_NAME.sh")"
|
||||
# shellcheck disable=SC1090
|
||||
if [ -f "$deviceprofile" ]; then
|
||||
. "$deviceprofile"
|
||||
printf "deviceprofile file %s loaded.\n" "$deviceprofile"
|
||||
# The user can already force a $SXMO_DEVICE_NAME value in ~/.profile
|
||||
if [ -z "$SXMO_DEVICE_NAME" ]; then
|
||||
if [ -e /proc/device-tree/compatible ]; then
|
||||
SXMO_DEVICE_NAME="$(tr -c '\0[:alnum:].,-' '_' < /proc/device-tree/compatible |
|
||||
tr '\0' '\n' | head -n1)"
|
||||
else
|
||||
printf "WARNING: deviceprofile file not found for %s. Most device functions will not work. Please read: https://sxmo.org/deviceprofile \n" "$SXMO_DEVICE_NAME"
|
||||
|
||||
# on a new device, power button won't work
|
||||
# so make sure we don't go into screenoff
|
||||
# or suspend
|
||||
touch "$XDG_CACHE_HOME"/sxmo/sxmo.nosuspend
|
||||
touch "$XDG_CACHE_HOME"/sxmo/sxmo.noidle
|
||||
|
||||
SXMO_DEVICE_NAME=unknown
|
||||
SXMO_DEVICE_NAME=desktop
|
||||
fi
|
||||
unset deviceprofile
|
||||
fi
|
||||
export SXMO_DEVICE_NAME
|
||||
|
||||
if [ -n "$SXMO_DEVICE_NAME" ]; then
|
||||
_device_hooks_path="$(xdg_data_path "sxmo/default_hooks/$SXMO_DEVICE_NAME" 0 ':')"
|
||||
if [ -z "$_device_hooks_path" ]; then
|
||||
_device_hooks_path="$(xdg_data_path "sxmo/default_hooks/three_button_touchscreen" 0 ':')"
|
||||
fi
|
||||
deviceprofile="$(command -v "sxmo_deviceprofile_$SXMO_DEVICE_NAME.sh")"
|
||||
# shellcheck disable=SC1090
|
||||
if [ -f "$deviceprofile" ]; then
|
||||
. "$deviceprofile"
|
||||
printf "deviceprofile file %s loaded.\n" "$deviceprofile"
|
||||
else
|
||||
printf "WARNING: deviceprofile file not found for %s. Most device functions will not work. Please read: https://sxmo.org/deviceprofile \n" "$SXMO_DEVICE_NAME"
|
||||
|
||||
PATH="\
|
||||
# on a new device, power button won't work
|
||||
# so make sure we don't go into screenoff
|
||||
# or suspend
|
||||
touch "$XDG_CACHE_HOME"/sxmo/sxmo.nosuspend
|
||||
touch "$XDG_CACHE_HOME"/sxmo/sxmo.noidle
|
||||
fi
|
||||
unset deviceprofile
|
||||
|
||||
PATH="\
|
||||
$XDG_CONFIG_HOME/sxmo/hooks/$SXMO_DEVICE_NAME:\
|
||||
$XDG_CONFIG_HOME/sxmo/hooks:\
|
||||
$_device_hooks_path:\
|
||||
$(xdg_data_path "sxmo/default_hooks" 0 ':'):\
|
||||
$PATH"
|
||||
export PATH
|
||||
else
|
||||
default_hooks_path=$(xdg_data_path sxmo/default_hooks 0 ':')
|
||||
export PATH="$XDG_CONFIG_HOME/sxmo/hooks:$default_hooks_path:$PATH"
|
||||
fi
|
||||
export PATH
|
||||
}
|
||||
|
||||
_sxmo_grab_session() {
|
||||
XDG_RUNTIME_DIR="$(_sxmo_find_runtime_dir)"
|
||||
export XDG_RUNTIME_DIR
|
||||
if ! _sxmo_is_running; then
|
||||
unset XDG_RUNTIME_DIR
|
||||
return
|
||||
fi
|
||||
|
||||
XDG_RUNTIME_DIR="$(_sxmo_find_runtime_dir)"
|
||||
export XDG_RUNTIME_DIR
|
||||
|
||||
_sxmo_load_environments
|
||||
|
||||
if [ -f "$XDG_RUNTIME_DIR"/dbus.bus ]; then
|
||||
@@ -158,13 +157,19 @@ _sxmo_grab_session() {
|
||||
}
|
||||
|
||||
_sxmo_prepare_dirs() {
|
||||
uid=$(id -u)
|
||||
gid=$(id -g)
|
||||
mkdir -p "$XDG_RUNTIME_DIR"
|
||||
chmod 700 "$XDG_RUNTIME_DIR"
|
||||
chown "$USER:$USER" "$XDG_RUNTIME_DIR"
|
||||
chown "$uid:$gid" "$XDG_RUNTIME_DIR"
|
||||
|
||||
mkdir -p "$XDG_CACHE_HOME/sxmo/"
|
||||
chmod 700 "$XDG_CACHE_HOME"
|
||||
chown "$USER:$USER" "$XDG_CACHE_HOME"
|
||||
chown "$uid:$gid" "$XDG_CACHE_HOME"
|
||||
|
||||
mkdir -p "$XDG_STATE_HOME"
|
||||
chmod 700 "$XDG_STATE_HOME"
|
||||
chown "$uid:$gid" "$XDG_STATE_HOME"
|
||||
}
|
||||
|
||||
_sxmo_grab_session
|
||||
|
7
configs/services/geoclue-agent.service
Normal file
7
configs/services/geoclue-agent.service
Normal file
@@ -0,0 +1,7 @@
|
||||
[Unit]
|
||||
Description=Proxy location data to map applications
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
Restart=always
|
||||
ExecStart=/usr/libexec/geoclue-2.0/demos/agent
|
@@ -1,13 +1,5 @@
|
||||
# lisgd requires /dev/input/touchscreen
|
||||
ACTION=="add|change", SUBSYSTEM=="input", KERNEL=="event[0-9]*", ENV{ID_INPUT_TOUCHSCREEN}=="1", MODE:="0666", SYMLINK+="input/touchscreen"
|
||||
|
||||
ACTION=="add", SUBSYSTEM=="input", ENV{ID_PATH}=="platform-vibrator", MODE:="0666"
|
||||
|
||||
# make stylus readable
|
||||
ACTION=="add|change", SUBSYSTEM=="input", KERNEL=="event[0-9]*", ENV{ID_INPUT_TABLET}=="1", MODE:="0666"
|
||||
# fix bug with pinenote touchscreen matrix
|
||||
#ACTION=="add|change", SUBSYSTEM=="input", KERNEL=="event[0-9]*", ENV{ID_INPUT_TABLET}=="1", ENV{LIBINPUT_CALIBRATION_MATRIX}="-1 0 1 0 -1 1"
|
||||
#ACTION=="add|change", SUBSYSTEM=="input", KERNEL=="event[0-9]*", ENV{ID_PATH}=="platform-fe5a0000.i2c", ENV{LIBINPUT_CALIBRATION_MATRIX}="-1 0 1 0 -1 1"
|
||||
# lisgd requires /dev/input/by-path/first-touchscreen
|
||||
ACTION=="add|change", SUBSYSTEM=="input", KERNEL=="event[0-9]*", ENV{ID_INPUT_TOUCHSCREEN}=="1", SYMLINK+="input/by-path/first-touchscreen"
|
||||
|
||||
# Proximity Sensor
|
||||
## Set event thresholds
|
||||
@@ -15,10 +7,4 @@ ACTION=="add", SUBSYSTEM=="iio", TEST=="in_proximity_raw" RUN+="/bin/chgrp input
|
||||
ACTION=="add", SUBSYSTEM=="iio", TEST=="in_proximity_raw" RUN+="/bin/chmod g+rw /sys$devpath/events/in_proximity_thresh_falling_value /sys$devpath/events/in_proximity_thresh_rising_value"
|
||||
## Read device to monitor event
|
||||
ACTION=="add", SUBSYSTEM=="iio", TEST=="in_proximity_raw" RUN+="/bin/chgrp input $devnode"
|
||||
ACTION=="add", SUBSYSTEM=="iio", TEST=="in_proximity_raw" RUN+="/bin/chmod g+r input $devnode"
|
||||
|
||||
# taken from https://github.com/haikarainen/light/blob/master/90-backlight.rules
|
||||
ACTION=="add", SUBSYSTEM=="backlight", RUN+="/bin/chgrp video /sys/class/backlight/%k/brightness"
|
||||
ACTION=="add", SUBSYSTEM=="backlight", RUN+="/bin/chmod g+w /sys/class/backlight/%k/brightness"
|
||||
ACTION=="add", SUBSYSTEM=="leds", RUN+="/bin/chgrp video /sys/class/leds/%k/brightness"
|
||||
ACTION=="add", SUBSYSTEM=="leds", RUN+="/bin/chmod g+w /sys/class/leds/%k/brightness"
|
||||
ACTION=="add", SUBSYSTEM=="iio", TEST=="in_proximity_raw" RUN+="/bin/chmod g+r $devnode"
|
||||
|
@@ -1,7 +1,7 @@
|
||||
[Default Applications]
|
||||
image/jpeg=sxmo-sxiv.desktop
|
||||
image/png=sxmo-sxiv.desktop
|
||||
image/gif=sxmo-sxiv.desktop
|
||||
image/jpeg=sxmo-nsxiv.desktop
|
||||
image/png=sxmo-nsxiv.desktop
|
||||
image/gif=sxmo-nsxiv.desktop
|
||||
audio/x-m4a=sxmo-mpv-music.desktop
|
||||
audio/mpeg=sxmo-mpv-music.desktop
|
||||
audio/amr=sxmo-mpv-music.desktop
|
||||
|
@@ -32,9 +32,9 @@ A brief overview of sxmo's features (in order of presentation):
|
||||
Menu* which allows you to browser your filesystem via _sxmo_files_(1); and
|
||||
more. See MENUS.
|
||||
- *Autosuspend, screen blanking, and input locking*: sxmo states allow sxmo to
|
||||
automatically suspend when idle unless certain programs block it; to offer
|
||||
automatically suspend when idle unless certain programs block it; to offer
|
||||
protection from accidental wakeups; and to blank the screen and lock the input
|
||||
while in a phone call and the phone is near your face. See STATES.
|
||||
while in a phone call and the phone is near your face. See STATES AND SUSPENSION.
|
||||
- *Smart cronjobs*: sxmo uses _crond_(1) to handle cronjobs and a special
|
||||
program called _mnc_(1) to wake the phone up in time to execute cron jobs.
|
||||
See CRONJOBS.
|
||||
@@ -71,7 +71,7 @@ Sxmo 1.4.1 was presented at AlpineConf 2021, you can watch the video.
|
||||
|
||||
Sxmo uses _tinydm_(1) to automatically launch the window manager of your
|
||||
choice (_sway_(1) or _dwm_(1)). Note: You can configure the UID in
|
||||
*/etc/conf.d/tinydm*. Make sure to change this if you create a custom user.
|
||||
*/etc/conf.d/tinydm*. Make sure to change this if you create a custom user.
|
||||
You may switch between the two window managers in the *Power Menu*.
|
||||
|
||||
Once the window manager launches, it will execute _sxmo_hook_start.sh_. Sxmo
|
||||
@@ -93,17 +93,17 @@ SEE ALSO: _tinydm_(1), _superd_(1), _sxmo_daemons.sh_(1)
|
||||
# HOOKS
|
||||
|
||||
A lot of functionality is also contained in hooks (*sxmo_hook_\*.sh*). Sxmo uses
|
||||
PATH to determine which hook executes. It will look first for hooks in
|
||||
*~/.config/sxmo/hooks/* before it looks in */usr/share/sxmo/default_hooks/*.
|
||||
For example, if you pickup
|
||||
a call and *~/.config/sxmo/hooks/sxmo_hook_pickup.sh* does not exist,
|
||||
PATH to determine which hook executes. It will look first for hooks in
|
||||
*~/.config/sxmo/hooks/* before it looks in */usr/share/sxmo/default_hooks/*.
|
||||
For example, if you pickup
|
||||
a call and *~/.config/sxmo/hooks/sxmo_hook_pickup.sh* does not exist,
|
||||
*/usr/share/sxmo/default_hooks/sxmo_hook_pickup.sh* will be run.
|
||||
|
||||
Note that some hooks are in a subdirectory under the *hooks/* main
|
||||
directory which will allow you to have hooks associated with a certain
|
||||
device. See DEVICES. For instance, in */usr/share/sxmo/default_hooks/* there
|
||||
are several device subdirectories, one of which will be your $SXMO_DEVICE_NAME.
|
||||
It should be a symlink to another subdirectory, e.g., *one_button_ereader* or
|
||||
device. See DEVICES. For instance, in */usr/share/sxmo/default_hooks/* there
|
||||
are several device subdirectories, one of which will be your $SXMO_DEVICE_NAME.
|
||||
It should be a symlink to another subdirectory, e.g., *one_button_ereader* or
|
||||
*three_button_touchscreen*. Device-specific hooks go here.
|
||||
|
||||
While you can manually copy and edit hooks to your liking,
|
||||
@@ -118,7 +118,7 @@ After login, you will be presented the sxmo interface as follows:
|
||||
|
||||
https://sxmo.org/assets/screenshot.jpg
|
||||
|
||||
The statusbar relies upon _sxmobar_(1). It has space for the following information
|
||||
The statusbar relies upon _sxmobar_(1). It has space for the following information
|
||||
(from left to right) has icons for:
|
||||
- The current and active workspace(s) (in the form of numbers). You can tap these to switch to them.
|
||||
- The title of the active window (if any).
|
||||
@@ -253,7 +253,7 @@ zoom in, zoom out, etc.).
|
||||
|
||||
If no application is focused, swiping down from the top of the screen, or pressing
|
||||
the volume raise button once, will bring up the Main Menu. If an application is
|
||||
focused, this will bring up the application's Context Menu instead. (To access the
|
||||
focused, this will bring up the application's Context Menu instead. (To access the
|
||||
Main Menu while an application is focussed, press the volume raise button twice.)
|
||||
|
||||
You can close any open menu with a gesture: swipe straight up (vertically) onto
|
||||
@@ -281,7 +281,7 @@ place a shell script in the *~/.config/sxmo/userscripts/* directory.
|
||||
|
||||
- Option 1. Edit *~/.config/sxmo/userscripts* and write your entries in it,
|
||||
following the appmenu format *<name> ^ <should-return-to-menu> ^
|
||||
<script-path-or-command>* one entry per line. Example:
|
||||
<script-path-or-command>* one entry per line. Example:
|
||||
|
||||
```
|
||||
Weather ^ 0 ^ sxmo_terminal.sh -f "Sxmo:size=5" sh -c "curl http://wttr.in/ | less -SR"
|
||||
@@ -330,32 +330,46 @@ HOOKS: _sxmo_hook_apps.sh_ (control list of apps)
|
||||
|
||||
SEE _sxmo_files.sh_(1).
|
||||
|
||||
# STATES
|
||||
# STATES AND SUSPENSION
|
||||
|
||||
Sxmo recognizes five basic states:
|
||||
Sxmo recognizes three basic states:
|
||||
|
||||
- *unlock*: Screen is on; touchscreen is enabled.
|
||||
- *lock*: Screen is on; touchscreen is disabled.
|
||||
- *screenoff*: Screen is off; touchscreen is disabled. The led will also blink
|
||||
purple every few seconds to indicate that you are in this state.
|
||||
- *suspend or CRUST*: This is CRUST (or suspend), where the modem will still be
|
||||
active and monitor for incoming calls/texts but everything else will be
|
||||
suspended.
|
||||
- *Proximity Mode*: This is a special state when one is in a phone call. If you
|
||||
bring it close to your face, it will disable input and turn the screen off,
|
||||
and if you move the phone away from your face, it will enable input and turn
|
||||
the screen back on.
|
||||
the screen back on. This script actually switch back and forth between *unlock*
|
||||
and *screenoff*.
|
||||
|
||||
A diagram of the states can be found here:
|
||||
There also is some dedicated workflow for some type of device.
|
||||
|
||||
https://sxmo.org/assets/lock-power-states.png
|
||||
On desktops, which is the default mode, if no other one is recognised:
|
||||
|
||||
The usual workflow is this.
|
||||
- *unlock*: The entry point, and default one.
|
||||
- *locker*: A session locker is running, and prevent any interaction with the
|
||||
environment.
|
||||
|
||||
On e-ink display devices, by example e-reader devices:
|
||||
|
||||
- *unlock*: The entry point, and only available state. The screens stay on while
|
||||
the device is suspended, which means that the power button is only a refresh of
|
||||
the suspension idle timeout, and a way to bring back interactivity.
|
||||
|
||||
Sxmo will also *suspend* on most devices, when this feature is available.
|
||||
|
||||
- *suspend or CRUST*: This is CRUST (or suspend), where the modem will still be
|
||||
active and monitor for incoming calls/texts but everything else will be
|
||||
suspended.
|
||||
|
||||
The usual workflow is this.
|
||||
|
||||
- If the phone is in the *unlock* state (default when you boot up) and you wish
|
||||
to suspend it, tap the power button once. This will transition to the
|
||||
*screenoff* state which will then automatically transition to the *CRUST* state
|
||||
unless something is blocking it.
|
||||
unless something is blocking it.
|
||||
- If the phone is in the *CRUST* state (i.e., suspended) and you wish to wake it
|
||||
up, tap the power button once (to transition to the *lock* state) and then tap
|
||||
it once again to transition to the *unlock* state. (This prevents accidental
|
||||
@@ -365,26 +379,25 @@ Sxmo also handles automatic transitions from some states to others.
|
||||
|
||||
- It will automatically transition from *unlock* to *screenoff* after a certain
|
||||
amount of idleness (120s).
|
||||
- It will automatically transition from *lock* to *screenoff* after a certain
|
||||
- It will automatically transition from *lock* to *screenoff* after a certain
|
||||
amount of time (8s).
|
||||
- It will automatically transition from *screenoff* to *CRUST* immediately
|
||||
unless something is blocking it.
|
||||
|
||||
You can set up suspend blockers in the wakelocks hook.
|
||||
You can set up suspend blockers in the block_suspend hook.
|
||||
|
||||
HOOKS:
|
||||
_sxmo_hook_postwake.sh_ (what to do after waking up from suspend state),
|
||||
_sxmo_hook_lock.sh_ (what to do when transitioning into lock state),
|
||||
_sxmo_hook_screenoff.sh_ (what to do when transitioning into screenoff state),
|
||||
_sxmo_hook_unlock.sh_ (what to do when transitioning into unlock state),
|
||||
_sxmo_hook_wakelocks.sh_ (set what block suspend)
|
||||
|
||||
# CRONJOBS
|
||||
|
||||
Sxmo ensures that cron jobs run and will actively wake the phone from sleep temporarily to this end.
|
||||
The cron daemon is installed but not enabled in postmarketOS. Cron has to be started manually
|
||||
with *rc-service crond start* and set to start on boot with *rc-update add crond
|
||||
default*. We use a little program called _mnc_(1) to wake the phone up before the next
|
||||
default*. We use a little program called _mnc_(1) to wake the phone up before the next
|
||||
planned cron job. We also wrap some sxmo logic in _sxmo_rtcwake_(1) which
|
||||
launches the cronjob and puts the phone back to sleep when finished.
|
||||
|
||||
@@ -479,14 +492,14 @@ HOOKS: _sxmo_hook_tailtextlog.sh_ (controls look and feel of view of message tex
|
||||
|
||||
A vital feature of a working phone is being able to receive new texts and
|
||||
pickup calls. This functionality is made possible through a script that
|
||||
monitors the modem activities and vibrates the phone, plays a notification or ringing sound,
|
||||
and blinks the green LED when there is an incoming text/call.
|
||||
monitors the modem activities and vibrates the phone, plays a notification or ringing sound,
|
||||
and blinks the green LED when there is an incoming text/call.
|
||||
|
||||
While a call is incoming:
|
||||
- The phone will ring and vibrate (unless you disabled these in the [Audio menu](#strongincluded-menustrong)).
|
||||
- The green LED will trigger.
|
||||
- A menu will appear to allow you to pickup the call. You can also discard
|
||||
the call or ignore the call (mute the ring). If you missed the menu, you can also open
|
||||
the call or ignore the call (mute the ring). If you missed the menu, you can also open
|
||||
the [global system menu](#strongincluded-menusstrong) menu and you'll
|
||||
see a menu entry to pickup the call; of course this is time-sensitive and this
|
||||
menu entry will only be visible while the other party's line is ringing
|
||||
@@ -532,7 +545,7 @@ easier in sxmo, we have a dedicated menu entry in *Config* called
|
||||
fields one by one. The script should take care of restarting mmsd when closed.
|
||||
|
||||
*Note* that you likely will *not* have to configure mmsd-tng, if your settings
|
||||
are already in
|
||||
are already in
|
||||
https://wiki.gnome.org/Projects/NetworkManager/MobileBroadband/ServiceProviders.
|
||||
Consider contributing your own if it is not.
|
||||
|
||||
@@ -576,8 +589,8 @@ If your phone has a wifi killswitch (like the Pinephone or Librem 5), make sure
|
||||
|
||||
HOOKS: _sxmo_hook_network_up.sh_ (what to do when network goes up),
|
||||
_sxmo_hook_network_down.sh_ (what to do when network goes down),
|
||||
_sxmo_hook_network_preup.sh_,
|
||||
_sxmo_hook_network_predown.sh_
|
||||
_sxmo_hook_network_pre_up.sh_,
|
||||
_sxmo_hook_network_pre_down.sh_
|
||||
|
||||
# AUDIO
|
||||
|
||||
@@ -612,7 +625,7 @@ apk upgrade -aiv
|
||||
There is also a menu entry within the *Config Menu* to do this.
|
||||
|
||||
After you update the sxmo packages themselves, be sure to run
|
||||
_sxmo_migrate.sh_(1) to upgrade your (local) config files.
|
||||
_sxmo_migrate.sh_(1) to upgrade your (local) config files.
|
||||
|
||||
SEE ALSO: _sxmo_migrate.sh_(1)
|
||||
|
||||
@@ -688,7 +701,7 @@ missing on your system. The most relevant ones are:
|
||||
When the system boots, tinydm will will run either *sxmo_xinit.sh* or
|
||||
*sxmo_winit.sh* depending on if you are running Xorg (dwm) or Wayland (sway).
|
||||
Each of these then will load */etc/profile.d/sxmo_init.sh* which will set the
|
||||
following environmental variables. Hint: you can type *\_sxmo_grab_session*
|
||||
following environmental variables. Hint: you can type *\_sxmo_grab_session*
|
||||
from the commandline to reload these (e.g., if you switch window managers but
|
||||
are logged into an ssh connection).
|
||||
|
||||
|
32
programs/test_legacy_nerdfont.c
Normal file
32
programs/test_legacy_nerdfont.c
Normal file
@@ -0,0 +1,32 @@
|
||||
#include <unicode/ustdio.h>
|
||||
#include <unicode/ubidi.h>
|
||||
|
||||
int main() {
|
||||
UFILE *in = u_finit(stdin, NULL, NULL);
|
||||
int line = 1;
|
||||
int err = 0;
|
||||
bool comment = false;
|
||||
|
||||
while (true) {
|
||||
UChar chr = u_fgetc(in);
|
||||
if (chr == U_EOF) {
|
||||
break;
|
||||
} if (chr == '\n') {
|
||||
line++;
|
||||
comment = false;
|
||||
continue;
|
||||
} if (chr == '#') {
|
||||
comment = true;
|
||||
}
|
||||
|
||||
if (comment)
|
||||
continue;
|
||||
|
||||
if (chr >= 0xF900 && chr <= 0xFDFF) {
|
||||
u_printf("ERROR: detected legacy nerd font icon in wrong characer range: \"%C\" 0x%x on line %d\n", chr, chr, line);
|
||||
err = 1;
|
||||
}
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
43
scripts/appscripts/sxmo_notes.sh
Executable file
43
scripts/appscripts/sxmo_notes.sh
Executable file
@@ -0,0 +1,43 @@
|
||||
#!/bin/sh -e
|
||||
# title=" Notes"
|
||||
|
||||
# shellcheck source=configs/default_hooks/sxmo_hook_icons.sh
|
||||
. sxmo_hook_icons.sh
|
||||
|
||||
DIR="${XDG_DATA_HOME:-$HOME/.local/share}/sxmo.notes"
|
||||
mkdir -p "$DIR"
|
||||
|
||||
_listnotes() {
|
||||
( cd "$DIR" && find ./ -maxdepth 1 ) | cut -d/ -f2- | grep .
|
||||
}
|
||||
|
||||
while : ; do
|
||||
ENTRIES="$(cat <<EOF
|
||||
$icon_cls Close Menu
|
||||
$icon_trh Delete
|
||||
$(_listnotes)
|
||||
EOF
|
||||
)"
|
||||
PICKED="$(printf %b "$ENTRIES" | sxmo_dmenu.sh -p "Notes")" || break
|
||||
|
||||
case "$PICKED" in
|
||||
"$icon_cls Close Menu"|"")
|
||||
break
|
||||
;;
|
||||
"$icon_trh Delete")
|
||||
ENTRIES="$(cat <<EOF
|
||||
$icon_ret Cancel
|
||||
$(_listnotes)
|
||||
EOF
|
||||
)"
|
||||
PICKED="$(printf %b "$ENTRIES" | sxmo_dmenu.sh -p "Notes - Delete")" || break
|
||||
if [ "$icon_ret Cancel" != "$PICKED" ]; then
|
||||
rm -f "$DIR"/"$PICKED"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
# shellcheck disable=SC2086
|
||||
sxmo_terminal.sh $EDITOR "$DIR"/"$PICKED"
|
||||
;;
|
||||
esac
|
||||
done
|
@@ -46,7 +46,7 @@ prep_temp_folder_with_items() {
|
||||
list_items() {
|
||||
cd "$FOLDER" || die "Couldn't cd to $FOLDER"
|
||||
printf %b "Close Menu\nChange Timespan\n"
|
||||
gawk -F'\t' '{print $1 " " substr(FILENAME, 3) " | " $2 ": " $3}' ./* |\
|
||||
gawk -F'\t' '{print $1 " " substr(FILENAME, 3) " | " $2 ": " $3 " " $8}' ./* |\
|
||||
grep -E '^[0-9]{5}' |\
|
||||
sort -nk1 |\
|
||||
sort -r |\
|
||||
@@ -113,8 +113,21 @@ rssreadmenu() {
|
||||
DMENUIDX=1
|
||||
;;
|
||||
*)
|
||||
URL="$(echo "$PICKED" | awk -F " " '{print $NF}')"
|
||||
sxmo_urlhandler.sh "$URL"
|
||||
# Check for one http or 2, as there can be a link and enclosure
|
||||
if [ "$(echo "$PICKED" | awk -F "http" '{print NF-1}')" = "1" ]; then
|
||||
URL="$(echo "$PICKED" | awk -F " " '{print $NF}')"
|
||||
sxmo_urlhandler.sh "$URL"
|
||||
else
|
||||
URL="$(echo "$PICKED" | grep "http" | awk -F ' ' '{print "Link " $(NF-1) "\nEnclosure " $NF}' | awk '($0){print} END{print "Close Menu"}' | sxmo_dmenu.sh)"
|
||||
case "$URL" in
|
||||
"Close Menu") return 0;;
|
||||
*)
|
||||
PLAY="$(echo "$URL" | awk -F " " '{print $NF}')"
|
||||
sxmo_urlhandler.sh "$PLAY"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
@@ -7,69 +7,64 @@
|
||||
|
||||
set -e
|
||||
|
||||
exitMsg() {
|
||||
exit_msg() {
|
||||
printf "%s\n" "$1" > /dev/stderr
|
||||
notify-send "$1"
|
||||
exit 1
|
||||
}
|
||||
|
||||
commandExists() {
|
||||
check_command() {
|
||||
command -v "$1" > /dev/null
|
||||
}
|
||||
|
||||
swayscreenshot() {
|
||||
commandExists grim || exitMsg "grim command must be available to take a screenshot."
|
||||
sway_screenshot() {
|
||||
check_command grim || exit_msg "grim command must be available to take a screenshot."
|
||||
check_command slurp || exit_msg "slurp command must be available to make a selection."
|
||||
|
||||
if [ "$1" = selection ]; then
|
||||
commandExists slurp || exitMsg "slurp command must be available to make a selection."
|
||||
notify-send "select an area"
|
||||
set -- grim -g "$(slurp)"
|
||||
else
|
||||
set -- grim
|
||||
fi
|
||||
|
||||
"$@" "$FILENAME"
|
||||
area="$(slurp -o)"
|
||||
grim -g "$area" "$1"
|
||||
}
|
||||
|
||||
xorgscreenshot() {
|
||||
commandExists scrot || exitMsg "scrot command must be available to take a screenshot"
|
||||
if [ "$1" = "selection" ]; then
|
||||
notify-send 'select an area'
|
||||
set -- scrot -d 1 -q 1 -s
|
||||
else
|
||||
set -- scrot -d 1 -q 1
|
||||
fi
|
||||
xorg_screenshot() {
|
||||
check_command scrot || exit_msg "scrot command must be available to take a screenshot"
|
||||
|
||||
"$@" "$FILENAME"
|
||||
scrot -d 1 -q 1 -s "$1"
|
||||
}
|
||||
|
||||
screenshot() {
|
||||
case "$SXMO_WM" in
|
||||
sway)
|
||||
swayscreenshot "$@"
|
||||
sway_screenshot "$@"
|
||||
;;
|
||||
dwm)
|
||||
xorgscreenshot "$@"
|
||||
xorg_screenshot "$@"
|
||||
;;
|
||||
*)
|
||||
exitMsg "We dont know the WM, cannot screenshot."
|
||||
exit_msg "We dont know the WM, cannot screenshot."
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
filepathoutput() {
|
||||
printf %s "$FILENAME"
|
||||
case "$SXMO_WM" in
|
||||
yank() {
|
||||
printf %s "$1" | case "$SXMO_WM" in
|
||||
sway)
|
||||
wl-copy "$FILENAME"
|
||||
wl-copy
|
||||
;;
|
||||
dwm)
|
||||
printf %s "$FILENAME" | xsel -b -i
|
||||
xsel -b -i
|
||||
;;
|
||||
*)
|
||||
exit_msg "We dont know the WM, cannot yank."
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
FILENAME="${SXMO_SCREENSHOT_DIR:-$HOME}/$(date +%Y-%m-%d-%T).png"
|
||||
SXMO_SCREENSHOT_DIR="${SXMO_SCREENSHOT_DIR:-$HOME/screenshots}"
|
||||
mkdir -p "$SXMO_SCREENSHOT_DIR"
|
||||
FILENAME="$SXMO_SCREENSHOT_DIR/$(date +%Y-%m-%d-%T).png"
|
||||
|
||||
screenshot "$@"
|
||||
filepathoutput
|
||||
screenshot "$FILENAME"
|
||||
yank "$FILENAME"
|
||||
printf %s "$FILENAME"
|
||||
|
||||
notify-send --urgency=low "Screenshot taken"
|
||||
|
@@ -2,5 +2,4 @@
|
||||
# SPDX-License-Identifier: AGPL-3.0-only
|
||||
# Copyright 2022 Sxmo Contributors
|
||||
# title="$icon_cam Screenshot (selection)"
|
||||
dir="$(dirname "$0")"
|
||||
"$dir/sxmo_screenshot.sh" selection
|
||||
sxmo_screenshot.sh selection
|
||||
|
@@ -16,24 +16,28 @@ timerrun() {
|
||||
DATE1="$(($(date +%s) + TIME))";
|
||||
while [ "$DATE1" -ge "$(date +%s)" ]; do
|
||||
printf "%s\r" "$(date -u --date @$((DATE1 - $(date +%s))) +%H:%M:%S)";
|
||||
sleep 0.1
|
||||
sxmo_aligned_sleep 1
|
||||
done
|
||||
echo "Done with $*"
|
||||
|
||||
while : ;
|
||||
do notify-send "Done with $*";
|
||||
sxmo_vibrate 1000
|
||||
sxmo_vibrate 1000 "${SXMO_VIBRATE_STRENGTH:-1}"
|
||||
sleep 0.5
|
||||
done
|
||||
}
|
||||
|
||||
cleanwakelock() {
|
||||
sxmo_wakelock.sh unlock sxmo_"$(basename "$0")"
|
||||
}
|
||||
|
||||
stopwatchrun() {
|
||||
start="$(date +%s)"
|
||||
while : ; do
|
||||
time="$(($(date +%s) - start))"
|
||||
printf '%s\r' "$(date -u -d "@$time" +%H:%M:%S)"
|
||||
sxmo_aligned_sleep 1
|
||||
done
|
||||
sleep 0.1
|
||||
}
|
||||
|
||||
menu() {
|
||||
@@ -59,9 +63,13 @@ EOF
|
||||
exit 0
|
||||
;;
|
||||
"Stopwatch")
|
||||
sxmo_wakelock.sh lock sxmo_"$(basename "$0")" infinite
|
||||
trap 'cleanwakelock' INT TERM EXIT
|
||||
sxmo_terminal.sh "$0" stopwatchrun
|
||||
;;
|
||||
*)
|
||||
sxmo_wakelock.sh lock sxmo_"$(basename "$0")" infinite
|
||||
trap 'cleanwakelock' INT TERM EXIT
|
||||
sxmo_terminal.sh "$0" timerrun "$TIMEINPUT"
|
||||
;;
|
||||
esac
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user