mirror of
https://gitlab.com/sagidayan/linux-config.git
synced 2024-11-21 14:55:26 +00:00
update: Added code stats, starship.rs, nvim python and more
Signed-off-by: Sagi Dayan <sagidayan@gmail.com>
This commit is contained in:
parent
edd5966d43
commit
74cda27d38
8 changed files with 262 additions and 1 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1 +1,2 @@
|
||||||
report.xml
|
report.xml
|
||||||
|
files/dotfiles/nvim/plugin/
|
||||||
|
|
|
@ -3,7 +3,7 @@ import = [
|
||||||
]
|
]
|
||||||
|
|
||||||
[window]
|
[window]
|
||||||
#opacity = 0.7
|
#opacity = 0.9
|
||||||
dynamic_padding = true
|
dynamic_padding = true
|
||||||
decorations = "none"
|
decorations = "none"
|
||||||
|
|
||||||
|
|
|
@ -51,6 +51,7 @@ local dapui_ok, dapui = pcall(require, "dapui")
|
||||||
local dap_virt_txt_ok, dap_virt_txt = pcall(require, "nvim-dap-virtual-text")
|
local dap_virt_txt_ok, dap_virt_txt = pcall(require, "nvim-dap-virtual-text")
|
||||||
local mason_dap_ok, mason_dap = pcall(require, "mason-nvim-dap")
|
local mason_dap_ok, mason_dap = pcall(require, "mason-nvim-dap")
|
||||||
local dapgo_ok, dapgo = pcall(require, "dap-go")
|
local dapgo_ok, dapgo = pcall(require, "dap-go")
|
||||||
|
local dap_python_ok, dap_python = pcall(require, "dap-python")
|
||||||
if dapui_ok then
|
if dapui_ok then
|
||||||
dapui.setup()
|
dapui.setup()
|
||||||
end
|
end
|
||||||
|
@ -70,6 +71,9 @@ end
|
||||||
if dapgo_ok then
|
if dapgo_ok then
|
||||||
dapgo.setup()
|
dapgo.setup()
|
||||||
end
|
end
|
||||||
|
if dap_python_ok then
|
||||||
|
dap_python.setup("python")
|
||||||
|
end
|
||||||
-- end debugger
|
-- end debugger
|
||||||
--
|
--
|
||||||
|
|
||||||
|
@ -88,3 +92,21 @@ if harpoon_ok then
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local codestats_ok, codestats = pcall(require, "codestats")
|
||||||
|
if codestats_ok then
|
||||||
|
local key = os.getenv("CODESTATS_API_KEY") or ""
|
||||||
|
if key ~= "" then
|
||||||
|
codestats.setup {
|
||||||
|
username = 'goomba', -- needed to fetch profile data
|
||||||
|
base_url = 'https://codestats.net', -- codestats.net base url
|
||||||
|
api_key = key,
|
||||||
|
send_on_exit = true, -- send xp on nvim exit
|
||||||
|
send_on_timer = true, -- send xp on timer
|
||||||
|
timer_interval = 60000, -- timer interval in milliseconds (minimum 1000ms to prevent DDoSing codestat.net servers)
|
||||||
|
curl_timeout = 5, -- curl request timeout in seconds
|
||||||
|
}
|
||||||
|
else
|
||||||
|
print("Missing codestats API key... If you want to use CodeStats. Please set CODESTATS_API_KEY env var")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
|
@ -1,8 +1,20 @@
|
||||||
local servers = {
|
local servers = {
|
||||||
"pyright",
|
"pyright",
|
||||||
"jsonls",
|
"jsonls",
|
||||||
|
"ruff",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-- Python virtual environments
|
||||||
|
|
||||||
|
local is_vitrual_env = os.getenv("VIRTUAL_ENV") or '' ~= ''
|
||||||
|
if is_vitrual_env then
|
||||||
|
print("Running in python venv")
|
||||||
|
vim.g.python3_host_prog = '/venv/bin/python'
|
||||||
|
vim.g.python_host_prog = '/venv/bin/python'
|
||||||
|
end
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
local settings = {
|
local settings = {
|
||||||
ui = {
|
ui = {
|
||||||
icons = {
|
icons = {
|
||||||
|
|
|
@ -22,6 +22,7 @@ return require("packer").startup(function(use)
|
||||||
'simrat39/symbols-outline.nvim',
|
'simrat39/symbols-outline.nvim',
|
||||||
'L3MON4D3/LuaSnip',
|
'L3MON4D3/LuaSnip',
|
||||||
'saadparwaiz1/cmp_luasnip',
|
'saadparwaiz1/cmp_luasnip',
|
||||||
|
'nvimtools/none-ls.nvim',
|
||||||
}
|
}
|
||||||
|
|
||||||
-- Debugger
|
-- Debugger
|
||||||
|
@ -29,6 +30,7 @@ return require("packer").startup(function(use)
|
||||||
use 'theHamsta/nvim-dap-virtual-text'
|
use 'theHamsta/nvim-dap-virtual-text'
|
||||||
use "jay-babu/mason-nvim-dap.nvim"
|
use "jay-babu/mason-nvim-dap.nvim"
|
||||||
use 'leoluz/nvim-dap-go'
|
use 'leoluz/nvim-dap-go'
|
||||||
|
use 'mfussenegger/nvim-dap-python'
|
||||||
|
|
||||||
-- file tree
|
-- file tree
|
||||||
use {
|
use {
|
||||||
|
@ -92,4 +94,10 @@ return require("packer").startup(function(use)
|
||||||
|
|
||||||
-- Catppuccin
|
-- Catppuccin
|
||||||
use { "catppuccin/nvim", as = "catppuccin" }
|
use { "catppuccin/nvim", as = "catppuccin" }
|
||||||
|
|
||||||
|
-- Code Stats
|
||||||
|
use {
|
||||||
|
'liljaylj/codestats.nvim',
|
||||||
|
requires = { { "nvim-lua/plenary.nvim" } }
|
||||||
|
}
|
||||||
end)
|
end)
|
||||||
|
|
205
files/dotfiles/shellconfig/codestats.plugin.zsh
Normal file
205
files/dotfiles/shellconfig/codestats.plugin.zsh
Normal file
|
@ -0,0 +1,205 @@
|
||||||
|
# https://gitlab.com/code-stats/code-stats-zsh
|
||||||
|
|
||||||
|
_codestats_version="0.3.11"
|
||||||
|
|
||||||
|
zmodload zsh/datetime
|
||||||
|
|
||||||
|
declare -g -i _codestats_xp=0
|
||||||
|
declare -g -i _codestats_pulse_time=${EPOCHSECONDS}
|
||||||
|
|
||||||
|
# Because each `curl` call is forked into a subshell to keep the interactive
|
||||||
|
# shell responsive, the consecutive error count cannot be updated in a
|
||||||
|
# variable. So we use a temp file, one error per line.
|
||||||
|
_codestats_consecutive_errors=$(mktemp)
|
||||||
|
|
||||||
|
# Logging: write to file if CODESTATS_LOG_FILE is set and exists
|
||||||
|
_codestats_log()
|
||||||
|
{
|
||||||
|
if [[ -w "${CODESTATS_LOG_FILE}" ]]; then
|
||||||
|
# EPOCHSECONDS is an integer, so disable globbing/splitting warning
|
||||||
|
# shellcheck disable=SC2086
|
||||||
|
echo "$(\strftime %Y-%m-%dT%H:%M:%S ${EPOCHSECONDS}) ($$) $*" >> "${CODESTATS_LOG_FILE}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Widget wrapper: add a keypress and call original widget
|
||||||
|
_codestats_call_widget()
|
||||||
|
{
|
||||||
|
# Bracketed-paste-magic calls self-insert when pasting and sets $PASTED.
|
||||||
|
# Don't add xp for pasting.
|
||||||
|
|
||||||
|
# shellcheck disable=SC2004
|
||||||
|
if (( ! ${+PASTED} )); then
|
||||||
|
_codestats_xp+=15
|
||||||
|
fi
|
||||||
|
|
||||||
|
builtin zle "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Rebind widgets
|
||||||
|
_codestats_rebind_widgets()
|
||||||
|
{
|
||||||
|
local w
|
||||||
|
for w in \
|
||||||
|
self-insert \
|
||||||
|
delete-char \
|
||||||
|
backward-delete-char \
|
||||||
|
accept-line
|
||||||
|
do
|
||||||
|
# call the internal version, ie. the one beginning with `.`
|
||||||
|
eval "_codestats_${w} () { _codestats_call_widget .${w} -- \"\$@\" }"
|
||||||
|
zle -N ${w} _codestats_${w}
|
||||||
|
|
||||||
|
_codestats_log "Wrapped and rebound the ${w} widget."
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Pulse sending function
|
||||||
|
_codestats_send_pulse()
|
||||||
|
{
|
||||||
|
# Check that error count hasn't been exceeded
|
||||||
|
local -i error_count=0
|
||||||
|
if [[ -r "${_codestats_consecutive_errors}" ]]; then
|
||||||
|
error_count=$(wc -l < "${_codestats_consecutive_errors}")
|
||||||
|
fi
|
||||||
|
if (( error_count > 4 )); then
|
||||||
|
_codestats_log "Received too many consecutive errors! Stopping..."
|
||||||
|
_codestats_stop "Received ${error_count} consecutive errors when trying to save XP."
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If there's accumulated XP, send it
|
||||||
|
if (( _codestats_xp > 0 )); then
|
||||||
|
local url
|
||||||
|
url="$(_codestats_pulse_url)"
|
||||||
|
|
||||||
|
_codestats_log "Sending pulse (${_codestats_xp} xp) to ${url}"
|
||||||
|
|
||||||
|
local payload
|
||||||
|
payload=$(_codestats_payload ${_codestats_xp})
|
||||||
|
|
||||||
|
\curl \
|
||||||
|
--max-time 5 \
|
||||||
|
--header "Content-Type: application/json" \
|
||||||
|
--header "X-API-Token: ${CODESTATS_API_KEY}" \
|
||||||
|
--user-agent "code-stats-zsh/${_codestats_version}" \
|
||||||
|
--data "${payload}" \
|
||||||
|
--request POST \
|
||||||
|
--silent \
|
||||||
|
--output /dev/null \
|
||||||
|
--write-out "%{http_code}" \
|
||||||
|
"${url}" \
|
||||||
|
| _codestats_handle_response_status \
|
||||||
|
&|
|
||||||
|
|
||||||
|
_codestats_xp=0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Error handling based on HTTP status
|
||||||
|
_codestats_handle_response_status()
|
||||||
|
{
|
||||||
|
local _status
|
||||||
|
_status=$(\cat -)
|
||||||
|
case ${_status} in
|
||||||
|
000)
|
||||||
|
_codestats_log "Network error!"
|
||||||
|
# don't stop; maybe the network will start working eventually
|
||||||
|
;;
|
||||||
|
200 | 201 )
|
||||||
|
_codestats_log "Success (${_status})!"
|
||||||
|
# clear error count
|
||||||
|
echo -n >! "${_codestats_consecutive_errors}"
|
||||||
|
;;
|
||||||
|
3* )
|
||||||
|
_codestats_log "Unexpected redirect ${_status}!"
|
||||||
|
_codestats_stop "Server responded with a redirect. Perhaps code-stats-zsh is out of date?"
|
||||||
|
# this problem will probably not go away. stop immediately.
|
||||||
|
;;
|
||||||
|
4* | 5* )
|
||||||
|
_codestats_log "Server responded with error ${_status}!"
|
||||||
|
# some of 4xx and 5xx statuses may indicate a temporary problem
|
||||||
|
echo "${_status}" >>! "${_codestats_consecutive_errors}"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
_codestats_log "Unexpected response status ${_status}!"
|
||||||
|
# whatever happened, stop if it persists
|
||||||
|
echo "${_status}" >>! "${_codestats_consecutive_errors}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
_codestats_pulse_url()
|
||||||
|
{
|
||||||
|
echo "${CODESTATS_API_URL:-https://codestats.net}/api/my/pulses"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Create API payload
|
||||||
|
_codestats_payload()
|
||||||
|
{
|
||||||
|
# shellcheck disable=SC2086
|
||||||
|
cat <<EOF
|
||||||
|
{
|
||||||
|
"coded_at": "$(\strftime %Y-%m-%dT%H:%M:%S%z ${EPOCHSECONDS})",
|
||||||
|
"xps": [{"language": "Terminal (Zsh)", "xp": $1}]
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check time since last pulse; maybe send pulse
|
||||||
|
_codestats_poll()
|
||||||
|
{
|
||||||
|
if (( EPOCHSECONDS - _codestats_pulse_time > 10 )); then
|
||||||
|
_codestats_send_pulse
|
||||||
|
_codestats_pulse_time=${EPOCHSECONDS}
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_codestats_exit()
|
||||||
|
{
|
||||||
|
_codestats_log "Shell is exiting. Calling _codestats_send_pulse one last time."
|
||||||
|
_codestats_send_pulse
|
||||||
|
|
||||||
|
# remove temp file
|
||||||
|
rm -f "${_codestats_consecutive_errors}"
|
||||||
|
}
|
||||||
|
|
||||||
|
_codestats_init()
|
||||||
|
{
|
||||||
|
_codestats_log "Initializing code-stats-zsh@${_codestats_version}..."
|
||||||
|
|
||||||
|
_codestats_rebind_widgets
|
||||||
|
|
||||||
|
# Call the polling function on each new prompt
|
||||||
|
autoload -U add-zsh-hook
|
||||||
|
add-zsh-hook precmd _codestats_poll
|
||||||
|
|
||||||
|
# Send pulse on shell exit
|
||||||
|
add-zsh-hook zshexit _codestats_exit
|
||||||
|
|
||||||
|
_codestats_log "Initialization complete."
|
||||||
|
}
|
||||||
|
|
||||||
|
# Stop because there was an error. Overwrite handler functions.
|
||||||
|
_codestats_stop()
|
||||||
|
{
|
||||||
|
_codestats_log "Stopping zsh-code-stats. Overwriting hook functions with no-ops."
|
||||||
|
>&2 echo "code-stats-zsh: $* Stopping."
|
||||||
|
_codestats_poll() { true; }
|
||||||
|
_codestats_exit() { true; }
|
||||||
|
|
||||||
|
# remove temp file
|
||||||
|
rm -f "${_codestats_consecutive_errors}"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ -n "${CODESTATS_API_KEY}" ]]; then
|
||||||
|
_codestats_init
|
||||||
|
else
|
||||||
|
echo "code-stats-zsh requires CODESTATS_API_KEY to be set!"
|
||||||
|
false
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n "${CODESTATS_LOG_FILE}" && ! -w "${CODESTATS_LOG_FILE}" ]]; then
|
||||||
|
echo "Warning: CODESTATS_LOG_FILE needs to exist and be writable!"
|
||||||
|
fi
|
||||||
|
|
|
@ -108,6 +108,10 @@ source ~/.shellconfig/aliases.sh
|
||||||
source ~/.shellconfig/environment.sh
|
source ~/.shellconfig/environment.sh
|
||||||
# Functions
|
# Functions
|
||||||
source ~/.shellconfig/functions.sh
|
source ~/.shellconfig/functions.sh
|
||||||
|
# Codestats if env var is set
|
||||||
|
if [ -n "$1" ]; then
|
||||||
|
source ~/.shellconfig/codestats.plugin.zsh
|
||||||
|
fi
|
||||||
# Auto complete functions
|
# Auto complete functions
|
||||||
if [ -d ~/.shellconfig/autocomplete ]; then
|
if [ -d ~/.shellconfig/autocomplete ]; then
|
||||||
[ "$(ls -A ~/.shellconfig/autocomplete/)" ] && source <(cat ~/.shellconfig/autocomplete/*)
|
[ "$(ls -A ~/.shellconfig/autocomplete/)" ] && source <(cat ~/.shellconfig/autocomplete/*)
|
||||||
|
@ -120,3 +124,5 @@ fi
|
||||||
if [[ $DEVICE_ROLE == "WORKSTATION" ]]; then
|
if [[ $DEVICE_ROLE == "WORKSTATION" ]]; then
|
||||||
[ -z $TMUX ] && (tmux new-session ~/.shellconfig/workspaces/open_workspace.sh)
|
[ -z $TMUX ] && (tmux new-session ~/.shellconfig/workspaces/open_workspace.sh)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
eval "$(starship init zsh)"
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
- name: Enable copr for starship.rs
|
||||||
|
become: true
|
||||||
|
community.general.copr:
|
||||||
|
state: enabled
|
||||||
|
name: atim/starship
|
||||||
|
|
||||||
- name: Installing packages
|
- name: Installing packages
|
||||||
become: true
|
become: true
|
||||||
package:
|
package:
|
||||||
|
@ -23,6 +29,7 @@
|
||||||
- bat
|
- bat
|
||||||
- fzf
|
- fzf
|
||||||
- unzip
|
- unzip
|
||||||
|
- starship
|
||||||
state: present
|
state: present
|
||||||
|
|
||||||
- name: Copy gitconfig base
|
- name: Copy gitconfig base
|
||||||
|
|
Loading…
Reference in a new issue