shell-emotions
Command line animations based on the state of the system for Linux or Windows 10
The ascii animations were created using a modified version of Joedang's converter
Requirements
Linux
- Python 2 or 3
- psutil
- Bash or Fish
Windows 10
- Python 3
- psutil
- pythonnet | (Optional)
- OpenHardwareMonitorLib.dll | Note: OpenHardwareMonitor REQUIRES Administrator Access (Optional)
- Powershell
Workflow for getting the ascii frames
Manual Method
- Use https://ezgif.com/split to split desired gif animation into frames
- Use https://www.text-image.com/convert/ to create ascii frames based on previously created image frames
- Locate the images and ascii frames in assets directory
Termimum Method
- Download modified Termimation
- Locate gif you want to convert to ascii frames named
- Run ->
./termimation
./
Adding Animations
- Create ascii frames using above workflow or
- Move ascii frames named 0-N to
./assets/frames/
- Add conditional in
state_update()
in lib.threading that setsstate = emotions["
"].id
Configuration
Configurable Parameters in ./conf/cfg.py:
frames_path
| This is the path of the frames folder where individual folders for each emotion is kept (Default "./assets/frames/")state
| This is the starting state of the program (Default 0)welcome_time
| Time (sec) for welcome message (Default 1)frame_time
| The time before printing next frame (Default 0.2)util_refresh
| Time inbetween utilization stat refreshes (Default 5)cpu_lvl_1
| Boundary for low CPU usage (Default 10)cpu_lvl_2
| Boundary for medium CPU usage (Default 30)cpu_lvl_3
| Boundary for high CPU usage (Default 90)cpu_temp_lvl_1
| Boundary for high CPU temperature (Default 80)cpu_temp_lvl_2
| Boundary for very high CPU temperature (Default 90)cpu_temp_lvl_3
| Boundary for CPU throttling temperature (Default 105)cpu_temp_sensor
| Sensor to pull CPU Temps from (Default "coretemp")cpu_temp_sensor_win32
| Sensor to pull CPU temps in win32 from (Default "CPU Package")cpu_temp_default
| Default fallback CPU temperature (Default 0)mem_bound
| Boundary for high memory usage (Default 50)
clean.sh
Use clean.sh file for cleaning undesired characters from the ascii frames
main.py
Functions
shutdown(signum, frame):
The shutdown function handles clean shutdown of the program with "Shutting down..." printout.
main():
The main function deals with signal handling and starts both state update and emote threads.
threading.py
Functions
state_update(thread_name):
The state update thread is a daemon that queries system stats through psutil and updates global state
.
emote(thread_name):
The emote thread is a daemon that runs the correct animation based on state
continuously.
animation.py
Classes
class Animation:
The Animation
class has the properties name
, id
, file_path
, and frames
. It will fill frames
list upon initialization using input file_path
and name
.
win32_temp.py
Functions
init_open_hwd_mon():
This function initializes OpenHardwareMonitor by loading OpenHardwareMonitorLib.dll and returning the handle.
get_cpu_pkg_temp(handle)
This function returns cpu package temperature from OpenHardwareMonitor.