refact and moves ~/bin to ~/.local/bin

This commit is contained in:
2025-09-09 13:19:23 +02:00
parent b8cf5a87ab
commit fe4109c0f1
43 changed files with 514 additions and 21 deletions

View File

@@ -1,907 +0,0 @@
# bin — My helpers scritps/executable
## uu
- [./uu](./uu)
- [../.config/uurc](../.config/uurc)
## asciinema, asciinema-agg
plays/records terminal commands (agg cast→gif)
## Lists executables via `npm`, `pip`, …
<details>
<summary>brew</summary>
```
#region brew list --installed-on-request
act
azure-functions-core-tools@4
bash-completion
docker-compose
fabric-ai
pastel
pipx
podman
podman-compose
sc-im
silicon
viu
yt-dlp
#endregion
```
</details>
<details>
<summary>NPM executables</summary>
```
#region >_:npm ls --location global
/home/jaandrle/.nvm/versions/node/v22.17.1/lib
├── @abhagsain/ai-cli@1.3.0
├── @anthropic-ai/claude-code@1.0.62
├── @bitwarden/cli@2025.6.1
├── @google/gemini-cli@0.1.22
├── @openai/codex@0.10.0
├── aipick@1.0.2
├── azurite@3.34.0
├── bs@0.8.2 -> ./../../../../../Vzdálené/GitHub/bs-repo
├── catage@1.1.3
├── chrome-remote-interface@0.33.3
├── cordova-res@0.15.4
├── cordova@12.0.0
├── corepack@0.34.0
├── cssmodules-language-server@1.5.1
├── eslint@9.32.0
├── jshint@2.13.6
├── json-server@1.0.0-beta.3
├── mdexpr-agenda@0.6.0 -> ./../../../../../Vzdálené/GitHub/mdexpr-agenda
├── nodejsscript@1.0.3 -> ./../../../../../Vzdálené/GitHub/nodejsscript
├── npm@11.5.1
├── typescript@5.8.3
└── vscode-langservers-extracted@4.10.0
#endregion
```
</details>
<details>
<summary>APT</summary>
```
#region apt list '~i !~M !~E !(~npython3-*|~slib|~nx11-*|~nxserver-*|~ntuxedo-*)'
7zip/noble,now 23.01+dfsg-11 amd64 [instalovaný]
accounts-qml-module-doc/tuxedo,tuxedo,now 0.7+git20231028.05e79eb-6~tux1 all [instalovaný]
accountsservice/noble,now 23.13.9-2ubuntu6 amd64 [instalovaný]
acl/noble-updates,now 2.3.2-1build1.1 amd64 [instalovaný]
acpi-support/now 0.144 amd64 [instalovaný,lokální]
acpica-tools/noble,now 20230628-1 amd64 [instalovaný]
acpid/noble,now 1:2.0.34-1ubuntu2 amd64 [instalovaný]
adduser/noble,noble,now 3.137ubuntu1 all [instalovaný]
adwaita-icon-theme/noble,noble,now 46.0-1 all [instalovaný]
adwaita-qt/noble,now 1.4.2-3build4 amd64 [instalovaný]
aha/noble,now 0.5.1-3build1 amd64 [instalovaný]
alsa-base/noble,noble,now 1.0.25+dfsg-0ubuntu7 all [instalovaný]
alsa-utils/noble,now 1.2.9-1ubuntu5 amd64 [instalovaný]
amd64-microcode/noble-updates,noble-security,now 3.20250311.1ubuntu0.24.04.1 amd64 [instalovaný]
anacron/noble,now 2.3-39ubuntu2 amd64 [instalovaný]
apparmor-utils/noble-updates,noble-updates,now 4.0.1really4.0.1-0ubuntu0.24.04.4 all [instalovaný]
appstream/tuxedo,now 1.0.4-1~tux1 amd64 [instalovaný]
apt-config-icons-hidpi/tuxedo,tuxedo,now 1.0.4-1~tux1 all [instalovaný]
apt-config-icons-large-hidpi/tuxedo,tuxedo,now 1.0.4-1~tux1 all [instalovaný]
apt-config-icons-large/tuxedo,tuxedo,now 1.0.4-1~tux1 all [instalovaný]
apt-config-icons/tuxedo,tuxedo,now 1.0.4-1~tux1 all [instalovaný]
apt-file/noble,noble,now 3.3 all [instalovaný]
apt-transport-https/noble-updates,noble-updates,now 2.8.3 all [instalovaný]
apt-utils/noble-updates,now 2.8.3 amd64 [instalovaný]
apt-xapian-index/noble,noble,now 0.54ubuntu1 all [instalovaný]
aptitude-common/noble,noble,now 0.8.13-5ubuntu5 all [instalovaný]
aptitude/noble,now 0.8.13-5ubuntu5 amd64 [instalovaný]
ark/tuxedo,now 4:24.12.3-1ubuntu1~tux1 amd64 [instalovaný]
aspell-de/noble,noble,now 20161207-12 all [instalovaný]
aspell-en/noble,noble,now 2020.12.07-0-1 all [instalovaný]
aspell/noble,now 0.60.8.1-1build1 amd64 [instalovaný]
at-spi2-common/noble,noble,now 2.52.0-1build1 all [instalovaný]
at-spi2-core/noble,now 2.52.0-1build1 amd64 [instalovaný]
attr/noble-updates,now 1:2.5.2-1build1.1 amd64 [instalovaný]
avahi-autoipd/noble,now 0.8-13ubuntu6 amd64 [instalovaný]
avahi-daemon/noble,now 0.8-13ubuntu6 amd64 [instalovaný]
avahi-utils/noble,now 0.8-13ubuntu6 amd64 [instalovaný]
backintime-qt/noble,noble,now 1.4.3-1 all [instalovaný]
bash-completion/noble,noble,now 1:2.11-8 all [instalovaný]
bat/noble,now 0.24.0-1build1 amd64 [instalovaný]
bc/noble,now 1.07.1-3ubuntu4 amd64 [instalovaný]
bind9-dnsutils/noble-updates,noble-security,now 1:9.18.30-0ubuntu0.24.04.2 amd64 [instalovaný]
bind9-host/noble-updates,noble-security,now 1:9.18.30-0ubuntu0.24.04.2 amd64 [instalovaný]
binutils-common/noble-updates,noble-security,now 2.42-4ubuntu2.5 amd64 [instalovaný]
binutils-x86-64-linux-gnu/noble-updates,noble-security,now 2.42-4ubuntu2.5 amd64 [instalovaný]
binutils/noble-updates,noble-security,now 2.42-4ubuntu2.5 amd64 [instalovaný]
bluedevil/tuxedo,now 4:6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
bluetooth/tuxedo,tuxedo,now 5.82-1tux1 all [instalovaný]
bluez-cups/tuxedo,now 5.82-1tux1 amd64 [instalovaný]
bluez-obexd/tuxedo,now 5.82-1tux1 amd64 [instalovaný]
bluez/tuxedo,now 5.82-1tux1 amd64 [instalovaný]
bolt/noble,now 0.9.7-1 amd64 [instalovaný]
bpfcc-tools/noble,noble,now 0.29.1+ds-1ubuntu7 all [instalovaný]
bpftrace/noble-updates,now 0.20.2-1ubuntu4.3 amd64 [instalovaný]
breeze-cursor-theme/tuxedo,tuxedo,now 4:6.3.5-0ubuntu1~tux1 all [instalovaný]
breeze-gtk-theme/tuxedo,now 6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
breeze/tuxedo,now 4:6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
bsdextrautils/noble-updates,now 2.39.3-9ubuntu6.3 amd64 [instalovaný]
btrfs-progs/noble,now 6.6.3-1.1build2 amd64 [instalovaný]
bubblewrap/noble-updates,noble-security,now 0.9.0-1ubuntu0.1 amd64 [instalovaný]
build-essential/noble,now 12.10ubuntu1 amd64 [instalovaný]
bup-doc/noble,noble,now 0.33.3-1build2 all [instalovaný]
bup/noble,now 0.33.3-1build2 amd64 [instalovaný]
bzip2/noble-updates,now 1.0.8-5.1build0.1 amd64 [instalovaný]
ca-certificates/noble,noble,now 20240203 all [instalovaný]
caca-utils/noble,now 0.99.beta20-4build2 amd64 [instalovaný]
cargo/noble-updates,now 1.75.0+dfsg0ubuntu1-0ubuntu7.1 amd64 [instalovaný]
catdoc/noble,now 1:0.95-5build1 amd64 [instalovaný]
cdrdao/noble,now 1:1.2.4-3build1 amd64 [instalovaný]
chafa/noble,now 1.14.0-1.1build1 amd64 [instalovaný]
cifs-utils/noble-updates,noble-security,now 2:7.0-2ubuntu0.2 amd64 [instalovaný]
clinfo/noble,now 3.0.23.01.25-1build1 amd64 [instalovaný]
cmake/tuxedo,now 3.31.6-1ubuntu1~tux1 amd64 [instalovaný]
code/stable,now 1.103.2-1755709794 amd64 [instalovaný]
colord-data/noble,noble,now 1.4.7-1build2 all [instalovaný]
colord/noble,now 1.4.7-1build2 amd64 [instalovaný]
command-not-found/noble,noble,now 23.04.0 all [instalovaný]
console-data/noble,noble,now 2:1.12-9 all [instalovaný]
console-setup-linux/noble,noble,now 1.226ubuntu1 all [instalovaný]
console-setup/noble,noble,now 1.226ubuntu1 all [instalovaný]
containerd.io/noble,now 1.7.27-1 amd64 [instalovaný]
cpio/noble,now 2.15+dfsg-1ubuntu2 amd64 [instalovaný]
cpp-13-x86-64-linux-gnu/noble-updates,noble-security,now 13.3.0-6ubuntu2~24.04 amd64 [instalovaný]
cpp-13/noble-updates,noble-security,now 13.3.0-6ubuntu2~24.04 amd64 [instalovaný]
cpp-x86-64-linux-gnu/noble,now 4:13.2.0-7ubuntu1 amd64 [instalovaný]
cpp/noble,now 4:13.2.0-7ubuntu1 amd64 [instalovaný]
cpufrequtils/noble,now 008-2build2 amd64 [instalovaný]
cpuid/noble,now 20240330-1ubuntu2 amd64 [instalovaný]
cracklib-runtime/noble,now 2.9.6-5.1build2 amd64 [instalovaný]
cron-daemon-common/noble,noble,now 3.0pl1-184ubuntu2 all [instalovaný]
cron/noble,now 3.0pl1-184ubuntu2 amd64 [instalovaný]
cryfs/noble,now 0.11.4-1build5 amd64 [instalovaný]
cryptmount/noble,now 6.2.0-2 amd64 [instalovaný]
cryptsetup-bin/noble-updates,now 2:2.7.0-1ubuntu4.2 amd64 [instalovaný]
cryptsetup-initramfs/noble-updates,noble-updates,now 2:2.7.0-1ubuntu4.2 all [instalovaný]
cryptsetup/noble-updates,now 2:2.7.0-1ubuntu4.2 amd64 [instalovaný]
cups-browsed/noble-updates,now 2.0.0-0ubuntu10.3 amd64 [instalovaný]
cups-bsd/noble-updates,noble-security,now 2.4.7-1.2ubuntu7.3 amd64 [instalovaný]
cups-client/noble-updates,noble-security,now 2.4.7-1.2ubuntu7.3 amd64 [instalovaný]
cups-common/noble-updates,noble-updates,noble-security,noble-security,now 2.4.7-1.2ubuntu7.3 all [instalovaný]
cups-core-drivers/noble-updates,noble-security,now 2.4.7-1.2ubuntu7.3 amd64 [instalovaný]
cups-daemon/noble-updates,noble-security,now 2.4.7-1.2ubuntu7.3 amd64 [instalovaný]
cups-filters-core-drivers/noble,now 2.0.0-0ubuntu4 amd64 [instalovaný]
cups-filters/noble,now 2.0.0-0ubuntu4 amd64 [instalovaný]
cups-ipp-utils/noble-updates,noble-security,now 2.4.7-1.2ubuntu7.3 amd64 [instalovaný]
cups-pk-helper/noble,now 0.2.6-1ubuntu8 amd64 [instalovaný]
cups-ppdc/noble-updates,noble-security,now 2.4.7-1.2ubuntu7.3 amd64 [instalovaný]
cups-server-common/noble-updates,noble-updates,noble-security,noble-security,now 2.4.7-1.2ubuntu7.3 all [instalovaný]
cups/noble-updates,noble-security,now 2.4.7-1.2ubuntu7.3 amd64 [instalovaný]
curl/noble-updates,noble-security,now 8.5.0-2ubuntu10.6 amd64 [instalovaný]
curlftpfs/now 0.9.2-9build1 amd64 [instalovaný,lokální]
dbus-bin/noble-updates,now 1.14.10-4ubuntu4.1 amd64 [instalovaný]
dbus-daemon/noble-updates,now 1.14.10-4ubuntu4.1 amd64 [instalovaný]
dbus-session-bus-common/noble-updates,noble-updates,now 1.14.10-4ubuntu4.1 all [instalovaný]
dbus-system-bus-common/noble-updates,noble-updates,now 1.14.10-4ubuntu4.1 all [instalovaný]
dbus-user-session/noble-updates,now 1.14.10-4ubuntu4.1 amd64 [instalovaný]
dbus/noble-updates,now 1.14.10-4ubuntu4.1 amd64 [instalovaný]
dc/noble,now 1.07.1-3ubuntu4 amd64 [instalovaný]
dconf-cli/noble,now 0.40.0-4build2 amd64 [instalovaný]
debconf-i18n/noble,noble,now 1.5.86ubuntu1 all [instalovaný]
debconf-kde-data/noble,noble,now 1.1.0-1build3 all [instalovaný]
debconf-kde-helper/noble,now 1.1.0-1build3 amd64 [instalovaný]
debconf/noble,noble,now 1.5.86ubuntu1 all [instalovaný]
debhelper/noble,noble,now 13.14.1ubuntu5 all [instalovaný]
desktop-file-utils/noble,now 0.27-2build1 amd64 [instalovaný]
devscripts/noble,noble,now 2.23.7 all [instalovaný]
dhcpcd-base/noble-updates,now 1:10.0.6-1ubuntu3.1 amd64 [instalovaný]
dialog/noble,now 1.3-20240101-1 amd64 [instalovaný]
dict/noble,now 1.13.1+dfsg-1build1 amd64 [instalovaný]
dictionaries-common/noble,noble,now 1.29.7 all [instalovaný]
dirmngr/noble-updates,noble-security,now 2.4.4-2ubuntu17.3 amd64 [instalovaný]
distro-defaults/tuxedo,now 4.1.4~tux1 amd64 [instalovaný]
distro-info-data/noble-updates,noble-updates,now 0.60ubuntu0.3 all [instalovaný]
distro-info/noble,now 1.7build1 amd64 [instalovaný]
dkms/noble,noble,now 3.0.11-1ubuntu13 all [instalovaný]
dmeventd/noble-updates,now 2:1.02.185-3ubuntu3.2 amd64 [instalovaný]
dmidecode/noble-updates,now 3.5-3ubuntu0.1 amd64 [instalovaný]
dmsetup/noble-updates,now 2:1.02.185-3ubuntu3.2 amd64 [instalovaný]
dns-root-data/noble-updates,noble-updates,now 2024071801~ubuntu0.24.04.1 all [instalovaný]
dnsmasq-base/noble-updates,now 2.90-2ubuntu0.1 amd64 [instalovaný]
dnsutils/noble-updates,noble-updates,noble-security,noble-security,now 1:9.18.30-0ubuntu0.24.04.2 all [instalovaný]
docbook-xml/noble,noble,now 4.5-12 all [instalovaný]
docbook-xsl/noble,noble,now 1.79.2+dfsg-7 all [instalovaný]
docker-buildx-plugin/noble 0.27.0-1~ubuntu.24.04~noble amd64 [aktualizovatelný z: 0.26.1-1~ubuntu.24.04~noble]
docker-ce-cli/noble 5:28.4.0-1~ubuntu.24.04~noble amd64 [aktualizovatelný z: 5:28.3.3-1~ubuntu.24.04~noble]
docker-ce/noble 5:28.4.0-1~ubuntu.24.04~noble amd64 [aktualizovatelný z: 5:28.3.3-1~ubuntu.24.04~noble]
docker-compose-plugin/noble 2.39.2-1~ubuntu.24.04~noble amd64 [aktualizovatelný z: 2.39.1-1~ubuntu.24.04~noble]
dolphin-plugins/tuxedo,now 4:24.12.3-0ubuntu1~tux1 amd64 [instalovaný]
dolphin/tuxedo,now 4:25.04.3-0ubuntu0~tux1 amd64 [instalovaný]
dosfstools/noble,now 4.2-1.1build1 amd64 [instalovaný]
dracut-install/noble-updates,now 060+5-1ubuntu3.3 amd64 [instalovaný]
drkonqi/tuxedo,now 6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
e2fsprogs/noble-updates,now 1.47.0-2.4~exp1ubuntu4.1 amd64 [instalovaný]
ed/noble,now 1.20.1-1 amd64 [instalovaný]
edid-decode/noble,now 0.1~git20220315.cb74358c2896-1.1 amd64 [instalovaný]
efibootmgr/noble,now 18-1build2 amd64 [instalovaný]
efivar/noble,now 38-3.1build1 amd64 [instalovaný]
eject/noble-updates,now 2.39.3-9ubuntu6.3 amd64 [instalovaný]
emacsen-common/noble,noble,now 3.0.5 all [instalovaný]
encfs/noble,now 1.9.5-2ubuntu3 amd64 [instalovaný]
eobcanka/now 3.4.3 amd64 [instalovaný,lokální]
equivs/noble,noble,now 2.3.1 all [instalovaný]
ethtool/noble,now 1:6.7-1build1 amd64 [instalovaný]
evolution/noble-updates,now 3.52.3-0ubuntu1 amd64 [instalovaný]
exfat-fuse/noble,now 1.4.0-2 amd64 [instalovaný]
exfatprogs/noble,now 1.2.2-1build1 amd64 [instalovaný]
ext4magic/noble,now 0.3.2-14build2 amd64 [instalovaný]
fakeroot/noble,now 1.33-1 amd64 [instalovaný]
fbset/noble,now 2.1-33build1 amd64 [instalovaný]
fdisk/noble-updates,now 2.39.3-9ubuntu6.3 amd64 [instalovaný]
ffmpeg/noble,now 7:6.1.1-3ubuntu5 amd64 [instalovaný]
ffmpegthumbs/tuxedo,now 4:24.12.3-0ubuntu1~tux1 amd64 [instalovaný]
file/noble,now 1:5.45-3build1 amd64 [instalovaný]
finalrd/noble,noble,now 9build1 all [instalovaný]
firebird3.0-common-doc/noble,noble,now 3.0.11.33703.ds4-2ubuntu2 all [instalovaný]
firebird3.0-common/noble,noble,now 3.0.11.33703.ds4-2ubuntu2 all [instalovaný]
firmware-sof-signed/noble-updates,noble-updates,now 2023.12.1-1ubuntu1.7 all [instalovaný]
flatpak/noble-updates,noble-security,now 1.14.6-1ubuntu0.1 amd64 [instalovaný]
fontconfig/noble,now 2.15.0-1.1ubuntu2 amd64 [instalovaný]
fonts-dejavu-core/noble,noble,now 2.37-8 all [instalovaný]
fonts-dejavu-mono/noble,noble,now 2.37-8 all [instalovaný]
fonts-freefont-ttf/noble,noble,now 20211204+svn4273-2 all [instalovaný]
fonts-hack/noble,noble,now 3.003-3 all [instalovaný]
fonts-kacst-one/noble,noble,now 5.0+svn11846-10 all [instalovaný]
fonts-kacst/noble,noble,now 2.01+mry-15 all [instalovaný]
fonts-khmeros-core/noble,noble,now 5.0-9ubuntu1 all [instalovaný]
fonts-lao/noble,noble,now 0.0.20060226-10ubuntu2 all [instalovaný]
fonts-lato/noble,noble,now 2.015-1 all [instalovaný]
fonts-liberation-sans-narrow/noble,noble,now 1:1.07.6-4 all [instalovaný]
fonts-liberation2/noble,noble,now 1:2.1.5-3 all [instalovaný]
fonts-liberation/noble,noble,now 1:2.1.5-3 all [instalovaný]
fonts-noto-cjk/noble,noble,now 1:20230817+repack1-3 all [instalovaný]
fonts-noto-color-emoji/noble-updates,noble-updates,now 2.047-0ubuntu0.24.04.1 all [instalovaný]
fonts-noto-core/noble,noble,now 20201225-2 all [instalovaný]
fonts-noto-hinted/noble,noble,now 20201225-2 all [instalovaný]
fonts-noto-mono/noble,noble,now 20201225-2 all [instalovaný]
fonts-noto-ui-core/noble,noble,now 20201225-2 all [instalovaný]
fonts-noto-unhinted/noble,noble,now 20201225-2 all [instalovaný]
fonts-opensymbol/tuxedo,tuxedo,now 4:102.12+LibO25.2.5-0tux1 all [instalovaný]
fonts-ubuntu-console/noble,noble,now 0.869+git20240321-0ubuntu1 all [instalovaný]
fonts-ubuntu/noble,noble,now 0.869+git20240321-0ubuntu1 all [instalovaný]
fonts-urw-base35/noble,noble,now 20200910-8 all [instalovaný]
fonts-vlgothic/noble,noble,now 20220612-1ubuntu1 all [instalovaný]
foomatic-db-compressed-ppds/noble,noble,now 20230202-1 all [instalovaný]
fprintd/noble,now 1.94.3-1 amd64 [instalovaný]
freecell-solver-bin/noble,now 5.0.0-2build1 amd64 [instalovaný]
friendly-recovery/noble,noble,now 0.2.42 all [instalovaný]
fuse3/noble,now 3.14.0-5build1 amd64 [instalovaný]
fwupd-signed/noble,now 1.52+1.4-1 amd64 [instalovaný]
fwupd/noble-updates,now 1.9.31-0ubuntu1~24.04.1 amd64 [instalovaný]
g++-13-x86-64-linux-gnu/noble-updates,noble-security,now 13.3.0-6ubuntu2~24.04 amd64 [instalovaný]
g++-13/noble-updates,noble-security,now 13.3.0-6ubuntu2~24.04 amd64 [instalovaný]
g++-x86-64-linux-gnu/noble,now 4:13.2.0-7ubuntu1 amd64 [instalovaný]
g++/noble,now 4:13.2.0-7ubuntu1 amd64 [instalovaný]
gcc-13-x86-64-linux-gnu/noble-updates,noble-security,now 13.3.0-6ubuntu2~24.04 amd64 [instalovaný]
gcc-13/noble-updates,noble-security,now 13.3.0-6ubuntu2~24.04 amd64 [instalovaný]
gcc-x86-64-linux-gnu/noble,now 4:13.2.0-7ubuntu1 amd64 [instalovaný]
gcc/noble,now 4:13.2.0-7ubuntu1 amd64 [instalovaný]
gdb/noble,now 15.0.50.20240403-0ubuntu1 amd64 [instalovaný]
gddrescue/noble,now 1.27-1 amd64 [instalovaný]
gdebi-core/noble,noble,now 0.9.5.7+nmu7 all [instalovaný]
genisoimage/noble,now 9:1.1.11-3.5 amd64 [instalovaný]
geoip-database/noble,noble,now 20240403-1ubuntu1 all [instalovaný]
gettext-base/noble,now 0.21-14ubuntu2 amd64 [instalovaný]
gh/noble-updates,noble-security,now 2.45.0-1ubuntu0.3 amd64 [instalovaný]
ghostscript/noble-updates,noble-security,now 10.02.1~dfsg1-0ubuntu7.7 amd64 [instalovaný]
gir1.2-atk-1.0/noble,now 2.52.0-1build1 amd64 [instalovaný]
gir1.2-atspi-2.0/noble,now 2.52.0-1build1 amd64 [instalovaný]
gir1.2-freedesktop/noble,now 1.80.1-1 amd64 [instalovaný]
gir1.2-gdkpixbuf-2.0/noble-updates,noble-security,now 2.42.10+dfsg-3ubuntu3.2 amd64 [instalovaný]
gir1.2-girepository-2.0/noble,now 1.80.1-1 amd64 [instalovaný]
gir1.2-glib-2.0/noble-updates,noble-security,now 2.80.0-6ubuntu3.4 amd64 [instalovaný]
gir1.2-gstreamer-1.0/noble-updates,noble-security,now 1.24.2-1ubuntu0.1 amd64 [instalovaný]
gir1.2-gtk-3.0/noble-updates,now 3.24.41-4ubuntu1.3 amd64 [instalovaný]
gir1.2-handy-1/noble,now 1.8.3-1build2 amd64 [instalovaný]
gir1.2-harfbuzz-0.0/noble,now 8.3.0-2build2 amd64 [instalovaný]
gir1.2-notify-0.7/noble,now 0.8.3-1build2 amd64 [instalovaný]
gir1.2-packagekitglib-1.0/noble-updates,now 1.2.8-2ubuntu1.2 amd64 [instalovaný]
gir1.2-pango-1.0/noble,now 1.52.1+ds-1build1 amd64 [instalovaný]
gir1.2-polkit-1.0/noble-updates,now 124-2ubuntu1.24.04.2 amd64 [instalovaný]
gir1.2-secret-1/noble,now 0.21.4-1build3 amd64 [instalovaný]
gir1.2-wnck-3.0/noble,now 43.0-3build4 amd64 [instalovaný]
git-delta/noble,now 0.16.5-5 amd64 [instalovaný]
git-email/noble-updates,noble-updates,noble-security,noble-security,now 1:2.43.0-1ubuntu7.3 all [instalovaný]
git-extras/noble,noble,now 7.1.0-1 all [instalovaný]
git-man/noble-updates,noble-updates,noble-security,noble-security,now 1:2.43.0-1ubuntu7.3 all [instalovaný]
git/noble-updates,noble-security,now 1:2.43.0-1ubuntu7.3 amd64 [instalovaný]
gnome-icon-theme/noble,noble,now 3.12.0-5 all [instalovaný]
gnupg-agent/noble-updates,noble-updates,noble-security,noble-security,now 2.4.4-2ubuntu17.3 all [instalovaný]
gnupg-l10n/noble-updates,noble-updates,noble-security,noble-security,now 2.4.4-2ubuntu17.3 all [instalovaný]
gnupg-utils/noble-updates,noble-security,now 2.4.4-2ubuntu17.3 amd64 [instalovaný]
gnupg2/noble-updates,noble-updates,noble-security,noble-security,now 2.4.4-2ubuntu17.3 all [instalovaný]
gnupg/noble-updates,noble-updates,noble-security,noble-security,now 2.4.4-2ubuntu17.3 all [instalovaný]
gnutls-bin/noble-updates,noble-security,now 3.8.3-1.1ubuntu3.4 amd64 [instalovaný]
go-mtpfs/noble-updates,noble-security,now 1.0.0+git20200111.42254b1-1ubuntu0.24.04.3 amd64 [instalovaný]
gpg-agent/noble-updates,noble-security,now 2.4.4-2ubuntu17.3 amd64 [instalovaný]
gpg-wks-client/noble-updates,noble-security,now 2.4.4-2ubuntu17.3 amd64 [instalovaný]
gpg-wks-server/noble-updates,noble-security,now 2.4.4-2ubuntu17.3 amd64 [instalovaný]
gpg/noble-updates,noble-security,now 2.4.4-2ubuntu17.3 amd64 [instalovaný]
gpgconf/noble-updates,noble-security,now 2.4.4-2ubuntu17.3 amd64 [instalovaný]
gpgsm/noble-updates,noble-security,now 2.4.4-2ubuntu17.3 amd64 [instalovaný]
gpgv/noble-updates,noble-security,now 2.4.4-2ubuntu17.3 amd64 [instalovaný]
gpm/noble,now 1.20.7-11 amd64 [instalovaný]
groff-base/noble,now 1.23.0-3build2 amd64 [instalovaný]
grub-common/noble-updates,now 2.12-1ubuntu7.3 amd64 [instalovaný]
grub-efi-amd64-bin/noble-updates,now 2.12-1ubuntu7.3 amd64 [instalovaný]
grub-efi-amd64-signed/noble-updates,now 1.202.5+2.12-1ubuntu7.3 amd64 [instalovaný]
grub-gfxpayload-lists/noble,now 0.7build2 amd64 [instalovaný]
grub-pc-bin/noble-updates,now 2.12-1ubuntu7.3 amd64 [instalovaný]
grub-pc/noble-updates,now 2.12-1ubuntu7.3 amd64 [instalovaný]
grub2-common/noble-updates,now 2.12-1ubuntu7.3 amd64 [instalovaný]
gstreamer-qapt/noble,now 3.0.5-2build3 amd64 [instalovaný]
gstreamer1.0-nice/noble,now 0.1.21-2build3 amd64 [instalovaný]
gstreamer1.0-tools/noble-updates,noble-security,now 1.24.2-1ubuntu0.1 amd64 [instalovaný]
gtk-update-icon-cache/noble-updates,now 3.24.41-4ubuntu1.3 amd64 [instalovaný]
gtk2-engines-pixbuf/noble-updates,noble-security,now 2.24.33-4ubuntu1.1 amd64 [instalovaný]
guile-3.0-libs/noble,now 3.0.9-1build2 amd64 [instalovaný]
hdparm/noble,now 9.65+ds-1build1 amd64 [instalovaný]
hicolor-icon-theme/noble,noble,now 0.17-2 all [instalovaný]
hplip-data/noble,noble,now 3.23.12+dfsg0-0ubuntu5 all [instalovaný]
hplip/noble,now 3.23.12+dfsg0-0ubuntu5 amd64 [instalovaný]
hspell/noble,now 1.4-3.1build1 amd64 [instalovaný]
htop/noble,now 3.3.0-4build1 amd64 [instalovaný]
humanity-icon-theme/noble,noble,now 0.6.16 all [instalovaný]
hunspell-cs/noble,noble,now 1:24.2.1-1 all [instalovaný]
hunspell-en-gb/noble,noble,now 1:24.2.1-1 all [instalovaný]
hunspell-en-us/noble,noble,now 1:2020.12.07-2 all [instalovaný]
hunspell/noble,now 1.7.2+really1.7.2-10build3 amd64 [instalovaný]
hw-probe/noble,noble,now 1.6.5-1 all [instalovaný]
hwdata/tuxedo,tuxedo,now 0.394-1tux1 all [instalovaný]
hwinfo/noble,now 21.82-1.1build1 amd64 [instalovaný]
hyphen-de/noble,noble,now 1:24.2.1-1 all [instalovaný]
hyphen-en-gb/noble,noble,now 1:24.2.1-1 all [instalovaný]
hyphen-en-us/noble,noble,now 2.8.8-7build3 all [instalovaný]
i2c-tools/noble,now 4.3-4build2 amd64 [instalovaný]
i965-va-driver/noble,now 2.4.1+dfsg1-1build2 amd64 [instalovaný]
ibus-data/noble,noble,now 1.5.29-2 all [instalovaný]
ibverbs-providers/noble-updates,now 50.0-2ubuntu0.2 amd64 [instalovaný]
icaclient/now 24.8.0.98 amd64 [instalovaný,lokální]
ieee-data/noble,noble,now 20220827.1 all [instalovaný]
iio-sensor-proxy/tuxedo,tuxedo,now 3.5-5tux1 amd64 [instalovaný]
imagemagick-6.q16/noble,now 8:6.9.12.98+dfsg1-5.2build2 amd64 [instalovaný]
imagemagick-7.q16/tuxedo,now 8:7.1.1.43+dfsg1-1~rux1 amd64 [instalovaný]
info/noble,now 7.1-3build2 amd64 [instalovaný]
initramfs-tools-bin/tuxedo,now 2:0.142ubuntu26-tux1 amd64 [instalovaný]
initramfs-tools-core/tuxedo,tuxedo,now 2:0.142ubuntu26-tux1 all [instalovaný]
initramfs-tools/tuxedo,tuxedo,now 2:0.142ubuntu26-tux1 all [instalovaný]
inotify-tools/noble,now 3.22.6.0-4 amd64 [instalovaný]
install-info/noble,now 7.1-3build2 amd64 [instalovaný]
intel-media-va-driver/noble-updates,now 24.1.0+dfsg1-1ubuntu0.1 amd64 [instalovaný]
intel-microcode/noble-updates,noble-security,now 3.20250512.0ubuntu0.24.04.1 amd64 [instalovaný]
inxi/tuxedo,tuxedo,now 3.3.38-1-1tux1 all [instalovaný]
ipp-usb/noble-updates,noble-security,now 0.9.24-0ubuntu3.3 amd64 [instalovaný]
iproute2/noble-updates,now 6.1.0-1ubuntu6.2 amd64 [instalovaný]
iptables/noble,now 1.8.10-3ubuntu2 amd64 [instalovaný]
iputils-ping/noble-updates,noble-security,now 3:20240117-1ubuntu0.1 amd64 [instalovaný]
iputils-tracepath/noble-updates,noble-security,now 3:20240117-1ubuntu0.1 amd64 [instalovaný]
irqbalance/noble,now 1.9.3-2ubuntu5 amd64 [instalovaný]
isa-support/noble,now 21build1 amd64 [instalovaný]
isc-dhcp-client/noble,now 4.4.3-P1-4ubuntu2 amd64 [instalovaný]
isc-dhcp-common/noble,now 4.4.3-P1-4ubuntu2 amd64 [instalovaný]
isoimagewriter/tuxedo,now 24.12.3-0ubuntu1~tux1 amd64 [instalovaný]
iucode-tool/noble,now 2.3.1-3build1 amd64 [instalovaný]
iw/noble,now 6.7-1build1 amd64 [instalovaný]
javascript-common/noble,noble,now 11+nmu1 all [instalovaný]
jfsutils/noble,now 1.1.15-5build4 amd64 [instalovaný]
jp2a/noble,now 1.1.1-2ubuntu2 amd64 [instalovaný]
jq/noble-updates,noble-security,now 1.7.1-3ubuntu0.24.04.1 amd64 [instalovaný]
kaccounts-integration/tuxedo,now 4:24.12.3-0ubuntu1~tux1 amd64 [instalovaný]
kactivitymanagerd/tuxedo,now 6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
kalgebra/tuxedo,now 4:24.12.3-1ubuntu1~tux1 amd64 [instalovaný]
kamera/tuxedo,now 4:24.12.3-0ubuntu1~tux1 amd64 [instalovaný]
kamoso/tuxedo,now 24.12.3-0ubuntu1~tux1 amd64 [instalovaný]
kate/tuxedo,now 4:24.12.3-2ubuntu1~tux1 amd64 [instalovaný]
kbd/noble,now 2.6.4-2ubuntu2 amd64 [instalovaný]
kcalc/tuxedo,now 4:24.12.3-0ubuntu1~tux1 amd64 [instalovaný]
kcharselect/tuxedo,now 4:24.12.3-1ubuntu1~tux1 amd64 [instalovaný]
kde-baseapps/tuxedo,now 4:24.12.0+5.162ubuntu0~tux2 amd64 [instalovaný]
kde-cli-tools/tuxedo,now 4:6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
kde-config-cddb/tuxedo,now 4:24.12.3-0ubuntu1~tux1 amd64 [instalovaný]
kde-config-cron/tuxedo,now 4:24.12.3-0ubuntu1~tux1 amd64 [instalovaný]
kde-config-gtk-style-preview/tuxedo,now 4:6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
kde-config-gtk-style/tuxedo,now 4:6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
kde-config-sddm/tuxedo,now 4:6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
kde-config-tablet/tuxedo,now 6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
kde-config-updates/tuxedo,now 6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
kde-config-whoopsie/noble,now 15.10ubuntu6 amd64 [instalovaný]
kde-spectacle/tuxedo,now 4:6.3.5-oubuntu1~tux1 amd64 [instalovaný]
kde-style-breeze/tuxedo,now 4:6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
kde-zeroconf/tuxedo,now 4:24.12.3-0ubuntu1~tux1 amd64 [instalovaný]
kdeadmin/tuxedo,now 4:24.12.0+5.162ubuntu0~tux2 amd64 [instalovaný]
kdeconnect/tuxedo,now 24.12.3-0ubuntu1~tux1 amd64 [instalovaný]
kdegames-mahjongg-data-kf6/tuxedo,tuxedo,now 4:24.12.3-1ubuntu1~tux1 all [instalovaný]
kdegraphics-thumbnailers/tuxedo,now 4:24.12.3-0ubuntu1~tux1 amd64 [instalovaný]
kdenetwork-filesharing/tuxedo,now 4:24.12.3-0ubuntu1~tux1 amd64 [instalovaný]
kdeplasma-addons-data/tuxedo,tuxedo,now 4:6.3.5-0ubuntu1~tux1 all [instalovaný]
kdialog/tuxedo,now 4:24.12.3-0ubuntu1~tux1 amd64 [instalovaný]
kdoctools6/tuxedo,now 6.15.0-0ubuntu0~tux1 amd64 [instalovaný]
keditbookmarks/tuxedo,now 24.12.3-0ubuntu1~tux1 amd64 [instalovaný]
kerneloops/noble,now 0.12+git20140509-6ubuntu8 amd64 [instalovaný]
keyboard-configuration/noble,noble,now 1.226ubuntu1 all [instalovaný]
keyboxd/noble-updates,noble-security,now 2.4.4-2ubuntu17.3 amd64 [instalovaný]
keyutils/noble,now 1.6.3-3build1 amd64 [instalovaný]
kf6-breeze-icon-theme/tuxedo,tuxedo,now 6.15.0-0ubuntu0~tux1 all [instalovaný]
kfind/tuxedo,now 4:24.12.3-1ubuntu1~tux1 amd64 [instalovaný]
kgamma/tuxedo,now 6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
kglobalacceld/tuxedo,now 6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
khelpcenter/tuxedo,now 4:24.12.3-0ubuntu1~tux1 amd64 [instalovaný]
khotkeys-data/noble,noble,now 4:5.27.11-0ubuntu2 all [instalovaný]
khotkeys/noble,now 4:5.27.11-0ubuntu2 amd64 [instalovaný]
kimageformat-plugins/tuxedo,now 5.116.0-0ubuntu7~tux1 amd64 [instalovaný]
kio-admin/tuxedo,now 24.12.3-0ubuntu1~tux1 amd64 [instalovaný]
kio-extras/tuxedo,now 4:24.12.3-0ubuntu1~tux1 amd64 [instalovaný]
kmahjongg/tuxedo,now 4:24.12.3-1ubuntu1~tux1 amd64 [instalovaný]
kmenuedit/tuxedo,now 4:6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
kmod/noble-updates,now 31+20240202-2ubuntu7.1 amd64 [instalovaný]
konsole-kpart/tuxedo,now 4:24.12.3-0ubuntu1~tux1 amd64 [instalovaný]
konsole/tuxedo,now 4:24.12.3-0ubuntu1~tux1 amd64 [instalovaný]
kpackagetool5/tuxedo,now 5.116.0-0ubuntu1~tux1 amd64 [instalovaný]
krb5-locales/noble-updates,noble-updates,noble-security,noble-security,now 1.20.1-6ubuntu2.6 all [instalovaný]
krdc/tuxedo,now 4:25.03.70~git20250114.786409a6-2~tux1 amd64 [instalovaný]
kruler/tuxedo,now 4:24.12.3-0ubuntu1~tux1 amd64 [instalovaný]
krunner-symbols/now 1.1.0 amd64 [instalovaný,lokální]
kscreen/tuxedo,now 4:6.3.5-0ubuntu1~tux2 amd64 [instalovaný]
ksshaskpass/tuxedo,now 4:6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
ksystemlog/tuxedo,now 4:24.12.3-0ubuntu1~tux1 amd64 [instalovaný]
ksystemstats/tuxedo,now 6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
kubuntu-restricted-addons/noble,now 29 amd64 [instalovaný]
kubuntu-restricted-extras/noble,now 67 amd64 [instalovaný]
kup-backup/tuxedo,now 0.10.0-0ubuntu3~tux1 amd64 [instalovaný]
kwalletmanager/tuxedo,now 4:24.12.3-0ubuntu1~tux1 amd64 [instalovaný]
kwayland-integration/tuxedo,now 4:6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
kwin-style-breeze/tuxedo,now 4:6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
kwrite/tuxedo,now 4:24.12.3-2ubuntu1~tux1 amd64 [instalovaný]
kwrited/tuxedo,now 4:6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
lame/noble,now 3.100-6build1 amd64 [instalovaný]
language-pack-cs/noble-updates,noble-updates,now 1:24.04+20250724 all [instalovaný]
language-pack-de-base/noble-updates,noble-updates,now 1:24.04+20250724 all [instalovaný]
language-pack-de/noble-updates,noble-updates,now 1:24.04+20250724 all [instalovaný]
language-pack-en-base/noble-updates,noble-updates,now 1:24.04+20250724 all [instalovaný]
language-pack-en/noble-updates,noble-updates,now 1:24.04+20250724 all [instalovaný]
language-pack-gnome-cs-base/noble-updates,noble-updates,now 1:24.04+20250724 all [instalovaný]
language-pack-gnome-de-base/noble-updates,noble-updates,now 1:24.04+20250724 all [instalovaný]
language-pack-gnome-de/noble-updates,noble-updates,now 1:24.04+20250724 all [instalovaný]
language-pack-kde-cs/noble,noble,now 1:24.04.0ubuntu1 all [instalovaný]
language-pack-kde-de/noble,noble,now 1:24.04.0ubuntu1 all [instalovaný]
language-pack-kde-en/noble,noble,now 1:24.04.0ubuntu1 all [instalovaný]
language-selector-common/noble,noble,now 0.225 all [instalovaný]
laptop-detect/noble,noble,now 0.16 all [instalovaný]
layer-shell-qt/tuxedo,now 6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
less/noble-updates,noble-security,now 590-2ubuntu2.1 amd64 [instalovaný]
libimage-exiftool-perl/noble,noble,now 12.76+dfsg-1 all [instalovaný]
libkeyutils1/noble,now 1.6.3-3build1 amd64 [instalovaný]
libnotify-bin/noble,now 0.8.3-1build2 amd64 [instalovaný]
libnss-mdns/noble,now 0.15.1-4build1 amd64 [instalovaný]
libpam-fprintd/noble,now 1.94.3-1 amd64 [instalovaný]
libpam-kwallet5/tuxedo,now 4:6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
libpam-modules-bin/noble-updates,noble-security,now 1.5.3-5ubuntu5.4 amd64 [instalovaný]
libpam-modules/noble-updates,noble-security,now 1.5.3-5ubuntu5.4 amd64 [instalovaný]
libpam-runtime/noble-updates,noble-updates,noble-security,noble-security,now 1.5.3-5ubuntu5.4 all [instalovaný]
libsasl2-modules/noble-updates,now 2.1.28+dfsg1-5ubuntu3.1 amd64 [instalovaný]
linux-firmware/noble-updates,noble-security,now 20240318.git3b128b60-0ubuntu2.15 amd64 [instalovaný]
lm-sensors/noble,now 1:3.6.0-9build1 amd64 [instalovaný]
logrotate/noble,now 3.21.0-2build1 amd64 [instalovaný]
logsave/noble-updates,now 1.47.0-2.4~exp1ubuntu4.1 amd64 [instalovaný]
lp-solve/noble-updates,now 5.5.2.5-2ubuntu0.1 amd64 [instalovaný]
lsb-base/noble,noble,now 11.6 all [instalovaný]
lsb-release/noble,noble,now 12.0-2 all [instalovaný]
lshw/noble,now 02.19.git.2021.06.19.996aaad9c7-2build3 amd64 [instalovaný]
lsof/noble,now 4.95.0-1build3 amd64 [instalovaný]
lto-disabled-list/noble,noble,now 47 all [instalovaný]
lvm2/noble-updates,now 2.03.16-3ubuntu3.2 amd64 [instalovaný]
mailcap/noble,noble,now 3.70+nmu1ubuntu1 all [instalovaný]
make/noble,now 4.3-4.1build2 amd64 [instalovaný]
maliit-framework/tuxedo,now 2.3.0+z30~tux1 amd64 [instalovaný]
man-db/noble,now 2.12.0-4build2 amd64 [instalovaný]
manpages-de/noble,noble,now 4.21.0-2 all [instalovaný]
manpages/noble,noble,now 6.7-2 all [instalovaný]
markdownpart/tuxedo,now 24.12.3-0ubuntu1~tux1 amd64 [instalovaný]
mawk/noble,now 1.3.4.20240123-1build1 amd64 [instalovaný]
mc-data/tuxedo,tuxedo,now 3:4.8.31-1tux1 all [instalovaný]
mc/tuxedo,now 3:4.8.31-1tux1 amd64 [instalovaný]
mdadm/noble-updates,now 4.3-1ubuntu2.1 amd64 [instalovaný]
media-player-info/noble,noble,now 24-3 all [instalovaný]
media-types/noble,noble,now 10.1.0 all [instalovaný]
meld/noble,noble,now 3.22.2-1 all [instalovaný]
memtest86+/noble,now 7.00-1build1 amd64 [instalovaný]
memtester/noble,now 4.6.0-1 amd64 [instalovaný]
menu/noble,now 2.1.50 amd64 [instalovaný]
mesa-utils-bin/noble,now 9.0.0-2 amd64 [instalovaný]
mesa-utils/noble,now 9.0.0-2 amd64 [instalovaný]
milou/tuxedo,now 4:6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
mlocate/now 1.1.15-1ubuntu2 all [instalovaný,lokální]
mobile-broadband-provider-info/noble,noble,now 20230416-1 all [instalovaný]
modemmanager/noble,now 1.23.4-0ubuntu2 amd64 [instalovaný]
mokutil/noble,now 0.6.0-2build3 amd64 [instalovaný]
most/noble,now 5.2.0-1 amd64 [instalovaný]
mount/noble-updates,now 2.39.3-9ubuntu6.3 amd64 [instalovaný]
mpack/noble,now 1.6-18 amd64 [instalovaný]
mpg123/noble-updates,noble-security,now 1.32.5-1ubuntu1.1 amd64 [instalovaný]
mscompress/noble,now 0.4-10build1 amd64 [instalovaný]
mtools/noble,now 4.0.43-1build1 amd64 [instalovaný]
mtr-tiny/noble-updates,now 0.95-1.1ubuntu0.1 amd64 [instalovaný]
mysql-common/noble,noble,now 5.8+1.1.0build1 all [instalovaný]
nano/noble-updates,noble-security,now 7.2-2ubuntu0.1 amd64 [instalovaný]
net-tools/noble-updates,noble-security,now 2.10-0.1ubuntu4.4 amd64 [instalovaný]
netbase/noble,noble,now 6.4 all [instalovaný]
netcat-traditional/noble,now 1.10-48 amd64 [instalovaný]
netpbm/noble,now 2:11.05.02-1.1build1 amd64 [instalovaný]
netplan-generator/noble-updates,now 1.1.2-2~ubuntu24.04.2 amd64 [instalovaný]
netplan.io/noble-updates,now 1.1.2-2~ubuntu24.04.2 amd64 [instalovaný]
network-manager-openconnect/noble,now 1.2.10-3build2 amd64 [instalovaný]
network-manager-openvpn/noble,now 1.10.2-4build2 amd64 [instalovaný]
network-manager-pptp/noble,now 1.2.12-3build2 amd64 [instalovaný]
network-manager-vpnc/noble,now 1.2.8-7build2 amd64 [instalovaný]
network-manager/noble-updates,now 1.46.0-1ubuntu2.2 amd64 [instalovaný]
networkd-dispatcher/noble,noble,now 2.2.4-1 all [instalovaný]
nfs-common/noble-updates,now 1:2.6.4-3ubuntu5.1 amd64 [instalovaný]
nftables/noble,now 1.0.9-1build1 amd64 [instalovaný]
ntfs-3g/noble,now 1:2022.10.3-1.2ubuntu3 amd64 [instalovaný]
nvme-cli/noble-updates,now 2.8-1ubuntu0.1 amd64 [instalovaný]
ocean-sound-theme/tuxedo,tuxedo,now 6.3.5-0ubuntu1~tux1 all [instalovaný]
okular-extra-backends/tuxedo,now 4:24.12.3-0ubuntu1~tux1 amd64 [instalovaný]
okular/tuxedo,now 4:24.12.3-0ubuntu1~tux1 amd64 [instalovaný]
oneko/noble,now 1.2.sakura.6-15 amd64 [instalovaný]
openconnect/noble,now 9.12-1build5 amd64 [instalovaný]
openjdk-17-jdk/noble-updates,noble-security,now 17.0.16+8~us1-0ubuntu1~24.04.1 amd64 [instalovaný]
openjdk-17-jre/noble-updates,noble-security,now 17.0.16+8~us1-0ubuntu1~24.04.1 amd64 [instalovaný]
openjdk-21-jre/noble-updates,noble-security,now 21.0.8+9~us1-0ubuntu1~24.04.1 amd64 [instalovaný]
openjdk-8-jdk/noble-updates,noble-security,now 8u462-ga~us1-0ubuntu2~24.04.2 amd64 [instalovaný]
openjdk-8-jre/noble-updates,noble-security,now 8u462-ga~us1-0ubuntu2~24.04.2 amd64 [instalovaný]
opensnitch/noble-updates,noble-security,now 1.5.8.1-1ubuntu0.24.04.3 amd64 [instalovaný]
openssh-client/noble-updates,now 1:9.6p1-3ubuntu13.13 amd64 [instalovaný]
openssl/noble-updates,noble-security,now 3.0.13-0ubuntu3.5 amd64 [instalovaný]
openvpn/noble-updates,now 2.6.14-0ubuntu0.24.04.1 amd64 [instalovaný]
orca/noble,noble,now 46.1-1ubuntu1 all [instalovaný]
os-prober/noble,now 1.81ubuntu4 amd64 [instalovaný]
ovmf/noble-updates,noble-updates,now 2024.02-2ubuntu0.4 all [instalovaný]
oxygen-sounds/tuxedo,tuxedo,now 4:6.3.5-0ubuntu1~tux1 all [instalovaný]
p11-kit-modules/noble-updates,now 0.25.3-4ubuntu2.1 amd64 [instalovaný]
p11-kit/noble-updates,now 0.25.3-4ubuntu2.1 amd64 [instalovaný]
p7zip-full/noble,noble,now 16.02+transitional.1 all [instalovaný]
p7zip/noble,noble,now 16.02+transitional.1 all [instalovaný]
packagekit/noble-updates,now 1.2.8-2ubuntu1.2 amd64 [instalovaný]
pampi/noble,noble,now 1.1+dfsg1-9 all [instalovaný]
pandoc/noble,now 3.1.3+ds-2 amd64 [instalovaný]
par2/noble,now 0.8.1-3build1 amd64 [instalovaný]
parallel/noble,noble,now 20231122+ds-1 all [instalovaný]
parted/noble,now 3.6-4build1 amd64 [instalovaný]
partitionmanager/tuxedo,now 24.12.3-0ubuntu1~tux1 amd64 [instalovaný]
passwd/noble-updates,now 1:4.13+dfsg1-4ubuntu3.2 amd64 [instalovaný]
pastebinit/noble,noble,now 1.6.2-1 all [instalovaný]
patch/noble,now 2.7.6-7build3 amd64 [instalovaný]
pci.ids/noble-updates,noble-updates,now 0.0~2024.03.31-1ubuntu0.1 all [instalovaný]
pciutils/noble,now 1:3.10.0-2build1 amd64 [instalovaný]
pcmciautils/noble,now 018-14build1 amd64 [instalovaný]
perl-openssl-defaults/noble,now 7build3 amd64 [instalovaný]
perl/noble-updates,noble-security,now 5.38.2-3.2ubuntu0.2 amd64 [instalovaný]
phonon4qt6-backend-vlc/tuxedo,now 0.12.0-3build4~tux1 amd64 [instalovaný]
php5.6-cli/noble,now 5.6.40-86+ubuntu24.04.1+deb.sury.org+1 amd64 [instalovaný]
php5.6/noble,noble,now 5.6.40-86+ubuntu24.04.1+deb.sury.org+1 all [instalovaný]
php8.4-cli/noble,now 8.4.12-1+ubuntu24.04.1+deb.sury.org+1 amd64 [instalovaný]
php8.4/noble,noble,now 8.4.12-1+ubuntu24.04.1+deb.sury.org+1 all [instalovaný]
pinentry-curses/noble,now 1.2.1-3ubuntu5 amd64 [instalovaný]
pinentry-qt/noble,now 1.2.1-3ubuntu5 amd64 [instalovaný]
pipewire-bin/tuxedo,now 1.4.7-3tux1 amd64 [instalovaný]
pipewire-pulse/tuxedo,now 1.4.7-3tux1 amd64 [instalovaný]
pipewire-v4l2/tuxedo,now 1.4.7-3tux1 amd64 [instalovaný]
pkexec/noble-updates,now 124-2ubuntu1.24.04.2 amd64 [instalovaný]
pkgconf-bin/noble,now 1.8.1-2build1 amd64 [instalovaný]
pkgconf/noble,now 1.8.1-2build1 amd64 [instalovaný]
plasma-browser-integration/tuxedo,now 6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
plasma-calendar-addons/tuxedo,now 4:6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
plasma-dataengines-addons/tuxedo,now 4:6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
plasma-desktop/tuxedo,now 4:6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
plasma-discover-backend-flatpak/tuxedo,now 6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
plasma-discover-backend-fwupd/tuxedo,now 6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
plasma-discover-backend-snap/tuxedo,now 6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
plasma-discover/tuxedo,now 6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
plasma-disks/tuxedo,now 6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
plasma-firewall/tuxedo,now 6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
plasma-nm/tuxedo,now 4:6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
plasma-pa/tuxedo,now 4:6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
plasma-runner-installer/noble,now 3.0.5-2build3 amd64 [instalovaný]
plasma-runners-addons/tuxedo,now 4:6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
plasma-systemmonitor/tuxedo,now 6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
plasma-thunderbolt/tuxedo,now 6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
plasma-vault/tuxedo,now 6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
plasma-wallpapers-addons/tuxedo,now 4:6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
plasma-workspace-wallpapers/tuxedo,tuxedo,now 4:6.3.5-0ubuntu1~tux1 all [instalovaný]
plocate/noble,now 1.1.19-2ubuntu2 amd64 [instalovaný]
policykit-1/noble-updates,now 124-2ubuntu1.24.04.2 amd64 [instalovaný]
policykit-desktop-privileges/noble,noble,now 0.22 all [instalovaný]
polkit-kde-agent-1/tuxedo,now 4:6.3.5-0ubunntu1~tux1 amd64 [instalovaný]
polkitd/noble-updates,now 124-2ubuntu1.24.04.2 amd64 [instalovaný]
poppler-data/noble,noble,now 0.4.12-1 all [instalovaný]
poppler-utils/noble-updates,noble-security,now 24.02.0-1ubuntu9.6 amd64 [instalovaný]
power-profiles-daemon/noble-updates,now 0.21-1ubuntu1 amd64 [instalovaný]
powerdevil-data/tuxedo,tuxedo,now 4:6.3.5-0ubuntu1~tux1 all [instalovaný]
powerdevil/tuxedo,now 4:6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
powermgmt-base/noble-updates,noble-updates,now 1.37ubuntu0.1 all [instalovaný]
powertop/noble,now 2.15-3build1 amd64 [instalovaný]
ppp/noble,now 2.4.9-1+1.1ubuntu4 amd64 [instalovaný]
pptp-linux/noble,now 1.10.0-1build4 amd64 [instalovaný]
print-manager/tuxedo,now 6:6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
printer-driver-brlaser/noble,now 6-3build2 amd64 [instalovaný]
printer-driver-c2esp/noble,now 27-11ubuntu7 amd64 [instalovaný]
printer-driver-foo2zjs-common/noble,noble,now 20200505dfsg0-2ubuntu6 all [instalovaný]
printer-driver-foo2zjs/noble,now 20200505dfsg0-2ubuntu6 amd64 [instalovaný]
printer-driver-hpcups/noble,now 3.23.12+dfsg0-0ubuntu5 amd64 [instalovaný]
printer-driver-m2300w/noble,now 0.51-15build2 amd64 [instalovaný]
printer-driver-min12xxw/noble,now 0.0.9-11build3 amd64 [instalovaný]
printer-driver-postscript-hp/noble,now 3.23.12+dfsg0-0ubuntu5 amd64 [instalovaný]
printer-driver-ptouch/noble,now 1.7-1build2 amd64 [instalovaný]
printer-driver-pxljr/noble,now 1.4+repack0-6build2 amd64 [instalovaný]
printer-driver-sag-gdi/noble,noble,now 0.1-8 all [instalovaný]
printer-driver-splix/noble,now 2.0.0+svn315-7fakesync1ubuntu1 amd64 [instalovaný]
procps/noble-updates,now 2:4.0.4-4ubuntu3.2 amd64 [instalovaný]
psmisc/noble,now 23.7-1build1 amd64 [instalovaný]
publicsuffix/noble,noble,now 20231001.0357-0.1 all [instalovaný]
pwgen/noble,now 2.08-2build2 amd64 [instalovaný]
python-apt-common/noble-updates,noble-updates,now 2.7.7ubuntu5 all [instalovaný]
qapt-batch/noble,now 3.0.5-2build3 amd64 [instalovaný]
qapt-deb-installer/noble,now 3.0.5-2build3 amd64 [instalovaný]
qdbus-qt6/tuxedo,now 6.8.2-3~tux1 amd64 [instalovaný]
qml-module-org-kde-kirigami2/tuxedo,now 5.116.0-0ubuntu2~tux1 amd64 [instalovaný]
qml6-module-org-kde-kaccounts/tuxedo,now 4:24.12.3-0ubuntu1~tux1 amd64 [instalovaný]
qt5-qmake-bin/noble,now 5.15.13+dfsg-1ubuntu1 amd64 [instalovaný]
qt5-qmake/noble,now 5.15.13+dfsg-1ubuntu1 amd64 [instalovaný]
qt6-translations-l10n/tuxedo,tuxedo,now 6.8.2-2~tux1 all [instalovaný]
qttranslations5-l10n/noble,noble,now 5.15.13-1 all [instalovaný]
rake/noble,noble,now 13.0.6-3 all [instalovaný]
rdate/noble,now 1:1.11-3ubuntu2 amd64 [instalovaný]
read-edid/noble,now 3.0.2-1.1 amd64 [instalovaný]
readline-common/noble,noble,now 8.2-4build1 all [instalovaný]
reiserfsprogs/noble,now 1:3.6.27-7.1build1 amd64 [instalovaný]
rfkill/noble-updates,now 2.39.3-9ubuntu6.3 amd64 [instalovaný]
ripgrep/noble,now 14.1.0-1 amd64 [instalovaný]
rpcbind/noble,now 1.2.6-7ubuntu2 amd64 [instalovaný]
rsync/noble-updates,noble-security,now 3.2.7-1ubuntu1.2 amd64 [instalovaný]
rtkit/noble,now 0.13-5build1 amd64 [instalovaný]
ruby-net-telnet/noble,noble,now 0.2.0-1 all [instalovaný]
ruby-rubygems/noble,noble,now 3.4.20-1 all [instalovaný]
ruby-sdbm/noble,now 1.0.0-5build4 amd64 [instalovaný]
ruby-webrick/noble-updates,noble-updates,noble-security,noble-security,now 1.8.1-1ubuntu0.2 all [instalovaný]
ruby-xmlrpc/noble,noble,now 0.3.2-2 all [instalovaný]
ruby3.2/noble-security 3.2.3-1ubuntu0.24.04.6 amd64 [aktualizovatelný z: 3.2.3-1ubuntu0.24.04.5]
ruby/noble,now 1:3.2~ubuntu1 amd64 [instalovaný]
rubygems-integration/noble,noble,now 1.18 all [instalovaný]
samba-common-bin/noble-updates,now 2:4.19.5+dfsg-4ubuntu9.3 amd64 [instalovaný]
samba-common/noble-updates,noble-updates,now 2:4.19.5+dfsg-4ubuntu9.3 all [instalovaný]
sane-airscan/noble,now 0.99.29-0ubuntu4 amd64 [instalovaný]
sane-utils/noble,now 1.2.1-7build4 amd64 [instalovaný]
sbsigntool/noble,now 0.9.4-3.1ubuntu7 amd64 [instalovaný]
screen-resolution-extra/noble-updates,noble-updates,now 0.18.3ubuntu0.24.04.1 all [instalovaný]
sddm/tuxedo,now 1:0.21.0-5~24.04-1tux2 amd64 [instalovaný]
seafile-gui/noble,now 9.0.4+ds1-1ubuntu2 amd64 [instalovaný]
sensible-utils/noble,noble,now 0.0.22 all [instalovaný]
session-migration/noble,now 0.3.9build1 amd64 [instalovaný]
sgml-base/noble,noble,now 1.31 all [instalovaný]
sgml-data/noble,noble,now 2.0.11+nmu1 all [instalovaný]
shared-mime-info/noble,now 2.4-4 amd64 [instalovaný]
shellcheck/noble,now 0.9.0-1 amd64 [instalovaný]
shim-signed/noble,now 1.58+15.8-0ubuntu1 amd64 [instalovaný]
signon-kwallet-extension/tuxedo,now 4:24.12.3-0ubuntu1~tux1 amd64 [instalovaný]
signon-ui-service/tuxedo,tuxedo,now 0.18-1~tux1 all [instalovaný]
signond/tuxedo,now 8.61+git20231015.c8ad982-7ubuntu1~tux1 amd64 [instalovaný]
skanlite/tuxedo,now 24.12.3-0ubuntu1~tux1 amd64 [instalovaný]
smartmontools/noble,now 7.4-2build1 amd64 [instalovaný]
smbclient/noble-updates,now 2:4.19.5+dfsg-4ubuntu9.3 amd64 [instalovaný]
snapd/noble-updates,now 2.68.5+ubuntu24.04.1 amd64 [instalovaný]
socat/noble,now 1.8.0.0-4build3 amd64 [instalovaný]
software-properties-common/noble-updates,noble-updates,now 0.99.49.3 all [instalovaný]
software-properties-qt/noble-updates,noble-updates,now 0.99.49.3 all [instalovaný]
sound-icons/noble,noble,now 0.1-8 all [instalovaný]
sound-theme-freedesktop/noble,noble,now 0.8-2ubuntu1 all [instalovaný]
speech-dispatcher-audio-plugins/noble,now 0.12.0~rc2-2build3 amd64 [instalovaný]
speech-dispatcher/noble,now 0.12.0~rc2-2build3 amd64 [instalovaný]
squashfs-tools/noble,now 1:4.6.1-1build1 amd64 [instalovaný]
sse3-support/noble,now 21build1 amd64 [instalovaný]
sshfs/noble,now 3.7.3-1.1build3 amd64 [instalovaný]
ssl-cert/noble,noble,now 1.1.2ubuntu1 all [instalovaný]
sudo/noble-updates,noble-security,now 1.9.15p5-3ubuntu5.24.04.1 amd64 [instalovaný]
svgpart/tuxedo,now 4:24.12.3-0ubuntu1~tux1 amd64 [instalovaný]
switcheroo-control/noble,now 2.6-2build2 amd64 [instalovaný]
synaptic/noble,now 0.91.3build4 amd64 [instalovaný]
sysstat/noble,now 12.6.1-2 amd64 [instalovaný]
system-config-printer-common/noble,noble,now 1.5.18-1ubuntu9 all [instalovaný]
system-config-printer-udev/noble,now 1.5.18-1ubuntu9 amd64 [instalovaný]
system-config-printer/noble,noble,now 1.5.18-1ubuntu9 all [instalovaný]
systemd-hwe-hwdb/noble-updates,noble-updates,now 255.1.4 all [instalovaný]
systemd-resolved/noble-updates,now 255.4-1ubuntu8.10 amd64 [instalovaný]
systemd-sysv/noble-updates,now 255.4-1ubuntu8.10 amd64 [instalovaný]
systemd-timesyncd/noble-updates,now 255.4-1ubuntu8.10 amd64 [instalovaný]
systemd/noble-updates,now 255.4-1ubuntu8.10 amd64 [instalovaný]
systemsettings/tuxedo,now 4:6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
tcl8.6/noble,now 8.6.14+dfsg-1build1 amd64 [instalovaný]
tcl/noble,now 8.6.14build1 amd64 [instalovaný]
testdisk/noble,now 7.1-5+nmu1build2 amd64 [instalovaný]
tex-gyre/noble,noble,now 20180621-6 all [instalovaný]
texlive-xetex/noble,noble,now 2023.20240207-1 all [instalovaný]
thermald/noble-updates,now 2.5.6-2ubuntu0.24.04.2 amd64 [instalovaný]
thin-provisioning-tools/noble-updates,now 0.9.0-2ubuntu5.1 amd64 [instalovaný]
time/noble,now 1.9-0.2build1 amd64 [instalovaný]
timgm6mb-soundfont/noble,noble,now 1.3-5 all [instalovaný]
toilet-fonts/noble,noble,now 0.3-1.4build1 all [instalovaný]
toilet/noble,now 0.3-1.4build1 amd64 [instalovaný]
tpm-udev/noble,noble,now 0.6ubuntu1 all [instalovaný]
trash-cli/noble,noble,now 0.23.11.10-1 all [instalovaný]
tree/noble,now 2.1.1-2ubuntu3 amd64 [instalovaný]
trezor-udev/now 2 all [instalovaný,lokální]
tzdata-legacy/noble-updates,noble-updates,noble-security,noble-security,now 2025b-0ubuntu0.24.04.1 all [instalovaný]
ubuntu-drivers-common/noble-updates,now 1:0.9.7.6ubuntu3.2 amd64 [instalovaný]
ubuntu-kernel-accessories/noble-updates,now 1.539.2 amd64 [instalovaný]
ubuntu-keyring/noble,noble,now 2023.11.28.1 all [instalovaný]
ubuntu-mono/noble,noble,now 24.04-0ubuntu1 all [instalovaný]
ubuntu-pro-client/noble-updates,now 36ubuntu0~24.04 amd64 [instalovaný]
ubuntu-release-upgrader-core/noble-updates,noble-updates,now 1:24.04.27 all [instalovaný]
ubuntu-restricted-extras/noble,now 67 amd64 [instalovaný]
ucf/noble,noble,now 3.0043+nmu1 all [instalovaný]
udev/noble-updates,now 255.4-1ubuntu8.10 amd64 [instalovaný]
udevil/noble,now 0.4.4-3build2 amd64 [instalovaný]
udisks2/noble-updates,noble-security,now 2.10.1-6ubuntu1.3 amd64 [instalovaný]
ufw/noble,noble,now 0.36.2-6 all [instalovaný]
unattended-upgrades/noble,noble,now 2.9.1+nmu4ubuntu1 all [instalovaný]
unp/noble,noble,now 2.0 all [instalovaný]
unrar/noble,now 1:7.0.7-1build1 amd64 [instalovaný]
unzip/noble-updates,noble-security,now 6.0-28ubuntu4.1 amd64 [instalovaný]
update-inetd/noble,noble,now 4.53 all [instalovaný]
update-manager-core/noble-updates,noble-updates,now 1:24.04.12 all [instalovaný]
upower/noble,now 1.90.3-1 amd64 [instalovaný]
usb-modeswitch-data/noble,noble,now 20191128-6 all [instalovaný]
usb-modeswitch/noble,now 2.6.1-3ubuntu3 amd64 [instalovaný]
usb.ids/noble,noble,now 2024.03.18-1 all [instalovaný]
usbmuxd/noble,now 1.1.1-5~exp3ubuntu2 amd64 [instalovaný]
usbutils/noble,now 1:017-3build1 amd64 [instalovaný]
va-driver-all/tuxedo,now 2.22.0-1tux1 amd64 [instalovaný]
vdpau-driver-all/noble,now 1.5-2build1 amd64 [instalovaný]
vdpauinfo/noble,now 1.5-2 amd64 [instalovaný]
ventoy/tuxedo,now 1.1.05-1~tux1 amd64 [instalovaný]
vifm/noble,now 0.12-1build2 amd64 [instalovaný]
vim-common/noble-updates,noble-updates,noble-security,noble-security,now 2:9.1.0016-1ubuntu7.8 all [instalovaný]
vim-runtime/noble-updates,noble-updates,noble-security,noble-security,now 2:9.1.0016-1ubuntu7.8 all [instalovaný]
vim/noble-updates,noble-security,now 2:9.1.0016-1ubuntu7.8 amd64 [instalovaný]
vimpager/now 2.06-2 all [instalovaný,lokální]
vlc-bin/noble,now 3.0.20-3build6 amd64 [instalovaný]
vlc-data/noble,noble,now 3.0.20-3build6 all [instalovaný]
vlc-l10n/noble,noble,now 3.0.20-3build6 all [instalovaný]
vlc-plugin-access-extra/noble,now 3.0.20-3build6 amd64 [instalovaný]
vlc-plugin-base/noble,now 3.0.20-3build6 amd64 [instalovaný]
vlc-plugin-notify/noble,now 3.0.20-3build6 amd64 [instalovaný]
vlc-plugin-qt/noble,now 3.0.20-3build6 amd64 [instalovaný]
vlc-plugin-samba/noble,now 3.0.20-3build6 amd64 [instalovaný]
vlc-plugin-skins2/noble,now 3.0.20-3build6 amd64 [instalovaný]
vlc-plugin-video-output/noble,now 3.0.20-3build6 amd64 [instalovaný]
vlc-plugin-video-splitter/noble,now 3.0.20-3build6 amd64 [instalovaný]
vlc-plugin-visualization/noble,now 3.0.20-3build6 amd64 [instalovaný]
vlc/noble,now 3.0.20-3build6 amd64 [instalovaný]
vpnc-scripts/noble,noble,now 0.1~git20220510-1 all [instalovaný]
vpnc/noble,now 0.5.3+git20220927-1build2 amd64 [instalovaný]
vulkan-tools/noble,now 1.3.275.0+dfsg1-1 amd64 [instalovaný]
w3m-img/noble,now 0.5.3+git20230121-2ubuntu5 amd64 [instalovaný]
w3m/noble,now 0.5.3+git20230121-2ubuntu5 amd64 [instalovaný]
wamerican/noble,noble,now 2020.12.07-2 all [instalovaný]
watchman/noble,now 4.9.0-7build4 amd64 [instalovaný]
wayland-utils/noble,now 1.2.0-1build1 amd64 [instalovaný]
wbritish/noble,noble,now 2020.12.07-2 all [instalovaný]
webp/noble,now 1.3.2-0.4build3 amd64 [instalovaný]
wget/noble-updates,noble-security,now 1.21.4-1ubuntu4.1 amd64 [instalovaný]
whiptail/noble,now 0.52.24-2ubuntu2 amd64 [instalovaný]
whohas/noble,noble,now 0.29.1-1.1 all [instalovaný]
whoopsie-preferences/noble,now 23build3 amd64 [instalovaný]
whoopsie/noble,now 0.2.77build3 amd64 [instalovaný]
wireless-regdb/noble-updates,noble-updates,noble-security,noble-security,now 2024.10.07-0ubuntu2~24.04.1 all [instalovaný]
wireless-tools/noble,now 30~pre9-16.1ubuntu2 amd64 [instalovaný]
wireplumber/tuxedo,now 0.5.10-1 amd64 [instalovaný]
wl-clipboard/noble,now 2.2.1-1build1 amd64 [instalovaný]
wngerman/noble,noble,now 20161207-12 all [instalovaný]
wpasupplicant/noble-updates,noble-security,now 2:2.10-21ubuntu0.2 amd64 [instalovaný]
xauth/noble,now 1:1.1.2-1build1 amd64 [instalovaný]
xautomation/noble,now 1.09-4build2 amd64 [instalovaný]
xbindkeys-config/now 0.1.3-2.3 amd64 [instalovaný,lokální]
xbindkeys/noble,now 1.8.7-2 amd64 [instalovaný]
xbrlapi/noble,now 6.6-4ubuntu5 amd64 [instalovaný]
xdg-dbus-proxy/noble,now 0.1.5-1build2 amd64 [instalovaný]
xdg-desktop-portal-gtk/tuxedo,now 1.15.3-1tux1 amd64 [instalovaný]
xdg-desktop-portal-kde/tuxedo,now 6.3.5-0ubuntu1~tux1 amd64 [instalovaný]
xdg-desktop-portal/tuxedo,now 1.20.3+ds-1tux1 amd64 [instalovaný]
xdg-user-dirs/noble,now 0.18-1build1 amd64 [instalovaný]
xdg-utils/tuxedo,tuxedo,now 1.2.1-2ubuntu1~tux1 all [instalovaný]
xfonts-base/noble,noble,now 1:1.0.5+nmu1 all [instalovaný]
xfonts-encodings/noble,noble,now 1:1.0.5-0ubuntu2 all [instalovaný]
xfonts-utils/noble,now 1:7.7+6build3 amd64 [instalovaný]
xfsprogs/noble-updates,now 6.6.0-1ubuntu2.1 amd64 [instalovaný]
xinit/noble,now 1.4.1-0ubuntu5 amd64 [instalovaný]
xinput/noble,now 1.6.4-1build1 amd64 [instalovaný]
xkb-data/noble-updates,noble-updates,now 2.41-2ubuntu1.1 all [instalovaný]
xml-core/noble,noble,now 0.19 all [instalovaný]
xorg-docs-core/noble,noble,now 1:1.7.1-1.2 all [instalovaný]
xorg-sgml-doctools/noble,noble,now 1:1.11-1.1 all [instalovaný]
xorg/noble,now 1:7.7+23ubuntu3 amd64 [instalovaný]
xsettingsd/noble,now 1.0.2-1build1 amd64 [instalovaný]
xwayland/tuxedo,now 2:24.1.7-1tux1 amd64 [instalovaný]
xwaylandvideobridge/tuxedo,now 0.4.0-2build2~tux1 amd64 [instalovaný]
xxd/noble-updates,noble-security,now 2:9.1.0016-1ubuntu7.8 amd64 [instalovaný]
xz-utils/noble-updates,noble-security,now 5.6.1+really5.4.5-1ubuntu0.2 amd64 [instalovaný]
zenity-common/noble,noble,now 4.0.1-1build3 all [instalovaný]
zenity/noble,now 4.0.1-1build3 amd64 [instalovaný]
zip/noble-updates,now 3.0-13ubuntu0.2 amd64 [instalovaný]
zstd/noble-updates,now 1.5.5+dfsg2-2build1.1 amd64 [instalovaný]
#endregion
```
</details>
<details>
<summary>SNAP</summary>
```
#region snap list
Název Verze Rev Následuje Vydavatel Poznámky
asciinema 2.2.0 35 latest/stable asciinema classic
bare 1.0 5 latest/stable canonical** base
bw 2025.8.0 87 latest/stable bitwarden** -
chromium 139.0.7258.138 3235 latest/stable canonical** -
core18 20250730 2940 latest/stable canonical** base
core20 20250526 2599 latest/stable canonical** base
core22 20250730 2111 latest/stable canonical** base
core24 20250618 1055 latest/stable canonical** base
cups 2.4.12-2 1100 latest/stable openprinting** -
gnome-3-28-1804 3.28.0-19-g98f9e67.98f9e67 198 latest/stable canonical** -
gnome-3-38-2004 0+git.efb213a 143 latest/stable canonical** -
gnome-42-2204 0+git.38ea591 202 latest/stable canonical** -
gtk-common-themes 0.1-81-g442e511 1535 latest/stable canonical** -
kf5-5-110-qt-5-15-11-core22 5.110 3 latest/stable kde** -
kf5-5-111-qt-5-15-11-core22 5.111 7 latest/stable kde** -
kf6-core22 6.10.0 43 latest/stable kde** -
lunacy 11.6 101 latest/stable icons8 -
pastel 0.8.0 9 latest/stable badpurvesh11 -
pdftk-snap 2.02-4 1 latest/stable drcoccodrillus -
snapd 2.71 25202 latest/candidate canonical** snapd
storage-explorer 1.39.1 71 latest/stable msft-storage-tools** -
#endregion
```
</details>
<details>
<summary>FLATPAK</summary>
```
#region flatpak list --app
Boxy SVG com.boxy_svg.BoxySVG 4.75.0 stable system
NormCap com.github.dynobo.normcap 0.6.0 stable system
Whaler com.github.sdv43.whaler 1.2.4 stable system
Flatseal com.github.tchx84.Flatseal 2.3.1 stable system
Google Chrome com.google.Chrome 139.0.7258.154-1 stable system
Sigil com.sigil_ebook.Sigil 2.3.1 stable system
Sublime Merge com.sublimemerge.App 2112 stable system
Láhve com.usebottles.bottles 51.24 stable system
Bruno com.usebruno.Bruno v2.10.0 stable system
XnView MP com.xnview.XnViewMP 1.9.3 stable system
Clapgrep de.leopoldluley.Clapgrep 25.07 stable system
Zed dev.zed.Zed v0.201.8 stable system
MailViewer io.github.alescdb.mailviewer 1.0.1 stable system
Qt QDBusViewer io.qt.qdbusviewer 6.9 stable system
Gear Lever it.mijorus.gearlever 3.4.2 stable system
Dev Toolbox me.iepure.devtoolbox 1.3.0 stable system
Datovka org.cznic.Datovka 4.25.0 stable system
Geany org.geany.Geany 2.1.0 stable system
GNU Image Manipulation Program org.gimp.GIMP 3.0.4 stable system
Web org.gnome.Epiphany 48.5 stable system
Síťové displeje GNOME org.gnome.NetworkDisplays 0.97.0 stable system
Inkscape org.inkscape.Inkscape 1.4.2 stable system
Crow Translate org.kde.CrowTranslate 3.1.0 stable system
Kigo org.kde.kigo 0.6.25080 stable system
Konquest org.kde.konquest 2.4.25080 stable system
Kontrast org.kde.kontrast 25.08.0 stable system
KTorrent org.kde.ktorrent 25.08.0 stable system
LabPlot org.kde.labplot 2.12.1 stable system
Lokalize org.kde.lokalize 25.08.0 stable system
LibreOffice org.libreoffice.LibreOffice 25.8.1.1 stable system
Luanti org.luanti.luanti 5.13.0 stable system
Eloquent re.sonny.Eloquent 1.2 stable system
#endregion
```
</details>

