From f3bf9e06126fc2880ae6c83d0e48b021c1b0b37c Mon Sep 17 00:00:00 2001 From: Jan Andrle Date: Mon, 21 Oct 2024 16:06:54 +0200 Subject: [PATCH] :zap: Mainly because os (re)instalation TUXEDO OS 3 --- .bash/.bash_jaaENV | 2 +- .bash/.profile_androidsdk | 6 +- .bashrc | 8 +- .config/geany/geany.conf | 13 +- .config/github-releases/config.json | 104 +-- .config/himalaya/config.toml | 39 - .config/himalaya/template-inbox.json | 8 - .config/kdedefaults/kdeglobals | 4 +- .config/kdedefaults/kscreenlockerrc | 2 - .config/kdedefaults/ksplashrc | 2 +- .config/kdedefaults/kwinrc | 4 + .config/kdedefaults/package | 2 +- .config/kdedefaults/plasmarc | 2 +- .config/rofi/breeze-dark.rasi | 133 --- .config/rofi/config.rasi | 1 - .config/tut/accounts.toml | 7 - .config/tut/config.ini | 830 ----------------- .config/tut/config.toml | 1277 -------------------------- .config/vifm/vifmrc | 4 +- .newsboat/README.md | 5 - .newsboat/config | 60 -- .newsboat/html2rss-streamCZ.mjs | 22 - .newsboat/html2rss.mjs | 39 - .newsboat/urls | 222 ----- .profile | 8 - .vim/coc-settings.json | 2 +- .vimrc | 3 +- bin/github-releases.js | 418 --------- bin/github-releases.json | 238 ----- bin/github-releases.mjs | 89 +- 30 files changed, 133 insertions(+), 3421 deletions(-) delete mode 100644 .config/himalaya/config.toml delete mode 100644 .config/himalaya/template-inbox.json delete mode 100644 .config/kdedefaults/kscreenlockerrc delete mode 100644 .config/rofi/breeze-dark.rasi delete mode 100644 .config/rofi/config.rasi delete mode 100644 .config/tut/accounts.toml delete mode 100644 .config/tut/config.ini delete mode 100644 .config/tut/config.toml delete mode 100644 .newsboat/README.md delete mode 100644 .newsboat/config delete mode 100755 .newsboat/html2rss-streamCZ.mjs delete mode 100644 .newsboat/html2rss.mjs delete mode 100644 .newsboat/urls delete mode 100755 bin/github-releases.js delete mode 100644 bin/github-releases.json diff --git a/.bash/.bash_jaaENV b/.bash/.bash_jaaENV index c558fae..150e119 100644 --- a/.bash/.bash_jaaENV +++ b/.bash/.bash_jaaENV @@ -89,7 +89,7 @@ function jaaENV { local chP="\[\033[0;35m\]" #purple local chW="\[\033[00m\]" #white - export PS1_jaaENV="${chP}⋮${chW}" + export PS1_jaaENV="${chP}¦${chW}" if [ ! -z ${ANDROID_SDK_ROOT_BAK+x} ]; then export ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT_BAK diff --git a/.bash/.profile_androidsdk b/.bash/.profile_androidsdk index cb8a2e1..10b11d3 100644 --- a/.bash/.profile_androidsdk +++ b/.bash/.profile_androidsdk @@ -1,7 +1,5 @@ # IMPORT IN `$HOME/.profile` -export ANDROID_HOME_BAK="$HOME/.local/share/umake/android/android-studio" -export ANDROID_SDK_ROOT="$HOME/.local/share/umake/android/android-studio-sdk" -export PATH=$PATH:$ANDROID_SDK_ROOT/tools/ +export ANDROID_HOME_BAK="$HOME/.local/share/JetBrains/Toolbox/apps/android-studio/" +export ANDROID_SDK_ROOT="$HOME/Android/Sdk" export PATH=$PATH:$ANDROID_SDK_ROOT/platform-tools/ -export PATH=$PATH:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin/ export PATH=$PATH:$ANDROID_SDK_ROOT/emulator/ diff --git a/.bashrc b/.bashrc index e3e130b..0fdb5c6 100644 --- a/.bashrc +++ b/.bashrc @@ -11,10 +11,8 @@ shopt -s expand_aliases [ -f $BASH_DOTFILES/.bash_jaaENV ] && . $BASH_DOTFILES/.bash_jaaENV [ -f $BASH_DOTFILES/.bash_sdkman ] && . $BASH_DOTFILES/.bash_sdkman [ -f $BASH_DOTFILES/.bash_nvm ] && . $BASH_DOTFILES/.bash_nvm -# Install Ruby Gems to ~/.local/share/gems -export GEM_HOME="$HOME/.local/share/gems" -export PATH="$HOME/.local/share/gems/bin:$HOME/.local/bin:$PATH" -. "$HOME/.cargo/env" # https://docs.astral.sh/uv/ +export NODE_COMPILE_CACHE=~/.cache/nodejs-compile-cache # https://nolanlawson.com/2024/10/20/why-im-skeptical-of-rewriting-javascript-tools-in-faster-languages/ +export PATH="$HOME/.local/bin:$PATH" [ -f $BASH_DOTFILES/.bash_completions ] && . $BASH_DOTFILES/.bash_completions # for Vim [[ $- != *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 bind -m vi-command 'Control-l: clear-screen' bind -m vi-insert 'Control-l: clear-screen' -export MANPAGER="/bin/sh -c \"col -b | vim --not-a-term -c 'set ft=man ts=8 nomod nolist noma' -\"" +export MANPAGER="/bin/sh -c \"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 ## History diff --git a/.config/geany/geany.conf b/.config/geany/geany.conf index 1501d3d..5ec168d 100644 --- a/.config/geany/geany.conf +++ b/.config/geany/geany.conf @@ -138,8 +138,8 @@ sidebar_page=3 pref_main_project_session=true use_native_windows_dialogs=false treeview_position=226 -msgwindow_position=755 -geometry=1280;26;1277;1026;0; +msgwindow_position=710 +geometry=321;29;1275;1020;0; use_native_dialogs=true [tools] @@ -174,7 +174,7 @@ colour_fore=#DEDDDA colour_back=#2B2B2B send_cmd_prefix= send_selection_unsafe=false -last_dir=/home/jaandrle/Vzdálené/GitHub/Facilitator-App-Native +last_dir=/home/jaandrle [build-menu] number_ft_menu_items=0 @@ -221,13 +221,14 @@ position_fif_y=-1 [plugins] load_plugins=true custom_plugin_path= -active_plugins=/usr/lib/x86_64-linux-gnu/geany/addons.so;/usr/lib/x86_64-linux-gnu/geany/autoclose.so;/usr/lib/x86_64-linux-gnu/geany/automark.so;/usr/lib/x86_64-linux-gnu/geany/commander.so;/usr/lib/x86_64-linux-gnu/geany/export.so;/usr/lib/x86_64-linux-gnu/geany/geanyextrasel.so;/usr/lib/x86_64-linux-gnu/geany/geanyctags.so;/usr/lib/x86_64-linux-gnu/geany/htmlchars.so;/usr/lib/x86_64-linux-gnu/geany/keyrecord.so;/usr/lib/x86_64-linux-gnu/geany/geanymacro.so;/usr/lib/x86_64-linux-gnu/geany/filebrowser.so;/usr/lib/x86_64-linux-gnu/geany/projectorganizer.so;/usr/lib/x86_64-linux-gnu/geany/saveactions.so;/usr/lib/x86_64-linux-gnu/geany/vimode.so; +active_plugins=/usr/lib/x86_64-linux-gnu/geany/addons.so;/usr/lib/x86_64-linux-gnu/geany/autoclose.so;/usr/lib/x86_64-linux-gnu/geany/automark.so;/usr/lib/x86_64-linux-gnu/geany/commander.so;/usr/lib/x86_64-linux-gnu/geany/export.so;/usr/lib/x86_64-linux-gnu/geany/geanyextrasel.so;/usr/lib/x86_64-linux-gnu/geany/htmlchars.so;/usr/lib/x86_64-linux-gnu/geany/geanymacro.so;/usr/lib/x86_64-linux-gnu/geany/filebrowser.so;/usr/lib/x86_64-linux-gnu/geany/projectorganizer.so;/usr/lib/x86_64-linux-gnu/geany/spellcheck.so;/usr/lib/x86_64-linux-gnu/geany/saveactions.so;/usr/lib/x86_64-linux-gnu/geany/vimode.so; [project] session_file= project_file_path=/home/jaandrle/Dokumenty/Projekty/geany [files] -recent_files=/home/jaandrle/Vzdálené/GitHub/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; -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 diff --git a/.config/github-releases/config.json b/.config/github-releases/config.json index 959eb61..92cc6b8 100644 --- a/.config/github-releases/config.json +++ b/.config/github-releases/config.json @@ -4,7 +4,7 @@ { "repository": "shiftkey/desktop", "name": "GitHub Desktop", - "group": "dev", + "group": "skip-dev", "file_name": "github-desktop", "exec": "yes", "description": "Fork of GitHub Desktop to support various Linux distributions", @@ -41,19 +41,19 @@ "repository": "th-ch/youtube-music", "name": "youtube-music", "description": "YouTube Music Desktop App bundled with custom plugins (and built-in ad blocker / downloader)", - "group": "nondev", + "group": "skip-nondev", "file_name": "youtube-music", "exec": "yes", - "last_update": "2024-09-17T12:41:29Z", + "last_update": "2024-10-16T11:58:54Z", "downloads": "/home/jaandrle/bin/youtube-music", - "version": "v3.5.3", + "version": "v3.6.2", "glare": "AppImage" }, { "repository": "ArchGPT/insomnium", "name": "insomnium", "description": "Insomnium is a fast local API testing tool that is privacy-focused and 100% local. For testing GraphQL, REST, WebSockets and gRPC. This is a fork of Kong/insomnia", - "group": "dev", + "group": "skip-dev", "file_name": "insomnium", "exec": "yes", "last_update": "2023-11-13T10:03:28Z", @@ -62,59 +62,43 @@ "version": "core@0.2.3-a", "glare": "AppImage" }, - { - "repository": "Kong/insomnia", - "name": "insomnia", - "description": "The open-source, cross-platform API client for GraphQL, REST, and gRPC.", - "group": "skip", - "file_name": "insomnia", - "exec": "yes", - "last_update": "2024-04-17T16:38:03Z", - "downloads": "/home/jaandrle/bin/insomnia", - "tag_name_regex": "core@.*", - "version": "core@9.0.0-beta.4", - "glare": "AppImage" - }, { "repository": "rvpanoz/luna", "name": "luna", "description": "Manage npm dependencies through a modern UI.", - "group": "skip", + "group": "skip-dev", "file_name": "luna", "exec": "yes", - "glare": "AppImage" + "glare": "AppImage", + "last_update": "2020-10-29T23:06:39Z", + "version": "v.3.4.6", + "downloads": "/home/jaandrle/bin/luna" }, { "repository": "angela-d/wifi-channel-watcher", "name": "wifi-channel-watcher", - "group": "skip", + "group": "skip-nondev", "file_name": "wifi-channel-watcher", "exec": "no", "description": "Monitor channel usage of neighboring routers & get an alert if your active channel is not optimal.\tTroubleshoot wifi without lifting a finger!" }, - { - "repository": "vinceliuice/Tela-circle-icon-theme", - "name": "Tela-circle-icon-theme", - "description": "Tela-circle-icon-theme", - "group": "skip", - "file_name": "tela-circle-icon-theme.zip", - "last_update": "2021-07-19T14:12:05Z", - "exec": "no" - }, { "repository": "AppImage/AppImageKit", "name": "AppImageKit", - "group": "skip", + "group": "skip-nondev", "file_name": "appimagekit", "exec": "yes", "description": "Package desktop applications as AppImages that run on common Linux-based operating systems, such as RHEL, CentOS, openSUSE, SLED, Ubuntu, Fedora, debian and derivatives. Join #AppImage on irc.freenode.net", - "glare": ".*x86_64.*.AppImage" + "glare": ".*x86_64.*.AppImage", + "last_update": "2023-03-08T23:25:46Z", + "version": "continuous", + "downloads": "/home/jaandrle/bin/appimagekit" }, { "repository": "dynobo/normcap", "name": "NormCap", "description": "Switched to flatpak version | OCR powered screen-capture tool to capture information instead of images", - "group": "skip", + "group": "skip-nondev", "file_name": "normcap", "exec": "yes", "last_update": "2023-12-12T22:23:37Z", @@ -133,30 +117,6 @@ "version": "v2.11.5", "glare": "AppImage" }, - { - "repository": "RasmusLindroth/tut", - "name": "tut", - "description": "TUI for Mastodon with vim inspired keys", - "group": "nondev", - "file_name": "tut", - "exec": "yes", - "last_update": "2023-01-26T17:48:00Z", - "downloads": "/home/jaandrle/bin/tut", - "version": "2.0.1", - "glare": "tut-amd64" - }, - { - "repository": "sunner/ChatALL", - "name": "ChatALL", - "description": " Concurrently chat with ChatGPT, Bing Chat, bard, Alpaca, Vincuna, Claude, ChatGLM, MOSS, iFlytek Spark, ERNIE and more, discover the best answers", - "group": "skip", - "file_name": "chatall", - "exec": "yes", - "last_update": "2024-04-14T02:09:42Z", - "downloads": "/home/jaandrle/bin/chatall", - "version": "v1.71.100", - "glare": ".*x86_64.*.AppImage" - }, { "repository": "jaandrle/bs", "name": "bs", @@ -188,9 +148,9 @@ "group": "ai", "file_name": "ollama", "exec": "yes", - "last_update": "2024-09-23T03:39:10Z", + "last_update": "2024-10-21T05:10:12Z", "downloads": "/home/jaandrle/bin/ollama", - "version": "v0.3.12", + "version": "v0.4.0-rc3", "glare": "linux-amd64" }, { @@ -198,13 +158,25 @@ "name": "neovim", "tag_name_regex": "v.*", "description": "Vim-fork focused on extensibility and usability", - "group": "skip", + "group": "skip-dev", "file_name": "nvim", "exec": "yes", "downloads": "/home/jaandrle/bin/nvim", "version": "v0.9.5", "last_update": "2023-12-30T13:31:47Z" }, + { + "repository": "vim/vim-appimage", + "name": "vim", + "description": "AppImage for gVim", + "group": "dev", + "file_name": "vim", + "exec": "yes", + "downloads": "/home/jaandrle/bin/vim", + "version": "v9.1.0794", + "last_update": "2024-10-21T01:18:07Z", + "glare": "GVim.*x86_64.*.AppImage" + }, { "repository": "viarotel-org/escrcpy", "name": "Escrcpy", @@ -212,9 +184,9 @@ "group": "dev", "file_name": "escrcpy", "exec": "yes", - "last_update": "2024-09-16T08:23:35Z", + "last_update": "2024-10-21T02:03:58Z", "downloads": "/home/jaandrle/bin/escrcpy", - "version": "v1.24.2", + "version": "v1.24.3", "glare": ".*x86_64.*.AppImage" }, { @@ -236,9 +208,9 @@ "group": "ai", "file_name": "jan", "exec": "yes", - "last_update": "2024-10-04T09:57:58Z", + "last_update": "2024-10-17T10:32:20Z", "downloads": "/home/jaandrle/bin/jan", - "version": "v0.5.6", + "version": "v0.5.7-rc2-beta", "glare": ".*x86_64.*.AppImage" }, { @@ -248,9 +220,9 @@ "group": "ai", "file_name": "Chatbox", "exec": "yes", - "last_update": "2024-09-20T13:20:44Z", + "last_update": "2024-10-19T04:09:10Z", "downloads": "/home/jaandrle/bin/Chatbox", - "version": "v0.10.0", + "version": "v0.10.1", "glare": ".*x86_64.*.AppImage" } ] diff --git a/.config/himalaya/config.toml b/.config/himalaya/config.toml deleted file mode 100644 index f7aea7f..0000000 --- a/.config/himalaya/config.toml +++ /dev/null @@ -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 : diff --git a/.config/himalaya/template-inbox.json b/.config/himalaya/template-inbox.json deleted file mode 100644 index 08473bb..0000000 --- a/.config/himalaya/template-inbox.json +++ /dev/null @@ -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" } -] diff --git a/.config/kdedefaults/kdeglobals b/.config/kdedefaults/kdeglobals index 5bdede9..b06d469 100644 --- a/.config/kdedefaults/kdeglobals +++ b/.config/kdedefaults/kdeglobals @@ -1,8 +1,8 @@ [General] -ColorScheme=BreezeDark +ColorScheme=TUXEDODark [Icons] -Theme=breeze-dark +Theme=tuxedo-breeze-dark [KDE] widgetStyle=Breeze diff --git a/.config/kdedefaults/kscreenlockerrc b/.config/kdedefaults/kscreenlockerrc deleted file mode 100644 index 51a32d4..0000000 --- a/.config/kdedefaults/kscreenlockerrc +++ /dev/null @@ -1,2 +0,0 @@ -[Greeter] -Theme=org.kde.breezedark.desktop diff --git a/.config/kdedefaults/ksplashrc b/.config/kdedefaults/ksplashrc index 56a8fb1..d8f4343 100644 --- a/.config/kdedefaults/ksplashrc +++ b/.config/kdedefaults/ksplashrc @@ -1,3 +1,3 @@ [KSplash] Engine=KSplashQML -Theme=org.kde.breezedark.desktop +Theme=org.tuxedodark.desktop diff --git a/.config/kdedefaults/kwinrc b/.config/kdedefaults/kwinrc index 32067da..3d53485 100644 --- a/.config/kdedefaults/kwinrc +++ b/.config/kdedefaults/kwinrc @@ -1,6 +1,10 @@ +[TabBox] +LayoutName=org.kde.breeze.desktop + [Windows] Placement=Centered [org.kde.kdecoration2] +NoPlugin=false library=org.kde.breeze theme=Breeze diff --git a/.config/kdedefaults/package b/.config/kdedefaults/package index c188391..cedfb99 100644 --- a/.config/kdedefaults/package +++ b/.config/kdedefaults/package @@ -1 +1 @@ -org.kde.breezedark.desktop \ No newline at end of file +org.tuxedodark.desktop \ No newline at end of file diff --git a/.config/kdedefaults/plasmarc b/.config/kdedefaults/plasmarc index 8b58863..81d8e42 100644 --- a/.config/kdedefaults/plasmarc +++ b/.config/kdedefaults/plasmarc @@ -1,2 +1,2 @@ [Theme] -name=default +name=tuxedo-dark diff --git a/.config/rofi/breeze-dark.rasi b/.config/rofi/breeze-dark.rasi deleted file mode 100644 index 16b6187..0000000 --- a/.config/rofi/breeze-dark.rasi +++ /dev/null @@ -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; -} diff --git a/.config/rofi/config.rasi b/.config/rofi/config.rasi deleted file mode 100644 index 89bcd89..0000000 --- a/.config/rofi/config.rasi +++ /dev/null @@ -1 +0,0 @@ -@theme "~/.config/rofi/breeze-dark.rasi" diff --git a/.config/tut/accounts.toml b/.config/tut/accounts.toml deleted file mode 100644 index 9a9d123..0000000 --- a/.config/tut/accounts.toml +++ /dev/null @@ -1,7 +0,0 @@ -[[Accounts]] -Name = 'jaandrle' -Server = 'https://fosstodon.org' -ClientID = 'ggYBuM2y_jtFV_3wR4tGdJUoNh-4ZfVRl1SByK5bihU' -ClientSecret = 'j7ClbSP2UY8syZgV4E-7Kk1bf8Ph_6GQ7szcqVfqDtI' -AccessToken = '1iO5wZL-nXcC3dZGjxNHLcbbFoSZ3fmutno96oD_ZY8' - diff --git a/.config/tut/config.ini b/.config/tut/config.ini deleted file mode 100644 index 4dca8fc..0000000 --- a/.config/tut/config.ini +++ /dev/null @@ -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' diff --git a/.config/tut/config.toml b/.config/tut/config.toml deleted file mode 100644 index 857269f..0000000 --- a/.config/tut/config.toml +++ /dev/null @@ -1,1277 +0,0 @@ -# Configuration file for tut - -[general] -# What editor to use. TUT_USE_INTERNAL will use the editor that comes with tut. -# If you want you can set this to $EDITOR to use your environment variable or -# vim if you want to specify the program directly. -# default="TUT_USE_INTERNAL" -editor="TUT_USE_INTERNAL" - -# You need to press yes in a confirmation dialog before favoriting, boosting, -# etc. -# default=true -confirmation=true - -# Enable mouse support in tut. -# default=false -mouse-support=false - -# The date format to be used. See https://pkg.go.dev/time#pkg-constants -# 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-tody-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 -# -# Value: 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 with of text before it wraps when displaying a toot. -# default=0 -max-width=0 - -# The placement of your panes. -# valid: left, right, top, bottom -# default="left" -list-placement="right" - -# How should panes be split? -# valid: row, column -# default="row" -list-split="column" - -# The proportion of panes vs. content. 1 on this and 3 on content below results -# in content taking up 3 times more space. -# default=1 -list-proportion=2 - -# See previous. -# default=2 -content-proportion=1 - -# Hide notifications of this type in your notification timelines. -# valid: mention, status, boost, follow, follow_request, favorite, poll, edit -# default=[] -notifications-to-hide=[] - -# Always include a quote of the message you're replying to. -# default=false -quote-reply=false - -# If you want to show icons in timelines. -# default=true -show-icons=true - -# If you only want to you the letter of keys instead of the full hint. -# default=false -short-hints=false - -# If you want to display the filter that filtered a toot. -# default=true -show-filter-phrase=true - -# Display a message in the commandbar on how to access the help text. -# default=true -show-help=true - -# Always jump to the newest post. May ruin your reading experience. -# default=false -stick-to-top=false - -# Display the username of the person being boosted insted of the person that -# boosted. -# default=false -show-boosted-user=false - -# Open a new pane when you run a command like :timeline home. -# default=true -commands-in-new-pane=true - -# Set a default name for the timeline if the name is empty. So if you run :tag -# linux the title of the pane will be set to #linux -# default=true -dynamic-timeline-name=true - -# 0 = No terminal title -# 1 = Show title in terminal and top bar -# 2 = Only show terminal title, and no top bar in tut -# 3 = No terminal title and no top bar in tut. -# valid: 0, 1, 2, 4 -# default=0 -terminal-title=0 - -# If you don't want the whole UI to update, and only update the text content you -# can disable this. This will lead to some artifacts being left on the screen -# when emojis are present. -# 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 key here. It can only -# consist of one char, so set it to something like a comma. -# 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 - -# [[general.timelines]] -# Timelines adds panes of feeds. You can customize the number of feeds, what -# they should show and the key to activate them. - -# Example: -[[general.timelines]] -name="Lists" -type="lists" -keys=["1"] - -[[general.timelines]] -name="Home" -type="home" -keys=["2"] - -[[general.timelines]] -name="Notifications" -type="notifications" -keys=["3"] -on-creation-closed="new-pane" -on-focus="focus-self" - -[[general.timelines]] -name="Webdev" -type="tag" -data="webdev progressiveenhancement" -keys=["4"] - -# The name to display above the timeline -# default="" -# name="" - -# The type of the timeline -# valid: home, direct, local, federated, bookmarks, saved, favorited, notifications, -# lists, mentions, tag -# default="" -# type="" - -# Used for the tag type, so here you set the tag. If you have multiple you -# seperate them with a space. -# default="" -# data="" - -# A list of keys to give this timeline focus. See under the input section to -# learn more about keys. -# default=[] -# keys=[] - -# A list of special-keys to give this timeline focus. See under the input -# section to learn more about special-keys. -# default=[] -# special-keys=[] - -# A shortcut to give this timeline focus with your leader-key + this shortcut. -# default="" -# shortcut="" - -# Hide boosts in this timeline. -# default="false" -# hide-boosts="false" - -# Hide replies in this timeline. -# default="false" -# hide-replies="false" - -# Don't open this timeline when you start tut. Use your keys or shortcut to open -# it. -# default="false" -# closed="false" - -# Don't open this timeline when you start tut. Use your keys or shortcut to open -# it. -# valid: new-pane, current-pane -# default="new-pane" -# on-creation-closed="new-pane" - -# Don't open this timeline when you start tut. Use your keys or shortcut to open -# it. -# valid: focus-pane, focus-self -# default="focus-pane" -# on-focus="focus-pane" - -# [[general.leader-actions]] -# You set actions leader-key with one or more leader-actions. -# -# 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 actions that requires data to be set: -# pane is special as it's a shortcut for switching between the panes you've set -# under general and they are zero indexed. pane 0 = your first timeline, pane 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. - -# Example: -# [[general.leader-actions]] -# type="close-pane" -# shortcut="q" -# -# [[general.leader-actions]] -# type="list-split" -# data="row" -# shortcut="r" -# -# [[general.leader-actions]] -# type="list-split" -# data="column" -# shortcut="c" -# - -# The action you want to run. -# valid: blocking, boosts, clear-notifications, close-pane, compose, edit, favorited, -# favorites, followers, following, history, list-placement, list-split, lists, -# move-pane-left, move-pane-right, move-pane-up, move-pane-down, move-pane-home, -# move-pane-end, muting, newer, pane, preferences, profile, proportions, -# refetch, stick-to-top, tags -# default="" -# type="" - -# Data to pass to the action. -# default="" -# data="" - -# A shortcut to run this action with your leader-key + this shortcut. -# default="" -# shortcut="" - -[media] -# Media files will be removed directly after they've been opened. Some programs -# doesn't like this, so if your media doesn't open, try set this to false. Tut -# will remove all files once you close the program. -# default=true -delete-temp-files=true - -[media.image] -# The program to open images. TUT_OS_DEFAULT equals xdg-open on Linux, open on -# MacOS and start on Windows. -# default="TUT_OS_DEFAULT" -program="TUT_OS_DEFAULT" - -# Arguments to pass to the program. -# default="" -args="" - -# If the program runs in the terminal set this to true. -# default=false -terminal=false - -# If the program should be called multiple times when there is multiple files. -# If set to false all files will be passed as an argument, but not all programs -# support this. -# default=true -single=true - -# If the files should be passed in reverse order. This will make some programs -# display the files in the correct order. -# default=false -reverse=false - -[media.video] -# The program to open videos. TUT_OS_DEFAULT equals xdg-open on Linux, open on -# MacOS and start on Windows. -# default="TUT_OS_DEFAULT" -program="TUT_OS_DEFAULT" - -# Arguments to pass to the program. -# default="" -args="" - -# If the program runs in the terminal set this to true. -# default=false -terminal=false - -# If the program should be called multiple times when there is multiple files. -# If set to false all files will be passed as an argument, but not all programs -# support this. -# default=true -single=true - -# If the files should be passed in reverse order. This will make some programs -# display the files in the correct order. -# default=false -reverse=false - -[media.audio] -# The program to open audio. TUT_OS_DEFAULT equals xdg-open on Linux, open on -# MacOS and start on Windows. -# default="TUT_OS_DEFAULT" -program="TUT_OS_DEFAULT" - -# Arguments to pass to the program. -# default="" -args="" - -# If the program runs in the terminal set this to true. -# default=false -terminal=false - -# If the program should be called multiple times when there is multiple files. -# If set to false all files will be passed as an argument, but not all programs -# support this. -# default=true -single=true - -# If the files should be passed in reverse order. This will make some programs -# display the files in the correct order. -# default=false -reverse=false - -[media.link] -# The program to open links. TUT_OS_DEFAULT equals xdg-open on Linux, open on -# MacOS and start on Windows. -# default="TUT_OS_DEFAULT" -program="TUT_OS_DEFAULT" - -# Arguments to pass to the program. -# default="" -args="" - -# If the program runs in the terminal set this to true. -# default=false -terminal=false - -[desktop-notification] -# Enable notifications when someone follows you. -# default=false -followers=false - -# Enable notifications when one of your toots gets favorited. -# default=false -favorite=false - -# Enable notifications when someone mentions you. -# default=false -mention=false - -# Enable notifications when a post you have interacted with gets edited. -# default=false -update=false - -# Enable notifications when one of your toots gets boosted. -# default=false -boost=false - -# Enable notifications when a poll ends. -# default=false -poll=false - -# Enable notifications for new posts. -# default=false -posts=false - -[open-custom] -# [[open-custom.programs]] -# The program to open the file with. -# default="" -# program="" - -# Arguments to pass to the program. -# default="" -# args="" - -# If the program runs in the terminal set this to true. -# default=false -# terminal=false - -# What should the key hint in tut be for this program. See under the input -# section to learn more about hint. -# default="" -# hint="" - -# A list of keys to to open files with this program. See under the input section -# to learn more about keys. -# default=[] -# keys=[] - -# A list of special-keys to open files with this program. See under the input -# section to learn more about special-keys. -# default=[] -# special-keys=[] - -[open-pattern] -# [[open-pattern.programs]] -# 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. To see the syntax for -# glob pattern you can follow this URL https://github.com/gobwas/glob#syntax. -# default="" -# matching="" - -# The program to open the file with. -# default="" -# program="" - -# Arguments to pass to the program. -# default="" -# args="" - -# If the program runs in the terminal set this to true. -# default=false -# terminal=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 theme to use. 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.toml 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.toml 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 xrdb prefix used for colors in .Xresources. -# default="guess" -xrdb-prefix="guess" - -# 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] -# In this section you set the keys to be used in tut. -# -# The hint option lets you set which part of the hint that will be highlighted -# in tut. E.g. [F]avorite results in a highlighted F and the rest of the text is -# displayed normaly. -# Some of the options can be in two states, like favorites, so there you can set -# the hint-alt option to something like Un[F]avorite. -# -# Examples: -# "[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 -# -# The keys option lets you define what key that should be pressed. This is -# limited to on character only and they are case sensetive. -# Example: -# keys=["j","J"] -# -# You can also set special-keys and they're for keys like Escape and Enter. 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 - -[input.global-down] -# Keys for moving down - -# default=["j", "J"] -keys=["j","J"] - -# default=["Down"] -special-keys=["Down"] - -[input.global-up] -# Keys for moving down - -# default=["k", "K"] -keys=["k","K"] - -# default=["Up"] -special-keys=["Up"] - -[input.global-enter] -# To select items - -# default=["Enter"] -special-keys=["Enter"] - -[input.global-back] -# To go back - -# default="[Esc]" -hint="[Esc]" - -# default=["Esc"] -special-keys=["Esc"] - -[input.global-exit] -# To go back or exit - -# default="[Q]uit" -hint="[Q]uit" - -# default=["q", "Q"] -keys=["q","Q"] - -[input.main-home] -# Move to the top - -# default=["g"] -keys=["g"] - -# default=["Home"] -special-keys=["Home"] - -[input.main-end] -# Move to the bottom - -# default=["G"] -keys=["G"] - -# default=["End"] -special-keys=["End"] - -[input.main-prev-feed] -# Go to previous feed - -# default=["h", "H"] -keys=["h","H"] - -# default=["Left"] -special-keys=["Left"] - -[input.main-next-feed] -# Go to next feed - -# default=["l", "L"] -keys=["l","L"] - -# default=["Right"] -special-keys=["Right"] - -[input.main-prev-pane] -# Focus on the previous feed pane - -# default=["Backtab"] -special-keys=["Backtab"] - -[input.main-next-pane] -# Focus on the next feed pane - -# default=["Tab"] -special-keys=["Tab"] - -[input.main-next-account] -# Focus on the next account - -# default=["Ctrl-N"] -special-keys=["Ctrl-N"] - -[input.main-prev-account] -# Focus on the previous account - -# default=["Ctrl-P"] -special-keys=["Ctrl-P"] - -[input.main-compose] -# Compose a new toot - -# default=["c", "C"] -keys=["c","C"] - -[input.status-avatar] -# Open avatar - -# default="[A]vatar" -hint="[A]vatar" - -# default=["a", "A"] -keys=["a","A"] - -[input.status-boost] -# Boost a toot - -# default="[B]oost" -hint="[B]oost" - -# default=["b", "B"] -keys=["b","B"] - -[input.status-edit] -# Edit a toot - -# default="[E]dit" -hint="[E]dit" - -# default=["e", "E"] -keys=["e","E"] - -[input.status-delete] -# Delete a toot - -# default="[D]elete" -hint="[D]elete" - -# default=["d", "D"] -keys=["d","D"] - -[input.status-favorite] -# Favorite a toot - -# default="[F]avorite" -hint="[F]avorite" - -# default=["f", "F"] -keys=["f","F"] - -[input.status-media] -# Open toots media files - -# default="[M]edia" -hint="[M]edia" - -# default=["m", "M"] -keys=["m","M"] - -[input.status-links] -# Open links - -# default="[O]pen" -hint="[O]pen" - -# default=["o", "O"] -keys=["o","O"] - -[input.status-poll] -# Open poll - -# default="[P]oll" -hint="[P]oll" - -# default=["p", "P"] -keys=["p","P"] - -[input.status-reply] -# Reply to toot - -# default="[R]eply" -hint="[R]eply" - -# default=["r", "R"] -keys=["r","R"] - -[input.status-bookmark] -# Save/bookmark a toot - -# default="[S]ave" -hint="[S]ave" - -# default="Un[S]ave" -hint-alt="Un[S]ave" - -# default=["s", "S"] -keys=["s","S"] - -[input.status-thread] -# View thread - -# default="[T]hread" -hint="[T]hread" - -# default=["t", "T"] -keys=["t","T"] - -[input.status-user] -# Open user profile - -# default="[U]ser" -hint="[U]ser" - -# default=["u", "U"] -keys=["u","U"] - -[input.status-view-focus] -# Open the view mode - -# default="[V]iew" -hint="[V]iew" - -# default=["v", "V"] -keys=["v","V"] - -[input.status-yank] -# Yank the url of the toot - -# default="[Y]ank" -hint="[Y]ank" - -# default=["y", "Y"] -keys=["y","Y"] - -[input.status-toggle-cw] -# Show the content in a content warning - -# default="Press [Z] to toggle cw" -hint="Press [Z] to toggle cw" - -# default=["z", "Z"] -keys=["z","Z"] - -[input.status-show-filtered] -# Show the content of a filtered toot - -# default="Press [Z] to view filtered toot" -hint="Press [Z] to view filtered toot" - -# default=["z", "Z"] -keys=["z","Z"] - -[input.user-avatar] -# View avatar - -# default="[A]vatar" -hint="[A]vatar" - -# default=["a", "A"] -keys=["a","A"] - -[input.user-block] -# Block the user - -# default="[B]lock" -hint="[B]lock" - -# default="Un[B]lock" -hint-alt="Un[B]lock" - -# default=["b", "B"] -keys=["b","B"] - -[input.user-follow] -# Follow user - -# default="[F]ollow" -hint="[F]ollow" - -# default="Un[F]ollow" -hint-alt="Un[F]ollow" - -# default=["f", "F"] -keys=["f","F"] - -[input.user-follow-request-decide] -# Follow user - -# default="Follow [R]equest" -hint="Follow [R]equest" - -# default="Follow [R]equest" -hint-alt="Follow [R]equest" - -# default=["r", "R"] -keys=["r","R"] - -[input.user-mute] -# Mute user - -# default="[M]ute" -hint="[M]ute" - -# default="Un[M]ute" -hint-alt="Un[M]ute" - -# default=["m", "M"] -keys=["m","M"] - -[input.user-links] -# Open links - -# default="[O]pen" -hint="[O]pen" - -# default=["o", "O"] -keys=["o","O"] - -[input.user-user] -# View user profile - -# default="[U]ser" -hint="[U]ser" - -# default=["u", "U"] -keys=["u","U"] - -[input.user-view-focus] -# Open view mode - -# default="[V]iew" -hint="[V]iew" - -# default=["v", "V"] -keys=["v","V"] - -[input.user-yank] -# Yank the user URL - -# default="[Y]ank" -hint="[Y]ank" - -# default=["y", "Y"] -keys=["y","Y"] - -[input.list-open-feed] -# Open list - -# default="[O]pen" -hint="[O]pen" - -# default=["o", "O"] -keys=["o","O"] - -[input.list-user-list] -# List all users in a list - -# default="[U]sers" -hint="[U]sers" - -# default=["u", "U"] -keys=["u","U"] - -[input.list-user-add] -# Add user to list - -# default="[A]dd" -hint="[A]dd" - -# default=["a", "A"] -keys=["a","A"] - -[input.list-user-delete] -# Delete user from list - -# default="[D]elete" -hint="[D]elete" - -# default=["d", "D"] -keys=["d","D"] - -[input.link-open] -# Open URL - -# default="[O]pen" -hint="[O]pen" - -# default=["o", "O"] -keys=["o","O"] - -[input.link-yank] -# Yank the URL - -# default="[Y]ank" -hint="[Y]ank" - -# default=["y", "Y"] -keys=["y","Y"] - -[input.tag-open-feed] -# Open tag feed - -# default="[O]pen" -hint="[O]pen" - -# default=["o", "O"] -keys=["o","O"] - -[input.tag-follow] -# Toggle follow on tag - -# default="[F]ollow" -hint="[F]ollow" - -# default="Un[F]ollow" -hint-alt="Un[F]ollow" - -# default=["f", "F"] -keys=["f","F"] - -[input.compose-edit-cw] -# Edit content warning text on new toot - -# default="[C]W text" -hint="[C]W text" - -# default=["c", "C"] -keys=["c","C"] - -[input.compose-edit-text] -# Edit the text on new toot - -# default="[E]dit text" -hint="[E]dit text" - -# default=["e", "E"] -keys=["e","E"] - -[input.compose-include-quote] -# Include a quote when replying - -# default="[I]nclude quote" -hint="[I]nclude quote" - -# default=["i", "I"] -keys=["i","I"] - -[input.compose-media-focus] -# Focus on adding media to toot - -# default="[M]edia" -hint="[M]edia" - -# default=["m", "M"] -keys=["m","M"] - -[input.compose-post] -# Post the new toot - -# default="[P]ost" -hint="[P]ost" - -# default=["p", "P"] -keys=["p","P"] - -[input.compose-toggle-content-warning] -# Toggle content warning on toot - -# default="[T]oggle CW" -hint="[T]oggle CW" - -# default=["t", "T"] -keys=["t","T"] - -[input.compose-visibility] -# Edit the visibility on new toot - -# default="[V]isibility" -hint="[V]isibility" - -# default=["v", "V"] -keys=["v","V"] - -[input.compose-language] -# Edit the language of a toot - -# default="[L]ang" -hint="[L]ang" - -# default=["l", "L"] -keys=["l","L"] - -[input.compose-poll] -# Switch to creating a poll - -# default="P[O]ll" -hint="P[O]ll" - -# default=["o", "O"] -keys=["o","O"] - -[input.media-delete] -# Delete media file - -# default="[D]elete" -hint="[D]elete" - -# default=["d", "D"] -keys=["d","D"] - -[input.media-edit-desc] -# Edit the description on media file - -# default="[E]dit desc" -hint="[E]dit desc" - -# default=["e", "E"] -keys=["e","E"] - -[input.media-add] -# Add a new media file - -# default="[A]dd" -hint="[A]dd" - -# default=["a", "A"] -keys=["a","A"] - -[input.vote-vote] -# Vote on poll - -# default="[V]ote" -hint="[V]ote" - -# default=["v", "V"] -keys=["v","V"] - -[input.vote-select] -# Select item to vote on - -# default="[Enter] to select" -hint="[Enter] to select" - -# default=["Enter"] -special-keys=["Enter"] - -[input.poll-add] -# Add a new poll option - -# default="[A]dd" -hint="[A]dd" - -# default=["a", "A"] -keys=["a","A"] - -[input.poll-edit] -# Edit a poll option - -# default="[E]dit" -hint="[E]dit" - -# default=["e", "E"] -keys=["e","E"] - -[input.poll-delete] -# Delete a poll option - -# default="[D]elete" -hint="[D]elete" - -# default=["d", "D"] -keys=["d","D"] - -[input.poll-multi-toggle] -# Toggle voting on multiple options - -# default="Toggle [M]ultiple" -hint="Toggle [M]ultiple" - -# default=["m", "M"] -keys=["m","M"] - -[input.poll-expiration] -# Change the expiration of poll - -# default="E[X]pires" -hint="E[X]pires" - -# default=["x", "X"] -keys=["x","X"] - -[input.preference-name] -# Change display name - -# default="[N]ame" -hint="[N]ame" - -# default=["n", "N"] -keys=["n","N"] - -[input.preference-visibility] -# Change default visibility of toots - -# default="[V]isibility" -hint="[V]isibility" - -# default=["v", "V"] -keys=["v","V"] - -[input.preference-bio] -# Change bio in profile - -# default="[B]io" -hint="[B]io" - -# default=["b", "B"] -keys=["b","B"] - -[input.preference-save] -# Save your preferences - -# default="[S]ave" -hint="[S]ave" - -# default=["s", "S"] -keys=["s","S"] - -[input.preference-fields] -# Edit profile fields - -# default="[F]ields" -hint="[F]ields" - -# default=["f", "F"] -keys=["f","F"] - -[input.preference-fields-add] -# Add new field - -# default="[A]dd" -hint="[A]dd" - -# default=["a", "A"] -keys=["a","A"] - -[input.preference-fields-edit] -# Edit current field - -# default="[E]dit" -hint="[E]dit" - -# default=["e", "E"] -keys=["e","E"] - -[input.preference-fields-delete] -# Delete current field - -# default="[D]elete" -hint="[D]elete" - -# default=["d", "D"] -keys=["d","D"] - -[input.editor-exit] -# Exit the editor - -# default="[Esc] when done" -hint="[Esc] when done" - -# default=["Esc"] -special-keys=["Esc"] diff --git a/.config/vifm/vifmrc b/.config/vifm/vifmrc index 1ede1d3..aecca45 100644 --- a/.config/vifm/vifmrc +++ b/.config/vifm/vifmrc @@ -298,8 +298,8 @@ \*.php, \*.md,*.html, \*.json,*.xml - \ env -uCOLORTERM bat --color always --theme 'Visual Studio Dark+' --wrap never --pager never --tabs 2 %c -p - fileviewer , 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 , env -uCOLORTERM batcat --color always --theme 'Visual Studio Dark+' --wrap never --pager never --tabs 2 %c -p " #endregion F " #region S – sS keys nnoremap sf :file & diff --git a/.newsboat/README.md b/.newsboat/README.md deleted file mode 100644 index 024f2e4..0000000 --- a/.newsboat/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Newsboat -[newsboat/newsboat: An RSS/Atom feed reader for text terminals](https://github.com/newsboat/newsboat) - -## Related files -- [./\*](./) diff --git a/.newsboat/config b/.newsboat/config deleted file mode 100644 index 2094eb0..0000000 --- a/.newsboat/config +++ /dev/null @@ -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 : diff --git a/.newsboat/html2rss-streamCZ.mjs b/.newsboat/html2rss-streamCZ.mjs deleted file mode 100755 index 3983553..0000000 --- a/.newsboat/html2rss-streamCZ.mjs +++ /dev/null @@ -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[^>]*>([^<]*)]*>([^<]*) d.padStart(2, "0")).join("-")+"T00:00:00.000Z"; } - function pluckFound([ _, found]){ return found; } -} diff --git a/.newsboat/html2rss.mjs b/.newsboat/html2rss.mjs deleted file mode 100644 index 4263e7c..0000000 --- a/.newsboat/html2rss.mjs +++ /dev/null @@ -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} - * */ -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 [ - "", - ""+title+"", - ""+link+"", - ""+date+"", - "" - ].join("\n"); - }); - return [ - ``, - ``, - "", - `${title}`, - `${url}`, - ...articles_rss, - "", - "" - ].join("\n"); - } -} diff --git a/.newsboat/urls b/.newsboat/urls deleted file mode 100644 index b4c72c4..0000000 --- a/.newsboat/urls +++ /dev/null @@ -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 diff --git a/.profile b/.profile index c7019b5..830d74f 100644 --- a/.profile +++ b/.profile @@ -30,15 +30,7 @@ export GTK_MODULES export UBUNTU_MENUPROXY export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/" - -# Ubuntu make installation of Ubuntu Make binary symlink -PATH=/home/jaandrle/.local/share/umake/bin:$PATH - [ -f /home/jaandrle/.bash/.profile_androidsdk ] && . /home/jaandrle/.bash/.profile_androidsdk - # Added by Toolbox App export PATH="$PATH:/home/jaandrle/.local/share/JetBrains/Toolbox/scripts" - - -. "$HOME/.cargo/env" diff --git a/.vim/coc-settings.json b/.vim/coc-settings.json index 9fd26d2..0a7a2ba 100644 --- a/.vim/coc-settings.json +++ b/.vim/coc-settings.json @@ -26,5 +26,5 @@ "complexity": ["error", 15] } } - } + } } diff --git a/.vimrc b/.vimrc index 154565f..c15551f 100644 --- a/.vimrc +++ b/.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 scriptencoding utf-8 | set encoding=utf-8 + set pythonthreedll=/lib/x86_64-linux-gnu/libpython3.10.so.1.0 let $BASH_ENV = "~/.bashrc" set runtimepath^=~/.vim/bundle/* packadd! matchit diff --git a/bin/github-releases.js b/bin/github-releases.js deleted file mode 100755 index ea499c0..0000000 --- a/bin/github-releases.js +++ /dev/null @@ -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 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 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 (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))); -} diff --git a/bin/github-releases.json b/bin/github-releases.json deleted file mode 100644 index 005ed1b..0000000 --- a/bin/github-releases.json +++ /dev/null @@ -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" - } - ] -} \ No newline at end of file diff --git a/bin/github-releases.mjs b/bin/github-releases.mjs index 559cdfd..a72d5b8 100755 --- a/bin/github-releases.mjs +++ b/bin/github-releases.mjs @@ -34,8 +34,10 @@ */ import { join } from "node:path"; const path_config= $.xdg.config`github-releases`; -const path_config_json= join(path_config, "config.json"); -const path_config_lock= join(path_config, "lock"); +const paths= { + /** config file path — JSON stringify of {@link Config} */ config: join(path_config, "config.json"), + /** path to lock file to prevent multiple instances */ lock: join(path_config, "lock"), +}; const path_temp= $.xdg.temp`github-releases.json`; let url_api= "github"; const urls_api= { @@ -52,7 +54,7 @@ const css= echo.css` `; $.api() - .version("2.1.0") + .version("2.2.0") .describe("Helper for working with “packages” stored in GitHub releases.") .option("--verbose", "Verbose output (WIP)") .option("--group, -G", "Filter by group (not awaiable for noGRA)") @@ -61,25 +63,71 @@ $.api() "- GitHub (default): https://api.github.com/repos/", "- Ungh: https://ungh.cc/repos/", "(not awaiable for noGRA)" ], "github") .command("unlock", "[noGRA] DANGER: Removes lock file. Use only if you know what you are doing!") -.action(function(){ - s.rm(path_config_lock); -}) -.command("config [mode]", [ "[noGR] Config (file), use `mode` with these options:", + .action(function(){ + s.rm(paths.lock); + }) +.command("config [mode]", [ "[noGRA] Config (file), use `mode` with these options:", "- `edit`: opens config file in terminal editor using `$EDITOR` (defaults to vim)", "- `path`: prints path to config file" ]) .action(async function(mode= "path"){ switch(mode){ - case "path": echo(path_config_json); break; + case "path": echo(paths.config); break; case "edit": const editor= $.env.EDITOR || "vim"; - await s.runA`${editor} ${path_config_json}`.pipe(process.stdout); + await s.runA`${editor} ${paths.config}`.pipe(process.stdout); break; default: echo(`Unknown mode: '${mode}'. See '--help' for details.`); } $.exit(0); }) +.command("edit ", "Edit “package” information") + .alias("add") + .action(async function(repository){ + if(!repository || !repository.includes("/")) + $.error(`Invalid repository: '${repository}'. Repository must be in the form '/'.`); + const config= /** @type {Config} */ ( readConfig() ); + const i= config.packages.findIndex(r=> r.repository===repository); + echo(repository + ` — ${i==-1 ? "New" : "Edit"} package:`); + echo(`Use to autocomplete${i===-1 ? "" : " and empty to keep current value"}.`); + echo(""); + const pkg= config.packages[i] || { repository, group: "" }; + const groups= [ ...new Set(config.packages.map(r=> r.group)) ]; + const q= (question, initial, ...c)=> { + const completions= [ ...new Set([initial, ...c.flat()]) ].filter(Boolean); + if(initial) question+= ` (current \`${initial}\`)`; + question= echo.format("%c"+question, css.pkg); + return s.read({ "-p": question+": ", completions }).then(pipe( + value=> value || initial, + value=> value ? value : $.error(`Missing '${question}'.`) + )); + }; + + try{ + const name= await q("Name", pkg.name); + echo("(i) use `skip` as part of the group to skip it during checking/updating (“just register package”)."); + const group= await q("Group", pkg.group, groups); + const { description: description_remote }= await fetch(urls_api[url_api]+repository).then(r=> r.json()).catch(_=> ({})); + const description= await q("Description", pkg.description, description_remote); + const file_name= await q("File name", pkg.file_name, repository.split("/")); + const downloads= config.target+file_name; + const exec= await q("Is executable", pkg.exec, [ "yes", "no" ]); + echo("(i) The glare is used to determine the right file to download. It is regular expression."); + const glare= await q("Glare", pkg.glare); + + const pkg_edit= Object.assign({}, pkg, + { repository, name, description, group, file_name, exec, downloads, glare }); + config.packages[i===-1 ? config.packages.length : i]= pkg_edit; + s.echo(JSON.stringify(config, null, "\t")).to(paths.config); + echo(`%cSaved into config file '${paths.config}'.`, css.ok); + $.exit(0); + } catch(e){ + if(e instanceof $.Error) echo("%c"+e, css.err); + else echo(); + $.exit(1); + } + }) .command("ls", [ "Lists registered packages", "Repositories marked with `-` signifies that the package is in the 'skip' group.", "These are registered by this script but not managed by it (updates, etc).", @@ -88,7 +136,7 @@ $.api() .action(function(filter){ const config = readConfig(); for(const { repository, version, description, group } of grepPackages(config, filter)) - if(group!=="skip") + if(group && !group.includes("skip")) echo(`+ %c${repository}%c@${version ? version : "—"}: %c${description}`, css.pkg, css.unset, css.skip); else echo(`- %c${repository}: ${description}`, css.skip); @@ -106,17 +154,16 @@ $.api() }) .command("update", "Updates registered packages") .action(async function(filter){ - if(s.test("-f", path_config_lock)) - return $.error(`The lock file '${path_config_lock}' already exists! Check if some other instance is running.`); - s.touch(path_config_lock); + if(s.test("-f", paths.lock)) + return $.error(`The lock file '${paths.lock}' already exists! Check if some other instance is running.`); + s.touch(paths.lock); const config = readConfig(); const results= await check(grepPackages(config, filter)); - const start= Date.now(); let done= 0; let todo= []; echo("Collecting packages to update…"); for(const { status, value } of results){ - if(status!==3 || value.local.group==="skip") continue; + if(status!==3 || (value.local.group || "skip").includes("skip")) continue; echo("%c"+value.local.repository, css.pkg); todo.push(download( value, @@ -141,9 +188,9 @@ $.api() const { local, remote }= value; echo("%c✓ "+local.repository+"%c@"+remote.tag_name, css.ok, css.skip); } - s.echo(JSON.stringify(config, null, "\t")).to(path_config_json); + s.echo(JSON.stringify(config, null, "\t")).to(paths.config); } - s.rm(path_config_lock); + s.rm(paths.lock); $.exit(0); }) .parse(); @@ -186,7 +233,7 @@ function grepPackages({ packages }, { group, repository, api, verbose }){ } function echoPkgStatus(status, { local, remote }){ let status_css, status_text; - if(local.group==="skip"){ + if(local.group && local.group.includes("skip")){ status_text= "skipped"; status_css= "skip"; } else { @@ -198,7 +245,7 @@ function echoPkgStatus(status, { local, remote }){ } /** * @param {Config.packages} packages - * @return {{ status: 0|1|2|3, value: { remote: GitHubRelease, local: ConfigPackage } }} + * @return {Promise<{ status: 0|1|2|3, value: { remote: GitHubRelease, local: ConfigPackage } }>} * */ async function check(packages, cache){ return (await pipe( @@ -245,9 +292,9 @@ async function fetchRelease({ repository, tag_name_regex }, cache){ } function readConfig(){ - if(!s.test("-f", path_config_json)) return { packages: [] }; + if(!s.test("-f", paths.config)) return { packages: [] }; const out= Object.assign({ target: "~/bin/" }, - s.cat(path_config_json).xargs(JSON.parse)); + s.cat(paths.config).xargs(JSON.parse)); if(out.target.startsWith("~/")) out.target= $.xdg.home(out.target.slice(2)); return out; }