commit
f84c16067b
9 changed files with 380 additions and 63 deletions
@ -0,0 +1,54 @@ |
||||
#!/usr/bin/env bash |
||||
|
||||
CALL_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/Calls/" |
||||
SMS_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/SMS/" |
||||
|
||||
die(){ |
||||
echo "$@" > /dev/stderr |
||||
rm "$FILE" |
||||
exit 1 |
||||
} |
||||
|
||||
trimWhitespace(){ |
||||
sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' |
||||
} |
||||
|
||||
deleteEmptyLines(){ |
||||
sed '/^$/ d' |
||||
} |
||||
|
||||
# Iterate over options breaking -ab into -a -b when needed and --foo=bar into |
||||
# --foo bar |
||||
optstring=h |
||||
unset options |
||||
while (($#)); do |
||||
case $1 in |
||||
# If option is of type -ab |
||||
-[!-]?*) |
||||
# Loop over each character starting with the second |
||||
for ((i=1; i < ${#1}; i++)); do |
||||
c=${1:i:1} |
||||
|
||||
# Add current char to options |
||||
options+=("-$c") |
||||
|
||||
# If option takes a required argument, and it's not the last char make |
||||
# the rest of the string its argument |
||||
if [[ $optstring = *"$c:"* && ${1:i+1} ]]; then |
||||
options+=("${1:i+1}") |
||||
break |
||||
fi |
||||
done |
||||
;; |
||||
|
||||
# If option is of type --foo=bar |
||||
--?*=*) options+=("${1%%=*}" "${1#*=}") ;; |
||||
# add --endopts for -- |
||||
--) options+=(--endopts) ;; |
||||
# Otherwise, nothing special |
||||
*) options+=("$1") ;; |
||||
esac |
||||
shift |
||||
done |
||||
set -- "${options[@]}" |
||||
unset options |
@ -0,0 +1,38 @@ |
||||
#!/usr/bin/env bash |
||||
|
||||
|
||||
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" |
||||
source "$DIR/common" |
||||
|
||||
usage(){ |
||||
echo "missedCalls" |
||||
echo "-a --all Print all (default)" |
||||
echo "-c --count Print count" |
||||
echo "-l --list Print list" |
||||
} |
||||
|
||||
toprint="all" |
||||
# Read the options and set stuff |
||||
while [[ $1 = -?* ]]; do |
||||
case $1 in |
||||
-a|--all) toprint="all" ;; |
||||
-c|--count) toprint="count" ;; |
||||
-l|--list) toprint="list" ;; |
||||
-h|--help) usage; exit;; |
||||
--) shift; break ;; |
||||
*) die "invalid option: '$1'." ;; |
||||
esac |
||||
shift |
||||
done |
||||
|
||||
[ -f "$CALL_DIR/missed-calls" ] || exit |
||||
|
||||
if [ "$toprint" = "count" ] || [ "$toprint" = "all" ]; then |
||||
count="$(cat "$CALL_DIR/missed-calls" | deleteEmptyLines | wc -l )" |
||||
echo "$count missed calls" |
||||
fi |
||||
|
||||
if [ "$toprint" = "list" ] || [ "$toprint" = "all" ]; then |
||||
cat "$CALL_DIR/missed-calls" |
||||
fi |
||||
|
@ -0,0 +1,29 @@ |
||||
#!/usr/bin/env bash |
||||
|
||||
# This was mostly taken from sxmo: |
||||
# https://git.sr.ht/~mil/sxmo-utils/tree/1.3.2/item/scripts/modem/sxmo_modemmonitor.sh#L181-205 |
||||
# |
||||
# Although the proccess for managing calls etc is a bit simpler IMO |
||||
|
||||
# Monitor for incoming calls |
||||
dbus-monitor --system "interface='org.freedesktop.ModemManager1.Modem.Voice',type='signal',member='CallAdded'" | \ |
||||
while read -r line; do |
||||
echo "$line" | grep -E "^signal" && checkCall |
||||
done & |
||||
|
||||
# Monitor for incoming texts |
||||
dbus-monitor --system "interface='org.freedesktop.ModemManager1.Modem.Messaging',type='signal',member='Added'" | \ |
||||
while read -r line; do |
||||
echo "$line" | grep -E "^signal" && checkSMS |
||||
done & |
||||
|
||||
# Monitor for finished calls |
||||
dbus-monitor --system "interface='org.freedesktop.DBus.Properties',member='PropertiesChanged',arg0='org.freedesktop.ModemManager1.Call'" | \ |
||||
while read -r line; do |
||||
echo "$line" | grep -E "^signal" && checkCall |
||||
done & |
||||
|
||||
wait |
||||
wait |
||||
wait |
||||
|
@ -0,0 +1,91 @@ |
||||
/* |
||||
* |
||||
* Author : Aditya Shakya |
||||
* Mail : adi1090x@gmail.com |
||||
* Github : @adi1090x |
||||
* Twitter : @adi1090x |
||||
* |
||||
*/ |
||||
|
||||
configuration { |
||||
disable-history: false; |
||||
fullscreen: false; |
||||
hide-scrollbar: true; |
||||
sidebar-mode: false; |
||||
} |
||||
|
||||
@import "gruvbox-dark.rasi" |
||||
|
||||
* { |
||||
background-color: @background; |
||||
text-color: @foreground; |
||||
} |
||||
|
||||
window { |
||||
transparency: "real"; |
||||
border-radius: 12px; |
||||
width: 100px; |
||||
location: east; |
||||
x-offset: -15px; |
||||
y-offset: -200px; |
||||
} |
||||
|
||||
listview { |
||||
lines: 4; |
||||
margin: 8px; |
||||
spacing: 8px; |
||||
cycle: true; |
||||
dynamic: true; |
||||
layout: vertical; |
||||
} |
||||
|
||||
mainbox { |
||||
background-color: @background; |
||||
children: [ listview ]; |
||||
} |
||||
|
||||
element { |
||||
background-color: @background-light; |
||||
text-color: @foreground; |
||||
orientation: vertical; |
||||
border-radius: 12px; |
||||
} |
||||
|
||||
element-text { |
||||
font: "iosevka 45"; |
||||
expand: true; |
||||
horizontal-align: 0.5; |
||||
vertical-align: 0; |
||||
margin: 0px 10px 63px 10px; |
||||
} |
||||
|
||||
element normal.urgent, |
||||
element alternate.urgent { |
||||
background-color: @urgent; |
||||
text-color: @foreground; |
||||
border-radius: 10px; |
||||
} |
||||
|
||||
element normal.active, |
||||
element alternate.active { |
||||
background-color: @background-alt; |
||||
text-color: @foreground; |
||||
} |
||||
|
||||
element selected { |
||||
background-color: @accent; |
||||
text-color: @background; |
||||
border: 0px; |
||||
border-radius: 10px; |
||||
border-color: @border; |
||||
} |
||||
|
||||
element selected.urgent { |
||||
background-color: @urgent; |
||||
text-color: @foreground; |
||||
} |
||||
|
||||
element selected.active { |
||||
background-color: @background-alt; |
||||
color: @foreground; |
||||
} |
Loading…
Reference in new issue