View File

@@ -1,76 +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 */
$.is_fatal= true;
const css= echo.css`
.code, .url{ color: lightblue; }
.code::before, .code::after{ content: "\`"; }
`;
testRequirements();
$.api()
.version("2023-03-21")
.describe([
"Small utility to find out FTP url with credentials using Bitwarden CLI.",
echo.format("The idea is to use saved login %cusername%c, %cpassword%c and %curl%c.",
css.code, css.unset, css.code, css.unset, css.code, css.unset)
])
.command("get [name]", "Get url with credentials.")
.alias("item")
.option("--copy", echo.format("Uses %cxclip -selection clipboard%c.", css.code))
.action(get)
.command("list", echo.format("List all %cftp-*%c.", css.code))
.option("--json", "Print output in JSON format.")
.action(list)
.parse();
async function get(name, { copy: is_copy= false }){
if(!name)
name= await $.read({
"-p": "Name",
completions: list({ is_internal: true }).map(o=> o.name)
});
const item= s.$().run`bw get item ${name}`;
if(!item.trim())
$.error(`No record found for ${name}.`);
const { uris, username, password }= item
.xargs(JSON.parse)
.login;
const url= urlFromUris(uris).replace('://', `://${username}:${password}@`);
if(!is_copy){
echo(url);
$.exit(0);
}
s.echo(url).run`xclip -selection clipboard 2>1 > /dev/null`;
$.exit(0);
}
function list({ json= false, is_internal= false }){
const list= s.$().run`bw list items --search="ftp"`
.xargs(JSON.parse)
.filter(o=> o.name.startsWith("ftp-"))
.map(({ name, note, login: { uris } })=> ({ name, url: urlFromUris(uris), note }))
.filter(o=> o.url);
if(is_internal)
return list;
if(json)
$.exit(0, echo(JSON.stringify(list)));
list.forEach(pipe(
line=> echo.format(line),
t=> t.replaceAll("\n", " ").slice(2, -2),
echo
));
$.exit(0);
}
function urlFromUris(uris){ return uris.find(o=> o.uri)?.uri; }
function testRequirements(){
if(!s.which("bw"))
$.error([
echo.format("The %cbw%c utility has not been found.", css.code),
echo.format("Please install it using %cnpm i @bitwarden/cli --location=global%c.", css.code),
echo.format("Respectively, follow the instructions at %chttps://github.com/bitwarden/clients/tree/master/apps/cli", css.url)
].join("\n"));
}
// vim: set tabstop=4 shiftwidth=4 textwidth=250 noexpandtab :
// vim>60: set foldmethod=indent foldlevel=1 foldnestmax=2:

