8 Commits

Author SHA1 Message Date
0b3ce90e74 sxmo_rotate: don't restart lisgd on sway
AFAICT we restart lisgd because it learns the orientation via its
`-o <orientation>` CLI argument. but we only pass that flag on dwm/x11,
not sway. restarting it on sway is wasteful, and potentially racy (i'm
able to get multiple lisgd's running just by enabling autorotate and
flipping the phone rapidly), so don't do that.
2023-07-16 12:45:54 +00:00
bf00570117 sxmo_wmmenu: respect SXMO_WORKSPACE_WRAPPING
sxmo_wm.sh uses the `SXMO_WORKSPACE_WRAPPING` variable to control
relative movements. for example, set this to "5" and then the "Next
Workspace" option in the switch menu will cycle WS 1 -> 2 ... -> 5 -> 1.
same for one- and two-finger left/right swipe to switch/move workspaces.

however, absolute movements (via the move menu) only allowed moving to
WS 1-4. a user with non-default `SXMO_WORKSPACE_WRAPPING` could move a
window from WS 5 to WS 4 with this menu, but not from WS 4 back to WS 5.
this patch brings consistency by using `SXMO_WORKSPACE_WRAPPING`
anywhere we would otherwise assume the number of possible workspaces.
2023-07-15 21:36:58 +00:00
0cffdeafab sxmo_hook_rotate.sh: update docs for CLI args
see `swayrotinvert()` in sxmo_rotate.sh, which calls this hook with "invert"
2023-07-12 00:30:26 +00:00
e2d0cedd21 sxmo_hook_apps: add a few 2023-07-09 22:13:14 +00:00
021462a4a5 sxmo_autorotate: allow all four orientations 2023-07-09 07:25:31 +00:00
6027263770 sxmo_swayinitconf: fix xkb paths
the xkb files were moved in 6a529751 but not all references were updated
2023-07-09 07:25:31 +00:00
2e8504c5e0 NOT FOR UPSTREAM: sxmo_hook_start: don't start audio daemons
these are managed by the OS
2023-07-09 07:25:31 +00:00
c2cf64e7ca NOT FOR UPSTREAM: remove explicit busybox calls 2023-07-09 07:25:31 +00:00
179 changed files with 1611 additions and 1649 deletions

View File

@@ -5,10 +5,15 @@ packages:
- shellspec - shellspec
- gojq - gojq
- jq - jq
- icu-dev
sources: sources:
- https://git.sr.ht/~mil/sxmo-utils - https://git.sr.ht/~mil/sxmo-utils
tasks: tasks:
- test: | - shellcheck: |
cd sxmo-utils cd sxmo-utils
make test find . -type f -name '*.sh' -print0 | xargs -0 shellcheck -x --shell=sh
- shellspec: |
cd sxmo-utils
shellspec
- editorconfig-check: |
cd sxmo-utils
ec

View File

