⚡ Mainly because os (re)instalation TUXEDO OS 3
This commit is contained in:
parent
ded3151a67
commit
f3bf9e0612
@ -89,7 +89,7 @@ function jaaENV {
|
|||||||
|
|
||||||
local chP="\[\033[0;35m\]" #purple
|
local chP="\[\033[0;35m\]" #purple
|
||||||
local chW="\[\033[00m\]" #white
|
local chW="\[\033[00m\]" #white
|
||||||
export PS1_jaaENV="${chP}⋮${chW}"
|
export PS1_jaaENV="${chP}¦${chW}"
|
||||||
|
|
||||||
if [ ! -z ${ANDROID_SDK_ROOT_BAK+x} ]; then
|
if [ ! -z ${ANDROID_SDK_ROOT_BAK+x} ]; then
|
||||||
export ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT_BAK
|
export ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT_BAK
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
# IMPORT IN `$HOME/.profile`
|
# IMPORT IN `$HOME/.profile`
|
||||||
export ANDROID_HOME_BAK="$HOME/.local/share/umake/android/android-studio"
|
export ANDROID_HOME_BAK="$HOME/.local/share/JetBrains/Toolbox/apps/android-studio/"
|
||||||
export ANDROID_SDK_ROOT="$HOME/.local/share/umake/android/android-studio-sdk"
|
export ANDROID_SDK_ROOT="$HOME/Android/Sdk"
|
||||||
export PATH=$PATH:$ANDROID_SDK_ROOT/tools/
|
|
||||||
export PATH=$PATH:$ANDROID_SDK_ROOT/platform-tools/
|
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/
|
export PATH=$PATH:$ANDROID_SDK_ROOT/emulator/
|
||||||
|
8
.bashrc
8
.bashrc
@ -11,10 +11,8 @@ shopt -s expand_aliases
|
|||||||
[ -f $BASH_DOTFILES/.bash_jaaENV ] && . $BASH_DOTFILES/.bash_jaaENV
|
[ -f $BASH_DOTFILES/.bash_jaaENV ] && . $BASH_DOTFILES/.bash_jaaENV
|
||||||
[ -f $BASH_DOTFILES/.bash_sdkman ] && . $BASH_DOTFILES/.bash_sdkman
|
[ -f $BASH_DOTFILES/.bash_sdkman ] && . $BASH_DOTFILES/.bash_sdkman
|
||||||
[ -f $BASH_DOTFILES/.bash_nvm ] && . $BASH_DOTFILES/.bash_nvm
|
[ -f $BASH_DOTFILES/.bash_nvm ] && . $BASH_DOTFILES/.bash_nvm
|
||||||
# Install Ruby Gems to ~/.local/share/gems
|
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 GEM_HOME="$HOME/.local/share/gems"
|
export PATH="$HOME/.local/bin:$PATH"
|
||||||
export PATH="$HOME/.local/share/gems/bin:$HOME/.local/bin:$PATH"
|
|
||||||
. "$HOME/.cargo/env" # https://docs.astral.sh/uv/
|
|
||||||
[ -f $BASH_DOTFILES/.bash_completions ] && . $BASH_DOTFILES/.bash_completions # for Vim
|
[ -f $BASH_DOTFILES/.bash_completions ] && . $BASH_DOTFILES/.bash_completions # for Vim
|
||||||
|
|
||||||
[[ $- != *i* ]] && return # If not running interactively, don't do anything
|
[[ $- != *i* ]] && return # If not running interactively, don't do anything
|
||||||
@ -23,7 +21,7 @@ export PATH="$HOME/.local/share/gems/bin:$HOME/.local/bin:$PATH"
|
|||||||
set -o vi # VIM mode for bash
|
set -o vi # VIM mode for bash
|
||||||
bind -m vi-command 'Control-l: clear-screen'
|
bind -m vi-command 'Control-l: clear-screen'
|
||||||
bind -m vi-insert '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 \"col -b | vim --appimage-extract-and-run --not-a-term -c 'set ft=man ts=8 nomod nolist noma' -\""
|
||||||
shopt -s checkwinsize # dynamic columns update after every cmd
|
shopt -s checkwinsize # dynamic columns update after every cmd
|
||||||
|
|
||||||
## History
|
## History
|
||||||
|
@ -138,8 +138,8 @@ sidebar_page=3
|
|||||||
pref_main_project_session=true
|
pref_main_project_session=true
|
||||||
use_native_windows_dialogs=false
|
use_native_windows_dialogs=false
|
||||||
treeview_position=226
|
treeview_position=226
|
||||||
msgwindow_position=755
|
msgwindow_position=710
|
||||||
geometry=1280;26;1277;1026;0;
|
geometry=321;29;1275;1020;0;
|
||||||
use_native_dialogs=true
|
use_native_dialogs=true
|
||||||
|
|
||||||
[tools]
|
[tools]
|
||||||
@ -174,7 +174,7 @@ colour_fore=#DEDDDA
|
|||||||
colour_back=#2B2B2B
|
colour_back=#2B2B2B
|
||||||
send_cmd_prefix=
|
send_cmd_prefix=
|
||||||
send_selection_unsafe=false
|
send_selection_unsafe=false
|
||||||
last_dir=/home/jaandrle/Vzdálené/GitHub/Facilitator-App-Native
|
last_dir=/home/jaandrle
|
||||||
|
|
||||||
[build-menu]
|
[build-menu]
|
||||||
number_ft_menu_items=0
|
number_ft_menu_items=0
|
||||||
@ -221,13 +221,14 @@ position_fif_y=-1
|
|||||||
[plugins]
|
[plugins]
|
||||||
load_plugins=true
|
load_plugins=true
|
||||||
custom_plugin_path=
|
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]
|
[project]
|
||||||
session_file=
|
session_file=
|
||||||
project_file_path=/home/jaandrle/Dokumenty/Projekty/geany
|
project_file_path=/home/jaandrle/Dokumenty/Projekty/geany
|
||||||
|
|
||||||
[files]
|
[files]
|
||||||
recent_files=/home/jaandrle/Vzdálené/GitHub/dcp-fe-container-certifedpassport/package-lock.json;/home/jaandrle/Vzdálené/GitHub/dcp-fe-container-certifedpassport/package.json;/home/jaandrle/Vzdálené/GitHub/dcp-fe-container-certifedpassport/bs/test;/home/jaandrle/Vzdálené/GitHub/dcp-fe-container-certifedpassport/src/api/auth.ts;/home/jaandrle/Vzdálené/GitHub/dcp-fe-container-certifedpassport/src/core/appState.ts;/home/jaandrle/Vzdálené/GitHub/dcp-fe-container-certifedpassport/bs/dev/mock;/home/jaandrle/Vzdálené/GitHub/dcp-fe-container-certifedpassport/bs/localhost;/home/jaandrle/Vzdálené/GitHub/dcp-fe-container-certifedpassport/src/index.tsx;/home/jaandrle/Vzdálené/GitHub/dcp-fe-container-certifedpassport/staticwebapp.config.ts;/home/jaandrle/Vzdálené/GitHub/dcp-fe-container-certifedpassport/bs/README.md;
|
recent_files=/home/jaandrle/Vzdálené/GitHub/dcp-fe-container-certifedpassport/src/app/stamps/index.tsx;/home/jaandrle/Vzdálené/GitHub/bs-repo/src/completion.js;/home/jaandrle/.local/share/JetBrains/Toolbox/apps/android-studio/Install-Linux-tar.txt;/media/jaandrle/neon/home/jaandrle/.local/share/umake/android/android-studio/product-info.json;/home/jaandrle/.profile;/home/jaandrle/bin/README.md;/home/jaandrle/Vzdálené/GitHub/deka-dom-el/package.json;/media/jaandrle/neon/home/jaandrle/Vzdálené/ftp/dhlcnetworkcom.ftp;/home/jaandrle/README.md;/home/jaandrle/.config/Seafile/Seafile Client.conf;
|
||||||
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;
|
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
|
current_page=0
|
||||||
|
FILE_NAME_0=1793;TypeScript;0;EUTF-8;1;1;0;%2Fhome%2Fjaandrle%2FVzdálené%2FGitHub%2Fdcp-fe-container-certifedpassport%2Fsrc%2Fapp%2Fstamps%2Findex.tsx;0;4
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
{
|
{
|
||||||
"repository": "shiftkey/desktop",
|
"repository": "shiftkey/desktop",
|
||||||
"name": "GitHub Desktop",
|
"name": "GitHub Desktop",
|
||||||
"group": "dev",
|
"group": "skip-dev",
|
||||||
"file_name": "github-desktop",
|
"file_name": "github-desktop",
|
||||||
"exec": "yes",
|
"exec": "yes",
|
||||||
"description": "Fork of GitHub Desktop to support various Linux distributions",
|
"description": "Fork of GitHub Desktop to support various Linux distributions",
|
||||||
@ -41,19 +41,19 @@
|
|||||||
"repository": "th-ch/youtube-music",
|
"repository": "th-ch/youtube-music",
|
||||||
"name": "youtube-music",
|
"name": "youtube-music",
|
||||||
"description": "YouTube Music Desktop App bundled with custom plugins (and built-in ad blocker / downloader)",
|
"description": "YouTube Music Desktop App bundled with custom plugins (and built-in ad blocker / downloader)",
|
||||||
"group": "nondev",
|
"group": "skip-nondev",
|
||||||
"file_name": "youtube-music",
|
"file_name": "youtube-music",
|
||||||
"exec": "yes",
|
"exec": "yes",
|
||||||
"last_update": "2024-09-17T12:41:29Z",
|
"last_update": "2024-10-16T11:58:54Z",
|
||||||
"downloads": "/home/jaandrle/bin/youtube-music",
|
"downloads": "/home/jaandrle/bin/youtube-music",
|
||||||
"version": "v3.5.3",
|
"version": "v3.6.2",
|
||||||
"glare": "AppImage"
|
"glare": "AppImage"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"repository": "ArchGPT/insomnium",
|
"repository": "ArchGPT/insomnium",
|
||||||
"name": "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",
|
"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",
|
"file_name": "insomnium",
|
||||||
"exec": "yes",
|
"exec": "yes",
|
||||||
"last_update": "2023-11-13T10:03:28Z",
|
"last_update": "2023-11-13T10:03:28Z",
|
||||||
@ -62,59 +62,43 @@
|
|||||||
"version": "core@0.2.3-a",
|
"version": "core@0.2.3-a",
|
||||||
"glare": "AppImage"
|
"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",
|
"repository": "rvpanoz/luna",
|
||||||
"name": "luna",
|
"name": "luna",
|
||||||
"description": "Manage npm dependencies through a modern UI.",
|
"description": "Manage npm dependencies through a modern UI.",
|
||||||
"group": "skip",
|
"group": "skip-dev",
|
||||||
"file_name": "luna",
|
"file_name": "luna",
|
||||||
"exec": "yes",
|
"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",
|
"repository": "angela-d/wifi-channel-watcher",
|
||||||
"name": "wifi-channel-watcher",
|
"name": "wifi-channel-watcher",
|
||||||
"group": "skip",
|
"group": "skip-nondev",
|
||||||
"file_name": "wifi-channel-watcher",
|
"file_name": "wifi-channel-watcher",
|
||||||
"exec": "no",
|
"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!"
|
"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",
|
"repository": "AppImage/AppImageKit",
|
||||||
"name": "AppImageKit",
|
"name": "AppImageKit",
|
||||||
"group": "skip",
|
"group": "skip-nondev",
|
||||||
"file_name": "appimagekit",
|
"file_name": "appimagekit",
|
||||||
"exec": "yes",
|
"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",
|
"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",
|
"repository": "dynobo/normcap",
|
||||||
"name": "NormCap",
|
"name": "NormCap",
|
||||||
"description": "Switched to flatpak version | OCR powered screen-capture tool to capture information instead of images",
|
"description": "Switched to flatpak version | OCR powered screen-capture tool to capture information instead of images",
|
||||||
"group": "skip",
|
"group": "skip-nondev",
|
||||||
"file_name": "normcap",
|
"file_name": "normcap",
|
||||||
"exec": "yes",
|
"exec": "yes",
|
||||||
"last_update": "2023-12-12T22:23:37Z",
|
"last_update": "2023-12-12T22:23:37Z",
|
||||||
@ -133,30 +117,6 @@
|
|||||||
"version": "v2.11.5",
|
"version": "v2.11.5",
|
||||||
"glare": "AppImage"
|
"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",
|
"repository": "jaandrle/bs",
|
||||||
"name": "bs",
|
"name": "bs",
|
||||||
@ -188,9 +148,9 @@
|
|||||||
"group": "ai",
|
"group": "ai",
|
||||||
"file_name": "ollama",
|
"file_name": "ollama",
|
||||||
"exec": "yes",
|
"exec": "yes",
|
||||||
"last_update": "2024-09-23T03:39:10Z",
|
"last_update": "2024-10-21T05:10:12Z",
|
||||||
"downloads": "/home/jaandrle/bin/ollama",
|
"downloads": "/home/jaandrle/bin/ollama",
|
||||||
"version": "v0.3.12",
|
"version": "v0.4.0-rc3",
|
||||||
"glare": "linux-amd64"
|
"glare": "linux-amd64"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -198,13 +158,25 @@
|
|||||||
"name": "neovim",
|
"name": "neovim",
|
||||||
"tag_name_regex": "v.*",
|
"tag_name_regex": "v.*",
|
||||||
"description": "Vim-fork focused on extensibility and usability",
|
"description": "Vim-fork focused on extensibility and usability",
|
||||||
"group": "skip",
|
"group": "skip-dev",
|
||||||
"file_name": "nvim",
|
"file_name": "nvim",
|
||||||
"exec": "yes",
|
"exec": "yes",
|
||||||
"downloads": "/home/jaandrle/bin/nvim",
|
"downloads": "/home/jaandrle/bin/nvim",
|
||||||
"version": "v0.9.5",
|
"version": "v0.9.5",
|
||||||
"last_update": "2023-12-30T13:31:47Z"
|
"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.0794",
|
||||||
|
"last_update": "2024-10-21T01:18:07Z",
|
||||||
|
"glare": "GVim.*x86_64.*.AppImage"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"repository": "viarotel-org/escrcpy",
|
"repository": "viarotel-org/escrcpy",
|
||||||
"name": "Escrcpy",
|
"name": "Escrcpy",
|
||||||
@ -212,9 +184,9 @@
|
|||||||
"group": "dev",
|
"group": "dev",
|
||||||
"file_name": "escrcpy",
|
"file_name": "escrcpy",
|
||||||
"exec": "yes",
|
"exec": "yes",
|
||||||
"last_update": "2024-09-16T08:23:35Z",
|
"last_update": "2024-10-21T02:03:58Z",
|
||||||
"downloads": "/home/jaandrle/bin/escrcpy",
|
"downloads": "/home/jaandrle/bin/escrcpy",
|
||||||
"version": "v1.24.2",
|
"version": "v1.24.3",
|
||||||
"glare": ".*x86_64.*.AppImage"
|
"glare": ".*x86_64.*.AppImage"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -236,9 +208,9 @@
|
|||||||
"group": "ai",
|
"group": "ai",
|
||||||
"file_name": "jan",
|
"file_name": "jan",
|
||||||
"exec": "yes",
|
"exec": "yes",
|
||||||
"last_update": "2024-10-04T09:57:58Z",
|
"last_update": "2024-10-17T10:32:20Z",
|
||||||
"downloads": "/home/jaandrle/bin/jan",
|
"downloads": "/home/jaandrle/bin/jan",
|
||||||
"version": "v0.5.6",
|
"version": "v0.5.7-rc2-beta",
|
||||||
"glare": ".*x86_64.*.AppImage"
|
"glare": ".*x86_64.*.AppImage"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -248,9 +220,9 @@
|
|||||||
"group": "ai",
|
"group": "ai",
|
||||||
"file_name": "Chatbox",
|
"file_name": "Chatbox",
|
||||||
"exec": "yes",
|
"exec": "yes",
|
||||||
"last_update": "2024-09-20T13:20:44Z",
|
"last_update": "2024-10-19T04:09:10Z",
|
||||||
"downloads": "/home/jaandrle/bin/Chatbox",
|
"downloads": "/home/jaandrle/bin/Chatbox",
|
||||||
"version": "v0.10.0",
|
"version": "v0.10.1",
|
||||||
"glare": ".*x86_64.*.AppImage"
|
"glare": ".*x86_64.*.AppImage"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -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]
|
[General]
|
||||||
ColorScheme=BreezeDark
|
ColorScheme=TUXEDODark
|
||||||
|
|
||||||
[Icons]
|
[Icons]
|
||||||
Theme=breeze-dark
|
Theme=tuxedo-breeze-dark
|
||||||
|
|
||||||
[KDE]
|
[KDE]
|
||||||
widgetStyle=Breeze
|
widgetStyle=Breeze
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
[Greeter]
|
|
||||||
Theme=org.kde.breezedark.desktop
|
|
@ -1,3 +1,3 @@
|
|||||||
[KSplash]
|
[KSplash]
|
||||||
Engine=KSplashQML
|
Engine=KSplashQML
|
||||||
Theme=org.kde.breezedark.desktop
|
Theme=org.tuxedodark.desktop
|
||||||
|
@ -1,6 +1,10 @@
|
|||||||
|
[TabBox]
|
||||||
|
LayoutName=org.kde.breeze.desktop
|
||||||
|
|
||||||
[Windows]
|
[Windows]
|
||||||
Placement=Centered
|
Placement=Centered
|
||||||
|
|
||||||
[org.kde.kdecoration2]
|
[org.kde.kdecoration2]
|
||||||
|
NoPlugin=false
|
||||||
library=org.kde.breeze
|
library=org.kde.breeze
|
||||||
theme=Breeze
|
theme=Breeze
|
||||||
|
@ -1 +1 @@
|
|||||||
org.kde.breezedark.desktop
|
org.tuxedodark.desktop
|
@ -1,2 +1,2 @@
|
|||||||
[Theme]
|
[Theme]
|
||||||
name=default
|
name=tuxedo-dark
|
||||||
|
@ -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"
|
|
@ -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
@ -298,8 +298,8 @@
|
|||||||
\*.php,
|
\*.php,
|
||||||
\*.md,*.html,
|
\*.md,*.html,
|
||||||
\*.json,*.xml
|
\*.json,*.xml
|
||||||
\ 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 bat --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
|
" #endregion F
|
||||||
" #region S – sS keys
|
" #region S – sS keys
|
||||||
nnoremap sf :file &
|
nnoremap sf :file &
|
||||||
|
@ -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
|
|
8
.profile
8
.profile
@ -30,15 +30,7 @@ export GTK_MODULES
|
|||||||
export UBUNTU_MENUPROXY
|
export UBUNTU_MENUPROXY
|
||||||
|
|
||||||
export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"
|
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
|
[ -f /home/jaandrle/.bash/.profile_androidsdk ] && . /home/jaandrle/.bash/.profile_androidsdk
|
||||||
|
|
||||||
|
|
||||||
# Added by Toolbox App
|
# Added by Toolbox App
|
||||||
export PATH="$PATH:/home/jaandrle/.local/share/JetBrains/Toolbox/scripts"
|
export PATH="$PATH:/home/jaandrle/.local/share/JetBrains/Toolbox/scripts"
|
||||||
|
|
||||||
|
|
||||||
. "$HOME/.cargo/env"
|
|
||||||
|
3
.vimrc
3
.vimrc
@ -1,6 +1,7 @@
|
|||||||
""" VIM config file | Jan Andrle | 2024-07-10 (VIM >=8.1)
|
""" VIM config file | Jan Andrle | 2024-10-21 (VIM >=9.1 AppImage)
|
||||||
"" #region B – Base
|
"" #region B – Base
|
||||||
scriptencoding utf-8 | set encoding=utf-8
|
scriptencoding utf-8 | set encoding=utf-8
|
||||||
|
set pythonthreedll=/lib/x86_64-linux-gnu/libpython3.10.so.1.0
|
||||||
let $BASH_ENV = "~/.bashrc"
|
let $BASH_ENV = "~/.bashrc"
|
||||||
set runtimepath^=~/.vim/bundle/*
|
set runtimepath^=~/.vim/bundle/*
|
||||||
packadd! matchit
|
packadd! matchit
|
||||||
|
@ -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,8 +34,10 @@
|
|||||||
*/
|
*/
|
||||||
import { join } from "node:path";
|
import { join } from "node:path";
|
||||||
const path_config= $.xdg.config`github-releases`;
|
const path_config= $.xdg.config`github-releases`;
|
||||||
const path_config_json= join(path_config, "config.json");
|
const paths= {
|
||||||
const path_config_lock= join(path_config, "lock");
|
/** 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 path_temp= $.xdg.temp`github-releases.json`;
|
||||||
let url_api= "github";
|
let url_api= "github";
|
||||||
const urls_api= {
|
const urls_api= {
|
||||||
@ -52,7 +54,7 @@ const css= echo.css`
|
|||||||
`;
|
`;
|
||||||
|
|
||||||
$.api()
|
$.api()
|
||||||
.version("2.1.0")
|
.version("2.2.0")
|
||||||
.describe("Helper for working with “packages” stored in GitHub releases.")
|
.describe("Helper for working with “packages” stored in GitHub releases.")
|
||||||
.option("--verbose", "Verbose output (WIP)")
|
.option("--verbose", "Verbose output (WIP)")
|
||||||
.option("--group, -G", "Filter by group (not awaiable for noGRA)")
|
.option("--group, -G", "Filter by group (not awaiable for noGRA)")
|
||||||
@ -62,24 +64,70 @@ $.api()
|
|||||||
"- Ungh: https://ungh.cc/repos/", "(not awaiable for noGRA)" ], "github")
|
"- 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!")
|
.command("unlock", "[noGRA] DANGER: Removes lock file. Use only if you know what you are doing!")
|
||||||
.action(function(){
|
.action(function(){
|
||||||
s.rm(path_config_lock);
|
s.rm(paths.lock);
|
||||||
})
|
})
|
||||||
.command("config [mode]", [ "[noGR] Config (file), use `mode` with these options:",
|
.command("config [mode]", [ "[noGRA] Config (file), use `mode` with these options:",
|
||||||
"- `edit`: opens config file in terminal editor using `$EDITOR` (defaults to vim)",
|
"- `edit`: opens config file in terminal editor using `$EDITOR` (defaults to vim)",
|
||||||
"- `path`: prints path to config file"
|
"- `path`: prints path to config file"
|
||||||
])
|
])
|
||||||
.action(async function(mode= "path"){
|
.action(async function(mode= "path"){
|
||||||
switch(mode){
|
switch(mode){
|
||||||
case "path": echo(path_config_json); break;
|
case "path": echo(paths.config); break;
|
||||||
case "edit":
|
case "edit":
|
||||||
const editor= $.env.EDITOR || "vim";
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
echo(`Unknown mode: '${mode}'. See '--help' for details.`);
|
echo(`Unknown mode: '${mode}'. See '--help' for details.`);
|
||||||
}
|
}
|
||||||
$.exit(0);
|
$.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",
|
.command("ls", [ "Lists registered packages",
|
||||||
"Repositories marked with `-` signifies that the package is in the 'skip' group.",
|
"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).",
|
"These are registered by this script but not managed by it (updates, etc).",
|
||||||
@ -88,7 +136,7 @@ $.api()
|
|||||||
.action(function(filter){
|
.action(function(filter){
|
||||||
const config = readConfig();
|
const config = readConfig();
|
||||||
for(const { repository, version, description, group } of grepPackages(config, filter))
|
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);
|
echo(`+ %c${repository}%c@${version ? version : "—"}: %c${description}`, css.pkg, css.unset, css.skip);
|
||||||
else
|
else
|
||||||
echo(`- %c${repository}: ${description}`, css.skip);
|
echo(`- %c${repository}: ${description}`, css.skip);
|
||||||
@ -106,17 +154,16 @@ $.api()
|
|||||||
})
|
})
|
||||||
.command("update", "Updates registered packages")
|
.command("update", "Updates registered packages")
|
||||||
.action(async function(filter){
|
.action(async function(filter){
|
||||||
if(s.test("-f", path_config_lock))
|
if(s.test("-f", paths.lock))
|
||||||
return $.error(`The lock file '${path_config_lock}' already exists! Check if some other instance is running.`);
|
return $.error(`The lock file '${paths.lock}' already exists! Check if some other instance is running.`);
|
||||||
s.touch(path_config_lock);
|
s.touch(paths.lock);
|
||||||
const config = readConfig();
|
const config = readConfig();
|
||||||
const results= await check(grepPackages(config, filter));
|
const results= await check(grepPackages(config, filter));
|
||||||
const start= Date.now();
|
|
||||||
let done= 0;
|
let done= 0;
|
||||||
let todo= [];
|
let todo= [];
|
||||||
echo("Collecting packages to update…");
|
echo("Collecting packages to update…");
|
||||||
for(const { status, value } of results){
|
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);
|
echo("%c"+value.local.repository, css.pkg);
|
||||||
todo.push(download(
|
todo.push(download(
|
||||||
value,
|
value,
|
||||||
@ -141,9 +188,9 @@ $.api()
|
|||||||
const { local, remote }= value;
|
const { local, remote }= value;
|
||||||
echo("%c✓ "+local.repository+"%c@"+remote.tag_name, css.ok, css.skip);
|
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);
|
$.exit(0);
|
||||||
})
|
})
|
||||||
.parse();
|
.parse();
|
||||||
@ -186,7 +233,7 @@ function grepPackages({ packages }, { group, repository, api, verbose }){
|
|||||||
}
|
}
|
||||||
function echoPkgStatus(status, { local, remote }){
|
function echoPkgStatus(status, { local, remote }){
|
||||||
let status_css, status_text;
|
let status_css, status_text;
|
||||||
if(local.group==="skip"){
|
if(local.group && local.group.includes("skip")){
|
||||||
status_text= "skipped";
|
status_text= "skipped";
|
||||||
status_css= "skip";
|
status_css= "skip";
|
||||||
} else {
|
} else {
|
||||||
@ -198,7 +245,7 @@ function echoPkgStatus(status, { local, remote }){
|
|||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* @param {Config.packages} packages
|
* @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){
|
async function check(packages, cache){
|
||||||
return (await pipe(
|
return (await pipe(
|
||||||
@ -245,9 +292,9 @@ async function fetchRelease({ repository, tag_name_regex }, cache){
|
|||||||
}
|
}
|
||||||
|
|
||||||
function readConfig(){
|
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/" },
|
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));
|
if(out.target.startsWith("~/")) out.target= $.xdg.home(out.target.slice(2));
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user