View File

@@ -1,82 +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 */
const css= echo.css`
.url{ color: lightblue; }
.code { font-style: italic; }
.code::before, .code::after { content: "\`"; }
`;
$.api()
.version("2023-03-23")
.describe([
echo.format("This is small utility around %cchrome-remote-interface%c¹ to auto open inspect for cordova apps.", css.code),
echo.format("[1] %chttps://github.com/cyrus-and/chrome-remote-interface", css.url)
])
.command("open", "This open browser and after 30secs enable auto inspect openning.", true)
.option("--browser, -B", "Browser exec. Use one of supported browsers, such as chrome, chromium, opera, edge, …", "chromium")
.option("--port, -P", "Chanhe debugging port", 9222)
.action(async function({ browser, port }){
s.runA`${browser} --remote-debugging-port=${port}`;
const { setTimeout }= await import("node:timers/promises");
await setTimeout(30_000);
await register();
$.exit(0);
})
.command("enable", "Enable auto inspect openning for already running browser.")
.action(async function(){
await register();
$.exit(0);
})
.parse();
async function register(){
const { default: CDP } = await import($.xdg.globalPackage`chrome-remote-interface`);
let client;
try{
await CDP.New();
client= await CDP();
const { Network, Page, Runtime }= client;
await Network.enable();
await Page.enable();
await Page.navigate({url: 'chrome://inspect/#devices'});
await Page.loadEventFired();
await Runtime.evaluate({ expression: `const debugCordova= (${autoRunCordovaAppInspect.toString()})();` });
} finally {
if(!client) return;
return await client.close();
}
}
function autoRunCordovaAppInspect(){
const { filter, map }= Array.prototype;
let /* filters */
device_filter, app_filter, last_state;
const /* get elements */
devicesElements= ()=> filter.call(document.getElementsByClassName("device"), el=> el.id!=="device:localhost"),
getApp= el=> el.getElementsByClassName("browser-name")[0].textContent,
appTest= browser_candidate_el=> getApp(browser_candidate_el).indexOf(app_filter)!==-1,
browsersElements= wrapper_el=> wrapper_el.getElementsByClassName("browser"),
actionElementFilter= wrapper_el=> filter.call(wrapper_el.getElementsByClassName("action"), el=> el.textContent==="inspect")[0];
function run(){
const device= !device_filter ? (d=> d&&d[d.length-1])(devicesElements()) : filter.call(devicesElements(), el=> el.id===device_filter)[0];
if(!device) return false;
const app= !app_filter ? (a=> a&&a[a.length-1])(browsersElements(device)) : filter.call(browsersElements(document), appTest)[0];
if(!app) return false;
const { id }= app;
if(last_state===id) return false;
last_state= id;
const action= actionElementFilter(app);
if(!action) return false;
action.click();
}
const observer= new MutationObserver(run);
observer.observe(document.getElementById("devices-list"), { childList: true, subtree: true })
return {
/* Set string to filter, typically app id or ip */
setApp: _app_filter=> app_filter= _app_filter,
/* Apply only for given device (see debugCordova.devices). */
setDevice: _device_filter=> device_filter= _device_filter,
get apps(){ return map.call(browsersElements(document), getApp); },
get devices(){ return map.call(devicesElements(), el=> el.id); }
};
}