@@ -1,20 +1,12 @@
DESTDIR= DESTDIR=
PREFIX:=/usr PREFIX:=/usr
SYSCONFDIR:=/etc
SHAREDIR=$(PREFIX)/share SHAREDIR=$(PREFIX)/share
MANDIR=$(SHAREDIR)/man 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 SCDOC=scdoc
.PHONY: install test shellcheck shellspec test_legacy_nerdfont .PHONY: install shellcheck
VERSION:=1.15.2 VERSION:=1.13.0
GITVERSION:=$(shell git describe --tags) GITVERSION:=$(shell git describe --tags)
@@ -33,20 +25,11 @@ docs/%: docs/%.scd
all: $(PROGRAMS) $(DOCS) all: $(PROGRAMS) $(DOCS)
test: shellcheck shellspec test_legacy_nerdfont test: shellcheck
shellcheck: shellcheck:
find . -type f -name '*.sh' -print0 | xargs -0 shellcheck -x --shell=sh 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 programs/%: programs/%.c
$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ $< $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ $<
@@ -75,19 +58,24 @@ install-scripts: $(PROGRAMS)
cd resources && find . -type f -exec install -D -m 0644 "{}" "$(DESTDIR)$(PREFIX)/share/sxmo/{}" \; && cd .. cd resources && find . -type f -exec install -D -m 0644 "{}" "$(DESTDIR)$(PREFIX)/share/sxmo/{}" \; && cd ..
install -D -m 0644 -t $(DESTDIR)$(PREFIX)/lib/udev/rules.d/ configs/udev/*.rules # 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)/share/applications/ configs/xdg/mimeapps.list install -D -m 0644 -t $(DESTDIR)$(PREFIX)/share/applications/ configs/xdg/mimeapps.list
install -D -m 0640 -t $(DESTDIR)$(SYSCONFDIR)/doas.d/ configs/doas/sxmo.conf install -D -m 0640 -t $(DESTDIR)/etc/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 install -D -m 0644 -T configs/xorg/monitor.conf $(DESTDIR)$(PREFIX)/share/X11/xorg.conf.d/90-monitor.conf
mkdir -p $(DESTDIR)$(SYSCONFDIR)/NetworkManager/dispatcher.d mkdir -p $(DESTDIR)/etc/NetworkManager/dispatcher.d
install -D -m 0644 -T configs/appcfg/mpv_input.conf $(DESTDIR)$(SYSCONFDIR)/mpv/input.conf install -D -m 0644 -T configs/appcfg/mpv_input.conf $(DESTDIR)/etc/mpv/input.conf
install -D -m 0755 -T configs/profile.d/sxmo_init.sh $(DESTDIR)$(SYSCONFDIR)/profile.d/sxmo_init.sh install -D -m 0755 -T configs/profile.d/sxmo_init.sh $(DESTDIR)/etc/profile.d/sxmo_init.sh
# Migrations # Migrations
install -D -t $(DESTDIR)$(PREFIX)/share/sxmo/migrations migrations/* install -D -t $(DESTDIR)$(PREFIX)/share/sxmo/migrations migrations/*
@@ -105,11 +93,9 @@ install-scripts: $(PROGRAMS)
mkdir -p "$(DESTDIR)$(PREFIX)/share/sxmo/appscripts" 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 ../.. cd scripts/appscripts && find . -name 'sxmo_*.sh' | xargs -I{} ln -fs "$(PREFIX)/bin/{}" "$(DESTDIR)$(PREFIX)/share/sxmo/appscripts/{}" && cd ../..
mkdir -p "$(DESTDIR)$(SERVICEDIR)"
install -m 0644 -t "$(DESTDIR)$(SERVICEDIR)" configs/services/* mkdir -p "$(DESTDIR)$(PREFIX)/share/superd/services"
if [ "$(EXTERNAL_SERVICES)" = "1" ]; then \ install -m 0644 -t $(DESTDIR)$(PREFIX)/share/superd/services configs/superd/services/*
install -m 0644 -t "$(DESTDIR)$(SERVICEDIR)" configs/external-services/*; \
fi
@echo "-------------------------------------------------------------------">&2 @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 @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

View File

@@ -28,10 +28,7 @@ command -v firefox >/dev/null && export BROWSER=firefox
#export SXMO_SUBREDDITS="postmarketos pinephoneOfficial pinephone unixporn" #export SXMO_SUBREDDITS="postmarketos pinephoneOfficial pinephone unixporn"
# Change the default terminal command # Change the default terminal command
export TERMCMD="sxmo_terminal.sh" # export TERMCMD="st -e"
# Change the used terminal command
# export SXMO_TERMINAL="st -e"
# When scrolling past the beginning or end of a menu, wrap it around: # When scrolling past the beginning or end of a menu, wrap it around:
#export DMENU_WRAP_AROUND=1 #export DMENU_WRAP_AROUND=1

View File

@@ -20,38 +20,28 @@ set $term sxmo_terminal.sh
# on the original workspace that the command was run on. # on the original workspace that the command was run on.
set $menu bemenu-run set $menu bemenu-run
font "Sxmo 11" font "Sxmo 10"
exec_always sxmo_swayinitconf.sh exec_always sxmo_swayinitconf.sh
exec_always dbus-update-activation-environment WAYLAND_DISPLAY DISPLAY XDG_CURRENT_DESKTOP exec_always dbus-update-activation-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
mode "menu" { mode "menu" {
# This is slower than remapping the keys using a keymap, but we don't need bindsym --input-device=1:1:1c21800.lradc XF86AudioMute exec nothing # just a placeholder for "menu" mode
# 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 ### Key bindings
# #
# Basics: # Basics:
# #
input * xkb_options compose:ralt
# Start a terminal # Start a terminal
bindsym $mod+Return exec $term bindsym $mod+Return exec $term
# Launch appmenu # Launch appmenu
bindsym $mod+p exec sxmo_appmenu.sh bindsym $mod+p exec sxmo_appmenu.sh
bindsym $mod+Shift+p exec sxmo_appmenu.sh sys
# Wm menu switcher # Launch scripts menu
bindsym $mod+i exec sxmo_wmmenu.sh windowswitcher bindsym $mod+i exec sxmo_appmenu.sh scripts
# Kill focused window # Kill focused window
bindsym $mod+Shift+q kill bindsym $mod+Shift+q kill
@@ -143,7 +133,7 @@ mode "menu" {
bindsym $mod+e layout toggle split bindsym $mod+e layout toggle split
# Make the current focus fullscreen # Make the current focus fullscreen
bindsym $mod+f fullscreen # bindsym $mod+f fullscreen
# Toggle the current focus between tiling and floating mode # Toggle the current focus between tiling and floating mode
bindsym $mod+Shift+space floating toggle bindsym $mod+Shift+space floating toggle
@@ -153,13 +143,6 @@ mode "menu" {
# Move focus to the parent container # Move focus to the parent container
bindsym $mod+a focus parent 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: # Scratchpad:
# #
@@ -180,16 +163,16 @@ mode "resize" {
# right will grow the containers width # right will grow the containers width
# up will shrink the containers height # up will shrink the containers height
# down will grow the containers height # down will grow the containers height
bindsym $left resize shrink width 30px bindsym $left resize shrink width 10px
bindsym $down resize grow height 30px bindsym $down resize grow height 10px
bindsym $up resize shrink height 30px bindsym $up resize shrink height 10px
bindsym $right resize grow width 30px bindsym $right resize grow width 10px
# Ditto, with arrow keys # Ditto, with arrow keys
bindsym Left resize shrink width 30px bindsym Left resize shrink width 10px
bindsym Down resize grow height 30px bindsym Down resize grow height 10px
bindsym Up resize shrink height 30px bindsym Up resize shrink height 10px
bindsym Right resize grow width 30px bindsym Right resize grow width 10px
# Return to default mode # Return to default mode
bindsym Return mode "default" bindsym Return mode "default"
@@ -214,35 +197,17 @@ bar {
statusline #ffffff statusline #ffffff
background #323232 background #323232
inactive_workspace #32323200 #32323200 #5c5c5c inactive_workspace #32323200 #32323200 #5c5c5c
font "Sxmo 11" font "Sxmo"
} }
} }
for_window [app_id="pinentry-.*"] floating true
for_window [app_id="foot" title=".*sxmo/modem/.*/draft.txt.*"] resize set height 25 for_window [app_id="foot" title=".*sxmo/modem/.*/draft.txt.*"] resize set height 25
for_window [title="megapixels"] inhibit_idle open for_window [title="megapixels"] inhibit_idle open
for_window [title="ep[yr].*"] inhibit_idle visible
default_border pixel 3 default_border pixel 3
titlebar_border_thickness 3 titlebar_border_thickness 3
hide_edge_borders smart 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/* include /etc/sway/config.d/*
exec 'printf %s "$SWAYSOCK" > "$XDG_RUNTIME_DIR"/sxmo.swaysock' exec 'printf %s "$SWAYSOCK" > "$XDG_RUNTIME_DIR"/sxmo.swaysock'

View File

@@ -1,6 +1,6 @@
[Desktop Entry] [Desktop Entry]
Name=nsxiv Image Viewer Name=sxiv Image Viewer
Exec=nsxiv Exec=sxiv
Terminal=false Terminal=false
Type=Application Type=Application
MimeType=image/jpeg;image/png;image/gif MimeType=image/jpeg;image/png;image/gif

View File

@@ -2,7 +2,7 @@
# SPDX-License-Identifier: AGPL-3.0-only # SPDX-License-Identifier: AGPL-3.0-only
# Copyright 2022 Sxmo Contributors # Copyright 2022 Sxmo Contributors
sxmo_jobs.sh start idle_locker sxmo_idle.sh -w \ sxmo_daemons.sh start idle_locker sxmo_idle.sh -w \
timeout 10 'sxmo_wm.sh dpms on' \ timeout 10 'sxmo_wm.sh dpms on' \
resume 'sxmo_wm.sh dpms off' resume 'sxmo_wm.sh dpms off'
@@ -15,5 +15,4 @@ case "$SXMO_WM" in
;; ;;
esac esac
# need & cause we are still holding flock sxmo_hook_unlock.sh
sxmo_state.sh set unlock &

View File

@@ -0,0 +1,13 @@
#!/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

View File

@@ -0,0 +1 @@
three_button_touchscreen

View File

@@ -0,0 +1 @@
three_button_touchscreen

View File

@@ -0,0 +1,299 @@
#!/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

View File

@@ -6,12 +6,6 @@
# shellcheck source=scripts/core/sxmo_common.sh # shellcheck source=scripts/core/sxmo_common.sh
. sxmo_common.sh . sxmo_common.sh
if [ -z "$SXMO_NO_MODEM" ]; then sxmo_wakelock.sh lock stay_awake "${SXMO_UNLOCK_IDLE_TIME:-120}s"
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 # Add here whatever you want to do

View File

@@ -0,0 +1,28 @@
#!/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

View File

@@ -0,0 +1 @@
three_button_touchscreen

View File

@@ -0,0 +1 @@
three_button_touchscreen

View File

@@ -0,0 +1 @@
three_button_touchscreen/

View File

@@ -0,0 +1 @@
three_button_touchscreen

View File

@@ -0,0 +1 @@
one_button_e_reader

View File

@@ -0,0 +1 @@
three_button_touchscreen

View File

@@ -0,0 +1 @@
three_button_touchscreen

View File

@@ -0,0 +1 @@
three_button_touchscreen

View File

@@ -0,0 +1 @@
three_button_touchscreen

View File

@@ -0,0 +1 @@
three_button_touchscreen

View File

@@ -0,0 +1 @@
three_button_touchscreen

View File

@@ -0,0 +1 @@
three_button_touchscreen

View File

@@ -0,0 +1 @@
three_button_touchscreen

View File

@@ -0,0 +1 @@
three_button_touchscreen

View File

@@ -0,0 +1 @@
three_button_touchscreen/

View File

@@ -0,0 +1 @@
three_button_touchscreen

View File

@@ -0,0 +1 @@
three_button_touchscreen

View File

@@ -0,0 +1 @@
three_button_touchscreen

View File

@@ -0,0 +1 @@
three_button_touchscreen

View File

@@ -0,0 +1 @@
three_button_touchscreen

View File

@@ -0,0 +1 @@
three_button_touchscreen

View File

@@ -0,0 +1 @@
three_button_touchscreen

View File

@@ -0,0 +1 @@
three_button_touchscreen

View File

@@ -1,5 +0,0 @@
#!/bin/sh
# This script is executed after the last call finished
sxmo_playerctl.sh resume_all

View File

@@ -15,40 +15,29 @@ write_line_app() {
executable="$1" executable="$1"
label="$2" label="$2"
command="$3" command="$3"
inline="$4"
if command -v "$executable" >/dev/null; then if command -v "$executable" >/dev/null; then
if [ "$inline" != "" ]; then write_line "$label" "$command"
write_line "$label" "$command"
else
write_line "$label" "sxmo_wm.sh exec $command"
fi
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 jami-qt "$icon_msg Jami" "jami-qt"
write_line_app aerc "$icon_eml Aerc" "sxmo_terminal.sh aerc" write_line_app aerc "$icon_eml Aerc" "sxmo_terminal.sh aerc"
write_line_app amberol "$icon_mus Amberol" "amberol $XDG_MUSIC_DIR" write_line_app geary "$icon_eml Geary" "geary"
write_line_app amfora "$icon_glb Amfora" "sxmo_terminal.sh amfora" 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 alpine "$icon_eml Alpine" "sxmo_terminal.sh alpine"
write_line_app anbox-launch "$icon_and Anbox" "anbox" write_line_app anbox-launch "$icon_and Anbox" "anbox"
write_line_app anki "$icon_str Anki" "anki" write_line_app anki "$icon_str Anki" "anki"
write_line_app audacity "$icon_mic Audacity" "audacity" 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 gnome-calculator "$icon_clc Calculator" "gnome-calculator"
write_line_app calcurse "$icon_clk Calcurse" "sxmo_terminal.sh calcurse" 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 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 cozy "$icon_mus Cozy" "com.github.geigi.cozy"
write_line_app dino "$icon_msg Dino" "GDK_SCALE=1 dino" write_line_app dino "$icon_msg Dino" "GDK_SCALE=1 dino"
write_line_app dolphin "$icon_dir Dolphin" "dolphin" 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 (Terminal)" "sxmo_terminal.sh emacs -nw"
write_line_app emacs "$icon_edt Emacs (X)" "emacs" write_line_app emacs "$icon_edt Emacs (X)" "emacs"
write_line_app epiphany "$icon_glb Epiphany" "epiphany" write_line_app epiphany "$icon_glb Epiphany" "epiphany"
write_line_app epy "$icon_bok Epy" "sxmo_terminal.sh epy" 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 evince "$icon_bok Evince" "evince"
write_line_app falkon "$icon_flk Falkon" "falkon" write_line_app falkon "$icon_flk Falkon" "falkon"
write_line_app firefox "$icon_ffx Firefox" "firefox" write_line_app firefox "$icon_ffx Firefox" "firefox"
@@ -57,24 +46,23 @@ write_line_app foliate "$icon_bok Foliate" "foliate"
( [ "$SXMO_WM" = sway ] && command -v foot >/dev/null) && \ ( [ "$SXMO_WM" = sway ] && command -v foot >/dev/null) && \
write_line "$icon_trm Foot" "foot $SHELL" write_line "$icon_trm Foot" "foot $SHELL"
write_line_app foxtrotgps "$icon_gps Foxtrotgps" "foxtrotgps" 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 geany "$icon_eml Geany" "geany"
write_line_app geary "$icon_eml Geary" "geary"
write_line_app gedit "$icon_edt Gedit" "gedit" write_line_app gedit "$icon_edt Gedit" "gedit"
write_line_app geeqie "$icon_img Geeqie" "geeqie" write_line_app geeqie "$icon_img Geeqie" "geeqie"
write_line_app geopard "$icon_glb Geopard" "geopard" write_line_app geopard "$icon_glb Geopard" "geopard"
write_line_app gerbil "$icon_glb Gerbil" "gerbil" write_line_app gerbil "$icon_glb Gerbil" "gerbil"
write_line_app giara "$icon_red Giara" "giara" write_line_app giara "$icon_red Giara" "giara"
write_line_app gnome-chess "$icon_chs Gnome Chess" "gnome-chess" 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 gomuks "$icon_msg Gomuks" "sxmo_terminal.sh gomuks"
write_line_app gpodder "$icon_rss gPodder" "gpodder" write_line_app gpodder "$icon_rss gPodder" "gpodder"
write_line_app gthumb "$icon_img gThumb" "gthumb"
write_line_app gucharmap "$icon_inf Gucharmap" "gucharmap" write_line_app gucharmap "$icon_inf Gucharmap" "gucharmap"
write_line_app hexchat "$icon_msg Hexchat" "hexchat" write_line_app hexchat "$icon_msg Hexchat" "hexchat"
write_line_app htop "$icon_cfg Htop" "sxmo_terminal.sh htop" write_line_app htop "$icon_cfg Htop" "sxmo_terminal.sh htop"
write_line_app irssi "$icon_msg Irssi" "sxmo_terminal.sh irssi" write_line_app irssi "$icon_msg Irssi" "sxmo_terminal.sh irssi"
write_line_app ii "$icon_msg Ii" "sxmo_terminal.sh ii" 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 ipython "$icon_trm IPython" "sxmo_terminal.sh ipython"
write_line_app jellyfinmediaplayer "$icon_mvi Jellyfin" "jellyfinmediaplayer"
write_line_app kasts "$icon_rss Kasts" "kasts" write_line_app kasts "$icon_rss Kasts" "kasts"
write_line_app kmail "$icon_eml KMail" "kmail" write_line_app kmail "$icon_eml KMail" "kmail"
write_line_app komikku "$icon_bok Komikku" "komikku" write_line_app komikku "$icon_bok Komikku" "komikku"
@@ -89,11 +77,9 @@ write_line_app librewolf "$icon_glb Librewolf" "librewolf"
write_line_app lollypop "$icon_mus Lollypop" "lollypop" write_line_app lollypop "$icon_mus Lollypop" "lollypop"
write_line_app luakit "$icon_glb Luakit" "luakit" write_line_app luakit "$icon_glb Luakit" "luakit"
write_line_app marble "$icon_map Marble" "marble" 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 micro "$icon_edt Micro" "sxmo_terminal.sh micro"
write_line_app midori "$icon_glb Midori" "midori" write_line_app midori "$icon_glb Midori" "midori"
write_line_app mutt "$icon_eml Mutt" "sxmo_terminal.sh mutt" 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 nano "$icon_edt Nano" "sxmo_terminal.sh nano"
write_line_app navit "$icon_gps Navit" "navit" write_line_app navit "$icon_gps Navit" "navit"
write_line_app ncmpcpp "$icon_mus Ncmpcpp" "sxmo_terminal.sh ncmpcpp" write_line_app ncmpcpp "$icon_mus Ncmpcpp" "sxmo_terminal.sh ncmpcpp"
@@ -104,15 +90,11 @@ write_line_app netsurf "$icon_glb Netsurf" "netsurf"
write_line_app newsboat "$icon_rss Newsboat" "sxmo_terminal.sh newsboat" 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 com.gitlab.newsflash "$icon_rss Newsflash" com.gitlab.newsflash
write_line_app nnn "$icon_dir Nnn" "sxmo_terminal.sh nnn" 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 pidgin "$icon_msg Pidgin" "pidgin"
write_line_app pulsemixer "$icon_mus Pulsemixer" "sxmo_terminal.sh pulsemixer" 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 pure-maps "$icon_map Pure-Maps" "pure-maps"
write_line_app mepo "$icon_map mepo" "mepo" write_line_app mepo "$icon_map mepo" "mepo"
write_line_app podboat "$icon_rss Podboat" "sxmo_terminal.sh podboat" 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 profanity "$icon_msg Profanity" "sxmo_terminal.sh profanity"
write_line_app qutebrowser "$icon_glb Qutebrowser" "qutebrowser" write_line_app qutebrowser "$icon_glb Qutebrowser" "qutebrowser"
write_line_app ranger "$icon_dir Ranger" "sxmo_terminal.sh ranger" write_line_app ranger "$icon_dir Ranger" "sxmo_terminal.sh ranger"
@@ -122,9 +104,9 @@ write_line_app senpai "$icon_msg Senpai" "sxmo_terminal.sh senpai"
write_line_app sic "$icon_msg Sic" "sxmo_terminal.sh sic" write_line_app sic "$icon_msg Sic" "sxmo_terminal.sh sic"
([ "$SXMO_WM" = dwm ] && command -v st >/dev/null) && \ ([ "$SXMO_WM" = dwm ] && command -v st >/dev/null) && \
write_line "$icon_trm St" "st -e $SHELL" write_line "$icon_trm St" "st -e $SHELL"
write_line_app sublime-music "$icon_mus Sublime Music" "sublime-music"
write_line_app surf "$icon_glb Surf" "surf" write_line_app surf "$icon_glb Surf" "surf"
write_line_app syncthing "$icon_rld Syncthing" "syncthing" 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 telegram-desktop "$icon_tgm Telegram" "telegram-desktop"
write_line_app termite "$icon_trm Termite" "termite -e $SHELL" write_line_app termite "$icon_trm Termite" "termite -e $SHELL"
write_line_app thunar "$icon_dir Thunar" "sxmo_terminal.sh thunar" write_line_app thunar "$icon_dir Thunar" "sxmo_terminal.sh thunar"
@@ -132,12 +114,11 @@ 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 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 re.sonny.Tangram "$icon_glb Tangram" "re.sonny.Tangram"
write_line_app totem "$icon_mvi Totem" "totem" write_line_app totem "$icon_mvi Totem" "totem"
write_line_app dev.geopjr.Tuba "$icon_msg Tuba" "dev.geopjr.Tuba" write_line_app dev.geopjr.Tuba "$icon_grp Tuba" "dev.geopjr.Tuba"
write_line_app tuir "$icon_red Tuir" "sxmo_terminal.sh tuir" 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 tut "$icon_msg Tut" "sxmo_terminal.sh tut"
write_line_app waydroid "$icon_and Waydroid" "waydroid show-full-ui" 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 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 pavucontrol "$icon_mus Pavucontrol" "pavucontrol"
write_line_app w3m "$icon_glb W3m" "sxmo_terminal.sh w3m duck.com" write_line_app w3m "$icon_glb W3m" "sxmo_terminal.sh w3m duck.com"
write_line_app vim "$icon_vim Vim" "sxmo_terminal.sh vim" write_line_app vim "$icon_vim Vim" "sxmo_terminal.sh vim"
@@ -151,4 +132,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 xournal "$icon_bok Xournal" "xournal"
write_line_app xournalpp "$icon_bok Xournalpp" "xournalpp" write_line_app xournalpp "$icon_bok Xournalpp" "xournalpp"
write_line_app zathura "$icon_bok Zathura" "zathura" 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 --wrapper='sxmo_wm.sh exec'" "inline" write_line_app j4-dmenu-desktop "$icon_grd All apps" "j4-dmenu-desktop --dmenu=sxmo_dmenu.sh --term=sxmo_terminal.sh"

View File

@@ -1,41 +0,0 @@
#!/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

View File

@@ -30,7 +30,6 @@ delay() {
wait_item() { wait_item() {
delay_time=1 delay_time=1
while $1 > /dev/null 2>&1; do while $1 > /dev/null 2>&1; do
sxmo_log "Blocking suspend for $1"
waited=1 waited=1
${2:-delay} ${2:-delay}
done done
@@ -48,10 +47,6 @@ in_call() {
pgrep -f sxmo_modemcall.sh pgrep -f sxmo_modemcall.sh
} }
in_call_dino() {
command -v pw-link && [ -n "$(pw-link -o Dino)" ]
}
hotspot_active() { hotspot_active() {
nmcli -t c show --active | grep -q ^Hotspot nmcli -t c show --active | grep -q ^Hotspot
} }
@@ -87,7 +82,6 @@ while [ "$waited" != "0" ]; do
waited=0 waited=0
wait_item suspend_disabled wait_item suspend_disabled
wait_item in_call wait_item in_call
wait_item in_call_dino
wait_item hotspot_active wait_item hotspot_active
wait_item ssh_connected wait_item ssh_connected
wait_item active_mosh wait_item active_mosh

View File

@@ -21,7 +21,6 @@ if [ "$1" = "enable" ]; then
# Add other things here, e.g., volume boosters # Add other things here, e.g., volume boosters
sxmo_modemaudio.sh is_disabled_speaker && sxmo_modemaudio.sh is_unmuted_mic
# Phonecall ended # Phonecall ended
elif [ "$1" = "disable" ]; then elif [ "$1" = "disable" ]; then
sxmo_log "Attempting hack to get things just right." sxmo_log "Attempting hack to get things just right."
@@ -31,5 +30,4 @@ elif [ "$1" = "disable" ]; then
# Add other things here, e.g., volume boosters # Add other things here, e.g., volume boosters
sxmo_modemaudio.sh is_enabled_speaker
fi fi

View File

@@ -19,7 +19,7 @@ superd_service_isrunning() {
} }
sxmo_service_isrunning() { sxmo_service_isrunning() {
sxmo_jobs.sh running "$1" > /dev/null sxmo_daemons.sh running "$1" > /dev/null
} }
if [ -z "$XPROPOUT" ]; then if [ -z "$XPROPOUT" ]; then
@@ -74,7 +74,7 @@ case "$WMCLASS" in
$icon_cfg Gestures $( $icon_cfg Gestures $(
superd_service_isrunning "sxmo_hook_lisgd" && superd_service_isrunning "sxmo_hook_lisgd" &&
printf "%s" "$icon_ton" || printf "%s" "$icon_tof" printf "%s" "$icon_ton" || printf "%s" "$icon_tof"
) ^ 1 ^ supertoggle_daemon 'sxmo_hook_lisgd' && (rm $XDG_CACHE_HOME/sxmo/sxmo.nogesture 2>/dev/null || touch $XDG_CACHE_HOME/sxmo/sxmo.nogesture) ) ^ 1 ^ supertoggle_daemon 'sxmo_hook_lisgd'
$icon_cfg Toggle Bar ^ 0 ^ sxmo_wm.sh togglebar $icon_cfg Toggle Bar ^ 0 ^ sxmo_wm.sh togglebar
$icon_bth Bluetooth $( $icon_bth Bluetooth $(
rfkill list bluetooth | grep -q "yes" && rfkill list bluetooth | grep -q "yes" &&
@@ -85,25 +85,21 @@ case "$WMCLASS" in
$icon_clk Change Timezone ^ 1 ^ sxmo_timezonechange.sh $icon_clk Change Timezone ^ 1 ^ sxmo_timezonechange.sh
$icon_zzz Auto-suspend $( $icon_zzz Auto-suspend $(
[ -e "$XDG_CACHE_HOME"/sxmo/sxmo.nosuspend ] && printf "%s" "$icon_tof" || printf "%s" "$icon_ton" [ -e "$XDG_CACHE_HOME"/sxmo/sxmo.nosuspend ] && printf "%s" "$icon_tof" || printf "%s" "$icon_ton"
) ^ 1 ^ (rm $XDG_CACHE_HOME/sxmo/sxmo.nosuspend 2>/dev/null || touch $XDG_CACHE_HOME/sxmo/sxmo.nosuspend) ) ^ 1 ^ (rm $XDG_CACHE_HOME/sxmo/sxmo.nosuspend || touch $XDG_CACHE_HOME/sxmo/sxmo.nosuspend)
$icon_zzz Auto-screen-off $( $icon_zzz Auto-screen-off $(
[ -e "$XDG_CACHE_HOME/sxmo/sxmo.noidle" ] && printf "%s" "$icon_tof" || printf "%s" "$icon_ton" [ -e "$XDG_CACHE_HOME/sxmo/sxmo.noidle" ] && printf "%s" "$icon_tof" || printf "%s" "$icon_ton"
) ^ 1 ^ (rm $XDG_CACHE_HOME/sxmo/sxmo.noidle 2>/dev/null || touch $XDG_CACHE_HOME/sxmo/sxmo.noidle) && sxmo_state.sh set unlock ) ^ 1 ^ (rm $XDG_CACHE_HOME/sxmo/sxmo.noidle || touch $XDG_CACHE_HOME/sxmo/sxmo.noidle) && sxmo_hook_unlock.sh
$icon_ror Autorotate $( $icon_ror Autorotate $(
sxmo_jobs.sh running autorotate -q && sxmo_daemons.sh running autorotate -q &&
printf "%s" "$icon_ton" || printf "%s" "$icon_tof" printf "%s" "$icon_ton" || printf "%s" "$icon_tof"
) ^ 1 ^ toggle_daemon 'Autorotate' autorotate sxmo_autorotate.sh ) ^ 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_ror Rotate ^ 1 ^ sxmo_rotate.sh rotate
$icon_trm Hooks ^ 0 ^ sxmo_hookmenu.sh $icon_trm Hooks ^ 0 ^ sxmo_hookmenu.sh
$icon_upc Upgrade Pkgs ^ 0 ^ sxmo_terminal.sh sxmo_upgrade.sh $icon_upc Upgrade Pkgs ^ 0 ^ sxmo_terminal.sh sxmo_upgrade.sh
$icon_sfl Migrate configuration ^ 0 ^ sxmo_terminal.sh sxmo_migrate.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) $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") $(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_debug_suspend.sh $icon_cfg Suspend Blockers ^ 0 ^ sxmo_terminal.sh sxmo_wakelock.sh debug watch
$icon_inf Version ^ 0 ^ sxmo_terminal.sh sxmo_version.sh --block $icon_inf Version ^ 0 ^ sxmo_terminal.sh sxmo_version.sh --block
" "
WINNAME=Config WINNAME=Config
@@ -111,8 +107,8 @@ case "$WMCLASS" in
power) power)
# Power menu # Power menu
CHOICES=" CHOICES="
$icon_lck Lock ^ 0 ^ sxmo_state.sh set lock $icon_lck Lock ^ 0 ^ sxmo_hook_lock.sh
$icon_lck Lock (Screen off) ^ 0 ^ sxmo_state.sh set screenoff $icon_lck Lock (Screen off) ^ 0 ^ sxmo_hook_screenoff.sh
$icon_out Logout ^ 0 ^ confirm Logout && sxmo_power.sh logout $icon_out Logout ^ 0 ^ confirm Logout && sxmo_power.sh logout
$([ -f "$(xdg_data_path xsessions/sxmo.desktop)" ] && $([ -f "$(xdg_data_path xsessions/sxmo.desktop)" ] &&
[ -f "$(xdg_data_path wayland-sessions/swmo.desktop)" ] && [ -f "$(xdg_data_path wayland-sessions/swmo.desktop)" ] &&
@@ -140,14 +136,6 @@ case "$WMCLASS" in
" "
WINNAME=Mpv 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*)
# Feh # Feh
CHOICES=" CHOICES="
@@ -610,7 +598,6 @@ case "$WMCLASS" in
*geopard*) *geopard*)
# Geopard # Geopard
CHOICES=" CHOICES="
$icon_flt Pipe URL ^ 0 ^ sxmo_urlhandler.sh
$icon_pls New Tab ^ 0 ^ sxmo_type -M Ctrl t $icon_pls New Tab ^ 0 ^ sxmo_type -M Ctrl t
$icon_cls Close Tab ^ 0 ^ sxmo_type -M Ctrl w $icon_cls Close Tab ^ 0 ^ sxmo_type -M Ctrl w
$icon_bok Open Bookmarks ^ 0 ^ sxmo_type -M Ctrl b $icon_bok Open Bookmarks ^ 0 ^ sxmo_type -M Ctrl b
@@ -640,19 +627,6 @@ case "$WMCLASS" in
" "
WINNAME=Lagrange 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*)
# Mepo # Mepo
# The choices / hotkeys for the contextmenu are generated through mepo's # The choices / hotkeys for the contextmenu are generated through mepo's
@@ -697,7 +671,6 @@ case "$WMCLASS" in
$icon_net Networks ^ 0 ^ sxmo_networks.sh $icon_net Networks ^ 0 ^ sxmo_networks.sh
$icon_mus Audio ^ 0 ^ sxmo_audio.sh $icon_mus Audio ^ 0 ^ sxmo_audio.sh
$icon_phn Modem ^ 0 ^ sxmo_appmenu.sh modem $icon_phn Modem ^ 0 ^ sxmo_appmenu.sh modem
$icon_win Windows ^ 0 ^ sxmo_wmmenu.sh
$icon_cfg Config ^ 0 ^ sxmo_appmenu.sh config $icon_cfg Config ^ 0 ^ sxmo_appmenu.sh config
$icon_pwr Power ^ 0 ^ sxmo_appmenu.sh power $icon_pwr Power ^ 0 ^ sxmo_appmenu.sh power
" "

View File

@@ -7,6 +7,10 @@
# up the call). # up the call).
# kill existing ring playback # kill existing ring playback
sxmo_jobs.sh stop ringing 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_playerctl.sh resume_all

View File

@@ -1,3 +1,5 @@
#!/bin/sh #!/bin/sh
# This script is executed (asynchronously) when you hangup an incoming call # This script is executed (asynchronously) when you hangup an incoming call
sxmo_playerctl.sh resume_all

View File

@@ -57,7 +57,7 @@ icon_fil="" #file
icon_flk="" #falkon icon_flk="" #falkon
icon_fll="󰉄" #flashlight icon_fll="󰉄" #flashlight
icon_flt="" #filter/pipe icon_flt="" #filter/pipe
icon_fnd="󰍉" #search/find icon_fnd="" #search/find
icon_gam="󰊴" # gaming controller (🎮) icon_gam="󰊴" # gaming controller (🎮)
icon_glb="" #globe icon_glb="" #globe
icon_gps='' #gps icon_gps='' #gps
@@ -65,7 +65,6 @@ icon_grd="󰀻"
icon_grp="" #group icon_grp="" #group
icon_hdp="" #headphones icon_hdp="" #headphones
icon_hom="" icon_hom=""
icon_hst="󰋎" #headset🗣
icon_img="󰏜" icon_img="󰏜"
icon_inf="" #info icon_inf="" #info
icon_itm="" #item (default) icon_itm="" #item (default)
@@ -136,8 +135,8 @@ icon_wn2=""
icon_wrh="" icon_wrh=""
icon_wtr="" #weather icon_wtr="" #weather
icon_ytb="" #youtube icon_ytb="" #youtube
icon_zmi="󰛭" # Zoom in/magnify icon_zmi=""
icon_zmo="󰛬" # Zoom out/demagnify icon_zmo=""
icon_zzz="" #sleep/suspend/crust icon_zzz="" #sleep/suspend/crust
# modem states # modem states

View File

@@ -8,7 +8,7 @@
LISGD_THRESHOLD="${SXMO_LISGD_THRESHOLD:-125}" LISGD_THRESHOLD="${SXMO_LISGD_THRESHOLD:-125}"
LISGD_THRESHOLD_PRESSED="${SXMO_LISGD_THRESHOLD_PRESSED:-60}" LISGD_THRESHOLD_PRESSED="${SXMO_LISGD_THRESHOLD_PRESSED:-60}"
LISGD_INPUT_DEVICE="${SXMO_LISGD_INPUT_DEVICE:-"/dev/input/by-path/first-touchscreen"}" LISGD_INPUT_DEVICE="${SXMO_LISGD_INPUT_DEVICE:-"/dev/input/touchscreen"}"
if [ dwm = "$SXMO_WM" ]; then if [ dwm = "$SXMO_WM" ]; then
case "$(xrandr | grep primary | cut -d' ' -f 5)" in case "$(xrandr | grep primary | cut -d' ' -f 5)" in
@@ -23,7 +23,7 @@ fi
# fingers,swipe,edge,distance,command # fingers,swipe,edge,distance,command
#order matters, only the first match gets executed #order matters, only the first match gets executed
lisgd "$@" -d "$LISGD_INPUT_DEVICE" ${orientation:+-o $orientation} \ lisgd "$@" -d "$LISGD_INPUT_DEVICE" ${orientation:+-o $orientation} \
-s "${LISGD_EDGE_SIZE:-1.0}" -t "$LISGD_THRESHOLD" -T "$LISGD_THRESHOLD_PRESSED" \ -t "$LISGD_THRESHOLD" -T "$LISGD_THRESHOLD_PRESSED" \
-g "1,DRUL,BR,*,setsid -f sxmo_hook_inputhandler.sh bottomrightcorner" \ -g "1,DRUL,BR,*,setsid -f sxmo_hook_inputhandler.sh bottomrightcorner" \
-g "1,DLUR,BL,*,setsid -f sxmo_hook_inputhandler.sh bottomleftcorner" \ -g "1,DLUR,BL,*,setsid -f sxmo_hook_inputhandler.sh bottomleftcorner" \
-g "1,ULDR,TL,*,setsid -f sxmo_hook_inputhandler.sh topleftcorner" \ -g "1,ULDR,TL,*,setsid -f sxmo_hook_inputhandler.sh topleftcorner" \

View File

@@ -9,4 +9,10 @@
# $1 = Contact Name or Number (if not in contacts) # $1 = Contact Name or Number (if not in contacts)
# kill existing ring playback # kill existing ring playback
sxmo_jobs.sh stop ringing 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

View File

@@ -24,6 +24,7 @@ case "$newstate" in
"enabling") "enabling")
sxmo_log "State is enabling. Clearing stale call files." sxmo_log "State is enabling. Clearing stale call files."
rm "$XDG_RUNTIME_DIR"/sxmo_calls/* 2>/dev/null 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 rm -f "$SXMO_NOTIFDIR"/incomingcall* 2>/dev/null
;; ;;
"registered") "registered")

View File

@@ -6,6 +6,8 @@
# incoming call, i.e., ignore the call ringing in. # incoming call, i.e., ignore the call ringing in.
# kill existing ring playback # kill existing ring playback
sxmo_jobs.sh stop ringing if [ -e "$XDG_RUNTIME_DIR/sxmo.ring.pid" ]; then
MPVID="$(cat "$XDG_RUNTIME_DIR/sxmo.ring.pid")"
sxmo_playerctl.sh resume_all kill "$MPVID"
rm "$XDG_RUNTIME_DIR/sxmo.ring.pid"
fi

View File

@@ -8,9 +8,9 @@
#if [ ! -f "$XDG_CONFIG_HOME"/sxmo/.novibrate ]; then #if [ ! -f "$XDG_CONFIG_HOME"/sxmo/.novibrate ]; then
# VIBS=5 # VIBS=5
# VIBI=0 # VIBI=0
# while [ "$VIBI" -lt "$VIBS" ]; do # while [ $VIBI -lt $VIBS ]; do
# sxmo_vibrate 400 "${SXMO_VIBRATE_STRENGTH:-1}" & # sxmo_vibrate 400 &
# sleep 0.5 # sleep 0.5
# VIBI="$(echo "$VIBI+1" | bc)" # VIBI=$(echo $VIBI+1 | bc)
# done # done
#fi #fi

View File

@@ -5,4 +5,10 @@
# This script is executed (asynchronously) when you pick up an incoming call # This script is executed (asynchronously) when you pick up an incoming call
# kill existing ring playback # kill existing ring playback
sxmo_jobs.sh stop ringing 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

View File

@@ -1,8 +0,0 @@
#!/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)

View File

@@ -100,4 +100,4 @@ if ! daemon_isrunning modemmanager; then
exit 1 exit 1
fi fi
# we want 120s before sleeping again # we want 120s before sleeping again
sxmo_wakelock.sh lock sxmo_modem_manually_reset 120s sxmo_wakelock.sh lock modem_manually_reset 120s

View File

@@ -14,7 +14,7 @@
if sxmo_modemcall.sh list_active_calls \ if sxmo_modemcall.sh list_active_calls \
| grep -v ringing-in \ | grep -v ringing-in \
| grep -q .; then | grep -q .; then
sxmo_vibrate 1500 "${SXMO_VIBRATE_STRENGTH:-1}" sxmo_vibrate 1500
exit exit
fi fi
@@ -25,28 +25,6 @@ if ! sxmo_modemcall.sh list_active_calls \
exit exit
fi 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) # RING & VIBRATE MODE (DEFAULT)
if [ ! -f "$XDG_CONFIG_HOME"/sxmo/.noring ] && [ ! -f "$XDG_CONFIG_HOME"/sxmo/.novibrate ]; then if [ ! -f "$XDG_CONFIG_HOME"/sxmo/.noring ] && [ ! -f "$XDG_CONFIG_HOME"/sxmo/.novibrate ]; then
sxmo_log "RING AND VIBRATE" sxmo_log "RING AND VIBRATE"
@@ -55,8 +33,15 @@ 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. # In order for this to work with mpv, you will need to install mpv-mdis.
sxmo_playerctl.sh pause_all sxmo_playerctl.sh pause_all
ring timeout "$SXMO_RINGTIME" mpv --no-resume-playback --quiet --no-video \
vibrate --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-ONLY MODE # RING-ONLY MODE
elif [ ! -f "$XDG_CONFIG_HOME"/sxmo/.noring ] && [ -f "$XDG_CONFIG_HOME"/sxmo/.novibrate ]; then elif [ ! -f "$XDG_CONFIG_HOME"/sxmo/.noring ] && [ -f "$XDG_CONFIG_HOME"/sxmo/.novibrate ]; then
@@ -66,15 +51,16 @@ 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. # In order for this to work with mpv, you will need to install mpv-mdis.
sxmo_playerctl.sh pause_all sxmo_playerctl.sh pause_all
ring timeout "$SXMO_RINGTIME" mpv --no-resume-playback --quiet --no-video \
--loop="$SXMO_RINGNUMBER" "$SXMO_RINGTONE" >/dev/null &
echo "$!" > "$XDG_RUNTIME_DIR/sxmo.ring.pid"
# VIBRATE-ONLY MODE # VIBRATE-ONLY MODE
elif [ ! -f "$XDG_CONFIG_HOME"/sxmo/.novibrate ] && [ -f "$XDG_CONFIG_HOME"/sxmo/.noring ]; then elif [ ! -f "$XDG_CONFIG_HOME"/sxmo/.novibrate ] && [ -f "$XDG_CONFIG_HOME"/sxmo/.noring ]; then
smxo_log "VIBRATE ONLY" smxo_log "VIBRATE ONLY"
for _ in $(seq 5); do
vibrate sxmo_vibrate 1500
sleep 0.5
done &
echo "$!" > "$XDG_RUNTIME_DIR/sxmo.ring.pid"
fi fi
trap 'finish' INT TERM EXIT
sleep "${SXMO_RINGTIME:-20}" &
wait "$!"

View File

@@ -20,13 +20,11 @@
if ! sxmo_modemcall.sh list_active_calls | grep -q active; then if ! sxmo_modemcall.sh list_active_calls | grep -q active; then
if [ ! -f "$XDG_CONFIG_HOME"/sxmo/.noring ]; 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 fi
if [ ! -f "$XDG_CONFIG_HOME"/sxmo/.novibrate ]; then if [ ! -f "$XDG_CONFIG_HOME"/sxmo/.novibrate ]; then
sxmo_vibrate 500 "${SXMO_VIBRATE_STRENGTH:-1}" & sxmo_vibrate 500
fi fi
wait
fi fi

View File

@@ -3,7 +3,7 @@
# Copyright 2022 Sxmo Contributors # Copyright 2022 Sxmo Contributors
# Allow user to override what we log in the sms.txt file. Note if you change # Allow user to override what we log in the sms.txt file. Note if you change
# this you probably should change sxmo_hook_tailtextlog.sh # this you probably should change sxmo_hook_parselog.sh
# include common definitions # include common definitions
# shellcheck source=scripts/core/sxmo_common.sh # shellcheck source=scripts/core/sxmo_common.sh

View File

@@ -9,38 +9,16 @@
# Create xdg user directories, such as ~/Pictures # Create xdg user directories, such as ~/Pictures
xdg-user-dirs-update xdg-user-dirs-update
sxmo_jobs.sh start daemon_manager superd sxmo_daemons.sh start daemon_manager superd -v
# let time to superd to start correctly # let time to superd to start correctly
while ! superctl status > /dev/null 2>&1; do while ! superctl status > /dev/null 2>&1; do
sleep 0.5 sleep 0.5
done 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 [ -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 # Periodically update some status bar components
sxmo_hook_statusbar.sh all sxmo_hook_statusbar.sh all
sxmo_jobs.sh start statusbar_periodics sxmo_run_aligned.sh 60 \ sxmo_daemons.sh start statusbar_periodics sxmo_run_aligned.sh 60 \
sxmo_hook_statusbar.sh periodics sxmo_hook_statusbar.sh periodics
# mako/dunst are required for warnings. # mako/dunst are required for warnings.
@@ -73,27 +51,24 @@ case "$SXMO_WM" in
;; ;;
esac esac
# To setup initial lock state
sxmo_hook_unlock.sh
# Turn on auto-suspend # Turn on auto-suspend
if sxmo_wakelock.sh isenabled; then if [ -w "/sys/power/wakeup_count" ] && [ -f "/sys/power/wake_lock" ]; then
sxmo_wakelock.sh lock sxmo_not_suspendable infinite
superctl start sxmo_autosuspend superctl start sxmo_autosuspend
fi fi
# To setup initial unlock state
sxmo_state.sh set unlock
# Turn on lisgd # Turn on lisgd
if [ ! -e "$XDG_CACHE_HOME"/sxmo/sxmo.nogesture ]; then superctl start sxmo_hook_lisgd
superctl start sxmo_hook_lisgd
fi
if [ -z "$SXMO_NO_MODEM" ] && command -v ModemManager > /dev/null; then if [ "$(command -v ModemManager)" ]; then
# Turn on the dbus-monitors for modem-related tasks # Turn on the dbus-monitors for modem-related tasks
superctl start sxmo_modemmonitor superctl start sxmo_modemmonitor
# place a wakelock for 120s to allow the modem to fully warm up (eg25 + # 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.) # elogind/systemd would do this for us, but we don't use those.)
sxmo_wakelock.sh lock sxmo_modem_warming_up 120s sxmo_wakelock.sh lock modem_warming_up 120s
fi fi
# Start the desktop widget (e.g. clock) # Start the desktop widget (e.g. clock)
@@ -108,25 +83,26 @@ superctl start sxmo_networkmonitor
# The daemon that display notifications popup messages # The daemon that display notifications popup messages
superctl start sxmo_notificationmonitor superctl start sxmo_notificationmonitor
# monitor for headphone for statusbar
superctl start sxmo_soundmonitor
# Play a funky startup tune if you want (disabled by default) # Play a funky startup tune if you want (disabled by default)
#mpv --quiet --no-video ~/welcome.ogg & #mpv --quiet --no-video ~/welcome.ogg &
# mmsd and vvmd # mmsd and vvmd
if [ -z "$SXMO_NO_MODEM" ]; then if [ -f "${SXMO_MMS_BASE_DIR:-"$HOME"/.mms/modemmanager}/mms" ]; then
if [ -f "${SXMO_MMS_BASE_DIR:-"$HOME"/.mms/modemmanager}/mms" ]; then superctl start mmsd-tng
superctl start mmsd-tng fi
fi
if [ -f "${SXMO_VVM_BASE_DIR:-"$HOME"/.vvm/modemmanager}/vvm" ]; then if [ -f "${SXMO_VVM_BASE_DIR:-"$HOME"/.vvm/modemmanager}/vvm" ]; then
superctl start vvmd superctl start vvmd
fi
fi fi
# add some warnings if things are not setup correctly # add some warnings if things are not setup correctly
if ! command -v "sxmo_deviceprofile_$SXMO_DEVICE_NAME.sh"; then deviceprofile="$(command -v "sxmo_deviceprofile_$SXMO_DEVICE_NAME.sh")"
sxmo_notify_user.sh --urgency=critical \
"No deviceprofile found $SXMO_DEVICE_NAME. See: https://sxmo.org/deviceprofile" [ -f "$deviceprofile" ] || sxmo_notify_user.sh --urgency=critical \
fi "No deviceprofile found $SXMO_DEVICE_NAME. See: https://sxmo.org/deviceprofile"
sxmo_migrate.sh state || sxmo_notify_user.sh --urgency=critical \ 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)" "Config needs migration" "$? file(s) in your sxmo configuration are out of date and disabled - using defaults until you migrate (run sxmo_migrate.sh)"

View File

@@ -27,13 +27,11 @@ set_state() {
return return
fi 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")" STATE_LABEL="$(cat "$SXMO_STATE")"
case "$STATE_LABEL" in case "$STATE_LABEL" in
proximity*)
sxmobar -a -e bold -f orange state 90 "$icon_state_proximity" # circle with dot
;;
screenoff) screenoff)
sxmobar -a -e bold -f red state 90 "$icon_state_screenoff" # filled circle sxmobar -a -e bold -f red state 90 "$icon_state_screenoff" # filled circle
;; ;;
@@ -229,7 +227,7 @@ set_wifi() {
# if they have a vpn nmcli c shown --active should also list: # if they have a vpn nmcli c shown --active should also list:
# tun0 ef5fcce9-fdae-4ffe-a540-b16fc7b42852 tun tun0 # tun0 ef5fcce9-fdae-4ffe-a540-b16fc7b42852 tun tun0
if printf %b "$CONN" | cut -d':' -f3 | grep -q -E "^tun$|^wireguard$"; then if printf %b "$CONN" | cut -d':' -f3 | grep -q ^tun$; then
wifivpn=1 wifivpn=1
else else
wifivpn=0 wifivpn=0
@@ -273,89 +271,87 @@ set_wifi() {
sxmobar -a wifi-status 30 "$icon_wif" 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) # $1: type (reported by nmcli, e.g., wifi, tun)
# $2: interface name (reported by nmcli, e.g., wlan0, tun0) # $2: interface name (reported by nmcli, e.g., wlan0, tun0)
set_network() { set_network() {
case "$1" in case "$1" in
wifi|tun) set_wifi "$@" ;; wifi|tun) set_wifi "$@" ;;
ethernet) set_ethernet "$@" ;;
esac esac
} }
set_battery() { set_battery() {
name="$1" for power_supply in /sys/class/power_supply/*; do
state="$2" power_name="$(basename "$power_supply")"
percentage="$3" fgcolor=default
bgcolor=default
style=normal
BATCMP=
fgcolor=default if [ "$(cat "$power_supply"/type)" = "Battery" ]; then
bgcolor=default if [ -e "$power_supply"/capacity ]; then
style=normal PCT="$(cat "$power_supply"/capacity)"
BATCMP= elif [ -e "$power_supply"/charge_now ]; then
CHARGE_NOW="$(cat "$power_supply"/charge_now)"
case "$state" in CHARGE_FULL="$(cat "$power_supply"/charge_full_design)"
fully-charged) PCT="$(printf "scale=2; %s / %s * 100\n" "$CHARGE_NOW" "$CHARGE_FULL" | bc | cut -d'.' -f1)"
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 else
# Treat 'Full' status as same as 'fully-charged' continue
BATCMP="$icon_bat_c_3"
fi fi
;;
discharging) if [ -e "$power_supply"/status ]; then
if [ "$percentage" -lt 25 ]; then # The status is not always given for the battery device.
fgcolor=red # (sometimes it's linked to the charger device).
if [ "$percentage" -lt 5 ]; then BATSTATUS="$(cut -c1 "$power_supply"/status)"
BATCMP="$icon_bat_0" fi
elif [ "$percentage" -lt 10 ]; then
# 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
BATCMP="$icon_bat_1" BATCMP="$icon_bat_1"
elif [ "$percentage" -lt 15 ]; then elif [ "$PCT" -lt 75 ]; then
BATCMP="$icon_bat_2" BATCMP="$icon_bat_2"
else else
BATCMP="$icon_bat_3" BATCMP="$icon_bat_3"
fi fi
elif [ "$percentage" -lt 50 ]; then
fgcolor=orange
BATCMP="$icon_bat_1"
elif [ "$percentage" -lt 75 ]; then
BATCMP="$icon_bat_2"
else
BATCMP="$icon_bat_3"
fi fi
;;
esac
sxmobar -a -t "$style" -b "$bgcolor" -f "$fgcolor" \ sxmobar -a -t "$style" -b "$bgcolor" -f "$fgcolor" \
"battery-icon-$name" 40 "$BATCMP" "battery-icon-$power_name" 40 "$BATCMP"
if [ -z "$SXMO_BAR_SHOW_BAT_PER" ]; then if [ -z "$SXMO_BAR_SHOW_BAT_PER" ]; then
sxmobar -d "battery-status-$name" sxmobar -d "battery-status-$power_name"
else else
sxmobar -a "battery-status-$name" 41 "$percentage%" sxmobar -a "battery-status-$power_name" 41 "$PCT%"
fi fi
fi
done
} }
set_notifications() { set_notifications() {
@@ -371,48 +367,51 @@ set_notifications() {
set_volume() { set_volume() {
VOLCMP="" 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 if sxmo_audio.sh mic ismuted; then
VOLCMP="$icon_mmc" VOLCMP="$icon_mmc"
else else
case "$(sxmo_audio.sh device getinput 2>/dev/null)" in VOLCMP="$icon_mic"
*Headset*)
VOLCMP="$icon_hst"
;;
*)
VOLCMP="$icon_mic"
;;
esac
fi fi
if sxmo_audio.sh vol ismuted; then 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
VOLCMP="$VOLCMP $icon_mut" VOLCMP="$VOLCMP $icon_mut"
else elif [ "$VOL" -gt 66 ]; then
case "$(sxmo_audio.sh device get 2>/dev/null)" in VOLCMP="$VOLCMP $icon_spk"
*Speaker*|"") elif [ "$VOL" -gt 33 ]; then
# nothing for default or pulse devices VOLCMP="$VOLCMP $icon_spm"
;; elif [ "$VOL" -ge 0 ]; then
*Headphone*) VOLCMP="$VOLCMP $icon_spl"
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 fi
if sxmo_modemaudio.sh is_call_audio_mode; then sxmobar -a volume 50 "$VOLCMP"
sxmobar -a -f green volume 50 "$VOLCMP"
else
sxmobar -a volume 50 "$VOLCMP"
fi
} }
sxmo_debug "$@" sxmo_debug "$@"
@@ -421,30 +420,22 @@ case "$1" in
shift shift
set_network "$@" set_network "$@"
;; ;;
battery) time|modem|battery|volume|state|notifications)
shift
set_battery "$@"
;;
time|modem|volume|state|notifications)
set_"$1" set_"$1"
;; ;;
periodics|state_change) # 55 s loop and screenlock triggers periodics|state_change) # 55 s loop and screenlock triggers
set_time set_time
if [ -z "$SXMO_NO_MODEM" ]; then set_modem
set_modem set_battery
fi
set_state set_state
set_network wifi wlan0 set_network wifi wlan0
;; ;;
all) all)
sxmobar -r sxmobar -r
set_time set_time
if [ -z "$SXMO_NO_MODEM" ]; then set_modem
set_modem set_battery
fi set_volume
if [ -z "$SXMO_NO_AUDIO" ]; then
set_volume
fi
set_state set_state
set_notifications set_notifications
set_network wifi wlan0 set_network wifi wlan0
@@ -453,3 +444,4 @@ case "$1" in
exit # swallow it ! exit # swallow it !
;; ;;
esac esac

View File

@@ -15,9 +15,7 @@ export TERMNAME
# If it's already open, switch to it. # If it's already open, switch to it.
if [ "$SXMO_WM" = "sway" ] && [ -z "$SSH_CLIENT" ]; then if [ "$SXMO_WM" = "sway" ] && [ -z "$SSH_CLIENT" ]; then
regesc_termname="$(echo "$TERMNAME" | sed 's|+|\\+|g')" regesc_termname="$(echo "$TERMNAME" | sed 's|+|\\+|g')"
if swaymsg -q "[title=\"^$regesc_termname\$\"]" focus; then swaymsg "[title=\"^$regesc_termname\$\"]" focus && exit 0
exit 0
fi
fi fi
mkcontactssedcmd() { mkcontactssedcmd() {
@@ -33,7 +31,7 @@ mkcontactssedcmd() {
TODAY="$(date +%F)" TODAY="$(date +%F)"
YESTERDAY="$(date -d "- 1 day" +%F)" YESTERDAY="$(date -d "- 1 day" +%F)"
TWO_DAYS="$(date -d "- 2 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 # TODO
#ALIGNSEDCMD="s/^Sent/<right align>/;s/^Received/<left align>/;" #ALIGNSEDCMD="s/^Sent/<right align>/;s/^Received/<left align>/;"
@@ -48,3 +46,4 @@ CONTACTSSEDCMD="$(mkcontactssedcmd)"
sxmo_terminal.sh sh -c "tail -n9999 -f \"$SXMO_LOGDIR/$LOGDIRNUM/sms.txt\" |\ sxmo_terminal.sh sh -c "tail -n9999 -f \"$SXMO_LOGDIR/$LOGDIRNUM/sms.txt\" |\
sed -e \"$CONTACTSSEDCMD\" -e \"$DATESEDCMD\" -e \"$COLORSEDCMD\"" sed -e \"$CONTACTSSEDCMD\" -e \"$DATESEDCMD\" -e \"$COLORSEDCMD\""
#sxmo_terminal.sh sh -c "sxmo_hook_parselog.sh \"$NUMBER\""

View File

@@ -1,38 +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
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

View File

@@ -12,7 +12,30 @@ ACTION="$1"
. sxmo_common.sh . sxmo_common.sh
stop_proximity_lock() { stop_proximity_lock() {
sxmo_jobs.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
} }
XPROPOUT="$(sxmo_wm.sh focusedwindow)" XPROPOUT="$(sxmo_wm.sh focusedwindow)"
@@ -22,29 +45,19 @@ WMNAME="$(printf %s "$XPROPOUT" | grep title: | cut -d" " -f2- | tr '[:upper:]'
sxmo_debug "STATE: $(cat "$SXMO_STATE") ACTION: $ACTION WMCLASS: $WMCLASS WMNAME: $WMNAME" sxmo_debug "STATE: $(cat "$SXMO_STATE") ACTION: $ACTION WMCLASS: $WMCLASS WMNAME: $WMNAME"
if ! grep -q unlock "$SXMO_STATE"; then 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 case "$ACTION" in
"powerbutton_one") "powerbutton_one")
sxmo_state.sh click lock_screen_action
;; ;;
"powerbutton_two") "powerbutton_two")
sxmo_state.sh click 2 lock_screen_action 2
;; ;;
"powerbutton_three") "powerbutton_three")
sxmo_state.sh click 2 if grep -q proximity "$SXMO_STATE"; then
stop_proximity_lock
else
lock_screen_action 2
fi
;; ;;
"voldown_one") "voldown_one")
sxmo_audio.sh vol down 5 sxmo_audio.sh vol down 5
@@ -97,75 +110,9 @@ case "$WMCLASS" in
;; ;;
esac esac
;; ;;
*"foot"*|*"st"*|*"vte"*|"terminal") # Terminals *"foot"*|*"st"*|*"vte"*|"terminal")
case "$WMCLASS" in # Handle programs without touch support # First we try to handle the app running inside st:
*"st"*) case "$WMNAME" in
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"*) *"weechat"*)
case "$ACTION" in case "$ACTION" in
*"oneleft") *"oneleft")
@@ -176,6 +123,14 @@ case "$WMCLASS" in
sxmo_type.sh -M Alt -k less sxmo_type.sh -M Alt -k less
exit 0 exit 0
;; ;;
*"oneup")
sxmo_type.sh -k Page_Down
exit 0
;;
*"onedown")
sxmo_type.sh -k Page_Up
exit 0
;;
esac esac
;; ;;
*" sms") *" sms")
@@ -206,6 +161,14 @@ case "$WMCLASS" in
sxmo_type.sh q sxmo_type.sh q
exit 0 exit 0
;; ;;
*"onedown")
sxmo_type.sh u
exit 0
;;
*"oneup")
sxmo_type.sh d
exit 0
;;
*"oneleft") *"oneleft")
sxmo_type.sh ":n" -k Return sxmo_type.sh ":n" -k Return
exit 0 exit 0
@@ -226,6 +189,14 @@ case "$WMCLASS" in
sxmo_type.sh -M Shift -k Tab sxmo_type.sh -M Shift -k Tab
exit 0 exit 0
;; ;;
*"onedown")
sxmo_type.sh u
exit 0
;;
*"oneup")
sxmo_type.sh d
exit 0
;;
*"oneright") *"oneright")
sxmo_type.sh -k Return sxmo_type.sh -k Return
exit 0 exit 0
@@ -244,59 +215,76 @@ case "$WMCLASS" in
;; ;;
esac esac
;; ;;
*"epy"*|*"epr"*) *'irssi'*)
case "$ACTION" in case "$ACTION" in
*"left"|"voldown_one") "onedown")
sxmo_type.sh l sxmo_type.sh -M Alt p
exit 0 exit 0
;; ;;
*"right"|"volup_one") "oneup")
sxmo_type.sh h sxmo_type.sh -M Alt n
exit 0 exit 0
;; ;;
"voldown_three"|"twodownbottomedge")
sxmo_type.sh q
exit
;;
esac esac
;; ;;
*'nnn'*|'lf') *'gomuks'*)
case "$ACTION" in case "$ACTION" in
*"left") *"oneup")
sxmo_type.sh -k Right sxmo_type.sh -k Page_Down
exit 0 exit 0
;; ;;
*"right") *"onedown")
sxmo_type.sh -k Left sxmo_type.sh -k Page_Up
exit 0 exit 0
;; ;;
esac esac
;; ;;
esac esac
# Now we try generic actions for terminal
case "$WMCLASS" in # Handle general scrolling without touch support case "$ACTION" in
*"st"*) *"onedown")
case "$ACTION" in case "$WMCLASS" in
*"onedown") *"foot"*)
sxmo_type.sh -M Shift -k Page_Up
exit 0
;;
*"st"*)
sxmo_type.sh -M Ctrl -M Shift -k b sxmo_type.sh -M Ctrl -M Shift -k b
exit 0 exit 0
;; ;;
*"oneup") 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 sxmo_type.sh -M Ctrl -M Shift -k f
exit 0 exit 0
;; ;;
esac esac
;; ;;
"org.gnome.vte.application"|"terminal") "uprightedge")
case "$ACTION" in case "$WMCLASS" in
# For VTE, fallback to doing nothing, "org.gnome.vte.application"|"terminal")
# you're probably dragging the scrollbar # For VTE, fallback to doing nothing,
*"uprightedge") exit 0 ;; # you're probably dragging the scrollbar
*"downrightedge") exit 0 ;; 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
;;
esac esac
;; ;;
esac esac
;;
esac esac
#standard handling #standard handling
@@ -305,16 +293,20 @@ case "$ACTION" in
if echo "$WMCLASS" | grep -i "megapixels"; then if echo "$WMCLASS" | grep -i "megapixels"; then
sxmo_type.sh -k space sxmo_type.sh -k space
else else
sxmo_state.sh click lock_screen_action
fi fi
exit 0 exit 0
;; ;;
"powerbutton_two") "powerbutton_two")
sxmo_state.sh click 2 lock_screen_action 2
exit 0 exit 0
;; ;;
"powerbutton_three") "powerbutton_three")
sxmo_terminal.sh if grep -q proximity "$SXMO_STATE"; then
stop_proximity_lock
else
sxmo_terminal.sh
fi
exit 0 exit 0
;; ;;
"voldown_one") "voldown_one")
@@ -435,12 +427,14 @@ case "$ACTION" in
exit 0 exit 0
;; ;;
"bottomleftcorner") "bottomleftcorner")
if grep -q proximity "$SXMO_STATE"; then
exit
fi
sxmo_dmenu.sh close sxmo_dmenu.sh close
sxmo_keyboard.sh close
if [ -n "$WMCLASS" ]; then if [ -n "$WMCLASS" ]; then
sxmo_state.sh set lock sxmo_hook_lock.sh
else else
sxmo_state.sh set screenoff sxmo_hook_screenoff.sh
fi fi
exit 0 exit 0
;; ;;

View File

@@ -14,23 +14,30 @@
# shellcheck source=scripts/core/sxmo_common.sh # shellcheck source=scripts/core/sxmo_common.sh
. 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 # This hook is called when the system reaches a locked state
sxmo_led.sh blink blue & sxmo_led.sh blink blue &
sxmo_hook_statusbar.sh state_change &
[ "$SXMO_WM" = "sway" ] && swaymsg mode default [ "$SXMO_WM" = "sway" ] && swaymsg mode default
sxmo_wm.sh dpms off sxmo_wm.sh dpms off
sxmo_wm.sh inputevent touchscreen off sxmo_wm.sh inputevent touchscreen off
sxmo_jobs.sh stop periodic_blink sxmo_daemons.sh stop periodic_blink
sxmo_jobs.sh stop periodic_wakelock_check sxmo_daemons.sh stop periodic_wakelock_check
# Go down after 8 seconds of inactivity # Go to screenoff after 8 seconds of inactivity
if [ -e "$XDG_CACHE_HOME/sxmo/sxmo.noidle" ]; then if ! [ -e "$XDG_CACHE_HOME/sxmo/sxmo.noidle" ]; then
sxmo_jobs.sh stop idle_locker sxmo_daemons.sh start idle_locker sxmo_idle.sh -w \
else timeout "${SXMO_LOCK_IDLE_TIME:-8}" "sxmo_hook_screenoff.sh"
sxmo_jobs.sh start idle_locker sxmo_idle.sh -w \
timeout "${SXMO_LOCK_IDLE_TIME:-8}" "sxmo_state.sh idle"
fi fi
wait wait

View File

@@ -0,0 +1,21 @@
#!/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

View File

@@ -16,24 +16,30 @@
# This hook is called when the system reaches a off state (screen off) # This hook is called when the system reaches a off state (screen off)
sxmo_led.sh blink red blue & 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_WM" = "sway" ] && swaymsg mode default [ "$SXMO_WM" = "sway" ] && swaymsg mode default
sxmo_wm.sh dpms on sxmo_wm.sh dpms on
sxmo_wm.sh inputevent touchscreen off sxmo_wm.sh inputevent touchscreen off
sxmo_jobs.sh start periodic_blink sxmo_run_periodically.sh - 2 sxmo_led.sh blink red blue sxmo_daemons.sh start periodic_blink sxmo_run_periodically.sh 2 sxmo_led.sh blink red blue
case "$SXMO_WM" in case "$SXMO_WM" in
dwm) dwm)
# dmenu will grab input focus (i.e. power button) so kill it before going to # 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). # screenoff unless proximity lock is running (i.e. there's a phone call).
if ! sxmo_jobs.sh running proximity_lock -q; then if ! sxmo_daemons.sh running proximity_lock -q; then
sxmo_dmenu.sh close sxmo_dmenu.sh close
fi fi
;; ;;
esac esac
sxmo_jobs.sh stop idle_locker
wait wait
sxmo_wakelock.sh lock hold_a_bit 3s # avoid immediate suspension
sxmo_wakelock.sh unlock not_screenoff

View File

@@ -0,0 +1,56 @@
#!/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

View File

@@ -16,7 +16,5 @@ 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 stop eg25-manager
permit nopass :wheel as root cmd systemctl args start ModemManager 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 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_lock
permit nopass :wheel as root cmd tee args -a /sys/power/wake_unlock 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

View File

@@ -1,10 +0,0 @@
[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

View File

@@ -0,0 +1,5 @@
#!/sbin/openrc-run
description="Set user permissions to aspects of the hardware kernel interface"
command="/usr/bin/sxmo_setpermissions.sh"

View File

@@ -9,18 +9,15 @@
_sxmo_is_running() { _sxmo_is_running() {
unset SXMO_WM unset SXMO_WM
_XDG_RUNTIME_DIR="$(_sxmo_find_runtime_dir)" if [ -f "${XDG_RUNTIME_DIR}"/sxmo.swaysock ]; then
unset SWAYSOCK
if [ -f "${_XDG_RUNTIME_DIR}"/sxmo.swaysock ]; then if SWAYSOCK="$(cat "${XDG_RUNTIME_DIR}"/sxmo.swaysock)" \
if SWAYSOCK="$(cat "${_XDG_RUNTIME_DIR}"/sxmo.swaysock)" swaymsg 2>/dev/null swaymsg 2>/dev/null; then
then
printf "Detected the Sway environment\n" >&2 printf "Detected the Sway environment\n" >&2
export SXMO_WM=sway export SXMO_WM=sway
unset _XDG_RUNTIME_DIR
return 0 return 0
fi fi
fi fi
unset _XDG_RUNTIME_DIR
if DISPLAY=:0 xrandr >/dev/null 2>&1; then if DISPLAY=:0 xrandr >/dev/null 2>&1; then
printf "Detected the Dwm environment\n" >&2 printf "Detected the Dwm environment\n" >&2
@@ -39,14 +36,10 @@ _sxmo_find_runtime_dir() {
return return
fi fi
# Try something existing if [ -d "/var/run/user/$(id -u)" ]; then
for root in /run /var/run; do printf "/var/run/user/%s" "$(id -u)"
path="$root/user/$(id -u)" return
if [ -d "$path" ] && [ -w "$path" ]; then fi
printf %s "$path"
return
fi
done
# Fallback to a shared memory location # Fallback to a shared memory location
printf "/dev/shm/user/%s" "$(id -u)" printf "/dev/shm/user/%s" "$(id -u)"
@@ -87,48 +80,56 @@ _sxmo_load_environments() {
export BROWSER="${BROWSER:-firefox}" export BROWSER="${BROWSER:-firefox}"
export SHELL="${SHELL:-/bin/sh}" export SHELL="${SHELL:-/bin/sh}"
# The user can already force a $SXMO_DEVICE_NAME value in ~/.profile # The user can already forced a $SXMO_DEVICE_NAME value
if [ -z "$SXMO_DEVICE_NAME" ]; then if [ -z "$SXMO_DEVICE_NAME" ] && [ -e /proc/device-tree/compatible ]; then
if [ -e /proc/device-tree/compatible ]; then SXMO_DEVICE_NAME="$(tr -c '\0[:alnum:].,-' '_' < /proc/device-tree/compatible |
SXMO_DEVICE_NAME="$(tr -c '\0[:alnum:].,-' '_' < /proc/device-tree/compatible | tr '\0' '\n' | head -n1)"
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"
else else
SXMO_DEVICE_NAME=desktop 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
fi fi
unset deviceprofile
fi fi
export SXMO_DEVICE_NAME
deviceprofile="$(command -v "sxmo_deviceprofile_$SXMO_DEVICE_NAME.sh")" if [ -n "$SXMO_DEVICE_NAME" ]; then
# shellcheck disable=SC1090 _device_hooks_path="$(xdg_data_path "sxmo/default_hooks/$SXMO_DEVICE_NAME" 0 ':')"
if [ -f "$deviceprofile" ]; then if [ -z "$_device_hooks_path" ]; then
. "$deviceprofile" _device_hooks_path="$(xdg_data_path "sxmo/default_hooks/three_button_touchscreen" 0 ':')"
printf "deviceprofile file %s loaded.\n" "$deviceprofile" fi
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 PATH="\
# 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/$SXMO_DEVICE_NAME:\
$XDG_CONFIG_HOME/sxmo/hooks:\ $XDG_CONFIG_HOME/sxmo/hooks:\
$_device_hooks_path:\
$(xdg_data_path "sxmo/default_hooks" 0 ':'):\ $(xdg_data_path "sxmo/default_hooks" 0 ':'):\
$PATH" $PATH"
export 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
} }
_sxmo_grab_session() { _sxmo_grab_session() {
if ! _sxmo_is_running; then
return
fi
XDG_RUNTIME_DIR="$(_sxmo_find_runtime_dir)" XDG_RUNTIME_DIR="$(_sxmo_find_runtime_dir)"
export XDG_RUNTIME_DIR export XDG_RUNTIME_DIR
if ! _sxmo_is_running; then
unset XDG_RUNTIME_DIR
return
fi
_sxmo_load_environments _sxmo_load_environments

View File

@@ -1,7 +0,0 @@
[Unit]
Description=Proxy location data to map applications
[Service]
Type=simple
Restart=always
ExecStart=/usr/libexec/geoclue-2.0/demos/agent

View File

@@ -1,5 +1,13 @@
# lisgd requires /dev/input/by-path/first-touchscreen # lisgd requires /dev/input/touchscreen
ACTION=="add|change", SUBSYSTEM=="input", KERNEL=="event[0-9]*", ENV{ID_INPUT_TOUCHSCREEN}=="1", SYMLINK+="input/by-path/first-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"
# Proximity Sensor # Proximity Sensor
## Set event thresholds ## Set event thresholds
@@ -7,4 +15,10 @@ 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" 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 ## 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/chgrp input $devnode"
ACTION=="add", SUBSYSTEM=="iio", TEST=="in_proximity_raw" RUN+="/bin/chmod g+r $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"

View File

@@ -1,7 +1,7 @@
[Default Applications] [Default Applications]
image/jpeg=sxmo-nsxiv.desktop image/jpeg=sxmo-sxiv.desktop
image/png=sxmo-nsxiv.desktop image/png=sxmo-sxiv.desktop
image/gif=sxmo-nsxiv.desktop image/gif=sxmo-sxiv.desktop
audio/x-m4a=sxmo-mpv-music.desktop audio/x-m4a=sxmo-mpv-music.desktop
audio/mpeg=sxmo-mpv-music.desktop audio/mpeg=sxmo-mpv-music.desktop
audio/amr=sxmo-mpv-music.desktop audio/amr=sxmo-mpv-music.desktop

View File

@@ -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 Menu* which allows you to browser your filesystem via _sxmo_files_(1); and
more. See MENUS. more. See MENUS.
- *Autosuspend, screen blanking, and input locking*: sxmo states allow sxmo to - *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 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 AND SUSPENSION. while in a phone call and the phone is near your face. See STATES.
- *Smart cronjobs*: sxmo uses _crond_(1) to handle cronjobs and a special - *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. program called _mnc_(1) to wake the phone up in time to execute cron jobs.
See CRONJOBS. 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 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 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*. 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 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 # HOOKS
A lot of functionality is also contained in hooks (*sxmo_hook_\*.sh*). Sxmo uses 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 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/*. *~/.config/sxmo/hooks/* before it looks in */usr/share/sxmo/default_hooks/*.
For example, if you pickup For example, if you pickup
a call and *~/.config/sxmo/hooks/sxmo_hook_pickup.sh* does not exist, 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. */usr/share/sxmo/default_hooks/sxmo_hook_pickup.sh* will be run.
Note that some hooks are in a subdirectory under the *hooks/* main Note that some hooks are in a subdirectory under the *hooks/* main
directory which will allow you to have hooks associated with a certain directory which will allow you to have hooks associated with a certain
device. See DEVICES. For instance, in */usr/share/sxmo/default_hooks/* there 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. 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 It should be a symlink to another subdirectory, e.g., *one_button_ereader* or
*three_button_touchscreen*. Device-specific hooks go here. *three_button_touchscreen*. Device-specific hooks go here.
While you can manually copy and edit hooks to your liking, 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 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: (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 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). - 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 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 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.) 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 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, - Option 1. Edit *~/.config/sxmo/userscripts* and write your entries in it,
following the appmenu format *<name> ^ <should-return-to-menu> ^ 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"  Weather ^ 0 ^ sxmo_terminal.sh -f "Sxmo:size=5" sh -c "curl http://wttr.in/ | less -SR"
@@ -330,46 +330,32 @@ HOOKS: _sxmo_hook_apps.sh_ (control list of apps)
SEE _sxmo_files.sh_(1). SEE _sxmo_files.sh_(1).
# STATES AND SUSPENSION # STATES
Sxmo recognizes three basic states: Sxmo recognizes five basic states:
- *unlock*: Screen is on; touchscreen is enabled. - *unlock*: Screen is on; touchscreen is enabled.
- *lock*: Screen is on; touchscreen is disabled. - *lock*: Screen is on; touchscreen is disabled.
- *screenoff*: Screen is off; touchscreen is disabled. The led will also blink - *screenoff*: Screen is off; touchscreen is disabled. The led will also blink
purple every few seconds to indicate that you are in this state. purple every few seconds to indicate that you are in this state.
- *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. This script actually switch back and forth between *unlock*
and *screenoff*.
There also is some dedicated workflow for some type of device.
On desktops, which is the default mode, if no other one is recognised:
- *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 - *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 active and monitor for incoming calls/texts but everything else will be
suspended. 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 usual workflow is this. A diagram of the states can be found here:
https://sxmo.org/assets/lock-power-states.png
The usual workflow is this.
- If the phone is in the *unlock* state (default when you boot up) and you wish - 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 to suspend it, tap the power button once. This will transition to the
*screenoff* state which will then automatically transition to the *CRUST* state *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 - 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 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 it once again to transition to the *unlock* state. (This prevents accidental
@@ -379,25 +365,26 @@ Sxmo also handles automatic transitions from some states to others.
- It will automatically transition from *unlock* to *screenoff* after a certain - It will automatically transition from *unlock* to *screenoff* after a certain
amount of idleness (120s). 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). amount of time (8s).
- It will automatically transition from *screenoff* to *CRUST* immediately - It will automatically transition from *screenoff* to *CRUST* immediately
unless something is blocking it. unless something is blocking it.
You can set up suspend blockers in the block_suspend hook. You can set up suspend blockers in the wakelocks hook.
HOOKS: HOOKS:
_sxmo_hook_postwake.sh_ (what to do after waking up from suspend state), _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_lock.sh_ (what to do when transitioning into lock state),
_sxmo_hook_screenoff.sh_ (what to do when transitioning into screenoff 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_unlock.sh_ (what to do when transitioning into unlock state),
_sxmo_hook_wakelocks.sh_ (set what block suspend)
# CRONJOBS # CRONJOBS
Sxmo ensures that cron jobs run and will actively wake the phone from sleep temporarily to this end. 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 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 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 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. launches the cronjob and puts the phone back to sleep when finished.
@@ -492,14 +479,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 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 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, 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. and blinks the green LED when there is an incoming text/call.
While a call is incoming: While a call is incoming:
- The phone will ring and vibrate (unless you disabled these in the [Audio menu](#strongincluded-menustrong)). - The phone will ring and vibrate (unless you disabled these in the [Audio menu](#strongincluded-menustrong)).
- The green LED will trigger. - The green LED will trigger.
- A menu will appear to allow you to pickup the call. You can also discard - 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 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 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 menu entry will only be visible while the other party's line is ringing
@@ -545,7 +532,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. 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 *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. https://wiki.gnome.org/Projects/NetworkManager/MobileBroadband/ServiceProviders.
Consider contributing your own if it is not. Consider contributing your own if it is not.
@@ -589,8 +576,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), 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_down.sh_ (what to do when network goes down),
_sxmo_hook_network_pre_up.sh_, _sxmo_hook_network_preup.sh_,
_sxmo_hook_network_pre_down.sh_ _sxmo_hook_network_predown.sh_
# AUDIO # AUDIO
@@ -625,7 +612,7 @@ apk upgrade -aiv
There is also a menu entry within the *Config Menu* to do this. There is also a menu entry within the *Config Menu* to do this.
After you update the sxmo packages themselves, be sure to run 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) SEE ALSO: _sxmo_migrate.sh_(1)
@@ -701,7 +688,7 @@ missing on your system. The most relevant ones are:
When the system boots, tinydm will will run either *sxmo_xinit.sh* or 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). *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 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 from the commandline to reload these (e.g., if you switch window managers but
are logged into an ssh connection). are logged into an ssh connection).

View File

@@ -1,32 +0,0 @@
#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;
}

View File

@@ -1,43 +0,0 @@
#!/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

View File

@@ -46,7 +46,7 @@ prep_temp_folder_with_items() {
list_items() { list_items() {
cd "$FOLDER" || die "Couldn't cd to $FOLDER" cd "$FOLDER" || die "Couldn't cd to $FOLDER"
printf %b "Close Menu\nChange Timespan\n" printf %b "Close Menu\nChange Timespan\n"
gawk -F'\t' '{print $1 " " substr(FILENAME, 3) " | " $2 ": " $3 " " $8}' ./* |\ gawk -F'\t' '{print $1 " " substr(FILENAME, 3) " | " $2 ": " $3}' ./* |\
grep -E '^[0-9]{5}' |\ grep -E '^[0-9]{5}' |\
sort -nk1 |\ sort -nk1 |\
sort -r |\ sort -r |\
@@ -113,21 +113,8 @@ rssreadmenu() {
DMENUIDX=1 DMENUIDX=1
;; ;;
*) *)
# Check for one http or 2, as there can be a link and enclosure URL="$(echo "$PICKED" | awk -F " " '{print $NF}')"
if [ "$(echo "$PICKED" | awk -F "http" '{print NF-1}')" = "1" ]; then sxmo_urlhandler.sh "$URL"
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 esac
done done
} }

Some files were not shown because too many files have changed in this diff Show More