Skip to content

WakaTime

Configure ~/.waktime.cfg

cat << "EOF" ~/.wakatime.cfg
[settings]
debug = false
api_key=
api_url = https://api.wakatime.com/api/v1
hide_file_names = false
hide_project_names = false
hide_branch_names =
hide_project_folder = false
exclude =
    ^COMMIT_EDITMSG$
    ^TAG_EDITMSG$
    ^/var/(?!www/).*
    ^/etc/
include =
    .*
include_only_with_project_file = false
exclude_unknown_project = false
status_bar_enabled = true
status_bar_coding_activity = true
status_bar_hide_categories = false
offline = true
no_ssl_verify = false
ssl_certs_file =
timeout = 30
hostname = elitedesk
log_file =
EOF

Create bash-wakatime.sh

#!/bin/bash

pre_prompt_command() {
	version="1.0.0"
	entity=$(echo $(fc -ln -0) | cut -d ' ' -f1)
	[ -z "$entity" ] && return

	language="Bash"
	project="Terminal"
	category="coding"

	case $entity in
	ncmpcpp)
		project="Music Player Daemon"
		;;
	vim | nano)
		category="coding"
		filename=$(echo $(fc -ln -0) | cut -d ' ' -f2)
		file_extension="${filename##*.}"  
        filename="private.$file_extension" 
		case "$file_extension" in
		"c") language="C" ;;
		"cpp") language="C++" ;;
		"py") language="Python" ;;
		"js") language="JavaScript" ;;
		"html") language="HTML" ;;
		"css") language="CSS" ;;
		"pl") language="Perl" ;;
		"md") language="Markdown" ;;
		"awk") language="Awk" ;;
		"php") language="PHP" ;;
		"conf") language="Config" ;;
		"sh") language="Bash" ;;
		*) language="Bash" ;;
		esac
		;;
	cmus) 
        project="cmus"
        category="coding"
        ;;
	telnet)
		project="Telnet"
		category="coding"
		;;
	weechat)
		project="Weechat"
		category="meeting"
		;;
	ssh)
		project="SSH"
		category="coding"
		;;
	adb)
		project="Android Debug Bridge"
		category="coding"
		;;
	vim)
		project="Terminal"
		category="coding"
		;;
	nano)
		project="Nano"
		category="coding"
		;;
	*)
		$(git rev-parse --is-inside-work-tree 2>/dev/null) && project="$(basename $(git rev-parse --show-toplevel))" || project="Terminal"
		;;
	esac

	(~/.wakatime/wakatime-cli --write \
		--plugin "bash-wakatime/$version" \
		--entity-type app \
		--project "$project" \
		--entity "$entity" \
		--category "$category" \
		--language "$language" \
		--alternate-project "Terminal" \
		--alternate-language "Bash" \
		--alternate-branch "main" \
		--category "Coding" \
		--exclude-unknown-project \
		--hide-project-folder \
		--internal-config ~/.wakatime/wakatime-internal.cfg \
		--config "~/.wakatime.cfg" \
		2>&1 >/dev/null &)

#	(~/.wakatime/wakatime-cli --write \
#		--plugin "bash-wakatime/$version" \
#		--entity-type app \
#		--project "$project" \
#		--entity "$entity" \
#		--category "$category" \
#		--language "$language" \
#		--alternate-project "Terminal" \
#		--alternate-language "Bash" \
#		--alternate-branch "main" \
#		--category "Coding" \
#		--exclude-unknown-project \
#		--hide-project-folder \
#		--exclude-unknown-project \
#		--config "~/.wakapi.cfg" \
#		2>&1 >/dev/null &)
}

PROMPT_COMMAND="pre_prompt_command; $PROMPT_COMMAND"