View File

@@ -1,39 +0,0 @@
#!/usr/bin/env bash
set -euo pipefail
config="$HOME/.config/git/identities"
input="${1:-}"
usage="Usage
git identity [<name>|help|-]
git-identity --help
"
[ -z "$input" ] \
&& echo "$usage"\
&& echo -e "$config/current.conf … current identity:" \
&& cat "$config/current.conf" \
&& exit 0
[ "$input" = --help ] \
&& input="help"
[ "$input" = help ] \
&& echo "$usage"\
&& echo '- _empty_: shows usage and current identity' \
&& echo '- <name>: set identity' \
&& echo '- -: show path to identities directory' \
&& echo '- help: shows this help' \
&& echo -e '\n\nExamples' \
&& echo '- git identity' \
&& echo '- git identity user' \
&& echo '- ls $(git identity -)' \
&& echo -e '\n\nGit config' \
&& echo "- git config --global include.path '$config/current.conf'" \
&& exit 0
[ "$input" = - ] \
&& echo "$config" \
&& exit 0
identity="$config/$input.conf"
[ ! -e "$identity" ] \
&& echo "No such identity: $input" >&2 \
&& echo "$identity" >&2 \
&& exit 1
ln --verbose --force "$identity" "$config/current.conf"

View File

@@ -1,300 +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 */
// "\x1b[38;2;150;150;150m"
// https://talyian.github.io/ansicolors/
/**
* Represents a package record stored locally
*
* @typedef ConfigPackage
* @type {Object}
* @property {string} repository - Repo in the form `<owner>/<repo>`
* @property {string} name - Name/Identifier
* @property {string} description - A description of the repo/package
* @property {string} file_name - The name of the file as stored locally
* @property {"yes"|"no"} exec - Whether the file is executable
* @property {string} last_update - The date and time of the last update
* @property {string} downloads - The path to the file
* @property {string} version - The version of the file
* @property {string} tag_name_regex - Filter only matching releases
* */
/**
* @typedef Config
* @type {{ packages: ConfigPackage[] }}
* */
/**
* Represents a GitHub release information.
*
* @typedef {Object} GitHubRelease
* @property {number} id - The ID of the GitHub release.
* @property {string} url - The URL of the GitHub release.
* @property {string} assets_url - The URL of the assets associated with the GitHub release.
* @property {string} html_url - The HTML URL of the GitHub release.
* @property {string} tag_name - The tag name of the GitHub release.
* @property {string} published_at - The publication date of the GitHub release.
*/
import { join } from "node:path";
const path_config= $.xdg.config`github-releases`;
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= {
github: "https://api.github.com/repos/",
ungh: "https://ungh.cc/repos/"
};
const url_download= "https://glare.now.sh/"; // https://github.com/Contextualist/glare
const css= echo.css`
.pkg { color: lightcyan; }
.ok { color: lightgreen; }
.err { color: lightred; }
.skip { color: red; color: gray; }
.spin { display: list-item; list-style: --terminal-spin; }
`;
$.api()
.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)")
.option("--repository, -R", "Filter by repository (not awaiable for noGRA)")
.option("--api", [ "Choose API URL",
"- GitHub (default): https://api.github.com/repos/",
"- Ungh: https://ungh.cc/repos/", "(not awaiable for noGRA)" ], "github")
.command("unlock", "[noGRA] DANGER: Removes lock file. Use only if you know what you are doing!")
.action(function(){
s.rm(paths.lock);
})
.command("config [mode]", [ "[noGRA] Config (file), use `mode` with these options:",
"- `edit`: opens config file in terminal editor using `$EDITOR` (defaults to vim)",
"- `path`: prints path to config file"
])
.action(async function(mode= "path"){
switch(mode){
case "path": echo(paths.config); break;
case "edit":
const editor= $.env.EDITOR || "vim";
await s.runA`${editor} ${paths.config}`.pipe(process.stdout);
break;
default:
echo(`Unknown mode: '${mode}'. See '--help' for details.`);
}
$.exit(0);
})
.command("edit <repository>", "Edit “package” information")
.alias("add")
.action(async function(repository){
if(!repository || !repository.includes("/"))
$.error(`Invalid repository: '${repository}'. Repository must be in the form '<owner>/<repo>'.`);
const config= /** @type {Config} */ ( readConfig() );
const i= config.packages.findIndex(r=> r.repository===repository);
echo(repository + `${i==-1 ? "New" : "Edit"} package:`);
echo(`Use <tab> to autocomplete${i===-1 ? "" : " and empty to keep current value"}.`);
echo("");
const pkg= config.packages[i] || { repository, group: "" };
const groups= [ ...new Set(config.packages.map(r=> r.group)) ];
const q= (question, initial, ...c)=> {
const completions= [ ...new Set([initial, ...c.flat()]) ].filter(Boolean);
if(initial) question+= ` (current \`${initial}\`)`;
question= echo.format("%c"+question, css.pkg);
return s.read({ "-p": question+": ", completions }).then(pipe(
value=> value || initial,
value=> value ? value : $.error(`Missing '${question}'.`)
));
};
try{
const name= await q("Name", pkg.name);
echo("(i) use `skip` as part of the group to skip it during checking/updating (“just register package”).");
const group= await q("Group", pkg.group, groups);
const { description: description_remote }= await fetch(urls_api[url_api]+repository).then(r=> r.json()).catch(_=> ({}));
const description= await q("Description", pkg.description, description_remote);
const file_name= await q("File name", pkg.file_name, repository.split("/"));
const downloads= config.target+file_name;
const exec= await q("Is executable", pkg.exec, [ "yes", "no" ]);
echo("(i) The glare is used to determine the right file to download. It is regular expression.");
const glare= await q("Glare", pkg.glare);
const pkg_edit= Object.assign({}, pkg,
{ repository, name, description, group, file_name, exec, downloads, glare });
config.packages[i===-1 ? config.packages.length : i]= pkg_edit;
s.echo(JSON.stringify(config, null, "\t")).to(paths.config);
echo(`%cSaved into config file '${paths.config}'.`, css.ok);
$.exit(0);
} catch(e){
if(e instanceof $.Error) echo("%c"+e, css.err);
else echo();
$.exit(1);
}
})
.command("ls", [ "Lists registered packages",
"Repositories marked with `-` signifies that the package is in the 'skip' group.",
"These are registered by this script but not managed by it (updates, etc).",
"Repositories marked with `+` signify that updates of the package are checked."
])
.action(function(filter){
const config = readConfig();
for(const { repository, version, description, group } of grepPackages(config, filter))
if(group && !group.includes("skip"))
echo(`+ %c${repository}%c@${version ? version : "—"}: %c${description}`, css.pkg, css.unset, css.skip);
else
echo(`- %c${repository}: ${description}`, css.skip);
$.exit(0);
})
.command("check", "Shows/checks updates for registered packages")
.option("--cache", "Use cache [yes, no]", "yes")
.action(async function({ cache, ...filter }){
const config = readConfig();
const results= await check(grepPackages(config, filter), cache);
for(const { status, value } of results)
echoPkgStatus(status, value);
if(!results.length) echo("Nothing to do.");
$.exit(0);
})
.command("update", "Updates registered packages")
.action(async function(filter){
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));
let done= 0;
let todo= [];
echo("Collecting packages to update…");
for(const { status, value } of results){
if(status!==3 || (value.local.group || "skip").includes("skip")) continue;
echo("%c"+value.local.repository, css.pkg);
todo.push(download(
value,
()=> done+= 1,
config.target
));
}
const { length }= todo;
if(!length){
echo("%cAll up-to-date!%c Nothing to do.", css.ok);
} else {
const id= setInterval(()=>
echo.use("-R", `%cUpdating packages (${done}/${length})`, css.spin), 500);
const updates= await Promise.allSettled(todo);
clearInterval(id);
echo("Updating packages completed:");
for (const { status, value, reason } of updates) {
if(status==="rejected"){
echo("%c✗ TBD reason.local.repository: %c"+reason.err, css.err);
continue;
}
const { local, remote }= value;
echo("%c✓ "+local.repository+"%c@"+remote.tag_name, css.ok, css.skip);
}
s.echo(JSON.stringify(config, null, "\t")).to(paths.config);
}
s.rm(paths.lock);
$.exit(0);
})
.parse();
import { createWriteStream } from "node:fs";
async function download(value, onprogress, target){
const { repository, glare }= value.local;
const { tag_name }= value.remote;
if(!glare) return Promise.reject({ err: "Missing 'glare' in config.", ...value });
const response= await fetch(url_download+repository+`@${tag_name}/${glare}`);
const buffer= Buffer.from(await response.arrayBuffer());
const downloads= target+value.local.file_name;
const ws= createWriteStream(downloads, { flags: "w" });
ws.write(buffer);
Object.assign(value.local, {
last_update: value.remote.published_at,
version: value.remote.tag_name,
downloads
});
if(value.local.exec==="yes")
s.chmod("+x", downloads);
onprogress();
return value;
}
function grepPackages({ packages }, { group, repository, api, verbose }){
if(api && api!==url_api && urls_api.hasOwnProperty(api))
url_api= api;
if(verbose)
echo(`Using API: ${url_api} (${urls_api[url_api]})`);
const f= {};
let is_filter= false;
if(group){ is_filter= true; f.group= group; }
if(repository){ is_filter= true; f.repository= repository; }
if(verbose)
echo("Filter:", f);
if(!is_filter) return packages;
return packages.filter(r=> Object.keys(f).every(k=> r[k]===f[k]));
}
function echoPkgStatus(status, { local, remote }){
let status_css, status_text;
if(local.group && local.group.includes("skip")){
status_text= "skipped";
status_css= "skip";
} else {
status_text= status===3 ? "outdated" : "up-to-date";
status_css= status===3 ? "err" : "ok";
}
echo((status_text==="outdated" ? "+" : "-") + " %c"+local.repository + "%c: %c"+status_text+"%c (%c"+remote.tag_name+"%c)",
css.pkg, css.unset, css[status_css], css.unset, css.skip, css.unset);
}
/**
* @param {Config.packages} packages
* @return {Promise<{ status: 0|1|2|3, value: { remote: GitHubRelease, local: ConfigPackage } }>}
* */
async function check(packages, cache){
return (await pipe(
ps=> ps.map(p=> fetchRelease(p, cache).then(remote=> ({ local: p, remote }))),
ps=> Promise.allSettled(ps)
)(packages))
.map(({ status, ...v })=> status==="rejected" ?
{ status: -1, value: v } :
{ status: packageStatus(v.value.local, v.value.remote), value: v.value })
.filter(({ status, value })=> {
if(status!==-1) return true;
echo("%c"+value.reason, css.err);
});
}
/** @type {(local: ConfigPackage, remote: GitHubRelease)=> 0|1|2|3} */
function packageStatus({ last_update: local }, { published_at: remote }){
if(!remote) return 0;
if(!local) return 3;
if(remote===local) return 1;
return 2+(local<remote);
}
/** @param {ConfigPackage} package */
async function fetchRelease({ repository, tag_name_regex }, cache){
const headers= { 'User-Agent': 'node' };
if(cache==="no") headers['Cache-Control'] = 'no-cache';
const url= urls_api[url_api]+repository+"/releases";
const releases= await fetch(url, { headers }).then(res=> res.json());
if(releases.message) return $.error(url+": "+releases.message);
if(url.includes("github.com"))
return releases.find(function ({ 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);
});
const { draft, publishedAt, tag }= releases.releases.find(function ({ draft, publishedAt, tag }){
if(draft||!publishedAt) return false;
if(!tag_name_regex) return true;
return (new RegExp(tag_name_regex, 'g')).test(tag);
});
return { draft, published_at: publishedAt, tag_name: tag };
}
function readConfig(){
if(!s.test("-f", paths.config)) return { packages: [] };
const out= Object.assign({ target: "~/bin/" },
s.cat(paths.config).xargs(JSON.parse));
if(out.target.startsWith("~/")) out.target= $.xdg.home(out.target.slice(2));
return out;
}

