Compare commits
15 Commits
9d863e0188
...
main
Author | SHA1 | Date | |
---|---|---|---|
386ff7259c
|
|||
28f1604b78
|
|||
04477c25bf
|
|||
46e9b50a13
|
|||
fff74676d9
|
|||
40b17c99e4
|
|||
cf083e866b
|
|||
5e7e5b6f33
|
|||
f3bf9e0612
|
|||
ded3151a67
|
|||
4674684254
|
|||
e030342ca5
|
|||
8f91b50c0c
|
|||
2c3b6dfc09
|
|||
1456b4a315
|
@ -14,6 +14,7 @@ if [ -x /usr/bin/dircolors ]; then
|
||||
alias egrep='egrep --color=auto'
|
||||
alias diff='diff --color=auto'
|
||||
fi
|
||||
|
||||
alias §rm='rm -vi'
|
||||
alias §cp='cp -vi'
|
||||
alias §mv='mv -vi'
|
||||
@ -26,9 +27,42 @@ alias §df='df -Th'
|
||||
alias §xclip-copy='xclip -selection clipboard'
|
||||
alias §xclip-paste='xclip -o -selection clipboard'
|
||||
|
||||
LAST_PWD_PATH="$BASH_DOTFILES/.bash_last_pwd"
|
||||
[ -f "$LAST_PWD_PATH" ] && OLDPWD=`cat $LAST_PWD_PATH`
|
||||
cd(){ builtin cd "$@" && echo `pwd` > "$LAST_PWD_PATH"; }
|
||||
CROSS_SESSION="$BASH_DOTFILES/.bash_cross_session"
|
||||
[ -f "$CROSS_SESSION" ] && . "$CROSS_SESSION"
|
||||
crossSession() {
|
||||
if [[ '--help' == "${1:---help}" ]]; then
|
||||
echo 'crossSession [--help]'
|
||||
echo ' Print this help.'
|
||||
echo 'crossSession [--list]'
|
||||
echo ' Lists all cross session variables or print this help.'
|
||||
echo 'crossSession <name> [<value>]'
|
||||
echo ' Sets cross session variable <name> to <value> (or empty for unset).'
|
||||
return 0
|
||||
fi
|
||||
if [[ '--list' == "$1" ]]; then
|
||||
cat "$CROSS_SESSION"
|
||||
return 0
|
||||
fi
|
||||
local name="$1"
|
||||
local value="$2"
|
||||
|
||||
# Check if the variable already exists in the file
|
||||
if grep -q "^export $name=" "$CROSS_SESSION"; then
|
||||
if [ -z "$value" ]; then
|
||||
# If new value is empty, remove the variable from the file
|
||||
sed -i "/^export $name=/d" "$CROSS_SESSION"
|
||||
else
|
||||
# If it exists, replace the old value with the new value
|
||||
sed -i "s|^export $name=.*|export $name=\"$value\"|" "$CROSS_SESSION"
|
||||
fi
|
||||
else
|
||||
if [ -n "$value" ]; then
|
||||
# If it doesn't exist and new value is not empty, append the new variable to the file
|
||||
echo "export $name=\"$value\"" >> "$CROSS_SESSION"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
cd(){ builtin cd "$@" && crossSession 'OLDPWD' "$(pwd)"; }
|
||||
|
||||
history_clean(){ awk '!seen[$0]++ {print $0}' $HOME/.bash_history; }
|
||||
history_edit(){ vim $HOME/.bash_history; }
|
||||
@ -46,6 +80,11 @@ history_most_used(){ LC_ALL=C cat ~/.bash_history | cut -d ';' -f 2- | §awk 1 |
|
||||
alias §less='less -R -S'
|
||||
|
||||
m(){
|
||||
if [[ '-d' == "$1" ]]; then
|
||||
unset "m$2"
|
||||
crossSession "m$2"
|
||||
return 0
|
||||
fi
|
||||
if [[ -z "$1" ]]; then
|
||||
printenv | grep -e '^m'
|
||||
return 0
|
||||
@ -53,6 +92,8 @@ m(){
|
||||
if [[ "--help" == "$1" ]]; then
|
||||
echo 'm [--help]'
|
||||
echo ' Lists all marks or print this help.'
|
||||
echo 'm -d <name>'
|
||||
echo ' Deletes mark <name>. Unsets variable and cross session variable.'
|
||||
echo 'm <name> [path]'
|
||||
echo ' Sets mark <name> to current directory or [path].'
|
||||
echo ' The mark is just a bash variable, use `$m<name>`.'
|
||||
@ -61,6 +102,7 @@ m(){
|
||||
local n="m$1"
|
||||
[[ -z "${!n}" ]] || return 1
|
||||
[[ -z "$2" ]] && local p="$(pwd)" || local p="$(readlink -f $2)"
|
||||
crossSession "$n" "$p"
|
||||
export $n="$p"
|
||||
}
|
||||
alias cd-vifm='cd `vifm --choose-dir -`'
|
||||
@ -110,19 +152,22 @@ alias §ck-grep='cat /usr/share/X11/locale/en_US.UTF-8/Compose ~/.XCompose | gre
|
||||
§cmdfu(){ curl "https://www.commandlinefu.com/commands/matching/$@/$(echo -n $@ | openssl base64)/plaintext"; }
|
||||
aai(){
|
||||
[[ "$1" == '--help' ]] && ai ask --help && return 0;
|
||||
echo "ai ask \"$*, thanks for your help\""; ai ask "\"$*, thanks for your help\"";
|
||||
#echo "ai ask \"$*, thanks for your help\""; ai ask "\"$*, thanks for your help\"";
|
||||
aipick -m "hi, would like to ask for help: $*\n…please response only with plain text to be used in terminal command without any explanation, thanks for your help";
|
||||
}
|
||||
|
||||
alias npx-wca='npx -y web-component-analyzer'
|
||||
alias npx-qnm='npx -y qnm'
|
||||
alias npx-hint='npx -y hint'
|
||||
alias npx-markdown='nohup npx markserv'
|
||||
alias npx-markdown='npx -y markserv'
|
||||
|
||||
alias fzf=fzf-carroarmato0.fzf
|
||||
alias smerge='/usr/bin/flatpak run --branch=stable --arch=x86_64 --command=sublime_merge --file-forwarding com.sublimemerge.App @@u %u @@'
|
||||
kommit(){ command kommit $* > /dev/null 2>&1 & disown; }
|
||||
|
||||
§url-curl(){ curl --silent -I "$1" | grep -i location; }
|
||||
|
||||
alias bathelp='bat --plain --language=help'
|
||||
alias bathelp='batcat --plain --language=help'
|
||||
|
||||
rpg(){
|
||||
rpg-cli "$@"
|
||||
|
@ -8,14 +8,15 @@ source "$SCRIPT_DIR/complete-alias/complete_alias"
|
||||
complete -F _complete_alias gitdotfiles
|
||||
|
||||
alias C--asana='eval "$($HOME/bin/asana.mjs completion_bash)"'
|
||||
alias C--himalaya='\. "$BASH_DOTFILES/himalaya.completion"'
|
||||
alias C--brew='\. "$BASH_DOTFILES/brew.completion"'
|
||||
alias C--pnpm='\. "$BASH_DOTFILES/pnpm.completion"'
|
||||
alias C--uu='eval "$($HOME/bin/uu --completion-bash)"'
|
||||
alias C--bs='eval "$(bs .completion bash)"'
|
||||
alias C--jc='eval "$(jc -B)" … newer version needed'
|
||||
\. <(bs .completion bash)
|
||||
\. "$BASH_DOTFILES/cordova.completion"
|
||||
eval "$(node --completion-bash)"
|
||||
eval "$(npm completion)"
|
||||
eval "$(nodejsscript --completion bash)"
|
||||
\. <(node --completion-bash)
|
||||
\. <(npm completion)
|
||||
\. <(nodejsscript --completion bash)
|
||||
|
||||
_npx() {
|
||||
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
|
@ -9,116 +9,145 @@ function jaaENV {
|
||||
echo " jaaENV --save …to_save (example: jaaENV --save nodejs php)"
|
||||
echo ""
|
||||
echo "Description:"
|
||||
echo " - Without arguments loads infos from '.jaaENV'"
|
||||
echo " - 'ls' shows supported options to auto load"
|
||||
echo " - 'save' cerates config file '.jaaENV'"
|
||||
echo " - Without arguments, loads info from '.jaaENV'"
|
||||
echo " - 'ls' shows supported options to auto-load"
|
||||
echo " - 'save' creates a config file '.jaaENV'"
|
||||
echo ""
|
||||
echo "Usage '.jaaENV' files: "
|
||||
echo " typical: '\nphp=5.6\nnodejs=16.13.0'"
|
||||
echo " link: '. ../.jaaENV' … use settings from parent folder"
|
||||
echo " Options:"
|
||||
echo " 'android_home': Exports 'ANDROID_HOME' (uses 'ANDROID_HOME_BAK') instead of new 'ANDROID_SDK_ROOT'. Value can be anything (use '1')."
|
||||
echo " 'jdk': Exports 'JAVA_HOME' based on wanted version (currently 11/1.8)"
|
||||
echo " 'android_home': Exports 'ANDROID_HOME' (uses 'ANDROID_HOME_BAK') instead of 'ANDROID_SDK_ROOT'. Value can be anything (use '1')."
|
||||
echo " 'jdk': Exports 'JAVA_HOME' based on the wanted version (currently 11/1.8)"
|
||||
echo " 'nodejs'|'php': NodeJS/PHP versions"
|
||||
echo " 'gradle': Cordova uses folder scoped → so unnecesarly"
|
||||
echo " 'gradle': Cordova uses folder-scoped → so unnecesarly"
|
||||
echo ""
|
||||
echo "Install: "
|
||||
echo " gradle ⇒ https://sdkman.io/"
|
||||
echo " node ⇒ https://github.com/nvm-sh/nvm"
|
||||
echo " php ⇒ http://jdem.cz/fgyu56 + https://deb.sury.org/"
|
||||
echo " php ⇒ \`update-alternatives\` + https://deb.sury.org/"
|
||||
echo " java ⇒ \`update-alternatives\`"
|
||||
echo ""
|
||||
echo "Tips:"
|
||||
echo " sudo update-alternatives --set php /usr/bin/php\$php"
|
||||
return 0
|
||||
fi
|
||||
if [ "$1" = "--save" ]; then
|
||||
|
||||
if [ "$1" == "--save" ]; then
|
||||
shift
|
||||
rm -vi .jaaENV
|
||||
while test $# -gt 0
|
||||
do
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
nodejs|node)
|
||||
local nodejs_version=$(node --version)
|
||||
echo "nodejs=${nodejs_version:1}" >> .jaaENV
|
||||
echo "nodejs=$(node --version | cut -c2-)" >> .jaaENV
|
||||
;;
|
||||
gradle)
|
||||
local gradle_version=$(gradle --version | head -n 3 | tail -n 1 | §awk 2)
|
||||
echo "gradle=$gradle_version" >> .jaaENV
|
||||
echo "gradle=$(gradle --version | awk '/Gradle/ {print $2}')" >> .jaaENV
|
||||
;;
|
||||
php)
|
||||
local php_version=$(php --version | head -n 1 | §awk 2)
|
||||
echo "php=$php_version" >> .jaaENV
|
||||
echo "php=$(php --version | awk '/^PHP/ {print $2}')" >> .jaaENV
|
||||
;;
|
||||
java)
|
||||
local java_version=$(java -version 2>&1 | head -n 1 | cut -d'"' -f2 | cut -d'.' -f1)
|
||||
local java_version=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}')
|
||||
if [[ "$java_version" == 1.8* ]]; then
|
||||
java_version=8
|
||||
else
|
||||
java_version=$(echo "$java_version" | cut -d'.' -f1)
|
||||
fi
|
||||
echo "java=$java_version" >> .jaaENV
|
||||
;;
|
||||
*)
|
||||
echo "unknown '$1' – skipped"
|
||||
echo "Unknown '$1' – skipped"
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
return 0
|
||||
fi
|
||||
if [ "$1" = "--ls" ]; then
|
||||
echo ":: nvm ls ::\n"
|
||||
nvm ls
|
||||
echo ":: find /usr/bin/ -name php* ::\n"
|
||||
find /usr/bin/ -name php*
|
||||
echo ":: sdk ls gradle | cat :: "
|
||||
sdk ls gradle | cat
|
||||
|
||||
if [ "$1" == "--ls" ]; then
|
||||
echo ":: nvm ls --no-alias ::"
|
||||
nvm ls --no-alias
|
||||
echo ":: update-alternatives --list php ::"
|
||||
update-alternatives --list php
|
||||
echo ":: update-alternatives --list java ::"
|
||||
update-alternatives --list java
|
||||
echo ":: sdk ls gradle | grep -E '\*|>' :: "
|
||||
sdk ls gradle | grep -E '\*|>'
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [ -f "compose.yaml" ]; then
|
||||
jdk=$(grep -Po 'VERSION_JAVA=\K.*' compose.yaml)
|
||||
nodejs=$(grep -Po 'VERSION_NODEJS=\K.*' compose.yaml)
|
||||
else
|
||||
elif [ -f ".jaaENV" ]; then
|
||||
. ./.jaaENV
|
||||
else
|
||||
echo 'No env file `compose.yaml` or `.jaaENV`'
|
||||
return 1
|
||||
fi
|
||||
|
||||
local chP="\[\033[0;35m\]" #purple
|
||||
local chW="\[\033[00m\]" #white
|
||||
export PS1_jaaENV="${chP}¦${chW}"
|
||||
|
||||
if [ ! -z ${ANDROID_SDK_ROOT_BAK+x} ]; then
|
||||
export ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT_BAK
|
||||
echo \$ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT_BAK
|
||||
unset ANDROID_SDK_ROOT_BAK
|
||||
fi
|
||||
if [ ! -z ${unset_android_sdk+x} ]; then
|
||||
export ANDROID_SDK_ROOT_BAK=$ANDROID_SDK_ROOT
|
||||
unset ANDROID_SDK_ROOT
|
||||
fi
|
||||
if [ ! -z ${java+x} ]; then
|
||||
[[ "$java" == "8" ]] && java=1.8
|
||||
local java_local=$(java -version 2>&1 | head -n 1 | cut -d'"' -f2)
|
||||
local java_local=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}')
|
||||
if [[ "$java_local" != "$java"* ]]; then
|
||||
[[ "$java" == "1.8" ]] && java=8
|
||||
echo "java $java ← $java_local"
|
||||
local v="/usr/lib/jvm/java-$java-openjdk-amd64/"
|
||||
[[ "$java" == "8" ]] && local vv="jre/" || local vv=""
|
||||
sudo update-alternatives --set java ${v}${vv}bin/java
|
||||
echo "Switching Java version: $java ← $java_local"
|
||||
local java_path="/usr/lib/jvm/java-$java-openjdk-amd64/"
|
||||
[[ "$java" == "8" ]] && java_path+="jre/"
|
||||
sudo update-alternatives --set java "${java_path}bin/java"
|
||||
local javac=$(update-alternatives --list javac | grep java-$java)
|
||||
[ $javac ] && sudo update-alternatives --set javac $javac
|
||||
[ -n "$javac" ] && sudo update-alternatives --set javac "$javac"
|
||||
sudo -k
|
||||
fi
|
||||
export JAVA_HOME=$(update-alternatives --display java | grep momentálně | §awk 5 | cut -d \/ -f1-5)/
|
||||
echo \$JAVA_HOME=$JAVA_HOME
|
||||
export JAVA_HOME=$(readlink -f $(which java) | cut -d '/' -f1-5)/
|
||||
echo "\$JAVA_HOME=$JAVA_HOME"
|
||||
fi
|
||||
if [ ! -z ${android_home+x} ]; then export ANDROID_HOME=$ANDROID_HOME_BAK; echo "\$ANDROID_HOME=$ANDROID_HOME"; else unset ANDROID_HOME; echo "\$ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT"; fi
|
||||
if [ ! -z ${android_home_is_sdk+x} ]; then export ANDROID_HOME=$ANDROID_SDK_ROOT; echo "\$ANDROID_HOME=$ANDROID_HOME"; fi
|
||||
if [ ! -z ${android_home+x} ]; then
|
||||
export ANDROID_HOME=$ANDROID_HOME_BAK
|
||||
echo "\$ANDROID_HOME=$ANDROID_HOME"
|
||||
else
|
||||
unset ANDROID_HOME
|
||||
echo "\$ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT"
|
||||
fi
|
||||
if [ ! -z ${android_home_is_sdk+x} ]; then
|
||||
export ANDROID_HOME=$ANDROID_SDK_ROOT
|
||||
echo "\$ANDROID_HOME=$ANDROID_HOME"
|
||||
fi
|
||||
if [ ! -z ${JAVA_HOME_BAK+x} ]; then export JAVA_HOME=$JAVA_HOME_BAK; unset JAVA_HOME_BAK; fi
|
||||
if [ ! -z ${jdk+x} ]; then
|
||||
if (( $(echo "$jdk > 9" | bc -l) )); then
|
||||
export JAVA_HOME_bk=$JAVA_HOME
|
||||
export JAVA_HOME=/snap/android-studio/current/android-studio/jre;
|
||||
elif [ ! -z ${JAVA_HOME_bk+x} ]; then
|
||||
export JAVA_HOME=$JAVA_HOME_bk
|
||||
export JAVA_HOME_BAK=$JAVA_HOME
|
||||
export JAVA_HOME="/snap/android-studio/current/android-studio/jre"
|
||||
fi
|
||||
echo "\$JAVA_HOME=$JAVA_HOME"
|
||||
fi
|
||||
if [ ! -z ${nodejs+x} ]; then nvm use $nodejs; fi
|
||||
if [ ! -z ${gradle+x} ]; then sdk use gradle $gradle | tr -d '\n'; echo ; fi
|
||||
if [ ! -z ${php+x} ]; then
|
||||
local php_local=$(php --version | head -n 1 | §awk 2)
|
||||
local php_local=$(php --version | awk '/^PHP/ {print $2}')
|
||||
if [[ "$php_local" == "$php"* ]]; then
|
||||
echo "php $php"
|
||||
echo "PHP version: $php"
|
||||
else
|
||||
echo "php $php ← $php_local"
|
||||
sudo update-alternatives --set php /usr/bin/php$php
|
||||
echo "Switching PHP version: $php ← $php_local"
|
||||
sudo update-alternatives --set php "/usr/bin/php$php"
|
||||
sudo -k
|
||||
fi
|
||||
fi
|
||||
unset android_home
|
||||
unset nodejs
|
||||
unset gradle
|
||||
unset php
|
||||
unset java
|
||||
|
||||
# Cleanup variables
|
||||
unset android_home unset_android_sdk nodejs gradle php java
|
||||
}
|
||||
|
@ -52,7 +52,11 @@ function updatePromt {
|
||||
PS1+="] "
|
||||
fi
|
||||
PS1+="${chB}\w${chW}"
|
||||
PS1+="\n:"
|
||||
if [ ! -z ${PS1_jaaENV+x} ]; then
|
||||
PS1+="\n$PS1_jaaENV"
|
||||
else
|
||||
PS1+="\n:"
|
||||
fi
|
||||
history -a
|
||||
}
|
||||
setPromt
|
||||
|
@ -1,7 +1,6 @@
|
||||
# IMPORT IN `$HOME/.profile`
|
||||
export ANDROID_HOME_BAK="$HOME/.local/share/umake/android/android-studio"
|
||||
export ANDROID_SDK_ROOT="$HOME/.local/share/umake/android/android-studio-sdk"
|
||||
export PATH=$PATH:$ANDROID_SDK_ROOT/tools/
|
||||
export ANDROID_HOME_BAK2="$HOME/.local/share/JetBrains/Toolbox/apps/android-studio/"
|
||||
export ANDROID_HOME_BAK="$HOME/Android/Sdk"
|
||||
export ANDROID_SDK_ROOT="$HOME/Android/Sdk"
|
||||
export PATH=$PATH:$ANDROID_SDK_ROOT/platform-tools/
|
||||
export PATH=$PATH:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin/
|
||||
export PATH=$PATH:$ANDROID_SDK_ROOT/emulator/
|
||||
|
File diff suppressed because it is too large
Load Diff
14
.bashrc
14
.bashrc
@ -11,9 +11,9 @@ shopt -s expand_aliases
|
||||
[ -f $BASH_DOTFILES/.bash_jaaENV ] && . $BASH_DOTFILES/.bash_jaaENV
|
||||
[ -f $BASH_DOTFILES/.bash_sdkman ] && . $BASH_DOTFILES/.bash_sdkman
|
||||
[ -f $BASH_DOTFILES/.bash_nvm ] && . $BASH_DOTFILES/.bash_nvm
|
||||
# Install Ruby Gems to ~/.local/share/gems
|
||||
export GEM_HOME="$HOME/.local/share/gems"
|
||||
export PATH="$HOME/.local/share/gems/bin:$HOME/.local/bin:$PATH"
|
||||
export NODE_COMPILE_CACHE=~/.cache/nodejs-compile-cache # https://nolanlawson.com/2024/10/20/why-im-skeptical-of-rewriting-javascript-tools-in-faster-languages/
|
||||
export PATH="$HOME/.local/bin:$PATH"
|
||||
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
|
||||
[ -f $BASH_DOTFILES/.bash_completions ] && . $BASH_DOTFILES/.bash_completions # for Vim
|
||||
|
||||
[[ $- != *i* ]] && return # If not running interactively, don't do anything
|
||||
@ -22,7 +22,8 @@ export PATH="$HOME/.local/share/gems/bin:$HOME/.local/bin:$PATH"
|
||||
set -o vi # VIM mode for bash
|
||||
bind -m vi-command 'Control-l: clear-screen'
|
||||
bind -m vi-insert 'Control-l: clear-screen'
|
||||
export MANPAGER="/bin/sh -c \"col -b | vim --not-a-term -c 'set ft=man ts=8 nomod nolist noma' -\""
|
||||
# export MANPAGER="/bin/sh -c \"sed -e 's/\x1B\[[[:digit:]]\+m//g' | col -b | vim --appimage-extract-and-run --not-a-term -c 'set ft=man ts=8 nomod nolist noma' -\""
|
||||
export MANPAGER="vim --appimage-extract-and-run +MANPAGER --not-a-term -c 'set ts=8 nolist' -"
|
||||
shopt -s checkwinsize # dynamic columns update after every cmd
|
||||
|
||||
## History
|
||||
@ -60,6 +61,9 @@ if ! shopt -oq posix; then
|
||||
fi
|
||||
export GPG_TTY=$(tty)
|
||||
|
||||
shopt -s cdspell # autocorrects cd misspellings
|
||||
|
||||
# HSTR configuration - add this to ~/.bashrc
|
||||
# if this is interactive shell, then bind hstr to Ctrl-space
|
||||
if [[ $- =~ .*i.* ]]; then bind '"\C-@": "\e^ihstr -- \n"'; fi
|
||||
# if [[ $- =~ .*i.* ]]; then bind '"\C-@": "\e^ihstr -- \C-j"'; fi
|
||||
if [[ $- =~ .*i.* ]]; then bind '"\C-@": "\e^I history | grep '\''\e\e^A'\''\e\ei"'; fi
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# This library is free software; you can redistribute it and/or
|
||||
# This library is free software; you can baseRedistribute it and/or
|
||||
# modify it under the terms of the GNU Library General Public
|
||||
# License as published by the Free Software Foundation; either
|
||||
# version 2 of the License, or (at your option) any later version.
|
||||
@ -27,21 +27,20 @@ base1=#282828
|
||||
base2=#3f3f3f
|
||||
base3=#808080
|
||||
base4=#303030
|
||||
vsblue=#AA89C0
|
||||
aqua=#6FB2EA
|
||||
bluegrey=#747e9e
|
||||
orange=#CE9563
|
||||
lime=#65ff00
|
||||
grey=#94B386
|
||||
red=#f00
|
||||
redbg=#751212
|
||||
green=#859900
|
||||
blue=#268bd2
|
||||
yellow=#dcdcaa
|
||||
baseKeyword=#C89FE3
|
||||
baseString=#6FB2EA
|
||||
baseKeyWord2=#747e9e
|
||||
baseNumber=#F19B78
|
||||
baseComment=#94B386
|
||||
baseRed=#f00
|
||||
baseRedbg=#751212
|
||||
baseGreen=#859900
|
||||
baseKeyword3=#DCB55F
|
||||
baseFunction=#dcdcaa
|
||||
|
||||
[named_styles]
|
||||
default=base0;base1;true;false
|
||||
error=red
|
||||
error=baseRed
|
||||
|
||||
|
||||
# Editor styles
|
||||
@ -49,76 +48,76 @@ error=red
|
||||
selection=;#000000;;true
|
||||
current_line=;#212121;true
|
||||
brace_good=base0;base2;true
|
||||
brace_bad=red;;true
|
||||
brace_bad=baseRed;;true
|
||||
margin_line_number=base3;base4
|
||||
margin_folding=base3;#212121
|
||||
fold_symbol_highlight=base2
|
||||
indent_guide=base2;;true
|
||||
caret=aqua;;false
|
||||
caret=baseString;;false
|
||||
marker_line=#fff;#00f;
|
||||
marker_search=#fff;#d791a8;
|
||||
marker_mark=;
|
||||
call_tips=base0;base1
|
||||
white_space=base2;;true
|
||||
white_space=base3;;true
|
||||
|
||||
|
||||
# Programming languages
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
comment=grey
|
||||
comment=baseComment
|
||||
comment_doc=comment
|
||||
comment_line=comment
|
||||
comment_line_doc=comment_doc
|
||||
comment_doc_keyword=comment_doc,bold
|
||||
comment_doc_keyword_error=comment_doc,italic
|
||||
|
||||
number=orange
|
||||
number=baseNumber
|
||||
number_1=number
|
||||
number_2=number_1
|
||||
|
||||
type=vsblue;;true
|
||||
class=aqua
|
||||
function=yellow
|
||||
type=baseKeyword;;true
|
||||
class=baseString
|
||||
function=baseFunction
|
||||
parameter=function
|
||||
|
||||
keyword=vsblue;;true
|
||||
keyword=baseKeyword;;true
|
||||
keyword_1=keyword
|
||||
keyword_2=blue;;true
|
||||
keyword_3=bluegrey
|
||||
keyword_2=baseKeyword3;;true
|
||||
keyword_3=baseKeyWord2
|
||||
keyword_4=keyword_3
|
||||
|
||||
identifier=default
|
||||
identifier_1=identifier
|
||||
identifier_2=identifier_1
|
||||
identifier_3=identifier_1
|
||||
identifier_4=identifier_1
|
||||
identifier_2=baseNumber
|
||||
identifier_3=identifier_2
|
||||
identifier_4=identifier_3
|
||||
|
||||
string=aqua
|
||||
string=baseString
|
||||
string_1=string
|
||||
string_2=string_1
|
||||
string_3=default
|
||||
string_4=default
|
||||
string_eol=red
|
||||
string_eol=baseRed
|
||||
character=string_1
|
||||
backticks=string_2
|
||||
here_doc=string_2
|
||||
|
||||
scalar=string_2
|
||||
label=keyword,bold
|
||||
preprocessor=aqua
|
||||
preprocessor=baseString
|
||||
regex=number_1
|
||||
operator=base0
|
||||
decorator=string_1,bold
|
||||
other=aqua
|
||||
other=baseString
|
||||
|
||||
|
||||
# Markup-type languages
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
tag=vsblue
|
||||
tag=baseKeyword
|
||||
tag_unknown=tag,bold
|
||||
tag_end=tag,bold
|
||||
attribute=aqua
|
||||
attribute=baseString
|
||||
attribute_unknown=attribute,bold
|
||||
value=string_1
|
||||
entity=default
|
||||
@ -127,6 +126,6 @@ entity=default
|
||||
# Diff
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
line_added=green
|
||||
line_removed=red
|
||||
line_changed=blue
|
||||
line_added=baseGreen
|
||||
line_removed=baseRed
|
||||
line_changed=baseKeyword3
|
||||
|
@ -24,7 +24,7 @@ lexer.cpp.track.preprocessor=1
|
||||
lexer.cpp.update.preprocessor=1
|
||||
|
||||
[settings=CSS]
|
||||
extension=less
|
||||
extension=styl
|
||||
lexer_filetype=python
|
||||
tag_parser=CSS
|
||||
|
||||
|
@ -43,7 +43,7 @@ Dockerfile=Dockerfile;dockerfile;*.dockerfile;*.Dockerfile;
|
||||
#Haxe=*.hx;
|
||||
#HTML=*.htm;*.html;*.shtml;*.hta;*.htd;*.htt;*.cfm;*.tpl;
|
||||
#Java=*.java;*.jsp;
|
||||
JavaScript=*.js;*.mjs;
|
||||
JavaScript=*.js;*.mjs;*.jsx;
|
||||
#JSON=*.json;
|
||||
#Julia=*.jl;
|
||||
#Kotlin=*.kt;*.kts;
|
||||
@ -76,7 +76,7 @@ Stylus=*.styl;
|
||||
#Swift=*.swift;
|
||||
#Tcl=*.tcl;*.tk;*.wish;*.exp;
|
||||
#Txt2tags=*.t2t;
|
||||
TypeScript=*.ts;*.tsx;*.d.ts;
|
||||
TypeScript=*.ts;*.tsx;
|
||||
SCSS=*.scss
|
||||
SVG=*.svg
|
||||
#Vala=*.vala;*.vapi;
|
||||
|
@ -10,7 +10,7 @@ beep_on_errors=true
|
||||
auto_focus=false
|
||||
sidebar_symbol_visible=true
|
||||
sidebar_openfiles_visible=true
|
||||
editor_font=Ubuntu Mono Bold 9
|
||||
editor_font=Ubuntu Sans Mono Medium 8
|
||||
tagbar_font=Ubuntu Mono 8
|
||||
msgwin_font=Ubuntu Mono Bold 8
|
||||
show_notebook_tabs=false
|
||||
@ -134,12 +134,12 @@ msgwin_messages_visible=true
|
||||
msgwin_scribble_visible=true
|
||||
warn_on_project_close=true
|
||||
documents_show_paths=true
|
||||
sidebar_page=4
|
||||
sidebar_page=3
|
||||
pref_main_project_session=true
|
||||
use_native_windows_dialogs=false
|
||||
treeview_position=245
|
||||
msgwindow_position=699
|
||||
geometry=0;26;1920;1054;1;
|
||||
treeview_position=226
|
||||
msgwindow_position=710
|
||||
geometry=321;29;1275;1020;0;
|
||||
use_native_dialogs=true
|
||||
|
||||
[tools]
|
||||
@ -174,7 +174,7 @@ colour_fore=#DEDDDA
|
||||
colour_back=#2B2B2B
|
||||
send_cmd_prefix=
|
||||
send_selection_unsafe=false
|
||||
last_dir=/home/jaandrle/Vzdálené/GitHub/Facilitator-App-Native
|
||||
last_dir=/home/jaandrle
|
||||
|
||||
[build-menu]
|
||||
number_ft_menu_items=0
|
||||
@ -204,30 +204,30 @@ find_close_dialog=true
|
||||
replace_regexp=false
|
||||
replace_regexp_multiline=false
|
||||
replace_case_sensitive=false
|
||||
replace_escape_sequences=false
|
||||
replace_escape_sequences=true
|
||||
replace_match_whole_word=false
|
||||
replace_match_word_start=false
|
||||
replace_search_backwards=false
|
||||
replace_close_dialog=true
|
||||
find_all_expanded=false
|
||||
replace_all_expanded=false
|
||||
position_find_x=1257
|
||||
position_find_y=459
|
||||
position_replace_x=-1
|
||||
position_replace_y=-1
|
||||
replace_all_expanded=true
|
||||
position_find_x=1014
|
||||
position_find_y=519
|
||||
position_replace_x=504
|
||||
position_replace_y=397
|
||||
position_fif_x=-1
|
||||
position_fif_y=-1
|
||||
|
||||
[plugins]
|
||||
load_plugins=true
|
||||
custom_plugin_path=
|
||||
active_plugins=/usr/lib/x86_64-linux-gnu/geany/addons.so;/usr/lib/x86_64-linux-gnu/geany/autoclose.so;/usr/lib/x86_64-linux-gnu/geany/automark.so;/usr/lib/x86_64-linux-gnu/geany/commander.so;/usr/lib/x86_64-linux-gnu/geany/export.so;/usr/lib/x86_64-linux-gnu/geany/geanyextrasel.so;/usr/lib/x86_64-linux-gnu/geany/geanyctags.so;/usr/lib/x86_64-linux-gnu/geany/htmlchars.so;/usr/lib/x86_64-linux-gnu/geany/keyrecord.so;/usr/lib/x86_64-linux-gnu/geany/geanymacro.so;/usr/lib/x86_64-linux-gnu/geany/filebrowser.so;/usr/lib/x86_64-linux-gnu/geany/projectorganizer.so;/usr/lib/x86_64-linux-gnu/geany/saveactions.so;/usr/lib/x86_64-linux-gnu/geany/vimode.so;
|
||||
active_plugins=/usr/lib/x86_64-linux-gnu/geany/addons.so;/usr/lib/x86_64-linux-gnu/geany/autoclose.so;/usr/lib/x86_64-linux-gnu/geany/automark.so;/usr/lib/x86_64-linux-gnu/geany/commander.so;/usr/lib/x86_64-linux-gnu/geany/export.so;/usr/lib/x86_64-linux-gnu/geany/geanyextrasel.so;/usr/lib/x86_64-linux-gnu/geany/htmlchars.so;/usr/lib/x86_64-linux-gnu/geany/geanymacro.so;/usr/lib/x86_64-linux-gnu/geany/filebrowser.so;/usr/lib/x86_64-linux-gnu/geany/projectorganizer.so;/usr/lib/x86_64-linux-gnu/geany/spellcheck.so;/usr/lib/x86_64-linux-gnu/geany/saveactions.so;/usr/lib/x86_64-linux-gnu/geany/vimode.so;
|
||||
|
||||
[project]
|
||||
session_file=
|
||||
project_file_path=/home/jaandrle/Dokumenty/Projekty/geany
|
||||
|
||||
[files]
|
||||
recent_files=/home/jaandrle/Vzdálené/GitHub/Facilitator-App-Native/app/(app)/dashboard.tsx;/home/jaandrle/Vzdálené/GitHub/Facilitator-App-Native/components/SessionList/index.ts;/home/jaandrle/bin/asana.mjs;/home/jaandrle/Stažené/goto_matching_brace-function.txt;/home/jaandrle/.config/geany/filedefs/filetypes.SCSS.conf;/home/jaandrle/.config/geany/filedefs/filetypes.Less.conf;/home/jaandrle/.config/geany/filedefs/filetypes.Vue.conf;/home/jaandrle/Vzdálené/GitHub/deka-dom-el/index.js;/home/jaandrle/Vzdálené/GitHub/Facilitator-App-Native/app.config.ts;/home/jaandrle/Vzdálené/GitHub/deka-dom-el/src/dom.js;
|
||||
recent_files=/home/jaandrle/.local/share/krunner-sources/krunner-alias-main/install.sh;/home/jaandrle/.local/share/krunner-sources/kolors/install.sh;/tmp/evolution-jaandrle-RZCWV2/Re: Fwd: 🎃Výstava dýní po mexicku🎃;/home/jaandrle/.vim/bundle/vim-html-template-literals/autoload/htl_syntax.vim;/home/jaandrle/.vim/bundle/vim-html-template-literals/test/example-code-tests/example-code-tests.vader;/home/jaandrle/Stažené/placeholder-sticker.svg;/media/jaandrle/neon/home/jaandrle/Vzdálené/GitHub/dcp-be-proxy-functions(1)/__azurite_db_blob__.json;/home/jaandrle/Vzdálené/GitHub/facilitator-network-cell/src/types/vite-env.d.ts;/media/jaandrle/neon/home/jaandrle/Stažené/.test_snap/wse_yl/test_conf/test.key;/home/jaandrle/Android/Sdk/emulator/NOTICE.txt;
|
||||
recent_projects=/home/jaandrle/Dokumenty/Projekty/geany/Facilitator-App-Native.geany;/home/jaandrle/Dokumenty/Projekty/geany/deka-dom-el.geany;/home/jaandrle/Dokumenty/Projekty/geany/Facilitator-App-Native;/home/jaandrle/Dokumenty/Projekty/geany/deka-dom-el;/home/jaandrle/Dokumenty/Projekty/geany/deka-dom-el/deka-dom-el;/home/jaandrle/Dokumenty/Projekty/geany/.babelrc;
|
||||
current_page=-1
|
||||
|
@ -14,9 +14,9 @@ menu_reloadall=
|
||||
file_openlasttab=
|
||||
menu_quit=<Primary>q
|
||||
menu_undo=<Primary>z
|
||||
menu_redo=<Primary>y
|
||||
edit_duplicateline=<Primary>d
|
||||
edit_deleteline=<Primary>k
|
||||
menu_redo=<Primary><Shift>z
|
||||
edit_duplicateline=
|
||||
edit_deleteline=
|
||||
edit_deletelinetoend=<Primary><Shift>Delete
|
||||
edit_deletelinetobegin=<Primary><Shift>BackSpace
|
||||
edit_transposeline=
|
||||
@ -24,7 +24,7 @@ edit_scrolltoline=<Primary><Shift>l
|
||||
edit_scrolllineup=<Alt>Up
|
||||
edit_scrolllinedown=<Alt>Down
|
||||
edit_completesnippet=Tab
|
||||
move_snippetnextcursor=
|
||||
move_snippetnextcursor=<Shift>ISO_Left_Tab
|
||||
edit_suppresssnippetcompletion=
|
||||
popup_contextaction=
|
||||
edit_autocomplete=<Primary>space
|
||||
@ -64,7 +64,7 @@ edit_sendtocmd9=
|
||||
edit_sendtovte=
|
||||
format_reflowparagraph=<Primary>j
|
||||
edit_joinlines=
|
||||
menu_insert_date=<Shift><Alt>d
|
||||
menu_insert_date=
|
||||
edit_insertwhitespace=
|
||||
edit_insertlinebefore=
|
||||
edit_insertlineafter=
|
||||
@ -140,7 +140,7 @@ switch_compiler=
|
||||
switch_messages=
|
||||
switch_scribble=F6
|
||||
switch_vte=F4
|
||||
switch_sidebar=
|
||||
switch_sidebar=<Shift>F2
|
||||
switch_sidebar_symbol_list=
|
||||
switch_sidebar_doc_list=
|
||||
switch_tableft=<Primary>Page_Up
|
||||
@ -171,8 +171,8 @@ switch_head_impl=<Shift><Alt>s
|
||||
goto_file=<Shift><Alt>g
|
||||
|
||||
[commander]
|
||||
show_panel=<Primary>semicolon
|
||||
show_panel_commands=
|
||||
show_panel=
|
||||
show_panel_commands=<Primary>semicolon
|
||||
show_panel_files=
|
||||
|
||||
[file_browser]
|
||||
@ -225,3 +225,7 @@ convert_selection=
|
||||
set_anchor=
|
||||
select_to_anchor=
|
||||
rect_select_to_anchor=
|
||||
|
||||
[spellcheck]
|
||||
spell_check=
|
||||
spell_toggle_typing=
|
||||
|
@ -1,82 +1,116 @@
|
||||
# better? defaults
|
||||
[help]
|
||||
autocorrect = prompt
|
||||
[init]
|
||||
defaultBranch = main
|
||||
[user]
|
||||
name = Jan Andrle
|
||||
email = andrle.jan@centrum.cz
|
||||
signingkey = B3A25AED155AFFAB
|
||||
[credential]
|
||||
# see https://stackoverflow.com/questions/5343068/is-there-a-way-to-cache-https-credentials-for-pushing-commits/18362082#18362082
|
||||
helper = /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret
|
||||
[alias]
|
||||
# * replaced by git-extras
|
||||
aliases = !git config -l | grep ^alias | cut -c 7- | sort # List all aliases. Stolen from here: https://twitter.com/TrevorBramble/status/774292970681937920
|
||||
checkout-default= !git checkout `git branch-default`
|
||||
checkout-default--= !git checkout-default && git branch --delete @{-1} --verbose
|
||||
branch-default = !git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@'
|
||||
branches = for-each-ref --sort=-committerdate refs --format=\"%(authordate:iso8601)\t%(color:blue)%(refname:short)%(HEAD)\t%(if:notequals="")%(upstream:short)%(then)→ %(upstream:short)%(color:reset)%(else)%(color:yellow)%(objectname:short)%(color:reset)\t%(contents:subject)%(end)\"
|
||||
tags = tag -l --sort=-creatordate --format='%(refname:short): [%(creatordate:short)] %(subject)'
|
||||
# * authors: log-authors = shortlog -ns
|
||||
log-list = log --color --graph --pretty=format:'%Cred%h%Creset %Cgreen[%ad] -%C(yellow)%d%Creset %s %C(bold blue)<%an>%Creset'
|
||||
log-list-nocolors = log --graph --pretty=format:'%h [%ad] -%d %s <%an>'
|
||||
status--= !git fetch && git status && echo && echo Commits unpushed: && git log @{push}..HEAD && echo
|
||||
commit--= !clear && git status -sb | grep -v -e '^ M' & git commit --interactive -v
|
||||
stashpush = !git stash && git pull && git push && git stash pop
|
||||
unstage = reset HEAD --
|
||||
undoall = reset --soft HEAD^
|
||||
diff-dirs = diff --dirstat --find-copies --find-renames --histogram --color
|
||||
status-submodule = !git submodule --quiet foreach 'git fetch' && git submodule foreach 'git status && echo'
|
||||
# * delete-submodule: rm-submodule = !git submodule deinit -f $1 && rm -rf .git/modules/$1 && git rm -rf $1
|
||||
update-submodule = submodule update --remote --merge
|
||||
pull-submodule = submodule foreach 'git pull'
|
||||
diff-submodule = submodule foreach 'git diff'
|
||||
set-upstream = !git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD`
|
||||
push-new=!git push -u origin `git rev-parse --abbrev-ref HEAD`
|
||||
[column]
|
||||
ui = auto
|
||||
[branch]
|
||||
sort = -committerdate
|
||||
[tag]
|
||||
sort = version:refname
|
||||
[status]
|
||||
branch = true
|
||||
short = true
|
||||
showStash = true
|
||||
showUntrackedFiles = all
|
||||
submoduleSummary = true
|
||||
[log]
|
||||
date = iso
|
||||
[fetch]
|
||||
prune = true
|
||||
pruneTags = true
|
||||
[push]
|
||||
autoSetupRemote = true
|
||||
followTags = true
|
||||
recurseSubmodules = on-demand
|
||||
[pull]
|
||||
rebase = true
|
||||
[rerere]
|
||||
enabled = true
|
||||
autoupdate = true
|
||||
[gc]
|
||||
reflogExpire = 200
|
||||
reflogExpireUnreachable = 90
|
||||
[commit]
|
||||
verbose = true
|
||||
gpgsign = true
|
||||
template = ~/.config/git/template
|
||||
[rebase]
|
||||
autoSquash = true
|
||||
autoStash = true
|
||||
updateRefs = true
|
||||
# my setup
|
||||
[core]
|
||||
editor = vim
|
||||
pager = delta
|
||||
whitespace = -trailing-space,-space-before-tab
|
||||
[filter "lfs"]
|
||||
clean = git-lfs clean -- %f
|
||||
smudge = git-lfs smudge -- %f
|
||||
process = git-lfs filter-process
|
||||
required = true
|
||||
[status]
|
||||
submoduleSummary = true
|
||||
compression = 9 # trade cpu for network
|
||||
[alias]
|
||||
# * replaced by git-extras
|
||||
# * (alias) aliases = !git config -l | grep ^alias | cut -c 7- | sort # List all aliases. Stolen from here: https://twitter.com/TrevorBramble/status/774292970681937920
|
||||
branch-default = !git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@'
|
||||
# * branches (↓) = for-each-ref --sort=-committerdate refs --format=\"%(authordate:iso8601)\t%(color:blue)%(refname:short)%(HEAD)\t%(if:notequals="")%(upstream:short)%(then)→ %(upstream:short)%(color:reset)%(else)%(color:yellow)%(objectname:short)%(color:reset)\t%(contents:subject)%(end)\"
|
||||
h-branches = !echo 'brv (git-extras)'
|
||||
tags = tag -l --sort=-creatordate --format='%(refname:short): [%(creatordate:short)] %(subject)'
|
||||
# * authors: log-authors = shortlog -ns
|
||||
h-format-htma = !echo '%Cred%h%Creset %Cgreen[%ad] -%C(yellow)%d%Creset %s %C(bold blue)<%an>%Creset'
|
||||
commit--interactive= !clear && git status && git commit --interactive
|
||||
h-unstage = !echo reset HEAD --
|
||||
h-undoall = !echo reset --soft HEAD^
|
||||
diff-dirs = diff --dirstat --find-copies --find-renames --histogram --color
|
||||
h-submodule-delete = !echo 'delete-submodule (git-extras)' # * delete-submodule: rm-submodule = !git submodule deinit -f $1 && rm -rf .git/modules/$1 && git rm -rf $1
|
||||
submodule-update-merge = submodule update --remote --merge
|
||||
set-upstream-to-current = !git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD`
|
||||
[diff]
|
||||
wsErrorHighlight = all
|
||||
tool = vimdiff
|
||||
colorMoved = default
|
||||
submodule = log
|
||||
[merge]
|
||||
tool = vimdiff
|
||||
conflictstyle = diff3
|
||||
[log]
|
||||
date = iso
|
||||
algorithm = histogram
|
||||
# https://git-scm.com/docs/git-diff#Documentation/git-diff.txt-code--color-movedltmodegtcode
|
||||
colorMoved = dimmed-zebra
|
||||
mnemonicPrefix = true
|
||||
renames = true
|
||||
[interactive]
|
||||
diffFilter = delta --color-only
|
||||
[merge]
|
||||
tool = vimdiff
|
||||
conflictstyle = zdiff3
|
||||
[delta] # [dandavison/delta: A syntax-highlighting pager for git, diff, and grep output](https://github.com/dandavison/delta)
|
||||
syntax-theme= Visual Studio Dark+
|
||||
navigate = true
|
||||
side-by-side = true
|
||||
line-numbers = true
|
||||
[gc]
|
||||
reflogExpire = 200
|
||||
reflogExpireUnreachable = 90
|
||||
[push]
|
||||
autoSetupRemote = true
|
||||
[commit]
|
||||
gpgsign = true
|
||||
[rerere]
|
||||
enabled = true
|
||||
[credential "https://github.com"]
|
||||
helper =
|
||||
helper = !/usr/bin/gh auth git-credential
|
||||
[credential "https://gist.github.com"]
|
||||
helper =
|
||||
helper = !/usr/bin/gh auth git-credential
|
||||
[credential "https://git.dhl.com"]
|
||||
helper =
|
||||
helper = !/usr/bin/gh auth git-credential
|
||||
[filter "lfs"]
|
||||
required = true
|
||||
clean = git-lfs clean -- %f
|
||||
smudge = git-lfs smudge -- %f
|
||||
process = git-lfs filter-process
|
||||
[diff "exif"]
|
||||
textconv = exiftool
|
||||
[difftool "kommitdiff"]
|
||||
cmd = kommitdiff \"$LOCAL\" \"$REMOTE\"
|
||||
[mergetool "kommitmerge"]
|
||||
cmd = kommitmerge \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"
|
||||
trustExitCode = true
|
||||
|
||||
[maintenance]
|
||||
repo = /home/jaandrle/Vzdálené/GitHub/dcp-fe-container-certifedpassport
|
||||
repo = /home/jaandrle/Vzdálené/GitHub/DHLC-Internet-Networking-old
|
||||
repo = /home/jaandrle/Vzdálené/GitHub/DGF-Certified-Supervisory-Academy
|
||||
[submodule]
|
||||
recurse = true
|
||||
|
||||
[format]
|
||||
coverLetter = auto
|
||||
compactSummary = true
|
||||
minimal = true
|
||||
signOff = true
|
||||
outputDirectory = .patches
|
||||
thread = shallow
|
||||
numbered = auto
|
||||
[am]
|
||||
# keepcr = true # to preserve line endings
|
||||
threeWay = true
|
||||
[include]
|
||||
path = ./identities/current.conf
|
||||
|
21
.config/git/identities/default.conf
Normal file
21
.config/git/identities/default.conf
Normal file
@ -0,0 +1,21 @@
|
||||
[user]
|
||||
name = Jan Andrle
|
||||
email = andrle.jan@centrum.cz
|
||||
signingkey = B3A25AED155AFFAB
|
||||
[credential]
|
||||
# see https://stackoverflow.com/questions/5343068/is-there-a-way-to-cache-https-credentials-for-pushing-commits/18362082#18362082
|
||||
helper = /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret
|
||||
[credential "https://github.com"]
|
||||
helper = !/usr/bin/gh auth git-credential
|
||||
[credential "https://gist.github.com"]
|
||||
helper = !/usr/bin/gh auth git-credential
|
||||
[credential "https://git.dhl.com"]
|
||||
helper = !/usr/bin/gh auth git-credential
|
||||
[sendemail]
|
||||
anotate = true
|
||||
smtpserver = smtp.centrum.cz
|
||||
# chainReplyTo = false
|
||||
suppresscc = self
|
||||
smtpuser = andrle.jan@centrum.cz
|
||||
smtpencryption = ssl
|
||||
smtpserverport = 465
|
@ -4,13 +4,13 @@
|
||||
{
|
||||
"repository": "shiftkey/desktop",
|
||||
"name": "GitHub Desktop",
|
||||
"group": "dev",
|
||||
"group": "skip-dev",
|
||||
"file_name": "github-desktop",
|
||||
"exec": "yes",
|
||||
"description": "Fork of GitHub Desktop to support various Linux distributions",
|
||||
"last_update": "2024-07-01T20:15:47Z",
|
||||
"last_update": "2024-08-17T01:47:21Z",
|
||||
"downloads": "/home/jaandrle/bin/github-desktop",
|
||||
"version": "release-3.4.2-linux1",
|
||||
"version": "release-3.4.4-linuxbeta2",
|
||||
"glare": ".*x86_64.*.AppImage"
|
||||
},
|
||||
{
|
||||
@ -21,8 +21,8 @@
|
||||
"exec": "yes",
|
||||
"description": "AI Browser",
|
||||
"glare": "AppImage",
|
||||
"last_update": "2024-07-17T20:36:36Z",
|
||||
"version": "2.0.4",
|
||||
"last_update": "2025-04-01T05:57:12Z",
|
||||
"version": "3.8.0",
|
||||
"downloads": "/home/jaandrle/bin/pinokio"
|
||||
},
|
||||
{
|
||||
@ -41,19 +41,19 @@
|
||||
"repository": "th-ch/youtube-music",
|
||||
"name": "youtube-music",
|
||||
"description": "YouTube Music Desktop App bundled with custom plugins (and built-in ad blocker / downloader)",
|
||||
"group": "nondev",
|
||||
"group": "skip-nondev",
|
||||
"file_name": "youtube-music",
|
||||
"exec": "yes",
|
||||
"last_update": "2024-07-14T15:26:52Z",
|
||||
"last_update": "2024-10-16T11:58:54Z",
|
||||
"downloads": "/home/jaandrle/bin/youtube-music",
|
||||
"version": "v3.4.1",
|
||||
"version": "v3.6.2",
|
||||
"glare": "AppImage"
|
||||
},
|
||||
{
|
||||
"repository": "ArchGPT/insomnium",
|
||||
"name": "insomnium",
|
||||
"description": "Insomnium is a fast local API testing tool that is privacy-focused and 100% local. For testing GraphQL, REST, WebSockets and gRPC. This is a fork of Kong/insomnia",
|
||||
"group": "dev",
|
||||
"group": "skip-dev",
|
||||
"file_name": "insomnium",
|
||||
"exec": "yes",
|
||||
"last_update": "2023-11-13T10:03:28Z",
|
||||
@ -62,59 +62,43 @@
|
||||
"version": "core@0.2.3-a",
|
||||
"glare": "AppImage"
|
||||
},
|
||||
{
|
||||
"repository": "Kong/insomnia",
|
||||
"name": "insomnia",
|
||||
"description": "The open-source, cross-platform API client for GraphQL, REST, and gRPC.",
|
||||
"group": "skip",
|
||||
"file_name": "insomnia",
|
||||
"exec": "yes",
|
||||
"last_update": "2024-04-17T16:38:03Z",
|
||||
"downloads": "/home/jaandrle/bin/insomnia",
|
||||
"tag_name_regex": "core@.*",
|
||||
"version": "core@9.0.0-beta.4",
|
||||
"glare": "AppImage"
|
||||
},
|
||||
{
|
||||
"repository": "rvpanoz/luna",
|
||||
"name": "luna",
|
||||
"description": "Manage npm dependencies through a modern UI.",
|
||||
"group": "skip",
|
||||
"group": "skip-dev",
|
||||
"file_name": "luna",
|
||||
"exec": "yes",
|
||||
"glare": "AppImage"
|
||||
"glare": "AppImage",
|
||||
"last_update": "2020-10-29T23:06:39Z",
|
||||
"version": "v.3.4.6",
|
||||
"downloads": "/home/jaandrle/bin/luna"
|
||||
},
|
||||
{
|
||||
"repository": "angela-d/wifi-channel-watcher",
|
||||
"name": "wifi-channel-watcher",
|
||||
"group": "skip",
|
||||
"group": "skip-nondev",
|
||||
"file_name": "wifi-channel-watcher",
|
||||
"exec": "no",
|
||||
"description": "Monitor channel usage of neighboring routers & get an alert if your active channel is not optimal.\tTroubleshoot wifi without lifting a finger!"
|
||||
},
|
||||
{
|
||||
"repository": "vinceliuice/Tela-circle-icon-theme",
|
||||
"name": "Tela-circle-icon-theme",
|
||||
"description": "Tela-circle-icon-theme",
|
||||
"group": "skip",
|
||||
"file_name": "tela-circle-icon-theme.zip",
|
||||
"last_update": "2021-07-19T14:12:05Z",
|
||||
"exec": "no"
|
||||
},
|
||||
{
|
||||
"repository": "AppImage/AppImageKit",
|
||||
"name": "AppImageKit",
|
||||
"group": "skip",
|
||||
"group": "skip-nondev",
|
||||
"file_name": "appimagekit",
|
||||
"exec": "yes",
|
||||
"description": "Package desktop applications as AppImages that run on common Linux-based operating systems, such as RHEL, CentOS, openSUSE, SLED, Ubuntu, Fedora, debian and derivatives. Join #AppImage on irc.freenode.net",
|
||||
"glare": ".*x86_64.*.AppImage"
|
||||
"glare": ".*x86_64.*.AppImage",
|
||||
"last_update": "2023-03-08T23:25:46Z",
|
||||
"version": "continuous",
|
||||
"downloads": "/home/jaandrle/bin/appimagekit"
|
||||
},
|
||||
{
|
||||
"repository": "dynobo/normcap",
|
||||
"name": "NormCap",
|
||||
"description": "Switched to flatpak version | OCR powered screen-capture tool to capture information instead of images",
|
||||
"group": "skip",
|
||||
"group": "skip-nondev",
|
||||
"file_name": "normcap",
|
||||
"exec": "yes",
|
||||
"last_update": "2023-12-12T22:23:37Z",
|
||||
@ -128,35 +112,11 @@
|
||||
"group": "nondev",
|
||||
"file_name": "upscayl",
|
||||
"exec": "yes",
|
||||
"last_update": "2024-06-01T14:48:20Z",
|
||||
"last_update": "2024-12-25T13:44:34Z",
|
||||
"downloads": "/home/jaandrle/bin/upscayl",
|
||||
"version": "v2.11.5",
|
||||
"version": "v2.15.0",
|
||||
"glare": "AppImage"
|
||||
},
|
||||
{
|
||||
"repository": "RasmusLindroth/tut",
|
||||
"name": "tut",
|
||||
"description": "TUI for Mastodon with vim inspired keys",
|
||||
"group": "nondev",
|
||||
"file_name": "tut",
|
||||
"exec": "yes",
|
||||
"last_update": "2023-01-26T17:48:00Z",
|
||||
"downloads": "/home/jaandrle/bin/tut",
|
||||
"version": "2.0.1",
|
||||
"glare": "tut-amd64"
|
||||
},
|
||||
{
|
||||
"repository": "sunner/ChatALL",
|
||||
"name": "ChatALL",
|
||||
"description": " Concurrently chat with ChatGPT, Bing Chat, bard, Alpaca, Vincuna, Claude, ChatGLM, MOSS, iFlytek Spark, ERNIE and more, discover the best answers",
|
||||
"group": "skip",
|
||||
"file_name": "chatall",
|
||||
"exec": "yes",
|
||||
"last_update": "2024-04-14T02:09:42Z",
|
||||
"downloads": "/home/jaandrle/bin/chatall",
|
||||
"version": "v1.71.100",
|
||||
"glare": ".*x86_64.*.AppImage"
|
||||
},
|
||||
{
|
||||
"repository": "jaandrle/bs",
|
||||
"name": "bs",
|
||||
@ -164,9 +124,9 @@
|
||||
"group": "dev",
|
||||
"file_name": "bs",
|
||||
"exec": "yes",
|
||||
"last_update": "2024-03-28T13:16:41Z",
|
||||
"last_update": "2024-10-22T12:04:29Z",
|
||||
"downloads": "/home/jaandrle/bin/bs",
|
||||
"version": "v0.7.4",
|
||||
"version": "v0.8.0",
|
||||
"glare": "bs-linux"
|
||||
},
|
||||
{
|
||||
@ -174,11 +134,11 @@
|
||||
"name": "Fedistar",
|
||||
"description": "Multi-column Mastodon, Pleroma, and Friendica client for desktop",
|
||||
"group": "nondev",
|
||||
"file_name": "fedistar",
|
||||
"file_name": "fedistar.appimage",
|
||||
"exec": "yes",
|
||||
"last_update": "2024-07-21T09:19:41Z",
|
||||
"downloads": "/home/jaandrle/bin/fedistar",
|
||||
"version": "v1.9.9",
|
||||
"last_update": "2025-04-08T11:56:38Z",
|
||||
"downloads": "/home/jaandrle/bin/fedistar.appimage",
|
||||
"version": "v1.11.3",
|
||||
"glare": ".*amd64.*.AppImage"
|
||||
},
|
||||
{
|
||||
@ -188,9 +148,9 @@
|
||||
"group": "ai",
|
||||
"file_name": "ollama",
|
||||
"exec": "yes",
|
||||
"last_update": "2024-07-21T18:21:56Z",
|
||||
"last_update": "2025-04-26T09:16:02Z",
|
||||
"downloads": "/home/jaandrle/bin/ollama",
|
||||
"version": "v0.2.8-rc1",
|
||||
"version": "v0.6.7-rc1",
|
||||
"glare": "linux-amd64"
|
||||
},
|
||||
{
|
||||
@ -198,23 +158,35 @@
|
||||
"name": "neovim",
|
||||
"tag_name_regex": "v.*",
|
||||
"description": "Vim-fork focused on extensibility and usability",
|
||||
"group": "skip",
|
||||
"group": "skip-dev",
|
||||
"file_name": "nvim",
|
||||
"exec": "yes",
|
||||
"downloads": "/home/jaandrle/bin/nvim",
|
||||
"version": "v0.9.5",
|
||||
"last_update": "2023-12-30T13:31:47Z"
|
||||
},
|
||||
{
|
||||
"repository": "vim/vim-appimage",
|
||||
"name": "vim",
|
||||
"description": "AppImage for gVim",
|
||||
"group": "dev",
|
||||
"file_name": "vim",
|
||||
"exec": "yes",
|
||||
"downloads": "/home/jaandrle/bin/vim",
|
||||
"version": "v9.1.1355",
|
||||
"last_update": "2025-04-30T01:25:38Z",
|
||||
"glare": "GVim.*x86_64.*.AppImage"
|
||||
},
|
||||
{
|
||||
"repository": "viarotel-org/escrcpy",
|
||||
"name": "Escrcpy",
|
||||
"description": "📱 Graphical Scrcpy to display and control Android, devices powered by Electron. | 使用图形化的 Scrcpy 显示和控制您的 Android 设备,由 Electron 驱动。",
|
||||
"group": "dev",
|
||||
"file_name": "escrcpy",
|
||||
"file_name": "escrcpy.appimage",
|
||||
"exec": "yes",
|
||||
"last_update": "2024-07-14T08:47:24Z",
|
||||
"downloads": "/home/jaandrle/bin/escrcpy",
|
||||
"version": "v1.21.4",
|
||||
"last_update": "2025-04-27T07:04:58Z",
|
||||
"downloads": "/home/jaandrle/bin/escrcpy.appimage",
|
||||
"version": "v1.29.6",
|
||||
"glare": ".*x86_64.*.AppImage"
|
||||
},
|
||||
{
|
||||
@ -224,9 +196,9 @@
|
||||
"group": "dev-test",
|
||||
"file_name": "drovp",
|
||||
"exec": "yes",
|
||||
"last_update": "2023-12-06T11:30:02Z",
|
||||
"last_update": "2024-10-06T16:26:38Z",
|
||||
"downloads": "/home/jaandrle/bin/drovp",
|
||||
"version": "0.8.0",
|
||||
"version": "0.8.2",
|
||||
"glare": "x64.AppImage"
|
||||
},
|
||||
{
|
||||
@ -236,9 +208,9 @@
|
||||
"group": "ai",
|
||||
"file_name": "jan",
|
||||
"exec": "yes",
|
||||
"last_update": "2024-07-15T08:37:42Z",
|
||||
"last_update": "2025-03-24T02:02:04Z",
|
||||
"downloads": "/home/jaandrle/bin/jan",
|
||||
"version": "v0.5.2",
|
||||
"version": "v0.5.16",
|
||||
"glare": ".*x86_64.*.AppImage"
|
||||
},
|
||||
{
|
||||
@ -248,10 +220,34 @@
|
||||
"group": "ai",
|
||||
"file_name": "Chatbox",
|
||||
"exec": "yes",
|
||||
"last_update": "2024-05-15T06:10:47Z",
|
||||
"last_update": "2025-01-14T13:29:06Z",
|
||||
"downloads": "/home/jaandrle/bin/Chatbox",
|
||||
"version": "v1.3.10",
|
||||
"version": "v0.10.4",
|
||||
"glare": ".*x86_64.*.AppImage"
|
||||
},
|
||||
{
|
||||
"repository": "Martichou/rquickshare",
|
||||
"group": "nondev",
|
||||
"name": "r-quick-share",
|
||||
"description": "Rust implementation of NearbyShare/QuickShare from Android for Linux and macOS.",
|
||||
"file_name": "r-quick-share",
|
||||
"exec": "yes",
|
||||
"downloads": "/home/jaandrle/bin/r-quick-share",
|
||||
"glare": ".*main.*amd64.AppImage",
|
||||
"last_update": "2025-02-23T18:15:49Z",
|
||||
"version": "v0.11.5"
|
||||
},
|
||||
{
|
||||
"repository": "konnektoren/konnektoren-mobile-app",
|
||||
"group": "nondev",
|
||||
"name": "Konnektoren",
|
||||
"description": "Konnektoren Mobile App (learning german) — https://konnektoren.help/home/",
|
||||
"file_name": "konnektoren",
|
||||
"exec": "yes",
|
||||
"downloads": "/home/jaandrle/bin/konnektoren",
|
||||
"glare": "AppImage",
|
||||
"last_update": "2025-04-27T07:33:51Z",
|
||||
"version": "konnektoren-mobile-app-v0.1.4"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@ -1,39 +0,0 @@
|
||||
name = "Jan Andrle"
|
||||
downloads-dir = "~/Stažené"
|
||||
|
||||
[centrum]
|
||||
default = true
|
||||
email = "andrle.jan@centrum.cz"
|
||||
|
||||
imap-host = "imap.centrum.cz"
|
||||
imap-port = 993
|
||||
imap-login = "andrle.jan@centrum.cz"
|
||||
imap-passwd-cmd = "bw get password mail-centrum"
|
||||
|
||||
smtp-host = "smtp.centrum.cz"
|
||||
smtp-port = 465
|
||||
smtp-login = "andrle.jan@centrum.cz"
|
||||
smtp-passwd-cmd = "bw get password mail-centrum"
|
||||
|
||||
[centrum.mailboxes]
|
||||
sent = "Odeslan&AOE- po&AWE-ta"
|
||||
draft = "Koncepty"
|
||||
|
||||
[indigo]
|
||||
email = "jan.andrle@indigo.cz"
|
||||
|
||||
imap-host = "imap.gmail.com"
|
||||
imap-port = 993
|
||||
imap-login = "jan.andrle@indigo.cz"
|
||||
imap-passwd-cmd = "bw get password mail-gmail-indigo"
|
||||
|
||||
smtp-host = "smtp.gmail.com"
|
||||
smtp-port = 465
|
||||
smtp-login = "jan.andrle@indigo.cz"
|
||||
smtp-passwd-cmd = "bw get password mail-gmail-indigo"
|
||||
|
||||
[indigo.mailboxes]
|
||||
sent = "Odeslan&AOE- po&AWE-ta"
|
||||
draft = "Koncepty"
|
||||
|
||||
# vim: ft=apachestyle cms=#\ %s :
|
@ -1,8 +0,0 @@
|
||||
[
|
||||
{ "type": "text", "value": "Složka 'Příchozí'" },
|
||||
{ "type": "himalaya", "value": [ "-m", "inbox", "list" ], "label": "inbox" },
|
||||
{ "type": "text", "value": "Složka 'Hromadná'" },
|
||||
{ "type": "himalaya", "value": [ "-m", "Hromadn&AOE-", "list" ], "label": "Hromadná" },
|
||||
{ "type": "text", "value": "Složka 'Práce'" },
|
||||
{ "type": "himalaya", "value": [ "-m", "_Prace", "list" ], "label": "_Prace" }
|
||||
]
|
@ -1,8 +1,8 @@
|
||||
[General]
|
||||
ColorScheme=BreezeDark
|
||||
ColorScheme=TUXEDODark
|
||||
|
||||
[Icons]
|
||||
Theme=breeze-dark
|
||||
Theme=tuxedo-breeze-dark
|
||||
|
||||
[KDE]
|
||||
widgetStyle=Breeze
|
||||
|
@ -1,2 +0,0 @@
|
||||
[Greeter]
|
||||
Theme=org.kde.breezedark.desktop
|
@ -1,3 +1,3 @@
|
||||
[KSplash]
|
||||
Engine=KSplashQML
|
||||
Theme=org.kde.breezedark.desktop
|
||||
Theme=org.tuxedodark.desktop
|
||||
|
@ -1,6 +1,10 @@
|
||||
[TabBox]
|
||||
LayoutName=org.kde.breeze.desktop
|
||||
|
||||
[Windows]
|
||||
Placement=Centered
|
||||
|
||||
[org.kde.kdecoration2]
|
||||
NoPlugin=false
|
||||
library=org.kde.breeze
|
||||
theme=Breeze
|
||||
|
@ -1 +1 @@
|
||||
org.kde.breezedark.desktop
|
||||
org.tuxedodark.desktop
|
@ -1,2 +1,2 @@
|
||||
[Theme]
|
||||
name=default
|
||||
name=tuxedo-dark
|
||||
|
@ -48,6 +48,17 @@
|
||||
"--help",
|
||||
"--version"
|
||||
]
|
||||
},
|
||||
"/home/jaandrle/Vzdálené/GitHub/DGF-Certified-Supervisory-Academy/build/bs/publishModule.mjs": {
|
||||
"npx": true,
|
||||
"completions": {},
|
||||
"completions_all": [
|
||||
"--lang",
|
||||
"--division",
|
||||
"--APP_CODE",
|
||||
"--help",
|
||||
"--version"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
@ -1,13 +1,3 @@
|
||||
/* deprecated/fallback */
|
||||
globalThis.cyclicLoop= function*(items){
|
||||
if(!items) items= 'win32'===process.platform ? '|/-\\' : "⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏";
|
||||
const { length }= items;
|
||||
for(let i=0; true; i++){
|
||||
if(i===length) i= 0;
|
||||
yield items[i];
|
||||
}
|
||||
}
|
||||
|
||||
Reflect.defineProperty($, "clipboard", {
|
||||
get(){
|
||||
if($.env.XDG_SESSION_TYPE === "x11")
|
||||
@ -25,8 +15,4 @@ export function onrepl(){
|
||||
Reflect.defineProperty(s, "jq", { get(){ return file=> s.cat(file).xargs(JSON.parse); } });
|
||||
}
|
||||
/** Place for custom code when eval starts (`--eval`/`--print`) */
|
||||
export function oneval(){ /* --print/--echo aliases */
|
||||
Reflect.defineProperty($, "nosed", { get(){ return this.stdin.text(""); }, });
|
||||
Reflect.defineProperty($, "nojq", { get(){ return this.stdin.json(null); }, });
|
||||
Reflect.defineProperty($, "noawk", { get(){ return this.stdin.lines([]); }, });
|
||||
}
|
||||
// export function oneval(){}
|
||||
|
@ -1,133 +0,0 @@
|
||||
/*
|
||||
* breeze-dark.rasi
|
||||
* rofi theme inspired by plasma breeze
|
||||
* MonsieurBedard
|
||||
*/
|
||||
|
||||
* {
|
||||
/* Base */
|
||||
default-background: rgba(49, 52, 56, 97.5%); // <- change this for transparency
|
||||
default-foreground: rgba(239, 240, 241, 100%);
|
||||
default-border: rgba(97, 101, 105, 100%);
|
||||
alternative-background: rgba(35, 38, 41, 100%);
|
||||
invisible: rgba(0, 0, 0, 0%);
|
||||
|
||||
/* Colors */
|
||||
hard-blue: rgba(240, 84, 76, 100%);
|
||||
light-blue: rgba(240, 84, 76, 25%);
|
||||
|
||||
hard-red: rgba(141, 58, 80, 100%);
|
||||
light-red: rgba(77, 31, 37, 100%);
|
||||
|
||||
hard-green: rgba(39, 161, 69, 100%);
|
||||
light-green: rgba(19, 55, 35, 100%);
|
||||
|
||||
/* Universal */
|
||||
background-color: @invisible;
|
||||
border-color: @default-border;
|
||||
font: "Noto Sans 10";
|
||||
text-color: @default-foreground;
|
||||
}
|
||||
|
||||
#window {
|
||||
background-color: @default-background;
|
||||
border: 1;
|
||||
border-radius: 3;
|
||||
border-color: @default-border;
|
||||
padding: 7;
|
||||
}
|
||||
|
||||
#mainbox {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#message {
|
||||
border: 1;
|
||||
border-radius: 3;
|
||||
padding: 5;
|
||||
background-color: @alternative-background;
|
||||
}
|
||||
|
||||
#textbox {
|
||||
background-color: @entry-background;
|
||||
}
|
||||
|
||||
#listview {
|
||||
fixed-height: 0;
|
||||
spacing: 2;
|
||||
scrollbar: false;
|
||||
padding: 2 0 0;
|
||||
}
|
||||
|
||||
#element {
|
||||
padding: 5;
|
||||
border: 1;
|
||||
border-radius: 3;
|
||||
border-color: @invisible;
|
||||
}
|
||||
|
||||
#element.normal.normal {
|
||||
background-color: @invisible;
|
||||
}
|
||||
|
||||
#element.normal.urgent {
|
||||
background-color: @light-red;
|
||||
}
|
||||
|
||||
#element.normal.active {
|
||||
background-color: @light-green;
|
||||
}
|
||||
|
||||
#element.selected.normal {
|
||||
background-color: @light-blue;
|
||||
border-color: @hard-blue;
|
||||
}
|
||||
|
||||
#element.selected.urgent {
|
||||
background-color: @light-red;
|
||||
border-color: @hard-red;
|
||||
}
|
||||
|
||||
#element.selected.active {
|
||||
background-color: @light-green;
|
||||
border-color: @hard-green;
|
||||
}
|
||||
|
||||
#mode-switcher {
|
||||
spacing: 0;
|
||||
}
|
||||
|
||||
#button {
|
||||
border: 0 0 3 0;
|
||||
border-color: @invisible;
|
||||
padding: 3;
|
||||
}
|
||||
|
||||
#button.selected {
|
||||
border-color: @hard-blue;
|
||||
}
|
||||
|
||||
#inputbar {
|
||||
spacing: 0;
|
||||
padding: 1;
|
||||
}
|
||||
|
||||
#case-indicator {
|
||||
spacing: 0;
|
||||
padding: 3px;
|
||||
background-color: @alternative-background;
|
||||
border: 1 1 1 0;
|
||||
border-radius: 0 2 2 0;
|
||||
}
|
||||
|
||||
#entry {
|
||||
background-color: @alternative-background;
|
||||
padding: 3px;
|
||||
border: 1 0 1 1;
|
||||
border-radius: 2 0 0 2;
|
||||
}
|
||||
|
||||
#prompt {
|
||||
padding: 3 7 3 0;
|
||||
}
|
@ -1 +0,0 @@
|
||||
@theme "~/.config/rofi/breeze-dark.rasi"
|
@ -21,4 +21,11 @@
|
||||
"command": "git",
|
||||
"args": { "argv": [ "browse" ] }
|
||||
},
|
||||
{
|
||||
"caption": "Branch -D --all (delete remote and local branch)",
|
||||
"command": "delete_branch",
|
||||
"args": {
|
||||
"argv": [ true, true, true ]
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -1,3 +1,4 @@
|
||||
{
|
||||
"draw_white_space": "all"
|
||||
"draw_white_space": "all",
|
||||
"word_wrap": true,
|
||||
}
|
||||
|
@ -8,4 +8,6 @@
|
||||
"side_bar_layout": "tabs",
|
||||
"signature_error_highlighting": "no_public_key",
|
||||
"theme": "Merge Dark.sublime-theme",
|
||||
"expand_merge_commits_by_default": true,
|
||||
"ignore_diff_white_space": false,
|
||||
}
|
||||
|
@ -59,7 +59,7 @@ bind ůůl fillcmdline_notrail js document.querySelector("video").currentTime+=
|
||||
bind ůk js (v=> { if(!v) return; v.playbackRate+= 0.25 })(document.querySelector("video"))
|
||||
bind ůj js (v=> { if(!v) return; v.playbackRate-= 0.25 })(document.querySelector("video"))
|
||||
bind ů= js (v=> { if(!v) return; v.playbackRate= 1 })(document.querySelector("video"))
|
||||
bind ůG js (v=> { if(!v) return; v.play(); v.currentTime= v.duration-10; setTimeout(()=> tri.controller.acceptExCmd("pauseVideos"), 5000); })(document.querySelector("video"))
|
||||
bind ůG js (v=> { if(!v) return; v.play(); v.currentTime= ( location.hostname!=="www.disneyplus.com" ? v.duration : (document.querySelector(".time-remaining-label").textContent.split(":").reduce((acc, curr, i)=> (!i ? 60 : 1)*curr+acc, 0)+v.currentTime) )-10; setTimeout(()=> tri.controller.acceptExCmd("pauseVideos"), 5000); })(document.querySelector("video"))
|
||||
|
||||
unbind --mode=normal d
|
||||
bind dd tabclose
|
||||
@ -103,7 +103,7 @@ alias hint_focus hint -;
|
||||
quickmark c moz-extension://616498c0-3916-4f0b-b0a9-ce01ecf2298d/popup.html
|
||||
|
||||
command mastodonUncoverAll composite hint_focus .scrollable ; js (onclick=document.createEvent("Events"), onclick.initEvent("click", true, false), Array.from(document.activeElement.getElementsByClassName("status__content__spoiler-link")).forEach(el=> el.dispatchEvent(onclick)))
|
||||
command mastodonRedirectHome js const parts = location.pathname.split('/'); if(parts.length===2) location.href= `https://fosstodon.org/${parts[1]}@${location.host}`; else location.href= `https://fosstodon.org/authorize_interaction?uri=${location.href}`;
|
||||
command mastodonRedirectHome js const canonicalHref = document.querySelector('link[rel=canonical]')?.href; const parts = (canonicalHref ? new URL(canonicalHref) : location).pathname.split('/'); if(parts.length===2) location.href= `https://fosstodon.org/${parts[1]}@${location.host}`; else location.href= `https://fosstodon.org/authorize_interaction?uri=${location.href}`;
|
||||
bind sm fillcmdline_notrail mastodon
|
||||
|
||||
command data_delall composite hint_focus * ; js document.activeElement.querySelectorAll("input").forEach(el=> el.checked=false)
|
||||
|
@ -1,7 +0,0 @@
|
||||
[[Accounts]]
|
||||
Name = 'jaandrle'
|
||||
Server = 'https://fosstodon.org'
|
||||
ClientID = 'ggYBuM2y_jtFV_3wR4tGdJUoNh-4ZfVRl1SByK5bihU'
|
||||
ClientSecret = 'j7ClbSP2UY8syZgV4E-7Kk1bf8Ph_6GQ7szcqVfqDtI'
|
||||
AccessToken = '1iO5wZL-nXcC3dZGjxNHLcbbFoSZ3fmutno96oD_ZY8'
|
||||
|
@ -1,830 +0,0 @@
|
||||
# Configuration file for tut
|
||||
|
||||
[general]
|
||||
# Shows a confirmation view before actions such as favorite, delete toot, boost
|
||||
# etc.
|
||||
# default=true
|
||||
confirmation=true
|
||||
|
||||
# Enable support for using the mouse in tut to select items.
|
||||
# default=false
|
||||
mouse-support=false
|
||||
|
||||
# Timelines adds windows of feeds. You can customize the number of feeds, what
|
||||
# they should show and the key to activate them.
|
||||
#
|
||||
# Available timelines: home, direct, local, federated, special, bookmarks,
|
||||
# saved, favorited, notifications, lists, mentions, tag
|
||||
#
|
||||
# The one named special are the home timeline with only boosts and/or replies.
|
||||
#
|
||||
# Tag is special as you need to add the tag after, see the example below.
|
||||
#
|
||||
# The syntax is:
|
||||
# timelines=feed,[name],[keys...],[showBoosts],[showReplies]
|
||||
#
|
||||
# Tha values in brackets are optional. You can see the syntax for keys under the
|
||||
# [input] section.
|
||||
#
|
||||
# showBoosts and showReplies must be formated as bools. So either true or false.
|
||||
# They always defaults to true.
|
||||
#
|
||||
# Some examples:
|
||||
#
|
||||
# home timeline with the name Home
|
||||
# timelines=home,Home
|
||||
#
|
||||
# local timeline with the name Local and it gets focus when you press 2. It will
|
||||
# also hide boosts in the timeline, but show toots that are replies.
|
||||
# timelines=local,Local,'2',false,true
|
||||
#
|
||||
# notification timeline with the name [N]otifications and it gets focus when you
|
||||
# press n or N
|
||||
# timelines=notifications,[N]otifications,'n','N'
|
||||
#
|
||||
# tag timeline for #linux with the name Linux and it gets focus when you press
|
||||
# timelines=tag linux,Linux,"F2"
|
||||
#
|
||||
#
|
||||
# If you don't set any timelines it will default to this:
|
||||
# timelines=home
|
||||
# timelines=notifications,[N]otifications,'n','N'
|
||||
#
|
||||
timelines=lists,Lists,'1'
|
||||
timelines=home,Home,'2'
|
||||
timelines=notifications,Notifications,'3'
|
||||
timelines=tag webdev,Webdev,'4'
|
||||
|
||||
|
||||
# The date format to be used. See https://godoc.org/time#Time.Format
|
||||
# default=2006-01-02 15:04
|
||||
date-format=2006-01-02 15:04
|
||||
|
||||
# Format for dates the same day. See date-format for more info.
|
||||
# default=15:04
|
||||
date-today-format=15:04
|
||||
|
||||
# This displays relative dates instead for statuses that are one day or older
|
||||
# the output is 1y2m1d (1 year 2 months and 1 day)
|
||||
#
|
||||
# The value is an integear
|
||||
# -1 = don't use relative dates
|
||||
# 0 = always use relative dates, except for dates < 1 day
|
||||
# 1 - ∞ = number of days to use relative dates
|
||||
#
|
||||
# Example: date-relative=28 will display a relative date for toots that are
|
||||
# between 1-28 days old. Otherwhise it will use the short or long format.
|
||||
# default=-1
|
||||
date-relative=-1
|
||||
|
||||
# The max width of text before it wraps when displaying toots.
|
||||
# 0 = no restriction.
|
||||
# default=0
|
||||
max-width=0
|
||||
|
||||
# Where do you want the list of toots to be placed?
|
||||
# Valid values: left, right, top, bottom.
|
||||
# default=left
|
||||
list-placement=right
|
||||
|
||||
# If you have notification-feed set to true you can display it under the main
|
||||
# list of toots (row) or place it to the right of the main list of toots
|
||||
# (column).
|
||||
# default=row
|
||||
list-split=column
|
||||
|
||||
# You can change the proportions of the list view in relation to the content
|
||||
# view list-proportion=1 and content-proportoin=3 will result in the content
|
||||
# taking up 3 times more space.
|
||||
# Must be n > 0
|
||||
# default=1
|
||||
list-proportion=2
|
||||
|
||||
# See list-proportion
|
||||
# default=2
|
||||
content-proportion=1
|
||||
|
||||
# Hide notifications of this type. If you have multiple you separate them with a
|
||||
# comma. Valid types: mention, status, boost, follow, follow_request, favorite,
|
||||
# poll, edit.
|
||||
# default=
|
||||
notifications-to-hide=
|
||||
|
||||
# If you always want to quote original message when replying.
|
||||
# default=false
|
||||
quote-reply=false
|
||||
|
||||
# If you want to show icons in the list of toots.
|
||||
# default=true
|
||||
show-icons=true
|
||||
|
||||
# If you've learnt all the shortcut keys you can remove the help text and only
|
||||
# show the key in tui. So it gets less cluttered.
|
||||
# default=false
|
||||
short-hints=false
|
||||
|
||||
# If you want to display the filter that filtered a toot.
|
||||
# default=true
|
||||
show-filter-phrase=true
|
||||
|
||||
# If you want to show a message in the cmdbar on how to access the help text.
|
||||
# default=true
|
||||
show-help=true
|
||||
|
||||
# If you always want tut to jump to the newest post. May ruin your reading
|
||||
# experience.
|
||||
# default=false
|
||||
stick-to-top=false
|
||||
|
||||
# If you want to display the username of the person being boosted instead of the
|
||||
# person that boosted.
|
||||
# default=false
|
||||
show-boosted-user=false
|
||||
|
||||
# 0 = No terminal title
|
||||
# 1 = Show title in terminal and top bar
|
||||
# 2 = Only show terminal title, and no top bar in tut.
|
||||
# default=0
|
||||
terminal-title=0
|
||||
|
||||
# If you don't want the whole UI to update, and only the text content you can
|
||||
# set this option to true. This will lead to some artifacts being left on the
|
||||
# screen when emojis are present. But it will keep the UI from flashing on every
|
||||
# single toot in some terminals.
|
||||
# default=true
|
||||
redraw-ui=true
|
||||
|
||||
# The leader is used as a shortcut to run commands as you can do in Vim. By
|
||||
# default this is disabled and you enable it by setting a leader-key. It can
|
||||
# only consist of one char and I like to use comma as leader key. So to set it
|
||||
# you write leader-key=,
|
||||
# default=
|
||||
leader-key=
|
||||
|
||||
# Number of milliseconds before the leader command resets. So if you tap the
|
||||
# leader-key by mistake or are to slow it empties all the input after X
|
||||
# milliseconds.
|
||||
# default=1000
|
||||
leader-timeout=1000
|
||||
|
||||
# You set actions for the leader-key with one or more leader-action. It consists
|
||||
# of two parts first the action then the shortcut. And they're separated by a
|
||||
# comma.
|
||||
#
|
||||
# Available commands: blocking, bookmarks, boosts, clear-notifications,
|
||||
# close-window, compose, direct, edit, favorited, favorites, federated,
|
||||
# followers, following, history, home, list-placement, list-split, lists, local,
|
||||
# mentions, move-window-left, move-window-right, move-window-up,
|
||||
# move-window-down, move-window-home, move-window-end, muting, newer,
|
||||
# notifications, preferences, profile, proportions, refetch, saved, special-all,
|
||||
# special-boosts, special-replies, stick-to-top, switch, tag, tags, window
|
||||
#
|
||||
# The ones named special-* are the home timeline with only boosts and/or
|
||||
# replies. All contains both, -boosts only boosts and -replies only replies.
|
||||
#
|
||||
# The shortcuts are up to you, but keep them quite short and make sure they
|
||||
# don't collide. If you have one shortcut that is "f" and an other one that is
|
||||
# "fav", the one with "f" will always run and "fav" will never run.
|
||||
#
|
||||
# Some special leaders:
|
||||
# tag is special as you need to add the tag after, e.g. tag linux
|
||||
# window is special as it's a shortcut for switching between the timelines
|
||||
# you've set under general and they are zero indexed. window 0 = your first
|
||||
# timeline, window 1 = your second and so on.
|
||||
# list-placement as it takes the argument top, right, bottom or left
|
||||
# list-split as it takes the argument column or row
|
||||
# proportions takes the arguments [int] [int], where the first integer is the
|
||||
# list and the other content, e.g. proportions 1 3. See list-proportion above
|
||||
# for more information.
|
||||
# switch let's you go to a timeline if it already exists, if it doesn't it will
|
||||
# open the timeline in a new window. The syntax is almost the same as in
|
||||
# timelines= and is displayed under the examples.
|
||||
#
|
||||
# Some examples:
|
||||
# leader-action=local,lo
|
||||
# leader-action=lists,li
|
||||
# leader-action=federated,fed
|
||||
# leader-action=direct,d
|
||||
# leader-action=history,h
|
||||
# leader-action=tag linux,tl
|
||||
# leader-action=window 0,h
|
||||
# leader-action=list-placement bottom,b
|
||||
# leader-action=list-split column,c
|
||||
# leader-action=proportions 1 3,3
|
||||
#
|
||||
# Syntax for switch:
|
||||
# leader-action=switch feed,shortcut,[name],[showBoosts],[showReplies]
|
||||
# showBoosts can be either true or false and they are both optional. Here are
|
||||
# some examples:
|
||||
#
|
||||
# leader-action=switch home,h,false,true
|
||||
# leader-action=switch tag tut,tt
|
||||
#
|
||||
|
||||
|
||||
[media]
|
||||
# Your image viewer.
|
||||
# default=xdg-open
|
||||
image-viewer=xdg-open
|
||||
|
||||
# Open the image viewer in the same terminal as toot. Only for terminal based
|
||||
# viewers.
|
||||
# default=false
|
||||
image-terminal=false
|
||||
|
||||
# If images should open one by one e.g. "imv image.png" multiple times. If set
|
||||
# to false all images will open at the same time like this "imv image1.png
|
||||
# image2.png image3.png". Not all image viewers support this, so try it first.
|
||||
# default=true
|
||||
image-single=true
|
||||
|
||||
# If you want to open the images in reverse order. In some image viewers this
|
||||
# will display the images in the "right" order.
|
||||
# default=false
|
||||
image-reverse=false
|
||||
|
||||
# Your video viewer.
|
||||
# default=xdg-open
|
||||
video-viewer=xdg-open
|
||||
|
||||
# Open the video viewer in the same terminal as toot. Only for terminal based
|
||||
# viewers.
|
||||
# default=false
|
||||
video-terminal=false
|
||||
|
||||
# If videos should open one by one. See image-single.
|
||||
# default=true
|
||||
video-single=true
|
||||
|
||||
# If you want your videos in reverse order. In some video apps this will play
|
||||
# the files in the "right" order.
|
||||
# default=false
|
||||
video-reverse=false
|
||||
|
||||
# Your audio viewer.
|
||||
# default=xdg-open
|
||||
audio-viewer=xdg-open
|
||||
|
||||
# Open the audio viewer in the same terminal as toot. Only for terminal based
|
||||
# viewers.
|
||||
# default=false
|
||||
audio-terminal=false
|
||||
|
||||
# If audio should open one by one. See image-single.
|
||||
# default=true
|
||||
audio-single=true
|
||||
|
||||
# If you want to play the audio files in reverse order. In some audio apps this
|
||||
# will play the files in the "right" order.
|
||||
# default=false
|
||||
audio-reverse=false
|
||||
|
||||
# Your web browser.
|
||||
# default=xdg-open
|
||||
link-viewer=xdg-open
|
||||
|
||||
# Open the browser in the same terminal as toot. Only for terminal based
|
||||
# browsers.
|
||||
# default=false
|
||||
link-terminal=false
|
||||
|
||||
[open-custom]
|
||||
# This sections allows you to set up to five custom programs to open URLs with.
|
||||
# If the url points to an image, you can set c1-name to img and c1-use to imv.
|
||||
# If the program runs in a terminal and you want to run it in the same terminal
|
||||
# as tut. Set cX-terminal to true. The name will show up in the UI, so keep it
|
||||
# short so all five fits.
|
||||
#
|
||||
# c1-name=name
|
||||
# c1-use=program
|
||||
# c1-terminal=false
|
||||
#
|
||||
# c2-name=name
|
||||
# c2-use=program
|
||||
# c2-terminal=false
|
||||
#
|
||||
# c3-name=name
|
||||
# c3-use=program
|
||||
# c3-terminal=false
|
||||
#
|
||||
# c4-name=name
|
||||
# c4-use=program
|
||||
# c4-terminal=false
|
||||
#
|
||||
# c5-name=name
|
||||
# c5-use=program
|
||||
# c5-terminal=false
|
||||
|
||||
[open-pattern]
|
||||
# Here you can set your own glob patterns for opening matching URLs in the
|
||||
# program you want them to open up in. You could for example open Youtube videos
|
||||
# in your video player instead of your default browser.
|
||||
#
|
||||
# You must name the keys foo-pattern, foo-use and foo-terminal, where use is the
|
||||
# program that will open up the URL. To see the syntax for glob pattern you can
|
||||
# follow this URL https://github.com/gobwas/glob#syntax. foo-terminal is if the
|
||||
# program runs in the terminal and should open in the same terminal as tut
|
||||
# itself.
|
||||
#
|
||||
# Example for youtube.com and youtu.be to open up in mpv instead of the browser.
|
||||
#
|
||||
# y1-pattern=*youtube.com/watch*
|
||||
# y1-use=mpv
|
||||
# y1-terminal=false
|
||||
#
|
||||
# y2-pattern=*youtu.be/*
|
||||
# y2-use=mpv
|
||||
# y2-terminal=false
|
||||
|
||||
[desktop-notification]
|
||||
# Notification when someone follows you.
|
||||
# default=false
|
||||
followers=false
|
||||
|
||||
# Notification when someone favorites one of your toots.
|
||||
# default=false
|
||||
favorite=false
|
||||
|
||||
# Notification when someone mentions you.
|
||||
# default=false
|
||||
mention=false
|
||||
|
||||
# Notification when someone edits their toot.
|
||||
# default=false
|
||||
update=false
|
||||
|
||||
# Notification when someone boosts one of your toots.
|
||||
# default=false
|
||||
boost=false
|
||||
|
||||
# Notification of poll results.
|
||||
# default=false
|
||||
poll=true
|
||||
|
||||
# Notification when there is new posts in current timeline.
|
||||
# default=false
|
||||
posts=false
|
||||
|
||||
[style]
|
||||
# All styles can be represented in their HEX value like #ffffff or with their
|
||||
# name, so in this case white. The only special value is "default" which equals
|
||||
# to transparent, so it will be the same color as your terminal.
|
||||
#
|
||||
# You can also use xrdb colors like this xrdb:color1 The program will use colors
|
||||
# prefixed with an * first then look for URxvt or XTerm if it can't find any
|
||||
# color prefixed with an asterisk. If you don't want tut to guess the prefix you
|
||||
# can set the prefix yourself. If the xrdb color can't be found a preset color
|
||||
# will be used. You'll have to set theme=none for this to work.
|
||||
|
||||
# The xrdb prefix used for colors in .Xresources.
|
||||
# default=guess
|
||||
xrdb-prefix=guess
|
||||
|
||||
# You can use some themes that comes bundled with tut. Check out the themes
|
||||
# available on the URL below. If a theme is named "nord.ini" you just write
|
||||
# theme=nord
|
||||
#
|
||||
# https://github.com/RasmusLindroth/tut/tree/master/config/themes
|
||||
#
|
||||
# You can also create a theme file in your config directory e.g.
|
||||
# ~/.config/tut/themes/foo.ini and then set theme=foo.
|
||||
#
|
||||
# If you want to use your own theme but don't want to create a new file, set
|
||||
# theme=none and then you can create your own theme below.
|
||||
# default=default
|
||||
theme=default
|
||||
|
||||
# The background color used on most elements.
|
||||
# default=
|
||||
background=
|
||||
|
||||
# The text color used on most of the text.
|
||||
# default=
|
||||
text=
|
||||
|
||||
# The color to display subtle elements or subtle text. Like lines and help text.
|
||||
# default=
|
||||
subtle=
|
||||
|
||||
# The color for errors or warnings
|
||||
# default=
|
||||
warning-text=
|
||||
|
||||
# This color is used to display username.
|
||||
# default=
|
||||
text-special-one=
|
||||
|
||||
# This color is used to display username and key hints.
|
||||
# default=
|
||||
text-special-two=
|
||||
|
||||
# The color of the bar at the top
|
||||
# default=
|
||||
top-bar-background=
|
||||
|
||||
# The color of the text in the bar at the top.
|
||||
# default=
|
||||
top-bar-text=
|
||||
|
||||
# The color of the bar at the bottom
|
||||
# default=
|
||||
status-bar-background=
|
||||
|
||||
# The color of the text in the bar at the bottom.
|
||||
# default=
|
||||
status-bar-text=
|
||||
|
||||
# The color of the bar at the bottom in view mode.
|
||||
# default=
|
||||
status-bar-view-background=
|
||||
|
||||
# The color of the text in the bar at the bottom in view mode.
|
||||
# default=
|
||||
status-bar-view-text=
|
||||
|
||||
# The color of the text in the command bar at the bottom.
|
||||
# default=
|
||||
command-text=
|
||||
|
||||
# Background of selected list items.
|
||||
# default=
|
||||
list-selected-background=
|
||||
|
||||
# The text color of selected list items.
|
||||
# default=
|
||||
list-selected-text=
|
||||
|
||||
# The background color of selected list items that are out of focus.
|
||||
# default=
|
||||
list-selected-inactive-background=
|
||||
|
||||
# The text color of selected list items that are out of focus.
|
||||
# default=
|
||||
list-selected-inactive-text=
|
||||
|
||||
# The main color of the text for key hints
|
||||
# default=
|
||||
controls-text=
|
||||
|
||||
# The highlight color of for key hints
|
||||
# default=
|
||||
controls-highlight=
|
||||
|
||||
# The background color in dropdowns and autocompletions
|
||||
# default=
|
||||
autocomplete-background=
|
||||
|
||||
# The text color in dropdowns at autocompletions
|
||||
# default=
|
||||
autocomplete-text=
|
||||
|
||||
# The background color for selected value in dropdowns and autocompletions
|
||||
# default=
|
||||
autocomplete-selected-background=
|
||||
|
||||
# The text color for selected value in dropdowns and autocompletions
|
||||
# default=
|
||||
autocomplete-selected-text=
|
||||
|
||||
# The background color on selected button and the text color of unselected
|
||||
# buttons
|
||||
# default=
|
||||
button-color-one=
|
||||
|
||||
# The text color on selected button and the background color of unselected
|
||||
# buttons
|
||||
# default=
|
||||
button-color-two=
|
||||
|
||||
# The background on named timelines.
|
||||
# default=
|
||||
timeline-name-background=
|
||||
|
||||
# The text color on named timelines
|
||||
# default=
|
||||
timeline-name-text=
|
||||
|
||||
[input]
|
||||
# You can edit the keys for tut below.
|
||||
#
|
||||
# The syntax is a bit weird, but it works. And I'll try to explain it as well as
|
||||
# I can.
|
||||
#
|
||||
# Example:
|
||||
# status-favorite="[F]avorite","Un[F]avorite",'f','F'
|
||||
# status-delete="[D]elete",'d','D'
|
||||
#
|
||||
# status-favorite and status-delete differs because favorite can be in two
|
||||
# states, so you will have to add two key hints.
|
||||
# Most keys will only have on key hint. Look at the default value for reference.
|
||||
#
|
||||
# Key hints must be in some of the following formats. Remember the quotation
|
||||
# marks.
|
||||
# "" = empty
|
||||
# "[D]elete" = Delete with a highlighted D
|
||||
# "Un[F]ollow" = UnFollow with a highlighted F
|
||||
# "[Enter]" = Enter where everything is highlighted
|
||||
# "Yan[K]" = YanK with a highlighted K
|
||||
#
|
||||
# After the hint (or hints) you must set the keys. You can do this in two ways,
|
||||
# with single quotation marks or double ones.
|
||||
#
|
||||
# The single ones are for single chars like 'a', 'b', 'c' and double marks are
|
||||
# for special keys like "Enter". Remember that they are case sensitive.
|
||||
#
|
||||
# To find the names of special keys you have to go to the following site and
|
||||
# look for "var KeyNames = map[Key]string{"
|
||||
#
|
||||
# https://github.com/gdamore/tcell/blob/master/key.go
|
||||
|
||||
# Keys for moving down
|
||||
# default="",'j','J',"Down"
|
||||
global-down="",'j','J',"Down"
|
||||
|
||||
# Keys for moving up
|
||||
# default="",'k','K',"Up"
|
||||
global-up="",'k','K',"Up"
|
||||
|
||||
# To select items
|
||||
# default="","Enter"
|
||||
global-enter="","Enter"
|
||||
|
||||
# To go back
|
||||
# default="[Esc]","Esc"
|
||||
global-back="[Backspace]","Backspace2"
|
||||
|
||||
# To go back and exit Tut
|
||||
# default="[Q]uit",'q','Q'
|
||||
global-exit="[Q]uit",'q','Q'
|
||||
|
||||
# Move to the top
|
||||
# default="",'g',"Home"
|
||||
main-home="",'g',"Home"
|
||||
|
||||
# Move to the bottom
|
||||
# default="",'G',"End"
|
||||
main-end="",'G',"End"
|
||||
|
||||
# Go to previous feed
|
||||
# default="",'h','H',"Left"
|
||||
main-prev-feed="",'h','H',"Left"
|
||||
|
||||
# Go to next feed
|
||||
# default="",'l','L',"Right"
|
||||
main-next-feed="",'l','L',"Right"
|
||||
|
||||
# Focus on the previous feed window
|
||||
# default="","Backtab"
|
||||
main-prev-window="","Backtab"
|
||||
|
||||
# Focus on the next feed window
|
||||
# default="","Tab"
|
||||
main-next-window="","Tab"
|
||||
|
||||
# Focus on the notification list
|
||||
# default="[N]otifications",'n','N'
|
||||
main-notification-focus="[N]otifications",'n','N'
|
||||
|
||||
# Compose a new toot
|
||||
# default="",'c','C'
|
||||
main-compose="",'c','C'
|
||||
|
||||
# Open avatar
|
||||
# default="[A]vatar",'a','A'
|
||||
status-avatar="[A]vatar",'a','A'
|
||||
|
||||
# Boost a toot
|
||||
# default="[B]oost","Un[B]oost",'b','B'
|
||||
status-boost="[B]oost","Un[B]oost",'b','B'
|
||||
|
||||
# Edit a toot
|
||||
# default="[E]dit",'e','E'
|
||||
status-edit="[E]dit",'E'
|
||||
|
||||
# Delete a toot
|
||||
# default="[D]elete",'d','D'
|
||||
status-delete="[D]elete",'d','D'
|
||||
|
||||
# Favorite a toot
|
||||
# default="[F]avorite","Un[F]avorite",'f','F'
|
||||
status-favorite="[F]avorite","Un[F]avorite",'f','F'
|
||||
|
||||
# Open toots media files
|
||||
# default="[M]edia",'m','M'
|
||||
status-media="M[e]dia",'e'
|
||||
|
||||
# Open links
|
||||
# default="[O]pen",'o','O'
|
||||
status-links="[O]pen",'o','O'
|
||||
|
||||
# Open poll
|
||||
# default="[P]oll",'p','P'
|
||||
status-poll="Pol[l]",'l'
|
||||
|
||||
# Reply to toot
|
||||
# default="[R]eply",'r','R'
|
||||
status-reply="[R]eply",'r','R'
|
||||
|
||||
# Save/bookmark a toot
|
||||
# default="[S]ave","Un[S]ave",'s','S'
|
||||
status-bookmark="[S]ave","Un[S]ave",'s','S'
|
||||
|
||||
# View thread
|
||||
# default="[T]hread",'t','T'
|
||||
status-thread="[T]hread",'t','T'
|
||||
|
||||
# Open user profile
|
||||
# default="[U]ser",'u','U'
|
||||
status-user="[P]rofile",'p','P'
|
||||
|
||||
# Open the view mode
|
||||
# default="[V]iew",'v','V'
|
||||
status-view-focus="[V]iew",'v','V'
|
||||
|
||||
# Yank the url of the toot
|
||||
# default="[Y]ank",'y','Y'
|
||||
status-yank="[Y]ank",'y','Y'
|
||||
|
||||
# Show the content in a content warning
|
||||
# default="Press [Z] to toggle cw",'z','Z'
|
||||
status-toggle-cw="Press [x] to toggle cw",'x','X'
|
||||
|
||||
# Show the content of a filtered toot
|
||||
# default="Press [Z] to view filtered toot",'z','Z'
|
||||
status-show-filtered="Press [x] to view filtered toot",'x','X'
|
||||
|
||||
# View avatar
|
||||
# default="[A]vatar",'a','A'
|
||||
user-avatar="[A]vatar",'a','A'
|
||||
|
||||
# Block the user
|
||||
# default="[B]lock","Un[B]lock",'b','B'
|
||||
user-block="[B]lock","Un[B]lock",'b','B'
|
||||
|
||||
# Follow user
|
||||
# default="[F]ollow","Un[F]ollow",'f','F'
|
||||
user-follow="Follo[w]","UnFollo[w]",'w','W'
|
||||
|
||||
# Follow user
|
||||
# default="Follow [R]equest","Follow [R]equest",'r','R'
|
||||
user-follow-request-decide="Follow [R]equest","Follow [R]equest",'r','R'
|
||||
|
||||
# Mute user
|
||||
# default="[M]ute","Un[M]ute",'m','M'
|
||||
user-mute="[M]ute","Un[M]ute",'m','M'
|
||||
|
||||
# Open links
|
||||
# default="[O]pen",'o','O'
|
||||
user-links="[O]pen",'o','O'
|
||||
|
||||
# View user profile
|
||||
# default="[U]ser",'u','U'
|
||||
user-user="[P]rofile",'p','P'
|
||||
|
||||
# Open view mode
|
||||
# default="[V]iew",'v','V'
|
||||
user-view-focus="[V]iew",'v','V'
|
||||
|
||||
# Yank the user URL
|
||||
# default="[Y]ank",'y','Y'
|
||||
user-yank="[Y]ank",'y','Y'
|
||||
|
||||
# Open list
|
||||
# default="[O]pen",'o','O'
|
||||
list-open-feed="[O]pen",'o','O'
|
||||
|
||||
# List all users in a list
|
||||
# default="[U]sers",'u','U'
|
||||
list-user-list="[U]sers",'u','U'
|
||||
|
||||
# Add user to list
|
||||
# default="[A]dd",'a','A'
|
||||
list-user-add="[A]dd",'a','A'
|
||||
|
||||
# Delete user from list
|
||||
# default="[D]elete",'d','D'
|
||||
list-user-delete="[D]elete",'d','D'
|
||||
|
||||
# Open URL
|
||||
# default="[O]pen",'o','O'
|
||||
link-open="[O]pen",'o','O'
|
||||
|
||||
# Yank the URL
|
||||
# default="[Y]ank",'y','Y'
|
||||
link-yank="[Y]ank",'y','Y'
|
||||
|
||||
# Open tag feed
|
||||
# default="[O]pen",'o','O'
|
||||
tag-open-feed="[O]pen",'o','O'
|
||||
|
||||
# Toggle follow on tag
|
||||
# default="[F]ollow","Un[F]ollow",'f','F'
|
||||
tag-follow="[F]ollow","Un[F]ollow",'f','F'
|
||||
|
||||
# Edit content warning text on new toot
|
||||
# default="[C]W text",'c','C'
|
||||
compose-edit-cw="[C]W text",'c','C'
|
||||
|
||||
# Edit the text on new toot
|
||||
# default="[E]dit text",'e','E'
|
||||
compose-edit-text="[E]dit text",'e','E'
|
||||
|
||||
# Include a quote when replying
|
||||
# default="[I]nclude quote",'i','I'
|
||||
compose-include-quote="[I]nclude quote",'i','I'
|
||||
|
||||
# Focus on adding media to toot
|
||||
# default="[M]edia",'m','M'
|
||||
compose-media-focus="[M]edia",'m','M'
|
||||
|
||||
# Post the new toot
|
||||
# default="[P]ost",'p','P'
|
||||
compose-post="[P]ost",'p','P'
|
||||
|
||||
# Toggle content warning on toot
|
||||
# default="[T]oggle CW",'t','T'
|
||||
compose-toggle-content-warning="[T]oggle CW",'t','T'
|
||||
|
||||
# Edit the visibility on new toot
|
||||
# default="[V]isibility",'v','V'
|
||||
compose-visibility="[V]isibility",'v','V'
|
||||
|
||||
# Edit the language of a toot
|
||||
# default="[L]ang",'l','L'
|
||||
compose-language="[L]ang",'L'
|
||||
|
||||
# Switch to creating a poll
|
||||
# default="P[O]ll",'o','O'
|
||||
compose-poll="Pol[l]",'l'
|
||||
|
||||
# Delete media file
|
||||
# default="[D]elete",'d','D'
|
||||
media-delete="[D]elete",'d','D'
|
||||
|
||||
# Edit the description on media file
|
||||
# default="[E]dit desc",'e','E'
|
||||
media-edit-desc="[E]dit desc",'e','E'
|
||||
|
||||
# Add a new media file
|
||||
# default="[A]dd",'a','A'
|
||||
media-add="[A]dd",'a','A'
|
||||
|
||||
# Vote on poll
|
||||
# default="[V]ote",'v','V'
|
||||
vote-vote="[V]ote",'v','V'
|
||||
|
||||
# Select item to vote on
|
||||
# default="[Enter] to select",' ', "Enter"
|
||||
vote-select="[Enter] to select",' ', "Enter"
|
||||
|
||||
# Add a new poll option
|
||||
# default="[A]dd",'a','A'
|
||||
poll-add="[A]dd",'a','A'
|
||||
|
||||
# Edit a poll option
|
||||
# default="[E]dit",'e','E'
|
||||
poll-edit="[E]dit",'e','E'
|
||||
|
||||
# Delete a poll option
|
||||
# default="[D]elete",'d','D'
|
||||
poll-delete="[D]elete",'d','D'
|
||||
|
||||
# Toggle voting on multiple options
|
||||
# default="Toggle [M]ultiple",'m','M'
|
||||
poll-multi-toggle="Toggle [M]ultiple",'m','M'
|
||||
|
||||
# Change the expiration of poll
|
||||
# default="E[X]pires",'x','X'
|
||||
poll-expiration="E[X]pires",'x','X'
|
||||
|
||||
# Change display name
|
||||
# default="[N]ame",'n','N'
|
||||
preference-name="[N]ame",'n','N'
|
||||
|
||||
# Change default visibility of toots
|
||||
# default="[V]isibility",'v','V'
|
||||
preference-visibility="[V]isibility",'v','V'
|
||||
|
||||
# Change bio in profile
|
||||
# default="[B]io",'b','B'
|
||||
preference-bio="[B]io",'b','B'
|
||||
|
||||
# Save your preferences
|
||||
# default="[S]ave",'s','S'
|
||||
preference-save="[S]ave",'s','S'
|
||||
|
||||
# Edit profile fields
|
||||
# default="[F]ields",'f','F'
|
||||
preference-fields="[F]ields",'f','F'
|
||||
|
||||
# Add new field
|
||||
# default="[A]dd",'a','A'
|
||||
preference-fields-add="[A]dd",'a','A'
|
||||
|
||||
# Edit current field
|
||||
# default="[E]dit",'e','E'
|
||||
preference-fields-edit="[E]dit",'e','E'
|
||||
|
||||
# Delete current field
|
||||
# default="[D]elete",'d','D'
|
||||
preference-fields-delete="[D]elete",'d','D'
|
File diff suppressed because it is too large
Load Diff
@ -27,19 +27,18 @@
|
||||
"" #region G – General
|
||||
" set vicmd=elvis\ -G\ termcap | " set vicmd=vile
|
||||
set vicmd=vim
|
||||
"set vimhelp
|
||||
command! README :!vim ~/Dokumenty/GitHub/dotfiles/vifm/README.md
|
||||
command! Help :!vim ~/.config/vifm/vifm-help.txt
|
||||
map <f1> :Help<cr>
|
||||
cabbrev help Help
|
||||
" cabbrev help Help
|
||||
set vimhelp
|
||||
if !has('win')
|
||||
set fusehome=/tmp/vifm_FUSE
|
||||
set slowfs=curlftpfs
|
||||
endif
|
||||
set syscalls norunexec
|
||||
" Automatically resolve symbolic links on l or Enter.
|
||||
set nofollowlinks
|
||||
set trash
|
||||
set notrash
|
||||
nmap dd :!trash %"f<cr>
|
||||
nmap d? :exe "!clear && echo 'Native system trash (`trash-cli`): use `trash`|`trash-empty`|`trash-list`|`trash-put`|`trash-restore`|`trash-rm`' && trash-list | sort -r" | shell<cr>
|
||||
set history=100 undolevels=100
|
||||
@ -280,7 +279,7 @@
|
||||
else
|
||||
fileviewer
|
||||
\*.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm,
|
||||
\ env -u COLORTERM viu-image-viewer.viu %"c -w %pw -t &&
|
||||
\ env -u COLORTERM viu %"c -w %pw -t &&
|
||||
\ echo $(file -b %f)
|
||||
\ %pc
|
||||
fileviewer
|
||||
@ -291,15 +290,15 @@
|
||||
fileviewer <video/*>,<audio/*> mediainfo %c
|
||||
endif
|
||||
" #endregion FmediaBin
|
||||
fileviewer .*/,*/ tree %c -L 3 &
|
||||
fileviewer ../ tree %c -L 1 &
|
||||
fileviewer .*/,*/ tree %c -L 3 -C &
|
||||
fileviewer ../ tree %c -L 1 -C &
|
||||
fileviewer *.js,*.mjs,*.ts,*.sh,
|
||||
\*.css,*.scss,
|
||||
\*.php,
|
||||
\*.md,*.html,
|
||||
\*.json,*.xml
|
||||
\ env -uCOLORTERM bat --color always --theme 'Visual Studio Dark+' --wrap never --pager never --tabs 2 %c -p
|
||||
fileviewer <text/x-*>,<application/*> env -uCOLORTERM bat --color always --theme 'Visual Studio Dark+' --wrap never --pager never --tabs 2 %c -p
|
||||
\ env -uCOLORTERM batcat --color always --theme 'Visual Studio Dark+' --wrap never --pager never --tabs 2 %c -p
|
||||
fileviewer <text/x-*>,<application/*> env -uCOLORTERM batcat --color always --theme 'Visual Studio Dark+' --wrap never --pager never --tabs 2 %c -p
|
||||
" #endregion F
|
||||
" #region S – sS keys
|
||||
nnoremap sf :file &
|
||||
|
52
.ctags
52
.ctags
@ -1,5 +1,51 @@
|
||||
--exclude=node_modules
|
||||
--exclude=gulp
|
||||
--exclude="*/node_modules/*"
|
||||
--exclude=*.min.js
|
||||
--exclude=*.min.css
|
||||
--exclude=*.map
|
||||
--exclude=.backup
|
||||
--exclude=.sass-cache
|
||||
--exclude=vendors
|
||||
--exclude=.git
|
||||
|
||||
--langdef=css
|
||||
--langmap=css:.css
|
||||
--langmap=css:+.styl
|
||||
--langmap=css:+.less
|
||||
--regex-css=/^[ \t]*\.([A-Za-z0-9_-]+)/\1/c,class,classes/
|
||||
--regex-css=/^[ \t]*#([A-Za-z0-9_-]+)/\1/i,id,ids/
|
||||
--regex-css=/^[ \t]*(([A-Za-z0-9_-]+[ \t\n,]+)+)\{/\1/t,tag,tags/
|
||||
--regex-css=/^[ \t]*@media\s+([A-Za-z0-9_-]+)/\1/m,media,medias/
|
||||
|
||||
--langdef=scss
|
||||
--langmap=scss:.sass
|
||||
--langmap=scss:+.scss
|
||||
--regex-scss=/^[ \t]*@mixin ([A-Za-z0-9_-]+)/\1/m,mixin,mixins/
|
||||
--regex-scss=/^[ \t]*@function ([A-Za-z0-9_-]+)/\1/f,function,functions/
|
||||
--regex-scss=/^[ \t]*\$([A-Za-z0-9_-]+)/\1/v,variable,variables/
|
||||
--regex-scss=/^([A-Za-z0-9_-]*)*\.([A-Za-z0-9_-]+) *[,{]/\2/c,class,classes/
|
||||
--regex-scss=/^[ \t]+\.([A-Za-z0-9_-]+) *[,{]/\1/c,class,classes/
|
||||
--regex-scss=/^(.*)*\#([A-Za-z0-9_-]+) *[,{]/\2/i,id,ids/
|
||||
--regex-scss=/^[ \t]*#([A-Za-z0-9_-]+)/\1/i,id,ids/
|
||||
--regex-scss=/(^([A-Za-z0-9_-])*([A-Za-z0-9_-]+)) *[,|\{]/\1/t,tag,tags/
|
||||
--regex-scss=/(^([^\/\/])*)[ \t]+([A-Za-z0-9_-]+)) *[,|\{]/\3/t,tag,tags/
|
||||
--regex-scss=/(^(.*, *)([A-Za-z0-9_-]+)) *[,|\{]/\3/t,tag,tags/
|
||||
--regex-scss=/(^[ \t]+([A-Za-z0-9_-]+)) *[,|\{]/\1/t,tag,tags/
|
||||
--regex-scss=/^[ \t]*@media\s+([A-Za-z0-9_-]+)/\1/d,media,media/
|
||||
|
||||
--langdef=stylus
|
||||
--langmap=stylus:.styl
|
||||
--regex-stylus=/^[ \t]*\.([A-Za-z0-9_-]+)/\1/c,class,classes/
|
||||
--regex-stylus=/^[ \t]*#([A-Za-z0-9_-]+)/\1/i,id,ids/
|
||||
--regex-stylus=/^[ \t]*(([A-Za-z0-9_-]+[ \t\n,]+)+)\{/\1/t,tag,tags/
|
||||
--regex-stylus=/^[ \t]*@media\s+([A-Za-z0-9_-]+)/\1/m,media,medias/
|
||||
|
||||
--langdef=markdown
|
||||
--langmap=markdown:.md
|
||||
--regex-markdown=/^# (<.*>)?(.+)/\2/i,h1/
|
||||
--regex-markdown=/^## (<.*>)?(.+)/\2/i,h2/
|
||||
--regex-markdown=/^### (<.*>)?(.+)/\2/i,h3/
|
||||
|
||||
--langdef=js
|
||||
--langmap=javascript:.js.es6.es.jsx.mjs
|
||||
--javascript-kinds=-c-f-m-p-v
|
||||
|
||||
@ -157,4 +203,4 @@
|
||||
--regex-typescript=/^[ \t]*(export[ \t]+)?interface[ \t]+([a-zA-Z0-9_$]+)/\2/i,interfaces/
|
||||
--regex-typescript=/^[ \t]*(export[ \t]+)?type[ \t]+([a-zA-Z0-9_$]+)/\2/t,types/
|
||||
--regex-typescript=/^[ \t]*(export[ \t]+)?enum[ \t]+([a-zA-Z0-9_$]+)/\2/e,enums/
|
||||
--regex-typescript=/^[ \t]*import[ \t]+([a-zA-Z0-9_$]+)/\1/I,imports/
|
||||
--regex-typescript=/^[ \t]*import[ \t]+([a-zA-Z0-9_$]+)/\1/I,imports/
|
||||
|
@ -3,8 +3,8 @@ AntiAliasFonts=true
|
||||
BoldIntense=true
|
||||
ColorScheme=DarkPastels
|
||||
DimmValue=54
|
||||
Font=Ubuntu Mono,9,-1,5,700,0,0,0,0,0,0,0,0,0,0,1,Bold
|
||||
UseFontLineChararacters=false
|
||||
Font=Ubuntu Mono,9,-1,5,500,0,0,0,0,0,0,0,0,0,0,1,Medium
|
||||
UseFontLineChararacters=true
|
||||
|
||||
[General]
|
||||
DimWhenInactive=false
|
||||
@ -14,3 +14,6 @@ Parent=FALLBACK/
|
||||
[Scrolling]
|
||||
HistoryMode=2
|
||||
ScrollBarPosition=2
|
||||
|
||||
[Terminal Features]
|
||||
BellMode=1
|
||||
|
@ -1,5 +0,0 @@
|
||||
# Newsboat
|
||||
[newsboat/newsboat: An RSS/Atom feed reader for text terminals](https://github.com/newsboat/newsboat)
|
||||
|
||||
## Related files
|
||||
- [./\*](./)
|
@ -1,60 +0,0 @@
|
||||
# for inspiration https://github.com/gpakosz/.newsboat/blob/master/config
|
||||
auto-reload yes
|
||||
reload-time 90
|
||||
reload-threads 11
|
||||
always-display-description true
|
||||
error-log "~/.newsboat/error.log"
|
||||
keep-articles-days 30
|
||||
prepopulate-query-feeds yes
|
||||
# confirm-mark-all-feeds-read no
|
||||
|
||||
player vlc
|
||||
browser "xdg-open"
|
||||
macro p set browser "vlc %u" ; open-in-browser ; set browser "xdg-open"
|
||||
macro e set browser "vim ~/.newsboat/config" ; open-in-browser ; set browser "xdg-open"
|
||||
|
||||
color background color8 default bold
|
||||
color info default color234
|
||||
color listnormal default default
|
||||
color listfocus color188 color234
|
||||
color listnormal_unread color187 default
|
||||
color listfocus_unread color179 default
|
||||
search-highlight-colors color179 default
|
||||
highlight article "^(Feed|Author|Title|Date|Link): .*$" color117 default
|
||||
highlight articlelist "/date .\{4\}-.\{2\}-.\{2\} .\{2\}:.\{2\}" color43 default
|
||||
highlight articlelist "/size \[^ \]*" color64 default
|
||||
highlight articlelist "/feed .*$" color151 default
|
||||
highlight-article "age > 1 and unread == \"no\"" color245 default
|
||||
feedlist-format ":%-4i %-5U %?T?↓ &?%t"
|
||||
articlelist-format ":%-4i %f %?T?%-3T|?%t /date %D /size %-4L %?T?/feed %T?%"
|
||||
|
||||
text-width 90
|
||||
datetime-format "%Y-%m-%d %H:%M"
|
||||
|
||||
bind-key ; cmdline
|
||||
unbind-key q
|
||||
bind-key j down
|
||||
bind-key k up
|
||||
bind-key J next-feed articlelist
|
||||
bind-key K prev-feed articlelist
|
||||
bind-key h quit
|
||||
bind-key LEFT quit
|
||||
bind-key l open
|
||||
bind-key RIGHT open
|
||||
bind-key g home
|
||||
bind-key G end
|
||||
bind-key a toggle-article-read
|
||||
bind-key n next-unread
|
||||
unbind-key p
|
||||
bind-key N prev-unread
|
||||
bind-key s sort
|
||||
bind-key S rev-sort
|
||||
bind-key U show-urls
|
||||
unbind-key ^B
|
||||
bind-key m bookmark
|
||||
|
||||
# TODO: replace with nocodb
|
||||
bookmark-cmd "~/bin/pocket-sh-add.sh"
|
||||
bookmark-autopilot yes
|
||||
|
||||
# vim: ft=apachestyle cms=#\ %s :
|
@ -1,22 +0,0 @@
|
||||
#!/usr/bin/env nodejsscript
|
||||
/* jshint esversion: 11,-W097, -W040, module: true, node: true, expr: true, undef: true *//* global echo, $, pipe, s, fetch, cyclicLoop */
|
||||
import { html2rss } from './html2rss.mjs';
|
||||
/** @typedef {import('./html2rss.mjs').T_RSSITEM} T_RSSITEM */
|
||||
html2rss($[1], $[2], articles)
|
||||
.then(pipe( echo, $.exit.bind(null, 0)));
|
||||
/**
|
||||
* @param {string} response
|
||||
* @returns {T_RSSITEM[]}
|
||||
* */
|
||||
function articles(response){
|
||||
const links= Array.from(response.matchAll(/vcard__link" href="([^"]*)"/g)).map(pluckFound);
|
||||
const dates= Array.from(response.matchAll(/vcard__publish[^>]*>([^<]*)</g)).map(pluckFound).map(toISO);
|
||||
return Array.from(response.matchAll(/<h3[^>]*>([^<]*)</g))
|
||||
.map(pluckFound)
|
||||
.filter(Boolean)
|
||||
.map(function(title, i){ return { title, link: links[i], date: dates[i] }; });
|
||||
|
||||
/** @param {string} date */
|
||||
function toISO(date){ return date.split(". ").reverse().map(d=> d.padStart(2, "0")).join("-")+"T00:00:00.000Z"; }
|
||||
function pluckFound([ _, found]){ return found; }
|
||||
}
|
@ -1,39 +0,0 @@
|
||||
#!/usr/bin/env nodejsscript
|
||||
/* jshint esversion: 11,-W097, -W040, module: true, node: true, expr: true, undef: true *//* global echo, $, pipe, s, fetch, cyclicLoop */
|
||||
/**
|
||||
* @typedef T_RSSITEM
|
||||
* @type {{ title: string, link: string, date: string }}
|
||||
* */
|
||||
/**
|
||||
* @param {string} title
|
||||
* @param {string} url
|
||||
* @param {(response: string)=> T_RSSITEM[]} parseItems
|
||||
* @returns {Promise<string>}
|
||||
* */
|
||||
export function html2rss(title, url, parseItems){
|
||||
return fetch(url)
|
||||
.then(response=> response.text())
|
||||
.then(pipe( parseItems, toRSS ));
|
||||
|
||||
function toRSS(items){
|
||||
const articles_rss= items.map(function({ title, date, link }){
|
||||
return [
|
||||
"<item>",
|
||||
"<title>"+title+"</title>",
|
||||
"<link>"+link+"</link>",
|
||||
"<updated>"+date+"</updated>",
|
||||
"</item>"
|
||||
].join("\n");
|
||||
});
|
||||
return [
|
||||
`<?xml version="1.0" encoding="UTF-8" ?>`,
|
||||
`<rss version="2.0">`,
|
||||
"<channel>",
|
||||
`<title>${title}</title>`,
|
||||
`<link>${url}</link>`,
|
||||
...articles_rss,
|
||||
"</channel>",
|
||||
"</rss>"
|
||||
].join("\n");
|
||||
}
|
||||
}
|
222
.newsboat/urls
222
.newsboat/urls
@ -1,222 +0,0 @@
|
||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCMiyV_Ib77XLpzHPQH_q0qQ video
|
||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCVls1GmFKf6WlTraIb_IaJg video
|
||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCACJQqtYw6sASWAHXWkBWpw ! video
|
||||
https://www.youtube.com/feeds/videos.xml?channel_id=UC0398rTdnjLI1V_QypTEP4g ! video
|
||||
https://www.youtube.com/feeds/videos.xml?playlist_id=PLCKZKxlikAKzhux_uS3BZgejHhYk8yOYO ! video
|
||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCPeHT7xKjaw_-8hHW0GEXLg ! video
|
||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCD9L1HvpYpmZ8rrXABARCRQ ! video
|
||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCONH73CdRXUjlh3-DdLGCPw ! video
|
||||
"exec:~/.newsboat/html2rss-streamCZ.mjs 'Kokoti na neděli' 'https://www.stream.cz/kokoti-na-nedeli'" ! video
|
||||
"exec:~/.newsboat/html2rss-streamCZ.mjs 'Šťastné pondělí' 'https://www.stream.cz/stastne-pondeli'" !
|
||||
"query:Šťastné pondělí:title =~ \"Šťastné pondělí\" and feedtitle == \"Šťastné pondělí\"" video
|
||||
"query:📹:tags # \"video\""
|
||||
|
||||
https://www.mfcr.cz/cs/rss/vydali-jsme-k-hospodareni-statu ! stát
|
||||
https://www.sporicidluhopisycr.cz/cs/rss/aktuality ! stát
|
||||
http://www.vlada.cz/cs/urad/RSS/rss.xml ! stát
|
||||
https://mastodonczech.cz/@SpravedlnostCZ.rss ! stát
|
||||
https://zpravobot.news/@NUKIB_CZ.rss ! stát
|
||||
https://www.ceskezajmy.eu/feed/ ! stát
|
||||
https://poladprahu.cz/category/novinky/feed/ ! stát
|
||||
https://sdilenedomy.cz/feed/ ! stát
|
||||
"query:📒:tags # \"stát\""
|
||||
|
||||
https://www.irozhlas.cz/rss/irozhlas ! news
|
||||
https://denikn.cz/feed?ref=inc ! news
|
||||
# Voxpot Klub
|
||||
https://kill-the-newsletter.com/feeds/qghk07pleeqa2hiy6054.xml ! news
|
||||
https://www.voxpot.cz/feed/ ! news
|
||||
https://www.investigace.cz/feed/ ! news
|
||||
# PageNotFound.CZ
|
||||
https://kill-the-newsletter.com/feeds/rblo6you9l4fpbgs3i53.xml ! news
|
||||
https://gitea.jaandrle.cz/jaandrle/pagenotfound-cli/raw/branch/main/rss.xml
|
||||
"query:📰👋:tags # \"news\""
|
||||
|
||||
https://denikn.cz/veda/feed?ref=inc ! news/science
|
||||
"query:Petr Koubský:author = \"Petr Koubský\"" news/science
|
||||
https://vedator.org/feed/ ! news/science
|
||||
# TODO: https://www.threads.net/@vedator_cz
|
||||
http://feeds.feedburner.com/Backreaction ! news/science
|
||||
https://www.osel.cz/rss/rss.php ! news/science
|
||||
https://news.mit.edu/rss/feed ! news/science
|
||||
https://news.mit.edu/rss/research ! news/science
|
||||
https://nautil.us/feed/ ! news/science
|
||||
# ? tw PatrikKorenar → patreon, https://www.instagram.com/patrikkorenar
|
||||
"query:📰🔬:tags # \"news/science\""
|
||||
|
||||
https://www.lupa.cz/rss/clanky/ ! news/tech
|
||||
https://www.root.cz/rss/zpravicky/ ! news/tech
|
||||
https://www.root.cz/rss/clanky/ ! news/tech
|
||||
"query: Root – Softwarová sklizeň:title =~ \"^Softwarová sklizeň\" and rssurl == \"https://www.root.cz/rss/clanky/\"" news/tech
|
||||
https://zdrojak.cz/feed/ ! news/tech
|
||||
https://www.vzhurudolu.cz/rss ! news/tech
|
||||
https://anuradha.hashnode.dev/rss.xml ! news/tech
|
||||
https://lea.verou.me/feed.xml ! news/tech
|
||||
https://developer.mozilla.org/en-US/blog/rss.xml ! news/tech
|
||||
# mozilla.ai
|
||||
https://kill-the-newsletter.com/feeds/9a4r1e63xui0n5ozxs3j.xml ! news/tech
|
||||
https://www.omgubuntu.co.uk/feed ! news/tech
|
||||
https://servis.idnes.cz/rss.aspx?c=technet ! news/tech
|
||||
"query:📰💻💡:tags # \"news/tech\""
|
||||
|
||||
https://news.ycombinator.com/rss "~📰👋💻💡 – Hackernews"
|
||||
|
||||
https://lemmy.kde.social/feeds/c/kde.xml?sort=Active ! lemmy
|
||||
https://beehaw.org/feeds/c/science.xml?sort=Active ! lemmy
|
||||
https://lemmy.ml/feeds/c/firefox.xml?sort=Active ! lemmy
|
||||
https://lemmy.ml/feeds/c/vim.xml?sort=Active ! lemmy
|
||||
https://lemmy.ml/feeds/c/css.xml?sort=Active ! lemmy
|
||||
https://lemmy.ml/feeds/c/javascript.xml?sort=Active ! lemmy
|
||||
https://lemmy.ml/feeds/c/kde.xml?sort=Active ! lemmy
|
||||
"query:📰👋💻💡 – Lemmy:tags # \"lemmy\""
|
||||
|
||||
https://github.com/jordwalke.atom ! twitter/α
|
||||
https://gts.eilhart.cz/@kayla/feed.rss ! twitter/α
|
||||
# TODO: https://www.threads.net/@annie.tumova
|
||||
# TODO: https://www.threads.net/@filip.titlbach
|
||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCVHFbqXqoYvEWM1Ddxl0QDg ! twitter/α_hide
|
||||
"query:#TheAndroidShow:title =~ \"^#TheAndroidShow\" and rssurl == \"https://www.youtube.com/feeds/videos.xml?channel_id=UCVHFbqXqoYvEWM1Ddxl0QDg\"" twitter/α
|
||||
# TODO: https://ubuntuunity.org/blog/
|
||||
https://blog.neon.kde.org/feed/ ! twitter/α
|
||||
https://undinealmani.com/feed/ ! twitter/α
|
||||
https://techhub.social/@erikengheim.rss ! twitter/α
|
||||
https://github.com/justin-schroeder.atom ! twitter/α
|
||||
# TODO: @jpschroeder@fosstodon.org
|
||||
https://mastodon.social/@firt.rss ! twitter/α
|
||||
https://princiya.com/feed/ ! twitter/α
|
||||
https://davidwalsh.name/feed ! twitter/α
|
||||
https://jecas.cz/rss ! twitter/α
|
||||
# JanKoWeb geekovo zdrojak
|
||||
"query:📰👋💻💡 – Twitter/α:tags # \"twitter/α\""
|
||||
|
||||
# TODO: https://www.threads.net/@Zeptej_se_vedce
|
||||
# TODO: https://www.threads.net/@oliniumchemistry
|
||||
# TODO: https://www.threads.net/@narodnitymzen
|
||||
https://mindly.social/@adrianacerna.rss ! twitter/mixed
|
||||
https://olgarichterova.cz/feed/ ! twitter/mixed
|
||||
https://faktaoklimatu.cz/feed.xml ! twitter/mixed
|
||||
https://www.youtube.com/feeds/videos.xml?channel_id=UCtYxnvekc2-3P74TdLx0srQ ! twitter/mixed
|
||||
# https://genderaveda.cz/
|
||||
https://kill-the-newsletter.com/feeds/c6e1z94wpw0eds67.xml ! twitter/mixed
|
||||
# FZU_AVCR
|
||||
https://kill-the-newsletter.com/feeds/39xfn7p1cvf8dif4.xml ! twitter/mixed
|
||||
# AVCR
|
||||
https://kill-the-newsletter.com/feeds/5tww0ecg9y4twnxz.xml ! twitter/mixed
|
||||
https://mastodonczech.cz/@ewajelinek.rss ! twitter/mixed
|
||||
# TODO: https://www.threads.net/@claireklingenberg
|
||||
# TODO: https://www.threads.net/@pavlahubalkova
|
||||
# TODO: https://www.threads.net/@popdetective
|
||||
https://zpravobot.news/@dan_prokop.rss ! twitter/mixed
|
||||
https://www.paqresearch.cz/studie-a-clanky/rss/ ! twitter/mixed
|
||||
https://archetypal.cz/feed/ ! twitter/mixed
|
||||
# TODO: https://www.threads.net/@mariehermanova
|
||||
# Sociologicky
|
||||
https://kill-the-newsletter.com/feeds/xmub9gn72ecekvbi.xml ! twitter/mixed
|
||||
https://www.mimoagendu.cz/rss/ ! twitter/mixed
|
||||
# TODO: https://www.threads.net/@barasoukup
|
||||
# PulseofEuropeCZ KohoVolitEU
|
||||
"query:📰👋💻💡 – Twitter/mixed:tags # \"twitter/mixed\""
|
||||
|
||||
https://us8.campaign-archive.com/feed?u=5ec4c91d59d1b26aefb919e61&id=2ebe3120ac ! newsletters
|
||||
# UX that actually works in 3 minutes or less
|
||||
https://kill-the-newsletter.com/feeds/mx8wi1fifxu6scj8.xml ! newsletters
|
||||
# Lékaři bez hranic
|
||||
https://kill-the-newsletter.com/feeds/9l096daq56dxjw3z.xml ! newsletters
|
||||
https://denikn.cz/autor/toman/feed/ ! newsletters
|
||||
https://denikn.cz/tag/vylety-n/feed/ ! newsletters
|
||||
https://denikn.cz/tag/evropska-unie/feed/ ! newsletters
|
||||
"query:🗞️📰💡 – Newsletters:tags # \"newsletters\""
|
||||
|
||||
https://botsin.space/@randomMDN.rss dev/servises
|
||||
https://github.com/evanw/esbuild/releases.atom ! dev/servises
|
||||
https://bun.sh/rss.xml ! dev/servises
|
||||
https://www.githubstatus.com/history.rss ! dev/servises
|
||||
https://developer.apple.com/news/rss/news.rss "~Apple Dev News" dev/servises
|
||||
https://cordova.apache.org/feed.xml ! twitter/α
|
||||
https://www.mozilla.cz/feed/ ! twitter/α
|
||||
# https://www.githubstatus.com/history.rss ! dev/servises
|
||||
"query:⌨🖱:tags # \"dev/servises\""
|
||||
|
||||
https://github.com/mdn.atom ! dev/github
|
||||
# Charles Games
|
||||
https://kill-the-newsletter.com/feeds/spatxxuabdy4yboqeenu.xml ! dev/github
|
||||
https://github.com/LeaVerou.atom ! dev/github
|
||||
https://github.com/susieward/witchly-js/commits/main.atom ! dev/github
|
||||
https://github.com/staltz.atom ! dev/github
|
||||
https://github.com/jensimmons.atom ! dev/github
|
||||
https://github.com/mirisuzanne.atom ! dev/github
|
||||
# https://www.smashingmagazine.com/feed/
|
||||
"query:⌨🖱:tags # \"dev/github\""
|
||||
|
||||
https://www.informacnigramotnost.cz/feed/ ! desinfo
|
||||
https://demagog.cz/rss/index.atom ! desinfo
|
||||
https://www.fakticke.info/feed/ ! desinfo
|
||||
https://manipulatori.cz/feed/ ! desinfo
|
||||
"query:🤔:tags # \"desinfo\""
|
||||
|
||||
https://n3wjack.net/feed/ ! blogs
|
||||
https://boundedlyrational.substack.com/feed ! blogs
|
||||
https://blog.eischmann.cz/feed/ ! blogs
|
||||
https://blog.zvestov.cz/feed.xml ! blogs
|
||||
https://www.pirati.cz/feed.xml ! blogs
|
||||
https://www.kdu.cz/system/rss ! blogs
|
||||
https://80000hours.org/feed/ ! glogs
|
||||
http://tapolitika.cz/feed/ ! glogs
|
||||
"query:🤓:tags # \"blogs\""
|
||||
|
||||
https://mobilmania.zive.cz/rss/sc-47/default.aspx ! news/info
|
||||
https://feeds.feedburner.com/penize?format=xml ! news/info
|
||||
https://www.mesec.cz/rss/clanky/ ! news/info
|
||||
https://www.mesec.cz/rss/aktuality/ ! news/info
|
||||
https://www.edna.cz/doctor-who/rss/ ! news/info
|
||||
"query:🗞 💰📱:tags # \"news/info\""
|
||||
|
||||
http://feeds.bbci.co.uk/news/world/rss.xml ! news/rest
|
||||
https://domaci.hn.cz/?m=rss ! news/rest
|
||||
https://ekonom.cz/?m=rss ! news/rest
|
||||
https://vikend.hn.cz/?m=rss ! news/rest
|
||||
https://procne.hn.cz/?m=rss ! news/rest
|
||||
http://casopisargument.cz/?feed=rss2 ! news/rest
|
||||
"query:🗞 🌐⏩:tags # \"news/rest\""
|
||||
|
||||
https://www.seznamzpravy.cz/rss ! rest
|
||||
"query:🗞 💤:tags # \"rest\""
|
||||
|
||||
# TODO: https://www.threads.net/@pirativanbartos
|
||||
https://mastodonczech.cz/@jantvrdon.rss ! mastodon/neak
|
||||
https://mastodonczech.cz/@eliska.rss ! mastodon/neak
|
||||
https://mastodon.rozhlas.cz/@kristinarohackova.rss ! mastodon/neak
|
||||
https://mastodon.social/@Prof_Mirya.rss ! mastodon/neak
|
||||
https://mastodonczech.cz/@NAKIT.rss ! mastodon/neak
|
||||
https://mastodonczech.cz/@strakovka.rss ! mastodon/neak
|
||||
https://mastodonczech.cz/@SpravedlnostCZ.rss ! mastodon/neak
|
||||
https://witter.cz/@petrinfinite.rss ! mastodon/neak
|
||||
https://mastodonczech.cz/@danusenerudova.rss ! mastodon/neak
|
||||
# TODO: https://www.threads.net/@danusenerudova
|
||||
https://witter.cz/@Apolenarychlikova.rss ! mastodon/neak
|
||||
# TODO: https://www.threads.net/@apolenarychlikova
|
||||
https://mastodonczech.cz/@marekl.rss ! mastodon/neak
|
||||
https://mastodon.social/@spreadmastodon.rss ! mastodon/neak
|
||||
https://mastodon.pirati.cz/@OlgaRichterova.rss ! mastodon/neak
|
||||
# TODO: https://www.threads.net/@olga_piratka_richterova
|
||||
https://witter.cz/@zeleni.rss ! mastodon/neak
|
||||
https://mastodonczech.cz/@Lenislavka.rss ! mastodon/neak
|
||||
https://witter.cz/@guth.rss ! mastodon/neak
|
||||
# TODO: https://www.threads.net/@tgjarkovsky
|
||||
https://mastodonczech.cz/@madla.rss ! mastodon/neak
|
||||
# TODO: https://www.threads.net/@madla__g
|
||||
https://witter.cz/@malyvedec.rss ! mastodon/neak
|
||||
# TODO: https://www.threads.net/@malyvedec
|
||||
"query:🗞 🐘:tags # \"mastodon/neak\""
|
||||
|
||||
|
||||
# TW bez náhrady:
|
||||
# fieldsofmoab, machal, devgirlFL,
|
||||
# jakubvrana, _Case, eicul,
|
||||
# CO2IN, Iluminator_cz, DearAbbyHansen,
|
||||
# _A_d_e_l_k_a_, ClaireAccendit, laurencikova_k,
|
||||
# PopDetective, dan_prokop, danusenerudova,
|
||||
# glacier_ecology, MarieHermanova, lkristoufek,
|
||||
# matfyz, Mitokochan, kasikp,
|
||||
# CERN, josefslerka, traintravels42,
|
||||
# JulieMontek, bara_soukup, janovsky
|
6
.profile
6
.profile
@ -30,13 +30,7 @@ export GTK_MODULES
|
||||
export UBUNTU_MENUPROXY
|
||||
|
||||
export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"
|
||||
|
||||
# Ubuntu make installation of Ubuntu Make binary symlink
|
||||
PATH=/home/jaandrle/.local/share/umake/bin:$PATH
|
||||
|
||||
[ -f /home/jaandrle/.bash/.profile_androidsdk ] && . /home/jaandrle/.bash/.profile_androidsdk
|
||||
|
||||
|
||||
# Added by Toolbox App
|
||||
export PATH="$PATH:/home/jaandrle/.local/share/JetBrains/Toolbox/scripts"
|
||||
|
||||
|
@ -1,3 +1,5 @@
|
||||
Include /home/jaandrle/.config/colima/ssh_config
|
||||
|
||||
Host vpsfree
|
||||
HostName 37.205.11.208
|
||||
IdentityFile ~/.ssh/vpsfree
|
||||
|
@ -12,6 +12,9 @@ To navigate my secondary editor use [../vscode](../vscode).
|
||||
See [./§vim_plugins_export-v0.json](./§vim_plugins_export-v0.json). Also call `:helptags ~/.vim/bundle/`.
|
||||
|
||||
|
||||
## Removed
|
||||
- [jasonccox/vim-wayland-clipboard](https://github.com/jasonccox/vim-wayland-clipboard) due to https://github.com/vim/vim/issues/5157#issuecomment-1916375710
|
||||
|
||||
## To consider
|
||||
- [yaegassy/coc-html-css-support: HTML id and class attribute "completion" for coc.nvim.](https://github.com/yaegassy/coc-html-css-support): `alpine.js`, `petite-vue`
|
||||
- [vimwiki/vimwiki: Personal Wiki for Vim](https://github.com/vimwiki/vimwiki)
|
||||
|
@ -1,6 +0,0 @@
|
||||
nmap <leader>vd /diff --git<cr>0vG$
|
||||
command! AIcommit ALTredir !§ai-commit.mjs
|
||||
command! AIcommitConventional ALTredir !§ai-commit.mjs --format conventional
|
||||
command! AIcommitGitmoji ALTredir !§ai-commit.mjs --format gitmoji
|
||||
command! AIcommitGit3moji ALTredir !§ai-commit.mjs --format git3moji
|
||||
nmap <leader><f1> :AIcommitOP
|
@ -26,5 +26,6 @@
|
||||
"complexity": ["error", 15]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"snippets.ultisnips.pythonPrompt": false
|
||||
}
|
||||
|
222
.vimrc
222
.vimrc
@ -1,14 +1,18 @@
|
||||
""" VIM config file | Jan Andrle | 2024-07-10 (VIM >=8.1)
|
||||
""" VIM config file | Jan Andrle | 2025-04-05 (VIM >=9.1 AppImage)
|
||||
"" #region B – Base
|
||||
scriptencoding utf-8 | set encoding=utf-8
|
||||
set pythonthreedll=/lib/x86_64-linux-gnu/libpython3.12.so.1.0
|
||||
let $BASH_ENV = "~/.bashrc"
|
||||
set runtimepath^=~/.vim/bundle/*
|
||||
packadd! matchit
|
||||
packadd! cfilter
|
||||
let g:ft_man_folding_enable = 1
|
||||
runtime! ftplugin/man.vim
|
||||
" set hidden
|
||||
|
||||
set title
|
||||
colorscheme codedark
|
||||
set updatetime=300 lazyredraw ttyfast " Having longer updatetime (default is 4s) leads to noticeable delays and poor user experience. Also reduce redraw frequency and fast terminal typing
|
||||
set updatetime=300 "TODO DEL lazyredraw
|
||||
set noerrorbells novisualbell
|
||||
set belloff=esc
|
||||
set confirm
|
||||
@ -50,14 +54,12 @@
|
||||
""" #endregion BB
|
||||
"" #endregion B
|
||||
"" #region H – Helpers
|
||||
" TODO DEL
|
||||
command! -nargs=? CLscratch 10split | enew | setlocal buftype=nofile bufhidden=wipe noswapfile nobuflisted | if <q-args>!='' | execute 'normal "'.<q-args>.'p' | endif | nnoremap <buffer> ;q :q<cr>
|
||||
|
||||
cabbrev ALTR ALTredrawSyntax
|
||||
set grepprg=LC_ALL=C\ grep\ -nrsH
|
||||
command! -nargs=0
|
||||
\ ALTredrawSyntax edit | exec 'normal `"' | exec 'set ft='.&ft
|
||||
command! -complete=command -bar -range -nargs=+
|
||||
\ ALTredir call jaandrle_utils#redir(0, <q-args>, <range>, <line1>, <line2>)
|
||||
|
||||
let g:quickfix_len= 0
|
||||
function! QuickFixStatus() abort
|
||||
@ -76,16 +78,6 @@
|
||||
augroup quickfix
|
||||
autocmd!
|
||||
autocmd QuickFixCmdPost * call <sid>QuickFixCmdPost()
|
||||
autocmd filetype qf
|
||||
\ if filter(getwininfo(), {i,v -> v.winnr == winnr()})[0].loclist
|
||||
\| nnoremap <buffer> ;q :lclose<cr>
|
||||
\| nnoremap <buffer> ;w :lgetbuffer<CR>:lclose<CR>:lopen<CR>
|
||||
\| nnoremap <buffer> ;s :ldo s///gc \| update<c-left><c-left><c-left><right><right>
|
||||
\| else
|
||||
\| nnoremap <buffer> ;q :cclose<cr>
|
||||
\| nnoremap <buffer> ;w :cgetbuffer<CR>:cclose<CR>:copen<CR>
|
||||
\| nnoremap <buffer> ;s :cdo s///gc \| update<c-left><c-left><c-left><right><right>
|
||||
\| endif
|
||||
augroup END
|
||||
"" #endregion H
|
||||
"" #region SLH – Status Line + Command Line + History (general) + Sessions + File Update, …
|
||||
@ -96,20 +88,15 @@
|
||||
cabbrev wbw w<bar>bw
|
||||
|
||||
set sessionoptions-=options
|
||||
command! -nargs=1
|
||||
\ CLSESSIONcreate :call mini_sessions#create(<f-args>)
|
||||
command! -nargs=0
|
||||
\ CLSESSIONconfig :call mini_sessions#sessionConfig()
|
||||
command! -nargs=1 -complete=customlist,mini_sessions#complete
|
||||
\ CLSESSIONload :call mini_sessions#load(<f-args>)
|
||||
command! -nargs=0
|
||||
\ Scd :call mini_sessions#recoverPwd()
|
||||
|
||||
if !has("gui_running")
|
||||
execute 'hi! User2 ctermbg='.synIDattr(synIDtrans(hlID('StatusLine')), 'bg').' ctermfg=grey' | endif
|
||||
function! NumberOfBuffers()
|
||||
return len(filter(range(1, bufnr('$')), 'buflisted(v:val)'))
|
||||
endfunction
|
||||
set laststatus=2 " Show status line on startup
|
||||
set statusline+=··%1*≡·%{QuickFixStatus()}%*··%2*»·%{user_tips#current()}%*··%=
|
||||
set statusline+=%<%f%R\%M··▶·%{&fileformat}·%{&fileencoding?&fileencoding:&encoding}·%{&filetype}··∷·%{mini_sessions#name('–')}··
|
||||
set statusline+=··≡·%{QuickFixStatus()}%*··»·%{user_tips#current()}%*··%=
|
||||
set statusline+=(%{NumberOfBuffers()})··%<%f%R\%M··▶·%{&fileformat}·%{&fileencoding?&fileencoding:&encoding}·%{&filetype}
|
||||
set statusline+=··
|
||||
" set statusline+=··∷·%{mini_sessions#name('–')}··
|
||||
|
||||
set history=500 " How many lines of (cmd) history has to remember
|
||||
set nobackup nowritebackup noswapfile " …there is issue #649 (for servers) and I’m using git/system backups
|
||||
@ -119,11 +106,11 @@
|
||||
command! SETundoClear let old_undolevels=&undolevels | set undolevels=-1 | exe "normal a \<BS>\<Esc>" | let &undolevels=old_undolevels | unlet old_undolevels | write
|
||||
"" #endregion SLH
|
||||
"" #region LLW – Left Column + Line + Wrap + Scrolling
|
||||
if has("nvim-0.5.0") || has("patch-8.1.1564") " Recently vim can merge signcolumn and number column into one
|
||||
set signcolumn=number | else | set signcolumn=yes | endif " show always to prevent shifting when diagnosticappears
|
||||
set signcolumn=yes
|
||||
set cursorline cursorcolumn " Always show current position
|
||||
set number foldcolumn=2 " enable line numbers and add a bit extra margin to the left
|
||||
set colorcolumn=+1 " …marker visual
|
||||
" TODO DEL
|
||||
command -nargs=? SETtextwidth if <q-args> | let &textwidth=<q-args> | let &colorcolumn='<args>,120,240' | else | let &textwidth=250 | let &colorcolumn='120,240' | endif
|
||||
SETtextwidth " wraping lines and show two lines
|
||||
set nowrap " Don't wrap long lines by default
|
||||
@ -133,26 +120,53 @@
|
||||
"" #endregion LLW
|
||||
"" #region CN – Clipboard + Navigation throught Buffers + Windows + … (CtrlP)
|
||||
set pastetoggle=<F2> | nnoremap <F2> :set invpaste paste?<CR>
|
||||
nnoremap <silent> <leader>" :call jaandrle_utils#copyRegister()<cr>
|
||||
function! JaaCopyRegister()
|
||||
echo "Copy content of the register: "
|
||||
let sourceReg = nr2char(getchar())
|
||||
if sourceReg !~# '\v^[a-z0-9"*+]'
|
||||
echon sourceReg." – invalid register"
|
||||
return
|
||||
endif
|
||||
echon sourceReg."\ninto the register: "
|
||||
let destinationReg = nr2char(getchar())
|
||||
if destinationReg !~# '\v^[a-z0-9"*+]'
|
||||
echon destinationReg." – invalid register"
|
||||
return
|
||||
endif
|
||||
call setreg(destinationReg, getreg(sourceReg, 1))
|
||||
echon destinationReg
|
||||
endfunction
|
||||
nnoremap <silent> <leader>" :call JaaCopyRegister()<cr>
|
||||
|
||||
nmap <expr> š buffer_number("#")==-1 ? "\<leader>š<cr>" : "\<c-^>"
|
||||
" CtrlP previously
|
||||
nmap <expr> š buffer_number("#")==-1 ? ":CocList --normal buffers\<cr>" : "\<c-^>"
|
||||
nmap ě :CocList
|
||||
nmap <leader>3 :buffers<cr>:b<space>
|
||||
nmap <leader>š :CtrlPBuffer<cr>
|
||||
nmap <leader>š :CocList buffers<cr> | :syntax on<cr>
|
||||
nmap č <leader>š
|
||||
let g:ctrlp_map = 'ě'
|
||||
command! -nargs=? SETctrlp execute 'nnoremap '.g:ctrlp_map.' :CtrlP <args><cr>'
|
||||
let g:ctrlp_clear_cache_on_exit = 0
|
||||
let g:ctrlp_prompt_mappings= {
|
||||
\ 'ToggleType(1)': ['<c-up>'],
|
||||
\ 'ToggleType(-1)': ['<c-down>'],
|
||||
\ 'PrtCurStart()': ['<c-b>'],
|
||||
\}
|
||||
"" #endregion CN
|
||||
"" #region FOS – File(s) + Openning + Saving
|
||||
set autowrite autoread | autocmd FocusGained,BufEnter *.* checktime
|
||||
set modeline
|
||||
command! -nargs=?
|
||||
\ CLmodeline :call jaandrle_utils#AppendModeline(<q-args>=='basic' ? 0 : 1)
|
||||
function! JaaAppendModeline(additional= 0)
|
||||
let l:modeline= printf(" vim: set tabstop=%d shiftwidth=%d textwidth=%d %sexpandtab :",
|
||||
\ &tabstop, &shiftwidth, &textwidth, &expandtab ? '' : 'no')
|
||||
let l:modeline= substitute(&commentstring, "%s", l:modeline, "")
|
||||
call append(line("$"), l:modeline)
|
||||
|
||||
if !a:additional | return 0 | endif
|
||||
if &foldmethod=="marker"
|
||||
let l:modeline= printf(" vim>60: set foldmethod=marker foldmarker=%s :",
|
||||
\ &foldmarker)
|
||||
elseif &foldmethod=="indent"
|
||||
let l:modeline= printf(" vim>60: set foldmethod=indent foldlevel=%d foldnestmax=%d:",
|
||||
\ &foldlevel, &foldnestmax)
|
||||
else
|
||||
return 0
|
||||
endif
|
||||
let l:modeline= substitute(&commentstring, "%s", l:modeline, "")
|
||||
call append(line("$"), l:modeline)
|
||||
endfunction
|
||||
|
||||
set path+=src/**,app/**,build/** " File matching for `:find`
|
||||
for ignore in [ '.git', '.npm', 'node_modules' ]
|
||||
@ -167,9 +181,10 @@
|
||||
vnoremap gx :silent exec "!xdg-open '".shellescape(substitute(mini_enhancement#selectedText(), '?', '\\?', ''), 1)."'" \| redraw!<cr>
|
||||
"" #endregion FOS
|
||||
"" #region EN – Editor navigation + search
|
||||
set grepprg=LC_ALL=C\ grep\ -HRIns
|
||||
set hlsearch incsearch " highlight search, start when typing
|
||||
if maparg('<C-L>', 'n') ==# ''
|
||||
nnoremap <silent> <c-l> :nohlsearch<c-r>=has('diff')?'<bar>diffupdate':''<cr><cr><c-l> | endif
|
||||
nnoremap <silent> <c-l> :nohlsearch<c-r>=has('diff')?'<bar>diffupdate':''<cr><cr><c-l> | endif " TODO? <bar>syntax sync fromstart
|
||||
|
||||
let g:markbar_persist_mark_names = v:false
|
||||
let g:markbar_cache_with_hidden_buffers = v:false " last buffers are reopened as hidden https://github.com/Yilin-Yang/vim-markbar/blob/9f5a948d44652074bf2b90d3da6a400d8a369ba5/doc/vim-markbar.txt#L136
|
||||
@ -179,7 +194,6 @@
|
||||
" use <c-v>§ for §
|
||||
inoremap § <esc>
|
||||
set nrformats-=octal
|
||||
command! -nargs=1 SETTOGGLEnrformats if &nf=~<q-args> | set nf-=<args> | else | set nf+=<args> | endif
|
||||
|
||||
let g:htl_css_templates=1
|
||||
let g:markdown_fenced_languages= [ 'javascript', 'js=javascript', 'json', 'html', 'php', 'bash', 'vim', 'vimscript=javascript', 'sass' ]
|
||||
@ -200,15 +214,16 @@
|
||||
let g:rainbow#blacklist = [203,9]
|
||||
autocmd VimEnter * try
|
||||
\| call rainbow_parentheses#toggle() | catch | endtry
|
||||
command! SETTOGGLErainbowParentheses call rainbow_parentheses#toggle()
|
||||
" HIGHLIGHT&YANK plugins machakann/vim-highlightedyank & cwordhi.vim
|
||||
let g:highlightedyank_highlight_duration= 250
|
||||
" HIGHLIGHT&YANK plugins (buildin) hlyank & cwordhi.vim
|
||||
packadd hlyank
|
||||
let g:hlyank_duration= 250
|
||||
let g:cwordhi#autoload= 1
|
||||
set showmatch " Quick highlight oppening bracket/… for currently writted
|
||||
set timeoutlen=1000 ttimeoutlen=0 " Remove timeout when hitting escape TAB
|
||||
if v:version > 703 || v:version == 703 && has("patch541")
|
||||
set formatoptions+=j | endif " Delete comment character when joining commented lines
|
||||
set smarttab
|
||||
" TODO DEL
|
||||
command! -nargs=1 SETtab let &shiftwidth=<q-args> | let &tabstop=<q-args> | let &softtabstop=<q-args>
|
||||
SETtab 4
|
||||
set backspace=indent,eol,start " Allow cursor keys in insert mode: http://vi.stackexchange.com/a/2163
|
||||
@ -218,11 +233,12 @@
|
||||
if ($TERM =~ '256' && has("termguicolors"))
|
||||
set termguicolors | endif
|
||||
if (&t_Co > 2 || has("gui_running")) && !exists("syntax_on")
|
||||
syntax on | endif
|
||||
syntax enable | endif
|
||||
set list listchars=tab:»·,trail:·,extends:#,nbsp:~,space:· " Highlight spec. chars / Display extra whitespace
|
||||
set redrawtime=10000
|
||||
augroup syntax_sync_min_lines
|
||||
autocmd!
|
||||
autocmd Syntax * syn sync minlines=2000
|
||||
autocmd BufEnter * syntax sync fromstart "TODO DEL syn sync minlines=2000
|
||||
augroup END
|
||||
let g:vim_vue_plugin_config = { 'foldexpr': 1, 'attribute': 1, 'keyword': 1 }
|
||||
" SPELL
|
||||
@ -234,7 +250,7 @@
|
||||
nnoremap <leader>O O<space><bs><esc>
|
||||
nnoremap <s-k> a<cr><esc>
|
||||
for l in [ 'y', 'p', 'P', 'd' ] | for m in [ 'n', 'v' ]
|
||||
execute m.'noremap <leader>'.l.' "+'.l | endfor | endfor
|
||||
execute m.'map <leader>'.l.' "+'.l | endfor | endfor " no noremap ⇐ https://github.com/jasonccox/vim-wayland-clipboard?tab=readme-ov-file#non-recursive-mappings
|
||||
" TODO DEL: FOLDS
|
||||
" TODO DEL: command! -nargs=0 SETFOLDregions set foldmethod=marker
|
||||
" TODO DEL: command! -nargs=1 SETFOLDindent set foldmethod=indent | let &foldlevel=<q-args> | let &foldnestmax=<q-args>+1
|
||||
@ -248,45 +264,18 @@
|
||||
autocmd BufWinEnter *.* silent! loadview
|
||||
augroup END
|
||||
"" #endregion EA
|
||||
"" #region GIT
|
||||
function s:gitCompletion(_, CmdLine, __)
|
||||
let l:cmd= a:CmdLine->split()
|
||||
let l:cmd_start= l:cmd[0]
|
||||
\ ->substitute('GIThub', 'gh', '')
|
||||
\ ->substitute('GIT', 'git ', '')->trim()->split(' ')
|
||||
return bash#complete((l:cmd_start+l:cmd[1:])->join())
|
||||
endfunction
|
||||
function s:gitCmd(candidate)
|
||||
execute '!clear && echo ":: git '.a:candidate->escape('"').' ::" && git '.a:candidate
|
||||
endfunction
|
||||
command! -nargs=* -complete=customlist,<sid>gitCompletion
|
||||
\ GIT call <sid>gitCmd(<q-args>)
|
||||
command! -nargs=* -complete=customlist,<sid>gitCompletion
|
||||
\ GITstatus !git status-- <args>
|
||||
command! -nargs=* -complete=customlist,<sid>gitCompletion
|
||||
\ GITcommit !git commit-- <args>
|
||||
command! -nargs=* -complete=customlist,<sid>gitCompletion
|
||||
\ GITpush !git push <args>
|
||||
command! -nargs=* -complete=customlist,<sid>gitCompletion
|
||||
\ GITdiff if <q-args>=='' | execute '!clear && git diff %:p' | else | silent! execute '!git diff <args>' | endif
|
||||
command! -nargs=*
|
||||
\ GITrestore execute '!clear && git status '.(<q-args>=='.' ? '%:p':'<args>').' -bs & git restore '.(<q-args>=='' ? '%:p':'<args>').' --patch'
|
||||
command! -nargs=* -complete=customlist,<sid>gitCompletion
|
||||
\ GIThub execute '!clear && echo ":: gh '.<q-args>->escape('"').' ::" && gh '.<q-args>
|
||||
command! -nargs=?
|
||||
\ GIThubIssue execute '!clear && gh issue view '.expand('<cword>').' '.<q-args>
|
||||
let g:git_messenger_no_default_mappings= v:true
|
||||
let g:git_messenger_date_format= '%Y-%m-%d (%c)'
|
||||
let g:git_messenger_always_into_popup= v:true
|
||||
augroup git_messenger_help
|
||||
autocmd!
|
||||
autocmd FileType gitmessengerpopup setlocal keywordprg=git\ show
|
||||
augroup END
|
||||
command! -nargs=0
|
||||
\ GITblameThis GitMessenger
|
||||
"" #endregion GIT
|
||||
"" #region AI
|
||||
let g:codeium_disable_bindings = 1
|
||||
imap <script><silent><nowait><expr> <f3><f3> codeium#Accept()
|
||||
imap <script><silent><nowait><expr> <f3><w> codeium#AcceptNextWord()
|
||||
imap <script><silent><nowait><expr> <f3><j> codeium#AcceptLine()
|
||||
imap <f3>n <Cmd>call codeium#CycleCompletions(1)<CR>
|
||||
imap <f3>N <Cmd>call codeium#CycleCompletions(-1)<CR>
|
||||
imap <f3>d <Cmd>call codeium#Clear()<CR>
|
||||
imap <f3>! <Cmd>call codeium#Complete()<CR>
|
||||
"" #endregion AI
|
||||
"" #region COC – COC and so on, compilers, code/commands completions
|
||||
let g:coc_global_extensions= ['coc-css', 'coc-docthis', 'coc-emmet', 'coc-emoji', 'coc-pretty-ts-errors', 'coc-eslint', 'coc-gitmoji', 'coc-html', 'coc-json', 'coc-marketplace', 'coc-phpls', 'coc-sh', 'coc-snippets', 'coc-styled-components', 'coc-svg', 'coc-tabnine', 'coc-tsserver']
|
||||
let g:coc_global_extensions= ['coc-css', 'coc-docthis', 'coc-emmet', 'coc-emoji', 'coc-git', 'coc-pretty-ts-errors', 'coc-eslint', 'coc-gitmoji', 'coc-html', 'coc-json', 'coc-lists', 'coc-marketplace', 'coc-phpls', 'coc-sh', 'coc-snippets', 'coc-styled-components', 'coc-svg', 'coc-tsserver']
|
||||
" https://github.com/antonk52/cssmodules-language-server
|
||||
call coc#config('languageserver.cssmodules', {
|
||||
\ "command": "cssmodules-language-server",
|
||||
@ -296,21 +285,6 @@
|
||||
\ "settings": {}
|
||||
\ })
|
||||
autocmd FileType scss setl iskeyword+=@-@
|
||||
command -nargs=? ALTmake if &filetype=='javascript' | compiler jshint | elseif &filetype=='php' | compiler php | endif
|
||||
\| if <q-args>!='' | silent make <args> | else | silent make '%' | endif | checktime | silent redraw! " …prev line, hotfix (filetype detection does’t works)
|
||||
function <sid>ToggleALTmakeOnWrite()
|
||||
if exists('#ALTmake_auto#BufWritePost')
|
||||
augroup ALTmake_auto
|
||||
autocmd!
|
||||
augroup END
|
||||
else
|
||||
augroup ALTmake_auto
|
||||
autocmd!
|
||||
autocmd BufWritePost *.{php,js,mjs} execute 'ALTmake' | call <sid>QuickFixCmdPost()
|
||||
augroup END
|
||||
endif
|
||||
endfunction
|
||||
command! ALTmakeOnWrite call <sid>ToggleALTmakeOnWrite()
|
||||
function! CustomKeyWord(word)
|
||||
if(a:word=="gulp_place")
|
||||
highlight link gulp_place ErrorMsg
|
||||
@ -333,9 +307,7 @@
|
||||
return !col || getline('.')[col - 1] =~# '\s'
|
||||
endfunction
|
||||
|
||||
nmap <silent> gd <Plug>(coc-definition)
|
||||
nmap <leader>/ :CocSearch
|
||||
nmap <leader>? <leader>/
|
||||
nmap <silent><nowait> gd <Plug>(coc-definition)
|
||||
command! -nargs=* -complete=customlist,<sid>SCommandCocActionComplete CocAction call CocActionAsync(<f-args>)
|
||||
function s:SCommandCocActionComplete(argLead, cmdLine, cursorPos)
|
||||
return readfile(expand('~/.vim/pack/coc/start/coc.nvim/doc/tags'), 'r')
|
||||
@ -346,8 +318,8 @@
|
||||
" navigate diagnostics, use `:CocDiagnostics` to get all diagnostics of current buffer in location list.
|
||||
nnoremap <silent> gh :call <sid>show_documentation(expand("<cword>"))<cr>
|
||||
vnoremap <silent> gh :<c-u>call <sid>show_documentation(mini_enhancement#selectedText())<cr>
|
||||
nnoremap <leader>gf :let g:ctrlp_default_input=expand("<cword>") <bar> execute 'CtrlP' <bar> unlet g:ctrlp_default_input <cr>
|
||||
vnoremap <leader>gf :<c-u>let g:ctrlp_default_input=mini_enhancement#selectedText() <bar> execute 'CtrlP' <bar> unlet g:ctrlp_default_input <cr>
|
||||
nnoremap <leader>gf :CocList --interactive --normal --input='<c-r>=expand("<cword>")<cr>' files<cr>
|
||||
vnoremap <leader>gf :<c-u>CocList --interactive --normal --input='<c-r>=mini_enhancement#selectedText()<cr>' files<cr>
|
||||
""" #region COCP – Coc popups scroll (Remap <C-f> and <C-b> for scroll float windows/popups.)
|
||||
if has('nvim-0.4.0') || has('patch-8.2.0750')
|
||||
nnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
|
||||
@ -358,11 +330,10 @@
|
||||
vnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
|
||||
endif
|
||||
""" #endregion COCP
|
||||
" TODO DEL: command! -nargs=? SETFOLDcoc :call CocAction('fold', <f-args>)
|
||||
|
||||
command! -nargs=? CLhelpMy if <q-args>!='' | exec 'map '.<q-args> | else | call popup_notification([
|
||||
\ 'Custom mappings starting: '.mapleader.',§, ů, ;, U, ž',
|
||||
\ 'Custom commands starting: CL, SET, ALT, CtrlP, Vifm, GIT, Coc',
|
||||
\ 'Custom commands starting: CL, SET, ALT, Vifm, Coc',
|
||||
\ 'Helpful commands: CocAction, CocCommand, CocList',
|
||||
\], #{ line: &lines-3, pos: 'botleft', moved: 'any', close: 'button', time: 6000 }) | endif
|
||||
nnoremap <c-g> :CLwhereami<cr>
|
||||
@ -398,28 +369,8 @@
|
||||
\ CLcheat call cheat_copilot#open(<q-args>==''?&filetype:<q-args>)
|
||||
|
||||
function! s:show_documentation(word)
|
||||
if (index(['vim', 'help'], &filetype) >= 0)
|
||||
" inspired by https://github.com/tpope/vim-scriptease/blob/74bd5bf46a63b982b100466f9fd47d2d0597fcdd/autoload/scriptease.vim#L737
|
||||
let syn= get(reverse(map(synstack(line('.'), col('.')), 'synIDattr(v:val,"name")')), 0, '')
|
||||
if syn ==# 'vimFuncName' | return <sid>show_documentation_vim('h '.a:word.'()')
|
||||
elseif syn ==# 'vimOption' | return <sid>show_documentation_vim("h '".a:word."'")
|
||||
elseif syn ==# 'vimUserAttrbKey' | return <sid>show_documentation_vim('h :command-'.a:word)
|
||||
endif
|
||||
|
||||
let col= col('.') - 1
|
||||
while col && getline('.')[col] =~# '\k' | let col-= 1 | endwhile
|
||||
let pre= col == 0 ? '' : getline('.')[0 : col]
|
||||
let col= col('.') - 1
|
||||
while col && getline('.')[col] =~# '\k' | let col+= 1 | endwhile
|
||||
if pre =~# '^\s*:\=$' | return <sid>show_documentation_vim('h :'.a:word)
|
||||
elseif pre =~# '\<v:$' | return <sid>show_documentation_vim('h v:'.a:word)
|
||||
endif
|
||||
|
||||
let post= getline('.')[col : -0]
|
||||
if a:word ==# 'v' && post =~# ':\w\+' | return <sid>show_documentation_vim('h v'.matchstr(post, ':\w\+')) | endif
|
||||
return <sid>show_documentation_vim('h '.a:word)
|
||||
endif
|
||||
if (!CocAction('hasProvider', 'hover'))
|
||||
if &filetype=='man' | call dist#man#PreGetPage(0) | return 0 | endif
|
||||
return feedkeys('K', 'in')
|
||||
endif
|
||||
if &filetype=='html' && coc#source#custom_elements#hover(a:word)!=0
|
||||
@ -428,16 +379,7 @@
|
||||
|
||||
return CocActionAsync('doHover')
|
||||
endfunction
|
||||
function! s:show_documentation_vim(cmd)
|
||||
call execute(a:cmd) | call histadd("cmd", a:cmd)
|
||||
endfunction
|
||||
"" #endregion COC
|
||||
let g:codeium_disable_bindings = 1
|
||||
imap <script><silent><nowait><expr> <f3><f3> codeium#Accept()
|
||||
imap <f3>n <Cmd>call codeium#CycleCompletions(1)<CR>
|
||||
imap <f3>N <Cmd>call codeium#CycleCompletions(-1)<CR>
|
||||
imap <f3>d <Cmd>call codeium#Clear()<CR>
|
||||
imap <f3>! <Cmd>call codeium#Complete()<CR>
|
||||
|
||||
" vim: set textwidth=250 :
|
||||
" vim>60: set foldmethod=marker foldmarker=#region,#endregion :
|
||||
|
1674
bin/README.md
1674
bin/README.md
File diff suppressed because it is too large
Load Diff
39
bin/git-identity
Executable file
39
bin/git-identity
Executable file
@ -0,0 +1,39 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
config="$HOME/.config/git/identities"
|
||||
input="${1:-}"
|
||||
usage="Usage
|
||||
git identity [<name>|help|-]
|
||||
git-identity --help
|
||||
"
|
||||
[ -z "$input" ] \
|
||||
&& echo "$usage"\
|
||||
&& echo -e "$config/current.conf … current identity:" \
|
||||
&& cat "$config/current.conf" \
|
||||
&& exit 0
|
||||
[ "$input" = --help ] \
|
||||
&& input="help"
|
||||
[ "$input" = help ] \
|
||||
&& echo "$usage"\
|
||||
&& echo '- _empty_: shows usage and current identity' \
|
||||
&& echo '- <name>: set identity' \
|
||||
&& echo '- -: show path to identities directory' \
|
||||
&& echo '- help: shows this help' \
|
||||
&& echo -e '\n\nExamples' \
|
||||
&& echo '- git identity' \
|
||||
&& echo '- git identity user' \
|
||||
&& echo '- ls $(git identity -)' \
|
||||
&& echo -e '\n\nGit config' \
|
||||
&& echo "- git config --global include.path '$config/current.conf'" \
|
||||
&& exit 0
|
||||
[ "$input" = - ] \
|
||||
&& echo "$config" \
|
||||
&& exit 0
|
||||
|
||||
identity="$config/$input.conf"
|
||||
[ ! -e "$identity" ] \
|
||||
&& echo "No such identity: $input" >&2 \
|
||||
&& echo "$identity" >&2 \
|
||||
&& exit 1
|
||||
|
||||
ln --verbose --force "$identity" "$config/current.conf"
|
@ -1,418 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
/* jshint esversion: 8,-W097, -W040, node: true, expr: true, undef: true */
|
||||
const /* dependencies */
|
||||
[ fs, readline, https, { spawn } ]= [ "fs", "readline", "https", "child_process" ].map(p=> require(p));
|
||||
const /* helper for coloring console | main program params */
|
||||
colors= { e: "\x1b[38;2;252;76;76m", s: "\x1b[38;2;76;252;125m", w: "\x1b[33m", R: "\x1b[0m", y: "\x1b[38;2;200;190;90m", g: "\x1b[38;2;150;150;150m" },
|
||||
info= {
|
||||
name: __filename.slice(__filename.lastIndexOf("/")+1, __filename.lastIndexOf(".")),
|
||||
version: "1.2.1",
|
||||
description: "Helper for working with “packages” stored in GitHub releases.",
|
||||
config: `${__filename.slice(0, __filename.lastIndexOf("."))}.json`,
|
||||
folder: __filename.slice(0, __filename.lastIndexOf("/")+1),
|
||||
commands: [
|
||||
{
|
||||
cmd: "help", args: [ "--help", "-h" ],
|
||||
desc: "Shows this text"
|
||||
},
|
||||
{
|
||||
cmd: "config", args: [ "--config" ],
|
||||
desc: "Opens config file in terminal editor (defaults to vim)"
|
||||
},
|
||||
{
|
||||
cmd: "check", args: [ "--check", "-c" ],
|
||||
desc: "Shows/checks updates for registered packages"
|
||||
},
|
||||
{
|
||||
cmd: "update", args: [ "--update", "-u" ], param: "group",
|
||||
desc: "Installs lates versions of registered packages"
|
||||
},
|
||||
{
|
||||
cmd: "uninstall", args: [ "--uninstall", "-u" ], param: "package",
|
||||
desc: "Deletes downloaded file and moves package to the 'skip' group"
|
||||
},
|
||||
{
|
||||
cmd: "register", args: [ "--register", "--change" ], param: "package",
|
||||
desc: "Add package infos to internal list to be able installing/updating"
|
||||
},
|
||||
{
|
||||
cmd: "remove", args: [ "--remove" ], param: "package",
|
||||
desc: ([
|
||||
"Uninstall package if needed (see `-u`)",
|
||||
"And remove it from internal list (see `--config`)"
|
||||
]).join(". ")
|
||||
}
|
||||
],
|
||||
params: {
|
||||
group: ([
|
||||
"You can label each package to update only choosen one",
|
||||
"There are sereved options:",
|
||||
" - '' (empty): these packages are includes in all groups",
|
||||
" - 'all': in case of `--update` process all packages (except skipped)",
|
||||
" - 'skip': these packages are “uninstalled”",
|
||||
" No updates will be downloaded",
|
||||
"Group can be setted via '--register'"
|
||||
]).join(". "),
|
||||
package: ([
|
||||
"Represents package identificator, it is in fact GitHub repository path",
|
||||
"So, it schould be in the form `username/repository`"
|
||||
]).join(". ")
|
||||
}
|
||||
};
|
||||
printMain();
|
||||
const current= getCurrent(process.argv.slice(2));
|
||||
(function main_(){
|
||||
const { cmd }= current.command;
|
||||
if(!cmd) return Promise.resolve("No arguments (use `--help` for showing all oprions).");
|
||||
switch(cmd){
|
||||
case "help": return Promise.resolve(printHelp());
|
||||
case "config": return vim_(info.config);
|
||||
}
|
||||
const config= getConfig();
|
||||
switch(cmd){
|
||||
case "register": return register_(config);
|
||||
}
|
||||
if(!config.packages) return Promise.resolve("No packages yet!");
|
||||
switch(cmd){
|
||||
case "check": return check_(config);
|
||||
case "update": return update_(config);
|
||||
case "uninstall":
|
||||
case "remove":
|
||||
return uninstall_(cmd, config);
|
||||
}
|
||||
})()
|
||||
.then(function(message){
|
||||
if(message)
|
||||
log(1, `Operation '${current.command.cmd}' successfull: @s_${message}`);
|
||||
process.exit();
|
||||
})
|
||||
.catch(error);
|
||||
|
||||
async function uninstall_(cmd, config){
|
||||
const progress= [
|
||||
[ "Deleting file", "not needed" ],
|
||||
[ "Check out from updates", "yes" ],
|
||||
[ "Remove from packages list", "no" ]
|
||||
];
|
||||
const pkg_name= current.param;
|
||||
const pkg_index= config.packages.findIndex(({ repository })=> repository===pkg_name);
|
||||
if(pkg_index===-1) return "nothing to do (maybe typo)";
|
||||
|
||||
const pkg= config.packages[pkg_index];
|
||||
const { downloads }= pkg;
|
||||
if(downloads&&fs.existsSync(downloads)){
|
||||
try{ fs.unlinkSync(downloads); progress[0][1]= "done"; }
|
||||
catch (_){ progress[0][1]= colors.e+"error, try manually – "+downloads; }
|
||||
}
|
||||
Reflect.deleteProperty(pkg, "last_update");
|
||||
Reflect.set(pkg, "group", "skip");
|
||||
progress[1][1]= "done";
|
||||
if(cmd!=="remove") return gotoEnd();
|
||||
|
||||
const y= await promt_(`Are you realy want to remove package ${pkg.repository} (yes/no)`, "no");
|
||||
if(y!=="yes") return gotoEnd();
|
||||
|
||||
config.packages.splice(pkg_index, 1);
|
||||
progress[2][1]= "done";
|
||||
return gotoEnd();
|
||||
|
||||
function gotoEnd(){
|
||||
const o= progress.reduce((o, [ k, v ])=> Reflect.set(o, k, v)&&o, {});
|
||||
logSection(" ", pkg_name, o);
|
||||
save(config);
|
||||
}
|
||||
}
|
||||
function vim_(file){ return new Promise(function(resolve, reject){
|
||||
const cmd= spawn((process.env.EDITOR||"vim")+(process.platform==="win32"?".bat":""), [ file ], { stdio: 'inherit' });
|
||||
cmd.on('exit', e=> e ? reject("Editor error, try manually: "+file) : resolve("OK"));
|
||||
});}
|
||||
async function update_(config){
|
||||
const filter= current.param;
|
||||
const is_all= filter==="all";
|
||||
let updates= [];
|
||||
log(1, "Collecting packages to download:");
|
||||
for(const [
|
||||
i, { repository, last_update, group, file_name, exec, downloaded, tag_name_regex }
|
||||
] of Object.entries(config.packages)){
|
||||
if(group==="skip") continue;
|
||||
if(!is_all&&group&&filter!==group) continue;
|
||||
|
||||
const { tag_name, published_at, html_url, assets_url }= await githubRelease_(repository, tag_name_regex);
|
||||
const status= packageStatus(last_update, published_at);
|
||||
if(status!==3) continue;
|
||||
|
||||
const assets= await downloadJSON_(repository, assets_url);
|
||||
if(!assets.length){
|
||||
console.log(" Nothing to download: Visit "+html_url);
|
||||
continue;
|
||||
}
|
||||
|
||||
const options= assets.map(({ name, download_count, size })=>
|
||||
`${name} | size: ${Math.round(size/1048576)}MB | downloads: ${download_count}`);
|
||||
logSection(" ", " "+repository, {
|
||||
"Version": tag_name,
|
||||
"Url": html_url
|
||||
});
|
||||
logSection(" ", " Available assets:", options);
|
||||
const choose= await promt_(" Choose (empty for skip)", "");
|
||||
if(choose==="") continue;
|
||||
|
||||
const { browser_download_url: url, name: remote_name, size }= assets[choose];
|
||||
updates.push({
|
||||
index: i,
|
||||
file_name, exec, downloaded,
|
||||
repository, version: tag_name, last_update: published_at,
|
||||
url, remote_name, size
|
||||
});
|
||||
}
|
||||
if(!updates.length){
|
||||
log(2, "No packages in "+`group ${filter} needs updates.`);
|
||||
return Promise.resolve("nothing to update");
|
||||
}
|
||||
log(1, "Downloading:");
|
||||
return applySequentially_(updates, async function(todo){
|
||||
const to= todo.file_name ? info.folder+todo.file_name : (
|
||||
todo.downloaded ? todo.downloaded : info.folder+todo.remote_name);
|
||||
const d= await downloadFile_(to, todo);
|
||||
return Object.assign(todo, d);
|
||||
})
|
||||
.then(function(dones){
|
||||
log(1, "Finalizing:");
|
||||
let e= 0;
|
||||
for(const nth of dones){
|
||||
if(!nth.success){
|
||||
e+= 1;
|
||||
log(2, `${nth.repository}: @e_${nth.message}`);
|
||||
continue;
|
||||
}
|
||||
Object.assign(config.packages[nth.index], registerDownloads(nth));
|
||||
}
|
||||
save(config);
|
||||
const { length }= dones;
|
||||
const msg= `updated ${length-e} of ${length} packages.`;
|
||||
return e ? Promise.reject(msg) : Promise.resolve(msg);
|
||||
});
|
||||
}
|
||||
function registerDownloads({ repository, last_update, message: downloads, exec, version }){
|
||||
let msg= colors.s+"OK";
|
||||
if(exec==="yes"){
|
||||
try{ fs.chmodSync(downloads, 0o755); }
|
||||
catch(e){ msg= colors.e+"try manual `chmod+x` for '"+downloads+"'"; }
|
||||
}
|
||||
log(2, `${repository}: ${msg}`);
|
||||
return { last_update, downloads, version };
|
||||
}
|
||||
async function check_({ packages }){
|
||||
let updates= 0, skipped= 0;
|
||||
for(const { repository, name, version, last_update, group, tag_name_regex } of packages){
|
||||
const { tag_name, published_at }= await githubRelease_(repository, tag_name_regex);
|
||||
const status= packageStatus(last_update, published_at);
|
||||
updates+= status===3;
|
||||
const skip= group==="skip";
|
||||
skipped+= skip;
|
||||
log(2, `@g_${repository} [${group}]: `+( !version ? "not installed" : packageStatusText(status, skip) ));
|
||||
}
|
||||
const u= updates-skipped;
|
||||
const s= skipped ? ` (inc. skipped: ${updates})` : "";
|
||||
return (!u ? "" : colors.w)+u+" update(s) available"+s;
|
||||
}
|
||||
async function register_(config){
|
||||
const { param: repository }= current;
|
||||
if(!Reflect.has(config, "packages")) Reflect.set(config, "packages", []);
|
||||
const packages= Reflect.get(config, "packages");
|
||||
let local_id= packages.findIndex(p=> p.repository===repository);
|
||||
if(local_id===-1)
|
||||
local_id= packages.push({ repository })-1;
|
||||
const local= config.packages[local_id];
|
||||
const remote= await githubRepo_(repository) || {};
|
||||
|
||||
log(1, "Registering: "+repository);
|
||||
const spaces= " ";
|
||||
local.name= await promt_(spaces+"Name", local.name || remote.name || "");
|
||||
if(!local.description) local.description= remote.description;
|
||||
logLines(2, [
|
||||
"@g_Group info:",
|
||||
"- you can update specific packages by using their group name",
|
||||
"- There some reserved options:",
|
||||
" - '' (empty): will be included in all groups",
|
||||
" - 'skip': will be always skipped"
|
||||
]);
|
||||
local.group= await promt_(spaces+"Group", local.group || "");
|
||||
local.file_name= await promt_(spaces+"File Name", local.file_name || local.name.toLowerCase().replace(/\s/g, "-") || "");
|
||||
local.exec= await promt_(spaces+"Make executable (yes/no)", local.exec || "no");
|
||||
save(config);
|
||||
return `${repository}: saved`;
|
||||
}
|
||||
function packageStatusText(status, skip){
|
||||
const s= skip ? colors.R+"skipped – "+colors.g : "";
|
||||
switch(status){
|
||||
case 0: return s+"nothing to compare";
|
||||
case 1: return s+"@s_up-to-date";
|
||||
case 2: return s+"newer";
|
||||
case 3: return s+"@e_outdated/not instaled";
|
||||
}
|
||||
}
|
||||
function packageStatus(local, remote){
|
||||
if(!remote) return 0;
|
||||
if(!local) return 3;
|
||||
if(remote===local) return 1;
|
||||
return 2+(local<remote);
|
||||
}
|
||||
function logSection(spaces, name, data){
|
||||
console.log(spaces+name);
|
||||
for(const [ key, value ] of Object.entries(data))
|
||||
console.log(spaces.repeat(2)+colors.g+key+": "+value.replace(/@(\w)_/g, (_, m)=> colors[m])+colors.R);
|
||||
}
|
||||
function githubRelease_(repository, tag_name_regex= ""){
|
||||
return downloadJSON_(repository, "https://api.github.com/repos/"+repository+"/releases")
|
||||
.then(data=> data.find(function find({ draft, published_at, tag_name }){
|
||||
if(draft||!published_at) return false;
|
||||
if(!tag_name_regex) return true;
|
||||
return (new RegExp(tag_name_regex, 'g')).test(tag_name);
|
||||
})||{});
|
||||
}
|
||||
function githubRepo_(repository){ return downloadJSON_(repository, "https://api.github.com/repos/"+repository); }
|
||||
function promt_(q, def){
|
||||
const rl= readline.createInterface({ input: process.stdin, output: process.stdout });
|
||||
return new Promise(function(resolve){
|
||||
rl.question(q+": ", a=> { rl.close(); resolve(a); });
|
||||
rl.write(def);
|
||||
});
|
||||
}
|
||||
function getConfig(){
|
||||
let config;
|
||||
try{ config= JSON.parse(fs.readFileSync(info.config)); }
|
||||
catch(e){ config= {}; log(1, "@w_Missing or corrupted config file. Creates empty one."); }
|
||||
return config;
|
||||
}
|
||||
function save(config){
|
||||
return fs.writeFileSync(info.config, JSON.stringify(config, null, " "));
|
||||
}
|
||||
function getCurrent(args){
|
||||
let command, command_arg, param;
|
||||
const hasArg= arg=> ({ args })=> args.includes(arg);
|
||||
for(let i=0, { length }= args, arg; i<length; i++){
|
||||
arg= args[i];
|
||||
if(!command){
|
||||
command= info.commands.find(hasArg(arg));
|
||||
command_arg= arg;
|
||||
continue;
|
||||
}
|
||||
if(!command.param||typeof param!=="undefined")
|
||||
break;
|
||||
param= arg;
|
||||
}
|
||||
if(!command)
|
||||
command= { cmd: "" };
|
||||
if(command.param&&typeof param==="undefined")
|
||||
return error(`Missign arguments for '${command_arg}'.`);
|
||||
return { command, param };
|
||||
}
|
||||
function downloadJSON_(repository, url){
|
||||
return downloadText_(url)
|
||||
.then(function(data){
|
||||
try{
|
||||
const response= JSON.parse(data);
|
||||
if(Reflect.has(response, "message")) throw new Error(response.message);
|
||||
return Promise.resolve(JSON.parse(data));
|
||||
} catch(e){
|
||||
log(1, "Received data: "+data);
|
||||
log(1, "@e_"+e);
|
||||
return Promise.reject(`JSON from '${repository}' failed.`);
|
||||
}
|
||||
});
|
||||
}
|
||||
function downloadText_(url){
|
||||
return get_(url)
|
||||
.then(function(response){ return new Promise(function(resolve){
|
||||
let data= "";
|
||||
response.on("data", chunk=> data+= chunk);
|
||||
response.on("end", ()=> resolve(data));
|
||||
}); });
|
||||
}
|
||||
function downloadFile_(to, { url, repository, size }){
|
||||
const file= fs.createWriteStream(to);
|
||||
return get_(url)
|
||||
.then(r=> get_(r.headers.location))
|
||||
.then(function(response){ return new Promise(function(resolve){
|
||||
let progress= 0, pc_prev= 0, avg= 0;
|
||||
const start= new Date();
|
||||
const i= setInterval(function(){
|
||||
readline.clearLine(process.stdout);
|
||||
const pc= (100*progress/size).toFixed(2);
|
||||
if(!pc_prev) pc_prev= pc;
|
||||
else {
|
||||
avg= ((100-pc)/(60*(pc-pc_prev))).toFixed(2);
|
||||
pc_prev= 0;
|
||||
}
|
||||
const running= ((new Date()-start)/60000).toFixed(2);
|
||||
log(2, repository+": "+pc+"%"+` (end in ~${avg} mins, running ${running} mins)`);
|
||||
readline.moveCursor(process.stdout, 0, -1);
|
||||
}, 500);
|
||||
response.on('data', function(chunk){
|
||||
file.write(chunk);
|
||||
progress+= chunk.length;
|
||||
});
|
||||
response.on('end', function(){
|
||||
clearInterval(i);
|
||||
readline.clearLine(process.stdout);
|
||||
log(2, repository+": @s_OK");
|
||||
file.close(()=> resolve({ success: 1, message: to })); /* close() is async, call cb after close completes. */
|
||||
});
|
||||
}); })
|
||||
.catch(({ message })=> {
|
||||
fs.unlink(to); // Delete the file async. (But we don't check the result)
|
||||
return { success: 0, message };
|
||||
});
|
||||
}
|
||||
function get_(url){ return new Promise(function(resolve, reject){
|
||||
https.get(
|
||||
url,
|
||||
{ headers: { 'Cache-Control': 'no-cache', 'User-Agent': 'node' } },
|
||||
resolve
|
||||
).on("error", reject);
|
||||
});}
|
||||
function applySequentially_(input, pF){
|
||||
const data= [];
|
||||
let p= pF(input[0]);
|
||||
const tie= nth=> result_mth=> ( data.push(result_mth), pF(input[nth]) );
|
||||
for(let i= 1, { length }= input; i<length; i++)
|
||||
p= p.then(tie(i));
|
||||
return p.then(o=> (data.push(o), data));
|
||||
}
|
||||
function error(message){
|
||||
const help_text= `@w_See help using '${info.commands[0].args[0]}'.`;
|
||||
log(1, `@e_Error: ${message} ${help_text}`);
|
||||
return process.exit(1);
|
||||
}
|
||||
function printMain(){
|
||||
const { name, version, description }= info;
|
||||
log(1, `@w_${name}@${version}`);
|
||||
log(1, description);
|
||||
const cmds= info.commands.map(({args})=> args[0].replace("--", "")).join(", ");
|
||||
log(1, `@w_Usage: ${name} --[cmd] [param]`);
|
||||
log(2, `…cmd: ${cmds}`);
|
||||
log(2, "…param: Based on cmd\n");
|
||||
}
|
||||
function printHelp(){
|
||||
log(1, "@s_Help:");
|
||||
log(2, "Commands:");
|
||||
info.commands.forEach(({ args, param, desc })=> {
|
||||
const args_text= args.join("|");
|
||||
param= param ? " "+param : "";
|
||||
log(3, `@g_${args_text}@R_${param}`);
|
||||
logLines(4, desc);
|
||||
});
|
||||
log(2, "Params:");
|
||||
for(const [ param, desc ] of Object.entries(info.params)){
|
||||
log(3, `@g_${param}`);
|
||||
logLines(4, desc);
|
||||
}
|
||||
}
|
||||
function log(tab, text){
|
||||
return console.log(" ".repeat(tab)+text.replace(/@(\w)_/g, (_, m)=> colors[m])+colors.R);
|
||||
}
|
||||
function logLines(tab, multiline_text){
|
||||
if(!Array.isArray(multiline_text)) multiline_text= multiline_text.split(/(?<=\.) /g);
|
||||
return log(tab, multiline_text.join("\n"+" ".repeat(tab)));
|
||||
}
|
@ -1,238 +0,0 @@
|
||||
{
|
||||
"packages": [
|
||||
{
|
||||
"repository": "shiftkey/desktop",
|
||||
"name": "GitHub Desktop",
|
||||
"group": "dev",
|
||||
"file_name": "github-desktop",
|
||||
"exec": "yes",
|
||||
"description": "Fork of GitHub Desktop to support various Linux distributions",
|
||||
"last_update": "2024-03-31T17:49:36Z",
|
||||
"downloads": "/home/jaandrle/bin/github-desktop",
|
||||
"version": "release-3.3.12-linux2"
|
||||
},
|
||||
{
|
||||
"repository": "jaandrle/jaaCSS-cli",
|
||||
"name": "jaaCSS",
|
||||
"description": "EXPERIMENT – Helper for managing functional CSS classes",
|
||||
"group": "dev",
|
||||
"file_name": "jaaCSS.js",
|
||||
"exec": "yes",
|
||||
"downloads": "/home/jaandrle/bin/jaaCSS.js",
|
||||
"version": "v1.3.2",
|
||||
"last_update": "2022-09-02T13:33:16Z"
|
||||
},
|
||||
{
|
||||
"repository": "th-ch/youtube-music",
|
||||
"name": "youtube-music",
|
||||
"description": "YouTube Music Desktop App bundled with custom plugins (and built-in ad blocker / downloader)",
|
||||
"group": "nondev",
|
||||
"file_name": "youtube-music",
|
||||
"exec": "yes",
|
||||
"last_update": "2024-03-26T10:58:44Z",
|
||||
"downloads": "/home/jaandrle/bin/youtube-music",
|
||||
"version": "v3.3.5"
|
||||
},
|
||||
{
|
||||
"repository": "ArchGPT/insomnium",
|
||||
"name": "insomnium",
|
||||
"description": "Insomnium is a fast local API testing tool that is privacy-focused and 100% local. For testing GraphQL, REST, WebSockets and gRPC. This is a fork of Kong/insomnia",
|
||||
"group": "dev",
|
||||
"file_name": "insomnium",
|
||||
"exec": "yes",
|
||||
"last_update": "2023-11-13T10:03:28Z",
|
||||
"downloads": "/home/jaandrle/bin/insomnium",
|
||||
"tag_name_regex": "core@.*",
|
||||
"version": "core@0.2.3-a"
|
||||
},
|
||||
{
|
||||
"repository": "Kong/insomnia",
|
||||
"name": "insomnia",
|
||||
"description": "The open-source, cross-platform API client for GraphQL, REST, and gRPC.",
|
||||
"group": "skip",
|
||||
"file_name": "insomnia",
|
||||
"exec": "yes",
|
||||
"last_update": "2023-10-16T10:03:28Z",
|
||||
"downloads": "/home/jaandrle/bin/insomnia",
|
||||
"tag_name_regex": "core@.*",
|
||||
"version": "core@8.3.0"
|
||||
},
|
||||
{
|
||||
"repository": "rvpanoz/luna",
|
||||
"name": "luna",
|
||||
"description": "Manage npm dependencies through a modern UI.",
|
||||
"group": "skip",
|
||||
"file_name": "luna",
|
||||
"exec": "yes"
|
||||
},
|
||||
{
|
||||
"repository": "angela-d/wifi-channel-watcher",
|
||||
"name": "wifi-channel-watcher",
|
||||
"group": "skip",
|
||||
"file_name": "wifi-channel-watcher",
|
||||
"exec": "no",
|
||||
"description": "Monitor channel usage of neighboring routers & get an alert if your active channel is not optimal.\tTroubleshoot wifi without lifting a finger!"
|
||||
},
|
||||
{
|
||||
"repository": "vinceliuice/Tela-circle-icon-theme",
|
||||
"name": "Tela-circle-icon-theme",
|
||||
"description": "Tela-circle-icon-theme",
|
||||
"group": "themes",
|
||||
"file_name": "tela-circle-icon-theme.zip",
|
||||
"last_update": "2021-07-19T14:12:05Z",
|
||||
"exec": "no"
|
||||
},
|
||||
{
|
||||
"repository": "AppImage/AppImageKit",
|
||||
"name": "AppImageKit",
|
||||
"group": "skip",
|
||||
"file_name": "appimagekit",
|
||||
"exec": "yes",
|
||||
"description": "Package desktop applications as AppImages that run on common Linux-based operating systems, such as RHEL, CentOS, openSUSE, SLED, Ubuntu, Fedora, debian and derivatives. Join #AppImage on irc.freenode.net"
|
||||
},
|
||||
{
|
||||
"repository": "dynobo/normcap",
|
||||
"name": "NormCap",
|
||||
"description": "Switched to flatpak version | OCR powered screen-capture tool to capture information instead of images",
|
||||
"group": "skip",
|
||||
"file_name": "normcap",
|
||||
"exec": "yes",
|
||||
"last_update": "2023-12-12T22:23:37Z",
|
||||
"downloads": "/home/jaandrle/bin/normcap",
|
||||
"version": "v0.5.2"
|
||||
},
|
||||
{
|
||||
"repository": "upscayl/upscayl",
|
||||
"name": "upscayl",
|
||||
"description": "🆙 Upscayl - Free and Open Source AI Image Upscaler for Linux, MacOS and Windows built with Linux-First philosophy.",
|
||||
"group": "nondev",
|
||||
"file_name": "upscayl",
|
||||
"exec": "yes",
|
||||
"last_update": "2024-02-29T16:31:09Z",
|
||||
"downloads": "/home/jaandrle/bin/upscayl",
|
||||
"version": "v2.10.0"
|
||||
},
|
||||
{
|
||||
"repository": "RasmusLindroth/tut",
|
||||
"name": "tut",
|
||||
"description": "TUI for Mastodon with vim inspired keys",
|
||||
"group": "nondev",
|
||||
"file_name": "tut",
|
||||
"exec": "yes",
|
||||
"last_update": "2023-01-26T17:48:00Z",
|
||||
"downloads": "/home/jaandrle/bin/tut",
|
||||
"version": "2.0.1"
|
||||
},
|
||||
{
|
||||
"repository": "sunner/ChatALL",
|
||||
"name": "ChatALL",
|
||||
"description": " Concurrently chat with ChatGPT, Bing Chat, bard, Alpaca, Vincuna, Claude, ChatGLM, MOSS, iFlytek Spark, ERNIE and more, discover the best answers",
|
||||
"group": "skip",
|
||||
"file_name": "chatall",
|
||||
"exec": "yes",
|
||||
"last_update": "2023-09-30T14:08:00Z",
|
||||
"downloads": "/home/jaandrle/bin/chatall",
|
||||
"version": "v1.50.73"
|
||||
},
|
||||
{
|
||||
"repository": "jaandrle/bs",
|
||||
"name": "bs",
|
||||
"description": "The simplest possible build system using executables",
|
||||
"group": "dev",
|
||||
"file_name": "bs",
|
||||
"exec": "yes",
|
||||
"last_update": "2024-03-28T13:16:41Z",
|
||||
"downloads": "/home/jaandrle/bin/bs",
|
||||
"version": "v0.7.4"
|
||||
},
|
||||
{
|
||||
"repository": "h3poteto/fedistar",
|
||||
"name": "Fedistar",
|
||||
"description": "Multi-column Mastodon, Pleroma, and Friendica client for desktop",
|
||||
"group": "nondev",
|
||||
"file_name": "fedistar",
|
||||
"exec": "yes",
|
||||
"last_update": "2024-03-29T15:39:36Z",
|
||||
"downloads": "/home/jaandrle/bin/fedistar",
|
||||
"version": "v1.9.2"
|
||||
},
|
||||
{
|
||||
"repository": "ollama/ollama",
|
||||
"name": "ollama",
|
||||
"description": "Get up and running with Llama 2 and other large language models locally",
|
||||
"group": "ai",
|
||||
"file_name": "ollama",
|
||||
"exec": "yes",
|
||||
"last_update": "2024-03-10T02:24:04Z",
|
||||
"downloads": "/home/jaandrle/bin/ollama",
|
||||
"version": "v0.1.29"
|
||||
},
|
||||
{
|
||||
"repository": "neovim/neovim",
|
||||
"name": "neovim",
|
||||
"tag_name_regex": "v.*",
|
||||
"description": "Vim-fork focused on extensibility and usability",
|
||||
"group": "dev-test",
|
||||
"file_name": "nvim",
|
||||
"exec": "yes",
|
||||
"downloads": "/home/jaandrle/bin/nvim",
|
||||
"version": "v0.9.5",
|
||||
"last_update": "2023-12-30T13:31:47Z"
|
||||
},
|
||||
{
|
||||
"repository": "viarotel-org/escrcpy",
|
||||
"name": "Escrcpy",
|
||||
"description": "📱 Graphical Scrcpy to display and control Android, devices powered by Electron. | 使用图形化的 Scrcpy 显示和控制您的 Android 设备,由 Electron 驱动。",
|
||||
"group": "dev",
|
||||
"file_name": "escrcpy",
|
||||
"exec": "yes",
|
||||
"last_update": "2024-03-29T03:30:14Z",
|
||||
"downloads": "/home/jaandrle/bin/escrcpy",
|
||||
"version": "v1.17.8"
|
||||
},
|
||||
{
|
||||
"repository": "drovp/drovp",
|
||||
"name": "drovp",
|
||||
"description": "Desktop app for encoding, converting, upscaling, and much more.",
|
||||
"group": "dev-test",
|
||||
"file_name": "drovp",
|
||||
"exec": "yes",
|
||||
"last_update": "2023-12-06T11:30:02Z",
|
||||
"downloads": "/home/jaandrle/bin/drovp",
|
||||
"version": "0.8.0"
|
||||
},
|
||||
{
|
||||
"repository": "janhq/jan",
|
||||
"name": "Jan",
|
||||
"description": "Jan is an open source alternative to ChatGPT that runs 100% offline on your computer",
|
||||
"group": "ai",
|
||||
"file_name": "jan",
|
||||
"exec": "yes",
|
||||
"last_update": "2024-03-11T06:34:40Z",
|
||||
"downloads": "/home/jaandrle/bin/jan",
|
||||
"version": "v0.4.8"
|
||||
},
|
||||
{
|
||||
"repository": "Bin-Huang/chatbox",
|
||||
"name": "Chatbox",
|
||||
"description": "Chatbox is a desktop client for ChatGPT, Claude and other LLMs, available on Windows, Mac, Linux",
|
||||
"group": "ai",
|
||||
"file_name": "Chatbox",
|
||||
"exec": "yes",
|
||||
"last_update": "2024-03-15T15:58:59Z",
|
||||
"downloads": "/home/jaandrle/bin/Chatbox",
|
||||
"version": "v1.3.1"
|
||||
},
|
||||
{
|
||||
"repository": "Helium314/HeliBoard",
|
||||
"name": "HeliBoard",
|
||||
"description": "Customizable and privacy-conscious open-source keyboard",
|
||||
"group": "android",
|
||||
"file_name": "heliboard.apk",
|
||||
"exec": "no",
|
||||
"last_update": "2024-03-31T20:11:03Z",
|
||||
"downloads": "/home/jaandrle/bin/heliboard.apk",
|
||||
"version": "v1.0"
|
||||
}
|
||||
]
|
||||
}
|
@ -34,10 +34,16 @@
|
||||
*/
|
||||
import { join } from "node:path";
|
||||
const path_config= $.xdg.config`github-releases`;
|
||||
const path_config_json= join(path_config, "config.json");
|
||||
const path_config_lock= join(path_config, "lock");
|
||||
const paths= {
|
||||
/** config file path — JSON stringify of {@link Config} */ config: join(path_config, "config.json"),
|
||||
/** path to lock file to prevent multiple instances */ lock: join(path_config, "lock"),
|
||||
};
|
||||
const path_temp= $.xdg.temp`github-releases.json`;
|
||||
const url_api= "https://api.github.com/repos/"; // "https://ungh.cc/repos/";
|
||||
let url_api= "github";
|
||||
const urls_api= {
|
||||
github: "https://api.github.com/repos/",
|
||||
ungh: "https://ungh.cc/repos/"
|
||||
};
|
||||
const url_download= "https://glare.now.sh/"; // https://github.com/Contextualist/glare
|
||||
const css= echo.css`
|
||||
.pkg { color: lightcyan; }
|
||||
@ -48,43 +54,95 @@ const css= echo.css`
|
||||
`;
|
||||
|
||||
$.api()
|
||||
.version("2.0.0")
|
||||
.version("2.2.0")
|
||||
.describe("Helper for working with “packages” stored in GitHub releases.")
|
||||
.command("config [mode]", [ "Config (file), use `mode` with these options:",
|
||||
.option("--verbose", "Verbose output (WIP)")
|
||||
.option("--group, -G", "Filter by group (not awaiable for noGRA)")
|
||||
.option("--repository, -R", "Filter by repository (not awaiable for noGRA)")
|
||||
.option("--api", [ "Choose API URL",
|
||||
"- GitHub (default): https://api.github.com/repos/",
|
||||
"- Ungh: https://ungh.cc/repos/", "(not awaiable for noGRA)" ], "github")
|
||||
.command("unlock", "[noGRA] DANGER: Removes lock file. Use only if you know what you are doing!")
|
||||
.action(function(){
|
||||
s.rm(paths.lock);
|
||||
})
|
||||
.command("config [mode]", [ "[noGRA] Config (file), use `mode` with these options:",
|
||||
"- `edit`: opens config file in terminal editor using `$EDITOR` (defaults to vim)",
|
||||
"- `path`: prints path to config file"
|
||||
])
|
||||
.action(async function(mode= "path"){
|
||||
switch(mode){
|
||||
case "path": echo(path_config_json); break;
|
||||
case "path": echo(paths.config); break;
|
||||
case "edit":
|
||||
const editor= $.env.EDITOR || "vim";
|
||||
await s.runA`${editor} ${path_config_json}`.pipe(process.stdout);
|
||||
await s.runA`${editor} ${paths.config}`.pipe(process.stdout);
|
||||
break;
|
||||
default:
|
||||
echo(`Unknown mode: '${mode}'. See '--help' for details.`);
|
||||
}
|
||||
$.exit(0);
|
||||
})
|
||||
.command("edit <repository>", "Edit “package” information")
|
||||
.alias("add")
|
||||
.action(async function(repository){
|
||||
if(!repository || !repository.includes("/"))
|
||||
$.error(`Invalid repository: '${repository}'. Repository must be in the form '<owner>/<repo>'.`);
|
||||
const config= /** @type {Config} */ ( readConfig() );
|
||||
const i= config.packages.findIndex(r=> r.repository===repository);
|
||||
echo(repository + ` — ${i==-1 ? "New" : "Edit"} package:`);
|
||||
echo(`Use <tab> to autocomplete${i===-1 ? "" : " and empty to keep current value"}.`);
|
||||
echo("");
|
||||
const pkg= config.packages[i] || { repository, group: "" };
|
||||
const groups= [ ...new Set(config.packages.map(r=> r.group)) ];
|
||||
const q= (question, initial, ...c)=> {
|
||||
const completions= [ ...new Set([initial, ...c.flat()]) ].filter(Boolean);
|
||||
if(initial) question+= ` (current \`${initial}\`)`;
|
||||
question= echo.format("%c"+question, css.pkg);
|
||||
return s.read({ "-p": question+": ", completions }).then(pipe(
|
||||
value=> value || initial,
|
||||
value=> value ? value : $.error(`Missing '${question}'.`)
|
||||
));
|
||||
};
|
||||
|
||||
try{
|
||||
const name= await q("Name", pkg.name);
|
||||
echo("(i) use `skip` as part of the group to skip it during checking/updating (“just register package”).");
|
||||
const group= await q("Group", pkg.group, groups);
|
||||
const { description: description_remote }= await fetch(urls_api[url_api]+repository).then(r=> r.json()).catch(_=> ({}));
|
||||
const description= await q("Description", pkg.description, description_remote);
|
||||
const file_name= await q("File name", pkg.file_name, repository.split("/"));
|
||||
const downloads= config.target+file_name;
|
||||
const exec= await q("Is executable", pkg.exec, [ "yes", "no" ]);
|
||||
echo("(i) The glare is used to determine the right file to download. It is regular expression.");
|
||||
const glare= await q("Glare", pkg.glare);
|
||||
|
||||
const pkg_edit= Object.assign({}, pkg,
|
||||
{ repository, name, description, group, file_name, exec, downloads, glare });
|
||||
config.packages[i===-1 ? config.packages.length : i]= pkg_edit;
|
||||
s.echo(JSON.stringify(config, null, "\t")).to(paths.config);
|
||||
echo(`%cSaved into config file '${paths.config}'.`, css.ok);
|
||||
$.exit(0);
|
||||
} catch(e){
|
||||
if(e instanceof $.Error) echo("%c"+e, css.err);
|
||||
else echo();
|
||||
$.exit(1);
|
||||
}
|
||||
})
|
||||
.command("ls", [ "Lists registered packages",
|
||||
"Repositories marked with `-` signifies that the package is in the 'skip' group.",
|
||||
"These are registered by this script but not managed by it (updates, etc).",
|
||||
"Repositories marked with `+` signify that updates of the package are checked."
|
||||
])
|
||||
.option("--group, -G", "Filter by group")
|
||||
.option("--repository, -R", "Filter by repository")
|
||||
.action(function(filter){
|
||||
const config = readConfig();
|
||||
for(const { repository, version, description, group } of grepPackages(config, filter))
|
||||
if(group!=="skip")
|
||||
if(group && !group.includes("skip"))
|
||||
echo(`+ %c${repository}%c@${version ? version : "—"}: %c${description}`, css.pkg, css.unset, css.skip);
|
||||
else
|
||||
echo(`- %c${repository}: ${description}`, css.skip);
|
||||
$.exit(0);
|
||||
})
|
||||
.command("check", "Shows/checks updates for registered packages")
|
||||
.option("--group, -G", "Filter by group")
|
||||
.option("--repository, -R", "Filter by repository")
|
||||
.option("--cache", "Use cache [yes, no]", "yes")
|
||||
.action(async function({ cache, ...filter }){
|
||||
const config = readConfig();
|
||||
@ -95,20 +153,17 @@ $.api()
|
||||
$.exit(0);
|
||||
})
|
||||
.command("update", "Updates registered packages")
|
||||
.option("--group, -G", "Filter by group")
|
||||
.option("--repository, -R", "Filter by repository")
|
||||
.action(async function(filter){
|
||||
if(s.test("-f", path_config_lock))
|
||||
return $.error(`The lock file '${path_config_lock}' already exists! Check if some other instance is running.`);
|
||||
s.touch(path_config_lock);
|
||||
if(s.test("-f", paths.lock))
|
||||
return $.error(`The lock file '${paths.lock}' already exists! Check if some other instance is running.`);
|
||||
s.touch(paths.lock);
|
||||
const config = readConfig();
|
||||
const results= await check(grepPackages(config, filter));
|
||||
const start= Date.now();
|
||||
let done= 0;
|
||||
let todo= [];
|
||||
echo("Collecting packages to update…");
|
||||
for(const { status, value } of results){
|
||||
if(status!==3 || value.local.group==="skip") continue;
|
||||
if(status!==3 || (value.local.group || "skip").includes("skip")) continue;
|
||||
echo("%c"+value.local.repository, css.pkg);
|
||||
todo.push(download(
|
||||
value,
|
||||
@ -127,15 +182,15 @@ $.api()
|
||||
echo("Updating packages completed:");
|
||||
for (const { status, value, reason } of updates) {
|
||||
if(status==="rejected"){
|
||||
echo("%c✗ "+reason.local.repository+": %c"+reason.err, css.err);
|
||||
echo("%c✗ TBD reason.local.repository: %c"+reason.err, css.err);
|
||||
continue;
|
||||
}
|
||||
const { local, remote }= value;
|
||||
echo("%c✓ "+local.repository+"%c@"+remote.tag_name, css.ok, css.skip);
|
||||
}
|
||||
s.echo(JSON.stringify(config, null, "\t")).to(path_config_json);
|
||||
s.echo(JSON.stringify(config, null, "\t")).to(paths.config);
|
||||
}
|
||||
s.rm(path_config_lock);
|
||||
s.rm(paths.lock);
|
||||
$.exit(0);
|
||||
})
|
||||
.parse();
|
||||
@ -162,17 +217,23 @@ async function download(value, onprogress, target){
|
||||
return value;
|
||||
}
|
||||
|
||||
function grepPackages({ packages }, { group, repository }){
|
||||
function grepPackages({ packages }, { group, repository, api, verbose }){
|
||||
if(api && api!==url_api && urls_api.hasOwnProperty(api))
|
||||
url_api= api;
|
||||
if(verbose)
|
||||
echo(`Using API: ${url_api} (${urls_api[url_api]})`);
|
||||
const f= {};
|
||||
let is_filter= false;
|
||||
if(group){ is_filter= true; f.group= group; }
|
||||
if(repository){ is_filter= true; f.repository= repository; }
|
||||
if(verbose)
|
||||
echo("Filter:", f);
|
||||
if(!is_filter) return packages;
|
||||
return packages.filter(r=> Object.keys(f).every(k=> r[k]===f[k]));
|
||||
}
|
||||
function echoPkgStatus(status, { local, remote }){
|
||||
let status_css, status_text;
|
||||
if(local.group==="skip"){
|
||||
if(local.group && local.group.includes("skip")){
|
||||
status_text= "skipped";
|
||||
status_css= "skip";
|
||||
} else {
|
||||
@ -184,7 +245,7 @@ function echoPkgStatus(status, { local, remote }){
|
||||
}
|
||||
/**
|
||||
* @param {Config.packages} packages
|
||||
* @return {{ status: 0|1|2|3, value: { remote: GitHubRelease, local: ConfigPackage } }}
|
||||
* @return {Promise<{ status: 0|1|2|3, value: { remote: GitHubRelease, local: ConfigPackage } }>}
|
||||
* */
|
||||
async function check(packages, cache){
|
||||
return (await pipe(
|
||||
@ -211,7 +272,7 @@ function packageStatus({ last_update: local }, { published_at: remote }){
|
||||
async function fetchRelease({ repository, tag_name_regex }, cache){
|
||||
const headers= { 'User-Agent': 'node' };
|
||||
if(cache==="no") headers['Cache-Control'] = 'no-cache';
|
||||
const url= url_api+repository+"/releases";
|
||||
const url= urls_api[url_api]+repository+"/releases";
|
||||
const releases= await fetch(url, { headers }).then(res=> res.json());
|
||||
if(releases.message) return $.error(url+": "+releases.message);
|
||||
|
||||
@ -231,9 +292,9 @@ async function fetchRelease({ repository, tag_name_regex }, cache){
|
||||
}
|
||||
|
||||
function readConfig(){
|
||||
if(!s.test("-f", path_config_json)) return { packages: [] };
|
||||
if(!s.test("-f", paths.config)) return { packages: [] };
|
||||
const out= Object.assign({ target: "~/bin/" },
|
||||
s.cat(path_config_json).xargs(JSON.parse));
|
||||
s.cat(paths.config).xargs(JSON.parse));
|
||||
if(out.target.startsWith("~/")) out.target= $.xdg.home(out.target.slice(2));
|
||||
return out;
|
||||
}
|
||||
|
@ -1,9 +0,0 @@
|
||||
#!/bin/bash
|
||||
if [[ $(mount | grep OneDrive) ]]; then
|
||||
fusermount -uz ~/Vzdálené/OneDrive
|
||||
notify-send -i system-file-manager "OneDrive disk ODPOJEN"
|
||||
else
|
||||
rclone --vfs-cache-mode full mount "onedrive": ~/Vzdálené/OneDrive &
|
||||
dolphin ~/Vzdálené/OneDrive/ &
|
||||
notify-send -i system-file-manager "OneDrive disk PŘIPOJEN"
|
||||
fi
|
@ -1,10 +0,0 @@
|
||||
[ ! -r ~/.config/pocketshaddrc ] && echo "\`~/.config/pocketshaddrc\` not found" && exit 1
|
||||
. ~/.config/pocketshaddrc
|
||||
|
||||
curl -sS -X POST \
|
||||
-F "url=$1" \
|
||||
-F "title=$2" \
|
||||
-F "consumer_key=$CONSUMER_KEY" \
|
||||
-F "access_token=$ACCESS_TOKEN" \
|
||||
https://getpocket.com/v3/add \
|
||||
> /dev/null
|
@ -2,8 +2,8 @@
|
||||
/* jshint esversion: 11,-W097, -W040, module: true, node: true, expr: true, undef: true *//* global echo, $, pipe, s, fetch, cyclicLoop */
|
||||
|
||||
$.api("")
|
||||
.version("2024-03-18")
|
||||
.command("silicon [file]", [
|
||||
.version("2024-09-05")
|
||||
.command("silicon <file>", [
|
||||
"Generovat obrázek s kódem pro sdílení na sociálních sítích. (alternativa k Carbon)",
|
||||
"Toto je jen drobný wrapper s mými defaultními parametry.",
|
||||
"Další nápověda viz `silicon --help`.",
|
||||
|
@ -78,7 +78,7 @@ function removePack(path){
|
||||
s.cd(dirs.pack);
|
||||
s.$("-V").rm("-rf", path);
|
||||
const root= dirs.pack+path.split("/")[0];
|
||||
const { code, stdout }= s.$().find(root+"/*/*");
|
||||
const { code, stdout }= s.$("-Sf").find(root+"/*/*");
|
||||
if(!code) echo(stdout);
|
||||
else if(s.test("-d", root))
|
||||
s.$("-V").rm("-rf", root);
|
||||
|
@ -1,6 +1,20 @@
|
||||
#!/bin/bash
|
||||
# heredoc
|
||||
read -r -d '' JS <<JS
|
||||
const dir= '/home/jaandrle/Obrázky/Bing Image Of The Day/';
|
||||
const img= 'horizontally.jpg';
|
||||
desktops()
|
||||
.filter(d=> d.wallpaperPlugin==='org.kde.image')
|
||||
.forEach(d=> {
|
||||
d.currentConfigGroup= ['Wallpaper', 'org.kde.image', 'General'];
|
||||
if(!d.readConfig('Image').endsWith(img)) return;
|
||||
d.writeConfig('Image', 'file://' + dir + 'now.jpg');
|
||||
d.writeConfig('Image', 'file://' + dir + img);
|
||||
});
|
||||
JS
|
||||
nm-online -x -q && \
|
||||
node "/home/jaandrle/.nvm/versions/node/$(node --version)/bin/nodejsscript" /home/jaandrle/bin/§wallpaper_WCPOTD.mjs pull && \
|
||||
cd "/home/jaandrle/Obrázky/Bing Image Of The Day" && \
|
||||
qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.evaluateScript 'const d= desktops().filter(d=> d.wallpaperPlugin==="de.unkn0wn.htmlwallpaper")[0];const url= (i= "")=> `file:///home/jaandrle/Obr%C3%A1zky/Bing%20Image%20Of%20The%20Day/index${i}.html`;d.currentConfigGroup= Array("Wallpaper", "de.unkn0wn.htmlwallpaper","General");d.writeConfig("DisplayPage", url("1"));d.writeConfig("DisplayPage", url());'
|
||||
# convert now.jpg prev.jpg +append horizontally.jpg
|
||||
qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.evaluateScript "$JS"
|
||||
# plasma-apply-wallpaperimage '/home/jaandrle/Obrázky/Bing Image Of The Day/now.jpg' && plasma-apply-wallpaperimage '/home/jaandrle/Obrázky/Bing Image Of The Day/horizontally.jpg'
|
||||
# cd "/home/jaandrle/Obrázky/Bing Image Of The Day" && \
|
||||
# qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.evaluateScript 'const d= desktops().filter(d=> d.wallpaperPlugin==="de.unkn0wn.htmlwallpaper")[0];const url= (i= "")=> `file:///home/jaandrle/Obr%C3%A1zky/Bing%20Image%20Of%20The%20Day/index${i}.html`;d.currentConfigGroup= Array("Wallpaper", "de.unkn0wn.htmlwallpaper","General");d.writeConfig("DisplayPage", url("1"));d.writeConfig("DisplayPage", url());' && \
|
||||
|
@ -9,7 +9,7 @@ const path_home= $.xdg.home`Obrázky/Bing Image Of The Day/`;
|
||||
const path_info= join(path_home, "images.json");
|
||||
|
||||
$.api()
|
||||
.version("2024-06-17")
|
||||
.version("2025-04-02")
|
||||
.command("pull", "Pull new/today image(s)")
|
||||
.action(async function pull(){
|
||||
const images= {
|
||||
@ -18,15 +18,21 @@ $.api()
|
||||
};
|
||||
const paths= await downloadImages(images);
|
||||
updateHTML(images);
|
||||
convert(paths);
|
||||
pipe(
|
||||
images=> Object.entries(images)
|
||||
.reduce((acc, [ key, { caption } ])=>
|
||||
Reflect.set(acc, key, caption) && acc,
|
||||
{}),
|
||||
images=> JSON.stringify(images, null, "\t"),
|
||||
s.echo
|
||||
)(images).to(path_info);
|
||||
const images_save= Object.entries(images)
|
||||
.reduce((acc, [ key, { caption } ])=>
|
||||
Reflect.set(acc, key, caption) && acc,
|
||||
{});
|
||||
convert(paths, images_save);
|
||||
s.echo(JSON.stringify(images_save, null, "\t")).to(path_info);
|
||||
newPanel(images_save.now);
|
||||
$.exit(0);
|
||||
})
|
||||
.command("redraw")
|
||||
.action(function redraw(){
|
||||
const paths= [ "now", "prev" ].map(key=> join(path_home, `${key}.jpg`));
|
||||
const images= s.cat(path_info).xargs(JSON.parse);
|
||||
convert(paths, images);
|
||||
newPanel(images.now);
|
||||
$.exit(0);
|
||||
})
|
||||
.command("status")
|
||||
@ -37,16 +43,42 @@ $.api()
|
||||
$.exit(0);
|
||||
})
|
||||
.parse();
|
||||
function newPanel(caption){
|
||||
const link= `<a href="https://commons.wikimedia.org/wiki/Template:Potd/${dateISO(0)} (cs)">(i)</a>`;
|
||||
s.sed("-i", /\<aside\>.*?\<\/aside\>/, `<aside>${link} ${caption}</aside>`, join(path_home, "Nový panel.html"));
|
||||
}
|
||||
/** @typedef {{ url: string, caption: string }} T_response */
|
||||
/** @typedef {Record<"now"|"prev",T_response>} T_images */
|
||||
/** @param {Record<"now"|"prev",string>} paths */
|
||||
function convert(paths){
|
||||
function convert(paths, images){
|
||||
const resize_to= "1920x1080";
|
||||
|
||||
paths= Object.values(paths);
|
||||
const target= join(path_home, "horizontally.jpg");
|
||||
const params= `-resize ${resize_to}^ -gravity center -extent ${resize_to}`.split(" ");
|
||||
const caption= (position, text)=> [
|
||||
"convert",
|
||||
`"${target}"`,
|
||||
"\\(",
|
||||
"-pointsize", "12",
|
||||
"-background", "transparent",
|
||||
"-fill", "white",
|
||||
"-family", `"Ubuntu Mono"`,
|
||||
"-weight", "Bold",
|
||||
"-gravity", "center",
|
||||
"-bordercolor", '"rgba(0,0,0,0.3)"',
|
||||
"-border", "10",
|
||||
"-size", "500x",
|
||||
`caption:"${text}"`,
|
||||
"\\)",
|
||||
"-gravity", position,
|
||||
"-geometry", "+0+0",
|
||||
"-composite",
|
||||
`"${target}"`,
|
||||
].join(" ");
|
||||
s.run`convert ${paths} ${params} +append ${target}`;
|
||||
s.run(caption("southwest", images.now));
|
||||
s.run(caption("southeast", images.prev));
|
||||
}
|
||||
import { writeFileSync } from "node:fs";
|
||||
/** @param {T_images} images */
|
||||
@ -70,8 +102,15 @@ async function getImagePath(shift= 0){
|
||||
prop: "wikitext",
|
||||
text: `{{Potd/${date}}}`,
|
||||
});
|
||||
const pluckCaption= response=> response.expandtemplates.wikitext;
|
||||
const caption_fallback= await fetchGet({
|
||||
action: "expandtemplates",
|
||||
prop: "wikitext",
|
||||
text: `{{Potd/${date} (en)}}`,
|
||||
}).then(pluckCaption);
|
||||
const caption= pipe(
|
||||
response=> response.expandtemplates.wikitext,
|
||||
pluckCaption,
|
||||
caption=> caption !== `[[:Template:Potd/${date} (cs)]]` ? caption : caption_fallback,
|
||||
caption=> caption.replace(/\[\[.*?\]\]/g, m=> m.slice(2, -2).split("|").reverse()[0]),
|
||||
caption=> caption.replace(/''(.*?)''/g, "„$1”"),
|
||||
)(await fetchGet({
|
||||
|
Reference in New Issue
Block a user