First commit
This commit is contained in:
commit
82f8b90199
4 changed files with 265 additions and 0 deletions
7
.template.sh
Normal file
7
.template.sh
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
while true; do
|
||||||
|
sleep $SYE_TIME
|
||||||
|
ps -e | grep -E "$SYE_EXCL" >/dev/null
|
||||||
|
if [[ $SYE_EXCL == "" || $? == 1 ]]; then
|
||||||
|
nohup bash -c "$SYE_CMD" >/dev/null
|
||||||
|
fi
|
||||||
|
done
|
12
.vscode/launch.json
vendored
Normal file
12
.vscode/launch.json
vendored
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"type": "bashdb",
|
||||||
|
"request": "launch",
|
||||||
|
"name": "Bash-Debug (simplest configuration)",
|
||||||
|
"program": "${file}",
|
||||||
|
"terminalKind": "integrated"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
47
README.md
Normal file
47
README.md
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
# Save Your Eyes (SYE)
|
||||||
|
|
||||||
|
Generates a bash script which will notify you
|
||||||
|
when you spend too much time working on PC.
|
||||||
|
|
||||||
|
Delay between notifications depends on your age
|
||||||
|
(this feature is commonly for children).
|
||||||
|
|
||||||
|
## Install
|
||||||
|
```bash
|
||||||
|
git clone https://codeberg.org/DarkCat09/saveyoureyes.git
|
||||||
|
cd saveyoureyes
|
||||||
|
chmod +x install.sh
|
||||||
|
./install.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### 1. Time
|
||||||
|
Delay is set to the safe time according to the table below.
|
||||||
|
| Age |Safe|Warning|
|
||||||
|
|:-----:|:--:|:-----:|
|
||||||
|
| 5 - 7 | 10 | 30 |
|
||||||
|
| 8 - 11| 15 | 45 |
|
||||||
|
|12 - 13| 20 | 60 |
|
||||||
|
|14 - 15| 25 | 80 |
|
||||||
|
|16 - 17| 30 | 90 |
|
||||||
|
| 18+ | 60 | 90 |
|
||||||
|
|
||||||
|
### 2. Exclusions
|
||||||
|
You can add some applications to whitelist/exclusions.
|
||||||
|
When they are in processes list, notifications won't appear.
|
||||||
|
|
||||||
|
For exmaple, add vlc to disable script while you're watching a film.
|
||||||
|
|
||||||
|
### 3. Text and type
|
||||||
|
Enter notification text, title, and choose how script should send it.
|
||||||
|
Here are some exmaples:
|
||||||
|
|Description|Screenshot|
|
||||||
|
|:----------|:--------:|
|
||||||
|
|**GtkDialog:** opens dialog using python module [https://codeberg.org/DarkCat09/showdialog](showdialog).|![Picture 1](https://i.ibb.co/qDPX20K/gtkdialog.png)|
|
||||||
|
|**libnotify:** executes notify-send command.|![Picture 2](https://i.ibb.co/5syChrV/notifysend.png)|
|
||||||
|
|**Open browser:** opens [a simple web page](https://codeberg.org/DarkCat09/pages/src/branch/main/text/index.html) using xdg-open.|![Picture 3](https://i.ibb.co/vhRsrFq/browser.png)|
|
||||||
|
|
||||||
|
### 4. Build and add to crontab
|
||||||
|
Then, the script will be generated from `.template.sh` and written to `~/.sye.sh`.
|
||||||
|
If you want, it can automatically update crontab to run sye.sh after system boot.
|
||||||
|
|
||||||
|
But I recommend to use "Autorun" from KDE Settings if you are using Plasma. It works much better.
|
199
install.sh
Executable file
199
install.sh
Executable file
|
@ -0,0 +1,199 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
RESET='\033[0m'
|
||||||
|
BOLD='\033[1m'
|
||||||
|
RED='\033[1;31m'
|
||||||
|
GREEN='\033[1;32m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
BLUE='\033[1;34m'
|
||||||
|
PURPLE='\033[1;35m'
|
||||||
|
CYAN='\033[1;36m'
|
||||||
|
NEWLINE=$'\n'
|
||||||
|
|
||||||
|
COLOR=''
|
||||||
|
|
||||||
|
script_file=$(realpath ~/.sye.sh)
|
||||||
|
script_vars=''
|
||||||
|
|
||||||
|
script_time=''
|
||||||
|
script_excl=''
|
||||||
|
script_cmd=''
|
||||||
|
|
||||||
|
about () {
|
||||||
|
echo -e " ${BLUE}╭───────────────────────────╮${RESET}"
|
||||||
|
echo -e " ${BLUE}│ Save your eyes │${RESET}"
|
||||||
|
echo -e " ${BLUE}│ by DarkCat09 │${RESET}"
|
||||||
|
echo -e " ${BLUE}╰───────────────────────────╯${RESET}"
|
||||||
|
echo
|
||||||
|
echo "Install.sh generates a script"
|
||||||
|
echo "which will notify you when you"
|
||||||
|
echo "spend too much time working on PC"
|
||||||
|
echo
|
||||||
|
}
|
||||||
|
|
||||||
|
block () {
|
||||||
|
# Print text in a block
|
||||||
|
echo -ne "${COLOR}|${RESET} "
|
||||||
|
echo -ne "$1"
|
||||||
|
# $2 = No newline
|
||||||
|
if [[ $2 != 'n' ]]; then echo; fi
|
||||||
|
}
|
||||||
|
|
||||||
|
safetime () {
|
||||||
|
|
||||||
|
COLOR="$PURPLE"
|
||||||
|
block 'How old are you? ' n
|
||||||
|
echo -ne "$COLOR"
|
||||||
|
read age
|
||||||
|
echo -ne "$RESET"
|
||||||
|
|
||||||
|
# Safe time for diffirent ages
|
||||||
|
result=60 # 18+
|
||||||
|
if (( age < 8 )); then
|
||||||
|
result=10 # 5-7
|
||||||
|
elif (( age < 12 )); then
|
||||||
|
result=15 # 8-11
|
||||||
|
elif (( age < 14 )); then
|
||||||
|
result=20 # 12-13
|
||||||
|
elif (( age < 16 )); then
|
||||||
|
result=25 # 14-15
|
||||||
|
elif (( age < 18 )); then
|
||||||
|
result=30 # 16-17
|
||||||
|
fi
|
||||||
|
|
||||||
|
block "${BOLD}Safe time for you is${RESET} " n
|
||||||
|
echo -e "${GREEN}$result min${RESET}"
|
||||||
|
echo
|
||||||
|
|
||||||
|
# Sleeping time in seconds
|
||||||
|
script_time=$((${result}*60))
|
||||||
|
}
|
||||||
|
|
||||||
|
whitelist () {
|
||||||
|
|
||||||
|
COLOR="$YELLOW"
|
||||||
|
block "${BOLD}Whitelist${RESET}"
|
||||||
|
block
|
||||||
|
block "Notification won't appear when"
|
||||||
|
block "you are watching a film in VLC,"
|
||||||
|
block "just specify \"vlc\" (without quotes)"
|
||||||
|
block
|
||||||
|
block "Enter apps whitelist separated with comma:"
|
||||||
|
block "" n
|
||||||
|
echo -ne "$COLOR"
|
||||||
|
read apps
|
||||||
|
echo -ne "$RESET"
|
||||||
|
echo
|
||||||
|
|
||||||
|
script_excl=$(echo -n $apps | sed 's/, */\|/g')
|
||||||
|
|
||||||
|
script_cmd="ps -e |grep -E '$(echo -n $apps | sed 's/, */\|/g')' >/dev/null; if [[ \$? == 1 ]]; then SAVEYOUREYES_CMD; fi"
|
||||||
|
}
|
||||||
|
|
||||||
|
notifycmd () {
|
||||||
|
|
||||||
|
COLOR="$RED"
|
||||||
|
block "Enter notification text:"
|
||||||
|
block "" n
|
||||||
|
echo -ne "$COLOR"
|
||||||
|
read content
|
||||||
|
echo -ne "$RESET"
|
||||||
|
block "Enter notification title:"
|
||||||
|
block "" n
|
||||||
|
echo -ne "$COLOR"
|
||||||
|
read caption
|
||||||
|
echo -ne "$RESET"
|
||||||
|
echo
|
||||||
|
|
||||||
|
COLOR="$CYAN"
|
||||||
|
block "Choose notification type:"
|
||||||
|
block "1. ${COLOR}GtkDialog (default)${RESET}"
|
||||||
|
block "2. ${COLOR}libnotify${RESET}"
|
||||||
|
block "3. ${COLOR}Open browser${RESET}"
|
||||||
|
block "" n
|
||||||
|
echo -ne "$COLOR"
|
||||||
|
read msgtype
|
||||||
|
echo -ne "$RESET"
|
||||||
|
echo
|
||||||
|
|
||||||
|
if [[ $msgtype == 2 ]]; then
|
||||||
|
# Using libnotify to create a notification
|
||||||
|
# (Desktop Environment independent, works on every DE)
|
||||||
|
script_cmd="notify-send -a \"$caption\" \"$content\""
|
||||||
|
|
||||||
|
elif [[ $msgtype == 3 ]]; then
|
||||||
|
# Opening default browser
|
||||||
|
COLOR="$BLUE"
|
||||||
|
block "Current default browser: ${COLOR}$(xdg-settings get default-web-browser | sed 's/\.desktop//')${RESET}"
|
||||||
|
block "You can change it via xdg-settings command, e.g.:"
|
||||||
|
block "${BOLD}xdg-settings set default-web-browser chrmoium-browser.desktop${RESET}"
|
||||||
|
block "${BOLD}xdg-settings set default-web-browser vivaldi-stable.desktop${RESET}"
|
||||||
|
block "${BOLD}xdg-settings set default-web-browser firefox.desktop${RESET}"
|
||||||
|
echo
|
||||||
|
script_cmd="xdg-open \"https://darkcat09.codeberg.page/text/?title=$caption&text=$content&theme=dark\""
|
||||||
|
else
|
||||||
|
# Calling GTK MessageDialog from Python
|
||||||
|
COLOR="$CYAN"
|
||||||
|
block "Installing showdialog==1.0.1"
|
||||||
|
python3 -m pip install -U 'showdialog==1.0.1' >/dev/null
|
||||||
|
block "Exit code: $?"
|
||||||
|
script_cmd="python -c \"from showdialog import show_msg; show_msg(title=\\\"\\\",text=\\\"$caption\\\",sectext=\\\"$content\\\")\""
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
buildscript () {
|
||||||
|
|
||||||
|
script_vars="SYE_TIME='$script_time'${NEWLINE}SYE_EXCL='$script_excl'${NEWLINE}SYE_CMD='$script_cmd'${NEWLINE}"
|
||||||
|
echo "$script_vars" | cat - .template.sh >$script_file
|
||||||
|
chmod +x $script_file
|
||||||
|
|
||||||
|
COLOR="$GREEN"
|
||||||
|
block "Script was saved to ${COLOR}$script_file${RESET}"
|
||||||
|
block "" n
|
||||||
|
ls -alihQ --color=none $script_file
|
||||||
|
block "" n
|
||||||
|
file $script_file
|
||||||
|
echo
|
||||||
|
}
|
||||||
|
|
||||||
|
cronconfig () {
|
||||||
|
|
||||||
|
COLOR="$PURPLE"
|
||||||
|
block "Add cron task for autorun? [Y/n] " n
|
||||||
|
echo -ne "$COLOR"
|
||||||
|
read add
|
||||||
|
echo -ne "$RESET"
|
||||||
|
|
||||||
|
# if it's a latin or cyrillic letter N
|
||||||
|
# (\s* means no matter how much spaces before),
|
||||||
|
# exit from the script
|
||||||
|
if [[ $add =~ ^\s*[NnНн] ]]
|
||||||
|
then echo && exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
task="@reboot env PATH='$PATH' DISPLAY=$DISPLAY DESKTOP_SESSION=$DESKTOP_SESSION bash \"$script_file\""
|
||||||
|
block "Generated task:"
|
||||||
|
block "$task"
|
||||||
|
|
||||||
|
# Get the crontab contents, if it exists
|
||||||
|
crontab=$(crontab -l) || crontab=''
|
||||||
|
# Add to it \n, generated task, \n
|
||||||
|
echo "$crontab${NEWLINE}$task${NEWLINE}" | crontab -
|
||||||
|
|
||||||
|
# Show updated crontab for debug reasons
|
||||||
|
block "${BOLD}New crontab content:${RESET}"
|
||||||
|
crontab -l
|
||||||
|
echo
|
||||||
|
}
|
||||||
|
|
||||||
|
main () {
|
||||||
|
clear
|
||||||
|
about
|
||||||
|
safetime
|
||||||
|
whitelist
|
||||||
|
notifycmd
|
||||||
|
buildscript
|
||||||
|
cronconfig
|
||||||
|
}
|
||||||
|
|
||||||
|
main
|
Loading…
Add table
Reference in a new issue