View File

@@ -1,8 +0,0 @@
{
"include": [
"/home/jaandrle/.nvm/versions/node/v22.17.1/lib/node_modules/nodejsscript/index.d.ts",
"./*.mjs",
"./*.js",
"chrome-autoinspect.mjs"
]
}

View File

@@ -1,78 +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 */
const pathLastDesktop= ()=> $.xdg.temp`kde6-workarounds-last-desktop.txt`;
const css= echo.css`
.code { color: gray; }
`;
$.api()
.version("2024-02-29")
.describe("Workarounds for KDE6.")
.command("logout")
.action(function(){
$.is_silent= true;
const res= s.run([
"echo ::options::",
"|",
"rofi -dmenu -p 'Logout' -l 4 -theme-str 'window { width: 25ch; }' -normal-window"
].join(" "), {
options: [ "-", "poweroff", "reboot" ].join("\n")
}).trim();
if(res && res!=="-") s.run(res);
$.exit(0);
})
.command("klipper-edit", "Edit last item in klipper.")
.action(async function(){
$.is_silent= true;
const qdbus= "qdbus org.kde.klipper /klipper org.kde.klipper.klipper.";
try{
const candidate= s.run(`${qdbus}getClipboardContents`).trim();
const content= await $.read({ "-p": "Edit", completions: [ candidate ] });
s.run(`${qdbus}setClipboardContents "${content}"`);
$.exit(0);
} catch (_){
$.exit(1);
}
})
.command("desktops-alttab", "Workaround for KDE6 alt-tab between virtual desktops.")
.action(function(){
const path= pathLastDesktop();
// Regarding ★ : this is a workaround for diagonal switching (it duplicates desktop index)
let desktop= s.cat(path).trim() || "1";
if(desktop.length>3){ // ★
const [ _1, _2, ..._3 ]= desktop.slice(-4, desktop.length);
if(_1===_2)
desktop= desktop.slice(0, -4).concat(_1, ..._3);
}
if(desktop.length>2){ // ★
const [ _1, _2 ]= desktop.slice(-2, desktop.length);
if(_1===_2)
desktop= desktop.slice(0, -1);
}
if(desktop.length>2){
desktop= desktop.slice(-2, desktop.length);
s.echo(desktop).to(path);
}
echo(desktop);
s.run`qdbus org.kde.KWin /KWin org.kde.KWin.setCurrentDesktop ${desktop[0]}`;
$.exit(0);
})
.command("desktops-last-dbus")
.action(function(){
echo([
"dbus-monitor",
'"interface=org.kde.KWin.VirtualDesktopManager" "member=currentChanged"',
"|",
'xargs -e -I {} kde6-workarounds.mjs desktops-last-save {}'
].join(" "));
$.exit(0);
})
.command("desktops-last-save <dbus>", "Workaround for KDE6 alt-tab between virtual desktops.")
.action(function(dbus){
if(-1===dbus.indexOf("path=/VirtualDesktopManager; interface=org.kde.KWin.VirtualDesktopManager; member=currentChanged"))
return $.exit(1);
const desktop= s.run`qdbus org.kde.KWin /KWin org.kde.KWin.currentDesktop`.trim();
s.echo(desktop).toEnd(pathLastDesktop());
})
.parse();

View File

@@ -1,20 +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 { kwallet } from "./§kwallet.mjs";
const url_api= "https://nocodb.jaandrle.cz/api/v1/db/data/v1/Linky/Linky";
$.api()
.command("add-md")
.action(async function addMd(){
const { clipboard }= $;
const [ title, url ]= clipboard.split("](");
const res= await fetch(url_api, {
body: JSON.stringify({ Popis: title.slice(1), Url: url.slice(0, -1) }),
headers: { "xc-token": kwallet([ "readPassword", "Passwords", "nocodb-linky" ])[0].toString(),
"accept": "application/json", "Content-Type": "application/json"
},
method: "post"
}).then(res=>res.json());
echo(res);
})
.parse();

View File

@@ -1,71 +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 */
const p_home= $.xdg.home`Applications/piper/`
const p_models= p_home+"models/"
$.api("", true)
.version("2023-05-31")
.describe([
"This is a wrapper around the piper CLI.",
"It allows you to get the list of available models, or to simplify `piper` callings.",
"",
"Visit: https://github.com/rhasspy/piper",
"Original help:",
...s.$().run`${p_home}piper --help`.stderr.split("\n").filter(Boolean).map(l=> "\t"+l)
])
.option("--models", "prints available models")
.option("--model, -m", "chooses voice model by it's index or by text search (full name)")
.option("--input_file, -I", "path to input text file (defaults to stdin)")
.action(function main({
models: is_models,
model= 0,
input_file,
_,
...pass
}){
if(is_models){
models()
.forEach(l=> echo(l));
echo(helpTextModels("…for more models"))
$.exit(0);
}
model= getModel(model);
pass= Object.entries(pass)
.map(([ name, value ])=> `${name.length > 1 ? "--" : "-"}${name} '${value}'`)
.join(" ");
const o= s.run(`echo ${text(input_file)} | ${p_home}piper --model ${model} ${pass}`);
$.exit(o.code);
})
.parse();
function text(input_file){
const candidate= input_file ? s.cat(input_file).stdout : $.stdin.text();
if(typeof candidate!=="string")
$.error("Missing input text file or piped text. Use `--help` for more information.");
return "'"+candidate.trim().replaceAll("\n", "\t — \t").replaceAll("'", "\"")+"'";
}
function getModel(identifier){
const candidate= typeof identifier==="number" ?
models()[identifier] :
models().find(l=> l.includes(identifier));
if(!candidate)
$.error([
`Model identifier '${identifier}' seems not to matching any existing model.`,
"Try `--models` to see all available models."
].join("\n"));
return candidate.slice(candidate.indexOf(" ")+1);
}
function models(){
const out= s.ls(`${p_models}*.onnx`)
.map((l, n)=> `${n}: ${l}`);
if(!out.length)
$.error(helpTextModels("No available models."));
return out;
}
function helpTextModels(...text_initial){
return [
...text_initial,
"Visits https://github.com/rhasspy/piper",
"and download/extract model(s) into "+p_models
].join("\n");
}

View File

@@ -1,111 +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 */
$.api("")
.version("2024-09-05")
.command("silicon <file>", [
"Generovat obrázek s kódem pro sdílení na sociálních sítích. (alternativa k Carbon)",
"Toto je jen drobný wrapper s mými defaultními parametry.",
"Další nápověda viz `silicon --help`.",
])
.option("--title", "Set window title (default: file name).")
.option("--range", "Select lines from file in the form `start:end`")
.option("--font-size, --fs", "Font size", 25)
.action(function silicon(file, { title= file, range, fs, ["font-size"]: _fs, _, ...args }){
args= Object.assign({
theme: "OneHalfDark",
font: `Ubuntu Mono =${fs}`,
background: "#f06d78",
["shadow-blur-radius"]: 30,
["tab-width"]: 2
}, args);
args= Object.keys(args).flatMap(key=> [ "--"+key, args[key] ]);
let from= file;
const index_ext= file.lastIndexOf(".");
const output= !file ? "silicon.png" : file.slice(0, index_ext+1)+"png";
if(range && typeof range=== "string" && range.includes(":")){
from= $.xdg.temp`silicon-range${file.slice(index_ext)}`;
const content= s.$().cat(file).toString().split(/\r?\n/).slice(...range.split(":").map(n=> parseInt(n)+1));
s.echo(content.join("\n")).to(from);
}
s.run`silicon ${from} --output ${output} --window-title ${title} ${args}`;
echo(`Generated ${output}`);
if(from!== file) s.rm(from);
$.exit(0);
})
.command("textInImage [file]", "Generovat obrázek s textem pro sdílení na sociálních sítích.")
.alias("tii")
.option("--pointsize", "Text size", "62")
.option("--gravity", "`convert -list gravity`", "Center")
.option("--text", "Text")
.action(textInImage)
.command("textSplit <file>", "Rozdělit text dle zadaného limitu.")
.alias("ts")
.option("--limit", "Počet znaků kde text rozdělovat.", 500)
.option("--counter", "Prepend counter, set no. of chars of counter.", 5)
.option("--text", "Text")
.action(textSplit)
.parse();
function textSplit(file, { limit, counter, text }){
limit= parseInt(limit) - parseInt(counter);
const words= getText(file, text).split(" ");
let buffer= [], i= -1, chars= limit;
for(const word of words){
const { length }= word;
if((chars+length) < limit){
chars+= ( is_empty ? 0 : 1 ) + length;
buffer[i].end= i;
continue;
}
chars= 0;
i+= 1;
buffer[i]= { start: i };
}
const { length }= buffer;
echo(buffer.map(function({ start, end }, i){
return (i+1)+"/"+length+" "+words.slice(start, end).join(" ");
}).join("\n============\n"));
$.exit(0);
}
function textInImage(file, { text, gravity, pointsize }){
text= getText(file, text);
const output= !file ? "textInImage.png" : (({ pathname: p })=> p.slice(1, p.lastIndexOf(".")+1)+"png")(new URL(file, "file://"));
if(s.test("-f", output)) s.rm(output);
const round_corners= [ //https://9to5answer.com/rounding-corners-of-pictures-with-imagemagick
"\\(",
"+clone -alpha extract",
"-draw 'fill black polygon 0,0 0,15 15,0 fill white circle 15,15 15,0'",
"\\( +clone -flip \\) -compose Multiply -composite",
"\\( +clone -flop \\) -compose Multiply -composite",
"\\) -alpha off -compose CopyOpacity -composite",
].join(" ");
s.run([
"convert",
"\\(",
"-size ::size::",
"-pointsize ::pointsize::",
"-fill ::fill:: -background ::background::",
"-gravity ::gravity::",
"-family ::family:: -weight Bold",
"-bordercolor ::background:: -border 5%",
"caption:::text::",
"\\)",
round_corners,
"::output::"
].join(" "), {
fill: "whitesmoke",
background: "#2b2b2b",
size: "1024x512",
family: "Ubuntu Mono",
output, text, gravity, pointsize
});
$.exit(0);
}
function getText(file, text){
if(file && s.test("-f", file))
return s.cat(file).toString();
if(!text)
return $.stdin.text().trim();
return text;
}

119
bin/uu
View File

@@ -1,119 +0,0 @@
#!/usr/bin/env bash
set -eo pipefail
this="${0##*/}"
version="2022-07-27"
config_file="$HOME/.config/${this}rc"
[ ! -t 0 ] && exo-open --launch TerminalEmulator -- -e "$this $*" && exit 0
arg=${1:---help}
if [[ "$arg" = "--completion-bash" ]]; then
echo "_${this}_completion(){
local cur=\"\${COMP_WORDS[COMP_CWORD]}\"
local com_basic=\"--alias --help --version --tips\"
local com_urls=\"cht.sh wttr.in rate.sx qrenco.de ifconfig.co\"
if [[ \$COMP_CWORD != 1 ]]; then
local com_web=\"\"
case \"\${COMP_WORDS[1]}\" in
--raw)
COMPREPLY=( \$(compgen -W \"\$com_urls \$com_basic\" -- \"\$cur\" ) )
return 0;
;;
--alias)
COMPREPLY=( \$(compgen -W \"? + -\" -- \"\$cur\" ) )
return 0;
;;
wttr.in)
local com_web+=\"moon m u M 0 1 2 A F n q Q T\"
;;
ifconfig.co)
local com_web+=\"json\"
;;
cht.sh)
local com_web+=\"\$(compgen -c)\"
;;
esac
COMPREPLY=( \$(compgen -W \":help \$com_web\" -- \"\$cur\" ) )
return 0;
fi
COMPREPLY=( \$(compgen -W \"--raw \$com_urls \$com_basic\" -- \"\$cur\" ) )
}
complete -o bashdefault -o default -F _${this}_completion ${this}
"
exit 0;
fi
_echo(){ [[ $is_raw == 1 ]] && echo -e "$1" || echo "$1" | less -R -S; }
[[ "$arg" = "--raw" ]] && is_raw=1 && command shift && arg=${1:---help} || is_raw=0
if [[ "$arg" = "--help" ]]; then
_echo "\
$this@v$version URL UTILS
This is helper around \`curl\` to run web-based commands such as 'wttr.in', 'cht.sh', …
Usage:
$this [--raw] BASE_URL [PARAMS]
$this [--raw] --[help|version|tips]
$this [--raw] --alias NAME +|-|? FULL_URL
Options:
--raw no output using \`less\`
--alias you can also use vars '\\\$1', …
PARAMS parameters to be concatenated with BASE_URL with '/' or '?'/'&' when parameter starts with '?' … se below
Examples:
$this cht.sh/less $this cht.sh less
$this wttr.in/prague?M&n $this wttr.in prague ?M ?n
$this --raw ident.me/json | jq
Config file:
$config_file
"
exit 0
fi
[[ "$arg" = "--version" ]] && echo "$version" && exit 0
if [[ "$arg" = "--tips" ]]; then
_echo "\
cht.sh The only cheat sheet you need Unified access to the best community driven documentation repositories of the world.
wttr.in Weather report
rate.sx show exchange rates for cryptocurrencies
qrenco.de
ifconfig.co
https://github.com/chubin/awesome-console-services/tree/65e8e897c9c5a2ec013747dd9f1acc03c8573fe7
"
exit 0
fi
command shift
if [[ "$arg" == "--alias" ]]; then
alias_name="${1:-[^_]*}"
[[ $alias_name == *.* ]] && echo "Alias should not contains '.'" && exit 1
case "$2" in
"+")
out=$(grep -v -e "uu_${alias_name}_alias=" -e "uu_${alias_name}_is_raw=" $config_file)
out="$out\nuu_${alias_name}_alias=\"$3\""
out="$out\nuu_${alias_name}_is_raw=$is_raw"
echo -e "$out" > $config_file
exit 0
;;
"-") echo -e "$(grep -v -e "uu_${alias_name}_alias=" -e "uu_${alias_name}_is_raw=" $config_file)" > $config_file || echo "No aliases yet"; exit 0;;
*) grep -e "uu_${alias_name}_alias=" -e "uu_${alias_name}_is_raw=" $config_file || echo "No aliases yet"; exit 0;;
esac
exit 1
fi
args=""
if [[ $arg != *.* ]]; then
. $config_file
is_raw_name=uu_${arg}_is_raw
is_raw=${!is_raw_name}
[[ -z $is_raw ]] && echo "No alias '$arg' found." && exit 1
arg_name=uu_${arg}_alias
arg=${!arg_name}
else
for p in "$@"; do
[[ $p == "?"* ]] \
&& args+=" --data-urlencode ${p:1} " \
|| arg+="/$p"
done
fi
out=$(curl -fGsS -H 'Accept-Language: cs' $args --compressed $arg || echo 'Curl error, see terminal error output.')
_echo "$out"

View File

@@ -1,165 +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 */
$.is_fatal= true;
const token_file= "~/.config/openai.token";
let token;
const gitmoji_list= {
build: "building_construction",
chore: "bricks",
ci: "construction_worker",
docs: "memo",
feat: "sparkles",
fix: "bug",
perf: "zap",
refactor: "recycle",
revert: "rewind",
style: "art",
test: "white_check_mark"
};
const git3moji_list= {
build: "tv",
chore: "tv",
ci: "tv",
docs: "abc",
feat: "zap",
fix: "bug",
perf: "zap",
refactor: "cop",
style: "zap",
test: "cop"
};
const conventional_desc= [
"Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)",
"Other changes that don't modify src or test files",
"Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs)",
"Documentation only changes",
"A new feature",
"A bug Fix",
"A code change that improves performance",
"A code change that neither fixes a bug nor adds a feature",
"Reverts a previous commit",
"Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)",
"Adding missing tests or correcting existing tests"
];
$.api("", true)
.version("2024-02-28")
.describe([
"Utility to use ChatGPT to generate a commit message from COMMIT_EDITMSG file.",
`Don't forget to set the token in ${token_file} file.`,
"",
"Conventional/gitmoji commits should follow https://www.conventionalcommits.org/en/v1.0.0/ (https://github.com/pvdlg/conventional-commit-types).",
"For the gitmoji the <type> uses emojis as follows:",
...Object.entries(gitmoji_list).map(( v, i )=> echo.format("%c"+v[0]+` (${v[1]}): ${conventional_desc[i]}`, "display: list-item")),
...Object.entries(git3moji_list).map(( v, i )=> echo.format("%c"+v[0]+` (${v[1]}): ${conventional_desc[i]}`, "display: list-item"))
])
.option("--format, -f", [ "Use one of the following formats to generate the commit message: [regular (default), conventional, gitmoji, git3moji]",
"For gitmoji see: https://gitmoji.dev/"
])
.action(async function({ format= "regular" }= {}){
const question= questionChatGPT(format);
const response= (await pipe(
()=> s.cat("./.git/COMMIT_EDITMSG"),
s=> s.slice(s.indexOf("diff --git")),
diffToChunks(3900-545), //the worst scenario of ★ +new lines
ch=> ch.map(pipe( question, requestCommitMessage )),
ch=> Promise.all(ch)
)())
.map(pipe(
j=> j.choices[0].text.trim(),
convertToArray,
format==="regular" || format==="conventional" ? i=> i : i=> gitmoji(i, format==="git3moji"),
a=> a.join("\n")
))
.join("\n\n");
echo(response);
$.exit(0);
})
.parse();
function diffToChunks(max_tokens){ return function(input){
if(input.length < max_tokens)
return [ input ];
return input.split(/(?=diff --git)/g)
.flatMap(function(input){
if(input.length < max_tokens)
return [ input ];
const [ file, ...diffs ]= input.split(/\n(?=@@)/g);
if(file.includes("new file"))
return [ file ];
return diffs
.filter(chunk=> chunk.length < max_tokens)
.reduce(function(chunks, chunk){
const i= chunks.length-1;
if(chunks[i].length + chunk.length < max_tokens-1)
chunks[i]+= "\n"+chunk;
else
chunks.push(file+"\n"+chunk);
return chunks;
}, [ file ])
.filter(chunk=> chunk.length < max_tokens);
});
}; }
function convertToArray(text){
// console.log(text);
return text.split("\n")
.map(line=> line.trim())
.filter(line=> line.trim())
.map(function(line){
if(/^[0-9-].? /.test(line)) line= line.slice(line.indexOf(" ")+1);
if(/^["']/.test(line[0])) line= line.slice(1);
if(/["']$/.test(line[line.length-1])) line= line.slice(0, -1);
return line;
})
;
}
function questionChatGPT(format){ return function(diff){
const msg= [
[
"I would like to ask you to act like a git commit message writer.",
"I will enter a git diff, and your job is to convert it into a useful commit message",
"Make 3 options, one option per line.",
"Do not preface the commit with anything, use a concise, precise, present-tense, complete sentence.",
"The length should be fewer than 50 characters if possible.",
].join(" ") //340chars★
];
if(format!=="regular")
msg.push(
[
"It should follow the conventional commits.",
"The format is <type in lowercase>: <description>.",
"A type can be one of the following: build, chore, ci, docs, feat, fix, perf, refactor, revert, style, or test.",
].join(" ") //203chars★
);
msg.push("", diff);
return msg.join("\n");
}; }
function gitmoji(candidates, is_three= false){
return candidates.map(message=> message.trim().replace(/^[^:]*:/, toGitmoji));
function toGitmoji(name){
const candidate= ( is_three ? git3moji_list : gitmoji_list )[name.slice(0, -1)];
return !candidate ? name : `:${candidate}:`;
}
}
function requestCommitMessage(prompt){
if(!token) token= s.cat(token_file).stdout.trim();
const model= "gpt-3.5-turbo-instruct";
return fetch(`https://api.openai.com/v1/engines/${model}/completions`, {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer "+token
},
body: JSON.stringify({
max_tokens: 1000,
temperature: 0.1,
prompt
}),
signal: AbortSignal.timeout(10000)
}).then(r=> r.json());
}
// vim: set tabstop=4 shiftwidth=4 textwidth=250 noexpandtab :
// vim>60: set foldmethod=indent foldlevel=1 foldnestmax=2:

View File

@@ -1,26 +0,0 @@
#!/bin/bash
this="${0##*/}"
USAGE="\
usage: $this [<awk_args>] <field_no>
Ex: getent passwd | grep andy | $this -F: 5
Ex: echo \"A B\" | $this 2
"
err(){ echo -e "$USAGE" >&2; exit 1; }
[[ $# -eq 0 ]] && err
# bail if the *last* argument isn't a number (source:
# http://stackoverflow.com/a/808740)
last=${@:(-1)}
if ! [ $last -eq $last ] &>/dev/null; then
echo "_awk! Last argument (awk field) must be numeric." >&2
err
fi
if [ $# -gt 1 ]; then
# Source:
# http://www.cyberciti.biz/faq/linux-unix-bsd-apple-osx-bash-get-last-argument/
rest=${@:1:$(( $# - 1 ))}
else
rest='' # just to be sure
fi
awk $rest "{ print \$$last }"

View File

@@ -1,34 +0,0 @@
#!/bin/bash
version="2022-01-25"
this="${0##*/}"
USAGE="\
$this@v$version
Wrapper around 'upower' to show battery info(s).
Usage: $this --[help|all|oneline|notify]
'oneline' [Default] prints 'status | time | percentage'
'notify' sends 'oneline' to 'notify-send'
'all' prints 'upower -i'
'help' prints this text
"
arg=${1:---oneline}
if [[ "$arg" = "--help" ]]; then
echo -e "$USAGE"
exit 0
fi
batt_name=`upower -e | grep 'BAT'`
batt_info=`upower -i $batt_name`
if [[ "$arg" = "--all" ]]; then
echo -e "$batt_info"
exit 0
fi
batt_oneline=`echo "$batt_info" | grep -E "state|percentage|to\ full|to\ empty" | §awk -F: 2 | sed 's/^ *//g' | tr -s '\n' '|' | sed 's/|$/\n/' | sed 's/|/ | /g'`
if [[ "$arg" = "--oneline" ]]; then
echo -e "$batt_oneline"
exit 0
fi
icon=`echo "$batt_info" | grep "icon-name" | §awk -F\' 2`
notify-send --icon=$icon "Battery" "$batt_oneline"

View File

@@ -1,6 +0,0 @@
#!/usr/bin/env bash
if bluetoothctl show | grep -q 'Powered: no'; then
bluetoothctl power on
else
bluetoothctl power off
fi

View File

@@ -1,6 +0,0 @@
#!/bin/bash
function _echo(){
[ -t 0 ] && echo "$1" && exit
notify-send -i kcalc "$1" && exit
}
_echo `python3 -c 'import sys; print(eval(" ".join(sys.argv[1:])))' "$*"`

View File

@@ -1,60 +0,0 @@
#!/usr/bin/env nodejsscript
/* jshint esversion: 11,-W097, -W040, module: true, node: true, expr: true, undef: true *//* global echo, $, pipe, s, style, fetch, cyclicLoop */
import { join as pathJoin } from "path";
import { platform } from "process";
const config_path= $.xdg.data`package_global.json`;
$.is_fatal= true;
$.api("[name]", true)
.version("2022-10-06")
.describe([
"Release cordova app with saved data in: "+config_path+".",
"This should be JSON file with `cordova_keys_store` key/object:",
`{"cordova_keys_store": { "NAME": { "path": "", "password": "", "alias": "" } }}`,
"You can lists all saved options (NAME), when you run without arguments." ])
.option("--noclear", "Skipping cleaning existing apk files.")
.action(function main(name, { noclear }){
if(!name){
echo("Available options:");
pipe(getConfig, Object.keys, a=> "- "+a.join("\n- "), echo)();
$.exit(0);
}
const /* runtime arguments and cwd */
{ path, password, alias }= getConfigFor(name),
cwd= process.cwd(),
platform_android= toDirPath( cwd, "platforms", "android" ),
platform_build= !s.test("-e", toDirPath(platform_android, "app")) ? toDirPath(platform_android, "build") : toDirPath(platform_android, "app", "build"),
apk_dir= toDirPath(platform_build, "outputs", "apk"),
key_path= pathJoin(cwd, "keystore.jks"),
process_clear= !noclear && !s.test("-e", toDirPath(platform_android, "app"));
$.configAssign({ verbose: true, fatal: true });
if(process_clear) s.rm("-Rf", apk_dir+"*");
s.cp(path, key_path);
s.run("cordova" + ( platform==="win32" ? ".cmd" : "" ) + " ::args::",
{ args: [ "build", "--release", "android", "--",'--keystore=keystore.jks', "--storePassword="+password, "--password="+password, "--alias="+alias ] });
s.rm(key_path);// cordova si to uklada a uz potom bez nej nelze buildit vubec
s.rm(platform_android+"release-signing.properties");
$.exit(0);
})
.parse(process.argv);
function toDirPath(...path){ return pathJoin(...path)+"/"; }
function getConfigFor(name){
const config= getConfig();
if(Object.hasOwn(config, name))
return config[name];
$.error(`Name '${name}' not found, use one of: `+Object.keys(config));
}
function getConfig(){
if(!s.test("-f", config_path))
$.error("No config file found! Tested file path: "+config_path);
try{
const config= s.cat(config_path).xargs(JSON.parse).cordova_keys_store;
if(!Object.keys(config).length) throw new Error();
return config;
} catch(e){
$.error("Unsupported config file: "+config_path+"! Use `--help` for more information.");
}
}

View File

@@ -1,61 +0,0 @@
#!/bin/bash
this="${0##*/}"
this_version="2021-03-14"
while read; do printf '%s\n' "$REPLY"
done <<-EOF
$this ($this_version) <andrle.jan@centrum.cz>
Utility for extracting archives into folder with the same name.
EOF
err() {
printf >&2 "Error: $*\n"
exit 1
}
ARC="$1"
[[ ! -z "$ARC" ]] || ARC="--help"
if [[ "$ARC" = "--help" ]]; then
while read; do printf '%s\n' "$REPLY"
done <<-EOF
Usage: $this [file|--help|]
[--help|] - show this text
[file] - path to file for extracting
Supported formats (used utilities):
EOF
sed -n 42,52p $0 | sed -e 's/^/ /'
exit 0
fi
[[ -f $ARC ]] || err $"'$ARC' does not exist"
ARC_name_ext="${ARC##*/}"
ARC="$(readlink -f "$ARC")"
ARC_name="${ARC_name_ext%.*}"
mkdir "$ARC_name" || err $"Directory '$ARC_name' can not be created"
[[ -d $ARC_name ]] || err $"Directory '$ARC_name' does not exist"
[[ -w $ARC_name ]] || err $"Permission denied: '$ARC_name' is not writable"
cd "$ARC_name"
case "$ARC" in
*.tar.bz2) tar xjf "$ARC" ;;
*.tar.gz) tar xzf "$ARC" ;;
*.bz2) bunzip2 "$ARC" ;;
*.rar) unrar e "$ARC" ;;
*.gz) gunzip "$ARC" ;;
*.tar) tar xf "$ARC" ;;
*.tbz2) tar xjf "$ARC" ;;
*.tgz) tar xzf "$ARC" ;;
*.zip) unzip "$ARC" ;;
*.epub) unzip "$ARC" ;;
*.docx) unzip "$ARC" ;;
*.xmlx) unzip "$ARC" ;;
*.pptx) unzip "$ARC" ;;
*.Z) uncompress "$ARC" ;;
*.7z) 7z x "$ARC" ;;
*.eml) munpack -t "$ARC" ;;
*) err $"'$ARC' cannot be extracted by $this" ;;
esac
# sudo apt install mpack

View File

@@ -1,157 +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 */
const css= echo.css`
.error{ color: lightred; }
.code, .method{ color: lightblue; }
.code::before, .code::after{ content: "\`"; }
.li{ padding-left: 2ch; }
`;
const default_wallet= "kdewallet";
const cmd= "qdbus";
if(!s.which(cmd))
$.exit(1, echo([
`%cError: ${cmd} not found.`,
`%cInstall it with: %csudo apt install ${cmd}`,
].join("\n"), css.error, css.unset, css.code));
import { EventEmitter } from "node:events";
const events= new EventEmitter();
const exit_event= "exit";
if($.isMain(import.meta)){
events.on(exit_event, $.exit);
$.api("", true)
.version("2024-03-05")
.describe([
`KWallet CLI using ${cmd}.`,
"Call with no arguments to list all methods.",
])
.example("--wallet kdewallet folderList")
.example("--wallet kdewallet readPassword folder entry")
.option("--wallet, -w", "Wallet name", default_wallet)
.action(function main({ _, wallet }){
const [ results, is_ls ]= kwallet(_, { wallet });
if(is_ls) echoLs(results);
else echo(results);
events.emit(exit_event);
})
.parse();
}
/**
* @param {string[]} _ Query/arguments for qdbus
* @param {object} [options]
* @param {string} [options.wallet] Wallet name
* @returns {[ string[], true ]|[ string, false ]}
* */
export function kwallet(_, { wallet= default_wallet }= {}){
const qdbus= qdbusGenerator({
service: "org.kde.kwalletd6",
methods: "/modules/kwalletd6",
wallet,
exit_event
});
if(!_.length)
return [ qdbus(), true ];
else{
//TODO: Map (`--literal` in qdbus and decode the result `echoMap`)
const result= qdbus(_);
return [ result, false ];
}
}
function qdbusGenerator({ service, methods, wallet, exit_event }){
const name= getScriptName();
const no_id= [
'allWalletsClosed',
'applicationDisconnected',
'folderListUpdated',
'folderUpdated',
'walletClosed',
'walletCreated',
'walletDeleted',
'walletListDirty',
'walletOpened',
'changePassword',
'close',
'closeAllWallets',
'deleteWallet',
'disconnectApplication',
'folderDoesNotExist',
'isEnabled',
'isOpen',
'keyDoesNotExist',
'localWallet',
'networkWallet',
'open',
'openAsync',
'openPath',
'openPathAsync',
'pamOpen',
'reconfigure',
'users',
'wallets'
];
let id;
const qdbus= (...args)=> s.$().run`${cmd} ${service} ${methods} ${args}`;
events.on(exit_event, ()=>{
if(!id) return;
qdbus("close", id, false, name);
id= null;
});
return function([ method, ...args ]= []){
if(!method) return qdbus();
if(no_id.includes(method)) return qdbus(method, ...args);
if(!id) open();
return qdbus(method, id, ...args, name);
};
function open(){
id= qdbus("open", wallet, 0, name).trim();
return id;
}
}
function echoMap(map){
map= map.slice(1, -1).split(", ").map(n=> Number.parseInt(n));
const ab= new ArrayBuffer(map.length);
const view= new Uint8Array(ab);
for(let i= 0; i<map.length; i++)
view[i]= map[i];
const words= [];
for(let i= 0; i<map.length; i+= 4){
words.push(String.fromCharCode.apply(null, view.subarray(i, i+4)));
}
pipe(
echo
)(words);
}
function echoLs(list){
const ns= "org.kde.KWallet.";
pipe(
list=> list.split("\n").filter(l=> l.startsWith("method") && -1!==l.indexOf(ns)),
list=> list.map(l=> l.slice(l.indexOf(" ")+1)).map(l=> l.replace(ns, "")),
list=> list.reduce((o, l)=> (o[Number(l.indexOf("int handle")!==-1)].push(l), o), [ [], [] ]),
([ no_wallet, wallet ])=> [
"Methods available without wallet:",
...no_wallet.map(formatMethod),
"Methods available with wallet (" + echo.format("%c--wallet", css.code) + " option):",
...wallet.map(formatMethod)
].join("\n"),
echo
)(list);
function formatMethod(line){
const ch_type= line.indexOf(" ")+1;
const ch_name= line.indexOf("(", ch_type);
return echo.format([
"",
line.slice(0, ch_type),
line.slice(ch_type, ch_name),
line.slice(ch_name)
].join("%c"), css.li, css.method, css.unset);
}
}
function getScriptName(){
const { url }= import.meta;
return (new URL(url)).href.slice((new URL("./", url).href.length));
}

View File

@@ -1,94 +0,0 @@
#!/usr/bin/env nodejsscript
/* jshint esversion: 11,-W097, -W040, module: true, node: true, expr: true, undef: true *//* global echo, $, pipe, s, style, fetch, cyclicLoop, xdg, $ */
import { basename } from "path";
const app= {
name: basename(process.argv[1]),
version: "2022-09-28",
cmd: $.xdg.home`.local/bin/himalaya`,
configs: $.xdg.config`himalaya/`,
modificator: "§"
};
const chars= { "&AOE-": "á", "&AWE-": "š", "&ARs-": "ě" };
let argv_arr= argvArr();
if("help"===argv_arr.toString().replaceAll("-", "")){ //#region
echo([ `${app.name}@${app.version}`,
`This is small wrapper around 'himalaya' fixing coding errors and provide better 'read'. (Use § for calling himalaya directly)`,
"" ].join("\n"));
s.run(app.cmd+" --help");
$.exit(0); //#endregion
}
if("version"===argv_arr.toString().replaceAll("-", "")){//#region
echo(`${app.name} ${app.version}`);
s.run(app.cmd+" --version");
$.exit(0);//#endregion
}
if("completion,bash"===argv_arr.toString()){//#region
const completion= s.run(app.cmd+" ::argv_arr::", { argv_arr });
echo(completion.toString().replace("himalaya)", `himalaya|${app.name})`));
echo(`alias ${app.name}-inbox="§mail § | less -R -S"`);
echo(`complete -F _himalaya -o bashdefault -o default ${app.name}`);
$.exit(0);//#endregion
}
(async function main(){
if(argv_arr.indexOf(app.modificator)!==-1) await runH(argv_arr.filter(l=> l!==app.modificator));
argv_arr= argv_arr.filter(str=> str!==app.modificator);
if(argv_arr.indexOf("list")!==-1){
argv_arr.push("-w", process.stdout.columns);
await runH(argv_arr);
}
if(argv_arr.indexOf("read")!==-1){
const email= $.xdg.temp`/himalaya-read.eml`;
argv_arr.push("-h", "From", "-h", "Subject");
await s.$().runA(app.cmd+" ::argv_arr::", { argv_arr }).pipe(s=> s.to(email));
await s.runA`vim ${email}`.pipe(process.stdout);
$.exit(0);
}
if(argv_arr[0] && argv_arr[0]!=="--rofi") await runH(argv_arr);
const template_path= app.configs+"template-inbox.json";
if(!s.test("-f", template_path)) await runH([]);
const out= await pipe(
f=> s.cat(f).xargs(JSON.parse),
argv_arr.indexOf('--rofi')===-1 ? templateRead : templateRofi,
a=> Promise.all(a)
)(template_path);
for(const l of out){
if(typeof l=="string"&&!l.indexOf("%c===\n")) echo(l, "unset:all", "color:magenta");
else echo(l);
}
$.exit(0);
})();
function templateRofi(lines){
return lines.filter(line=> line.type!=="text")
.map(line=>
s.$().runA(app.cmd+" ::value:: -w 120", line)
.then(data=> data.toString().split("\n")
.filter(l=> l)
.map(line=> line.replaceAll("✷ ", "* "))
.map(line_result=> line_result+" │ "+line.label)
.join("\n"))
);
}
function templateRead(lines){
argv_arr.push("-w", process.stdout.columns);
return lines.map(line=> line.type==="text" ?
Promise.resolve("%c===\n%c"+line.value) :
s.$().runA(app.cmd+" ::value:: ::argv_arr::", { value: line.value, argv_arr })
);
}
function argvArr(){
const _chars= Object.entries(chars).reduce((acc, [ key, val ])=> Reflect.set(acc, val, key) && acc, {});
return process.argv.slice(2).map(str=> str.replace(new RegExp(`(${Object.keys(_chars).join("|")})`, "g"), l=> _chars[l]));
}
async function runH(args){
const result= await s.runA(app.cmd+" ::args::", { args }).pipe(process.stdout);
$.exit(result.exitCode);
}
// vim: set tabstop=4 shiftwidth=4 textwidth=250 noexpandtab ft=javascript :
// vim>60: set foldmethod=marker foldmarker=#region,#endregion :

View File

@@ -1,144 +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 */
const tmp= "tmp-"; //pdftk has issue reading from /tmp, so need to put it somewhere to the same folder :-(
if(!s.which("pdftk")) $.error("pdftk not found");
$.api()
.version("2025-08-05")
.describe([
"A small wrapper around 'pdftk' to extract data from pdf into the JSON.",
"Or to update the PDF with data from JSON.",
"Bookmars are converted to JSON object with key=PageNumber, value= Title (no. of spaces= level-1).",
])
.option("--debug", "Debug mode")
.command("extract <file_pdf> [file_info]", "Extract data from PDF.")
.action(function extract(file_pdf, file_info, { debug }){
if(!s.test("-f", file_pdf)) $.error("PDF File not found");
if(!file_info) file_info= filename(file_pdf) + ".json";
const temp= `${tmp}${tmpname(file_pdf)}.info` ;
s.run`pdftk ${file_pdf} dump_data_utf8 output ${temp}`;
const info= infoToJSON(temp);
if(!debug) s.rm(temp);
s.echo(info).to(file_info);
$.exit(0);
})
.command("update <file_pdf> [file_info]", "Update PDF with data from JSON.")
.action(function update(file_pdf, file_info, { debug }){
if(!s.test("-f", file_pdf)) $.error("PDF File not found");
if(!file_info) file_info= filename(file_pdf) + ".json";
if(!s.test("-f", file_info)) $.error("Info File not found");
const info= infoFromJSON(file_info);
const temp= `${tmp}${tmpname(file_pdf)}.info`;
s.echo(info).to(temp);
const tmp_pdf= `${tmp}${tmpname(file_pdf)}.pdf`;
s.cp(file_pdf, tmp_pdf);
s.run`pdftk ${tmp_pdf} update_info_utf8 ${temp} output ${file_pdf}`;
if(!debug){
s.rm(tmp_pdf);
s.rm(temp);
}
$.exit(0);
})
.command("convert <file_info>", "Converts between JSON and raw text.")
.action(function convert(file_info){
if(!s.test("-f", file_info)) $.error("Info File not found");
const ext= file_info.slice(file_info.lastIndexOf("."));
const info= ext===".json" ? infoFromJSON(file_info) : infoToJSON(file_info);
echo(info);
$.exit(0);
})
.parse();
function filename(path){ return path.slice(path.lastIndexOf("/")+1, path.lastIndexOf(".")); }
function tmpname(path){ return filename(path) + "-" + Date.now(); }
function infoFromJSON(file_info){
const info= s.cat(file_info).xargs(JSON.parse);
const output= [];
info.Bookmark= Object.entries(info.Bookmark)
.map(/** @param {[string, string]} _ */([PageNumber, Title])=> {
const level= Title.search(/[^ ]/);
return {
PageNumber,
Title: Title.slice(level),
Level: level+1,
};
});
for(const [key, value] of Object.entries(info)){
if(Array.isArray(value)){
const records= value.flatMap(pipe(
Object.entries,
entries=> [key+"Begin"].concat(entries.map(([subkey, value])=> `${key}${subkey}: ${value}`)),
));
output.push(...records);
continue;
}
if(typeof value==="object"){
const records= Object.entries(value).flatMap(([subkey, value])=> [
key+"Begin",
`${key}Key: ${subkey}`,
`${key}Value: ${value}`,
]);
output.push(...records);
continue;
}
output.push(`${key}: ${value}`);
}
return output.join("\n");
}
/** @returns {Record<string, unknown>} */
function infoToJSON(file_info){
const output= new Map();
const data= s.cat(file_info).split("\n");
let line= 0;
const isEnd= line=> line>=data.length;
for(; line<data.length; line++){
const content= data[line].trim();
if(!content) continue;
if("InfoBegin"===content){
const info= output.has("Info") ? output.get("Info") : {};
const curr= [];
while(++line){
if(isEnd(line)) break;
const content= data[line].trim();
if(!content){ line++; continue; }
const [key, value]= content.split(": ");
const index= ["InfoKey", "InfoValue"].indexOf(key);
if(index===-1){ line--; break; }
curr[index]= value;
}
const [key, value]= curr;
info[key]= value;
output.set("Info", info);
continue;
}
if(content.endsWith("Begin")){
const name= content.replace("Begin", "");
const output_curr= output.has(name) ? output.get(name) : [];
const curr= {};
while(++line){
if(isEnd(line)) break;
const content= data[line].trim();
if(!content){ line++; continue; }
const [key, value]= content.split(": ");
if(!key.startsWith(name) || key === (name+"Begin")){ line--; break; }
curr[key.replace(name, "")]= value;
}
output_curr.push(curr);
output.set(name, output_curr);
continue;
}
const [key, value]= content.split(": ");
output.set(key, value);
}
output.set("Bookmark", pipe(
items=> items.map(({ PageNumber, Title, Level })=> ([PageNumber, " ".repeat(Number(Level)-1) + Title])),
Object.fromEntries,
)(output.get("Bookmark") || []));
return pipe(
Object.fromEntries,
o=> JSON.stringify(o, null, "\t"),
)(output.entries());
}

View File

@@ -1,173 +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 { join } from "node:path";
import { kwallet } from "./§kwallet.mjs";
const store_default= join(".", "microsoft-psw.txt");
const start= `
These license terms are an agreement between you and Microsoft Corporation (or one of its affiliates). They apply to the software named above and any Microsoft services or software updates (except to the extent such services or updates are accompanied by new or additional terms, in which case those different terms apply prospectively and do not alter your or Microsofts rights relating to pre-updated software or services). IF YOU COMPLY WITH THESE LICENSE TERMS, YOU HAVE THE RIGHTS BELOW. BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS.
INSTALLATION AND USE RIGHTS.
a) General. You may install and use any number of copies of the software to develop and test libraries with Windows Server.
b) Third Party Software. The software may include third party applications that Microsoft, not the third party, licenses to you under this agreement. Any included notices for third party applications are for your information only.
c) Competitive Benchmarking. If you are a direct competitor, and you access or use the software for purposes of competitive benchmarking, analysis, or intelligence gathering, you waive as against Microsoft, its subsidiaries, and its affiliated companies (including prospectively) any competitive use, access, and benchmarking test restrictions in the terms governing your software to the extent your terms of use are, or purport to be, more restrictive than Microsofts terms. If you do not waive any such purported restrictions in the terms governing your software, you are not allowed to access or use this software, and will not do so.
DATA COLLECTION. The software may collect information about you and your use of the software and send that to Microsoft. Microsoft may use this information to provide services and improve Microsofts products and services. Your opt-out rights, if any, are described in the product documentation. Some features in the software may enable collection of data from users of your applications that access or use the software. If you use these features to enable data collection in your applications, you must comply with applicable law, including getting any required user consent, and maintain a prominent privacy policy that accurately informs users about how you use, collect, and share their data. You can learn more about Microsofts data collection and use in the product documentation and the Microsoft Privacy Statement at https://go.microsoft.com/fwlink/?LinkId=512132. You agree to comply with all applicable provisions of the Microsoft Privacy Statement.
SCOPE OF LICENSE. The software is licensed, not sold. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you will not (and have no right to):
a) work around any technical limitations in the software that only allow you to use it in certain ways;
b) reverse engineer, decompile or disassemble the software;
c) remove, minimize, block, or modify any notices of Microsoft or its suppliers in the software;
d) use the software in any way that is against the law or to create or propagate malware; or
e) share, publish, distribute, or lend the software (except for any distributable code, subject to the terms above), provide the software as a stand-alone hosted solution for others to use, or transfer the software or this agreement to any third party.
EXPORT RESTRICTIONS. You must comply with all domestic and international export laws and regulations that apply to the software, which include restrictions on destinations, end users, and end use. For further information on export restrictions, visit https://aka.ms/exporting.
SUPPORT SERVICES. Microsoft is not obligated under this agreement to provide any support services for the software. Any support provided is “as is”, “with all faults”, and without warranty of any kind.
ENTIRE AGREEMENT. This agreement, and any other terms Microsoft may provide for supplements, updates, or third-party applications, is the entire agreement for the software.
APPLICABLE LAW AND PLACE TO RESOLVE DISPUTES. If you acquired the software in the United States or Canada, the laws of the state or province where you live (or, if a business, where your principal place of business is located) govern the interpretation of this agreement, claims for its breach, and all other claims (including consumer protection, unfair competition, and tort claims), regardless of conflict of laws principles. If you acquired the software in any other country, its laws apply. If U.S. federal jurisdiction exists, you and Microsoft consent to exclusive jurisdiction and venue in the federal court in King County, Washington for all disputes heard in court. If not, you and Microsoft consent to exclusive jurisdiction and venue in the Superior Court of King County, Washington for all disputes heard in court.
CONSUMER RIGHTS; REGIONAL VARIATIONS. This agreement describes certain legal rights. You may have other rights, including consumer rights, under the laws of your state or country. Separate and apart from your relationship with Microsoft, you may also have rights with respect to the party from which you acquired the software. This agreement does not change those other rights if the laws of your state or country do not permit it to do so. For example, if you acquired the software in one of the below regions, or mandatory country law applies, then the following provisions apply to you:
a) Australia. You have statutory guarantees under the Australian Consumer Law and nothing in this agreement is intended to affect those rights.
b) Canada. If you acquired this software in Canada, you may stop receiving updates by turning off the automatic update feature, disconnecting your device from the Internet (if and when you re-connect to the Internet, however, the software will resume checking for and installing updates), or uninstalling the software. The product documentation, if any, may also specify how to turn off updates for your specific device or software.
c) Germany and Austria.
i. Warranty. The properly licensed software will perform substantially as described in any Microsoft materials that accompany the software. However,Microsoft gives no contractual guarantee in relation to the licensed software.
ii. Limitation of Liability. In case of intentional conduct, gross negligence, claims based on the Product Liability Act, as well as, in case of death or personal or physical injury, Microsoft is liable according to the statutory law.
Subject to the foregoing clause ii., Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligence, Microsoft will not be liable for slight negligence.
DISCLAIMER OF WARRANTY. THE SOFTWARE IS LICENSED “AS IS.” YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES, OR CONDITIONS. TO THE EXTENT PERMITTED UNDER APPLICABLE LAWS, MICROSOFT EXCLUDES ALL IMPLIED WARRANTIES, INCLUDING MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
LIMITATION ON AND EXCLUSION OF DAMAGES. IF YOU HAVE ANY BASIS FOR RECOVERING DAMAGES DESPITE THE PRECEDING DISCLAIMER OF WARRANTY, YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT, OR INCIDENTAL DAMAGES.
This limitation applies to (a) anything related to the software, services, content (including code) on third party Internet sites, or third party applications; and (b) claims for breach of contract, warranty, guarantee, or condition; strict liability, negligence, or other tort; or any other claim; in each case to the extent permitted by applicable law.
It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your state, province, or country may not allow the exclusion or limitation of incidental, consequential, or other damages.
DISCLAIMER OF WARRANTY. THE SOFTWARE IS LICENSED “AS IS.” YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES, OR CONDITIONS. TO THE EXTENT PERMITTED UNDER APPLICABLE LAWS, MICROSOFT EXCLUDES ALL IMPLIED WARRANTIES, INCLUDING MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
LIMITATION ON AND EXCLUSION OF DAMAGES. IF YOU HAVE ANY BASIS FOR RECOVERING DAMAGES DESPITE THE PRECEDING DISCLAIMER OF WARRANTY, YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT, OR INCIDENTAL DAMAGES.
This limitation applies to (a) anything related to the software, services, content (including code) on third party Internet sites, or third party applications; and (b) claims for breach of contract, warranty, guarantee, or condition; strict liability, negligence, or other tort; or any other claim; in each case to the extent permitted by applicable law.
a) Australia. You have statutory guarantees under the Australian Consumer Law and nothing in this agreement is intended to affect those rights.
b) Canada. If you acquired this software in Canada, you may stop receiving updates by turning off the automatic update feature, disconnecting your device from the Internet (if and when you re-connect to the Internet, however, the software will resume checking for and installing updates), or uninstalling the software. The product documentation, if any, may also specify how to turn off updates for your specific device or software.
c) Germany and Austria.
i. Warranty. The properly licensed software will perform substantially as described in any Microsoft materials that accompany the software. However,Microsoft gives no contractual guarantee in relation to the licensed software.
ii. Limitation of Liability. In case of intentional conduct, gross negligence, claims based on the Product Liability Act, as well as, in case of death or personal or physical injury, Microsoft is liable according to the statutory law.
Subject to the foregoing clause ii., Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligence, Microsoft will not be liable for slight negligence.
Please note: As this software is distributed in Canada, some of the clauses in this agreement are provided below in French.
Remarque: Ce logiciel étant distribué au Canada, certaines des clauses dans ce contrat sont fournies ci-dessous en français.
EXONÉRATION DE GARANTIE. Le logiciel visé par une licence est offert « tel quel ». Toute utilisation de ce logiciel est à votre seule risque et péril. Microsoft naccorde aucune autre garantie expresse. Vous pouvez bénéficier de droits additionnels en vertu du droit local sur la protection des consommateurs, que ce contrat ne peut modifier. La ou elles sont permises par le droit locale, les garanties implicites de qualité marchande, dadéquation à un usage particulier et dabsence de contrefaçon sont exclues.
LIMITATION DES DOMMAGES-INTÉRÊTS ET EXCLUSION DE RESPONSABILITÉ POUR LES DOMMAGES. Vous pouvez obtenir de Microsoft et de ses fournisseurs une indemnisation en cas de dommages directs uniquement à hauteur de 5,00 $ US. Vous ne pouvez prétendre à aucune indemnisation pour les autres dommages, y compris les dommages spéciaux, indirects ou accessoires et pertes de bénéfices.
Cette limitation concerne:
• tout ce qui est relié au logiciel, aux services ou au contenu (y compris le code) figurant sur des sites Internet tiers ou dans des programmes tiers; et
• les réclamations au titre de violation de contrat ou de garantie, ou au titre de responsabilité stricte, de négligence ou dune autre faute dans la limite autorisée par la loi en vigueur.
Elle sapplique également, même si Microsoft connaissait ou devrait connaître léventualité dun tel dommage. Si votre pays nautorise pas lexclusion ou la limitation de responsabilité pour les dommages indirects, accessoires ou de quelque nature que ce soit, il se peut que la limitation ou lexclusion ci-dessus ne sappliquera pas à votre égard.
EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous pourriez avoir dautres droits prévus par les lois de votre pays. Le présent contrat ne modifie pas les droits que vous confèrent les lois de votre pays si celles-ci ne le permettent pas.
`.trim();
$.api()
.version("2024-04-08")
.command("encode <file> [store]", "Save text file.")
.option("--psw", "Use password or kwallet")
.action(function encode(file, store= store_default, { psw }){
psw= password(psw);
const content= s.cat(file).trim();
s.echo(start+"\n\n# PSW").to(store);
for(const curr of combinations()){
echo.use("-R", curr);
const is_psw= curr===psw;
if(!is_psw && Math.random()<0.95) continue;
const body= is_psw ? content : randomReplaceLetters(content);
s.echo("\n\n## "+curr+"\n"+body)
.toEnd(store);
}
$.exit(0);
})
.command("decode <file> [store]", "Read text file.")
.option("--psw", "Use password or kwallet")
.action(function encode(file, store= store_default, { psw }){
psw= password(psw);
const content= s.cat(store).trim().split(/^#{1,2} /m).find(s=> s.startsWith(psw+"\n"));
s.echo(content.slice(content.indexOf("\n")+1).trim()).to(file);
$.exit(0);
})
.parse();
function *combinations(chars= [ "pi", "rá", "st", "sv", "pl" ], length= 5){
const total_combinations = Math.pow(chars.length, length);
// Initialize the indices array with zeros. This array tracks the current index for each position.
let indices = new Array(length).fill(0);
for (let i = 0; i < total_combinations; i++) {
let combination = '';
for (let j = 0; j < length; j++)
combination += chars[indices[j]];
yield combination;
// Update the indices for the next combination
for (let j = 0; j < length; j++) {
indices[j]+= 1;
if(indices[j] < chars.length) break; // Found a position that can be incremented, stop here.
if(j < length - 1) indices[j] = 0; // Reset this position and increment the next position.
}
}
}
function randomReplaceLetters(text){
for(const chars_txt of [
"abcdefghijklmnopqrstuvwxyz",
"ABCDEFGHIJKLMNOPQRSTUVWXYZ",
"0123456789"
]){
const chars= chars_txt.split("");
for(let i=0; i<4; i++){
const rch_1= chars[Math.floor(Math.random()*chars.length)];
const rch_2= chars[Math.floor(Math.random()*chars.length)];
const ch= "§§§";
text= text.split("\n")
.map(line=> line.startsWith("#") ? line : line
.replaceAll(rch_1, ch)
.replaceAll(rch_2, rch_1)
.replaceAll(ch, rch_2))
.join("\n");
}
}
return text;
}
function password(psw){
if(psw) return psw;
return kwallet([ "readPassword", "accounts", "bw-json" ])[0]
.xargs(JSON.parse).pass
.split(".")
.map(word=> word.slice(0, 2))
.join("");
}

View File

@@ -1,71 +0,0 @@
#!/bin/bash
this="${0##*/}"
this_version="2021-12-01"
err() { printf >&2 "Error: $*\n"; exit 1; }
log() { printf ":: $* ::\n"; }
if [ ! -t 0 ]; then
exo-open --launch TerminalEmulator -- -e "$this $*"
exit
fi
action="${1:---help}"
if [[ "$action" = "--help" ]]; then
while read; do printf '%s\n' "$REPLY"
done <<-EOF
$this ($this_version) <andrle.jan@centrum.cz>
Utility for updating my packages managers such as \`npm\`, \`apt\`, \`github-releases\` …
Usage: $this --[help|check|update] [basic|dangerous]
[default] --help: show this text
--check: check updates
--update: update all
--list: list of packages managers
modificators:
[default] basic: checks/updates regular packages managers
dangerous: ↘+also \`pip\`
EOF
exit 0
fi
if [[ "$action" = "--list" ]]; then
echo npm
echo github-releases.js
echo _vim_plugins updates only
echo snap updates only
echo flatpak updates only
echo pip [dangerous]
exit 0
fi
modificator="${2:-basic}"
if [[ "$action" = "--check" ]]; then
log "npm outdated --global (for update use: \`npm update --global\`)"
npm outdated --global
[[ "${?}" = "0" ]] && echo "> all up-to.date"
log "github-releases.js --check (for update use for example: \`github-releases.js --update all\`)"
github-releases.js --check
if [[ ! "$modificator" = "basic" ]]; then
log "pip list --outdated"
pip list --outdated
fi
exit 0
fi
if [[ "$action" = "--update" ]]; then
log "npm update --global"
npm update --global
log "github-releases.js --update all"
github-releases.js --update all
log "_vim_plugins --update"
_vim_plugins --update
log "snap refresh --list"
snap refresh --list
log "flatpak update"
flatpak update
if [[ ! "$modificator" = "basic" ]]; then
log "pip list --outdated --format=freeze | grep -v '^\\-e' | cut -d = -f 1 | xargs -n1 pip install -U --user"
pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U --user
fi
exit 0
fi
err "Wrong arguments (use \`--help\`)"

View File

@@ -1,86 +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 */
const units= {
second: 1000,
get minute(){ return this.second*60; },
get hour(){ return this.minute*60; },
get day(){ return this.hour*24; },
get month(){ return this.day*30; },
get year(){ return this.day*365; }
};
$.api()
.version("2024-03-27")
.command("diff <time> [reference]", [
"Returns remaining time diff <time>.",
"The <time> is argument to bash `date -d <time> +%s`.",
"Optionally, you can specify <reference> (with the same format) to compare with. By default it is current time."
])
.alias("?")
.option("--unit", "Unit, use one of the: "+Object.keys(units).join(", "))
.action(diff)
.command("zone [time]", "Returns times in different time zones.")
.option("-z", "Use multiple times to see time in different time zones.")
.action(zone)
.parse();
function diff(given, reference, { unit }){
const date_now= !reference ? new Date() : date("[reference]", reference);
const date_given= date("<time>", given);
debugger;
const rtf= new Intl.RelativeTimeFormat();
let future= 1;
let diff= date_given - date_now;
if(diff < 0){
future= -1;
diff= -diff;
}
if(unit){
if(unit.endsWith("s")) unit= unit.slice(0, -1);
echo(rtf.format(future*Math.floor(diff/units[unit]), unit));
$.exit(0);
}
diff= echoUnit(future, diff, "year", rtf);
diff= echoUnit(future, diff, "month", rtf);
diff= echoUnit(future, diff, "day", rtf);
diff= echoUnit(future, diff, "hour", rtf);
diff= echoUnit(future, diff, "minute", rtf);
diff= echoUnit(future, diff, "second", rtf);
$.exit(0);
}
function zone(time, { z: zones }){
if(!Array.isArray(zones)) zones= zones ? [ zones ] : [];
if(!zones.length)
return $.error("Please specify at least one zone.");
const date_given= time ? date("[time]", time) : new Date();
if(date_given.toLocaleString() === "Invalid Date")
return $.error(date_given);
const max_length= Math.max(...zones.map(zone=> zone.length));
const dtf= timeZone=> new Intl.DateTimeFormat(undefined, { timeZone, dateStyle: "full", timeStyle: "long", hour12: false });
for(const zone of zones)
echo(zone.padStart(max_length, " "), "—", dtf(zone).format(date_given));
$.exit(0);
}
function date(name, given){
const date_given= new Date(s.$().run`date -d ${given} +%Y-%m-%dT%H:%M:%S%z`.trim());
if(date_given.toLocaleString() === "Invalid Date")
return $.exit(1, echo(name, date_given));
return date_given;
}
/**
* @param {1|-1} future
* @param {number} num
* @param {'year'|'month'|'day'|'hour'|'minute'|'second'} unit
* @param {string} rtf
* */
function echoUnit(future, num, unit, rtf){
if(num <= units[unit]) return num;
echo(rtf.format(future*Math.floor(num/units[unit]), unit));
return num%units[unit];
}

View File

@@ -1,22 +0,0 @@
#!/usr/bin/env nodejsscript
/* jshint esversion: 8,-W097, -W040, node: true, expr: true, undef: true *//* global echo, $, pipe, s, style, fetch, cyclicLoop */
$.is_fatal= true;
$.api("<lang>")
.version("2022-09-23")
.describe("This is just wrapper around 'trans' cli utility.")
.option("-b", "Turn off '-b' parametrer for 'trans' which is give by this script.")
.option("-c", "Redirect into clipboard ('| xclip -selection clipboard')")
.example("2en pes → 'trans cs:en -b pes'")
.example("en -b dog → 'trans en:cs dog'")
.action(function main(lang, { _: query, c: to_clipboard, b: to_long }){
query= [ `"${query.join(" ").replaceAll('"', '\\"')}"` ];
if(!to_long) query.unshift('-b');
query.unshift(lang[0]==="2" ? lang.replace("2", "cs:") : ( lang.indexOf(":")!==-1 ? lang : lang+":cs" ));
query.push('-no-ansi');
const result= s.$().run("trans "+query.join(" "));
if(!to_clipboard) return echo(result.toString());
result.runA("xclip -selection clipboard 2> /dev/null 1> /dev/null")
.then($.exit.bind(null, 0)).catch($.exit.bind(null, 1));
})
.parse(process.argv);

View File

@@ -1,58 +0,0 @@
#!/bin/bash
this="${0##*/}"
this_version="2021-01-22"
USAGE="\
$this@v$this_version
Wrapper around '/etc/os-release' to show Ubuntu (like) os info.
Usage: $this --[help|all|raw]
'all' [default] prints all infos
'pick' prints only given key (default key is 'DESCRIPTION')
'raw' cats '/etc/os-release'
'help' prints this text
Examples:
$this --all
$this --pick NAME
$this --pick VERSION_NAME
$this --all | grep NAME
"
arg=${1:---all}
if [[ "$arg" = "--help" ]]; then
echo -e "$USAGE"
exit 0
fi
if [[ "$arg" = "--raw" ]]; then
cat /etc/os-release
exit 0
fi
. /etc/os-release
out="ID=$ID"
out="${out}\nDESCRIPTION=$PRETTY_NAME"
case "$ID" in
neon) out="${out}\nNAME=$NAME (${VARIANT:-User Edition})"
out="${out}\nVERSION=$VERSION ($VERSION_ID)"
;;
*) out="${out}\nNAME=$NAME"
out="${out}\nVERSION=$VERSION"
;;
esac
out="${out}\nVERSION_NICK=$UBUNTU_CODENAME"
codename=`grep $(lsb_release -rs) /usr/share/python-apt/templates/Ubuntu.info | grep -m 1 "Description: Ubuntu " | cut -d "'" -f2`
out="${out}\nVERSION_NAME=$codename"
# http://www.releases.ubuntu.com/jammy/
out="${out}\nLIKE=$ID_LIKE"
out="${out}\n`grep URL /etc/os-release | sed 's/^\([A-Z_]*\)_URL/URL_\1/'`"
if [[ "$arg" = "--all" ]]; then
echo -e "$out"
exit 0
fi
if [[ "$arg" = "--pick" ]]; then
echo -e `echo -e "$out" | grep "\b${2:-DESCRIPTION}\b" | cut -d = -f 2-`
exit 0
fi
echo "Wrong argument, see '--help'."
exit 1

View File

@@ -1,14 +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 */
$.is_fatal= true;
const root= "~/.config/coc/ultisnips/";
const files= Object.fromEntries( s.ls(root).map(fn=> [fn, s.cat(root+fn).trim()]) );
Object.keys(files).forEach(fn=> {
const file= files[fn];
if(!file.startsWith("extends ")) return;
const lines= file.split("\n");
const line_end= pipe( id=> id===-1 ? lines.length : id )( lines.findIndex(l=> l.startsWith("#endextends")) );
const include= lines[0].replace("extends ", "").trim().split(/, ?/g).map(s=> files[s+".snippets"]).join("\n");
lines.splice(1, line_end-1, include);
s.echo(lines.join("\n").trim()).to(root+fn);
})

View File

@@ -1,232 +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 */
const systems= {
/**
* From https://en.wikipedia.org/wiki/Ubuntu_version_history
* @type {{ubuntu: string, codename: string, is_lts: boolean}[]}
* */
ubuntu: JSON.parse(`[
{
"ubuntu": "4.10",
"codename": "Warty Warthog",
"is_lts": false
},
{
"ubuntu": "5.04",
"codename": "Hoary Hedgehog",
"is_lts": false
},
{
"ubuntu": "5.10",
"codename": "Breezy Badger",
"is_lts": false
},
{
"ubuntu": "6.06",
"codename": "Dapper Drake",
"is_lts": true
},
{
"ubuntu": "6.10",
"codename": "Edgy Eft",
"is_lts": false
},
{
"ubuntu": "7.04",
"codename": "Feisty Fawn",
"is_lts": false
},
{
"ubuntu": "7.10",
"codename": "Gutsy Gibbon",
"is_lts": false
},
{
"ubuntu": "8.04",
"codename": "Hardy Heron",
"is_lts": true
},
{
"ubuntu": "8.10",
"codename": "Intrepid Ibex",
"is_lts": false
},
{
"ubuntu": "9.04",
"codename": "Jaunty Jackalope",
"is_lts": false
},
{
"ubuntu": "9.10",
"codename": "Karmic Koala",
"is_lts": false
},
{
"ubuntu": "10.04",
"codename": "Lucid Lynx",
"is_lts": true
},
{
"ubuntu": "10.10",
"codename": "Maverick Meerkat",
"is_lts": false
},
{
"ubuntu": "11.04",
"codename": "Natty Narwhal",
"is_lts": false
},
{
"ubuntu": "11.10",
"codename": "Oneiric Ocelot",
"is_lts": false
},
{
"ubuntu": "12.04",
"codename": "Precise Pangolin",
"is_lts": true
},
{
"ubuntu": "12.10",
"codename": "Quantal Quetzal",
"is_lts": false
},
{
"ubuntu": "13.04",
"codename": "Raring Ringtail",
"is_lts": false
},
{
"ubuntu": "13.10",
"codename": "Saucy Salamander",
"is_lts": false
},
{
"ubuntu": "14.04",
"codename": "Trusty Tahr",
"is_lts": true
},
{
"ubuntu": "14.10",
"codename": "Utopic Unicorn",
"is_lts": false
},
{
"ubuntu": "15.04",
"codename": "Vivid Vervet",
"is_lts": false
},
{
"ubuntu": "15.10",
"codename": "Wily Werewolf",
"is_lts": false
},
{
"ubuntu": "16.04",
"codename": "Xenial Xerus",
"is_lts": true
},
{
"ubuntu": "16.10",
"codename": "Yakkety Yak",
"is_lts": false
},
{
"ubuntu": "17.04",
"codename": "Zesty Zapus",
"is_lts": false
},
{
"ubuntu": "17.10",
"codename": "Artful Aardvark",
"is_lts": false
},
{
"ubuntu": "18.04",
"codename": "Bionic Beaver",
"is_lts": true
},
{
"ubuntu": "18.10",
"codename": "Cosmic Cuttlefish",
"is_lts": false
},
{
"ubuntu": "19.04",
"codename": "Disco Dingo",
"is_lts": false
},
{
"ubuntu": "19.10",
"codename": "Eoan Ermine",
"is_lts": false
},
{
"ubuntu": "20.04",
"codename": "Focal Fossa",
"is_lts": true
},
{
"ubuntu": "20.10",
"codename": "Groovy Gorilla",
"is_lts": false
},
{
"ubuntu": "21.04",
"codename": "Hirsute Hippo",
"is_lts": false
},
{
"ubuntu": "21.10",
"codename": "Impish Indri",
"is_lts": false
},
{
"ubuntu": "22.04",
"codename": "Jammy Jellyfish",
"is_lts": true
},
{
"ubuntu": "22.10",
"codename": "Kinetic Kudu",
"is_lts": false
},
{
"ubuntu": "23.04",
"codename": "Lunar Lobster",
"is_lts": false
},
{
"ubuntu": "23.10",
"codename": "Mantic Minotaur",
"is_lts": false
},
{
"ubuntu": "24.04",
"codename": "Noble Numbat",
"is_lts": true
},
{
"ubuntu": "24.10",
"codename": "Oracular Oriole",
"is_lts": false
}
]`)
};
$.api()
.version("2024-08-15")
.option("--system", "System", "ubuntu")
.command("codename <current>")
.option("--shift", "Shift", 0)
.action(function(current, { system, shift }){
const unify= s=> s.toLowerCase().replace(/[^a-z]/g, "");
current= unify(current);
system= systems[system];
const idx= system.findIndex(s=> unify(s.codename)===current);
if(idx=== -1) return $.exit(1);
const out= system[(idx+shift)%system.length];
echo($.isFIFO(1) ? JSON.stringify(out) : out);
$.exit(0);
})
.parse();

View File

@@ -1,3 +0,0 @@
#!/bin/bash
find ~/.vim/undodir/ -maxdepth 1 -mindepth 1 -type f -mtime +180 -delete
find ~/.vim/view/ -maxdepth 1 -mindepth 1 -type f -mtime +180 -delete

View File

@@ -1,285 +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 */
//TODO: save options!?
$.is_fatal= true;
const dirs= { vim_root: $.xdg.home`.vim` };
Object.assign(dirs, {
pack: dirs.vim_root+"/pack/",
bundle: dirs.vim_root+"/bundle/",
one_files: dirs.vim_root+"/bundle/__one_files/plugin/" });
const file_one_file= dirs.bundle+"one_file.json";
const runResToArr= pipe( s.$().run, ({ stderr, stdout })=> stdout+stderr, o=> o.split("\n"));
const css= echo.css`
.code{ color: yellow; }
.code::before, .code::after{ content: "\`"; }
.url{ color: lightblue; }
.bold{ color: magenta; }
`;
$.api()
.version("2023-04-18")
.describe([
"Utility for managing vim plugins “native” way. It uses two types:",
`- “old” way (${f("bundle", css.code)}): inspiration from ${f("https://shapeshed.com/vim-packages/", css.url)}`,
`- vim8 native package managing (${f("pack", css.code)}): see for example ${f("https://shapeshed.com/vim-packages/", css.url)}`
])
.command("path <type>", [ "Prints paths for given package type",
"Use (S is alias for this script name):",
"- "+f("cd `S path bundle`", css.code),
"- "+f("cd `S path one_files`", css.code),
"- "+f("cd `S path pack`", css.code)
])
.action(function(type){ echo(dirs[type]); $.exit(0); })
.command("clone <type> <url>", [ "Add/install new package.",
`Use ${f("bundle", css.code )}/${f("pack", css.code)} to specify the package ${f("type", css.code)}.`,
`The ${f("url", css.url)} should be a URL to the script itself or url of the git repository or github repository in the form of ${f("username/reponame", css.url)}.`
])
.alias("C")
.option("--target, -t [target]", `In case of ${f("pack", css.code)} type, specify the target sub-directory (typically/defaults ${f("start", css.code)}).`)
.option("--branch, -b [branch]", `In case of ${f("git", css.bold)} repository, specify the branch if it is different from default one.`)
.action(function(type, url, options){
switch(type){
case "bundle": return addBundle(url);
case "pack": return addPack(url, options);
}
echo("Nothing todo, check given arguments (compare to `--help`):", { type, url, options });
$.exit(1);
})
.command("remove <type> <path>", [ "Remove/uninstall package.",
`As ${f("type", css.bold)}/${f("path", css.bold)} use output printed by ${f("list", css.code)} command.`
])
.alias("R").alias("rm")
.action(function(type, path){
switch(type){
case "bundle": return removeBundle(path);
case "pack": return removePack(path);
}
echo("Nothing todo, check given arguments (compare to `--help`):", { type, path });
$.exit(1);
})
.command("list", "List all plugins paths/url/… (based on option).")
.alias("L").alias("ls")
.option("--type, -t [type]", `Defaults to list of paths (${f("paths", css.code)}). Use ${f("repos", css.code)} to show plugins origin.`)
.example("list")
.example("list --type paths")
.example("list --type repos")
.action(actionList)
.command("export", "List all plugins in the form that can be imported by this Utility.")
.action(actionList.bind(null, { type: "json" }))
.command("status", "Loops through all installed plugins and shows overall status.")
.alias("S")
.action(actionStatus)
.command("pull", "Loops through all installed plugins and updates them.")
.alias("P").alias("update")
.action(actionUpdate)
.parse();
function removePack(path){
s.cd(dirs.pack);
s.$("-V").rm("-rf", path);
const root= dirs.pack+path.split("/")[0];
const { code, stdout }= s.$("-Sf").find(root+"/*/*");
if(!code) echo(stdout);
else if(s.test("-d", root))
s.$("-V").rm("-rf", root);
$.exit(0);
}
function removeBundle(path){
const is_onefile= dirs.one_files.endsWith(path.split("/").slice(0, 2).join("/")+"/");
const name= path.slice(path.lastIndexOf("/")+1);
s.cd(dirs.bundle);
if(is_onefile){
s.rm("-f", path);
pipe( s.cat, JSON.parse, f=> f.filter(u=> !u.endsWith(name)), JSON.stringify, s.echo )
(file_one_file).to(file_one_file);
} else {
s.run`git submodule deinit -f ${path}`;
s.run`git rm ${path}`;
s.rm("-rf", ".git/modules/"+path);
}
const type= is_onefile ? "file" : "repo";
s.run`git commit --all -m "Remove ${type}: ${name}"`;
$.exit(0);
}
async function addBundle(url){
const is_onefile= url.endsWith(".vim");
if(!is_onefile)
url= gitUrl(url);
const name= url.split(/[\/\.]/g).at(is_onefile ? -2 : -1);
s.cd(dirs.bundle);
if(is_onefile){
const file= await fetch(url).then(r=> r.text());
s.echo(file).to(dirs.one_files+name+".vim");
const log= new Set(s.cat(file_one_file).xargs(JSON.parse));
log.add(url);
s.echo(JSON.stringify([ ...log ])).to(file_one_file);
} else {
s.run`git submodule init`;
s.run`git submodule add ${url}`;
}
s.run`git add .`;
const type= is_onefile ? "file" : "repo";
s.run`git commit -m "Added ${type}: ${name}"`;
$.exit(0);
}
/** @param {string} url @param {{ target: "start", branch?: string }} options */
function addPack(url, { target= "start", branch }){
url= gitUrl(url);
const author= url.split(/[:\/]/).at(-2);
const path= dirs.pack+author+"/"+target;
s.mkdir("-p", path);
s.cd(path);
branch= !branch ? "" : `-b ${branch}`;
s.run`git clone ${branch} --single-branch ${url} --depth 1`;
$.exit(0);
}
function gitUrl(url_candidate){
if(url_candidate.endsWith(".git"))
return url_candidate;
return "git@github.com:"+url_candidate;
}
async function actionUpdate(){
const css= echo.css`
.success{ color: lightgreen; }
.success::before{ content: "✓ "; }
`;
updateRepo(dirs.bundle, getBundle());
const todo= getOneFilesUrls();
const progress= echoProgress(todo.length, "Downloaded one-file plugins");
await Promise.all(todo.map(function(url, i){
return fetch(url).then(r=> {
progress.update(i, url);
return r.text();
}).then(f=> s.echo(f).to(dirs.one_files+fileName(url)));
}));
echo("One-file plugin(s) updated.");
try{
s.cd(dirs.bundle).$().run`git commit -m "Update"`;
} catch(e){
echo(e?.message);
}
updateRepo(dirs.pack, getPack());
$.exit(0);
function updateRepo(dir, paths){
echo(dir);
const progress= echoProgress(paths.length, "Pulling");
const todo= paths.map(function(p, i){
progress.update(i, p);
return pull(p);
}).filter(isUpToDate);
if(!todo.length)
return echo("%cAll up-to-date!", css.success);
todo.forEach(([ p, result ])=> echo("%c"+p+"\n", css.success, result.join("\n")));
}
function pull(p){
s.cd(p);
return [ p, runResToArr("git pull") ];
}
function isUpToDate([ _, result ]){
return result[0]===" Already up-to-date.";
}
}
function actionList({ type= "paths" }){
if("paths"===type){
echo("%cbundle", css.bold, dirs.bundle);
getOneFiles().forEach(echoPath);
getBundle().forEach(echoPath);
echo("%cpack", css.bold, dirs.pack);
getPack().forEach(echoPath);
$.exit(0);
}
const progress= echoProgress(3, "Collecting plugins urls");
progress.update(0, dirs.bundle);
const urls_bundle= getBundle().map(getRepo);
progress.update(1, dirs.bundle);
const urls_onefiles= getOneFilesUrls();
progress.update(2, dirs.pack);
const urls_pack= getPack().map(getRepo);
if("repos"===type){
const echoUrl= pipe(
u=> u.replace("git@github.com:", "https://github.com/"),
u=> f(u, css.url),
echo
)
echo("%cbundle", css.bold, dirs.bundle);
urls_bundle.forEach(echoUrl);
echo("%cbundle", css.bold, dirs.one_files);
urls_onefiles.forEach(echoUrl);
echo("%cpack", css.bold, dirs.pack);
urls_pack.forEach(echoUrl);
}
if("json"===type){ //TODO: save options!?
const o= {};
o.bundle= urls_bundle;
o.one_files= urls_onefiles;
o.pack= urls_pack;
echo(JSON.stringify(o));
}
$.exit(0);
function getRepo(p){ s.cd(p); return runResToArr("git remote -v")[0].split(/\s+/g)[1]; }
}
function actionStatus(){
const css= echo.css`
.success { color: lightgreen; }
.success::before { content: "✓ "; }
`;
check(dirs.bundle, getBundle());
echo("Onefiles plugins are not supported yet");
check(dirs.pack, getPack());
$.exit(0);
function check(root, repos){
echo(root);
const progress= echoProgress(repos.length);
const results= repos.flatMap(function(p, i){
progress.update(i, p);
s.cd(p);
const result= runResToArr("git fetch --dry-run --verbose")
.filter(l=> !l ? false : l.startsWith("From") || (!l.startsWith(" = [up-to-date]") && !l.startsWith("POST") ));
if(result.length===1) return [];
return [ [ p, result.join("\n") ] ];
});
if(!results.length)
return echo("%cup-to-date", css.success);
results.forEach(([ p, l ])=> {
echoPath(p);
echo(l);
});
}
}
import { relative } from 'node:path';
function echoPath(path){ return echo(formatPath(path)); }
function formatPath(path){
const type= path.startsWith(dirs.bundle) ? "bundle" : "pack";
return echo.format("%c"+relative(dirs[type], path), "color:lightblue");
}
import { stdout } from 'node:process';
function echoProgress(length, message_start= "Working"){
if(typeof stdout.isTTY === "undefined") return { update(){} };
const css= echo.css`
.progress { color: lightblue; }
`;
echo.use("-R", `${message_start} (%c0/${length}%c)`, css.progress);
return {
update(i, status){
const s= status ? `: ${status}` : "";
return echo.use("-R", `${message_start} (%c${i+1}/${length}%c)${s}`, css.progress);
}
};
}
function getPack(){ return s.ls(dirs.pack).flatMap(f=> s.find(dirs.pack+f+"/start/*/")[0]).filter(Boolean); }
function getBundle(){ return s.cd(dirs.bundle).grep("path", ".gitmodules").split("\n").filter(Boolean).map(l=> dirs.bundle+l.split(" = ")[1]); }
function getOneFiles(){ return s.find(dirs.one_files+"*"); }
function getOneFilesUrls(){ return s.cat(file_one_file).xargs(JSON.parse); }
function fileName(url){ return url.split("/").pop(); }
/** Quick formating of one piece of text. */
function f(text, css){ return echo.format("%c"+text, css); }

View File

@@ -1,20 +0,0 @@
#!/bin/bash
# heredoc
read -r -d '' JS <<JS
const dir= '/home/jaandrle/Obrázky/Bing Image Of The Day/';
const img= 'horizontally.jpg';
desktops()
.filter(d=> d.wallpaperPlugin==='org.kde.image')
.forEach(d=> {
d.currentConfigGroup= ['Wallpaper', 'org.kde.image', 'General'];
if(!d.readConfig('Image').endsWith(img)) return;
d.writeConfig('Image', 'file://' + dir + 'now.jpg');
d.writeConfig('Image', 'file://' + dir + img);
});
JS
nm-online -x -q && \
node "/home/jaandrle/.nvm/versions/node/$(node --version)/bin/nodejsscript" /home/jaandrle/bin/§wallpaper_WCPOTD.mjs pull && \
qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.evaluateScript "$JS"
# plasma-apply-wallpaperimage '/home/jaandrle/Obrázky/Bing Image Of The Day/now.jpg' && plasma-apply-wallpaperimage '/home/jaandrle/Obrázky/Bing Image Of The Day/horizontally.jpg'
# cd "/home/jaandrle/Obrázky/Bing Image Of The Day" && \
# qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.evaluateScript 'const d= desktops().filter(d=> d.wallpaperPlugin==="de.unkn0wn.htmlwallpaper")[0];const url= (i= "")=> `file:///home/jaandrle/Obr%C3%A1zky/Bing%20Image%20Of%20The%20Day/index${i}.html`;d.currentConfigGroup= Array("Wallpaper", "de.unkn0wn.htmlwallpaper","General");d.writeConfig("DisplayPage", url("1"));d.writeConfig("DisplayPage", url());' && \

View File

@@ -1,44 +0,0 @@
#!/usr/bin/env node
/* jshint esversion: 6,-W097, -W040, browser: true, expr: true, undef: true */
import { readFileSync, writeFileSync, createWriteStream } from "fs";
import { get } from "https";
import { homedir } from "os";
const url_main= "https://www.bing.com";
const folder= homedir()+"/Obrázky/Bing Image Of The Day/";
get_(url_main+"/HPImageArchive.aspx?format=js&idx=0&n=2&mkt=cs-CZ")
.then(res=> {
let body= "";
res.on("data", chunk=> body+= chunk);
res.on("end", ()=> pipe(data, update)(body));
})
.catch(e=> console.error(String(e)));
function update(data){
if(data===null) return false;
Promise.allSettled(data.map(({ url, copyright }, id)=> getImage_(url, id ? "prev" : "now", copyright)))
.then(res=> {
let template= readFileSync(folder+"index_template.html").toString();
writeFileSync(folder+"index.html", res.reduce((out, { status, value })=> status==="rejected" ? out : out.replace(`::${value.name}::`, value.description), template));
})
.catch(e=> console.error(String(e)));
}
function getImage_(url, name, desc){
const description= desc.replace("(©", "<br>(©");
return get_(url_main+url)
.then(res=> {
const fs= createWriteStream(folder+name+'.jpg');
res.pipe(fs);
return new Promise(res=> fs.on("finish", ()=> {
fs.close();
res({ name, description });
}));
});
}
function data(body){
try { return JSON.parse(body).images; }
catch (_) { return null; }
}
function get_(url){ return new Promise(function(res,rej){ get(url, res).on("error", rej); }); }
function pipe(...f){ return Array.prototype.reduce.bind(f, (acc, f)=> f(acc)); }

View File

@@ -1,157 +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 */
const img_params= "?width=1920";
const url_api= "https://commons.wikimedia.org/w/api.php";
const url_image= "https://commons.wikimedia.org/wiki/Special:FilePath/";
import { join } from "node:path";
const path_home= $.xdg.home`Obrázky/Bing Image Of The Day/`;
const path_info= join(path_home, "images.json");
$.api()
.version("2025-04-02")
.command("pull", "Pull new/today image(s)")
.action(async function pull(){
const images= {
now: await getImagePath(0),
prev: await getImagePath(-1)
};
const paths= await downloadImages(images);
updateHTML(images);
const images_save= Object.entries(images)
.reduce((acc, [ key, { caption } ])=>
Reflect.set(acc, key, caption) && acc,
{});
convert(paths, images_save);
s.echo(JSON.stringify(images_save, null, "\t")).to(path_info);
newPanel(images_save.now);
$.exit(0);
})
.command("redraw")
.action(function redraw(){
const paths= [ "now", "prev" ].map(key=> join(path_home, `${key}.jpg`));
const images= s.cat(path_info).xargs(JSON.parse);
convert(paths, images);
newPanel(images.now);
$.exit(0);
})
.command("status")
.action(function status(){
const images= s.cat(path_info).xargs(JSON.parse);
const [ stats ]= s.ls("-l", path_info);
echo({ timestamp: stats.mtime, ...images });
$.exit(0);
})
.parse();
function newPanel(caption){
const link= `<a href="https://commons.wikimedia.org/wiki/Template:Potd/${dateISO(0)} (cs)">(i)</a>`;
s.sed("-i", /\<aside\>.*?\<\/aside\>/, `<aside>${link} ${caption}</aside>`, join(path_home, "Nový panel.html"));
}
/** @typedef {{ url: string, caption: string }} T_response */
/** @typedef {Record<"now"|"prev",T_response>} T_images */
/** @param {Record<"now"|"prev",string>} paths */
function convert(paths, images){
const resize_to= "1920x1080";
paths= Object.values(paths);
const target= join(path_home, "horizontally.jpg");
const params= `-resize ${resize_to}^ -gravity center -extent ${resize_to}`.split(" ");
const caption= (position, text)=> [
"convert",
`"${target}"`,
"\\(",
"-pointsize", "12",
"-background", "transparent",
"-fill", "white",
"-family", `"Ubuntu Mono"`,
"-weight", "Bold",
"-gravity", "center",
"-bordercolor", '"rgba(0,0,0,0.3)"',
"-border", "10",
"-size", "500x",
`caption:"${text}"`,
"\\)",
"-gravity", position,
"-geometry", "+0+0",
"-composite",
`"${target}"`,
].join(" ");
s.run`convert ${paths} ${params} +append ${target}`;
s.run(caption("southwest", images.now));
s.run(caption("southeast", images.prev));
}
import { writeFileSync } from "node:fs";
/** @param {T_images} images */
function updateHTML(images){
let template= s.cat(join(path_home, "index_template.html")).trim();
for(const [ key, image ] of Object.entries(images))
template= template.replace(`::${key}::`, image.caption);
s.echo(template).to(join(path_home, "index.html"));
}
/** @param {T_images} images */
async function downloadImages(images){
const out= {};
for(const [ key, image ] of Object.entries(images))
out[key]= await downloadImage(image, key);
return out;
}
async function getImagePath(shift= 0){
const date= dateISO(shift);
const { expandtemplates: { wikitext: filepath } }= await fetchGet({
action: "expandtemplates",
prop: "wikitext",
text: `{{Potd/${date}}}`,
});
const pluckCaption= response=> response.expandtemplates.wikitext;
const caption_fallback= await fetchGet({
action: "expandtemplates",
prop: "wikitext",
text: `{{Potd/${date} (en)}}`,
}).then(pluckCaption);
const caption= pipe(
pluckCaption,
caption=> caption !== `[[:Template:Potd/${date} (cs)]]` ? caption : caption_fallback,
caption=> caption.replace(/\[\[.*?\]\]/g, m=> m.slice(2, -2).split("|").reverse()[0]),
caption=> caption.replace(/''(.*?)''/g, "„$1”"),
)(await fetchGet({
action: "expandtemplates",
prop: "wikitext",
text: `{{Potd/${date} (cs)}}`,
}));
/* TODO?
* action: 'query',
* prop: 'imageinfo',
* iiprop: 'extmetadata',
* iiextmetadatafilter: 'LicenseShortName|Artist|LicenseUrl',
* titles: `Image:${ filename }`
*
* res.data.query.pages[0].imageinfo[0].extmetadata
* */
return {
caption: caption,
url: url_image+encodeURI(filepath)
};
}
/** @param {T_response} image @param {"prev"|"now"} type */
async function downloadImage({ url }, type){
const filename= join(path_home, `${type}.jpg`);
let response= await fetch(url+img_params);
if(response.status!==200){
response= await fetch(url);
if(response.status!==200)
throw new Error(`Failed to download image: ${response.status} ${response.statusText}`);
}
const buffer= await response.arrayBuffer();
writeFileSync(filename, Buffer.from(buffer));
return filename;
}
function dateISO(shift= 0){
const d= new Date();
d.setDate(d.getDate()+shift);
return d.toISOString().substring(0, 10);
}
function fetchGet(params){
if(!params.format) params.format= "json";
return fetch(url_api+"?"+(new URLSearchParams(params)).toString(), { method: "GET" }).then(res=> res.json());
}

View File

@@ -1,20 +0,0 @@
#!/usr/bin/env nodejsscript
/* jshint esversion: 8,-W097, -W040, node: true, expr: true, undef: true *//* global echo, $, pipe, s, style, fetch, cyclicLoop */
$.is_fatal= true;
$.api("<...query_array>", true)
.version("v2022-09-23")
.describe([
"This is just redirection to [WolframAlpha](https://www.wolframalpha.com/) site.",
"Use the same expressions as on web page."
])
.example("linear fit {1.3, 2.2},{2.1, 5.8},{3.7, 10.2},{4.2, 11.8}")
.example("polynomial fit {1,2},{2,3.1},{3,3.9}")
.example("Fit[{{1,2},{2,3.1},{3,3.9}}, {1,x}, x]")
.action(function main(first, { _: query_array= [] }){
query_array.unshift(first);
echo("Opening:");
echo("https://www.wolframalpha.com/input/?i="+encodeURI(query_array.join(" ")).replace(/\+/g, '%2B'))
.xargs(s.runA, "exo-open --launch WebBrowser {}")
.then($.exit.bind(null, 0)).catch($.exit.bind(null, 1));
})
.parse();